Docs: Added contents for Vector Drawables
am: b4bab2d0ee
Change-Id: Ic7e9e869586e764896184ae0a3ba39d909b9702b
diff --git a/Android.mk b/Android.mk
index e741d9b..aca0df2 100644
--- a/Android.mk
+++ b/Android.mk
@@ -890,7 +890,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
@@ -899,7 +899,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)
@@ -919,6 +919,7 @@
LOCAL_DROIDDOC_OPTIONS:=\
$(framework_docs_LOCAL_DROIDDOC_OPTIONS) \
+ -referenceonly \
-api $(INTERNAL_PLATFORM_API_FILE) \
-removedApi $(INTERNAL_PLATFORM_REMOVED_API_FILE) \
-nodocs
@@ -952,6 +953,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) \
@@ -986,6 +988,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) \
@@ -1019,6 +1022,7 @@
LOCAL_DROIDDOC_OPTIONS:=\
$(framework_docs_LOCAL_DROIDDOC_OPTIONS) \
+ -referenceonly \
-parsecomments
LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR:=build/tools/droiddoc/templates-sdk
@@ -1057,7 +1061,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)
@@ -1100,7 +1104,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) $< $@
@@ -1132,7 +1136,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)
@@ -1156,6 +1160,7 @@
LOCAL_DROIDDOC_OPTIONS:= \
$(framework_docs_LOCAL_DROIDDOC_OPTIONS) \
+ -referenceonly \
-showAnnotation android.annotation.SystemApi \
-title "Android SDK - Including system APIs." \
-toroot / \
@@ -1192,17 +1197,67 @@
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)
+
+# ==== generates full navtree for resolving @links in ds postprocessing ====
+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_ADDITIONAL_JAVA_DIR:=$(framework_docs_LOCAL_ADDITIONAL_JAVA_DIR)
+LOCAL_ADDITIONAL_DEPENDENCIES:=$(framework_docs_LOCAL_ADDITIONAL_DEPENDENCIES)
+
+LOCAL_MODULE := ds-ref-navtree
+
+LOCAL_DROIDDOC_OPTIONS:= \
+ $(framework_docs_LOCAL_DROIDDOC_OPTIONS) \
+ -hdf android.whichdoc online \
+ -toroot / \
+ -atLinksNavtree \
+ -navtreeonly
+
+LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR:=build/tools/droiddoc/templates-sdk
include $(BUILD_DROIDDOC)
@@ -1227,11 +1282,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)
@@ -1250,6 +1304,7 @@
LOCAL_MODULE := hidden
LOCAL_DROIDDOC_OPTIONS:=\
$(framework_docs_LOCAL_DROIDDOC_OPTIONS) \
+ -referenceonly \
-title "Android SDK - Including hidden APIs."
# -hidden
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/AccountManager.java b/core/java/android/accounts/AccountManager.java
index 7465ed9..d3551b7 100644
--- a/core/java/android/accounts/AccountManager.java
+++ b/core/java/android/accounts/AccountManager.java
@@ -2676,8 +2676,6 @@
* <ul>
* <li>{@link #KEY_ACCOUNT_SESSION_BUNDLE} - encrypted Bundle for
* adding the the to the device later.
- * <li>{@link #KEY_PASSWORD} - optional, the password or password
- * hash of the account.
* <li>{@link #KEY_ACCOUNT_STATUS_TOKEN} - optional, token to check
* status of the account
* </ul>
@@ -2765,8 +2763,6 @@
* <ul>
* <li>{@link #KEY_ACCOUNT_SESSION_BUNDLE} - encrypted Bundle for
* updating the local credentials on device later.
- * <li>{@link #KEY_PASSWORD} - optional, the password or password
- * hash of the account
* <li>{@link #KEY_ACCOUNT_STATUS_TOKEN} - optional, token to check
* status of the account
* </ul>
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index ae3e0ce..b1a578d 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>
*
@@ -4467,7 +4467,7 @@
*
* @throws android.content.ActivityNotFoundException
*
- * @see {@link #startActivity(Intent, Bundle)}
+ * @see #startActivity(Intent, Bundle)
* @see #startActivityForResult
*/
@Override
@@ -4494,7 +4494,7 @@
*
* @throws android.content.ActivityNotFoundException
*
- * @see {@link #startActivity(Intent)}
+ * @see #startActivity(Intent)
* @see #startActivityForResult
*/
@Override
@@ -4516,7 +4516,7 @@
*
* @throws android.content.ActivityNotFoundException
*
- * @see {@link #startActivities(Intent[], Bundle)}
+ * @see #startActivities(Intent[], Bundle)
* @see #startActivityForResult
*/
@Override
@@ -4543,7 +4543,7 @@
*
* @throws android.content.ActivityNotFoundException
*
- * @see {@link #startActivities(Intent[])}
+ * @see #startActivities(Intent[])
* @see #startActivityForResult
*/
@Override
@@ -4923,7 +4923,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.
*
@@ -6105,7 +6105,6 @@
* the return value must be checked.
*
* @see #onVisibleBehindCanceled()
- * @see #onBackgroundVisibleBehindChanged(boolean)
*/
public boolean requestVisibleBehind(boolean visible) {
if (!mResumed) {
@@ -6133,7 +6132,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/DownloadManager.java b/core/java/android/app/DownloadManager.java
index eb07fbc..6e38347 100644
--- a/core/java/android/app/DownloadManager.java
+++ b/core/java/android/app/DownloadManager.java
@@ -1089,7 +1089,7 @@
if (cursor.moveToFirst()) {
int status = cursor.getInt(cursor.getColumnIndexOrThrow(COLUMN_STATUS));
if (DownloadManager.STATUS_SUCCESSFUL == status) {
- return ContentUris.withAppendedId(Downloads.Impl.CONTENT_URI, id);
+ return ContentUris.withAppendedId(Downloads.Impl.ALL_DOWNLOADS_CONTENT_URI, id);
}
}
} finally {
@@ -1425,7 +1425,7 @@
* @hide
*/
public Uri getDownloadUri(long id) {
- return ContentUris.withAppendedId(mBaseUri, id);
+ return ContentUris.withAppendedId(Downloads.Impl.ALL_DOWNLOADS_CONTENT_URI, id);
}
/**
@@ -1519,7 +1519,7 @@
// return content URI for cache download
long downloadId = getLong(getColumnIndex(Downloads.Impl._ID));
- return ContentUris.withAppendedId(mBaseUri, downloadId).toString();
+ return ContentUris.withAppendedId(Downloads.Impl.ALL_DOWNLOADS_CONTENT_URI, downloadId).toString();
}
private long getReason(int status) {
diff --git a/core/java/android/app/Fragment.java b/core/java/android/app/Fragment.java
index a637ef4..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>
@@ -1483,9 +1483,10 @@
* at this point. If you want to do work once the activity itself is
* created, see {@link #onActivityCreated(Bundle)}.
*
- * <p>If your app's <code>targetSdkVersion</code> is 23 or lower, child fragments
- * being restored from the savedInstanceState are restored after <code>onCreate</code>
- * returns. When targeting N or above and running on an N or newer platform version
+ * <p>If your app's <code>targetSdkVersion</code> is {@link android.os.Build.VERSION_CODES#M}
+ * or lower, child fragments being restored from the savedInstanceState are restored after
+ * <code>onCreate</code> returns. When targeting {@link android.os.Build.VERSION_CODES#N} or
+ * above and running on an N or newer platform version
* they are restored by <code>Fragment.onCreate</code>.</p>
*
* @param savedInstanceState If the fragment is being re-created from
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/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..6d6dfeb 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}
@@ -1164,12 +1167,12 @@
/**
* Confirm passkey for {@link #PAIRING_VARIANT_PASSKEY_CONFIRMATION} pairing.
- * <p>Requires {@link android.Manifest.permission#BLUETOOTH_ADMIN}.
+ * <p>Requires {@link android.Manifest.permission#BLUETOOTH_PRIVILEGED}.
*
* @return true confirmation has been sent out
* false for error
*/
- @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
+ @RequiresPermission(Manifest.permission.BLUETOOTH_PRIVILEGED)
public boolean setPairingConfirmation(boolean confirm) {
if (sService == null) {
Log.e(TAG, "BT not enabled. Cannot set pairing confirmation");
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/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/SharedPreferences.java b/core/java/android/content/SharedPreferences.java
index 7f9e176..4b09fed 100644
--- a/core/java/android/content/SharedPreferences.java
+++ b/core/java/android/content/SharedPreferences.java
@@ -72,7 +72,9 @@
* {@link #commit} or {@link #apply} are called.
*
* @param key The name of the preference to modify.
- * @param value The new value for the preference.
+ * @param value The new value for the preference. Passing {@code null}
+ * for this argument is equivalent to calling {@link #remove(String)} with
+ * this key.
*
* @return Returns a reference to the same Editor object, so you can
* chain put calls together.
diff --git a/core/java/android/database/CursorJoiner.java b/core/java/android/database/CursorJoiner.java
index e3c2988..a95263b 100644
--- a/core/java/android/database/CursorJoiner.java
+++ b/core/java/android/database/CursorJoiner.java
@@ -27,7 +27,7 @@
*
* <pre>
* CursorJoiner joiner = new CursorJoiner(cursorA, keyColumnsofA, cursorB, keyColumnsofB);
- * for (CursorJointer.Result joinerResult : joiner) {
+ * for (CursorJoiner.Result joinerResult : joiner) {
* switch (joinerResult) {
* case LEFT:
* // handle case where a row in cursorA is unique
diff --git a/core/java/android/database/sqlite/SQLiteDatabase.java b/core/java/android/database/sqlite/SQLiteDatabase.java
index 0f64b92..8e17832 100644
--- a/core/java/android/database/sqlite/SQLiteDatabase.java
+++ b/core/java/android/database/sqlite/SQLiteDatabase.java
@@ -1371,6 +1371,7 @@
/**
* Convenience method for replacing a row in the database.
+ * Inserts a new row if a row does not already exist.
*
* @param table the table in which to replace the row
* @param nullColumnHack optional; may be <code>null</code>.
@@ -1381,7 +1382,7 @@
* provides the name of nullable column name to explicitly insert a NULL into
* in the case where your <code>initialValues</code> is empty.
* @param initialValues this map contains the initial column values for
- * the row.
+ * the row. The keys should be the column names and the values the column values.
* @return the row ID of the newly inserted row, or -1 if an error occurred
*/
public long replace(String table, String nullColumnHack, ContentValues initialValues) {
@@ -1396,6 +1397,7 @@
/**
* Convenience method for replacing a row in the database.
+ * Inserts a new row if a row does not already exist.
*
* @param table the table in which to replace the row
* @param nullColumnHack optional; may be <code>null</code>.
@@ -1406,7 +1408,7 @@
* provides the name of nullable column name to explicitly insert a NULL into
* in the case where your <code>initialValues</code> is empty.
* @param initialValues this map contains the initial column values for
- * the row. The key
+ * the row. The keys should be the column names and the values the column values.
* @throws SQLException
* @return the row ID of the newly inserted row, or -1 if an error occurred
*/
@@ -1740,7 +1742,7 @@
* Returns true if the new version code is greater than the current database version.
*
* @param newVersion The new version code.
- * @return True if the new version code is greater than the current database version.
+ * @return True if the new version code is greater than the current database version.
*/
public boolean needUpgrade(int newVersion) {
return newVersion > getVersion();
diff --git a/core/java/android/database/sqlite/package.html b/core/java/android/database/sqlite/package.html
index ceed171..864a9bb 100644
--- a/core/java/android/database/sqlite/package.html
+++ b/core/java/android/database/sqlite/package.html
@@ -6,15 +6,44 @@
Applications use these classes to manage private databases. If creating a
content provider, you will probably have to use these classes to create and
manage your own database to store content. See <a
-href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a> to learn
-the conventions for implementing a content provider. See the
-NotePadProvider class in the NotePad sample application in the SDK for an
-example of a content provider. Android ships with SQLite version 3.4.0
-<p>If you are working with data sent to you by a provider, you will not use
-these SQLite classes, but instead use the generic {@link android.database}
-classes.
-<p>Android ships with the sqlite3 database tool in the <code>tools/</code>
-folder. You can use this tool to browse or run SQL commands on the device. Run by
-typing <code>sqlite3</code> in a shell window.
+href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a>
+to learn the conventions for implementing a content provider. If you are working
+with data sent to you by a provider, you do not use these SQLite classes, but
+instead use the generic {@link android.database} classes.
+
+<p>The Android SDK and Android emulators both include the
+<a href="{@docRoot}studio/command-line/sqlite3.html">sqlite3</a> command-line
+database tool. On your development machine, run the tool from the
+<code>platform-tools/</code> folder of your SDK. On the emulator, run the tool
+with adb shell, for example, <code>adb -e shell sqlite3</code>.
+
+<p>The version of SQLite depends on the version of Android. See the following table:
+<table style="width:auto;">
+ <tr><th>Android API</th><th>SQLite Version</th></tr>
+ <tr><td>API 24</td><td>3.9</td></tr>
+ <tr><td>API 21</td><td>3.8</td></tr>
+ <tr><td>API 11</td><td>3.7</td></tr>
+ <tr><td>API 8</td><td>3.6</td></tr>
+ <tr><td>API 3</td><td>3.5</td></tr>
+ <tr><td>API 1</td><td>3.4</td></tr>
+</table>
+
+<p>Some device manufacturers include different versions of SQLite on their devices.
+ There are two ways to programmatically determine the version number.
+
+<ul>
+ <li>If available, use the sqlite3 tool, for example:
+ <code>adb -e shell sqlite3 --version</code>.</li>
+ <li>Create and query an in-memory database as shown in the following code sample:
+ <pre>
+ String query = "select sqlite_version() AS sqlite_version";
+ SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(":memory:", null);
+ Cursor cursor = db.rawQuery(query, null);
+ String sqliteVersion = "";
+ if (cursor.moveToNext()) {
+ sqliteVersion = cursor.getString(0);
+ }</pre>
+ </li>
+</ul>
</BODY>
</HTML>
diff --git a/core/java/android/os/AsyncTask.java b/core/java/android/os/AsyncTask.java
index 63f39c5..4f4e722 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>
*
diff --git a/core/java/android/os/Build.java b/core/java/android/os/Build.java
index dc7be6b..06a4502 100644
--- a/core/java/android/os/Build.java
+++ b/core/java/android/os/Build.java
@@ -669,7 +669,47 @@
public static final int M = 23;
/**
- * N is for ¯\_(ツ)_/¯.
+ * N is for Nougat.
+ *
+ * <p>Applications targeting this or a later release will get these
+ * new changes in behavior:</p>
+ * <ul>
+ * <li> {@link android.app.DownloadManager.Request#setAllowedNetworkTypes
+ * DownloadManager.Request.setAllowedNetworkTypes}
+ * will disable "allow over metered" when specifying only
+ * {@link android.app.DownloadManager.Request#NETWORK_WIFI}.</li>
+ * <li> {@link android.app.DownloadManager} no longer allows access to raw
+ * file paths.</li>
+ * <li> {@link android.app.Notification.Builder#setShowWhen
+ * Notification.Builder.setShowWhen}
+ * must be called explicitly to have the time shown, and various other changes in
+ * {@link android.app.Notification.Builder Notification.Builder} to how notifications
+ * are shown.</li>
+ * <li>{@link android.content.Context#MODE_WORLD_READABLE} and
+ * {@link android.content.Context#MODE_WORLD_WRITEABLE} are no longer supported.</li>
+ * <li>{@link android.os.FileUriExposedException} will be thrown to applications.</li>
+ * <li>Applications will see global drag and drops as per
+ * {@link android.view.View#DRAG_FLAG_GLOBAL}.</li>
+ * <li>{@link android.webkit.WebView#evaluateJavascript WebView.evaluateJavascript}
+ * will not persist state from an empty WebView.</li>
+ * <li>{@link android.animation.AnimatorSet} will not ignore calls to end() before
+ * start().</li>
+ * <li>{@link android.app.AlarmManager#cancel(android.app.PendingIntent)
+ * AlarmManager.cancel} will throw a NullPointerException if given a null operation.</li>
+ * <li>{@link android.app.FragmentManager} will ensure fragments have been created
+ * before being placed on the back stack.</li>
+ * <li>{@link android.app.FragmentManager} restores fragments in
+ * {@link android.app.Fragment#onCreate Fragment.onCreate} rather than after the
+ * method returns.</li>
+ * <li>{@link android.R.attr#resizeableActivity} defaults to true.</li>
+ * <li>{@link android.graphics.drawable.AnimatedVectorDrawable} throws exceptions when
+ * opening invalid VectorDrawable animations.</li>
+ * <li>{@link android.view.ViewGroup.MarginLayoutParams} will no longer be dropped
+ * when converting between some types of layout params (such as
+ * {@link android.widget.LinearLayout.LayoutParams LinearLayout.LayoutParams} to
+ * {@link android.widget.RelativeLayout.LayoutParams RelativeLayout.LayoutParams}).</li>
+ * <li>Your application processes will not be killed when the device density changes.</li>
+ * </ul>
*/
public static final int N = 24;
}
diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java
index f664e70..21b3f6e 100644
--- a/core/java/android/os/Process.java
+++ b/core/java/android/os/Process.java
@@ -559,6 +559,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:
@@ -575,13 +584,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();
}
@@ -590,11 +594,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/provider/Settings.java b/core/java/android/provider/Settings.java
index 9c567a9..42ac76b 100755
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -6236,6 +6236,12 @@
"managed_profile_contact_remote_search";
/**
+ * Holds comma separated list of ordering of QS tiles.
+ * @hide
+ */
+ public static final String QS_TILES = "sysui_qs_tiles";
+
+ /**
* This are the settings to be backed up.
*
* NOTE: Settings are backed up and restored in the order they appear
@@ -6308,7 +6314,8 @@
PREFERRED_TTY_MODE,
ENHANCED_VOICE_PRIVACY_ENABLED,
TTY_MODE_ENABLED,
- INCALL_POWER_BUTTON_BEHAVIOR
+ INCALL_POWER_BUTTON_BEHAVIOR,
+ QS_TILES,
};
/**
diff --git a/core/java/android/text/SpannableStringInternal.java b/core/java/android/text/SpannableStringInternal.java
index 47e71be..4b02df86 100644
--- a/core/java/android/text/SpannableStringInternal.java
+++ b/core/java/android/text/SpannableStringInternal.java
@@ -33,6 +33,7 @@
mText = source.toString().substring(start, end);
mSpans = EmptyArray.OBJECT;
+ // Invariant: mSpanData.length = mSpans.length * COLUMNS
mSpanData = EmptyArray.INT;
if (source instanceof Spanned) {
@@ -99,7 +100,7 @@
Object[] srcSpans = src.mSpans;
mSpanCount = count;
mSpans = ArrayUtils.newUnpaddedObjectArray(mSpanCount);
- mSpanData = new int[mSpanCount * COLUMNS];
+ mSpanData = new int[mSpans.length * COLUMNS];
for (int i = 0, j = 0; i < limit; i++) {
int spanStart = srcData[i * COLUMNS + START];
int spanEnd = srcData[i * COLUMNS + END];
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/TextureView.java b/core/java/android/view/TextureView.java
index 1a712c3..9461bea 100644
--- a/core/java/android/view/TextureView.java
+++ b/core/java/android/view/TextureView.java
@@ -218,15 +218,32 @@
/** @hide */
@Override
protected void onDetachedFromWindowInternal() {
- destroySurface();
+ destroyHardwareLayer();
+ releaseSurfaceTexture();
super.onDetachedFromWindowInternal();
}
- private void destroySurface() {
+ /**
+ * @hide
+ */
+ @Override
+ protected void destroyHardwareResources() {
+ destroyHardwareLayer();
+ }
+
+ private void destroyHardwareLayer() {
if (mLayer != null) {
mLayer.detachSurfaceTexture();
+ mLayer.destroy();
+ mLayer = null;
+ mMatrixChanged = true;
+ }
+ }
+ private void releaseSurfaceTexture() {
+ if (mSurface != null) {
boolean shouldRelease = true;
+
if (mListener != null) {
shouldRelease = mListener.onSurfaceTextureDestroyed(mSurface);
}
@@ -235,14 +252,10 @@
nDestroyNativeWindow();
}
- mLayer.destroy();
- if (shouldRelease) mSurface.release();
+ if (shouldRelease) {
+ mSurface.release();
+ }
mSurface = null;
- mLayer = null;
-
- // Make sure if/when new layer gets re-created, transform matrix will
- // be re-applied.
- mMatrixChanged = true;
mHadSurface = true;
}
}
@@ -355,17 +368,6 @@
}
}
- /**
- * @hide
- */
- @Override
- protected void destroyHardwareResources() {
- super.destroyHardwareResources();
- destroySurface();
- invalidateParentCaches();
- invalidate(true);
- }
-
HardwareLayer getHardwareLayer() {
if (mLayer == null) {
if (mAttachInfo == null || mAttachInfo.mHardwareRenderer == null) {
@@ -373,17 +375,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());
- nCreateNativeWindow(mSurface);
-
mSurface.setOnFrameAvailableListener(mUpdateListener, mAttachInfo.mHandler);
- if (mListener != null && !mUpdateSurface) {
+ if (mListener != null && createNewSurface) {
mListener.onSurfaceTextureAvailable(mSurface, getWidth(), getHeight());
}
mLayer.setLayerPaint(mLayerPaint);
@@ -717,7 +719,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>
@@ -742,9 +744,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 a64827a..854b28d 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -3748,9 +3748,9 @@
* {@link android.os.Build.VERSION_CODES#N API 24} will be able to participate
* in the drag operation and receive the dragged content.
*
- * If this is the only flag set, then the drag recipient will only have access to text data
+ * <p>If this is the only flag set, then the drag recipient will only have access to text data
* and intents contained in the {@link ClipData} object. Access to URIs contained in the
- * {@link ClipData} is determined by other DRAG_FLAG_GLOBAL_* flags.
+ * {@link ClipData} is determined by other DRAG_FLAG_GLOBAL_* flags</p>
*/
public static final int DRAG_FLAG_GLOBAL = 1 << 8; // 256
@@ -7991,7 +7991,7 @@
}
/**
- * Set the enabled state of this view.
+ * Set the visibility state of this view.
*
* @param visibility One of {@link #VISIBLE}, {@link #INVISIBLE}, or {@link #GONE}.
* @attr ref android.R.styleable#View_visibility
@@ -9817,6 +9817,9 @@
public void dispatchFinishTemporaryDetach() {
onFinishTemporaryDetach();
mPrivateFlags3 &= ~PFLAG3_TEMPORARY_DETACH;
+ if (hasWindowFocus() && hasFocus()) {
+ InputMethodManager.getInstance().focusIn(this);
+ }
}
/**
@@ -20521,8 +20524,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
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index b331be7..5ba1e9d 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -2315,22 +2315,24 @@
}
/**
- * Get a view and have it show the data associated with the specified
- * position. This is called when we have already discovered that the view is
- * not available for reuse in the recycle bin. The only choices left are
+ * Gets a view and have it show the data associated with the specified
+ * position. This is called when we have already discovered that the view
+ * is not available for reuse in the recycle bin. The only choices left are
* converting an old view or making a new one.
*
- * @param position The position to display
- * @param isScrap Array of at least 1 boolean, the first entry will become true if
- * the returned view was taken from the "temporary detached" scrap heap, false if
- * otherwise.
+ * @param position the position to display
+ * @param outMetadata an array of at least 1 boolean where the first entry
+ * will be set {@code true} if the view is currently
+ * attached to the window, {@code false} otherwise (e.g.
+ * newly-inflated or remained scrap for multiple layout
+ * passes)
*
* @return A view displaying the data associated with the specified position
*/
- View obtainView(int position, boolean[] isScrap) {
+ View obtainView(int position, boolean[] outMetadata) {
Trace.traceBegin(Trace.TRACE_TAG_VIEW, "obtainView");
- isScrap[0] = false;
+ outMetadata[0] = false;
// Check whether we have a transient state view. Attempt to re-bind the
// data and discard the view if we fail.
@@ -2349,7 +2351,7 @@
}
}
- isScrap[0] = true;
+ outMetadata[0] = true;
// Finish the temporary detach started in addScrapView().
transientView.dispatchFinishTemporaryDetach();
@@ -2362,19 +2364,11 @@
if (child != scrapView) {
// Failed to re-bind the data, return scrap to the heap.
mRecycler.addScrapView(scrapView, position);
- } else {
- if (child.isTemporarilyDetached()) {
- isScrap[0] = true;
+ } else if (child.isTemporarilyDetached()) {
+ outMetadata[0] = true;
- // Finish the temporary detach started in addScrapView().
- child.dispatchFinishTemporaryDetach();
- } else {
- // we set isScrap to "true" only if the view is temporarily detached.
- // if the view is fully detached, it is as good as a view created by the
- // adapter
- isScrap[0] = false;
- }
-
+ // Finish the temporary detach started in addScrapView().
+ child.dispatchFinishTemporaryDetach();
}
}
diff --git a/core/java/android/widget/GridView.java b/core/java/android/widget/GridView.java
index 6d7313d..b95aa52 100644
--- a/core/java/android/widget/GridView.java
+++ b/core/java/android/widget/GridView.java
@@ -1407,72 +1407,73 @@
/**
- * Obtain the view and add it to our list of children. The view can be made
- * fresh, converted from an unused view, or used as is if it was in the
- * recycle bin.
+ * Obtains the view and adds it to our list of children. The view can be
+ * made fresh, converted from an unused view, or used as is if it was in
+ * the recycle bin.
*
- * @param position Logical position in the list
- * @param y Top or bottom edge of the view to add
- * @param flow if true, align top edge to y. If false, align bottom edge to
- * y.
- * @param childrenLeft Left edge where children should be positioned
- * @param selected Is this position selected?
- * @param where to add new item in the list
+ * @param position logical position in the list
+ * @param y top or bottom edge of the view to add
+ * @param flow {@code true} to align top edge to y, {@code false} to align
+ * bottom edge to y
+ * @param childrenLeft left edge where children should be positioned
+ * @param selected {@code true} if the position is selected, {@code false}
+ * otherwise
+ * @param where position at which to add new item in the list
* @return View that was added
*/
private View makeAndAddView(int position, int y, boolean flow, int childrenLeft,
boolean selected, int where) {
- View child;
-
if (!mDataChanged) {
// Try to use an existing view for this position
- child = mRecycler.getActiveView(position);
- if (child != null) {
+ final View activeView = mRecycler.getActiveView(position);
+ if (activeView != null) {
// Found it -- we're using an existing child
// This just needs to be positioned
- setupChild(child, position, y, flow, childrenLeft, selected, true, where);
- return child;
+ setupChild(activeView, position, y, flow, childrenLeft, selected, true, where);
+ return activeView;
}
}
// Make a new view for this position, or convert an unused view if
- // possible
- child = obtainView(position, mIsScrap);
+ // possible.
+ final View child = obtainView(position, mIsScrap);
- // This needs to be positioned and measured
+ // This needs to be positioned and measured.
setupChild(child, position, y, flow, childrenLeft, selected, mIsScrap[0], where);
return child;
}
/**
- * Add a view as a child and make sure it is measured (if necessary) and
+ * Adds a view as a child and make sure it is measured (if necessary) and
* positioned properly.
*
- * @param child The view to add
- * @param position The position of the view
- * @param y The y position relative to which this view will be positioned
- * @param flow if true, align top edge to y. If false, align bottom edge
- * to y.
- * @param childrenLeft Left edge where children should be positioned
- * @param selected Is this position selected?
- * @param recycled Has this view been pulled from the recycle bin? If so it
- * does not need to be remeasured.
- * @param where Where to add the item in the list
+ * @param child the view to add
+ * @param position the position of this child
+ * @param y the y position relative to which this view will be positioned
+ * @param flowDown {@code true} to align top edge to y, {@code false} to
+ * align bottom edge to y
+ * @param childrenLeft left edge where children should be positioned
+ * @param selected {@code true} if the position is selected, {@code false}
+ * otherwise
+ * @param isAttachedToWindow {@code true} if the view is already attached
+ * to the window, e.g. whether it was reused, or
+ * {@code false} otherwise
+ * @param where position at which to add new item in the list
*
*/
- private void setupChild(View child, int position, int y, boolean flow, int childrenLeft,
- boolean selected, boolean recycled, int where) {
+ private void setupChild(View child, int position, int y, boolean flowDown, int childrenLeft,
+ boolean selected, boolean isAttachedToWindow, int where) {
Trace.traceBegin(Trace.TRACE_TAG_VIEW, "setupGridItem");
boolean isSelected = selected && shouldShowSelector();
final boolean updateChildSelected = isSelected != child.isSelected();
final int mode = mTouchMode;
- final boolean isPressed = mode > TOUCH_MODE_DOWN && mode < TOUCH_MODE_SCROLL &&
- mMotionPosition == position;
+ final boolean isPressed = mode > TOUCH_MODE_DOWN && mode < TOUCH_MODE_SCROLL
+ && mMotionPosition == position;
final boolean updateChildPressed = isPressed != child.isPressed();
-
- boolean needToMeasure = !recycled || updateChildSelected || child.isLayoutRequested();
+ final boolean needToMeasure = !isAttachedToWindow || updateChildSelected
+ || child.isLayoutRequested();
// Respect layout params that are already in the view. Otherwise make
// some up...
@@ -1483,13 +1484,9 @@
p.viewType = mAdapter.getItemViewType(position);
p.isEnabled = mAdapter.isEnabled(position);
- if (recycled && !p.forceAdd) {
- attachViewToParent(child, where, p);
- } else {
- p.forceAdd = false;
- addViewInLayout(child, where, p, true);
- }
-
+ // Set up view state before attaching the view, since we may need to
+ // rely on the jumpDrawablesToCurrentState() call that occurs as part
+ // of view attachment.
if (updateChildSelected) {
child.setSelected(isSelected);
if (isSelected) {
@@ -1510,6 +1507,21 @@
}
}
+ if (isAttachedToWindow && !p.forceAdd) {
+ attachViewToParent(child, where, p);
+
+ // If the view isn't attached, or if it's attached but for a different
+ // position, then jump the drawables.
+ if (!isAttachedToWindow
+ || (((AbsListView.LayoutParams) child.getLayoutParams()).scrappedFromPosition)
+ != position) {
+ child.jumpDrawablesToCurrentState();
+ }
+ } else {
+ p.forceAdd = false;
+ addViewInLayout(child, where, p, true);
+ }
+
if (needToMeasure) {
int childHeightSpec = ViewGroup.getChildMeasureSpec(
MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 0, p.height);
@@ -1525,7 +1537,7 @@
final int h = child.getMeasuredHeight();
int childLeft;
- final int childTop = flow ? y : y - h;
+ final int childTop = flowDown ? y : y - h;
final int layoutDirection = getLayoutDirection();
final int absoluteGravity = Gravity.getAbsoluteGravity(mGravity, layoutDirection);
@@ -1553,15 +1565,10 @@
child.offsetTopAndBottom(childTop - child.getTop());
}
- if (mCachingStarted) {
+ if (mCachingStarted && !child.isDrawingCacheEnabled()) {
child.setDrawingCacheEnabled(true);
}
- if (recycled && (((AbsListView.LayoutParams)child.getLayoutParams()).scrappedFromPosition)
- != position) {
- child.jumpDrawablesToCurrentState();
- }
-
Trace.traceEnd(Trace.TRACE_TAG_VIEW);
}
diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java
index 0e04e30..b8b7c55 100644
--- a/core/java/android/widget/ListView.java
+++ b/core/java/android/widget/ListView.java
@@ -1939,72 +1939,73 @@
}
/**
- * Obtain the view and add it to our list of children. The view can be made
- * fresh, converted from an unused view, or used as is if it was in the
- * recycle bin.
+ * Obtains the view and adds it to our list of children. The view can be
+ * made fresh, converted from an unused view, or used as is if it was in
+ * the recycle bin.
*
- * @param position Logical position in the list
- * @param y Top or bottom edge of the view to add
- * @param flow If flow is true, align top edge to y. If false, align bottom
- * edge to y.
- * @param childrenLeft Left edge where children should be positioned
- * @param selected Is this position selected?
- * @return View that was added
+ * @param position logical position in the list
+ * @param y top or bottom edge of the view to add
+ * @param flow {@code true} to align top edge to y, {@code false} to align
+ * bottom edge to y
+ * @param childrenLeft left edge where children should be positioned
+ * @param selected {@code true} if the position is selected, {@code false}
+ * otherwise
+ * @return the view that was added
*/
private View makeAndAddView(int position, int y, boolean flow, int childrenLeft,
boolean selected) {
- View child;
-
-
if (!mDataChanged) {
- // Try to use an existing view for this position
- child = mRecycler.getActiveView(position);
- if (child != null) {
- // Found it -- we're using an existing child
- // This just needs to be positioned
- setupChild(child, position, y, flow, childrenLeft, selected, true);
-
- return child;
+ // Try to use an existing view for this position.
+ final View activeView = mRecycler.getActiveView(position);
+ if (activeView != null) {
+ // Found it. We're reusing an existing child, so it just needs
+ // to be positioned like a scrap view.
+ setupChild(activeView, position, y, flow, childrenLeft, selected, true);
+ return activeView;
}
}
- // Make a new view for this position, or convert an unused view if possible
- child = obtainView(position, mIsScrap);
+ // Make a new view for this position, or convert an unused view if
+ // possible.
+ final View child = obtainView(position, mIsScrap);
- // This needs to be positioned and measured
+ // This needs to be positioned and measured.
setupChild(child, position, y, flow, childrenLeft, selected, mIsScrap[0]);
return child;
}
/**
- * Add a view as a child and make sure it is measured (if necessary) and
+ * Adds a view as a child and make sure it is measured (if necessary) and
* positioned properly.
*
- * @param child The view to add
- * @param position The position of this child
- * @param y The y position relative to which this view will be positioned
- * @param flowDown If true, align top edge to y. If false, align bottom
- * edge to y.
- * @param childrenLeft Left edge where children should be positioned
- * @param selected Is this position selected?
- * @param recycled Has this view been pulled from the recycle bin? If so it
- * does not need to be remeasured.
+ * @param child the view to add
+ * @param position the position of this child
+ * @param y the y position relative to which this view will be positioned
+ * @param flowDown {@code true} to align top edge to y, {@code false} to
+ * align bottom edge to y
+ * @param childrenLeft left edge where children should be positioned
+ * @param selected {@code true} if the position is selected, {@code false}
+ * otherwise
+ * @param isAttachedToWindow {@code true} if the view is already attached
+ * to the window, e.g. whether it was reused, or
+ * {@code false} otherwise
*/
private void setupChild(View child, int position, int y, boolean flowDown, int childrenLeft,
- boolean selected, boolean recycled) {
+ boolean selected, boolean isAttachedToWindow) {
Trace.traceBegin(Trace.TRACE_TAG_VIEW, "setupListItem");
final boolean isSelected = selected && shouldShowSelector();
final boolean updateChildSelected = isSelected != child.isSelected();
final int mode = mTouchMode;
- final boolean isPressed = mode > TOUCH_MODE_DOWN && mode < TOUCH_MODE_SCROLL &&
- mMotionPosition == position;
+ final boolean isPressed = mode > TOUCH_MODE_DOWN && mode < TOUCH_MODE_SCROLL
+ && mMotionPosition == position;
final boolean updateChildPressed = isPressed != child.isPressed();
- final boolean needToMeasure = !recycled || updateChildSelected || child.isLayoutRequested();
+ final boolean needToMeasure = !isAttachedToWindow || updateChildSelected
+ || child.isLayoutRequested();
- // Respect layout params that are already in the view. Otherwise make some up...
- // noinspection unchecked
+ // Respect layout params that are already in the view. Otherwise make
+ // some up...
AbsListView.LayoutParams p = (AbsListView.LayoutParams) child.getLayoutParams();
if (p == null) {
p = (AbsListView.LayoutParams) generateDefaultLayoutParams();
@@ -2012,17 +2013,9 @@
p.viewType = mAdapter.getItemViewType(position);
p.isEnabled = mAdapter.isEnabled(position);
- if ((recycled && !p.forceAdd) || (p.recycledHeaderFooter
- && p.viewType == AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER)) {
- attachViewToParent(child, flowDown ? -1 : 0, p);
- } else {
- p.forceAdd = false;
- if (p.viewType == AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER) {
- p.recycledHeaderFooter = true;
- }
- addViewInLayout(child, flowDown ? -1 : 0, p, true);
- }
-
+ // Set up view state before attaching the view, since we may need to
+ // rely on the jumpDrawablesToCurrentState() call that occurs as part
+ // of view attachment.
if (updateChildSelected) {
child.setSelected(isSelected);
}
@@ -2040,6 +2033,25 @@
}
}
+ if ((isAttachedToWindow && !p.forceAdd) || (p.recycledHeaderFooter
+ && p.viewType == AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER)) {
+ attachViewToParent(child, flowDown ? -1 : 0, p);
+
+ // If the view was previously attached for a different position,
+ // then manually jump the drawables.
+ if (isAttachedToWindow
+ && (((AbsListView.LayoutParams) child.getLayoutParams()).scrappedFromPosition)
+ != position) {
+ child.jumpDrawablesToCurrentState();
+ }
+ } else {
+ p.forceAdd = false;
+ if (p.viewType == AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER) {
+ p.recycledHeaderFooter = true;
+ }
+ addViewInLayout(child, flowDown ? -1 : 0, p, true);
+ }
+
if (needToMeasure) {
final int childWidthSpec = ViewGroup.getChildMeasureSpec(mWidthMeasureSpec,
mListPadding.left + mListPadding.right, p.width);
@@ -2073,11 +2085,6 @@
child.setDrawingCacheEnabled(true);
}
- if (recycled && (((AbsListView.LayoutParams)child.getLayoutParams()).scrappedFromPosition)
- != position) {
- child.jumpDrawablesToCurrentState();
- }
-
Trace.traceEnd(Trace.TRACE_TAG_VIEW);
}
diff --git a/core/java/android/widget/Switch.java b/core/java/android/widget/Switch.java
index c4a1771..a01d65a 100644
--- a/core/java/android/widget/Switch.java
+++ b/core/java/android/widget/Switch.java
@@ -65,6 +65,9 @@
* {@link #setSwitchTextAppearance(android.content.Context, int) switchTextAppearance} and
* the related setSwitchTypeface() methods control that of the thumb.
*
+ * <p>{@link android.support.v7.widget.SwitchCompat} is a version of
+ * the Switch widget which runs on devices back to API 7.</p>
+ *
* <p>See the <a href="{@docRoot}guide/topics/ui/controls/togglebutton.html">Toggle Buttons</a>
* guide.</p>
*
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 5cbd284..6faa2eb9 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -3234,6 +3234,10 @@
* Sets the text color for all the states (normal, selected,
* focused) to be this color.
*
+ * @param color A color value in the form 0xAARRGGBB.
+ * Do not pass a resource ID. To get a color value from a resource ID, call
+ * {@link android.support.v4.content.ContextCompat#getColor(Context, int) getColor}.
+ *
* @see #setTextColor(ColorStateList)
* @see #getTextColors()
*
diff --git a/core/java/com/android/internal/view/FloatingActionMode.java b/core/java/com/android/internal/view/FloatingActionMode.java
index 31ab26f..831c646 100644
--- a/core/java/com/android/internal/view/FloatingActionMode.java
+++ b/core/java/com/android/internal/view/FloatingActionMode.java
@@ -26,6 +26,7 @@
import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.view.ViewParent;
+import android.util.DisplayMetrics;
import com.android.internal.R;
import com.android.internal.util.Preconditions;
@@ -209,11 +210,9 @@
}
private boolean isContentRectWithinBounds() {
- mScreenRect.set(
- 0,
- 0,
- mContext.getResources().getDisplayMetrics().widthPixels,
- mContext.getResources().getDisplayMetrics().heightPixels);
+ DisplayMetrics metrics = mContext.getApplicationContext()
+ .getResources().getDisplayMetrics();
+ mScreenRect.set(0, 0, metrics.widthPixels, metrics.heightPixels);
return intersectsClosed(mContentRectOnScreen, mScreenRect)
&& intersectsClosed(mContentRectOnScreen, mViewRectOnScreen);
diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java
index 2e0dfa5..7f2f740 100644
--- a/core/java/com/android/internal/widget/LockPatternUtils.java
+++ b/core/java/com/android/internal/widget/LockPatternUtils.java
@@ -354,7 +354,7 @@
return false;
}
} catch (RemoteException re) {
- return true;
+ return false;
}
}
@@ -435,7 +435,7 @@
return false;
}
} catch (RemoteException re) {
- return true;
+ return false;
}
}
diff --git a/core/java/com/android/internal/widget/ResolverDrawerLayout.java b/core/java/com/android/internal/widget/ResolverDrawerLayout.java
index 8b9d503..e84cc27 100644
--- a/core/java/com/android/internal/widget/ResolverDrawerLayout.java
+++ b/core/java/com/android/internal/widget/ResolverDrawerLayout.java
@@ -245,7 +245,7 @@
final float y = ev.getY();
mInitialTouchX = x;
mInitialTouchY = mLastTouchY = y;
- mOpenOnClick = isListChildUnderClipped(x, y) && mCollapsibleHeight > 0;
+ mOpenOnClick = isListChildUnderClipped(x, y) && mCollapseOffset > 0;
}
break;
diff --git a/core/jni/android/graphics/Bitmap.cpp b/core/jni/android/graphics/Bitmap.cpp
index d681246..c3ebea4 100755
--- a/core/jni/android/graphics/Bitmap.cpp
+++ b/core/jni/android/graphics/Bitmap.cpp
@@ -150,12 +150,12 @@
mPixelRef->unref();
}
-Bitmap::Bitmap(void* address, int fd,
+Bitmap::Bitmap(void* address, int fd, size_t mappedSize,
const SkImageInfo& info, size_t rowBytes, SkColorTable* ctable)
: mPixelStorageType(PixelStorageType::Ashmem) {
mPixelStorage.ashmem.address = address;
mPixelStorage.ashmem.fd = fd;
- mPixelStorage.ashmem.size = ashmem_get_size_region(fd);
+ mPixelStorage.ashmem.size = mappedSize;
mPixelRef.reset(new WrappedPixelRef(this, address, info, rowBytes, ctable));
// Note: this will trigger a call to onStrongRefDestroyed(), but
// we want the pixel ref to have a ref count of 0 at this point
@@ -1026,7 +1026,7 @@
// Map the pixels in place and take ownership of the ashmem region.
nativeBitmap = GraphicsJNI::mapAshmemPixelRef(env, bitmap.get(),
- ctable, dupFd, const_cast<void*>(blob.data()), !isMutable);
+ ctable, dupFd, const_cast<void*>(blob.data()), size, !isMutable);
SkSafeUnref(ctable);
if (!nativeBitmap) {
close(dupFd);
diff --git a/core/jni/android/graphics/Bitmap.h b/core/jni/android/graphics/Bitmap.h
index eadba5c..aaea178 100644
--- a/core/jni/android/graphics/Bitmap.h
+++ b/core/jni/android/graphics/Bitmap.h
@@ -51,8 +51,8 @@
const SkImageInfo& info, size_t rowBytes, SkColorTable* ctable);
Bitmap(void* address, void* context, FreeFunc freeFunc,
const SkImageInfo& info, size_t rowBytes, SkColorTable* ctable);
- Bitmap(void* address, int fd, const SkImageInfo& info, size_t rowBytes,
- SkColorTable* ctable);
+ Bitmap(void* address, int fd, size_t mappedSize, const SkImageInfo& info,
+ size_t rowBytes, SkColorTable* ctable);
const SkImageInfo& info() const;
diff --git a/core/jni/android/graphics/Graphics.cpp b/core/jni/android/graphics/Graphics.cpp
index 528541d..889a3db 100644
--- a/core/jni/android/graphics/Graphics.cpp
+++ b/core/jni/android/graphics/Graphics.cpp
@@ -613,7 +613,7 @@
return nullptr;
}
- android::Bitmap* wrapper = new android::Bitmap(addr, fd, info, rowBytes, ctable);
+ android::Bitmap* wrapper = new android::Bitmap(addr, fd, size, info, rowBytes, ctable);
wrapper->getSkBitmap(bitmap);
// since we're already allocated, we lockPixels right away
// HeapAllocator behaves this way too
@@ -623,7 +623,7 @@
}
android::Bitmap* GraphicsJNI::mapAshmemPixelRef(JNIEnv* env, SkBitmap* bitmap,
- SkColorTable* ctable, int fd, void* addr, bool readOnly) {
+ SkColorTable* ctable, int fd, void* addr, size_t size, bool readOnly) {
const SkImageInfo& info = bitmap->info();
if (info.colorType() == kUnknown_SkColorType) {
doThrowIAE(env, "unknown bitmap configuration");
@@ -633,7 +633,8 @@
if (!addr) {
// Map existing ashmem region if not already mapped.
int flags = readOnly ? (PROT_READ) : (PROT_READ | PROT_WRITE);
- addr = mmap(NULL, ashmem_get_size_region(fd), flags, MAP_SHARED, fd, 0);
+ size = ashmem_get_size_region(fd);
+ addr = mmap(NULL, size, flags, MAP_SHARED, fd, 0);
if (addr == MAP_FAILED) {
return nullptr;
}
@@ -643,7 +644,7 @@
// attempting to compute our own.
const size_t rowBytes = bitmap->rowBytes();
- android::Bitmap* wrapper = new android::Bitmap(addr, fd, info, rowBytes, ctable);
+ android::Bitmap* wrapper = new android::Bitmap(addr, fd, size, info, rowBytes, ctable);
wrapper->getSkBitmap(bitmap);
if (readOnly) {
bitmap->pixelRef()->setImmutable();
diff --git a/core/jni/android/graphics/GraphicsJNI.h b/core/jni/android/graphics/GraphicsJNI.h
index 5baa8f8..a215709 100644
--- a/core/jni/android/graphics/GraphicsJNI.h
+++ b/core/jni/android/graphics/GraphicsJNI.h
@@ -101,7 +101,7 @@
SkColorTable* ctable);
static android::Bitmap* mapAshmemPixelRef(JNIEnv* env, SkBitmap* bitmap,
- SkColorTable* ctable, int fd, void* addr, bool readOnly);
+ SkColorTable* ctable, int fd, void* addr, size_t size, bool readOnly);
/**
* Given a bitmap we natively allocate a memory block to store the contents
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/com_android_internal_os_Zygote.cpp b/core/jni/com_android_internal_os_Zygote.cpp
index 3f4b2a6..9bec6a3 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"
@@ -434,6 +435,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,
@@ -448,6 +452,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) {
@@ -457,6 +477,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..db56c32
--- /dev/null
+++ b/core/jni/fd_utils-inl.h
@@ -0,0 +1,540 @@
+/*
+ * 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",
+ "/system/etc/event-log-tags",
+ "/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/res/layout/alert_dialog_material.xml b/core/res/res/layout/alert_dialog_material.xml
index 6d33de6..178505c 100644
--- a/core/res/res/layout/alert_dialog_material.xml
+++ b/core/res/res/layout/alert_dialog_material.xml
@@ -20,6 +20,7 @@
android:id="@+id/parentPanel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:gravity="start|top"
android:orientation="vertical">
<include layout="@layout/alert_dialog_title_material" />
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index b61d6cf..759b5a4 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -2619,10 +2619,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). -->
diff --git a/docs/html-intl/intl/es/about/versions/marshmallow/android-6.0-testing.jd b/docs/html-intl/intl/es/about/versions/marshmallow/android-6.0-testing.jd
new file mode 100644
index 0000000..20d2d6e
--- /dev/null
+++ b/docs/html-intl/intl/es/about/versions/marshmallow/android-6.0-testing.jd
@@ -0,0 +1,190 @@
+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/android-7.0-changes.jd b/docs/html-intl/intl/es/about/versions/nougat/android-7.0-changes.jd
new file mode 100644
index 0000000..d4438f2
--- /dev/null
+++ b/docs/html-intl/intl/es/about/versions/nougat/android-7.0-changes.jd
@@ -0,0 +1,610 @@
+page.title=Cambios en los comportamientos
+page.keywords=versión preliminar,sdk,compatibilidad
+meta.tags="preview", "compatibility"
+page.tags="preview", "developer preview"
+page.image=images/cards/card-n-changes_2x.png
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>En este documento</h2>
+
+<ol>
+ <li><a href="#perf">Mejoras de rendimiento</a>
+ <ol>
+ <li><a href="#doze">Descanso</a></li>
+ <li><a href="#bg-opt">Optimizaciones en segundo plano</a></li>
+ </ol>
+ </li>
+ <li><a href="#perm">Cambios en los permisos</a>
+ </li>
+ <li><a href="#sharing-files">Intercambio de archivos entre aplicaciones</a></li>
+ <li><a href="#accessibility">Mejoras de accesibilidad</a>
+ <ol>
+ <li><a href="#screen-zoom">Zoom de la pantalla</a></li>
+ <li><a href="#vision-settings">Vision Settings en el asistente de configuración</a></li>
+ </ol>
+ </li>
+ <li><a href="#ndk">Aplicaciones del NDK con vínculos a bibliotecas de plataformas</a></li>
+ <li><a href="#afw">Android for Work</a></li>
+ <li><a href="#annotations">Retención de anotaciones</a></li>
+ <li><a href="#other">Otros aspectos importantes</a></li>
+</ol>
+
+<h2>Consulta también</h2>
+<ol>
+ <li><a href="{@docRoot}preview/api-overview.html">
+ Información general sobre la API de Android N</a></li>
+</ol>
+
+</div>
+</div>
+
+
+<p>
+ Además de nuevas características y capacidades, Android N
+ incluye diversos cambios en el sistema y en los comportamientos de la API. En este documento,
+ se destacan algunos de los cambios principales que debes comprender y justificar
+ en tus aplicaciones.
+</p>
+
+<p>
+ Si publicaste anteriormente una aplicación para Android, ten en cuenta que tu aplicación
+ podría verse afectada por estos cambios en la plataforma.
+</p>
+
+
+<h2 id="perf">Batería y memoria</h2>
+
+<p>
+Android N incluye cambios en los comportamientos del sistema para mejorar la duración de la batería
+de los dispositivos y reducir el uso de la memoria RAM. Estos cambios pueden afectar el acceso de tu aplicación a
+recursos del sistema, además de la manera en que tu aplicación interactúa con otras aplicaciones mediante
+determinadas intents implícitas.
+</p>
+
+<h3 id="doze">Descanso</h3>
+
+<p>
+ Descanso, presentado en Android 6.0 (nivel de API 23), prolonga la duración de la batería
+ aplazando actividades de CPU y red cuando un usuario deja un dispositivo desenchufado,
+ quieto y con la pantalla apagada. En Android N se ofrecen más
+ mejoras para Descanso a través de la aplicación de un subconjunto de restricciones de CPU y red
+ mientras el dispositivo se encuentra desenchufado y con la pantalla apagada, aunque no necesariamente
+ quieto; por ejemplo, al ir dentro del bolsillo de un usuario en movimiento.
+</p>
+
+
+<img src="{@docRoot}images/android-7.0/doze-diagram-1.png" alt="" height="251px" id="figure1" />
+<p class="img-caption">
+ <strong>Figura 1:</strong> Ilustración del modo en que Descanso aplica un primer nivel de
+ restricciones de actividad del sistema para prolongar la duración de la batería.
+</p>
+
+<p>
+ Cuando un dispositivo funciona con la batería y la pantalla permanece apagada durante un tiempo
+ determinado, se activa en este el modo Descanso y se aplica el primer subconjunto de restricciones: se
+ desactiva el acceso de las aplicaciones a la red y se aplazan tareas y sincronizaciones. Si el dispositivo
+ permanece quieto durante un tiempo determinado tras activarse el modo Descanso, el sistema aplica el
+ resto de las restricciones del modo a {@link android.os.PowerManager.WakeLock},
+ alarmas de {@link android.app.AlarmManager}, GPS y análisis de Wi-Fi. Independientemente de que
+ se apliquen algunas o todas las restricciones del modo Descanso, el sistema activa el
+ dispositivo durante plazos de mantenimiento breves en los cuales las aplicaciones tienen
+ acceso a la red y pueden ejecutar sincronizaciones o procesos aplazados.
+</p>
+
+
+<img src="{@docRoot}images/android-7.0/doze-diagram-2.png" alt="" id="figure2" />
+<p class="img-caption">
+ <strong>Figura 2:</strong> Ilustración del modo en que Descanso aplica un segundo nivel de
+ restricciones de actividad del sistema después de que el dispositivo permanece quieto durante un tiempo determinado.
+</p>
+
+<p>
+ Ten en cuenta que, cuando se activa la pantalla o se enchufa el dispositivo, se desactiva el modo Descanso y
+ se retiran estas restricciones de procesamiento. El comportamiento adicional no
+ tiene efecto sobre las recomendaciones ni las prácticas recomendadas para adaptar tu aplicación a la versión
+ anterior de Descanso, presentada en Android 6.0 (nivel de API 23), según lo descrito en
+ <a href="{@docRoot}training/monitoring-device-state/doze-standby.html">
+ Optimización para Descanso y App Standby</a>. De todos modos, debes
+ seguir las recomendaciones; por ejemplo, la de usar Google Cloud Messaging (GCM) para
+ enviar y recibir mensajes, y la de planificar actualizaciones para adaptar
+ el comportamiento adicional de Descanso.
+</p>
+
+
+<h3 id="bg-opt">Project Svelte: Optimizaciones en segundo plano</h3>
+
+<p>
+ En Android N, se eliminan tres transmisiones implícitas para ayudar a optimizar el uso de la
+ memoria y el consumo de energía. Este cambio es necesario porque las transmisiones
+ implícitas a menudo inician aplicaciones que se registran para realizar un seguimiento de ellas en
+ segundo plano. La eliminación de estas transmisiones puede mejorar sustancialmente el rendimiento del dispositivo
+ y la experiencia del usuario.
+</p>
+
+<p>
+ Los dispositivos móviles están sujetos a cambios de conectividad frecuentes
+ entre los modos de datos Wi-Fi y móviles. Actualmente, las aplicaciones pueden realizar controles en busca de cambios en la
+ conectividad registrando un receptor para la transmisión implícita {@link
+ android.net.ConnectivityManager#CONNECTIVITY_ACTION} en su
+ manifiesto. Debido a que muchas aplicaciones se registran para recibir esta transmisión, un cambio de
+ red puede hacer que todas se activen y procesen la transmisión a la
+ vez.
+</p>
+
+<p>
+ Asimismo, en versiones anteriores de Android, las aplicaciones podían registrarse para recibir las transmisiones implícitas {@link
+ android.hardware.Camera#ACTION_NEW_PICTURE} y {@link
+ android.hardware.Camera#ACTION_NEW_VIDEO} de otras aplicaciones, como la
+ cámara. Cuando un usuario toma una foto con la aplicación de la cámara, estas aplicaciones se activan
+ para procesar la transmisión.
+</p>
+
+<p>
+ Para corregir estos problemas, en Android N se aplican las siguientes
+ optimizaciones:
+</p>
+
+<ul>
+ <li>Las aplicaciones orientadas a Android N no reciben transmisiones {@link
+ android.net.ConnectivityManager#CONNECTIVITY_ACTION}, aun cuando contengan
+ entradas de manifiesto que les permitan solicitar notificaciones de estos eventos. Las aplicaciones que
+ se ejecutan aún pueden escuchar {@code CONNECTIVITY_CHANGE} en su subproceso principal
+ si solicitan una notificación con un {@link android.content.BroadcastReceiver}.
+ </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 Android N.
+ </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 con Android N correctamente.
+ El framework de Android ofrece varias soluciones para mitigar la necesidad de
+ estas transmisiones implícitas. Por ejemplo, la API {@link
+ android.app.job.JobScheduler} proporciona un mecanismo sólido para programar
+ operaciones de red cuando se cumplen las condiciones especificadas, como una conexión a una
+ red de uso no medido. Puedes usar {@link
+ android.app.job.JobScheduler} para responder a cambios en proveedores de contenido.
+</p>
+
+<p>
+ Para obtener más información sobre optimizaciones en segundo plano en Android N y la manera de adaptar tu aplicación,
+ consulta <a href="{@docRoot}preview/features/background-optimization.html">Optimizaciones
+ en segundo plano</a>.
+</p>
+
+<h2 id="perm">Cambios en los permisos</h2>
+
+<p>
+ En Android N, se incorporan cambios en permisos que pueden afectar tu aplicación.
+</p>
+
+<h3 id="permfilesys">Cambios en los permisos del sistema de archivos</h3>
+
+<p>
+ Para mejorar la seguridad de los archivos privados, el directorio privado de
+ las aplicaciones orientadas a Android N o versiones posteriores tiene acceso restringido. (<code>0700</code>).
+ Esta configuración evita la fuga de metadatos de archivos privados, como su tamaño
+ o existencia. Este cambio en los permisos tiene varios efectos secundarios:
+</p>
+
+<ul>
+ <li>
+ Los propietarios ya no pueden reducir los permisos de archivo de los archivos privados,
+ y un intento de hacerlo utilizando
+ {@link android.content.Context#MODE_WORLD_READABLE} o
+ {@link android.content.Context#MODE_WORLD_WRITEABLE} activará una
+ {@link java.lang.SecurityException}.
+ <p class="note">
+ <strong>Nota:</strong> Desde ahora, esta restricción no se aplica planamente.
+ Las aplicaciones pueden seguir modificando los permisos para sus directorios privados con
+ las API nativas o la API {@link java.io.File File}. Sin embargo, desaconsejamos
+ reducir los permisos para el directorio privado.
+ </p>
+ </li>
+ <li>
+ Pasar URI <code>file://</code> fuera del dominio del paquete puede dar al
+ receptor una ruta de acceso inaccesible. Por lo tanto, los intentos de pasar un
+ URI <code>file://</code> activan una
+ <code>FileUriExposedException</code>. La manera recomendada para compartir el
+ contenido de un archivo privado consiste en utilizar el {@link
+ android.support.v4.content.FileProvider}.
+ </li>
+ <li>
+ El {@link android.app.DownloadManager} ya no puede compartir archivos
+ almacenados de manera privada por nombre de archivo. Las aplicaciones heredadas pueden terminar con una
+ ruta de acceso inaccesible cuando acceden a {@link
+ android.app.DownloadManager#COLUMN_LOCAL_FILENAME}. Las aplicaciones orientadas a
+ Android N o versiones posteriores activan una {@link java.lang.SecurityException} cuando
+ intentan acceder a
+ {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}.
+ Las aplicaciones heredadas que establecen la ubicación de descarga en una ubicación pública
+ usando
+ {@link
+ android.app.DownloadManager.Request#setDestinationInExternalFilesDir
+ DownloadManager.Request.setDestinationInExternalFilesDir()} o
+ {@link
+ android.app.DownloadManager.Request#setDestinationInExternalPublicDir
+ DownloadManager.Request.setDestinationInExternalPublicDir()}
+ siguen teniendo acceso a la ruta de acceso en
+ {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}; sin embargo, se desaconseja
+ seguir este método. El método preferido para acceder a un archivo
+ expuesto por el{@link android.app.DownloadManager} consiste en utilizar
+ {@link android.content.ContentResolver#openFileDescriptor
+ ContentResolver.openFileDescriptor()}.
+ </li>
+</ul>
+
+<h2 id="sharing-files">Intercambio de archivos entre aplicaciones</h2>
+
+<p>
+En las aplicaciones orientadas a Android N, el framework de Android aplica
+la política de la API {@link android.os.StrictMode} que prohíbe exponer URI {@code file://}
+fuera de la aplicación. Si una intent con un URI de archivo sale de tu aplicación, la aplicación falla
+con una excepción {@code FileUriExposedException}.
+</p>
+
+<p>
+Para compartir archivos entre aplicaciones, debes enviar un URI {@code content://}
+y otorgar un permiso de acceso temporal en el URI. La forma más sencilla de otorgar este permiso es
+utilizando la clase {@link android.support.v4.content.FileProvider}. Para obtener más información
+sobre permisos e intercambio de archivos,
+consulta <a href="{@docRoot}training/secure-file-sharing/index.html">Intercambio de archivos</a>.
+</p>
+
+<h2 id="accessibility">Mejoras de accesibilidad</h2>
+
+<p>
+ En Android N, se incluyen cambios destinados a mejorar la usabilidad de la
+ plataforma para usuarios con defectos o discapacidades visuales. Estos cambios
+ generalmente no deben exigir modificaciones en el código de tu aplicación. Sin embargo, debes revisar
+ estas funciones y probarlas con tu aplicación para avaluar el posible impacto en la experiencia
+ del usuario.
+</p>
+
+
+<h3 id="screen-zoom">Zoom de la pantalla</h3>
+
+<p>
+ Android N permite a los usuarios configurar <strong>Display size</strong>, el ajuste que expande
+ o contrae todos los elementos de la pantalla, lo cual mejora la accesibilidad al dispositivo
+ para usuarios con poca visión. Estos no podrán superar el valor de zoom
+ mínimo de <a href="http://developer.android.com/guide/topics/resources/providing-resources.html">
+ sw320dp</a> para el ancho de pantalla, que es el ancho de un Nexus 4, un teléfono común de tamaño intermedio.
+</p>
+
+<div class="cols">
+
+<div class="col-6">
+ <img src="{@docRoot}images/android-7.0/screen-zoom-1.png" alt="" height="XXX" id="figure1" />
+</div>
+<div class="col-6">
+ <img src="{@docRoot}images/android-7.0/screen-zoom-2.png" alt="" height="XXX" id="figure1" />
+</div>
+
+</div> <!-- end cols -->
+<p class="img-caption">
+ <strong>Figura 3:</strong> En la pantalla de la derecha se muestra el efecto que tiene
+ aumentar Display size para un dispositivo con una imagen de sistema de Android N.
+</p>
+
+
+<p>
+ Al cambiar la densidad del dispositivo, el sistema notifica a las aplicaciones de las
+ siguientes maneras:
+</p>
+
+<ul>
+ <li>Si una aplicación se orienta hacia el nivel de API 23 o uno inferior, el sistema automáticamente finaliza
+ todos los procesos en segundo plano. Esto significa que, si un usuario hace a un lado
+ dicha aplicación para abrir la pantalla <em>Settings</em> y cambiar la configuración de
+ <strong>Display size</strong>, el sistema finalizará la aplicación tal
+ como lo haría en una situación de bajos recursos de memoria. Si en la aplicación hay procesos en
+ primer plano, el sistema notifica a estos procesos el cambio en la configuración como se
+ indica en <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Manejo de cambios
+ en tiempo de ejecución</a>, así como lo haría si cambiara la orientación del dispositivo.
+ </li>
+
+ <li>Si una aplicación se orienta hacia Android N, se notifica a todos los procesos
+ (en primer y segundo plano) el cambio en la configuración, como se
+ indica en <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Manejo de cambios
+ en tiempo de ejecución</a>.
+ </li>
+</ul>
+
+<p>
+ En la mayoría de las aplicaciones, no se necesitan cambios para admitir esta función, si
+ en ellas se siguen las prácticas recomendadas de Android. Verificaciones específicas que deben realizarse:
+</p>
+
+<ul>
+ <li>Prueba tu aplicación en un dispositivo con ancho de pantalla <code><a href=
+ "{@docRoot}guide/topics/resources/providing-resources.html">sw320dp</a></code>
+ y asegúrate de que funcione bien.
+ </li>
+
+ <li>Cuando se modifique la configuración del dispositivo, actualiza la información almacenada en caché que
+ dependa de la densidad, como los mapas de bits o recursos almacenados en caché que se carguen desde la
+ red. Busca de cambios en la configuración cuando se reanude la actividad de la aplicación, después de la
+ pausa.
+ <p class="note">
+ <strong>Nota:</strong> Si almacenaste en caché datos que dependen de la configuración, te
+ convendrá incluir metadatos relacionados, como el tamaño de pantalla
+ correspondiente o la densidad de píxeles para dichos datos. Guardar estos metadatos te permite
+ decidir si necesitas actualizar los datos almacenados en caché después de un cambio en la
+ configuración.
+ </p>
+ </li>
+
+ <li>Evita especificar dimensiones con unidades px, ya que no responden a la
+ densidad de pantalla. En lugar de ello, recurre a unidades de <a href="{@docRoot}guide/practices/screens_support.html">píxeles
+ (<code>dp</code>) independientes de la densidad</a>.
+ </li>
+</ul>
+
+<h3 id="vision-settings">Vision Settings en el asistente de configuración</h3>
+
+<p>
+ Vision Settings se incluye en la pantalla de Bienvenida de Android N, en la cual los usuarios pueden
+ configurar los siguientes ajustes de accesibilidad para un nuevo dispositivo:
+ <strong>Magnification gesture</strong>, <strong>Font size</strong>,
+ <strong>Display size</strong> y <strong>TalkBack</strong>. Este cambio
+ aumenta la visibilidad de errores relacionados con diferentes ajustes de pantalla. Para
+ evaluar el impacto de esta función, debes probar tus aplicaciones con estos
+ ajustes habilitados. Puedes encontrarlos en <strong>Settings >
+ Accessibility</strong>.
+</p>
+
+<h2 id="ndk">Aplicaciones del NDK con vínculos a bibliotecas de plataformas</h2>
+
+<p>
+ En Android N, se incluyen cambios en el espacio de nombres a fin de evitar la carga de API no públicas.
+ Si usas el NDK, solo debes emplear API públicas de la plataforma de
+ Android. El uso de API no públicas en la próxima versión oficial de Android
+ puede hacer que tu aplicación se bloquee.
+</p>
+
+<p>
+ Con el propósito de alertarte sobre el uso de API no públicas, las aplicaciones que funcionen en un dispositivo con
+ Android N producirán un error de salida de logcat cuando una de ellas llame a una API no pública.
+ Este error también aparecerá en la pantalla del dispositivo como un mensaje para ayudar a
+ generar conciencia respecto de la situación. Debes revisar el código de tu aplicación para
+ quitar el uso de API de plataformas no públicas y probar por completo tus aplicaciones con
+ un dispositivo de prueba o emulador.
+</p>
+
+<p>
+ Si tu aplicación depende de bibliotecas de plataformas, consulta la documentación sobre el NDK a fin de hallar
+ soluciones típicas para el reemplazo de API privadas comunes por API públicas equivalentes.
+ También es posible que establezcas vínculos con bibliotecas de plataformas sin notarlo,
+ en especial si tu aplicación usa una biblioteca que forma parte de la plataforma (como
+ <code>libpng</code>), pero no del NDK. En ese caso, asegúrate de que
+ tu APK contenga todos los archivos .so con los cuales intentaste establecer vínculos.
+</p>
+
+<p class="caution">
+ <strong>Advertencia:</strong> Algunas bibliotecas de terceros pueden establecer vínculos con API
+ no públicas. Si tu aplicación usa estas bibliotecas, es probable que se bloquee al ejecutarse
+ en la próxima versión oficial de Android.
+</p>
+
+<p>
+ Las aplicaciones no deben depender de bibliotecas nativas no incluidas en el NDK
+ ni usarlas, ya que pueden modificarse o eliminarse en la transición de una versión de Android a
+ otra. El cambio de OpenSSL a BoringSSL es un ejemplo de modificaciones como esta.
+ A su vez, los diferentes dispositivos pueden ofrecer distintos niveles de compatibilidad, debido a que
+ no existen requisitos de compatibilidad para bibliotecas de plataformas no incluidas
+ en el NDK. Si debes acceder a bibliotecas no relacionadas con el NDK en dispositivos anteriores, haz que la
+ carga dependa del nivel de la API de Android.
+</p>
+
+<p>
+ Para ayudarte a diagnosticar estos tipos de problemas, a continuación, se ofrecen ejemplos de errores de Java y
+ del NDK que podrías hallar al intentar compilar tu aplicación con Android N:
+</p>
+
+<p>Ejemplo de error de Java:</p>
+<pre class="no-pretty-print">
+java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so"
+ is not accessible for the namespace "classloader-namespace"
+</pre>
+
+<p>Ejemplo de error de NDK:</p>
+<pre class="no-pretty-print">
+dlopen failed: cannot locate symbol "__system_property_get" referenced by ...
+</pre>
+
+
+<p>
+ Aquí se ofrecen soluciones típicas para aplicaciones en las que se produzcan estos tipos de errores:
+</p>
+
+<ul>
+ <li>getJavaVM y getJNIEnv de libandroid_runtime.so pueden reemplazarse
+ por funciones estándares de JNI:
+<pre class="no-pretty-print">
+AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h>
+AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or
+JavaVM::AttachCurrentThread from <jni.h>.
+</pre>
+ </li>
+
+ <li>El símbolo {@code property_get} de {@code libcutils.so} puede
+ reemplazarse por la API pública {@code alternative __system_property_get}.
+ Para hacerlo, usa {@code __system_property_get} con el siguiente elemento include:
+<pre>
+#include <sys/system_properties.h>
+</pre>
+ </li>
+
+ <li>El símbolo {@code SSL_ctrl} de {@code libcrypto.so} debe
+ reemplazarse por una versión local de la aplicación. Por ejemplo, debes establecer un vínculo estático de
+ {@code libcyrpto.a} en tu archivo {@code .so} o incluir un vínculo dinámico propio de
+ {@code libcrypto.so} de BoringSSL u OpenSSL en tu aplicación.
+ </li>
+</ul>
+
+<h2 id="afw">Android for Work</h2>
+<p>
+ Android N contiene cambios para aplicaciones orientadas a Android for Work, entre los que se incluyen
+ modificaciones en la instalación de certificados, el restablecimiento de contraseñas, la gestión de usuarios
+ secundarios y el acceso a identificadores de dispositivos. Si creas aplicaciones para entornos de
+ Android for Work, debes estudiar estos cambios y modificar
+ tu aplicación según corresponda.
+</p>
+
+<ul>
+ <li>Debes usar un instalador de certificados delegados para que el controlador de políticas de dispositivos (DPC) pueda
+ configurarlo. Para aplicaciones de propietarios de perfiles y de dispositivos orientadas al SDK de Android N, debes
+ usar el instalador de certificados delegados para que el
+ DPC llame a
+ <code>DevicePolicyManager.setCertInstallerPackage()</code>. Si el instalador
+ no está instalado de antemano, el sistema emite una
+ <code>IllegalArgumentException</code>.
+ </li>
+
+ <li>Las restricciones de restablecimiento de contraseñas para administradores de dispositivos ahora se aplican a los propietarios de
+ perfiles. Los administradores de dispositivos ya no pueden usar
+ {@code DevicePolicyManager.resetPassword()} para borrar contraseñas ni modificar
+ las que ya están establecidas. No obstante, pueden establecer una contraseña, aunque solo
+ cuando el dispositivo no tiene contraseña, PIN ni patrón.
+ </li>
+
+ <li>Los propietarios de dispositivos y perfiles pueden administrar cuentas aun cuando haya
+ restricciones. Tienen la posibilidad de llamar a las API de administración de cuentas
+ incluso al haber restricciones <code>DISALLOW_MODIFY_ACCOUNTS</code> para el usuario.
+ </li>
+
+ <li>Los propietarios de dispositivos pueden administrar usuarios secundarios de manera más sencilla. Cuando un dispositivo
+ funciona en el modo de propietario de dispositivo, automáticamente se establece la restricción <code>DISALLOW_ADD_USER</code>
+. Esto evita que los usuarios creen usuarios secundarios no
+ administrados. A su vez, los métodos <code>CreateUser()</code> y
+ <code>createAndInitializeUser()</code> han sido dados de baja; los reemplaza el nuevo método
+ <code>DevicePolicyManager.createAndManageUser()</code>.
+ </li>
+
+ <li>Los propietarios de dispositivos pueden acceder a identificadores de dispositivos. Tienen la posibilidad de acceder a la
+ dirección MAC de Wi-Fi de un dispositivo a través de
+ <code>DevicePolicyManagewr.getWifiMacAddress()</code>. Si nunca se habilitó la función Wi-Fi
+ en el dispositivo, este método devuelve un valor {@code null}.
+ </li>
+
+ <li>La configuración Work Mode controla el acceso a las aplicaciones de trabajo. Cuando este ajuste está desactivado, el
+ launcher del sistema indica que las aplicaciones de trabajo no están disponibles atenuándolas. Para volver
+ a restaurar el comportamiento normal, habilita el modo de trabajo nuevamente.
+</ul>
+
+<p>
+ Para obtener más información sobre los cambios de Android for Work en Android N, consulta
+ <a href="{@docRoot}preview/features/afw.html">Actualizaciones de Android for Work</a>.
+</p>
+
+<h2 id="annotations">Retención de anotaciones</h2>
+
+<p>
+Android N soluciona un error por el cual la visibilidad de las anotaciones se había ignorado.
+Este problema permitió que el tiempo de ejecución accediera a anotaciones a las que no debía
+tener acceso. Entre estas anotaciones se incluyen las siguientes:
+</p>
+
+<ul>
+ <li>{@code VISIBILITY_BUILD}: destinada a ser visible solo en el momento de compilación.</li>
+ <li>{@code VISIBILITY_SYSTEM}: destinada a ser visible en el tiempo de ejecución, pero únicamente al
+ sistema subyacente.</li>
+</ul>
+
+<p>
+Si tu aplicación se basa en este comportamiento, agrega una política de retención para las anotaciones que deben
+estar disponibles en el tiempo de ejecución. Para ello, usa {@code @Retention(RetentionPolicy.RUNTIME)}.
+</p>
+
+<h2 id="other">Otros aspectos importantes</h2>
+
+<ul>
+<li>Cuando una aplicación funcione en Android N, pero esté orientada a un nivel de API inferior,
+y el usuario modifique el tamaño de pantalla, el proceso de la aplicación finalizará. La aplicación
+debe tener capacidad para manejar correctamente esta situación. De lo contrario, se bloqueará
+cuando el usuario la restaure desde Recents.
+
+<p>
+Debes probar tu aplicación para controlar que no tenga lugar
+este comportamiento.
+Puedes hacerlo produciendo un error idéntico
+al finalizarla manualmente a través del panel DDMS.
+</p>
+
+<p>
+Las aplicaciones orientadas a Android N y versiones posteriores no finalizarán automáticamente por cambios en la densidad;
+sin embargo, es posible que respondan en forma deficiente a los cambios en la configuración.
+</p>
+</li>
+
+<li>
+En Android N, las aplicaciones deben tener capacidad para manejar correctamente los cambios de configuración
+y no deben bloquearse durante inicios posteriores. Puedes verificar el comportamiento de las aplicaciones
+modificando el tamaño de la fuente (<strong>Setting</strong> >
+<strong>Display</strong> > <strong>Font size</strong>) y restaurándolas
+desde Recents.
+</li>
+
+<li>
+Debido a un error en versiones anteriores de Android, el sistema no indicaba la escritura
+a un socket del TCP en el subproceso principal como una violación del modo strict. En Android N, se corrige este error.
+Las aplicaciones que tienen este comportamiento, ahora emiten una {@code android.os.NetworkOnMainThreadException}.
+Generalmente, realizar operaciones de red en el subproceso principal no es una buena idea porque estas operaciones
+suelen tener una latencia alta de cola que genera mensajes que indican que la aplicación no responde y bloqueos.
+</li>
+
+<li>
+De manea predeterminada, la familia de métodos {@code Debug.startMethodTracing()} ahora
+almacena los resultados en el directorio específico del paquete en el almacenamiento compartido,
+en lugar de hacerlo en el nivel superior
+de la tarjeta SD. Esto significa que las aplicaciones ya no tienen que solicitar el permiso {@code WRITE_EXTERNAL_STORAGE} para usar estas API.
+</li>
+
+<li>
+Muchas API de la plataforma han comenzado a controlar en busca del envío de cargas grandes
+a través de transacciones {@link android.os.Binder}. Además, el
+sistema ahora vuelve a emitir {@code TransactionTooLargeExceptions}
+como {@code RuntimeExceptions}, en lugar de registrarlas o suprimirlas silenciosamente. Un
+ejemplo común es almacenar demasiados datos en
+{@link android.app.Activity#onSaveInstanceState Activity.onSaveInstanceState()},
+ lo que hace que {@code ActivityThread.StopInfo} emita una
+{@code RuntimeException} cuando la aplicación se orienta a Android N.
+</li>
+
+<li>
+Si una aplicación publica tareas {@link java.lang.Runnable} en una {@link android.view.View}, y
+la {@link android.view.View}
+no está anexada a una ventana, el sistema
+pone en cola la tarea {@link java.lang.Runnable} con la {@link android.view.View}.
+La tarea {@link java.lang.Runnable} no se ejecuta hasta que la
+{@link android.view.View} esté anexada
+a una ventana. Este comportamiento soluciona los siguientes errores:
+<ul>
+ <li>Si una aplicación publicaba una {@link android.view.View} desde un subproceso que no fuera el subproceso de la IU
+ de la ventana prevista, la tarea {@link java.lang.Runnable} podía ejecutarse en el subproceso incorrecto.
+ </li>
+ <li>Si la tarea {@link java.lang.Runnable} se publicaba desde un subproceso que no fuera
+ un subproceso de looper, la aplicación podía exponer la terea {@link java.lang.Runnable}.</li>
+</ul>
+</li>
+
+<li>
+Si una aplicación en Android N con el permiso
+{@link android.Manifest.permission#DELETE_PACKAGES DELETE_PACKAGES}
+intentaba borrar un paquete instalado por otra aplicación,
+el sistema solicitaba la confirmación del usuario. En este escenario, las aplicaciones debían esperar recibir el estado
+{@link android.content.pm.PackageInstaller#STATUS_PENDING_USER_ACTION STATUS_PENDING_USER_ACTION}
+al invocar
+{@link android.content.pm.PackageInstaller#uninstall PackageInstaller.uninstall()}.
+</li>
+
+</ul>
+
diff --git a/docs/html-intl/intl/es/about/versions/nougat/android-7.0-samples.jd b/docs/html-intl/intl/es/about/versions/nougat/android-7.0-samples.jd
new file mode 100644
index 0000000..6461b54
--- /dev/null
+++ b/docs/html-intl/intl/es/about/versions/nougat/android-7.0-samples.jd
@@ -0,0 +1,85 @@
+page.title=Ejemplos
+page.tags="preview", "samples", "android"
+page.image=images/cards/card-n-samples_2x.png
+@jd:body
+
+<p>
+ Los siguientes ejemplos de código se proporcionan para Android N. Para
+ descargarlos en Android Studio, selecciona la opción de menú <b>File > Import
+ Samples</b>.
+</p>
+
+<p class="note">
+ <strong>Nota:</strong> Estos proyectos que se pueden descargar están diseñados
+ para su uso con Gradle y Android Studio.
+</p>
+
+
+<h3 id="mw">“Área de juegos” de ventanas múltiples</h3>
+<img src="{@docRoot}images/android-7.0/sample-multiwindow.png" style="float: left; padding-right: 0.5em" height="250" width="156" />
+<p>
+ En este ejemplo se muestra la manera de aprovechar interfaces de usuario
+ de ventanas múltiples con tu aplicación.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-MultiWindowPlayground">
+Obtener en GitHub</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="an">Notificaciones activas</h3>
+<img src="{@docRoot}images/android-7.0/sample-activenotifications.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ Este es un ejemplo preexistente en el cual se muestra un servicio simple que envía
+ notificaciones con NotificationCompat. Cada conversación no leída
+ se envía como una notificación diferente.
+</p>
+<p>
+ Este ejemplo se actualizó para aprovechar nuevas funciones de notificación
+ disponibles en Android N.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-ActiveNotifications">
+Obtener en GitHub</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="ms">Servicio de mensajería</h3>
+<img src="{@docRoot}images/android-7.0/sample-messagingservice.png" style="float: left; padding-right: 0.5em" height="250" width="150" />
+<p>
+ Este es un ejemplo preexistente en el que se demuestra la manera de usar
+ NotificationManager para indicar la cantidad de notificaciones que se aparecen actualmente en una
+ aplicación.
+</p>
+<p>
+ Este ejemplo se actualizó para aprovechar nuevas funciones de notificación
+ disponibles en Android N.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-MessagingService">
+Obtener en GitHub</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="fbe">Inicio directo</h3>
+<img src="{@docRoot}images/android-7.0/sample-directboot.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ En este ejemplo se demuestra la manera de almacenar datos, y de acceder a ellos, en un medio de almacenamiento encriptado por
+ dispositivo que esté siempre disponible mientras el dispositivo se haya iniciado.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-DirectBoot">
+Obtener en GitHub</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="sda">Acceso a directorios determinados</h3>
+<img src="{@docRoot}images/android-7.0/sample-scopeddirectoryaccess.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ En este ejemplo se demuestra la manera de leer y escribir datos de
+ directorios específicos y, al mismo tiempo, evitar más permisos.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-ScopedDirectoryAccess">
+Obtener en GitHub</a>
+</p>
diff --git a/docs/html-intl/intl/es/about/versions/nougat/android-7.0.jd b/docs/html-intl/intl/es/about/versions/nougat/android-7.0.jd
new file mode 100644
index 0000000..97bf2f1
--- /dev/null
+++ b/docs/html-intl/intl/es/about/versions/nougat/android-7.0.jd
@@ -0,0 +1,1039 @@
+page.title=Android N for Developers
+meta.tags="preview", "androidn"
+page.tags="preview", "developer preview"
+page.image=images/cards/card-n-apis_2x.png
+@jd:body
+
+
+
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>Funciones claves para desarrolladores</h2>
+ <ol>
+ <ul style="list-style-type:none;">
+ <li><a href="#multi-window_support">Compatibilidad con ventanas múltiples</a></li>
+ <li><a href="#notification_enhancements">Notificaciones</a></li>
+ <li><a href="#jit_aot">Compilación de JIT y AOT</a></li>
+ <li><a href="#quick_path_to_app_install">Acceso rápido a la instalación de aplicaciones</a></li>
+ <li><a href="#doze_on_the_go">Descanso en movimiento</a></li>
+ <li><a href="#background_optimizations">Optimizaciones en segundo plano</a></li>
+ <li><a href="#data_saver">Ahorro de datos</a></li>
+ <li><a href="#vulkan">API Vulkan</a></li>
+ <li><a href="#tile_api">API para mosaicos de Quick Settings</a></li>
+ <li><a href="#number-blocking">Bloqueo de números</a></li>
+ <li><a href="#call_screening">Filtración de llamadas</a></li>
+ <li><a href="#multi-locale_languages">Configuraciones regionales e idiomas</a></li>
+ <li><a href="#emoji">Nuevos emojis</a></li>
+ <li><a href="#icu4">API de ICU4J en Android</a></li>
+ <li><a href="#gles_32">API de OpenGL ES 3.2</a></li>
+ <li><a href="#android_tv_recording">Grabación de Android TV</a></li>
+ <li><a href="#android_for_work">Android for Work</a></li>
+ <li><a href="#accessibility_enhancements">Accesibilidad</a></li>
+ <li><a href="#direct_boot">Inicio directo</a></li>
+ <li><a href="#key_attestation">Atestación de claves</a></li>
+ <li><a href="#network_security_config">Configuración de seguridad de la red</a></li>
+ <li><a href="#default_trusted_ca">CA de confianza predeterminada</a></li>
+ <li><a href="#apk_signature_v2">Esquema de firma de APK v2</a></li>
+ <li><a href="#scoped_directory_access">Acceso a directorios determinados</a></li>
+ <li><a href="#keyboard_shortcuts_helper">Ayuda en los métodos abreviados del teclado</a></li>
+ <li><a href="#sustained_performance_api">API de rendimiento sostenido</a></li>
+ <li><a href="#vr">Soporte de RV</a></li>
+ <li><a href="#print_svc">Mejoras del servicio de impresión</a></li>
+ <li><a href="#virtual_files">Archivos virtuales</a></li>
+ <li><a href="#framemetrics_api">API FrameMetricsListener</a></li>
+ </ol>
+</div>
+</div>
+
+
+
+<p>Android N aún se encuentra en proceso activo de desarrollo, pero puedes probarlo
+ahora como parte de la N Developer Preview. En las secciones siguientes se destacan algunas de
+las nuevas funciones para desarrolladores. </p>
+
+<p>
+ Asegúrate de ver los <a href="{@docRoot}preview/behavior-changes.html">Cambios de comportamiento</a> para obtener información sobre
+ áreas en las cuales los cambios en las plataformas puedan tener efecto en tus aplicaciones, consultar las
+ guías del desarrollador para conocer mejor las funciones claves y descargar la <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referencia de la API</a> para obtener información sobre
+ API nuevas.
+</p>
+
+<h2 id="multi-window_support">Compatibilidad con ventanas múltiples</h2>
+
+
+<p>En Android N, presentamos una nueva y muy solicitada función multitarea
+en la plataforma: la compatibilidad con ventanas múltiples. </p>
+
+ <p>Los usuarios ahora pueden abrir dos aplicaciones al mismo tiempo en la pantalla. </p>
+ <ul>
+ <li>En teléfonos y tabletas
+con Android N, los usuarios pueden ejecutar dos aplicaciones en paralelo
+una encima otra en el modo de pantalla dividida. También tienen la posibilidad de modificar el tamaño de las aplicaciones arrastrando
+la línea divisoria que se encuentra entre ellas. </li>
+
+<li>En los dispositivos con Android TV, las aplicaciones pueden habilitar en forma automática el <a href="{@docRoot}preview/features/picture-in-picture.html">modo
+"picture-in-picture"</a>. Esto les permite continuar mostrando contenido mientras el usuario explora otras
+aplicaciones o interactúa con ellas.</li>
+ </ul>
+
+<div class="col-4of10">
+<img src="{@docRoot}images/android-7.0/mw-portrait.png" alt="" style="height:460px;padding-left:1em;" id="img-split-screen" />
+<p class="img-caption">
+ <strong>Figura 1:</strong> Aplicaciones en ejecución en el modo de pantalla dividida.
+</p>
+
+ </div>
+
+<p>En las tabletas, en particular, y en otros dispositivos de pantallas más grandes, la compatibilidad con ventanas múltiples
+ofrece nuevas maneras de atraer a los usuarios Puedes, habilitar acciones de arrastrar y soltar en
+tu aplicación para que los usuarios arrastren contenido hacia tu aplicación —o desde ella; es una excelente
+manera de mejorar su experiencia. </p>
+
+<p>Es sencillo agregar compatibilidad con ventanas múltiples a tu aplicación y configurar la manera en que
+administra la visualización de estas ventanas. Por ejemplo, puedes especificar las dimensiones mínimas
+permitidas de tu actividad y evitar así que los usuarios den a la actividad un
+tamaño inferior. También puedes inhabilitar la visualización de ventanas múltiples para tu aplicación, lo que
+ garantiza que el sistema solo muestre tu aplicación en modo de pantalla completa.</p>
+
+<p>
+ Para obtener más información, consulta la documentación <a href="{@docRoot}preview/features/multi-window.html">Compatibilidad con ventanas múltiples</a>
+ para desarrolladores.
+</p>
+
+<h2 id="notification_enhancements">Mejoras en las notificaciones</h2>
+
+<p>En Android N, hemos rediseñado las notificaciones para facilitar y agilizar su
+uso. Entre los cambios, se incluyen los siguientes:</p>
+
+<ul>
+ <li>
+ <strong>Actualizaciones de plantillas</strong>: estamos actualizando las plantillas de notificaciones para
+ poner nuevo énfasis en la imagen de héroe y el avatar. Los desarrolladores podrán
+ aprovechar las nuevas plantillas con una cantidad mínima de ajustes en el código.
+ </li>
+
+ <li>
+ <strong>Personalización del estilo de mensaje</strong>: puedes personalizar más etiquetas
+ de la interfaz de usuario asociadas con tus notificaciones utilizando la clase
+ <code>MessageStyle</code>. Puedes configurar el mensaje, el título de
+ la conversación y la vista del contenido.
+ </li>
+
+ <li>
+ <strong>Notificaciones agrupadas</strong>: el sistema puede agrupar mensajes
+ (por ejemplo, por tema) y mostrar el grupo. Un usuario puede
+ aplicar acciones, como Dismiss o Archive, en ellos. Si
+ has implementado notificaciones para Android Wear, ya estarás familiarizado con
+ este modelo.
+ </li>
+
+ <li>
+ <strong>Respuesta directa</strong>: en el caso de las aplicaciones de comunicación en tiempo real, el
+ sistema de Android admite respuestas en línea para que los usuarios puedan responder rápidamente a
+ un mensaje SMS o de texto directamente dentro en la interfaz de notificaciones.
+ </li>
+
+ <li>
+ <strong>Vistas personalizadas</strong>: dos API nuevas te permiten aprovechar las decoraciones
+ del sistema, como los encabezados y las acciones de notificaciones, al usar vistas
+ personalizadas en las notificaciones.
+ </li>
+</ul>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-1.png" alt="" style="padding:.5em;max-width:226px">
+</div>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-3.png" alt="" style="padding:.5em;max-width:226px">
+</div>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-2.png" alt="" style="padding:.5em;max-width:226px">
+</div>
+
+
+<p class="img-caption">
+ <strong>Figura 2:</strong> Notificaciones agrupadas y respuesta directa.
+</p>
+
+<p>Para obtener información acerca de cómo implementar las nuevas funciones, consulta la guía
+ <a href="{@docRoot}preview/features/notification-updates.html">Notificaciones</a>.
+</p>
+
+
+
+<h2 id="jit_aot">Compilación de JIT y AOT guiada por perfiles</h2>
+
+<p>En Android N, agregamos un compilador Just in Time (JIT) con generación de perfiles de código para
+ART, lo cual te permite mejorar constantemente el rendimiento de las aplicaciones con Android mientras se
+ejecutan. El compilador JIT complementa el compilador Ahead of Time (AOT) actual de ART
+y permite mejorar el rendimiento del tiempo de ejecución, ahorrar espacio de almacenamiento y acelerar las actualizaciones
+de aplicaciones y del sistema.</p>
+
+<p>La compilación guiada por perfiles permite que ART maneje la compilación de AOT y JIT de cada aplicación
+conforme a su uso real, además de las condiciones en el dispositivo. Por
+ejemplo, ART conserva un perfil de los métodos directos de cada aplicación, y puede compilar previamente
+y almacenar en caché dichos métodos para obtener el mejor rendimiento. A su vez, deja otras partes de la aplicación
+sin compilar hasta que se usan realmente.</p>
+
+<p>Además de mejorar el rendimiento de partes claves de la aplicación, la compilación guiada por
+perfiles permite reducir la superficie de memora RAM total de una aplicación, incluidos los archivos binarios
+asociados. Esta función tiene particular importancia en los dispositivos de memoria reducida.</p>
+
+<p>ART administra la compilación guiada por perfiles de una manera que minimiza el impacto en la batería
+del dispositivo. Realiza compilaciones previas únicamente cuando el dispositivo se encuentra inactivo y
+en proceso de carga, lo cual permite ahorrar tiempo y batería haciendo el trabajo de manera anticipada.</p>
+
+<h2 id="quick_path_to_app_install">Acceso rápido a la instalación de aplicaciones</h2>
+
+<p>Uno de los beneficios más palpables del compilador JIT de ART es la velocidad de instalación de las
+aplicaciones y de actualización del sistema. Incluso las aplicaciones de mayor tamaño, en las que se necesitaban varios minutos para la
+optimización y la instalación en Android 6.0, ahora pueden instalarse en cuestión de
+segundos. Las actualizaciones del sistema también son más rápidas, debido a que ya no hay un paso de optimización. </p>
+
+<h2 id="doze_on_the_go">Descanso en movimiento...</h2>
+
+<p>En Android 6.0, se presentó Descanso, un modo de sistema que ahorra batería aplazando
+actividades de CPU y red de las aplicaciones cuando el dispositivo se encuentra inactivo; por ejemplo, al hallarse
+sobre una mesa o en un cajón. </p>
+
+<p>Ahora, en Android N, el modo Descanso ofrece el beneficio adicional de ahorrar batería en movimiento.
+Siempre que la pantalla permanezca apagada durante un tiempo y el dispositivo esté desenchufado,
+Descanso aplicará un subconjunto de las restricciones de CPU y red conocidas a las aplicaciones.
+Esto significa que los usuarios pueden ahorrar batería aun cuando lleven sus dispositivos
+en los bolsillos.</p>
+
+
+<img src="/preview/images/doze-diagram-1.png" alt="" id="figure1" />
+<p class="img-caption">
+ <strong>Figura 3:</strong> Descanso ahora aplica
+ restricciones para prolongar la duración de la batería aun cuando el dispositivo no está quieto.
+</p>
+
+
+<p>Poco tiempo después de que la pantalla se apaga, cuando el dispositivo no está enchufado, Descanso
+restringe el acceso a la red y aplaza tareas y sincronizaciones. Durante períodos de mantenimiento
+breves, las aplicaciones tienen acceso a la red y se ejecutan todas las
+tareas y sincronizaciones aplazadas. Ten en cuenta que, cuando se activa la pantalla o se enchufa el dispositivo, se
+desactiva el modo Descanso.</p>
+
+<p>Cuando el dispositivo vuelve a estar quieto, desenchufado y con la pantalla apagada durante un
+tiempo, Descanso aplica todas las restricciones de CPU y redes en {@link
+android.os.PowerManager.WakeLock}, alarmas de {@link android.app.AlarmManager} y análisis de
+GPS o Wi-Fi.</p>
+
+<p>Las prácticas recomendadas para adaptar tu aplicación a Descanso no varían si el
+dispositivo estará en movimiento o no. Por lo tanto, si ya actualizaste tu aplicación para que administre
+Descanso correctamente, no tienes nada más que hacer. Si no lo hiciste, comienza a <a href="{@docRoot}training/monitoring-device-state/doze-standby.html#assessing_your_app">adaptarla
+a Descanso</a> ahora.</p>
+
+<h2 id="background_optimizations">Project Svelte: Optimizaciones en segundo plano</h2>
+
+<p>Project Svelte representa un esfuerzo constante por minimizar el uso de memoria RAM a través del sistema y de las aplicaciones
+en los diferentes dispositivos Android del ecosistema. En Android N, el objetivo principal de Project
+Svelte es optimizar la manera en que las aplicaciones se ejecutan en segundo plano. </p>
+
+<p>El procesamiento en segundo plano es una parte esencial de la mayoría de las aplicaciones. Cuando se maneja en forma adecuada, puede
+hacer que la experiencia de tu usuario sea increíble —(inmediata, rápida y pertinente al contexto).
+Cuando no se maneja de tal manera, el procesamiento en segundo plano puede suponer un consumo innecesario de memoria RAM (y
+batería), y afectar el rendimiento del sistema para otras aplicaciones. </p>
+
+<p>A partir de Android 5.0, {@link android.app.job.JobScheduler} ha sido el
+método preferido para ejecutar tareas en segundo plano con resultados positivos
+para los usuarios. Las aplicaciones pueden programar tareas y, al mismo tiempo, permitir que el sistema se optimice según las condiciones de
+memoria, energía y conectividad. JobScheduler ofrece control y
+simpleza, y nuestro deseo es que todas las aplicaciones lo usen. </p>
+
+<p>
+ Otra buena opción es <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
+ <code>GCMNetworkManager</code></a>, que forma parte de Google Play Services y
+ ofrece una capacidad similar de programación de tareas con compatibilidad en versiones heredadas de
+ Android.
+</p>
+
+<p>Continuaremos ampliando <code>JobScheduler</code> y
+<code>GCMNetworkManager</code> para que se apliquen a más
+casos de uso de tus aplicaciones; por ejemplo, en Android N ahora puedes programar procesos
+en segundo plano según los cambios de los proveedores de contenido. Al mismo tiempo, comenzaremos a
+dejar de usar algunos de los patrones anteriores que pueden reducir el rendimiento del sistema,
+en especial, en dispositivos de memoria reducida.</p>
+
+<p>En Android N, eliminaremos tres transmisiones implícitas que se usan normalmente —(
+ {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, {@link
+ android.hardware.Camera#ACTION_NEW_PICTURE} y {@link
+ android.hardware.Camera#ACTION_NEW_VIDEO}), ya que pueden activar los
+procesos en segundo plano de varias aplicaciones al mismo tiempo, y así exigir la memoria y la batería. Si
+tu aplicación recibe estas transmisiones, aprovecha la N Developer Preview y
+ realiza la migración a <code>JobScheduler</code> y las API relacionadas, como alternativa. </p>
+
+<p>
+ Para obtener información detallada, consulta la documentación <a href="{@docRoot}preview/features/background-optimization.html">Optimizaciones
+ en segundo plano</a>.
+</p>
+
+
+<h2 id="data_saver">Ahorro de datos</h2>
+
+<div class="col-5of12" style="margin-right:1.5em;">
+<img src="{@docRoot}images/android-7.0/datasaver.png" style="border:2px solid #ddd">
+
+<p class="img-caption" style="padding-right:2em;">
+ <strong>Figura 4:</strong> Ahorro de datos en la configuración.
+</p>
+ </div>
+
+<p>Durante la vida útil de un dispositivo móvil, el costo de un plan de datos móviles puede
+superar fácilmente el costo del propio dispositivo. Para muchos usuarios, los datos móviles son un
+recurso costoso que desean conservar. </p>
+
+<p>En Android N, se presenta el modo de ahorro de datos, un nuevo servicio del sistema que permite reducir
+el uso de datos móviles de las aplicaciones, ya sea con servicio de itinerancia, cerca del final del ciclo de facturación
+o con un paquete de datos prepagos. El ahorro de datos permite que los usuarios controlen la manera en que las aplicaciones
+usan los datos móviles y que los desarrolladores brinden un servicio más eficaz cuando el ahorro
+de datos se encuentra activo. </p>
+
+<p>Cuando un usuario habilita el ahorro de datos en <strong>Settings</strong> y el dispositivo está
+conectado a una red o, el sistema bloquea el uso de datos en segundo plano y ordena a las aplicaciones
+usar menos datos en primer plano siempre que sea posible (por ejemplo, limitando
+la tasa de bits para la transmisión, reduciendo la calidad de la imagen y aplazando el valor optimista de almacenamiento previo en caché,
+entre otras posibilidades). Los usuarios pueden incluir aplicaciones específicas en la lista blanca para
+permitir el uso de datos medidos en segundo plano, incluso cuando está activado el ahorro de datos.</p>
+
+<p>Android N extiende {@link android.net.ConnectivityManager} para que las aplicaciones
+tengan una manera de <a href="{@docRoot}preview/features/data-saver.html#status">recuperar las
+preferencias de ahorro de datos del usuario</a> y<a href="{@docRoot}preview/features/data-saver.html#monitor-changes"> monitorear
+cambios en estas</a>. Todas las aplicaciones deben verificar si el usuario habilitó el ahorro
+de datos e intentar limitar el uso de datos en primer y segundo plano.</p>
+
+
+<h2 id="vulkan">API Vulkan</h2>
+
+<p>
+ Android N integra <a href="http://www.khronos.org/vulkan" class="external-link">Vulkan™</a>, una nueva API de visualización 3D, en la plataforma. Al igual que
+ <a href="https://www.khronos.org/opengles/" class="external-link">OpenGL™
+ ES</a>, Vulkan es un estándar abierto para gráficos y visualización 3D, cuyo mantenimiento está a cargo de
+ Khronos Group.
+</p>
+
+<p>
+ Vulkan se diseñó desde el principio para minimizar la sobrecarga de CPU en el controlador,
+ y permite que tu aplicación controle el funcionamiento de la unidad de procesamiento de gráficos más directamente. También
+ hace posible contar con un mejor trabajo en paralelo, ya que permite que varios subprocesos diversos realicen
+ trabajos, como la construcción del búfer de comandos, a la vez.
+</p>
+
+<p>
+ Las herramientas y las bibliotecas de desarrollo de Vulkan son parte del NDK de Android. Esto
+incluye lo siguiente:
+</p>
+
+<ul>
+ <li>Encabezados
+ </li>
+
+ <li>Capas de validación (bibliotecas de depuración)
+ </li>
+
+ <li>Compilador SPIR-V
+ </li>
+
+ <li>Biblioteca de compilación de tiempo de ejecución de SPIR-V
+ </li>
+</ul>
+
+<p>
+ Vulkan solo está disponible en las aplicaciones en dispositivos con hardware compatible con Vulkan,
+ como Nexus 5X, Nexus 6P y Nexus Player. Estamos trabajando estrechamente con nuestros
+ socios para que Vulkan se pueda utilizar en más dispositivos lo más pronto posible.
+</p>
+
+<p>
+ Para obtener más información, consulta la <a href="{@docRoot}ndk/guides/graphics/index.html">documentación de la API</a>.
+</p>
+
+<h2 id="tile_api">API para mosaicos de Quick Settings</h2>
+
+
+<div style="float:right;max-width:320px">
+<img src="{@docRoot}images/android-7.0/quicksettings.png" style="padding-left:1.5em;">
+
+<p class="img-caption" style="padding-left:2em;">
+ <strong>Figura 5:</strong> Mosaicos de Quick Settings del panel de notificaciones.
+</p>
+
+
+ </div><p>Quick Settings es una manera popular y simple de exhibir configuraciones y acciones claves
+directamente desde el panel de notificaciones. En Android N, expandimos el alcance de
+Quick Settings para que sea todavía más útil y práctico. </p>
+
+<p>Agregamos más espacio para mosaicos adicionales de Quick Settings, a los cuales los usuarios pueden
+acceder desde un área de visualización paginada deslizando el dedo hacia la izquierda o la derecha. También permitimos
+que los usuarios determinen los mosaicos de Quick Settings que aparecerán y los puntos en los cuales
+se mostrarán; pueden agregar o mover mosaicos con solo arrastrarlos y soltarlos. </p>
+
+<p>Para los desarrolladores, en Android N también se agrega una nueva API que les permite definir mosaicos de
+ Quick Settings propios para facilitar, dentro de sus aplicaciones, el acceso a controles y acciones claves por parte de los usuarios.</p>
+
+<p>
+ Los mosaicos de Quick Settings se reservan para controles o acciones que se necesiten
+ con urgencia o se usen con frecuencia; no deben emplearse como accesos directos para
+ iniciar una aplicación.
+</p>
+
+<p>
+ Una vez que hayas definido tus mosaicos, puedes dejarlos a disposición de los usuarios, quienes tendrán la posibilidad de agregarlos
+ a Quick Settings con solo arrastrarlos y soltarlos.
+</p>
+
+<p>
+ Para obtener información sobre la creación de un mosaico de aplicación, consulta la documentación de
+ <code>android.service.quicksettings.Tile</code> en la <a href="{@docRoot}preview/setup-sdk.html#docs-dl">referencia de la API</a> descargable.
+</p>
+
+
+
+<h2 id="number-blocking">Bloqueo de números</h2>
+
+<p>Android N ahora admite el bloqueo de números en la plataforma y proporciona una API
+de framework para que los proveedores de servicios dispongan de una lista con números bloqueados. La
+aplicación de SMS predeterminada, la aplicación telefónica predeterminada y las aplicaciones de proveedores tienen capacidad de lectura y
+escritura en la lista de números bloqueados. Otras aplicaciones no pueden acceder a la lista.</p>
+
+<p>Al hacer que el bloqueo de números sea una función estándar de la plataforma, Android permite que las
+aplicaciones admitan de manera uniforme el bloqueo de números en una amplia variedad de
+dispositivos. Entre los demás beneficios que pueden aprovechar las aplicaciones, se encuentran los siguientes:</p>
+
+<ul>
+ <li> Los números bloqueados en las llamadas también se bloquean en los mensajes de texto.
+ <li> Los números bloqueados pueden perdurar tras procesos de restablecimiento y cambios de dispositivos con la función Backup &
+Restore.
+ <li> Varias aplicaciones pueden usar la misma lista de números bloqueados.
+</ul>
+
+<p>De manera adicional, la integración de aplicaciones de proveedores a través de Android permite que estos
+lean la lista de números bloqueados del dispositivo y realicen un bloqueo de servicio
+para el usuario, a fin de evitar que el usuario reciba llamadas o mensajes de texto no deseados
+por cualquier medio, como terminales VOIP o teléfonos con transferencia de llamadas.</p>
+
+<p>
+ Para obtener más información, consulta <code>android.provider.BlockedNumberContract</code>
+ en la <a href="{@docRoot}preview/setup-sdk.html#docs-dl">referencia de la API
+ </a>descargable.
+</p>
+
+<h2 id="call_screening">Filtración de llamadas</h2>
+
+<p>
+ Android N permite que la aplicación predeterminada de un teléfono filtre las llamadas entrantes. La aplicación
+ hace esto a través del nuevo <code>CallScreeningService</code>,
+ que le permite realizar varias acciones según la clase
+ {@link android.telecom.Call.Details Call.Details} de la llamada entrante. Algunos ejemplos:
+</p>
+
+<ul>
+ <li> rechazar la llamada entrante;
+ <li> no permitir el ingreso de la llamada en el registro de llamadas;
+ <li> no mostrar al usuario una notificación de la llamada.
+</ul>
+
+<p>
+ Para obtener más información, consulta <code>android.telecom.CallScreeningService</code>
+ en la <a href="{@docRoot}preview/setup-sdk.html#docs-dl">referencia de la API
+ </a>descargable.
+</p>
+
+
+<h2 id="multi-locale_languages">Compatibilidad con varias configuraciones regionales y más idiomas</h2>
+
+
+<p>Android N permite a los usuarios seleccionar <strong>varias configuraciones regionales</strong> en Settings,
+para brindar una mejor compatibilidad con casos de uso de dos idiomas. Las aplicaciones pueden usar
+una nueva API para obtener las configuraciones regionales seleccionadas del usuario y luego ofrecer experiencias más sofisticadas
+para usuarios que usen varias configuraciones regionales; por ejemplo, pueden mostrar resultados de búsqueda en
+varios idiomas y no ofrecer traducciones de páginas web con idiomas que el
+usuario conozca.</p>
+
+<p>Además de la compatibilidad con varias configuraciones regionales, en Android N también se amplía la variedad de idiomas
+disponibles para los usuarios. Se ofrecen más de 25 variantes, cada una de ellas para idiomas de uso
+común, como el inglés, el español, el francés y el árabe. También se agrega compatibilidad
+parcial con más de 100 idiomas nuevos.</p>
+
+<p>Las aplicaciones pueden obtener la lista de configuraciones regionales establecida por el usuario llamando a
+<code>LocaleList.GetDefault()</code>. A fin de admitir la cantidad ampliada de configuraciones regionales, en Android N, se
+modificará la forma de resolver recursos. Asegúrate de controlar que tus aplicaciones
+funcionen de la manera esperada con la nueva lógica de resolución de recursos.</p>
+
+<p>Para obtener información sobre el nuevo comportamiento de resolución de recursos y las prácticas recomendadas que
+debes aplicar, consulta <a href="{@docRoot}preview/features/multilingual-support.html">Compatibilidad con varios idiomas</a>.</p>
+
+
+<h2 id="emoji">Nuevos emojis</h2>
+
+<p>
+ Android N presenta más emojis y funciones relacionadas con estos, como
+ emojis con diferentes tonos de piel y compatibilidad con selectores de
+ variación. Si tu aplicación admite emojis,
+ sigue las pautas a continuación para aprovechar estas funciones relacionadas con emojis.
+</p>
+
+<ul>
+ <li>
+ <strong>Comprueba que el dispositivo contenga el emoji antes de insertarlo.</strong>
+ Para corroborar qué emojis tiene la fuente del
+ sistema, usa el método {@link android.graphics.Paint#hasGlyph(String)}.
+ </li>
+ <li>
+ <strong>Comprueba que el emoji admita los selectores de variación.</strong>
+ Los selectores de variación te permiten
+ presentar determinados emojis en color o en blanco y negro.
+ En los dispositivos móviles, las aplicaciones deben representar los emojis en color, en lugar de hacerlo en blanco y negro. Sin embargo,
+ si tu aplicación muestra los emojis alineados con el texto, debe usar la variación de blanco y negro.
+ A fin de determinar si un emoji tiene una variación, usa el selector de variación.
+ Para conocer la lista completa de caracteres con variaciones, consulta la sección de
+ <em>secuencias de variación de emojis</em> de la
+ <a class="external-link" href="http://www.unicode.org/Public/9.0.0/ucd/StandardizedVariants-9.0.0d1.txt">
+ documentación de Unicode sobre variaciones</a>.
+ </li>
+ <li>
+ <strong>Comprueba que el emoji admita tonos de piel.</strong> Android N permite que los usuarios modifiquen el
+ tono de piel presentado de los emojis según su preferencia. Las aplicaciones de teclado deben brindar indicaciones
+ visuales para los emojis que tienen múltiples tonos de piel y permitir que los usuarios
+ seleccionen el tono que prefieran. Para determinar qué emojis del sistema tienen
+ modificadores del tono de piel, usa el método {@link android.graphics.Paint#hasGlyph(String)}.
+ Puedes determinar qué emojis usan tonos de piel leyendo la
+ <a class="external-link" href="http://unicode.org/emoji/charts/full-emoji-list.html">
+ documentación de Unicode</a>.
+ </li>
+</ul>
+
+
+<h2 id="icu4">API de ICU4J en Android</h2>
+
+<p>
+ Android N ahora ofrece un subconjunto de las API de <a href="http://site.icu-project.org/">ICU4J</a> dentro del framework de Android, en
+ el paquete <code>android.icu</code>. La migración es sencilla y en mayor medida implica
+ simplemente un cambio del espacio de nombres <code>com.java.icu</code> a
+ <code>android.icu</code>. Si ya usas el paquete ICU4J en tus
+ aplicaciones, el cambio a las API <code>android.icu</code> en el framework de Android
+ puede reducir notablemente el tamaño del APK.
+</p>
+
+<p>
+ Para obtener más información sobre las API de ICU4J de Android, consulta <a href="{@docRoot}preview/features/icu4j-framework.html">Compatibilidad con ICU4J</a>.
+</p>
+
+
+
+<h2 id="gles_32">API™ de OpenGL ES 3.2</h2>
+
+<p>En Android N se agregan interfaces de framework y compatibilidad con plataformas para OpenGL ES 3.2, entre las que se incluye lo siguiente:</p>
+
+<ul>
+ <li> todas las extensiones del <a class="external-link" href="https://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">
+paquete de extensiones de Android</a></a> (AEP), a excepción de <code>EXT_texture_sRGB_decode</code>;
+ <li> búferes de fotogramas de punto flotante para HDR y sombreado aplazado;
+ <li> llamadas a draw a través de BaseVertex para mejorar el procesamiento por lotes y la transmisión;
+ <li> sólido control de acceso a búfer para reducir la sobrecarga de WebGL.
+</ul>
+
+<p>En Android N, la API de framework para OpenGL ES 3.2 se proporciona con la clase
+<code>GLES32</code>. Al usar OpenGL ES 3.2, asegúrate de declarar el
+requisito en tu archivo de manifiesto, con la etiqueta <code><uses-feature></code> y el
+atributo <code>android:glEsVersion</code>. </p>
+
+<p>Para obtener información sobre el uso de OpenGL ES, incluida la manera de comprobar la
+versión de OpenGL ES que admite el dispositivo durante el tiempo de ejecución, consulta la<a href="{@docRoot}guide/topics/graphics/opengl.html"> guía de la API OpenGL ES</a>.</p>
+
+
+<h2 id="android_tv_recording">Grabación de Android TV</h2>
+
+<p>En Android N, se agrega la capacidad de grabar y reproducir contenido de servicios
+de entrada de Android TV a través de las nuevas API de grabación. Aprovechando las mejoras existentes de las API time shifting
+, los servicios de entrada de TV pueden controlar los datos de canales que pueden grabarse y la manera
+en que se guardan las sesiones grabadas, y administrar la interacción del usuario con el contenido grabado. </p>
+
+<p>Para obtener más información, consulta <a href="{@docRoot}preview/features/tv-recording-api.html">API de grabación de Android TV</a>.</p>
+
+
+<h2 id="android_for_work">Android for Work</h2>
+
+<p>Android for Work suma muchas funciones y API nuevas para dispositivos con Android N.
+A continuación, se muestran algunos aspectos destacados. Para ver la lista completa de cambios, consulta
+<a href="{@docRoot}preview/features/afw.html">Actualizaciones de Android for Work</a>.</p>
+
+<h3 id="work_profile_security_challenge">Comprobación de seguridad para perfiles de trabajo </h3>
+
+<p>
+ Los propietarios de perfiles orientados al SDK de Android N
+ pueden especificar una comprobación de seguridad independiente para las aplicaciones que se ejecutan en
+ el perfil de trabajo. La comprobación para perfiles de trabajo se muestra cuando un usuario intenta abrir
+ aplicaciones de trabajo. Cuando la comprobación de seguridad es exitosa, se desbloquea el
+ perfil de trabajo y se descifra si es necesario. Para quienes posean perfiles,
+ <code>ACTION_SET_NEW_PASSWORD</code> solicita al usuario establecer una comprobación de
+ trabajo y <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> le solicita
+ establecer un bloqueo de dispositivo.
+</p>
+
+<p>
+ Quienes posean perfiles pueden establecer políticas de contraseñas diferentes para la comprobación de seguridad de trabajo
+ (por ejemplo, la extensión que debe tener el PIN o la posibilidad de usar una huella digital
+ para desbloquear el perfil) usando <code>setPasswordQuality()</code>,
+ <code>setPasswordMinimumLength()</code> y métodos relacionados. También
+ pueden establecer el bloqueo del dispositivo usando la instancia de <code>DevicePolicyManager</code>
+ devuelta por el nuevo método <code>getParentProfileInstance()</code>.
+ Además, tienen la posibilidad de personalizar la pantalla de credenciales de la
+ comprobación de trabajo usando los nuevos métodos <code>setOrganizationColor()</code> y
+ <code>setOrganizationName()</code>.
+</p>
+<h3 id="turn_off_work">Desactivación del modo de trabajo </h3>
+
+<p>En dispositivos con perfil de trabajo, los usuarios pueden alternar el modo de trabajo. Cuando este último está
+inactivo, el usuario administrado queda deshabilitado temporalmente, con lo cual se desactivan las aplicaciones de perfiles
+de trabajo, la sincronización en segundo plano y las notificaciones. Esto incluye la aplicación del propietario del
+perfil. Cuando el modo de trabajo está inactivo, en el sistema se muestra un ícono
+de estado persistente para recordar al usuario que no puede iniciar aplicaciones de trabajo. El launcher
+indica que no es posible acceder a aplicaciones ni widgets de trabajo. </p>
+
+<h3 id="always_on_vpn">Always on VPN </h3>
+
+<p>Los propietarios de dispositivos y perfiles pueden asegurarse de que las aplicaciones de trabajo siempre se conecten
+a través de una VPN especificada. El sistema inicia dicha VPN en forma automática después del
+inicio del dispositivo.</p>
+
+<p>
+ Los nuevos métodos de <code>DevicePolicyManager</code> son
+ <code>setAlwaysOnVpnPackage()</code> y
+ <code>getAlwaysOnVpnPackage()</code>.
+</p>
+
+<p>Debido a que los servicios de VPN pueden enlazarse directamente a través del sistema sin interacción con
+aplicaciones, los clientes de VPN deben administrar nuevos puntos de entrada para Always on VPN. Al igual que
+antes, los servicios se indican al sistema con una
+clase <code>android.net.VpnService</code> de acción de coincidencia de filtro de intents. </p>
+
+<p>
+ Los usuarios también pueden establecer clientes Always on VPN que implementen métodos
+ <code>VPNService</code> en el usuario principal con
+ <strong>Settings > More > Vpn</strong>.
+</p>
+
+<h3 id="custom_provisioning">Aprovisionamiento personalizado</h3>
+
+<p>
+ En una aplicación, se pueden personalizar los flujos de aprovisionamiento
+ del propietario del perfil y del dispositivo con logos y colores corporativos.
+ <code>DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR</code> personaliza el
+ color del flujo. <code>DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI</code>
+ personaliza el flujo con un logotipo corporativo.
+</p>
+
+<h2 id="accessibility_enhancements">Mejoras de accesibilidad</h2>
+
+<p>Android N ahora ofrece Vision Settings directamente en la pantalla de bienvenida para la configuración de
+dispositivos nuevos. Esto permite a los usuarios descubrir y configurar de manera mucho más sencilla
+funciones de accesibilidad en sus dispositivos, como el gesto de ampliación, el tamaño
+de fuente, el tamaño de pantalla y TalkBack. </p>
+
+<p>Al tener estas funciones de accesibilidad una disposición más prominente, es más probable
+que tus usuarios prueben tu aplicación con ellas habilitadas. Asegúrate de probar tus aplicaciones
+anticipadamente con esta configuración habilitada. Puedes habilitarla en Settings >
+Accessibility.</p>
+
+<p>Además, los servicios de accesibilidad de Android N ahora pueden asistir a los usuarios con discapacidades
+motrices con el uso de la pantalla. La nueva API permite crear servicios con
+funciones como el seguimiento de rostros u ojos y la exploración por puntos, entre otros, para satisfacer
+las necesidades de estos usuarios.</p>
+
+<p>Para obtener más información, consulta <code>android.accessibilityservice.GestureDescription</code>
+ en la <a href="{@docRoot}preview/setup-sdk.html#docs-dl">referencia de la API</a> descargable.</p>
+
+
+<h2 id="direct_boot">Inicio directo</h2>
+
+<p>El inicio directo optimiza los tiempos de inicio del dispositivo y permite una funcionalidad
+limitada de las aplicaciones aun después de un reinicio inesperado.
+Por ejemplo, si un dispositivo encriptado se reinicia mientras el usuario duerme,
+este último puede continuar recibiendo en forma normal notificaciones de alarmas, llamadas entrantes y mensajes
+registrados. Esto también significa que los servicios de accesibilidad también pueden estar
+ disponibles de inmediato después de un reinicio.</p>
+
+<p>El inicio directo aprovecha la encriptación basada en archivos de Android N,
+a fin de habilitar políticas de encriptación específicas para datos del sistema y de aplicaciones.
+El sistema usa un encriptado por el dispositivo para datos de sistema seleccionados y datos de aplicaciones
+explícitamente registrados. De forma predeterminada, se usa un depósito encriptado con credenciales para los
+ datos de sistema, los datos de usuario, las aplicaciones y los datos de aplicaciones restantes. </p>
+
+<p>Durante el inicio, el sistema se carga en un modo restringido con acceso únicamente
+a datos encriptados por el dispositivo y sin acceso general a aplicaciones o datos.
+Si hay componentes que deseas ejecutar en este modo, puedes registrarlos
+configurando un marcador en el manifiesto. Después del reinicio, el sistema activa
+componentes registrados transmitiendo la intent <code>LOCKED_BOOT_COMPLETED</code>
+. El sistema garantiza que estén disponibles los datos de aplicaciones encriptados por el dispositivo
+antes de la desactivación del bloqueo. No es posible acceder a los demás datos hasta que el usuario confirme sus credenciales de pantalla de
+ bloqueo para descifrarlos. </p>
+
+Para obtener más información, consulta <a href="{@docRoot}preview/features/direct-boot.html">Inicio directo</a>.</p>
+</p>
+
+
+<h2 id="key_attestation">Atestación de claves</h2>
+
+<p>Los depósitos de claves guardados en hardware proporcionan un método mucho más seguro para crear, almacenar
+y usar claves criptográficas en dispositivos Android. Protegen las claves contra funciones del kernel de
+Linux, vulnerabilidades potenciales de Android y extracciones
+de dispositivos con derechos de administrador.</p>
+
+<p>Para hacer más sencillo y seguro el uso de depósitos de claves guardados en hardware,
+en Android N, se presenta la atestación de claves. En las aplicaciones y en los servicios que no dependen de los dispositivos se puede usar la atestación
+de claves para determinar fehacientemente el almacenamiento de un par de claves RSA o EC se
+en hardware, las propiedades de dicho par y las
+ limitaciones aplicadas a su uso y validez. </p>
+
+<p>Los servicios que no dependen de los dispositivos y las aplicaciones pueden solicitar información acerca de un par de claves
+a través de un certificado de atestación X.509 que debe firmarse con una clave de atestación
+válida. La clave de atestación es una clave de firma ECDSA que se
+inyecta en el depósito de claves guardado en hardware en la fábrica.
+Por lo tanto, un certificado de atestación firmado con una clave de atestación
+válida confirma la existencia de un depósito de claves guardado en hardware y de información detallada
+ sobre los pares de claves en dicho depósito de claves.</p>
+
+<p>Para asegurarse de que el dispositivo use una imagen segura y oficial de fábrica de
+Android, la atestación de claves solicita que el <a class="external-link" href="https://source.android.com/security/verifiedboot/verified-boot.html#bootloader_requirements">bootloader</a>
+del dispositivo proporcione la siguiente información al <a class="external-link" href="https://source.android.com/security/trusty/index.html">entorno de ejecución
+seguro (TEE)</a>:</p>
+
+<ul>
+<li>la versión del SO y el nivel de revisión instalados en el dispositivo;</li>
+<li>la clave pública de <a href="https://source.android.com/security/verifiedboot/index.html" class="external-link">Verified Boot</a> y el estado de bloqueo.</li>
+ </ul>
+
+<p>Para obtener más información sobre la función de depósitos de claves guardados en hardware,
+consulta la guía de<a href="https://source.android.com/security/keystore/" class="external-link"> Depósito de clave guardado en hardware</a>.</p>
+
+<p>Además de la atestación de claves, en Android N también se presentan
+ claves enlazadas a huellas digitales no revocadas en la inscripción con estas huellas.</p>
+
+<h2 id="network_security_config">Configuración de seguridad de la red</h2>
+
+<p>En Android N, las aplicaciones pueden personalizar el comportamiento de sus conexiones protegidas (HTTPS y TLS)
+en forma segura, sin modificaciones en el código, a través de la
+<em>Configuración de seguridad de la red</em> en lugar de las API
+convencionales, propensas a generar errores (p. ej., X509TrustManager).</p>
+
+ <p>Funciones admitidas:</p>
+<ul>
+<li><b>Anclajes de confianza personalizados.</b> Permite personalizar qué autoridades de
+certificado (CA) son de confianza para las conexiones de seguridad de una aplicación. Por ejemplo,
+ confiar en certificados autofirmados particulares o un conjunto restringido de CA públicas.
+</li>
+<li><b>Anulaciones de solo depuración.</b> Permite que el desarrollador de una aplicación depure en forma segura
+conexiones protegidas de su aplicación sin riesgos adicionales para la base
+instalada.
+</li>
+<li><b>Desactivación del tráfico de Cleartext.</b> Permite que una aplicación se proteja a sí misma contra
+el uso accidental de tráfico de Cleartext.</li>
+<li><b>Fijación de certificados.</b> Esta es una función avanzada que permite a una aplicación
+ limitar las claves de servidores en las que se pueda confiar para conexiones protegidas.</li>
+</ul>
+
+<p>Para obtener más información, consulta <a href="{@docRoot}preview/features/security-config.html">Configuración de seguridad de
+la red</a>.</p>
+
+<h2 id="default_trusted_ca">Entidad de certificación de confianza predeterminada</h2>
+
+<p>De manera predeterminada, en las aplicaciones orientadas a Android N solo se consideran como confiables los certificados proporcionados por el sistema
+y ya no se da esta misma consideración a las entidades de certificación (CA) agregadas por usuarios. En aquellas aplicaciones orientadas a Android
+N para las cuales se desee considerar tales CA como válidas, se debe usar la
+<a href="{@docRoot}preview/features/security-config.html">Configuración de seguridad de la red</a> a fin de
+especificar los términos de confianza de dichas CA.</p>
+
+<h2 id="apk_signature_v2">Esquema de firma de APK v2</h2>
+
+<p>
+ Android N presenta el esquema de firma de APK v2, un nuevo esquema de firma de aplicaciones que
+ ofrece instalación más rápida de las aplicaciones y mayor protección contra alteraciones
+ no autorizadas de archivos APK. De forma predeterminada, Android Studio 2.2 y el complemento de Android
+ para Gradle 2.2 firman tu aplicación con el esquema de firma de APK v2 y
+ el esquema de firma tradicional, que utiliza la firma JAR.
+</p>
+
+<p>
+ Aunque recomendamos que implementes el esquema de firma de APK v2 en tu aplicación, este esquema
+ nuevo no es obligatorio. Si la aplicación no se compila correctamente con el
+ esquema de firma de APK v2, puedes deshabilitar este esquema nuevo. Si se deshabilita el proceso,
+ Android Studio 2.2 y el complemento de Android para Gradle 2.2 firman tu
+ aplicación con el esquema de firma tradicional solamente. Para firmar solo con el
+ esquema tradicional, abre el archivo <code>build.gradle</code> del nivel del módulo, a continuación,
+ agrega la línea <code>v2SigningEnabled false</code> a la configuración de firma
+ de la versión:
+</p>
+
+<pre>
+ android {
+ ...
+ defaultConfig { ... }
+ signingConfigs {
+ release {
+ storeFile file("myreleasekey.keystore")
+ storePassword "password"
+ keyAlias "MyReleaseKey"
+ keyPassword "password"
+ <strong>v2SigningEnabled false</strong>
+ }
+ }
+ }
+</pre>
+
+<p class="caution"><strong>Advertencia: </strong> Si firmas la aplicación con el
+ esquema de firma de APK v2 y luego la modificas, se invalida
+ la firma de la aplicación. Por este motivo, usa herramientas como <code>zipalign</code>
+ antes de firmar la aplicación con el esquema de firma de APK v2, y no después.
+</p>
+
+<p>
+ Para obtener más información, lee los documentos de Android Studio que describen cómo
+ <a href="{@docRoot}studio/publish/app-signing.html#release-mode">
+ firmar una aplicación</a> en Android Studio y cómo<a href="{@docRoot}studio/build/build-variants.html#signing"> configurar
+ el archivo de compilación para firmar aplicaciones</a> con el complemento de Android para Gradle.
+</p>
+
+<h2 id="scoped_directory_access">Acceso a directorios determinados</h2>
+
+<p>En Android N, las aplicaciones pueden usar nuevas API para solicitar acceso a directorios de <a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">almacenamiento
+externo</a> específicos, incluidos los directorios de medios extraíbles, como las tarjetas
+SD. Las nuevas API simplifican enormemente la manera en que tu aplicación accede a directorios
+de almacenamiento externo estándares, como <code>Pictures</code>. Las aplicaciones
+de fotografía, por ejemplo, pueden usar estas API en lugar de
+<code>READ_EXTERNAL_STORAGE</code>, que otorga acceso a todos los directorios
+de almacenamiento, o del framework de acceso a almacenamiento, con el cual el usuario debe navegar hasta
+el directorio.</p>
+
+<p>A su vez, las nuevas API simplifican los pasos que un usuario debe seguir para otorgar a tu aplicación acceso a almacenamiento
+externo. Cuando se usan las nuevas API, el sistema emplea una IU de
+permisos simple en la que se detallan claramente los directorios a los cuales
+la aplicación solicita acceso.</p>
+
+<p>Para obtener más información, consulta la documentación
+<a href="{@docRoot}preview/features/scoped-folder-access.html">Acceso
+a directorios determinados</a> para desarrolladores.</p>
+
+<h2 id="keyboard_shortcuts_helper">Ayuda en los métodos abreviados del teclado</h2>
+
+<p>
+En Android N, el usuario puede presionar "Alt + /" para activar una pantalla de <em>métodos abreviados del teclado</em>
+que muestra todos los métodos abreviados disponibles, tanto para el
+sistema como la aplicación que esté en primer plano. Estos se recuperan automáticamente del menú de la aplicación si
+están disponibles, pero los desarrolladores pueden proporcionar sus propios métodos abreviados perfeccionados
+para la pantalla. Puedes hacerlo anulando el nuevo método
+<code>Activity.onProvideKeyboardShortcuts()</code>, lo que se describe en la
+<a href="{@docRoot}preview/setup-sdk.html#docs-dl">referencia de la API</a> descargable.
+</p>
+
+<p>
+Para activar la ayuda en los métodos abreviados del teclado desde cualquier ubicación en la aplicación,
+llama a {@code Activity.requestKeyboardShortcutsHelper()} para la actividad relevante.
+</p>
+
+<h2 id="sustained_performance_api">API de rendimiento sostenido</h2>
+
+<p>
+El rendimiento puede fluctuar considerablemente en las aplicaciones de ejecución prolongada porque el
+sistema limita los motores de sistemas en chip cuando los componentes del dispositivo alcanzan los
+límites de temperatura. Esta fluctuación presenta un objetivo móvil para los desarrolladores
+de aplicaciones que crean aplicaciones de alto rendimiento y ejecución prolongada.
+</p>
+
+<p>
+Android N incluye compatibilidad opcional para un
+<em>modo de rendimiento sostenido</em>, que permite que los fabricantes de equipo original (OEM) arrojen datos sobre las capacidades de rendimiento del dispositivo
+para las aplicaciones de ejecución prolongada. Los desarrolladores
+de aplicaciones pueden usar estos datos para perfeccionar sus aplicaciones y alcanzar un nivel
+uniforme y predecible de rendimiento en el dispositivo durante períodos prolongados.
+</p>
+
+<p>
+Los desarrolladores de aplicaciones solo pueden probar esta API nueva en la N Developer Preview instalada solo en dispositivos con
+Nexus 6P. Para usar esta función,
+establece el indicador de rendimiento sostenido de la ventana
+que deseas ejecutar en el modo de rendimiento sostenido. Establece este indicador con el método
+{@code Window.setSustainedPerformanceMode()}. El sistema deshabilita
+automáticamente este modo cuando la ventana deja de estar en primer plano.
+</p>
+
+<h2 id="vr">Soporte de RV</h2>
+
+<p>
+Android N agrega compatibilidad y optimizaciones de plataforma para un modo de RV nuevo, con el objetivo de que los
+ desarrolladores puedan forjar experiencias de RV móviles de alta calidad para los usuarios. Hay varias mejoras en el
+rendimiento, entre las que se incluye el acceso a un núcleo de CPU exclusivo para aplicaciones de RV.
+Dentro de tus aplicaciones, puedes aprovechar el seguimiento de cabeza inteligente
+y las notificaciones en sonido estéreo que funcionan para la RV. Un dato muy importante es que Android N presenta
+muy pocos gráficos de baja latencia. Para obtener información completa sobre el desarrollo de aplicaciones de RV para Android N,
+consulta <a href="https://developers.google.com/vr/android/">Google VR SDK para Android</a>.
+</p>
+
+
+<h2 id="print_svc">Mejoras del servicio de impresión</h2>
+
+<p>
+ En Android N, los desarrolladores de servicios de impresión ahora pueden publicar información adicional
+ sobre impresoras y trabajos de impresión individuales.
+</p>
+
+<p>
+ Al enumerar las impresoras individuales, un servicio de impresión ahora puede establecer íconos
+ por impresora de dos maneras:
+</p>
+
+<ul>
+ <li>Puedes establecer un ícono desde el id. de un recurso llamando a
+ <code>PrinterInfo.Builder.setResourceIconId()</code>.
+ </li>
+
+ <li>Puedes mostrar un ícono de la red llamando a
+ <code>PrinterInfo.Builder.setHasCustomPrinterIcon()</code> y configurando un
+ callback para cuando se solicite el ícono con
+ <code>android.printservice.PrinterDiscoverySession.onRequestCustomPrinterIcon()</code>.
+ </li>
+</ul>
+
+<p>
+ Además, puedes proporcionar las actividades por impresora para mostrar información
+ adicional llamando a <code>PrinterInfo.Builder.setInfoIntent()</code>.
+</p>
+
+<p>
+ Puedes indicar el progreso y el estado de los trabajos de impresión en la notificación de
+ trabajo de impresión llamando a
+ <code>android.printservice.PrintJob.setProgress()</code> y
+ <code>android.printservice.PrintJob.setStatus()</code>, respectivamente.
+</p>
+
+<p>
+ Para obtener más información sobre estos métodos, consulta la <a href="{@docRoot}preview/setup-sdk.html#docs-dl">referencia de la API</a> descargable.
+</p>
+
+<h2 id="framemetrics_api">API FrameMetricsListener</h2>
+
+<p>
+La API FrameMetricsListener permite que una aplicación monitoree el rendimiento de la representación
+de la IU. La API brinda esta capacidad mediante la exposición de una transmisión de API Pub/Sub para transferir información sobre el tiempo
+de los cuadros para la ventana actual de la aplicación. Los datos devueltos son
+equivalentes a lo que muestra <code><a href="{@docRoot}tools/help/shell.html#shellcommands">adb shell</a>
+dumpsys gfxinfo framestats</code>, pero no se limita a los últimos 120 cuadros.
+</p>
+
+<p>
+Puedes usar FrameMetricsListener para medir el rendimiento de
+la IU del nivel de interacción en producción sin contar con una conexión USB. Esta API
+permite recopilar datos con una especificidad mayor que
+{@code adb shell dumpsys gfxinfo}. Esta especificidad mayor es posible porque
+el sistema puede recopilar datos para interacciones determinadas en la aplicación, sin que sea
+necesario que el sistema obtenga un resumen global del
+rendimiento de toda la aplicación o borre un estado global. Puedes usar esta
+capacidad con el objetivo de recopilar datos de rendimiento e identificar regresiones en el rendimiento de la IU
+para casos de uso reales dentro de una aplicación.
+</p>
+
+<p>
+Para monitorear una ventana, implementa el callback <code>FrameMetricsListener.onMetricsAvailable()</code>
+y regístralo en esa ventana. Para obtener más información, consulta
+la documentación de la clase {@code FrameMetricsListener}
+en la <a href="{@docRoot}preview/setup-sdk.html#docs-dl">referencia de la API</a> descargable.
+</p>
+
+<p>
+La API proporciona un objeto {@code FrameMetrics}, que contiene datos de intervalos que
+el subsistema de representación informa sobre varios hitos en el ciclo de vida de un marco.
+Las métricas compatibles son {@code UNKNOWN_DELAY_DURATION},
+{@code INPUT_HANDLING_DURATION}, {@code ANIMATION_DURATION},
+{@code LAYOUT_MEASURE_DURATION}, {@code DRAW_DURATION}, {@code SYNC_DURATION},
+{@code COMMAND_ISSUE_DURATION}, {@code SWAP_BUFFERS_DURATION},
+{@code TOTAL_DURATION} y {@code FIRST_DRAW_FRAME}.
+</p>
+
+
+<h2 id="virtual_files">Archivos virtuales</h2>
+
+<p>
+ En versiones anteriores de Android, tu aplicación podía usar el framework
+ de acceso al almacenamiento para permitir a los usuarios seleccionar archivos de cuentas de almacenamiento en la nube,
+ como Google Drive. Sin embargo, no se podían representar los archivos que no
+ tenían una representación directa en código de bits; cada archivo debía brindar
+ un flujo de entrada.
+</p>
+
+<p>
+ Android N incorpora el concepto de <em>archivos virtuales</em> al framework
+ de acceso al almacenamiento. La función de archivos virtuales permite que tu
+ {@link android.provider.DocumentsProvider} devuelva URI de documentos que se pueden
+ usar en una intent {@link android.content.Intent#ACTION_VIEW} incluso si
+ no tienen una representación directa en código de bits. Android N también te permite
+ ofrecer formatos alternativos para archivos del usuario, virtuales u otros.
+</p>
+
+<p>
+ Para obtener un URI para un documento virtual en tu aplicación, primero crea una
+ {@link android.content.Intent} a fin de abrir la IU del selector de archivos. Como una aplicación
+ no puede abrir directamente un archivo virtual con el método
+ {@link android.content.ContentResolver#openInputStream(Uri) openInputStream()},
+ la aplicación no recibe ningún archivo virtual si incluyes la categoría
+ {@link android.content.Intent#CATEGORY_OPENABLE}.
+</p>
+
+<p>
+ Cuando el usuario realiza una selección, el sistema llama al método
+ {@link android.app.Activity#onActivityResult onActivityResult()}.
+ La aplicación puede recuperar el URI del archivo virtual y obtener un flujo de entrada, como
+ se demuestra en el fragmento de código a continuación.
+</p>
+
+<pre>
+ // Other Activity code ...
+
+ final static private int REQUEST_CODE = 64;
+
+ // We listen to the OnActivityResult event to respond to the user's selection.
+ @Override
+ public void onActivityResult(int requestCode, int resultCode,
+ Intent resultData) {
+ try {
+ if (requestCode == REQUEST_CODE &&
+ resultCode == Activity.RESULT_OK) {
+
+ Uri uri = null;
+
+ if (resultData != null) {
+ uri = resultData.getData();
+
+ ContentResolver resolver = getContentResolver();
+
+ // Before attempting to coerce a file into a MIME type,
+ // check to see what alternative MIME types are available to
+ // coerce this file into.
+ String[] streamTypes =
+ resolver.getStreamTypes(uri, "*/*");
+
+ AssetFileDescriptor descriptor =
+ resolver.openTypedAssetFileDescriptor(
+ uri,
+ streamTypes[0],
+ null);
+
+ // Retrieve a stream to the virtual file.
+ InputStream inputStream = descriptor.createInputStream();
+ }
+ }
+ } catch (Exception ex) {
+ Log.e("EXCEPTION", "ERROR: ", ex);
+ }
+ }
+</pre>
+
+<p>
+ Para obtener más información sobre el acceso a archivos del usuario, consulta la
+ <a href="{@docRoot}guide/topics/providers/document-provider.html">guía
+ Frameworks de acceso a almacenamiento</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
new file mode 100644
index 0000000..59afd81
--- /dev/null
+++ b/docs/html-intl/intl/es/about/versions/nougat/index.jd
@@ -0,0 +1,109 @@
+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
+
+<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-8of16" style="padding-left:2em">
+ <h1 class="dac-hero-title">Android 7.0 Nougat</h1>
+ <p class="dac-hero-description">
+ ¡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}about/versions/nougat/android-7.0.html">
+ <span class="dac-sprite dac-auto-chevron"></span>
+ Comencemos
+ </a>
+ </div>
+ <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></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>
+</section>
+
+<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://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/dev-community">
+ <i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
+ Únete a la comunidad de desarrolladores
+ </a>
+ </li>
+ </ul>
+ </div><!-- end .wrap -->
+</div><!-- end .dac-actions -->
+
+<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"
+ data-query="type:blog+tag:androidn+tag:featured, type:youtube+tag:androidn+tag:featured"
+ data-sortOrder="-timestamp"
+ data-cardSizes="6x6"
+ data-items-per-page="6"
+ data-maxResults="15"
+ data-initial-results="3"></div>
+</div></section>
+
+<section class="dac-section dac-gray" id="videos"><div class="wrap">
+ <h1 class="dac-section-title">Videos</h1>
+ <div class="dac-section-subtitle">
+ 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: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>
\ No newline at end of file
diff --git a/docs/html-intl/intl/es/preview/j8-jack.jd b/docs/html-intl/intl/es/guide/platform/j8-jack.jd
similarity index 100%
rename from docs/html-intl/intl/es/preview/j8-jack.jd
rename to docs/html-intl/intl/es/guide/platform/j8-jack.jd
diff --git a/docs/html-intl/intl/es/guide/topics/ui/multi-window.jd b/docs/html-intl/intl/es/guide/topics/ui/multi-window.jd
new file mode 100644
index 0000000..0a9cbe2
--- /dev/null
+++ b/docs/html-intl/intl/es/guide/topics/ui/multi-window.jd
@@ -0,0 +1,589 @@
+page.title=Compatibilidad con ventanas múltiples
+page.metaDescription=Nueva compatibilidad en Android N para mostrar más de una aplicación a la vez.
+page.keywords="multi-window", "android N", "split screen", "free-form"
+
+@jd:body
+
+<div id="tb-wrapper">
+ <div id="tb">
+ <h2>En este documento</h2>
+ <ol>
+ <li><a href="#overview">Información general</a></li>
+ <li><a href="#lifecycle">Ciclo de vida en modo de ventanas múltiples</a></li>
+ <li><a href="#configuring">Configuración de tu aplicación para el modo de
+ ventanas múltiples</a></li>
+ <li><a href="#running">Ejecución de tu aplicación en modo de ventanas múltiples</a></li>
+ <li><a href="#testing">Prueba de la compatibilidad de tu aplicación con el uso de ventanas múltiples</a></li>
+ </ol>
+ <h2>Consulta también</h2>
+ <ol>
+ <li><a class="external-link" href="https://github.com/googlesamples/android-MultiWindowPlayground">Aplicación de ejemplo para la
+ prueba de ventanas múltiples</a></li>
+ <li><a class="external-link" href="https://medium.com/google-developers/5-tips-for-preparing-for-multi-window-in-android-n-7bed803dda64">Cinco tips para prepararse para ventanas múltiples en Android N</a></li>
+ </ol>
+ </div>
+</div>
+
+<p>
+ Android N agrega compatibilidad con la visualización de más de una aplicación
+ a la vez. En dispositivos portátiles, se pueden ejecutar dos aplicaciones una al lado de la otra o
+ una por encima de la otra en modo de <em>pantalla dividida</em>. En dispositivos de TV, las aplicaciones pueden
+ usar el modo <em>picture-in-picture</em> para continuar la reproducción de video mientras los usuarios
+ interactúan con otra aplicación.
+</p>
+
+<p>
+ Si compilas tu aplicación con el N Preview SDK, puedes configurar la manera en que tu aplicación
+ administra la visualización de ventanas múltiples. Por ejemplo, puedes especificar las dimensiones
+ mínimas permitidas de tu actividad. También puedes inhabilitar la visualización de ventanas múltiples para
+ tu aplicación asegurándote de que el sistema solo muestre tu aplicación en modo de
+ pantalla completa.
+</p>
+
+<h2 id="overview">Información general</h2>
+
+<p>
+ Android N permite que varias aplicaciones compartan la pantalla al mismo tiempo. Por
+ ejemplo, un usuario podría dividir la pantalla y ver una página web a la izquierda
+ mientras escribe un correo electrónico a la derecha. La experiencia de usuario depende
+ del dispositivo:
+</p>
+
+<ul>
+ <li>Los dispositivos portátiles con Android N ofrecen modo de
+ pantalla dividida. En este modo, el sistema ocupa la pantalla con dos aplicaciones y las muestra
+ una al lado de la otra o una encima de la otra. El usuario puede arrastrar la línea que divide
+ las dos aplicaciones para visualizar una más grande que la otra.
+ </li>
+
+ <li>En dispositivos Nexus Player con Android N, las aplicaciones pueden ubicarse automáticamente
+ en <a href="picture-in-picture.html">modo Picture-in-picture</a>, lo que les permite
+ continuar mostrando contenido mientras el usuario explora o interactúa con
+ otras aplicaciones.
+ </li>
+
+ <li>Los fabricantes de dispositivos más grandes pueden optar por habilitar el modo
+ de forma libre, en el que el usuario puede modificar libremente el tamaño de cada actividad. Si el
+ fabricante habilita está función, el dispositivo ofrecerá modo de forma libre además
+ del modo de pantalla dividida.
+ </li>
+</ul>
+
+<img src="{@docRoot}images/android-7.0/mw-splitscreen.png" alt="" width="650" srcset="{@docRoot}images/android-7.0/mw-splitscreen.png 1x,
+ {@docRoot}images/android-7.0/mw-splitscreen_2x.png 2x," id="img-split-screen" />
+<p class="img-caption">
+ <strong>Figura 1:</strong> Dos aplicaciones ejecutándose una al lado de la otra en modo de pantalla dividida.
+</p>
+
+<p>
+ El usuario puede cambiar a modo de ventanas múltiples de la siguiente manera:
+</p>
+
+<ul>
+ <li>Si el usuario abre la <a href="{@docRoot}guide/components/recents.html">pantalla
+ Overview</a> y presiona durante un momento el
+ título de una actividad, puede arrastrar esa actividad a una parte resaltada de la
+ pantalla para llevarla a modo de ventanas múltiples.
+ </li>
+
+ <li>Si el usuario presiona durante un momento el botón Overview, el dispositivo coloca
+ la actividad actual en modo de ventanas múltiples y abre la pantalla Overview para
+ permitirle al usuario seleccionar otra actividad para compartir la pantalla.
+ </li>
+</ul>
+
+<p>
+ Los usuarios pueden <a href="{@docRoot}guide/topics/ui/drag-drop.html">arrastrar y
+ soltar</a> datos de una actividad a otra mientras las actividades comparten
+ la pantalla. (Antes, los usuarios solo podían arrastrar y soltar datos dentro de una sola
+ actividad).
+</p>
+
+<h2 id="lifecycle">Ciclo de vida en modo de ventanas múltiples</h2>
+
+<p>
+ El modo de ventanas múltiples no cambia el <a href="{@docRoot}training/basics/activity-lifecycle/index.html">ciclo de vida
+ de la actividad</a>.
+</p>
+
+<p>
+ En modo de ventanas múltiples, solo la actividad con la que el usuario interactuó más recientemente
+ está activa en un momento determinado. Esa actividad se considera la <em>principal</em>.
+ Todas las demás actividades están pausadas, aunque estén visibles.
+ No obstante, el sistema les da a esas actividades pausadas pero visibles una prioridad más alta
+ que las actividades que no están visibles. Si el usuario interactúa con una de las
+ actividades pausadas, se reanuda esa actividad y se pausa la actividad que antes
+ era la principal.
+</p>
+
+<p class="note">
+ <strong>Nota:</strong> En modo de ventanas múltiples, una aplicación puede estar pausada
+ y aún visible para el usuario. Es posible que una aplicación necesite continuar sus
+ actividades mientras está pausada. Por ejemplo, una aplicación de reproducción de video que está
+ pausada pero visible debería continuar mostrando el video. Por ese
+ motivo, recomendamos que las actividades que reproducen video <em>no</em> pausen el
+ video en sus controladores{@link android.app.Activity#onPause onPause()}.
+ En su lugar, deben pausar el video en {@link android.app.Activity#onStop
+ onStop()} y reanudar la reproducción en {@link android.app.Activity#onStart
+ onStart()}.
+</p>
+
+<p>
+ Cuando el usuario coloca una aplicación en modo de ventanas múltiples, el sistema le notifica a la
+ actividad de un cambio de configuración, tal como se especifica en <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Control de cambios en
+ tiempo de ejecución</a>. Esto también sucede cuando el usuario modifica el tamaño de la aplicación o coloca la aplicación
+ nuevamente en el modo de pantalla completa.
+ Básicamente, este cambio tiene las mismas consecuencias en el ciclo de vida
+ de la actividad que cuando el sistema notifica a la aplicación que el dispositivo cambió de
+ modo vertical a modo de paisaje, excepto porque se modifican las dimensiones del dispositivo
+ en lugar de intercambiarse solamente. Como se aborda en <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Control de cambios en
+ tiempo de ejecución</a>, tu actividad puede administrar el cambio de configuración por sí misma, o
+ puede permitir que el sistema destruya la actividad y la vuelva a crear con las nuevas
+ dimensiones.
+</p>
+
+<p>
+ Si el usuario cambia el tamaño de una ventana y la agranda en cualquier dirección, el
+ sistema modifica el tamaño de la actividad para que coincida con la acción del usuario y emite <a href="{@docRoot}guide/topics/resources/runtime-changes.html">cambios en tiempo de ejecución</a>
+ según sean necesarios. Si la aplicación se retrasa en el trazado de áreas recientemente expuestas, el
+ sistema rellena esas áreas con el color especificado por el atributo {@link
+ android.R.attr#windowBackground windowBackground} o por el atributo de estilo predeterminado
+ <code>windowBackgroundFallback</code>.
+</p>
+
+<h2 id="configuring">Configuración de tu aplicación para el modo de ventanas múltiples</h2>
+
+<p>
+ Si tu aplicación está orientada a Android N, puedes configurar cómo y
+ si quieres que las actividades de tu aplicación admitan la visualización de ventanas múltiples. Puedes establecer
+ atributos en tu manifiesto para controlar el tamaño y el diseño.
+ La configuración de atributos de una actividad raíz se aplica a todas las actividades
+ de su pila de tareas. Por ejemplo, si
+ <code>android:resizeableActivity</code> está configurado en true para la actividad raíz, se puede modificar el tamaño de todas las actividades
+ de la pila de tareas.
+</p>
+
+<p class="note">
+ <strong>Nota:</strong> Si compilas una aplicación con múltiples orientaciones con una versión del
+ SDK anterior a Android N, y el usuario usa la aplicación en
+ modo de ventanas múltiples, el sistema cambia el tamaño de la aplicación de forma forzada. El sistema presenta un
+ cuadro de diálogo en el que se advierte al usuario que la aplicación puede comportarse de forma inesperada. El sistema
+ <em>no</em> modifica el tamaño de aplicaciones con orientación fija; si
+ el usuario intenta abrir una aplicación con orientación fija en modo de ventanas múltiples,
+ la aplicación ocupará toda la pantalla.
+</p>
+
+<h4 id="resizeableActivity">android:resizeableActivity</h4>
+<p>
+ Establece este atributo en el nodo <code><activity></code> o
+ <code><application></code> de tu manifiesto para habilitar o inhabilitar la visualización
+ en modo de ventanas múltiples:
+</p>
+
+<pre>
+android:resizeableActivity=["true" | "false"]
+</pre>
+
+<p>
+ Si este atributo se establece en true, la actividad puede iniciarse en
+ los modos de pantalla dividida y forma libre. Si el atributo se establece en false, la
+ actividad no admite el modo de ventanas múltiples. Si el valor es false, y el
+ usuario intenta iniciar la actividad en modo de ventanas múltiples, la actividad ocupará
+ toda la pantalla.
+</p>
+
+<p>
+ Si tu aplicación está orientada a Android N, pero no especificas un valor
+ para este atributo, el valor predeterminado del atributo será true.
+</p>
+
+<h4 id="supportsPictureInPicture">android:supportsPictureInPicture</h4>
+
+<p>
+ Establece este atributo en el nodo <code><activity></code> de tu manifiesto
+ para indicar si la actividad admite la visualización de Picture-in-picture. Este
+ atributo se ignora si <code>android:resizeableActivity</code> es false.
+</p>
+
+<pre>
+android:supportsPictureInPicture=["true" | "false"]
+</pre>
+
+<h3 id="layout">Atributos de diseño</h3>
+
+<p>
+ Con Android N, el elemento de manifiesto <code><layout></code>
+ admite varios atributos que afectan cómo se comporta una actividad en
+ modo de ventanas múltiples:
+</p>
+
+<dl>
+ <dt>
+ <code>android:defaultWidth</code>
+ </dt>
+
+ <dd>
+ Ancho predeterminado de la actividad cuando se inicia en modo de forma libre.
+ </dd>
+
+ <dt>
+ <code>android:defaultHeight</code>
+ </dt>
+
+ <dd>
+ Altura predeterminada de la actividad cuando se inicia en modo de forma libre.
+ </dd>
+
+ <dt>
+ <code>android:gravity</code>
+ </dt>
+
+ <dd>
+ Ubicación inicial de la actividad cuando se inicia en modo de forma libre. Consulta la referencia
+ {@link android.view.Gravity} para obtener valores adecuados.
+ </dd>
+
+ <dt>
+ <code>android:minimalHeight</code>, <code>android:minimalWidth</code>
+ </dt>
+
+ <dd>
+ Altura y ancho mínimos para la actividad tanto en el modo de pantalla dividida como en el
+ modo de forma libre. Si el usuario mueve la línea divisoria en el modo de pantalla dividida
+ para reducir el tamaño respecto del tamaño mínimo especificado, el sistema recorta
+ la actividad para ajustarla a los requisitos del usuario.
+ </dd>
+</dl>
+
+<p>
+ Por ejemplo, el siguiente código muestra cómo especificar el tamaño
+ y la ubicación predeterminados de una actividad, y su tamaño mínimo, cuando la actividad se visualiza en
+ modo de forma libre:
+</p>
+
+<pre>
+<activity android:name=".MyActivity">
+ <layout android:defaultHeight="500dp"
+ android:defaultWidth="600dp"
+ android:gravity="top|end"
+ android:minimalHeight="450dp"
+ android:minimalWidth="300dp" />
+</activity>
+</pre>
+
+<h2 id="running">Ejecución de tu aplicación en modo de ventanas múltiples</h2>
+
+<p>
+ Android N ofrece nuevas funcionalidades para admitir aplicaciones que puedan ejecutarse
+ en modo de ventanas múltiples.
+</p>
+
+<h3 id="disabled-features">Funciones deshabilitadas en modo de ventanas múltiples</h3>
+
+<p>
+ Ciertas funciones están deshabilitadas o se ignoran cuando un dispositivo se encuentra en modo de
+ ventanas múltiples, ya que no resultan útiles para una actividad que podría estar compartiendo la
+ pantalla del dispositivo con otras actividades o aplicaciones. Esas funciones incluyen las siguientes:
+
+<ul>
+ <li>Algunas opciones de personalización de la <a href="{@docRoot}training/system-ui/index.html">IU del sistema</a>
+ están deshabilitadas; por ejemplo, las aplicaciones no pueden ocultar la barra de
+ estado si no se están ejecutando en modo de pantalla completa.
+ </li>
+
+ <li>El sistema ignora los cambios en el atributo <code><a href=
+ "{@docRoot}guide/topics/manifest/activity-element.html#screen"
+ >android:screenOrientation</a></code>.
+ </li>
+</ul>
+
+<h3 id="change-notification">Notificación y consulta de cambios en modo de ventanas múltiples</h3>
+
+<p>
+ Se agregaron los siguientes métodos nuevos a la clase {@link android.app.Activity}
+ para admitir la visualización de ventanas múltiples. Para obtener información detallada sobre cada método, consulta la
+ <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referencia sobre N Preview SDK
+</a>.
+</p>
+
+<dl>
+ <dt>
+ <code>Activity.isInMultiWindowMode()</code>
+ </dt>
+
+ <dd>
+ Realiza una llamada para averiguar si la actividad está en modo de ventanas múltiples.
+ </dd>
+
+ <dt>
+ <code>Activity.isInPictureInPictureMode()</code>
+ </dt>
+
+ <dd>
+ Realiza una llamada para averiguar si la actividad está en modo Picture-in-picture.
+
+ <p class="note">
+ <strong>Nota:</strong> El modo Picture-in-picture es un caso especial del
+ modo de ventanas múltiples. Si <code>myActivity.isInPictureInPictureMode()</code>
+ devuelve un valor true, <code>myActivity.isInMultiWindowMode()</code> también
+ devuelve un valor true.
+ </p>
+ </dd>
+
+ <dt>
+ <code>Activity.onMultiWindowModeChanged()</code>
+ </dt>
+
+ <dd>
+ El sistema llama a este método siempre que la actividad entra en modo de ventanas
+ múltiples o sale de él. El sistema le pasa al método un valor de true si la
+ actividad entra en modo de ventanas múltiples y false si la actividad
+ sale del modo de ventanas múltiples.
+ </dd>
+
+ <dt>
+ <code>Activity.onPictureInPictureModeChanged()</code>
+ </dt>
+
+ <dd>
+ El sistema llama a este método siempre que la actividad entra en modo Picture-in-picture
+ o sale de él. El sistema le pasa al método un valor de true si
+ la actividad entra en modo Picture-in-picture y false si la actividad
+ sale de dicho modo.
+ </dd>
+</dl>
+
+<p>
+ También hay versiones {@link android.app.Fragment} de cada uno de esos
+ métodos; por ejemplo, <code>Fragment.isInMultiWindowMode()</code>.
+</p>
+
+<h3 id="entering-pip">Cómo entrar en modo Picture-in-picture</h3>
+
+<p>
+ Para que una actividad entre en modo de Picture-in-picture, debes llamar al nuevo método
+ <code>Activity.enterPictureInPictureMode()</code>. Este método no tiene efecto si
+ el dispositivo no admite el modo de imagen en imagen. Para obtener más información,
+ consulta la documentación de <a href="picture-in-picture.html">Picture-in-Picture</a>.
+</p>
+
+<h3 id="launch">Inicia nuevas actividades en modo de ventanas múltiples</h3>
+
+<p>
+ Cuando inicias una nueva actividad, puedes indicarle al sistema que la nueva
+ actividad se debe mostrar adyacente a la actual, si fuera posible. Para hacer
+ esto, usa el marcador
+ <code>Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT</code>. Pasar
+ este marcador requiere el siguiente comportamiento:
+</p>
+
+<ul>
+ <li>Si el dispositivo está en modo de pantalla dividida, el sistema intenta crear la
+ nueva actividad junto a la actividad que lo inició, de modo que las dos actividades
+ compartan la pantalla. No se garantiza que el sistema pueda hacerlo, pero
+ ubicará las actividades de forma adyacente si fuera posible.
+ </li>
+
+ <li>Si el dispositivo no está en modo de pantalla dividida, este marcador no tendrá efecto.
+ </li>
+</ul>
+
+<p>
+ Si un dispositivo está en modo de forma libre e inicias una nueva actividad, puedes
+ especificar las dimensiones y la ubicación de la pantalla de la nueva actividad al llamar a
+ <code>ActivityOptions.setLaunchBounds()</code>. Este método no tiene efecto si
+ el dispositivo no está en modo de ventanas múltiples.
+</p>
+
+<p class="note">
+ <strong>Nota:</strong> Si inicias una actividad en una pila de tareas, esa
+ actividad reemplaza la actividad en pantalla y hereda todas sus
+ propiedades de ventanas múltiples. Si quieres iniciar la nueva actividad en una ventana
+ independiente en modo de ventanas múltiples, debes iniciarla en una nueva pila de tareas.
+</p>
+
+<h3 id="dnd">Admisión de la funcionalidad de arrastrar y soltar</h3>
+
+<p>
+ Los usuarios pueden <a href="{@docRoot}guide/topics/ui/drag-drop.html">arrastrar y
+ soltar</a> datos de una actividad a otra mientras las dos actividades
+ comparten la pantalla. (Antes, los usuarios solo podían arrastrar y soltar datos dentro de una
+ sola actividad). Por este motivo, te recomendamos que agregues la funcionalidad de arrastrar y
+ soltar a tu aplicación si es que aún no la admite.
+</p>
+
+<p>
+ El N Preview SDK amplía el paquete <a href="{@docRoot}reference/android/view/package-summary.html"><code>android.view</code></a>
+ para admitir la funcionalidad de arrastrar y soltar entre aplicaciones diferentes. Para obtener información detallada sobre las siguientes
+ clase y métodos, consulta la <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referencia
+ del N Preview SDK</a>.
+</p>
+
+<dl>
+ <dt>
+ <code>android.view.DropPermissions</code>
+ </dt>
+
+ <dd>
+ Objeto token responsable de especificar los permisos otorgados a la aplicación
+ que recibe datos mediante la funcionalidad de arrastrar y soltar.
+ </dd>
+
+ <dt>
+ <code>View.startDragAndDrop()</code>
+ </dt>
+
+ <dd>
+ Nuevo alias para {@link android.view.View#startDrag View.startDrag()}. Para
+ habilitar la funcionalidad arrastrar y soltar entre diferentes actividades, pasa el nuevo marcador
+ <code>View.DRAG_FLAG_GLOBAL</code>. Si necesitas otorgar permisos de URI a
+ la actividad receptora, pasa los nuevos marcadores
+ <code>View.DRAG_FLAG_GLOBAL_URI_READ</code> o
+ <code>View.DRAG_FLAG_GLOBAL_URI_WRITE</code>, según corresponda.
+ </dd>
+
+ <dt>
+ <code>View.cancelDragAndDrop()</code>
+ </dt>
+
+ <dd>
+ Cancela una operación de arrastrar actualmente en curso. Solo puede ser llamado por la
+ aplicación que originó la operación de arrastrar.
+ </dd>
+
+ <dt>
+ <code>View.updateDragShadow()</code>
+ </dt>
+
+ <dd>
+ Reemplaza la sombra del arrastre por una operación de arrastrar actualmente en curso. Solo
+ puede ser llamado por la aplicación que originó la operación de arrastrar.
+ </dd>
+
+ <dt>
+ <code>Activity.requestDropPermissions()</code>
+ </dt>
+
+ <dd>
+ Solicita los permisos para los URI de contenido que se pasan con el {@link
+ android.content.ClipData} incluido en un {@link android.view.DragEvent}.
+ </dd>
+</dl>
+
+<h2 id="testing">Prueba de la compatibilidad de tu aplicación con el uso de ventanas múltiples</h2>
+
+<p>
+ Ya sea que actualices o no tu aplicación para Android N, debes
+ verificar la forma en que se comporta en modo de ventanas múltiples en caso de que un usuario intente iniciarla
+ en modo de ventanas múltiples en un dispositivo con Android N.
+</p>
+
+<h3 id="configuring">Configuración de un dispositivo de prueba</h3>
+
+<p>
+ Si instalas Android N en un dispositivo, se admite automáticamente el modo
+ de pantalla dividida.
+</p>
+
+<h3 id="test-non-n">Si tu aplicación no se compiló con el N Preview SDK</h3>
+
+<p>
+ Si no creaste tu aplicación con el N Preview SDK y el usuario intenta usar
+ la aplicación en modo de ventanas múltiples, el sistema cambia el tamaño de la aplicación de forma forzada, a menos que la aplicación
+ declare una orientación fija.
+</p>
+
+<p>
+ Si tu aplicación no declara una orientación fija, debes iniciar tu aplicación
+ en un dispositivo con Android N e intentar colocar la aplicación en
+ modo de pantalla dividida. Cuando se modifique el tamaño de la aplicación de forma forzada,
+ verifica que la experiencia de usuario sea aceptable.
+</p>
+
+<p>
+ Si la aplicación declara una orientación fija, debes intentar colocar la aplicación en
+ modo de ventanas múltiples. Cuando lo hagas, verifica que la aplicación
+ continúe en modo de pantalla completa.
+</p>
+
+<h3 id="test-mw">Si admites el modo de ventanas múltiples</h3>
+
+<p>
+ Si compilaste tu aplicación con el N Preview SDK y no deshabilitaste
+ la compatibilidad con ventanas múltiples, verifica el siguiente comportamiento tanto en modo de pantalla dividida
+ como en modo de forma libre.
+</p>
+
+<ul>
+ <li>Inicia la aplicación en modo de pantalla completa y luego cambia al modo de ventanas múltiples al presionar
+ durante un momento el botón Overview. Verifica que la aplicación pase de un modo a otro correctamente.
+ </li>
+
+ <li>Inicia la aplicación directamente en modo de ventanas múltiples y verifica que se
+ inicie correctamente. Puedes iniciar una aplicación en modo de ventanas múltiples al presionar el
+ botón Overview, luego presionar durante un momento la barra de título de la aplicación y arrastrarla
+ a una de las áreas resaltadas de la pantalla.
+ </li>
+
+ <li>Cambia el tamaño de tu aplicación en modo de pantalla dividida al arrastrar la línea divisoria.
+ Verifica que la aplicación cambie de tamaño sin fallar y que estén visibles los elementos
+ necesarios de la IU.
+ </li>
+
+ <li>Si especificaste dimensiones mínimas para tu aplicación, intenta cambiar el tamaño
+ de la aplicación a dimensiones más bajas que las especificadas. Verifica que no puedas modificar el tamaño de la aplicación
+ para que sea más pequeña que la dimensión mínima especificada.
+ </li>
+
+ <li>En todas las pruebas, verifica que el rendimiento de la aplicación sea aceptable. Por
+ ejemplo, verifica que la actualización de la IU después de cambiar el tamaño de la aplicación
+ no demore mucho.
+ </li>
+</ul>
+
+<h4 id="test-checklist">Lista de comprobación de pruebas</h4>
+
+<p>
+ Para verificar el rendimiento de tu aplicación en modo de ventanas múltiples, intenta las siguientes
+ operaciones. Debes probar estas operaciones tanto en modo de pantalla dividida como en
+ modo de ventanas múltiples, excepto cuando se indique algo diferente.
+</p>
+
+<ul>
+ <li>Ingresa en modo de ventanas múltiples y luego sal.
+ </li>
+
+ <li>Pasa de tu aplicación a otra y verifica que la aplicación se comporte
+ correctamente mientras esté visible pero no activa. Por ejemplo, si tu aplicación está
+ reproduciendo video, comprueba que el video se siga reproduciendo mientras el usuario interactúe
+ con otra aplicación.
+ </li>
+
+ <li>En modo de pantalla dividida, prueba mover la barra divisora para agrandar y
+ achicar la aplicación. Realiza estas operaciones en las configuraciones una al lado de la otra y
+ una encima de la otra. Verifica que la aplicación no falle,
+ que las funcionalidades necesarias estén visibles y que la operación de cambio de tamaño no demore
+ mucho.
+ </li>
+
+ <li>Realiza varias operaciones de cambio de tamaño en una sucesión rápida. Verifica que tu
+ aplicación no falle ni pierda memoria. Para obtener información acerca de cómo comprobar el uso de memoria
+ de tu aplicación, consulta <a href="{@docRoot}tools/debugging/debugging-memory.html">
+ Averiguación del uso de RAM</a>.
+ </li>
+
+ <li>Usa tu aplicación normalmente en diferentes configuraciones de ventanas y
+ verifica que la aplicación se comporte correctamente. Verifica que el texto sea legible y que
+ los elementos de la IU sean lo suficientemente grandes para interactuar con ellos.
+ </li>
+</ul>
+
+<h3 id="test-disabled-mw">Si deshabilitaste la compatibilidad con el modo de ventanas múltiples</h3>
+
+<p>
+ Si deshabilitaste la compatibilidad con el modo de ventanas múltiples al configurar
+ <code>android:resizableActivity="false"</code>, debes iniciar tu aplicación en
+ un dispositivo con Android N e intentar colocar la aplicación en los
+ modos de forma libre y pantalla dividida. Cuando lo hagas, verifica que la aplicación
+ continúe en modo de pantalla completa.
+</p>
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/_book.yaml b/docs/html-intl/intl/es/preview/_book.yaml
deleted file mode 100644
index 815f0f6..0000000
--- a/docs/html-intl/intl/es/preview/_book.yaml
+++ /dev/null
@@ -1,342 +0,0 @@
-toc:
-- title: Información general del programa
- path: /preview/overview.html
- path_attributes:
- - name: es-lang
- value: Información general del programa
- - name: in-lang
- value: Ikhtisar Program
- - name: ja-lang
- value: プログラム概要
- - name: ko-lang
- value: 프로그램 개요
- - name: pt-br-lang
- value: Visão geral do programa
- - name: ru-lang
- value: Обзор программы
- - name: vi-lang
- value: Tổng quan về Chương trình
- - name: zh-cn-lang
- value: 计划概览
- - name: zh-tw-lang
- value: 程式總覽
-
-- title: Compatibilidad y notas de la versión
- path: /preview/support.html
-
-- title: Configuración de Preview
- path: /preview/setup-sdk.html
- path_attributes:
- - name: es-lang
- value: Configurar el SDK de la versión preliminar
- - name: in-lang
- value: Menyiapkan Preview
- - name: ja-lang
- value: Preview SDK のセットアップ
- - name: ko-lang
- value: 미리 보기 SDK 설정하기
- - name: pt-br-lang
- value: Configuração do Preview SDK
- - name: ru-lang
- value: Настройка пакета SDK Preview
- - name: vi-lang
- value: Kiểm thử trên Thiết bị
- - name: zh-cn-lang
- value: 设置预览版 SDK
- - name: zh-tw-lang
- value: 設定預覽版 SDK
-
-- title: Probar en un dispositivo
- path: /preview/download.html
- path_attributes:
- - name: es-lang
- value: Probar en un dispositivo
- - name: in-lang
- value: Menguji pada Perangkat
- - name: ja-lang
- value: デバイス上でテストする
- - name: ko-lang
- value: 기기에서 테스트
- - name: pt-br-lang
- value: Testar em um dispositivo
- - name: ru-lang
- value: Тестирование на устройстве
- - name: vi-lang
- value: Kiểm thử trên Thiết bị
- - name: zh-cn-lang
- value: 在设备上测试
- - name: zh-tw-lang
- value: 在裝置上測試
-
-- title: Cambios en los comportamientos
- path: /preview/behavior-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: 行為變更
- section:
- - title: Background Optimizations
- path: /preview/features/background-optimization.html
- path_attributes:
- - name: es-lang
- value: Optimizaciones en segundo plano
- - name: in-lang
- value: Optimisasi Latar Belakang
- - name: ja-lang
- value: バックグラウンド処理の最適化
- - name: ko-lang
- value: 백그라운드 최적화
- - name: pt-br-lang
- value: Otimizações em segundo plano
- - name: ru-lang
- value: Оптимизация фоновых процессов
- - name: vi-lang
- value: Tối ưu hóa Chạy ngầm
- - name: zh-cn-lang
- value: 后台优化
- - name: zh-tw-lang
- value: 背景最佳化
- - title: Idioma y configuración regional
- path: /preview/features/multilingual-support.html
- path_attributes:
- - name: es-lang
- value: Idioma y configuración regional
- - name: in-lang
- value: Bahasa dan Lokal
- - name: ja-lang
- value: 言語とロケール
- - name: ko-lang
- value: 언어 및 로케일
- - name: pt-br-lang
- value: Idioma e localidade
- - name: ru-lang
- value: Язык и языковой стандарт
- - name: vi-lang
- value: Ngôn ngữ và Bản địa
- - name: zh-cn-lang
- value: 语言和区域设置
- - name: zh-tw-lang
- value: 語言和地區設定
-
-- title: Android N for Developers
- path: /preview/api-overview.html
- 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 總覽
- section:
- - title: Compatibilidad con ventanas múltiples
- path: /preview/features/multi-window.html
- path_attributes:
- - name: es-lang
- value: Compatibilidad con ventanas múltiples
- - name: in-lang
- value: Dukungan Multi-Jendela
- - name: ja-lang
- value: マルチ ウィンドウのサポート
- - name: ko-lang
- value: 다중 창 지원
- - name: pt-br-lang
- value: Suporte a várias janelas
- - name: ru-lang
- value: Поддержка многооконного режима
- - name: vi-lang
- value: Hỗ trợ đa cửa sổ
- - name: zh-cn-lang
- value: 多窗口支持
- - name: zh-tw-lang
- value: 多視窗支援
- - title: Notificaciones
- path: /preview/features/notification-updates.html
- path_attributes:
- - name: es-lang
- value: Notificaciones
- - name: in-lang
- value: Pemberitahuan
- - name: ja-lang
- value: 通知
- - name: ko-lang
- value: 알림
- - name: pt-br-lang
- value: Notificações
- - name: ru-lang
- value: Уведомления
- - name: vi-lang
- value: Thông báo
- - name: zh-cn-lang
- value: 通知
- - name: zh-tw-lang
- value: 通知
- - title: Ahorro de datos
- path: /preview/features/data-saver.html
- - title: Grabación de TV
- path: /preview/features/tv-recording-api.html
- path_attributes:
- - name: es-lang
- value: Grabación de TV
- - name: in-lang
- value: Perekaman TV
- - name: ja-lang
- value: TV の録画
- - name: ko-lang
- value: TV 녹화
- - name: pt-br-lang
- value: Gravação para TV
- - name: ru-lang
- value: Запись ТВ
- - name: vi-lang
- value: Ghi lại TV
- - name: zh-cn-lang
- value: TV 录制
- - name: zh-tw-lang
- value: 電視錄製
- - title: Configuración de seguridad de la red
- path: /preview/features/security-config.html
- path_attributes:
- - name: es-lang
- value: Configuración de seguridad de la red
- - name: ja-lang
- value: ネットワーク セキュリティ構成
- - name: ko-lang
- value: 네트워크 보안 구성
- - name: pt-br-lang
- value: Configurações de segurança de rede
- - name: ru-lang
- value: Конфигурация сетевой безопасности
- - name: vi-lang
- value: Cấu hình Bảo mật mạng
- - name: zh-cn-lang
- value: 网络安全配置
- - name: zh-tw-lang
- value: 網路安全性設定
- - title: Compatibilidad con ICU4J
- path: /preview/features/icu4j-framework.html
- path_attributes:
- - name: es-lang
- value: API de ICU4J del framework de Android
- - name: in-lang
- value: ICU4J Android Framework API
- - name: ja-lang
- value: ICU4J Android フレームワーク API
- - name: ko-lang
- value: ICU4J Android 프레임워크 API
- - name: pt-br-lang
- value: APIs de estrutura do Android para ICU4J
- - name: ru-lang
- value: API-интерфейсы ICU4J в платформе Android
- - name: vi-lang
- value: API Khuôn khổ Android ICU4J
- - name: zh-cn-lang
- value: ICU4J Android 框架 API
- - name: zh-tw-lang
- value: ICU4J Android 架構 API
- - title: Funciones del lenguaje Java 8
- path: /preview/j8-jack.html
- path_attributes:
- - name: es-lang
- value: Funciones del lenguaje Java 8
- - name: in-lang
- value: Fitur Bahasa Java 8
- - name: ja-lang
- value: Java 8 の機能
- - name: ko-lang
- value: Java 8 언어 기능
- - name: pt-br-lang
- value: Recursos de linguagem do Java 8
- - name: ru-lang
- value: Возможности языка Java 8
- - name: vi-lang
- value: Tính năng của Ngôn ngữ Java 8
- - name: zh-cn-lang
- value: Java 8 语言功能
- - name: zh-tw-lang
- value: Java 8 語言功能
- - title: Actualizaciones para Android for Work
- path: /preview/features/afw.html
- - title: Acceso a directorios determinados
- path: /preview/features/scoped-folder-access.html
- path_attributes:
- - name: es-lang
- value: Acceso a directorios determinados
- - name: ja-lang
- value: 特定のディレクトリへのアクセス
- - name: ko-lang
- value: 범위가 지정된 디렉터리 액세스
- - name: pt-br-lang
- value: Acesso a diretórios com escopo
- - name: ru-lang
- value: Доступ к выделенным каталогам
- - name: vi-lang
- value: Truy cập Thư mục theo Phạm vi
- - name: zh-cn-lang
- value: 作用域目录访问
- - name: zh-tw-lang
- value: 限定範圍目錄存取
-
-- title: Ejemplos
- path: /preview/samples.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: Contrato de licencia
- path: /preview/license.html
- path_attributes:
- - name: es-lang
- value: Contrato de licencia
- - name: ja-lang
- value: 使用許諾契約
- - name: ko-lang
- value: 라이선스 계약
- - name: pt-br-lang
- value: Contrato de licença
- - name: ru-lang
- value: Лицензионное соглашение
- - name: zh-cn-lang
- value: 许可协议
- - name: zh-tw-lang
- value: 授權協議
diff --git a/docs/html-intl/intl/es/preview/api-overview.jd b/docs/html-intl/intl/es/preview/api-overview.jd
deleted file mode 100644
index 7cee010..0000000
--- a/docs/html-intl/intl/es/preview/api-overview.jd
+++ /dev/null
@@ -1,1039 +0,0 @@
-page.title=Android N for Developers
-meta.tags="preview", "androidn"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-apis_2x.png
-@jd:body
-
-
-
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>Funciones claves para desarrolladores</h2>
- <ol>
- <ul style="list-style-type:none;">
- <li><a href="#multi-window_support">Compatibilidad con ventanas múltiples</a></li>
- <li><a href="#notification_enhancements">Notificaciones</a></li>
- <li><a href="#jit_aot">Compilación de JIT y AOT</a></li>
- <li><a href="#quick_path_to_app_install">Acceso rápido a la instalación de aplicaciones</a></li>
- <li><a href="#doze_on_the_go">Descanso en movimiento</a></li>
- <li><a href="#background_optimizations">Optimizaciones en segundo plano</a></li>
- <li><a href="#data_saver">Ahorro de datos</a></li>
- <li><a href="#vulkan">API Vulkan</a></li>
- <li><a href="#tile_api">API para mosaicos de Quick Settings</a></li>
- <li><a href="#number-blocking">Bloqueo de números</a></li>
- <li><a href="#call_screening">Filtración de llamadas</a></li>
- <li><a href="#multi-locale_languages">Configuraciones regionales e idiomas</a></li>
- <li><a href="#emoji">Nuevos emojis</a></li>
- <li><a href="#icu4">API de ICU4J en Android</a></li>
- <li><a href="#gles_32">API de OpenGL ES 3.2</a></li>
- <li><a href="#android_tv_recording">Grabación de Android TV</a></li>
- <li><a href="#android_for_work">Android for Work</a></li>
- <li><a href="#accessibility_enhancements">Accesibilidad</a></li>
- <li><a href="#direct_boot">Inicio directo</a></li>
- <li><a href="#key_attestation">Atestación de claves</a></li>
- <li><a href="#network_security_config">Configuración de seguridad de la red</a></li>
- <li><a href="#default_trusted_ca">CA de confianza predeterminada</a></li>
- <li><a href="#apk_signature_v2">Esquema de firma de APK v2</a></li>
- <li><a href="#scoped_directory_access">Acceso a directorios determinados</a></li>
- <li><a href="#keyboard_shortcuts_helper">Ayuda en los métodos abreviados del teclado</a></li>
- <li><a href="#sustained_performance_api">API de rendimiento sostenido</a></li>
- <li><a href="#vr">Soporte de RV</a></li>
- <li><a href="#print_svc">Mejoras del servicio de impresión</a></li>
- <li><a href="#virtual_files">Archivos virtuales</a></li>
- <li><a href="#framemetrics_api">API FrameMetricsListener</a></li>
- </ol>
-</div>
-</div>
-
-
-
-<p>Android N aún se encuentra en proceso activo de desarrollo, pero puedes probarlo
-ahora como parte de la N Developer Preview. En las secciones siguientes se destacan algunas de
-las nuevas funciones para desarrolladores. </p>
-
-<p>
- Asegúrate de ver los <a href="{@docRoot}preview/behavior-changes.html">Cambios de comportamiento</a> para obtener información sobre
- áreas en las cuales los cambios en las plataformas puedan tener efecto en tus aplicaciones, consultar las
- guías del desarrollador para conocer mejor las funciones claves y descargar la <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referencia de la API</a> para obtener información sobre
- API nuevas.
-</p>
-
-<h2 id="multi-window_support">Compatibilidad con ventanas múltiples</h2>
-
-
-<p>En Android N, presentamos una nueva y muy solicitada función multitarea
-en la plataforma: la compatibilidad con ventanas múltiples. </p>
-
- <p>Los usuarios ahora pueden abrir dos aplicaciones al mismo tiempo en la pantalla. </p>
- <ul>
- <li>En teléfonos y tabletas
-con Android N, los usuarios pueden ejecutar dos aplicaciones en paralelo
-una encima otra en el modo de pantalla dividida. También tienen la posibilidad de modificar el tamaño de las aplicaciones arrastrando
-la línea divisoria que se encuentra entre ellas. </li>
-
-<li>En los dispositivos con Android TV, las aplicaciones pueden habilitar en forma automática el <a href="{@docRoot}preview/features/picture-in-picture.html">modo
-"picture-in-picture"</a>. Esto les permite continuar mostrando contenido mientras el usuario explora otras
-aplicaciones o interactúa con ellas.</li>
- </ul>
-
-<div class="col-4of10">
-<img src="{@docRoot}preview/images/mw-portrait.png" alt="" style="height:460px;padding-left:1em;" id="img-split-screen" />
-<p class="img-caption">
- <strong>Figura 1:</strong> Aplicaciones en ejecución en el modo de pantalla dividida.
-</p>
-
- </div>
-
-<p>En las tabletas, en particular, y en otros dispositivos de pantallas más grandes, la compatibilidad con ventanas múltiples
-ofrece nuevas maneras de atraer a los usuarios Puedes, habilitar acciones de arrastrar y soltar en
-tu aplicación para que los usuarios arrastren contenido hacia tu aplicación —o desde ella; es una excelente
-manera de mejorar su experiencia. </p>
-
-<p>Es sencillo agregar compatibilidad con ventanas múltiples a tu aplicación y configurar la manera en que
-administra la visualización de estas ventanas. Por ejemplo, puedes especificar las dimensiones mínimas
-permitidas de tu actividad y evitar así que los usuarios den a la actividad un
-tamaño inferior. También puedes inhabilitar la visualización de ventanas múltiples para tu aplicación, lo que
- garantiza que el sistema solo muestre tu aplicación en modo de pantalla completa.</p>
-
-<p>
- Para obtener más información, consulta la documentación <a href="{@docRoot}preview/features/multi-window.html">Compatibilidad con ventanas múltiples</a>
- para desarrolladores.
-</p>
-
-<h2 id="notification_enhancements">Mejoras en las notificaciones</h2>
-
-<p>En Android N, hemos rediseñado las notificaciones para facilitar y agilizar su
-uso. Entre los cambios, se incluyen los siguientes:</p>
-
-<ul>
- <li>
- <strong>Actualizaciones de plantillas</strong>: estamos actualizando las plantillas de notificaciones para
- poner nuevo énfasis en la imagen de héroe y el avatar. Los desarrolladores podrán
- aprovechar las nuevas plantillas con una cantidad mínima de ajustes en el código.
- </li>
-
- <li>
- <strong>Personalización del estilo de mensaje</strong>: puedes personalizar más etiquetas
- de la interfaz de usuario asociadas con tus notificaciones utilizando la clase
- <code>MessageStyle</code>. Puedes configurar el mensaje, el título de
- la conversación y la vista del contenido.
- </li>
-
- <li>
- <strong>Notificaciones agrupadas</strong>: el sistema puede agrupar mensajes
- (por ejemplo, por tema) y mostrar el grupo. Un usuario puede
- aplicar acciones, como Dismiss o Archive, en ellos. Si
- has implementado notificaciones para Android Wear, ya estarás familiarizado con
- este modelo.
- </li>
-
- <li>
- <strong>Respuesta directa</strong>: en el caso de las aplicaciones de comunicación en tiempo real, el
- sistema de Android admite respuestas en línea para que los usuarios puedan responder rápidamente a
- un mensaje SMS o de texto directamente dentro en la interfaz de notificaciones.
- </li>
-
- <li>
- <strong>Vistas personalizadas</strong>: dos API nuevas te permiten aprovechar las decoraciones
- del sistema, como los encabezados y las acciones de notificaciones, al usar vistas
- personalizadas en las notificaciones.
- </li>
-</ul>
-
-<div class="col-4of12">
- <img src="{@docRoot}preview/images/notifications-1.png" alt="" style="padding:.5em;max-width:226px">
-</div>
-
-<div class="col-4of12">
- <img src="{@docRoot}preview/images/notifications-3.png" alt="" style="padding:.5em;max-width:226px">
-</div>
-
-<div class="col-4of12">
- <img src="{@docRoot}preview/images/notifications-2.png" alt="" style="padding:.5em;max-width:226px">
-</div>
-
-
-<p class="img-caption">
- <strong>Figura 2:</strong> Notificaciones agrupadas y respuesta directa.
-</p>
-
-<p>Para obtener información acerca de cómo implementar las nuevas funciones, consulta la guía
- <a href="{@docRoot}preview/features/notification-updates.html">Notificaciones</a>.
-</p>
-
-
-
-<h2 id="jit_aot">Compilación de JIT y AOT guiada por perfiles</h2>
-
-<p>En Android N, agregamos un compilador Just in Time (JIT) con generación de perfiles de código para
-ART, lo cual te permite mejorar constantemente el rendimiento de las aplicaciones con Android mientras se
-ejecutan. El compilador JIT complementa el compilador Ahead of Time (AOT) actual de ART
-y permite mejorar el rendimiento del tiempo de ejecución, ahorrar espacio de almacenamiento y acelerar las actualizaciones
-de aplicaciones y del sistema.</p>
-
-<p>La compilación guiada por perfiles permite que ART maneje la compilación de AOT y JIT de cada aplicación
-conforme a su uso real, además de las condiciones en el dispositivo. Por
-ejemplo, ART conserva un perfil de los métodos directos de cada aplicación, y puede compilar previamente
-y almacenar en caché dichos métodos para obtener el mejor rendimiento. A su vez, deja otras partes de la aplicación
-sin compilar hasta que se usan realmente.</p>
-
-<p>Además de mejorar el rendimiento de partes claves de la aplicación, la compilación guiada por
-perfiles permite reducir la superficie de memora RAM total de una aplicación, incluidos los archivos binarios
-asociados. Esta función tiene particular importancia en los dispositivos de memoria reducida.</p>
-
-<p>ART administra la compilación guiada por perfiles de una manera que minimiza el impacto en la batería
-del dispositivo. Realiza compilaciones previas únicamente cuando el dispositivo se encuentra inactivo y
-en proceso de carga, lo cual permite ahorrar tiempo y batería haciendo el trabajo de manera anticipada.</p>
-
-<h2 id="quick_path_to_app_install">Acceso rápido a la instalación de aplicaciones</h2>
-
-<p>Uno de los beneficios más palpables del compilador JIT de ART es la velocidad de instalación de las
-aplicaciones y de actualización del sistema. Incluso las aplicaciones de mayor tamaño, en las que se necesitaban varios minutos para la
-optimización y la instalación en Android 6.0, ahora pueden instalarse en cuestión de
-segundos. Las actualizaciones del sistema también son más rápidas, debido a que ya no hay un paso de optimización. </p>
-
-<h2 id="doze_on_the_go">Descanso en movimiento...</h2>
-
-<p>En Android 6.0, se presentó Descanso, un modo de sistema que ahorra batería aplazando
-actividades de CPU y red de las aplicaciones cuando el dispositivo se encuentra inactivo; por ejemplo, al hallarse
-sobre una mesa o en un cajón. </p>
-
-<p>Ahora, en Android N, el modo Descanso ofrece el beneficio adicional de ahorrar batería en movimiento.
-Siempre que la pantalla permanezca apagada durante un tiempo y el dispositivo esté desenchufado,
-Descanso aplicará un subconjunto de las restricciones de CPU y red conocidas a las aplicaciones.
-Esto significa que los usuarios pueden ahorrar batería aun cuando lleven sus dispositivos
-en los bolsillos.</p>
-
-
-<img src="/preview/images/doze-diagram-1.png" alt="" id="figure1" />
-<p class="img-caption">
- <strong>Figura 3:</strong> Descanso ahora aplica
- restricciones para prolongar la duración de la batería aun cuando el dispositivo no está quieto.
-</p>
-
-
-<p>Poco tiempo después de que la pantalla se apaga, cuando el dispositivo no está enchufado, Descanso
-restringe el acceso a la red y aplaza tareas y sincronizaciones. Durante períodos de mantenimiento
-breves, las aplicaciones tienen acceso a la red y se ejecutan todas las
-tareas y sincronizaciones aplazadas. Ten en cuenta que, cuando se activa la pantalla o se enchufa el dispositivo, se
-desactiva el modo Descanso.</p>
-
-<p>Cuando el dispositivo vuelve a estar quieto, desenchufado y con la pantalla apagada durante un
-tiempo, Descanso aplica todas las restricciones de CPU y redes en {@link
-android.os.PowerManager.WakeLock}, alarmas de {@link android.app.AlarmManager} y análisis de
-GPS o Wi-Fi.</p>
-
-<p>Las prácticas recomendadas para adaptar tu aplicación a Descanso no varían si el
-dispositivo estará en movimiento o no. Por lo tanto, si ya actualizaste tu aplicación para que administre
-Descanso correctamente, no tienes nada más que hacer. Si no lo hiciste, comienza a <a href="{@docRoot}training/monitoring-device-state/doze-standby.html#assessing_your_app">adaptarla
-a Descanso</a> ahora.</p>
-
-<h2 id="background_optimizations">Project Svelte: Optimizaciones en segundo plano</h2>
-
-<p>Project Svelte representa un esfuerzo constante por minimizar el uso de memoria RAM a través del sistema y de las aplicaciones
-en los diferentes dispositivos Android del ecosistema. En Android N, el objetivo principal de Project
-Svelte es optimizar la manera en que las aplicaciones se ejecutan en segundo plano. </p>
-
-<p>El procesamiento en segundo plano es una parte esencial de la mayoría de las aplicaciones. Cuando se maneja en forma adecuada, puede
-hacer que la experiencia de tu usuario sea increíble —(inmediata, rápida y pertinente al contexto).
-Cuando no se maneja de tal manera, el procesamiento en segundo plano puede suponer un consumo innecesario de memoria RAM (y
-batería), y afectar el rendimiento del sistema para otras aplicaciones. </p>
-
-<p>A partir de Android 5.0, {@link android.app.job.JobScheduler} ha sido el
-método preferido para ejecutar tareas en segundo plano con resultados positivos
-para los usuarios. Las aplicaciones pueden programar tareas y, al mismo tiempo, permitir que el sistema se optimice según las condiciones de
-memoria, energía y conectividad. JobScheduler ofrece control y
-simpleza, y nuestro deseo es que todas las aplicaciones lo usen. </p>
-
-<p>
- Otra buena opción es <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
- <code>GCMNetworkManager</code></a>, que forma parte de Google Play Services y
- ofrece una capacidad similar de programación de tareas con compatibilidad en versiones heredadas de
- Android.
-</p>
-
-<p>Continuaremos ampliando <code>JobScheduler</code> y
-<code>GCMNetworkManager</code> para que se apliquen a más
-casos de uso de tus aplicaciones; por ejemplo, en Android N ahora puedes programar procesos
-en segundo plano según los cambios de los proveedores de contenido. Al mismo tiempo, comenzaremos a
-dejar de usar algunos de los patrones anteriores que pueden reducir el rendimiento del sistema,
-en especial, en dispositivos de memoria reducida.</p>
-
-<p>En Android N, eliminaremos tres transmisiones implícitas que se usan normalmente —(
- {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} y {@link
- android.hardware.Camera#ACTION_NEW_VIDEO}), ya que pueden activar los
-procesos en segundo plano de varias aplicaciones al mismo tiempo, y así exigir la memoria y la batería. Si
-tu aplicación recibe estas transmisiones, aprovecha la N Developer Preview y
- realiza la migración a <code>JobScheduler</code> y las API relacionadas, como alternativa. </p>
-
-<p>
- Para obtener información detallada, consulta la documentación <a href="{@docRoot}preview/features/background-optimization.html">Optimizaciones
- en segundo plano</a>.
-</p>
-
-
-<h2 id="data_saver">Ahorro de datos</h2>
-
-<div class="col-5of12" style="margin-right:1.5em;">
-<img src="{@docRoot}preview/images/datasaver.png" style="border:2px solid #ddd">
-
-<p class="img-caption" style="padding-right:2em;">
- <strong>Figura 4:</strong> Ahorro de datos en la configuración.
-</p>
- </div>
-
-<p>Durante la vida útil de un dispositivo móvil, el costo de un plan de datos móviles puede
-superar fácilmente el costo del propio dispositivo. Para muchos usuarios, los datos móviles son un
-recurso costoso que desean conservar. </p>
-
-<p>En Android N, se presenta el modo de ahorro de datos, un nuevo servicio del sistema que permite reducir
-el uso de datos móviles de las aplicaciones, ya sea con servicio de itinerancia, cerca del final del ciclo de facturación
-o con un paquete de datos prepagos. El ahorro de datos permite que los usuarios controlen la manera en que las aplicaciones
-usan los datos móviles y que los desarrolladores brinden un servicio más eficaz cuando el ahorro
-de datos se encuentra activo. </p>
-
-<p>Cuando un usuario habilita el ahorro de datos en <strong>Settings</strong> y el dispositivo está
-conectado a una red o, el sistema bloquea el uso de datos en segundo plano y ordena a las aplicaciones
-usar menos datos en primer plano siempre que sea posible (por ejemplo, limitando
-la tasa de bits para la transmisión, reduciendo la calidad de la imagen y aplazando el valor optimista de almacenamiento previo en caché,
-entre otras posibilidades). Los usuarios pueden incluir aplicaciones específicas en la lista blanca para
-permitir el uso de datos medidos en segundo plano, incluso cuando está activado el ahorro de datos.</p>
-
-<p>Android N extiende {@link android.net.ConnectivityManager} para que las aplicaciones
-tengan una manera de <a href="{@docRoot}preview/features/data-saver.html#status">recuperar las
-preferencias de ahorro de datos del usuario</a> y<a href="{@docRoot}preview/features/data-saver.html#monitor-changes"> monitorear
-cambios en estas</a>. Todas las aplicaciones deben verificar si el usuario habilitó el ahorro
-de datos e intentar limitar el uso de datos en primer y segundo plano.</p>
-
-
-<h2 id="vulkan">API Vulkan</h2>
-
-<p>
- Android N integra <a href="http://www.khronos.org/vulkan" class="external-link">Vulkan™</a>, una nueva API de visualización 3D, en la plataforma. Al igual que
- <a href="https://www.khronos.org/opengles/" class="external-link">OpenGL™
- ES</a>, Vulkan es un estándar abierto para gráficos y visualización 3D, cuyo mantenimiento está a cargo de
- Khronos Group.
-</p>
-
-<p>
- Vulkan se diseñó desde el principio para minimizar la sobrecarga de CPU en el controlador,
- y permite que tu aplicación controle el funcionamiento de la unidad de procesamiento de gráficos más directamente. También
- hace posible contar con un mejor trabajo en paralelo, ya que permite que varios subprocesos diversos realicen
- trabajos, como la construcción del búfer de comandos, a la vez.
-</p>
-
-<p>
- Las herramientas y las bibliotecas de desarrollo de Vulkan son parte del NDK de Android. Esto
-incluye lo siguiente:
-</p>
-
-<ul>
- <li>Encabezados
- </li>
-
- <li>Capas de validación (bibliotecas de depuración)
- </li>
-
- <li>Compilador SPIR-V
- </li>
-
- <li>Biblioteca de compilación de tiempo de ejecución de SPIR-V
- </li>
-</ul>
-
-<p>
- Vulkan solo está disponible en las aplicaciones en dispositivos con hardware compatible con Vulkan,
- como Nexus 5X, Nexus 6P y Nexus Player. Estamos trabajando estrechamente con nuestros
- socios para que Vulkan se pueda utilizar en más dispositivos lo más pronto posible.
-</p>
-
-<p>
- Para obtener más información, consulta la <a href="{@docRoot}ndk/guides/graphics/index.html">documentación de la API</a>.
-</p>
-
-<h2 id="tile_api">API para mosaicos de Quick Settings</h2>
-
-
-<div style="float:right;max-width:320px">
-<img src="{@docRoot}preview/images/quicksettings.png" style="padding-left:1.5em;">
-
-<p class="img-caption" style="padding-left:2em;">
- <strong>Figura 5:</strong> Mosaicos de Quick Settings del panel de notificaciones.
-</p>
-
-
- </div><p>Quick Settings es una manera popular y simple de exhibir configuraciones y acciones claves
-directamente desde el panel de notificaciones. En Android N, expandimos el alcance de
-Quick Settings para que sea todavía más útil y práctico. </p>
-
-<p>Agregamos más espacio para mosaicos adicionales de Quick Settings, a los cuales los usuarios pueden
-acceder desde un área de visualización paginada deslizando el dedo hacia la izquierda o la derecha. También permitimos
-que los usuarios determinen los mosaicos de Quick Settings que aparecerán y los puntos en los cuales
-se mostrarán; pueden agregar o mover mosaicos con solo arrastrarlos y soltarlos. </p>
-
-<p>Para los desarrolladores, en Android N también se agrega una nueva API que les permite definir mosaicos de
- Quick Settings propios para facilitar, dentro de sus aplicaciones, el acceso a controles y acciones claves por parte de los usuarios.</p>
-
-<p>
- Los mosaicos de Quick Settings se reservan para controles o acciones que se necesiten
- con urgencia o se usen con frecuencia; no deben emplearse como accesos directos para
- iniciar una aplicación.
-</p>
-
-<p>
- Una vez que hayas definido tus mosaicos, puedes dejarlos a disposición de los usuarios, quienes tendrán la posibilidad de agregarlos
- a Quick Settings con solo arrastrarlos y soltarlos.
-</p>
-
-<p>
- Para obtener información sobre la creación de un mosaico de aplicación, consulta la documentación de
- <code>android.service.quicksettings.Tile</code> en la <a href="{@docRoot}preview/setup-sdk.html#docs-dl">referencia de la API</a> descargable.
-</p>
-
-
-
-<h2 id="number-blocking">Bloqueo de números</h2>
-
-<p>Android N ahora admite el bloqueo de números en la plataforma y proporciona una API
-de framework para que los proveedores de servicios dispongan de una lista con números bloqueados. La
-aplicación de SMS predeterminada, la aplicación telefónica predeterminada y las aplicaciones de proveedores tienen capacidad de lectura y
-escritura en la lista de números bloqueados. Otras aplicaciones no pueden acceder a la lista.</p>
-
-<p>Al hacer que el bloqueo de números sea una función estándar de la plataforma, Android permite que las
-aplicaciones admitan de manera uniforme el bloqueo de números en una amplia variedad de
-dispositivos. Entre los demás beneficios que pueden aprovechar las aplicaciones, se encuentran los siguientes:</p>
-
-<ul>
- <li> Los números bloqueados en las llamadas también se bloquean en los mensajes de texto.
- <li> Los números bloqueados pueden perdurar tras procesos de restablecimiento y cambios de dispositivos con la función Backup &
-Restore.
- <li> Varias aplicaciones pueden usar la misma lista de números bloqueados.
-</ul>
-
-<p>De manera adicional, la integración de aplicaciones de proveedores a través de Android permite que estos
-lean la lista de números bloqueados del dispositivo y realicen un bloqueo de servicio
-para el usuario, a fin de evitar que el usuario reciba llamadas o mensajes de texto no deseados
-por cualquier medio, como terminales VOIP o teléfonos con transferencia de llamadas.</p>
-
-<p>
- Para obtener más información, consulta <code>android.provider.BlockedNumberContract</code>
- en la <a href="{@docRoot}preview/setup-sdk.html#docs-dl">referencia de la API
- </a>descargable.
-</p>
-
-<h2 id="call_screening">Filtración de llamadas</h2>
-
-<p>
- Android N permite que la aplicación predeterminada de un teléfono filtre las llamadas entrantes. La aplicación
- hace esto a través del nuevo <code>CallScreeningService</code>,
- que le permite realizar varias acciones según la clase
- {@link android.telecom.Call.Details Call.Details} de la llamada entrante. Algunos ejemplos:
-</p>
-
-<ul>
- <li> rechazar la llamada entrante;
- <li> no permitir el ingreso de la llamada en el registro de llamadas;
- <li> no mostrar al usuario una notificación de la llamada.
-</ul>
-
-<p>
- Para obtener más información, consulta <code>android.telecom.CallScreeningService</code>
- en la <a href="{@docRoot}preview/setup-sdk.html#docs-dl">referencia de la API
- </a>descargable.
-</p>
-
-
-<h2 id="multi-locale_languages">Compatibilidad con varias configuraciones regionales y más idiomas</h2>
-
-
-<p>Android N permite a los usuarios seleccionar <strong>varias configuraciones regionales</strong> en Settings,
-para brindar una mejor compatibilidad con casos de uso de dos idiomas. Las aplicaciones pueden usar
-una nueva API para obtener las configuraciones regionales seleccionadas del usuario y luego ofrecer experiencias más sofisticadas
-para usuarios que usen varias configuraciones regionales; por ejemplo, pueden mostrar resultados de búsqueda en
-varios idiomas y no ofrecer traducciones de páginas web con idiomas que el
-usuario conozca.</p>
-
-<p>Además de la compatibilidad con varias configuraciones regionales, en Android N también se amplía la variedad de idiomas
-disponibles para los usuarios. Se ofrecen más de 25 variantes, cada una de ellas para idiomas de uso
-común, como el inglés, el español, el francés y el árabe. También se agrega compatibilidad
-parcial con más de 100 idiomas nuevos.</p>
-
-<p>Las aplicaciones pueden obtener la lista de configuraciones regionales establecida por el usuario llamando a
-<code>LocaleList.GetDefault()</code>. A fin de admitir la cantidad ampliada de configuraciones regionales, en Android N, se
-modificará la forma de resolver recursos. Asegúrate de controlar que tus aplicaciones
-funcionen de la manera esperada con la nueva lógica de resolución de recursos.</p>
-
-<p>Para obtener información sobre el nuevo comportamiento de resolución de recursos y las prácticas recomendadas que
-debes aplicar, consulta <a href="{@docRoot}preview/features/multilingual-support.html">Compatibilidad con varios idiomas</a>.</p>
-
-
-<h2 id="emoji">Nuevos emojis</h2>
-
-<p>
- Android N presenta más emojis y funciones relacionadas con estos, como
- emojis con diferentes tonos de piel y compatibilidad con selectores de
- variación. Si tu aplicación admite emojis,
- sigue las pautas a continuación para aprovechar estas funciones relacionadas con emojis.
-</p>
-
-<ul>
- <li>
- <strong>Comprueba que el dispositivo contenga el emoji antes de insertarlo.</strong>
- Para corroborar qué emojis tiene la fuente del
- sistema, usa el método {@link android.graphics.Paint#hasGlyph(String)}.
- </li>
- <li>
- <strong>Comprueba que el emoji admita los selectores de variación.</strong>
- Los selectores de variación te permiten
- presentar determinados emojis en color o en blanco y negro.
- En los dispositivos móviles, las aplicaciones deben representar los emojis en color, en lugar de hacerlo en blanco y negro. Sin embargo,
- si tu aplicación muestra los emojis alineados con el texto, debe usar la variación de blanco y negro.
- A fin de determinar si un emoji tiene una variación, usa el selector de variación.
- Para conocer la lista completa de caracteres con variaciones, consulta la sección de
- <em>secuencias de variación de emojis</em> de la
- <a class="external-link" href="http://www.unicode.org/Public/9.0.0/ucd/StandardizedVariants-9.0.0d1.txt">
- documentación de Unicode sobre variaciones</a>.
- </li>
- <li>
- <strong>Comprueba que el emoji admita tonos de piel.</strong> Android N permite que los usuarios modifiquen el
- tono de piel presentado de los emojis según su preferencia. Las aplicaciones de teclado deben brindar indicaciones
- visuales para los emojis que tienen múltiples tonos de piel y permitir que los usuarios
- seleccionen el tono que prefieran. Para determinar qué emojis del sistema tienen
- modificadores del tono de piel, usa el método {@link android.graphics.Paint#hasGlyph(String)}.
- Puedes determinar qué emojis usan tonos de piel leyendo la
- <a class="external-link" href="http://unicode.org/emoji/charts/full-emoji-list.html">
- documentación de Unicode</a>.
- </li>
-</ul>
-
-
-<h2 id="icu4">API de ICU4J en Android</h2>
-
-<p>
- Android N ahora ofrece un subconjunto de las API de <a href="http://site.icu-project.org/">ICU4J</a> dentro del framework de Android, en
- el paquete <code>android.icu</code>. La migración es sencilla y en mayor medida implica
- simplemente un cambio del espacio de nombres <code>com.java.icu</code> a
- <code>android.icu</code>. Si ya usas el paquete ICU4J en tus
- aplicaciones, el cambio a las API <code>android.icu</code> en el framework de Android
- puede reducir notablemente el tamaño del APK.
-</p>
-
-<p>
- Para obtener más información sobre las API de ICU4J de Android, consulta <a href="{@docRoot}preview/features/icu4j-framework.html">Compatibilidad con ICU4J</a>.
-</p>
-
-
-
-<h2 id="gles_32">API™ de OpenGL ES 3.2</h2>
-
-<p>En Android N se agregan interfaces de framework y compatibilidad con plataformas para OpenGL ES 3.2, entre las que se incluye lo siguiente:</p>
-
-<ul>
- <li> todas las extensiones del <a class="external-link" href="https://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">
-paquete de extensiones de Android</a></a> (AEP), a excepción de <code>EXT_texture_sRGB_decode</code>;
- <li> búferes de fotogramas de punto flotante para HDR y sombreado aplazado;
- <li> llamadas a draw a través de BaseVertex para mejorar el procesamiento por lotes y la transmisión;
- <li> sólido control de acceso a búfer para reducir la sobrecarga de WebGL.
-</ul>
-
-<p>En Android N, la API de framework para OpenGL ES 3.2 se proporciona con la clase
-<code>GLES32</code>. Al usar OpenGL ES 3.2, asegúrate de declarar el
-requisito en tu archivo de manifiesto, con la etiqueta <code><uses-feature></code> y el
-atributo <code>android:glEsVersion</code>. </p>
-
-<p>Para obtener información sobre el uso de OpenGL ES, incluida la manera de comprobar la
-versión de OpenGL ES que admite el dispositivo durante el tiempo de ejecución, consulta la<a href="{@docRoot}guide/topics/graphics/opengl.html"> guía de la API OpenGL ES</a>.</p>
-
-
-<h2 id="android_tv_recording">Grabación de Android TV</h2>
-
-<p>En Android N, se agrega la capacidad de grabar y reproducir contenido de servicios
-de entrada de Android TV a través de las nuevas API de grabación. Aprovechando las mejoras existentes de las API time shifting
-, los servicios de entrada de TV pueden controlar los datos de canales que pueden grabarse y la manera
-en que se guardan las sesiones grabadas, y administrar la interacción del usuario con el contenido grabado. </p>
-
-<p>Para obtener más información, consulta <a href="{@docRoot}preview/features/tv-recording-api.html">API de grabación de Android TV</a>.</p>
-
-
-<h2 id="android_for_work">Android for Work</h2>
-
-<p>Android for Work suma muchas funciones y API nuevas para dispositivos con Android N.
-A continuación, se muestran algunos aspectos destacados. Para ver la lista completa de cambios, consulta
-<a href="{@docRoot}preview/features/afw.html">Actualizaciones de Android for Work</a>.</p>
-
-<h3 id="work_profile_security_challenge">Comprobación de seguridad para perfiles de trabajo </h3>
-
-<p>
- Los propietarios de perfiles orientados al SDK de Android N
- pueden especificar una comprobación de seguridad independiente para las aplicaciones que se ejecutan en
- el perfil de trabajo. La comprobación para perfiles de trabajo se muestra cuando un usuario intenta abrir
- aplicaciones de trabajo. Cuando la comprobación de seguridad es exitosa, se desbloquea el
- perfil de trabajo y se descifra si es necesario. Para quienes posean perfiles,
- <code>ACTION_SET_NEW_PASSWORD</code> solicita al usuario establecer una comprobación de
- trabajo y <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> le solicita
- establecer un bloqueo de dispositivo.
-</p>
-
-<p>
- Quienes posean perfiles pueden establecer políticas de contraseñas diferentes para la comprobación de seguridad de trabajo
- (por ejemplo, la extensión que debe tener el PIN o la posibilidad de usar una huella digital
- para desbloquear el perfil) usando <code>setPasswordQuality()</code>,
- <code>setPasswordMinimumLength()</code> y métodos relacionados. También
- pueden establecer el bloqueo del dispositivo usando la instancia de <code>DevicePolicyManager</code>
- devuelta por el nuevo método <code>getParentProfileInstance()</code>.
- Además, tienen la posibilidad de personalizar la pantalla de credenciales de la
- comprobación de trabajo usando los nuevos métodos <code>setOrganizationColor()</code> y
- <code>setOrganizationName()</code>.
-</p>
-<h3 id="turn_off_work">Desactivación del modo de trabajo </h3>
-
-<p>En dispositivos con perfil de trabajo, los usuarios pueden alternar el modo de trabajo. Cuando este último está
-inactivo, el usuario administrado queda deshabilitado temporalmente, con lo cual se desactivan las aplicaciones de perfiles
-de trabajo, la sincronización en segundo plano y las notificaciones. Esto incluye la aplicación del propietario del
-perfil. Cuando el modo de trabajo está inactivo, en el sistema se muestra un ícono
-de estado persistente para recordar al usuario que no puede iniciar aplicaciones de trabajo. El launcher
-indica que no es posible acceder a aplicaciones ni widgets de trabajo. </p>
-
-<h3 id="always_on_vpn">Always on VPN </h3>
-
-<p>Los propietarios de dispositivos y perfiles pueden asegurarse de que las aplicaciones de trabajo siempre se conecten
-a través de una VPN especificada. El sistema inicia dicha VPN en forma automática después del
-inicio del dispositivo.</p>
-
-<p>
- Los nuevos métodos de <code>DevicePolicyManager</code> son
- <code>setAlwaysOnVpnPackage()</code> y
- <code>getAlwaysOnVpnPackage()</code>.
-</p>
-
-<p>Debido a que los servicios de VPN pueden enlazarse directamente a través del sistema sin interacción con
-aplicaciones, los clientes de VPN deben administrar nuevos puntos de entrada para Always on VPN. Al igual que
-antes, los servicios se indican al sistema con una
-clase <code>android.net.VpnService</code> de acción de coincidencia de filtro de intents. </p>
-
-<p>
- Los usuarios también pueden establecer clientes Always on VPN que implementen métodos
- <code>VPNService</code> en el usuario principal con
- <strong>Settings > More > Vpn</strong>.
-</p>
-
-<h3 id="custom_provisioning">Aprovisionamiento personalizado</h3>
-
-<p>
- En una aplicación, se pueden personalizar los flujos de aprovisionamiento
- del propietario del perfil y del dispositivo con logos y colores corporativos.
- <code>DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR</code> personaliza el
- color del flujo. <code>DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI</code>
- personaliza el flujo con un logotipo corporativo.
-</p>
-
-<h2 id="accessibility_enhancements">Mejoras de accesibilidad</h2>
-
-<p>Android N ahora ofrece Vision Settings directamente en la pantalla de bienvenida para la configuración de
-dispositivos nuevos. Esto permite a los usuarios descubrir y configurar de manera mucho más sencilla
-funciones de accesibilidad en sus dispositivos, como el gesto de ampliación, el tamaño
-de fuente, el tamaño de pantalla y TalkBack. </p>
-
-<p>Al tener estas funciones de accesibilidad una disposición más prominente, es más probable
-que tus usuarios prueben tu aplicación con ellas habilitadas. Asegúrate de probar tus aplicaciones
-anticipadamente con esta configuración habilitada. Puedes habilitarla en Settings >
-Accessibility.</p>
-
-<p>Además, los servicios de accesibilidad de Android N ahora pueden asistir a los usuarios con discapacidades
-motrices con el uso de la pantalla. La nueva API permite crear servicios con
-funciones como el seguimiento de rostros u ojos y la exploración por puntos, entre otros, para satisfacer
-las necesidades de estos usuarios.</p>
-
-<p>Para obtener más información, consulta <code>android.accessibilityservice.GestureDescription</code>
- en la <a href="{@docRoot}preview/setup-sdk.html#docs-dl">referencia de la API</a> descargable.</p>
-
-
-<h2 id="direct_boot">Inicio directo</h2>
-
-<p>El inicio directo optimiza los tiempos de inicio del dispositivo y permite una funcionalidad
-limitada de las aplicaciones aun después de un reinicio inesperado.
-Por ejemplo, si un dispositivo encriptado se reinicia mientras el usuario duerme,
-este último puede continuar recibiendo en forma normal notificaciones de alarmas, llamadas entrantes y mensajes
-registrados. Esto también significa que los servicios de accesibilidad también pueden estar
- disponibles de inmediato después de un reinicio.</p>
-
-<p>El inicio directo aprovecha la encriptación basada en archivos de Android N,
-a fin de habilitar políticas de encriptación específicas para datos del sistema y de aplicaciones.
-El sistema usa un encriptado por el dispositivo para datos de sistema seleccionados y datos de aplicaciones
-explícitamente registrados. De forma predeterminada, se usa un depósito encriptado con credenciales para los
- datos de sistema, los datos de usuario, las aplicaciones y los datos de aplicaciones restantes. </p>
-
-<p>Durante el inicio, el sistema se carga en un modo restringido con acceso únicamente
-a datos encriptados por el dispositivo y sin acceso general a aplicaciones o datos.
-Si hay componentes que deseas ejecutar en este modo, puedes registrarlos
-configurando un marcador en el manifiesto. Después del reinicio, el sistema activa
-componentes registrados transmitiendo la intent <code>LOCKED_BOOT_COMPLETED</code>
-. El sistema garantiza que estén disponibles los datos de aplicaciones encriptados por el dispositivo
-antes de la desactivación del bloqueo. No es posible acceder a los demás datos hasta que el usuario confirme sus credenciales de pantalla de
- bloqueo para descifrarlos. </p>
-
-Para obtener más información, consulta <a href="{@docRoot}preview/features/direct-boot.html">Inicio directo</a>.</p>
-</p>
-
-
-<h2 id="key_attestation">Atestación de claves</h2>
-
-<p>Los depósitos de claves guardados en hardware proporcionan un método mucho más seguro para crear, almacenar
-y usar claves criptográficas en dispositivos Android. Protegen las claves contra funciones del kernel de
-Linux, vulnerabilidades potenciales de Android y extracciones
-de dispositivos con derechos de administrador.</p>
-
-<p>Para hacer más sencillo y seguro el uso de depósitos de claves guardados en hardware,
-en Android N, se presenta la atestación de claves. En las aplicaciones y en los servicios que no dependen de los dispositivos se puede usar la atestación
-de claves para determinar fehacientemente el almacenamiento de un par de claves RSA o EC se
-en hardware, las propiedades de dicho par y las
- limitaciones aplicadas a su uso y validez. </p>
-
-<p>Los servicios que no dependen de los dispositivos y las aplicaciones pueden solicitar información acerca de un par de claves
-a través de un certificado de atestación X.509 que debe firmarse con una clave de atestación
-válida. La clave de atestación es una clave de firma ECDSA que se
-inyecta en el depósito de claves guardado en hardware en la fábrica.
-Por lo tanto, un certificado de atestación firmado con una clave de atestación
-válida confirma la existencia de un depósito de claves guardado en hardware y de información detallada
- sobre los pares de claves en dicho depósito de claves.</p>
-
-<p>Para asegurarse de que el dispositivo use una imagen segura y oficial de fábrica de
-Android, la atestación de claves solicita que el <a class="external-link" href="https://source.android.com/security/verifiedboot/verified-boot.html#bootloader_requirements">bootloader</a>
-del dispositivo proporcione la siguiente información al <a class="external-link" href="https://source.android.com/security/trusty/index.html">entorno de ejecución
-seguro (TEE)</a>:</p>
-
-<ul>
-<li>la versión del SO y el nivel de revisión instalados en el dispositivo;</li>
-<li>la clave pública de <a href="https://source.android.com/security/verifiedboot/index.html" class="external-link">Verified Boot</a> y el estado de bloqueo.</li>
- </ul>
-
-<p>Para obtener más información sobre la función de depósitos de claves guardados en hardware,
-consulta la guía de<a href="https://source.android.com/security/keystore/" class="external-link"> Depósito de clave guardado en hardware</a>.</p>
-
-<p>Además de la atestación de claves, en Android N también se presentan
- claves enlazadas a huellas digitales no revocadas en la inscripción con estas huellas.</p>
-
-<h2 id="network_security_config">Configuración de seguridad de la red</h2>
-
-<p>En Android N, las aplicaciones pueden personalizar el comportamiento de sus conexiones protegidas (HTTPS y TLS)
-en forma segura, sin modificaciones en el código, a través de la
-<em>Configuración de seguridad de la red</em> en lugar de las API
-convencionales, propensas a generar errores (p. ej., X509TrustManager).</p>
-
- <p>Funciones admitidas:</p>
-<ul>
-<li><b>Anclajes de confianza personalizados.</b> Permite personalizar qué autoridades de
-certificado (CA) son de confianza para las conexiones de seguridad de una aplicación. Por ejemplo,
- confiar en certificados autofirmados particulares o un conjunto restringido de CA públicas.
-</li>
-<li><b>Anulaciones de solo depuración.</b> Permite que el desarrollador de una aplicación depure en forma segura
-conexiones protegidas de su aplicación sin riesgos adicionales para la base
-instalada.
-</li>
-<li><b>Desactivación del tráfico de Cleartext.</b> Permite que una aplicación se proteja a sí misma contra
-el uso accidental de tráfico de Cleartext.</li>
-<li><b>Fijación de certificados.</b> Esta es una función avanzada que permite a una aplicación
- limitar las claves de servidores en las que se pueda confiar para conexiones protegidas.</li>
-</ul>
-
-<p>Para obtener más información, consulta <a href="{@docRoot}preview/features/security-config.html">Configuración de seguridad de
-la red</a>.</p>
-
-<h2 id="default_trusted_ca">Entidad de certificación de confianza predeterminada</h2>
-
-<p>De manera predeterminada, en las aplicaciones orientadas a Android N solo se consideran como confiables los certificados proporcionados por el sistema
-y ya no se da esta misma consideración a las entidades de certificación (CA) agregadas por usuarios. En aquellas aplicaciones orientadas a Android
-N para las cuales se desee considerar tales CA como válidas, se debe usar la
-<a href="{@docRoot}preview/features/security-config.html">Configuración de seguridad de la red</a> a fin de
-especificar los términos de confianza de dichas CA.</p>
-
-<h2 id="apk_signature_v2">Esquema de firma de APK v2</h2>
-
-<p>
- Android N presenta el esquema de firma de APK v2, un nuevo esquema de firma de aplicaciones que
- ofrece instalación más rápida de las aplicaciones y mayor protección contra alteraciones
- no autorizadas de archivos APK. De forma predeterminada, Android Studio 2.2 y el complemento de Android
- para Gradle 2.2 firman tu aplicación con el esquema de firma de APK v2 y
- el esquema de firma tradicional, que utiliza la firma JAR.
-</p>
-
-<p>
- Aunque recomendamos que implementes el esquema de firma de APK v2 en tu aplicación, este esquema
- nuevo no es obligatorio. Si la aplicación no se compila correctamente con el
- esquema de firma de APK v2, puedes deshabilitar este esquema nuevo. Si se deshabilita el proceso,
- Android Studio 2.2 y el complemento de Android para Gradle 2.2 firman tu
- aplicación con el esquema de firma tradicional solamente. Para firmar solo con el
- esquema tradicional, abre el archivo <code>build.gradle</code> del nivel del módulo, a continuación,
- agrega la línea <code>v2SigningEnabled false</code> a la configuración de firma
- de la versión:
-</p>
-
-<pre>
- android {
- ...
- defaultConfig { ... }
- signingConfigs {
- release {
- storeFile file("myreleasekey.keystore")
- storePassword "password"
- keyAlias "MyReleaseKey"
- keyPassword "password"
- <strong>v2SigningEnabled false</strong>
- }
- }
- }
-</pre>
-
-<p class="caution"><strong>Advertencia: </strong> Si firmas la aplicación con el
- esquema de firma de APK v2 y luego la modificas, se invalida
- la firma de la aplicación. Por este motivo, usa herramientas como <code>zipalign</code>
- antes de firmar la aplicación con el esquema de firma de APK v2, y no después.
-</p>
-
-<p>
- Para obtener más información, lee los documentos de Android Studio que describen cómo
- <a href="{@docRoot}studio/publish/app-signing.html#release-mode">
- firmar una aplicación</a> en Android Studio y cómo<a href="{@docRoot}studio/build/build-variants.html#signing"> configurar
- el archivo de compilación para firmar aplicaciones</a> con el complemento de Android para Gradle.
-</p>
-
-<h2 id="scoped_directory_access">Acceso a directorios determinados</h2>
-
-<p>En Android N, las aplicaciones pueden usar nuevas API para solicitar acceso a directorios de <a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">almacenamiento
-externo</a> específicos, incluidos los directorios de medios extraíbles, como las tarjetas
-SD. Las nuevas API simplifican enormemente la manera en que tu aplicación accede a directorios
-de almacenamiento externo estándares, como <code>Pictures</code>. Las aplicaciones
-de fotografía, por ejemplo, pueden usar estas API en lugar de
-<code>READ_EXTERNAL_STORAGE</code>, que otorga acceso a todos los directorios
-de almacenamiento, o del framework de acceso a almacenamiento, con el cual el usuario debe navegar hasta
-el directorio.</p>
-
-<p>A su vez, las nuevas API simplifican los pasos que un usuario debe seguir para otorgar a tu aplicación acceso a almacenamiento
-externo. Cuando se usan las nuevas API, el sistema emplea una IU de
-permisos simple en la que se detallan claramente los directorios a los cuales
-la aplicación solicita acceso.</p>
-
-<p>Para obtener más información, consulta la documentación
-<a href="{@docRoot}preview/features/scoped-folder-access.html">Acceso
-a directorios determinados</a> para desarrolladores.</p>
-
-<h2 id="keyboard_shortcuts_helper">Ayuda en los métodos abreviados del teclado</h2>
-
-<p>
-En Android N, el usuario puede presionar "Alt + /" para activar una pantalla de <em>métodos abreviados del teclado</em>
-que muestra todos los métodos abreviados disponibles, tanto para el
-sistema como la aplicación que esté en primer plano. Estos se recuperan automáticamente del menú de la aplicación si
-están disponibles, pero los desarrolladores pueden proporcionar sus propios métodos abreviados perfeccionados
-para la pantalla. Puedes hacerlo anulando el nuevo método
-<code>Activity.onProvideKeyboardShortcuts()</code>, lo que se describe en la
-<a href="{@docRoot}preview/setup-sdk.html#docs-dl">referencia de la API</a> descargable.
-</p>
-
-<p>
-Para activar la ayuda en los métodos abreviados del teclado desde cualquier ubicación en la aplicación,
-llama a {@code Activity.requestKeyboardShortcutsHelper()} para la actividad relevante.
-</p>
-
-<h2 id="sustained_performance_api">API de rendimiento sostenido</h2>
-
-<p>
-El rendimiento puede fluctuar considerablemente en las aplicaciones de ejecución prolongada porque el
-sistema limita los motores de sistemas en chip cuando los componentes del dispositivo alcanzan los
-límites de temperatura. Esta fluctuación presenta un objetivo móvil para los desarrolladores
-de aplicaciones que crean aplicaciones de alto rendimiento y ejecución prolongada.
-</p>
-
-<p>
-Android N incluye compatibilidad opcional para un
-<em>modo de rendimiento sostenido</em>, que permite que los fabricantes de equipo original (OEM) arrojen datos sobre las capacidades de rendimiento del dispositivo
-para las aplicaciones de ejecución prolongada. Los desarrolladores
-de aplicaciones pueden usar estos datos para perfeccionar sus aplicaciones y alcanzar un nivel
-uniforme y predecible de rendimiento en el dispositivo durante períodos prolongados.
-</p>
-
-<p>
-Los desarrolladores de aplicaciones solo pueden probar esta API nueva en la N Developer Preview instalada solo en dispositivos con
-Nexus 6P. Para usar esta función,
-establece el indicador de rendimiento sostenido de la ventana
-que deseas ejecutar en el modo de rendimiento sostenido. Establece este indicador con el método
-{@code Window.setSustainedPerformanceMode()}. El sistema deshabilita
-automáticamente este modo cuando la ventana deja de estar en primer plano.
-</p>
-
-<h2 id="vr">Soporte de RV</h2>
-
-<p>
-Android N agrega compatibilidad y optimizaciones de plataforma para un modo de RV nuevo, con el objetivo de que los
- desarrolladores puedan forjar experiencias de RV móviles de alta calidad para los usuarios. Hay varias mejoras en el
-rendimiento, entre las que se incluye el acceso a un núcleo de CPU exclusivo para aplicaciones de RV.
-Dentro de tus aplicaciones, puedes aprovechar el seguimiento de cabeza inteligente
-y las notificaciones en sonido estéreo que funcionan para la RV. Un dato muy importante es que Android N presenta
-muy pocos gráficos de baja latencia. Para obtener información completa sobre el desarrollo de aplicaciones de RV para Android N,
-consulta <a href="https://developers.google.com/vr/android/">Google VR SDK para Android</a>.
-</p>
-
-
-<h2 id="print_svc">Mejoras del servicio de impresión</h2>
-
-<p>
- En Android N, los desarrolladores de servicios de impresión ahora pueden publicar información adicional
- sobre impresoras y trabajos de impresión individuales.
-</p>
-
-<p>
- Al enumerar las impresoras individuales, un servicio de impresión ahora puede establecer íconos
- por impresora de dos maneras:
-</p>
-
-<ul>
- <li>Puedes establecer un ícono desde el id. de un recurso llamando a
- <code>PrinterInfo.Builder.setResourceIconId()</code>.
- </li>
-
- <li>Puedes mostrar un ícono de la red llamando a
- <code>PrinterInfo.Builder.setHasCustomPrinterIcon()</code> y configurando un
- callback para cuando se solicite el ícono con
- <code>android.printservice.PrinterDiscoverySession.onRequestCustomPrinterIcon()</code>.
- </li>
-</ul>
-
-<p>
- Además, puedes proporcionar las actividades por impresora para mostrar información
- adicional llamando a <code>PrinterInfo.Builder.setInfoIntent()</code>.
-</p>
-
-<p>
- Puedes indicar el progreso y el estado de los trabajos de impresión en la notificación de
- trabajo de impresión llamando a
- <code>android.printservice.PrintJob.setProgress()</code> y
- <code>android.printservice.PrintJob.setStatus()</code>, respectivamente.
-</p>
-
-<p>
- Para obtener más información sobre estos métodos, consulta la <a href="{@docRoot}preview/setup-sdk.html#docs-dl">referencia de la API</a> descargable.
-</p>
-
-<h2 id="framemetrics_api">API FrameMetricsListener</h2>
-
-<p>
-La API FrameMetricsListener permite que una aplicación monitoree el rendimiento de la representación
-de la IU. La API brinda esta capacidad mediante la exposición de una transmisión de API Pub/Sub para transferir información sobre el tiempo
-de los cuadros para la ventana actual de la aplicación. Los datos devueltos son
-equivalentes a lo que muestra <code><a href="{@docRoot}tools/help/shell.html#shellcommands">adb shell</a>
-dumpsys gfxinfo framestats</code>, pero no se limita a los últimos 120 cuadros.
-</p>
-
-<p>
-Puedes usar FrameMetricsListener para medir el rendimiento de
-la IU del nivel de interacción en producción sin contar con una conexión USB. Esta API
-permite recopilar datos con una especificidad mayor que
-{@code adb shell dumpsys gfxinfo}. Esta especificidad mayor es posible porque
-el sistema puede recopilar datos para interacciones determinadas en la aplicación, sin que sea
-necesario que el sistema obtenga un resumen global del
-rendimiento de toda la aplicación o borre un estado global. Puedes usar esta
-capacidad con el objetivo de recopilar datos de rendimiento e identificar regresiones en el rendimiento de la IU
-para casos de uso reales dentro de una aplicación.
-</p>
-
-<p>
-Para monitorear una ventana, implementa el callback <code>FrameMetricsListener.onMetricsAvailable()</code>
-y regístralo en esa ventana. Para obtener más información, consulta
-la documentación de la clase {@code FrameMetricsListener}
-en la <a href="{@docRoot}preview/setup-sdk.html#docs-dl">referencia de la API</a> descargable.
-</p>
-
-<p>
-La API proporciona un objeto {@code FrameMetrics}, que contiene datos de intervalos que
-el subsistema de representación informa sobre varios hitos en el ciclo de vida de un marco.
-Las métricas compatibles son {@code UNKNOWN_DELAY_DURATION},
-{@code INPUT_HANDLING_DURATION}, {@code ANIMATION_DURATION},
-{@code LAYOUT_MEASURE_DURATION}, {@code DRAW_DURATION}, {@code SYNC_DURATION},
-{@code COMMAND_ISSUE_DURATION}, {@code SWAP_BUFFERS_DURATION},
-{@code TOTAL_DURATION} y {@code FIRST_DRAW_FRAME}.
-</p>
-
-
-<h2 id="virtual_files">Archivos virtuales</h2>
-
-<p>
- En versiones anteriores de Android, tu aplicación podía usar el framework
- de acceso al almacenamiento para permitir a los usuarios seleccionar archivos de cuentas de almacenamiento en la nube,
- como Google Drive. Sin embargo, no se podían representar los archivos que no
- tenían una representación directa en código de bits; cada archivo debía brindar
- un flujo de entrada.
-</p>
-
-<p>
- Android N incorpora el concepto de <em>archivos virtuales</em> al framework
- de acceso al almacenamiento. La función de archivos virtuales permite que tu
- {@link android.provider.DocumentsProvider} devuelva URI de documentos que se pueden
- usar en una intent {@link android.content.Intent#ACTION_VIEW} incluso si
- no tienen una representación directa en código de bits. Android N también te permite
- ofrecer formatos alternativos para archivos del usuario, virtuales u otros.
-</p>
-
-<p>
- Para obtener un URI para un documento virtual en tu aplicación, primero crea una
- {@link android.content.Intent} a fin de abrir la IU del selector de archivos. Como una aplicación
- no puede abrir directamente un archivo virtual con el método
- {@link android.content.ContentResolver#openInputStream(Uri) openInputStream()},
- la aplicación no recibe ningún archivo virtual si incluyes la categoría
- {@link android.content.Intent#CATEGORY_OPENABLE}.
-</p>
-
-<p>
- Cuando el usuario realiza una selección, el sistema llama al método
- {@link android.app.Activity#onActivityResult onActivityResult()}.
- La aplicación puede recuperar el URI del archivo virtual y obtener un flujo de entrada, como
- se demuestra en el fragmento de código a continuación.
-</p>
-
-<pre>
- // Other Activity code ...
-
- final static private int REQUEST_CODE = 64;
-
- // We listen to the OnActivityResult event to respond to the user's selection.
- @Override
- public void onActivityResult(int requestCode, int resultCode,
- Intent resultData) {
- try {
- if (requestCode == REQUEST_CODE &&
- resultCode == Activity.RESULT_OK) {
-
- Uri uri = null;
-
- if (resultData != null) {
- uri = resultData.getData();
-
- ContentResolver resolver = getContentResolver();
-
- // Before attempting to coerce a file into a MIME type,
- // check to see what alternative MIME types are available to
- // coerce this file into.
- String[] streamTypes =
- resolver.getStreamTypes(uri, "*/*");
-
- AssetFileDescriptor descriptor =
- resolver.openTypedAssetFileDescriptor(
- uri,
- streamTypes[0],
- null);
-
- // Retrieve a stream to the virtual file.
- InputStream inputStream = descriptor.createInputStream();
- }
- }
- } catch (Exception ex) {
- Log.e("EXCEPTION", "ERROR: ", ex);
- }
- }
-</pre>
-
-<p>
- Para obtener más información sobre el acceso a archivos del usuario, consulta la
- <a href="{@docRoot}guide/topics/providers/document-provider.html">guía
- Frameworks de acceso a almacenamiento</a>.
-</p>
diff --git a/docs/html-intl/intl/es/preview/behavior-changes.jd b/docs/html-intl/intl/es/preview/behavior-changes.jd
deleted file mode 100644
index 112c1c9..0000000
--- a/docs/html-intl/intl/es/preview/behavior-changes.jd
+++ /dev/null
@@ -1,610 +0,0 @@
-page.title=Cambios en los comportamientos
-page.keywords=versión preliminar,sdk,compatibilidad
-meta.tags="preview", "compatibility"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-changes_2x.png
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>En este documento</h2>
-
-<ol>
- <li><a href="#perf">Mejoras de rendimiento</a>
- <ol>
- <li><a href="#doze">Descanso</a></li>
- <li><a href="#bg-opt">Optimizaciones en segundo plano</a></li>
- </ol>
- </li>
- <li><a href="#perm">Cambios en los permisos</a>
- </li>
- <li><a href="#sharing-files">Intercambio de archivos entre aplicaciones</a></li>
- <li><a href="#accessibility">Mejoras de accesibilidad</a>
- <ol>
- <li><a href="#screen-zoom">Zoom de la pantalla</a></li>
- <li><a href="#vision-settings">Vision Settings en el asistente de configuración</a></li>
- </ol>
- </li>
- <li><a href="#ndk">Aplicaciones del NDK con vínculos a bibliotecas de plataformas</a></li>
- <li><a href="#afw">Android for Work</a></li>
- <li><a href="#annotations">Retención de anotaciones</a></li>
- <li><a href="#other">Otros aspectos importantes</a></li>
-</ol>
-
-<h2>Consulta también</h2>
-<ol>
- <li><a href="{@docRoot}preview/api-overview.html">
- Información general sobre la API de Android N</a></li>
-</ol>
-
-</div>
-</div>
-
-
-<p>
- Además de nuevas características y capacidades, Android N
- incluye diversos cambios en el sistema y en los comportamientos de la API. En este documento,
- se destacan algunos de los cambios principales que debes comprender y justificar
- en tus aplicaciones.
-</p>
-
-<p>
- Si publicaste anteriormente una aplicación para Android, ten en cuenta que tu aplicación
- podría verse afectada por estos cambios en la plataforma.
-</p>
-
-
-<h2 id="perf">Batería y memoria</h2>
-
-<p>
-Android N incluye cambios en los comportamientos del sistema para mejorar la duración de la batería
-de los dispositivos y reducir el uso de la memoria RAM. Estos cambios pueden afectar el acceso de tu aplicación a
-recursos del sistema, además de la manera en que tu aplicación interactúa con otras aplicaciones mediante
-determinadas intents implícitas.
-</p>
-
-<h3 id="doze">Descanso</h3>
-
-<p>
- Descanso, presentado en Android 6.0 (nivel de API 23), prolonga la duración de la batería
- aplazando actividades de CPU y red cuando un usuario deja un dispositivo desenchufado,
- quieto y con la pantalla apagada. En Android N se ofrecen más
- mejoras para Descanso a través de la aplicación de un subconjunto de restricciones de CPU y red
- mientras el dispositivo se encuentra desenchufado y con la pantalla apagada, aunque no necesariamente
- quieto; por ejemplo, al ir dentro del bolsillo de un usuario en movimiento.
-</p>
-
-
-<img src="{@docRoot}preview/images/doze-diagram-1.png" alt="" height="251px" id="figure1" />
-<p class="img-caption">
- <strong>Figura 1:</strong> Ilustración del modo en que Descanso aplica un primer nivel de
- restricciones de actividad del sistema para prolongar la duración de la batería.
-</p>
-
-<p>
- Cuando un dispositivo funciona con la batería y la pantalla permanece apagada durante un tiempo
- determinado, se activa en este el modo Descanso y se aplica el primer subconjunto de restricciones: se
- desactiva el acceso de las aplicaciones a la red y se aplazan tareas y sincronizaciones. Si el dispositivo
- permanece quieto durante un tiempo determinado tras activarse el modo Descanso, el sistema aplica el
- resto de las restricciones del modo a {@link android.os.PowerManager.WakeLock},
- alarmas de {@link android.app.AlarmManager}, GPS y análisis de Wi-Fi. Independientemente de que
- se apliquen algunas o todas las restricciones del modo Descanso, el sistema activa el
- dispositivo durante plazos de mantenimiento breves en los cuales las aplicaciones tienen
- acceso a la red y pueden ejecutar sincronizaciones o procesos aplazados.
-</p>
-
-
-<img src="{@docRoot}preview/images/doze-diagram-2.png" alt="" id="figure2" />
-<p class="img-caption">
- <strong>Figura 2:</strong> Ilustración del modo en que Descanso aplica un segundo nivel de
- restricciones de actividad del sistema después de que el dispositivo permanece quieto durante un tiempo determinado.
-</p>
-
-<p>
- Ten en cuenta que, cuando se activa la pantalla o se enchufa el dispositivo, se desactiva el modo Descanso y
- se retiran estas restricciones de procesamiento. El comportamiento adicional no
- tiene efecto sobre las recomendaciones ni las prácticas recomendadas para adaptar tu aplicación a la versión
- anterior de Descanso, presentada en Android 6.0 (nivel de API 23), según lo descrito en
- <a href="{@docRoot}training/monitoring-device-state/doze-standby.html">
- Optimización para Descanso y App Standby</a>. De todos modos, debes
- seguir las recomendaciones; por ejemplo, la de usar Google Cloud Messaging (GCM) para
- enviar y recibir mensajes, y la de planificar actualizaciones para adaptar
- el comportamiento adicional de Descanso.
-</p>
-
-
-<h3 id="bg-opt">Project Svelte: Optimizaciones en segundo plano</h3>
-
-<p>
- En Android N, se eliminan tres transmisiones implícitas para ayudar a optimizar el uso de la
- memoria y el consumo de energía. Este cambio es necesario porque las transmisiones
- implícitas a menudo inician aplicaciones que se registran para realizar un seguimiento de ellas en
- segundo plano. La eliminación de estas transmisiones puede mejorar sustancialmente el rendimiento del dispositivo
- y la experiencia del usuario.
-</p>
-
-<p>
- Los dispositivos móviles están sujetos a cambios de conectividad frecuentes
- entre los modos de datos Wi-Fi y móviles. Actualmente, las aplicaciones pueden realizar controles en busca de cambios en la
- conectividad registrando un receptor para la transmisión implícita {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION} en su
- manifiesto. Debido a que muchas aplicaciones se registran para recibir esta transmisión, un cambio de
- red puede hacer que todas se activen y procesen la transmisión a la
- vez.
-</p>
-
-<p>
- Asimismo, en versiones anteriores de Android, las aplicaciones podían registrarse para recibir las transmisiones implícitas {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} y {@link
- android.hardware.Camera#ACTION_NEW_VIDEO} de otras aplicaciones, como la
- cámara. Cuando un usuario toma una foto con la aplicación de la cámara, estas aplicaciones se activan
- para procesar la transmisión.
-</p>
-
-<p>
- Para corregir estos problemas, en Android N se aplican las siguientes
- optimizaciones:
-</p>
-
-<ul>
- <li>Las aplicaciones orientadas a Android N no reciben transmisiones {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION}, aun cuando contengan
- entradas de manifiesto que les permitan solicitar notificaciones de estos eventos. Las aplicaciones que
- se ejecutan aún pueden escuchar {@code CONNECTIVITY_CHANGE} en su subproceso principal
- si solicitan una notificación con un {@link android.content.BroadcastReceiver}.
- </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 Android N.
- </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 con Android N correctamente.
- El framework de Android ofrece varias soluciones para mitigar la necesidad de
- estas transmisiones implícitas. Por ejemplo, la API {@link
- android.app.job.JobScheduler} proporciona un mecanismo sólido para programar
- operaciones de red cuando se cumplen las condiciones especificadas, como una conexión a una
- red de uso no medido. Puedes usar {@link
- android.app.job.JobScheduler} para responder a cambios en proveedores de contenido.
-</p>
-
-<p>
- Para obtener más información sobre optimizaciones en segundo plano en Android N y la manera de adaptar tu aplicación,
- consulta <a href="{@docRoot}preview/features/background-optimization.html">Optimizaciones
- en segundo plano</a>.
-</p>
-
-<h2 id="perm">Cambios en los permisos</h2>
-
-<p>
- En Android N, se incorporan cambios en permisos que pueden afectar tu aplicación.
-</p>
-
-<h3 id="permfilesys">Cambios en los permisos del sistema de archivos</h3>
-
-<p>
- Para mejorar la seguridad de los archivos privados, el directorio privado de
- las aplicaciones orientadas a Android N o versiones posteriores tiene acceso restringido. (<code>0700</code>).
- Esta configuración evita la fuga de metadatos de archivos privados, como su tamaño
- o existencia. Este cambio en los permisos tiene varios efectos secundarios:
-</p>
-
-<ul>
- <li>
- Los propietarios ya no pueden reducir los permisos de archivo de los archivos privados,
- y un intento de hacerlo utilizando
- {@link android.content.Context#MODE_WORLD_READABLE} o
- {@link android.content.Context#MODE_WORLD_WRITEABLE} activará una
- {@link java.lang.SecurityException}.
- <p class="note">
- <strong>Nota:</strong> Desde ahora, esta restricción no se aplica planamente.
- Las aplicaciones pueden seguir modificando los permisos para sus directorios privados con
- las API nativas o la API {@link java.io.File File}. Sin embargo, desaconsejamos
- reducir los permisos para el directorio privado.
- </p>
- </li>
- <li>
- Pasar URI <code>file://</code> fuera del dominio del paquete puede dar al
- receptor una ruta de acceso inaccesible. Por lo tanto, los intentos de pasar un
- URI <code>file://</code> activan una
- <code>FileUriExposedException</code>. La manera recomendada para compartir el
- contenido de un archivo privado consiste en utilizar el {@link
- android.support.v4.content.FileProvider}.
- </li>
- <li>
- El {@link android.app.DownloadManager} ya no puede compartir archivos
- almacenados de manera privada por nombre de archivo. Las aplicaciones heredadas pueden terminar con una
- ruta de acceso inaccesible cuando acceden a {@link
- android.app.DownloadManager#COLUMN_LOCAL_FILENAME}. Las aplicaciones orientadas a
- Android N o versiones posteriores activan una {@link java.lang.SecurityException} cuando
- intentan acceder a
- {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}.
- Las aplicaciones heredadas que establecen la ubicación de descarga en una ubicación pública
- usando
- {@link
- android.app.DownloadManager.Request#setDestinationInExternalFilesDir
- DownloadManager.Request.setDestinationInExternalFilesDir()} o
- {@link
- android.app.DownloadManager.Request#setDestinationInExternalPublicDir
- DownloadManager.Request.setDestinationInExternalPublicDir()}
- siguen teniendo acceso a la ruta de acceso en
- {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}; sin embargo, se desaconseja
- seguir este método. El método preferido para acceder a un archivo
- expuesto por el{@link android.app.DownloadManager} consiste en utilizar
- {@link android.content.ContentResolver#openFileDescriptor
- ContentResolver.openFileDescriptor()}.
- </li>
-</ul>
-
-<h2 id="sharing-files">Intercambio de archivos entre aplicaciones</h2>
-
-<p>
-En las aplicaciones orientadas a Android N, el framework de Android aplica
-la política de la API {@link android.os.StrictMode} que prohíbe exponer URI {@code file://}
-fuera de la aplicación. Si una intent con un URI de archivo sale de tu aplicación, la aplicación falla
-con una excepción {@code FileUriExposedException}.
-</p>
-
-<p>
-Para compartir archivos entre aplicaciones, debes enviar un URI {@code content://}
-y otorgar un permiso de acceso temporal en el URI. La forma más sencilla de otorgar este permiso es
-utilizando la clase {@link android.support.v4.content.FileProvider}. Para obtener más información
-sobre permisos e intercambio de archivos,
-consulta <a href="{@docRoot}training/secure-file-sharing/index.html">Intercambio de archivos</a>.
-</p>
-
-<h2 id="accessibility">Mejoras de accesibilidad</h2>
-
-<p>
- En Android N, se incluyen cambios destinados a mejorar la usabilidad de la
- plataforma para usuarios con defectos o discapacidades visuales. Estos cambios
- generalmente no deben exigir modificaciones en el código de tu aplicación. Sin embargo, debes revisar
- estas funciones y probarlas con tu aplicación para avaluar el posible impacto en la experiencia
- del usuario.
-</p>
-
-
-<h3 id="screen-zoom">Zoom de la pantalla</h3>
-
-<p>
- Android N permite a los usuarios configurar <strong>Display size</strong>, el ajuste que expande
- o contrae todos los elementos de la pantalla, lo cual mejora la accesibilidad al dispositivo
- para usuarios con poca visión. Estos no podrán superar el valor de zoom
- mínimo de <a href="http://developer.android.com/guide/topics/resources/providing-resources.html">
- sw320dp</a> para el ancho de pantalla, que es el ancho de un Nexus 4, un teléfono común de tamaño intermedio.
-</p>
-
-<div class="cols">
-
-<div class="col-6">
- <img src="{@docRoot}preview/images/screen-zoom-1.png" alt="" height="XXX" id="figure1" />
-</div>
-<div class="col-6">
- <img src="{@docRoot}preview/images/screen-zoom-2.png" alt="" height="XXX" id="figure1" />
-</div>
-
-</div> <!-- end cols -->
-<p class="img-caption">
- <strong>Figura 3:</strong> En la pantalla de la derecha se muestra el efecto que tiene
- aumentar Display size para un dispositivo con una imagen de sistema de Android N.
-</p>
-
-
-<p>
- Al cambiar la densidad del dispositivo, el sistema notifica a las aplicaciones de las
- siguientes maneras:
-</p>
-
-<ul>
- <li>Si una aplicación se orienta hacia el nivel de API 23 o uno inferior, el sistema automáticamente finaliza
- todos los procesos en segundo plano. Esto significa que, si un usuario hace a un lado
- dicha aplicación para abrir la pantalla <em>Settings</em> y cambiar la configuración de
- <strong>Display size</strong>, el sistema finalizará la aplicación tal
- como lo haría en una situación de bajos recursos de memoria. Si en la aplicación hay procesos en
- primer plano, el sistema notifica a estos procesos el cambio en la configuración como se
- indica en <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Manejo de cambios
- en tiempo de ejecución</a>, así como lo haría si cambiara la orientación del dispositivo.
- </li>
-
- <li>Si una aplicación se orienta hacia Android N, se notifica a todos los procesos
- (en primer y segundo plano) el cambio en la configuración, como se
- indica en <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Manejo de cambios
- en tiempo de ejecución</a>.
- </li>
-</ul>
-
-<p>
- En la mayoría de las aplicaciones, no se necesitan cambios para admitir esta función, si
- en ellas se siguen las prácticas recomendadas de Android. Verificaciones específicas que deben realizarse:
-</p>
-
-<ul>
- <li>Prueba tu aplicación en un dispositivo con ancho de pantalla <code><a href=
- "{@docRoot}guide/topics/resources/providing-resources.html">sw320dp</a></code>
- y asegúrate de que funcione bien.
- </li>
-
- <li>Cuando se modifique la configuración del dispositivo, actualiza la información almacenada en caché que
- dependa de la densidad, como los mapas de bits o recursos almacenados en caché que se carguen desde la
- red. Busca de cambios en la configuración cuando se reanude la actividad de la aplicación, después de la
- pausa.
- <p class="note">
- <strong>Nota:</strong> Si almacenaste en caché datos que dependen de la configuración, te
- convendrá incluir metadatos relacionados, como el tamaño de pantalla
- correspondiente o la densidad de píxeles para dichos datos. Guardar estos metadatos te permite
- decidir si necesitas actualizar los datos almacenados en caché después de un cambio en la
- configuración.
- </p>
- </li>
-
- <li>Evita especificar dimensiones con unidades px, ya que no responden a la
- densidad de pantalla. En lugar de ello, recurre a unidades de <a href="{@docRoot}guide/practices/screens_support.html">píxeles
- (<code>dp</code>) independientes de la densidad</a>.
- </li>
-</ul>
-
-<h3 id="vision-settings">Vision Settings en el asistente de configuración</h3>
-
-<p>
- Vision Settings se incluye en la pantalla de Bienvenida de Android N, en la cual los usuarios pueden
- configurar los siguientes ajustes de accesibilidad para un nuevo dispositivo:
- <strong>Magnification gesture</strong>, <strong>Font size</strong>,
- <strong>Display size</strong> y <strong>TalkBack</strong>. Este cambio
- aumenta la visibilidad de errores relacionados con diferentes ajustes de pantalla. Para
- evaluar el impacto de esta función, debes probar tus aplicaciones con estos
- ajustes habilitados. Puedes encontrarlos en <strong>Settings >
- Accessibility</strong>.
-</p>
-
-<h2 id="ndk">Aplicaciones del NDK con vínculos a bibliotecas de plataformas</h2>
-
-<p>
- En Android N, se incluyen cambios en el espacio de nombres a fin de evitar la carga de API no públicas.
- Si usas el NDK, solo debes emplear API públicas de la plataforma de
- Android. El uso de API no públicas en la próxima versión oficial de Android
- puede hacer que tu aplicación se bloquee.
-</p>
-
-<p>
- Con el propósito de alertarte sobre el uso de API no públicas, las aplicaciones que funcionen en un dispositivo con
- Android N producirán un error de salida de logcat cuando una de ellas llame a una API no pública.
- Este error también aparecerá en la pantalla del dispositivo como un mensaje para ayudar a
- generar conciencia respecto de la situación. Debes revisar el código de tu aplicación para
- quitar el uso de API de plataformas no públicas y probar por completo tus aplicaciones con
- un dispositivo de prueba o emulador.
-</p>
-
-<p>
- Si tu aplicación depende de bibliotecas de plataformas, consulta la documentación sobre el NDK a fin de hallar
- soluciones típicas para el reemplazo de API privadas comunes por API públicas equivalentes.
- También es posible que establezcas vínculos con bibliotecas de plataformas sin notarlo,
- en especial si tu aplicación usa una biblioteca que forma parte de la plataforma (como
- <code>libpng</code>), pero no del NDK. En ese caso, asegúrate de que
- tu APK contenga todos los archivos .so con los cuales intentaste establecer vínculos.
-</p>
-
-<p class="caution">
- <strong>Advertencia:</strong> Algunas bibliotecas de terceros pueden establecer vínculos con API
- no públicas. Si tu aplicación usa estas bibliotecas, es probable que se bloquee al ejecutarse
- en la próxima versión oficial de Android.
-</p>
-
-<p>
- Las aplicaciones no deben depender de bibliotecas nativas no incluidas en el NDK
- ni usarlas, ya que pueden modificarse o eliminarse en la transición de una versión de Android a
- otra. El cambio de OpenSSL a BoringSSL es un ejemplo de modificaciones como esta.
- A su vez, los diferentes dispositivos pueden ofrecer distintos niveles de compatibilidad, debido a que
- no existen requisitos de compatibilidad para bibliotecas de plataformas no incluidas
- en el NDK. Si debes acceder a bibliotecas no relacionadas con el NDK en dispositivos anteriores, haz que la
- carga dependa del nivel de la API de Android.
-</p>
-
-<p>
- Para ayudarte a diagnosticar estos tipos de problemas, a continuación, se ofrecen ejemplos de errores de Java y
- del NDK que podrías hallar al intentar compilar tu aplicación con Android N:
-</p>
-
-<p>Ejemplo de error de Java:</p>
-<pre class="no-pretty-print">
-java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so"
- is not accessible for the namespace "classloader-namespace"
-</pre>
-
-<p>Ejemplo de error de NDK:</p>
-<pre class="no-pretty-print">
-dlopen failed: cannot locate symbol "__system_property_get" referenced by ...
-</pre>
-
-
-<p>
- Aquí se ofrecen soluciones típicas para aplicaciones en las que se produzcan estos tipos de errores:
-</p>
-
-<ul>
- <li>getJavaVM y getJNIEnv de libandroid_runtime.so pueden reemplazarse
- por funciones estándares de JNI:
-<pre class="no-pretty-print">
-AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h>
-AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or
-JavaVM::AttachCurrentThread from <jni.h>.
-</pre>
- </li>
-
- <li>El símbolo {@code property_get} de {@code libcutils.so} puede
- reemplazarse por la API pública {@code alternative __system_property_get}.
- Para hacerlo, usa {@code __system_property_get} con el siguiente elemento include:
-<pre>
-#include <sys/system_properties.h>
-</pre>
- </li>
-
- <li>El símbolo {@code SSL_ctrl} de {@code libcrypto.so} debe
- reemplazarse por una versión local de la aplicación. Por ejemplo, debes establecer un vínculo estático de
- {@code libcyrpto.a} en tu archivo {@code .so} o incluir un vínculo dinámico propio de
- {@code libcrypto.so} de BoringSSL u OpenSSL en tu aplicación.
- </li>
-</ul>
-
-<h2 id="afw">Android for Work</h2>
-<p>
- Android N contiene cambios para aplicaciones orientadas a Android for Work, entre los que se incluyen
- modificaciones en la instalación de certificados, el restablecimiento de contraseñas, la gestión de usuarios
- secundarios y el acceso a identificadores de dispositivos. Si creas aplicaciones para entornos de
- Android for Work, debes estudiar estos cambios y modificar
- tu aplicación según corresponda.
-</p>
-
-<ul>
- <li>Debes usar un instalador de certificados delegados para que el controlador de políticas de dispositivos (DPC) pueda
- configurarlo. Para aplicaciones de propietarios de perfiles y de dispositivos orientadas al SDK de Android N, debes
- usar el instalador de certificados delegados para que el
- DPC llame a
- <code>DevicePolicyManager.setCertInstallerPackage()</code>. Si el instalador
- no está instalado de antemano, el sistema emite una
- <code>IllegalArgumentException</code>.
- </li>
-
- <li>Las restricciones de restablecimiento de contraseñas para administradores de dispositivos ahora se aplican a los propietarios de
- perfiles. Los administradores de dispositivos ya no pueden usar
- {@code DevicePolicyManager.resetPassword()} para borrar contraseñas ni modificar
- las que ya están establecidas. No obstante, pueden establecer una contraseña, aunque solo
- cuando el dispositivo no tiene contraseña, PIN ni patrón.
- </li>
-
- <li>Los propietarios de dispositivos y perfiles pueden administrar cuentas aun cuando haya
- restricciones. Tienen la posibilidad de llamar a las API de administración de cuentas
- incluso al haber restricciones <code>DISALLOW_MODIFY_ACCOUNTS</code> para el usuario.
- </li>
-
- <li>Los propietarios de dispositivos pueden administrar usuarios secundarios de manera más sencilla. Cuando un dispositivo
- funciona en el modo de propietario de dispositivo, automáticamente se establece la restricción <code>DISALLOW_ADD_USER</code>
-. Esto evita que los usuarios creen usuarios secundarios no
- administrados. A su vez, los métodos <code>CreateUser()</code> y
- <code>createAndInitializeUser()</code> han sido dados de baja; los reemplaza el nuevo método
- <code>DevicePolicyManager.createAndManageUser()</code>.
- </li>
-
- <li>Los propietarios de dispositivos pueden acceder a identificadores de dispositivos. Tienen la posibilidad de acceder a la
- dirección MAC de Wi-Fi de un dispositivo a través de
- <code>DevicePolicyManagewr.getWifiMacAddress()</code>. Si nunca se habilitó la función Wi-Fi
- en el dispositivo, este método devuelve un valor {@code null}.
- </li>
-
- <li>La configuración Work Mode controla el acceso a las aplicaciones de trabajo. Cuando este ajuste está desactivado, el
- launcher del sistema indica que las aplicaciones de trabajo no están disponibles atenuándolas. Para volver
- a restaurar el comportamiento normal, habilita el modo de trabajo nuevamente.
-</ul>
-
-<p>
- Para obtener más información sobre los cambios de Android for Work en Android N, consulta
- <a href="{@docRoot}preview/features/afw.html">Actualizaciones de Android for Work</a>.
-</p>
-
-<h2 id="annotations">Retención de anotaciones</h2>
-
-<p>
-Android N soluciona un error por el cual la visibilidad de las anotaciones se había ignorado.
-Este problema permitió que el tiempo de ejecución accediera a anotaciones a las que no debía
-tener acceso. Entre estas anotaciones se incluyen las siguientes:
-</p>
-
-<ul>
- <li>{@code VISIBILITY_BUILD}: destinada a ser visible solo en el momento de compilación.</li>
- <li>{@code VISIBILITY_SYSTEM}: destinada a ser visible en el tiempo de ejecución, pero únicamente al
- sistema subyacente.</li>
-</ul>
-
-<p>
-Si tu aplicación se basa en este comportamiento, agrega una política de retención para las anotaciones que deben
-estar disponibles en el tiempo de ejecución. Para ello, usa {@code @Retention(RetentionPolicy.RUNTIME)}.
-</p>
-
-<h2 id="other">Otros aspectos importantes</h2>
-
-<ul>
-<li>Cuando una aplicación funcione en Android N, pero esté orientada a un nivel de API inferior,
-y el usuario modifique el tamaño de pantalla, el proceso de la aplicación finalizará. La aplicación
-debe tener capacidad para manejar correctamente esta situación. De lo contrario, se bloqueará
-cuando el usuario la restaure desde Recents.
-
-<p>
-Debes probar tu aplicación para controlar que no tenga lugar
-este comportamiento.
-Puedes hacerlo produciendo un error idéntico
-al finalizarla manualmente a través del panel DDMS.
-</p>
-
-<p>
-Las aplicaciones orientadas a Android N y versiones posteriores no finalizarán automáticamente por cambios en la densidad;
-sin embargo, es posible que respondan en forma deficiente a los cambios en la configuración.
-</p>
-</li>
-
-<li>
-En Android N, las aplicaciones deben tener capacidad para manejar correctamente los cambios de configuración
-y no deben bloquearse durante inicios posteriores. Puedes verificar el comportamiento de las aplicaciones
-modificando el tamaño de la fuente (<strong>Setting</strong> >
-<strong>Display</strong> > <strong>Font size</strong>) y restaurándolas
-desde Recents.
-</li>
-
-<li>
-Debido a un error en versiones anteriores de Android, el sistema no indicaba la escritura
-a un socket del TCP en el subproceso principal como una violación del modo strict. En Android N, se corrige este error.
-Las aplicaciones que tienen este comportamiento, ahora emiten una {@code android.os.NetworkOnMainThreadException}.
-Generalmente, realizar operaciones de red en el subproceso principal no es una buena idea porque estas operaciones
-suelen tener una latencia alta de cola que genera mensajes que indican que la aplicación no responde y bloqueos.
-</li>
-
-<li>
-De manea predeterminada, la familia de métodos {@code Debug.startMethodTracing()} ahora
-almacena los resultados en el directorio específico del paquete en el almacenamiento compartido,
-en lugar de hacerlo en el nivel superior
-de la tarjeta SD. Esto significa que las aplicaciones ya no tienen que solicitar el permiso {@code WRITE_EXTERNAL_STORAGE} para usar estas API.
-</li>
-
-<li>
-Muchas API de la plataforma han comenzado a controlar en busca del envío de cargas grandes
-a través de transacciones {@link android.os.Binder}. Además, el
-sistema ahora vuelve a emitir {@code TransactionTooLargeExceptions}
-como {@code RuntimeExceptions}, en lugar de registrarlas o suprimirlas silenciosamente. Un
-ejemplo común es almacenar demasiados datos en
-{@link android.app.Activity#onSaveInstanceState Activity.onSaveInstanceState()},
- lo que hace que {@code ActivityThread.StopInfo} emita una
-{@code RuntimeException} cuando la aplicación se orienta a Android N.
-</li>
-
-<li>
-Si una aplicación publica tareas {@link java.lang.Runnable} en una {@link android.view.View}, y
-la {@link android.view.View}
-no está anexada a una ventana, el sistema
-pone en cola la tarea {@link java.lang.Runnable} con la {@link android.view.View}.
-La tarea {@link java.lang.Runnable} no se ejecuta hasta que la
-{@link android.view.View} esté anexada
-a una ventana. Este comportamiento soluciona los siguientes errores:
-<ul>
- <li>Si una aplicación publicaba una {@link android.view.View} desde un subproceso que no fuera el subproceso de la IU
- de la ventana prevista, la tarea {@link java.lang.Runnable} podía ejecutarse en el subproceso incorrecto.
- </li>
- <li>Si la tarea {@link java.lang.Runnable} se publicaba desde un subproceso que no fuera
- un subproceso de looper, la aplicación podía exponer la terea {@link java.lang.Runnable}.</li>
-</ul>
-</li>
-
-<li>
-Si una aplicación en Android N con el permiso
-{@link android.Manifest.permission#DELETE_PACKAGES DELETE_PACKAGES}
-intentaba borrar un paquete instalado por otra aplicación,
-el sistema solicitaba la confirmación del usuario. En este escenario, las aplicaciones debían esperar recibir el estado
-{@link android.content.pm.PackageInstaller#STATUS_PENDING_USER_ACTION STATUS_PENDING_USER_ACTION}
-al invocar
-{@link android.content.pm.PackageInstaller#uninstall PackageInstaller.uninstall()}.
-</li>
-
-</ul>
-
diff --git a/docs/html-intl/intl/es/preview/download-ota.jd b/docs/html-intl/intl/es/preview/download-ota.jd
deleted file mode 100644
index 2b2bcbf..0000000
--- a/docs/html-intl/intl/es/preview/download-ota.jd
+++ /dev/null
@@ -1,332 +0,0 @@
-page.title=Aplicación de imágenes inalámbricas de dispositivo
-
-@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
- Android Preview SDK, 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 Android SDK Preview (el “Contrato de licencia”).
-
-1. Introducción
-
-1.1 Se le otorga la licencia de la versión Android SDK Preview (denominada “Preview” en el Contrato de licencia y que incluye específicamente los archivos de sistema de Android, las API agrupadas y los archivos de biblioteca de la Preview, 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 realice de la Preview.
-
-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 “Compatible con Android” se refiere a cualquier implementación de Android que (i) cumpla con el documento Definición de compatibilidad de Android, disponible en el sitio web de compatibilidad de Android (http://source.android.com/compatibility) y que puede actualizarse esporádicamente; y (ii) apruebe satisfactoriamente la prueba de Compatibilidad con Android, "CTS” (en inglés, Android Compatibility Test Suite).
-
-1.4 “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 Preview, primero debe aceptar el Contrato de licencia. Si no acepta el Contrato de licencia, no podrá utilizar la Preview.
-
-2.2 Al hacer clic para aceptar o utilizar la Preview, por medio del presente, usted acepta los términos del Contrato de licencia.
-
-2.3 No puede utilizar la Preview ni aceptar el Contrato de licencia si tiene prohibido recibir la Preview 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 Preview.
-
-2.4 Si utilizará la Preview de forma interna, dentro de su empresa 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 usted no posee la autoridad requerida, no podrá aceptar el Contrato de licencia ni utilizar la Preview en representación de su empleador u otra entidad.
-
-3. Licencia de la Preview de Google
-
-3.1 Conforme a los términos de este contrato de licencia, Google le otorga una licencia limitada, con validez mundial, libre de regalías, no asignable, no exclusiva y sin la posibilidad de otorgar una sublicencia, para utilizar la Preview con el único propósito de desarrollar aplicaciones para ejecutar en implementaciones compatibles de Android.
-
-3.2 No puede utilizar esta Preview para desarrollar aplicaciones para otras plataformas (entre las que se incluyen implementaciones incompatibles de Android) o para desarrollar otro SDK. Desde luego, usted tiene la libertad para desarrollar aplicaciones para otras plataformas, entre las que se incluyen implementaciones incompatibles de Android, siempre y cuando esta Preview no se utilice con ese propósito.
-
-3.3 Usted acepta que Google o terceros poseen todos los derechos legales, títulos e intereses en relación con la Preview, incluidos derechos de propiedad intelectual que existan en esta. "Derechos de propiedad intelectual" hace referencia a todos los derechos de la ley de patentes, la ley de derechos de autor, la ley de secreto comercial, la ley de marca comercial y cualquier otro derecho de propiedad. Google se reserva todos los derechos que no se le otorguen expresamente.
-
-3.4 Usted no podrá utilizar la Preview 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 Preview ni de ninguna de sus partes; ni (b) cargar ninguna parte de la Preview 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 Preview con otro software, ni distribuir algún software o dispositivo que incorpore alguna parte de la Preview.
-
-3.5 El uso, la reproducción y la distribución de los componentes de la Preview 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 regla con respecto a dichas licencias de software de código abierto en virtud de todos los derechos otorgados y acepta abstenerte de realizar acción alguna que pudiera poner fin, suspender o violar dichos derechos.
-
-3.6 Acepta que la forma y la naturaleza de la Preview que proporciona Google pueden cambiar sin tener que brindarle aviso previo, y que las versiones futuras de la Preview pueden ser incompatibles con las aplicaciones desarrolladas en versiones anteriores de la Preview. Usted acepta que Google, generalmente a su entera discreción, puede dejar de proporcionarle a usted o a los demás usuarios (de forma permanente o temporal) la Preview (o cualquiera de sus funciones) sin previo aviso.
-
-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 quitará, ocultará o alterará ninguna de las notificaciones de derechos de autor (entre las que se incluyen las notificaciones de copyright y marcas comercias) que pudieran estar anexadas o implícitas en la Preview.
-
-4. Uso que usted realiza de la Preview
-
-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 Preview, lo que incluye los derechos de propiedad intelectual que conlleven esas aplicaciones.
-
-4.2 Usted acepta utilizar la Preview 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 y pertinentes en las jurisdicciones relevantes (entre las que se incluyen 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 Preview 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 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 Preview, usted reconoce que la implementación de algunas características aún se encuentra en desarrollo y que no debe confiar en que la Preview contará con todas las funcionalidades de una versión estable. Usted acepta no distribuir públicamente ni enviar ninguna aplicación que utilice esta Preview, dado que esta Preview ya no se admitirá tras el lanzamiento del Android SDK oficial.
-
-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 pudiera escoger usted mismo, 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 Con el objetivo de poder innovar y mejorar de forma continua la Preview, Google podría recopilar ciertas estadísticas de uso del software, entre las que se incluyen, de forma enunciativa, 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 Preview que se estén utilizando y la manera en que se estén utilizando. Antes de que se recopile esta información, la Preview 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 Preview 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 Preview 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 el permiso específico 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.
-
-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 con base 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 cualquier 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 cuando, y para 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 Preview y de las credenciales de desarrollador pertinentes.
-
-9.3 Google puede, en cualquier momento, rescindir el Contrato de licencia, con causa o sin ella, luego de notificárselo.
-
-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 Preview 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 Android SDK.
-
-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 Preview, 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 PREVIEW ES BAJO SU PROPIO RIESGO Y QUE LA PREVIEW 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 PREVIEW Y DE TODO MATERIAL DESCARGADO U OBTENIDO DE ALGUNA OTRA MANERA MEDIANTE EL USO DE LA PREVIEW 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 otorgadas 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">
-
-<p>
- Esta página cuenta con enlaces a imágenes de dispositivos inalámbricos y describe
- cómo aplicar una actualización inalámbrica a un dispositivo de forma manual. Este procedimiento puede ser útil
- para recuperar dispositivos que hayan recibido actualizaciones inalámbricas por medio del Programa
- Android Beta y no enciendan luego de instalada la aplicación.
-</p>
-
-<h2 id="install-ota">Instalar imágenes inalámbricas</h2>
-
-<p></p>
-
-<p>Para instalar un paquete inalámbrico en un dispositivo sigue estos pasos:</p>
-
-<ol>
- <li>Descargar una imagen de dispositivo inalámbrico de la tabla que verás a continuación.</li>
- <li>Reinicia el dispositivo en modo Recuperación. Para leer más información sobre cómo
- aplicar este modo en dispositivos Nexus, visita la sección
-<a href="https://support.google.com/nexus/answer/4596836">Reset your Nexus
- device to factory settings</a>.
- </li>
- <li>En el dispositivo, selecciona <strong>ADB sideload</strong>.</li>
- <li>Conecta el dispositivo a una computadora con el entorno de desarrollo Android
- cargado y la herramienta Android Debug Bridge (ADB) instalada.</li>
- <li>Ejecuta el comando siguiente:
- <pre>adb sideload <em><ota-package></em></pre>
- </li>
-</ol>
-
-
-
-<h2 id="ota-images">Imágenes inalámbricas de dispositivo</h2>
-
-<table>
- <tr>
- <th scope="col">Dispositivo</th>
- <th scope="col">Descarga/sumas de comprobación</th>
- </tr>
-
- <tr id="bullhead">
- <td>Nexus 5X <br>"bullhead"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >bullhead-ota-npd90g-0a874807.zip</a><br>
- MD5: 4b83b803fac1a6eec13f66d0afc6f46e<br>
- SHA-1: a9920bcc8d475ce322cada097d085448512635e2
- </td>
- </tr>
-
- <tr id="shamu">
- <td>Nexus 6 <br>"shamu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >shamu-ota-npd90g-06f5d23d.zip</a><br>
- MD5: 513570bb3a91878c2d1a5807d2340420<br>
- SHA-1: 2d2f40636c95c132907e6ba0d10b395301e969ed
- </td>
- </tr>
-
- <tr id="angler">
- <td>Nexus 6P <br>"angler"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >angler-ota-npd90g-5baa69c2.zip</a><br>
- MD5: 096fe26c5d50606a424d2f3326c0477b<br>
- SHA-1: 468d2e7aea444505513ddc183c85690c00fab0c1
- </td>
- </tr>
-
- <tr id="volantis">
- <td>Nexus 9 <br>"volantis"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantis-ota-npd90g-c04785e1.zip</a><br>
- MD5: 6aecd3b0b3a839c5ce1ce4d12187b03e<br>
- SHA-1: 31633180635b831e59271a7d904439f278586f49
- </td>
- </tr>
-
- <tr id="volantisg">
- <td>Nexus 9G <br>"volantisg"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantisg-ota-npd90g-c56aa1b0.zip</a><br>
- MD5: 0493fa79763d67bcdde8007299e1888d<br>
- SHA-1: f709daf81968a1b27ed41fe40d42e0d106f3c494
- </td>
- </tr>
-
- <tr id="fugu">
- <td>Nexus Player <br>"fugu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >fugu-ota-npd90g-3a0643ae.zip</a><br>
- MD5: 9c38b6647fe5a4f2965196b7c409f0f7<br>
- SHA-1: 77c6fb05191f0c2ae0956bae18f1c80b2f922f05
- </td>
- </tr>
-
- <tr id="ryu">
- <td>Pixel C <br>"ryu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >ryu-ota-npd90g-ec931914.zip</a><br>
- MD5: 4c6135498ca156a9cdaf443ddfdcb2ba<br>
- SHA-1: 297cc9a204685ef5507ec087fc7edf5b34551ce6
- </td>
- </tr>
-
- <tr id="seed">
- <td>General Mobile 4G (Android One) <br>"seed"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >seed_l8150-ota-npd90g-dcb0662d.zip</a><br>
- MD5: f40ea6314a13ea6dd30d0e68098532a2<br>
- SHA-1: 11af10b621f4480ac63f4e99189d61e1686c0865
- </td>
- </tr>
-
-</table>
-
-
- </div><!-- landing -->
-
-</div><!-- relative wrapper -->
-
-
-
-<script>
- var urlRoot = "http://storage.googleapis.com/androiddevelopers/shareables/preview/ota/";
- 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/download.jd b/docs/html-intl/intl/es/preview/download.jd
deleted file mode 100644
index 6fa9a6a..0000000
--- a/docs/html-intl/intl/es/preview/download.jd
+++ /dev/null
@@ -1,544 +0,0 @@
-page.title=Prueba en un dispositivo
-meta.tags="preview", "nexus","system image"
-page.tags="preview", "androidn"
-page.image=images/cards/card-n-downloads_2x.png
-
-@jd:body
-
-<div style="position:relative; min-height:600px">
-
- <div class="wrap" id="tos" style="position:absolute;display:none;width:inherit;">
-
- <p class="sdk-terms-intro">Antes de descargar e instalar los componentes del
- Android Preview SDK, 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 Android SDK Preview (el “Contrato de licencia”).
-
-1. Introducción
-
-1.1 Se le otorga la licencia de la versión Android SDK Preview (denominada “Preview” en el Contrato de licencia y que incluye específicamente los archivos de sistema de Android, las API agrupadas y los archivos de biblioteca de la Preview, 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 realice de la Preview.
-
-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 “Compatible con Android” se refiere a cualquier implementación de Android que (i) cumpla con el documento Definición de compatibilidad de Android, disponible en el sitio web de compatibilidad de Android (http://source.android.com/compatibility) y que puede actualizarse esporádicamente; y (ii) apruebe satisfactoriamente la prueba de Compatibilidad con Android, "CTS” (en inglés, Android Compatibility Test Suite).
-
-1.4 “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 Preview, primero debe aceptar el Contrato de licencia. Si no acepta el Contrato de licencia, no podrá utilizar la Preview.
-
-2.2 Al hacer clic para aceptar o utilizar la Preview, por medio del presente, usted acepta los términos del Contrato de licencia.
-
-2.3 No puede utilizar la Preview ni aceptar el Contrato de licencia si tiene prohibido recibir la Preview 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 Preview.
-
-2.4 Si utilizará la Preview de forma interna, dentro de su empresa 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 usted no posee la autoridad requerida, no podrá aceptar el Contrato de licencia ni utilizar la Preview en representación de su empleador u otra entidad.
-
-3. Licencia de la Preview de Google
-
-3.1 Conforme a los términos de este contrato de licencia, Google le otorga una licencia limitada, con validez mundial, libre de regalías, no asignable, no exclusiva y sin la posibilidad de otorgar una sublicencia, para utilizar la Preview con el único propósito de desarrollar aplicaciones para ejecutar en implementaciones compatibles de Android.
-
-3.2 No puede utilizar esta Preview para desarrollar aplicaciones para otras plataformas (entre las que se incluyen implementaciones incompatibles de Android) o para desarrollar otro SDK. Desde luego, usted tiene la libertad para desarrollar aplicaciones para otras plataformas, entre las que se incluyen implementaciones incompatibles de Android, siempre y cuando esta Preview no se utilice con ese propósito.
-
-3.3 Usted acepta que Google o terceros poseen todos los derechos legales, títulos e intereses en relación con la Preview, incluidos derechos de propiedad intelectual que existan en esta. "Derechos de propiedad intelectual" hace referencia a todos los derechos de la ley de patentes, la ley de derechos de autor, la ley de secreto comercial, la ley de marca comercial y cualquier otro derecho de propiedad. Google se reserva todos los derechos que no se le otorguen expresamente.
-
-3.4 Usted no podrá utilizar la Preview 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 Preview ni de ninguna de sus partes; ni (b) cargar ninguna parte de la Preview 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 Preview con otro software, ni distribuir algún software o dispositivo que incorpore alguna parte de la Preview.
-
-3.5 El uso, la reproducción y la distribución de los componentes de la Preview 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 regla con respecto a dichas licencias de software de código abierto en virtud de todos los derechos otorgados y acepta abstenerte de realizar acción alguna que pudiera poner fin, suspender o violar dichos derechos.
-
-3.6 Acepta que la forma y la naturaleza de la Preview que proporciona Google pueden cambiar sin tener que brindarle aviso previo, y que las versiones futuras de la Preview pueden ser incompatibles con las aplicaciones desarrolladas en versiones anteriores de la Preview. Usted acepta que Google, generalmente a su entera discreción, puede dejar de proporcionarle a usted o a los demás usuarios (de forma permanente o temporal) la Preview (o cualquiera de sus funciones) sin previo aviso.
-
-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 quitará, ocultará o alterará ninguna de las notificaciones de derechos de autor (entre las que se incluyen las notificaciones de copyright y marcas comercias) que pudieran estar anexadas o implícitas en la Preview.
-
-4. Uso que usted realiza de la Preview
-
-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 Preview, lo que incluye los derechos de propiedad intelectual que conlleven esas aplicaciones.
-
-4.2 Usted acepta utilizar la Preview 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 y pertinentes en las jurisdicciones relevantes (entre las que se incluyen 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 Preview 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 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 Preview, usted reconoce que la implementación de algunas características aún se encuentra en desarrollo y que no debe confiar en que la Preview contará con todas las funcionalidades de una versión estable. Usted acepta no distribuir públicamente ni enviar ninguna aplicación que utilice esta Preview, dado que esta Preview ya no se admitirá tras el lanzamiento del Android SDK oficial.
-
-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 pudiera escoger usted mismo, 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 Con el objetivo de poder innovar y mejorar de forma continua la Preview, Google podría recopilar ciertas estadísticas de uso del software, entre las que se incluyen, de forma enunciativa, 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 Preview que se estén utilizando y la manera en que se estén utilizando. Antes de que se recopile esta información, la Preview 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 Preview 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 Preview 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 el permiso específico 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.
-
-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 con base 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 cualquier 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 cuando, y para 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 Preview y de las credenciales de desarrollador pertinentes.
-
-9.3 Google puede, en cualquier momento, rescindir el Contrato de licencia, con causa o sin ella, luego de notificárselo.
-
-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 Preview 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 Android SDK.
-
-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 Preview, 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 PREVIEW ES BAJO SU PROPIO RIESGO Y QUE LA PREVIEW 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 PREVIEW Y DE TODO MATERIAL DESCARGADO U OBTENIDO DE ALGUNA OTRA MANERA MEDIANTE EL USO DE LA PREVIEW 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 otorgadas 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>En este documento</h2>
- <ol>
- <li><a href="#device-preview">Configurar un dispositivo de hardware</a>
- <ol>
- <li><a href="#ota">Obtener actualizaciones inalámbricas</a></li>
- <li><a href="#flash">Actualizar manualmente un dispositivo</a></li>
- <li><a href="#revertDevice">Desinstalar</a></li>
- </ol>
- </li>
- <li><a href="#setupAVD">Configurar un emulador</a></li>
- </ol>
- </div>
-</div>
-
-<p>
- Para ejecutar y probar tu aplicación en la plataforma nueva necesitas configurar el entorno de ejecución
- de Android N. Puedes llevar a cabo la configuración de las siguientes maneras:
-</p>
-
-<ul>
- <li>Instalar Android N en un dispositivo de hardware compatible o</li>
- <li>Configurar un emulador de Android a través de la ejecución de Android N</li>
-</ul>
-
-<p>
- Si deseas un entorno para realizarle pruebas básicas de compatibilidad a tu aplicación en la
- plataforma nueva, todo lo que necesitas es tu APK actual y un dispositivo de hardware o
- emulador. No necesitas actualizar todo tu entorno de desarrollo
- para realizar pruebas básicas.
-</p>
-
-<p>
- Si deseas modificar tu aplicación para seleccionar como destino Android N o usar las API nuevas de Android N,
- debes configurar un entorno de desarrollo actualizado y que seas compatible con
- Android N. En <a href="{@docRoot}preview/setup-sdk.html">Configuración para el desarrollo de
- Android N</a> se ofrece información detallada.
-</p>
-
-
-<h2 id="device-preview">Configurar un dispositivo de hardware</h2>
-
-<p>
- En N Developer Preview se ofrecen actualizaciones del sistema para una variedad de dispositivos de hardware
-que puedes usar para realizarle pruebas a tu aplicación, desde teléfonos hasta tablets y TV.
-</p>
-
-<p>
- Si tienes acceso a un dispositivo compatible, puedes actualizarlo a una compilación "milestone" de la Developer
- Preview de las siguientes maneras:
-</p>
-
-<ul>
- <li><strong>Registrar el dispositivo en actualizaciones automáticas inalámbricas</strong> a través del
- <a href="https://g.co/androidbeta">Programa Android Beta</a>. Una vez registrado, tu dispositivo recibirá actualizaciones inalámbricas periódicas
- de todas las compilaciones "milestone" en la N Developer Preview. Se recomienda este
- enfoque porque te permite realizar una transición sin inconvenientes desde tu entorno
- actual a través de varios lanzamientos de la N Developer Preview.</li>
- <li><strong>Descargar una imagen de sistema de la Developer Preview y actualizar el dispositivo de manera manual</strong>.
- Las actualizaciones inalámbricas no se proporcionan de manera automática para los dispositivos que actualizas de manera manual, pero
- puedes registrar esos dispositivos en el Programa de Android Beta para obtener actualizaciones inalámbricas. </li>
-</ul>
-
-<h3 id="ota">Registrar el dispositivo en actualizaciones automáticas inalámbricas</h3>
-
-<p>
- Si tienes acceso a un dispositivo compatible (consulta la lista en la tabla de
- descargas), puedes recibir actualizaciones inalámbricas para versiones de la Android Preview
- registrando el dispositivo en el <a href="https://g.co/androidbeta">Programa de Android Beta</a>. Estas actualizaciones
- se descargan de manera automática y actualizarán tu dispositivo como otras actualizaciones
- oficiales del sistema.
-</p>
-
-<p>
- Puedes dar de baja el dispositivo en cualquier momento. El dispositivo recibirá una actualización inalámbrica
- para la versión de producción más reciente de Android que se encuentre disponible para ese dispositivo
- (por ejemplo, Android 6.0 Marshmallow). La actualización requiere un restablecimiento
- completo del dispositivo, por lo que se eliminarán los datos del usuario del dispositivo. No te olvides de crear una <strong>copia
- de seguridad de los datos importantes</strong> antes de dar de baja un dispositivo.
-</p>
-
-<p>
- Para obtener más información y para registrar tu dispositivo, consulta
- el sitio web del <a href="https://g.co/androidbeta">Programa de Android Beta</a> .
-</p>
-
-<p class="note"><strong>Nota:</strong>
- Dar de baja el registro requiere un restablecimiento completo del dispositivo. Crea una copia de seguridad
- de los datos importantes.
-</p>
-
-<h3 id="flash">Actualizar un dispositivo de forma manual</h3>
-
-<p>
- En cualquier momento, puedes descargar la última imagen de sistema de la Developer Preview y
- actualizarla de forma manual en tu dispositivo. Consulta la tabla siguiente para descargar la imagen
- de sistema para tu dispositivo de prueba. La actualización manual de un dispositivo es útil si necesitas
- un control preciso del entorno de prueba o necesitas reinstalar con frecuencia,
- como en pruebas automatizadas.
-</p>
-
-<!-- You can flash by ota or system image --><p>
- El proceso de instalación de una imagen de sistema en un dispositivo <strong>elimina todos los datos del
- dispositivo</strong>, por lo tanto, es recomendable crear una copia de seguridad de los datos.
-</p>
-
-<p>
- Después de que crees una copia de seguridad y descargues la siguiente imagen de sistema que
- se adecua a tu dispositivo, sigue las instrucciones que se describen en <a href="https://developers.google.com/android/nexus/images#instructions">developers.google.com/android</a>
- para actualizar la imagen en tu dispositivo de manera manual.
-</p>
-
-<p>
- Las imágenes de sistema actualizadas de manera manual <strong>no
- reciben actualizaciones inalámbricas de forma automática</strong> para posteriores compilaciones "milestone"
- de la Developer Preview. No te olvides de mantener tu entorno actualizado y actualiza una
- imagen de sistema nueva en cada versión "milestone" de la Developer Preview.
-</p>
-
-<p>
- Si decides que quieres obtener actualizaciones inalámbricas después de actualizar un dispositivo de manera manual,
- lo único que debes hacer es registrar el dispositivo en el <a href="https://g.co/androidbeta">Programa
- de Android Beta</a>. Puedes registrar el dispositivo en cualquier momento para recibir la siguiente actualización
- de la Preview de manera inalámbrica.
-</p>
-
-<table>
- <tr>
- <th scope="col">Dispositivo</th>
- <th scope="col">Descarga/sumas de comprobación</th>
- </tr>
-
- <tr id="bullhead">
- <td>Nexus 5X <br>"bullhead"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >bullhead-npd90g-factory-7a0ca1bc.tgz</a><br>
- MD5: e7a9a3061335c1e0c8be2588f13290af<br>
- SHA-1: 7a0ca1bcfa51bbefde34243603bc79c7dec214a1
- </td>
- </tr>
-
- <tr id="shamu">
- <td>Nexus 6 <br>"shamu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >shamu-npd90g-factory-f7a4e3a9.tgz</a><br>
- MD5: 2fb572ddcfca67bb1d741be97492a9ed<br>
- SHA-1: f7a4e3a96c797827492998e855c8f9efbfc8559a
- </td>
- </tr>
-
- <tr id="angler">
- <td>Nexus 6P <br>"angler"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >angler-npd90g-factory-cd9ac81e.tgz</a><br>
- MD5: 2370c30f3ef1d0684c1de5216a5d90fe<br>
- SHA-1: cd9ac81ec7f4a646ac6054eecbf2ea4c4b89b054
- </td>
- </tr>
-
- <tr id="volantis">
- <td>Nexus 9 <br>"volantis"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantis-npd90g-factory-41b55406.tgz</a><br>
- MD5: cefa78950141da2a7c75e887717e3c8f<br>
- SHA-1: 41b554060263a7ef16e4be8422cbd6caca26e00f
- </td>
- </tr>
-
- <tr id="volantisg">
- <td>Nexus 9G <br>"volantisg"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantisg-npd90g-factory-610492be.tgz</a><br>
- MD5: 2f36dc0d0fab02ab78be500677ec239f<br>
- SHA-1: 610492bedfc4127023040ecb2c89239a78a900ad
- </td>
- </tr>
-
- <tr id="fugu">
- <td>Nexus Player <br>"fugu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >fugu-npd90g-factory-0fe95694.tgz</a><br>
- MD5: f4cb48f919e4c29c631de21416c612e2<br>
- SHA-1: 0fe95694e7bc41e4c3ac0e4438cd77102a0aa8b4
- </td>
- </tr>
-
- <tr id="ryu">
- <td>Pixel C <br>"ryu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >ryu-npd90g-factory-f4da981c.tgz</a><br>
- MD5: d9f0e40b6c20d274831e8a7d285fd887<br>
- SHA-1: f4da981c70576133321e2858e52fe2c990e68a75
- </td>
- </tr>
-
- <tr id="seed">
- <td>General Mobile 4G (Android One) <br>"seed"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >seed_l8150-npd90g-factory-48f59c99.tgz</a><br>
- MD5: 0ed565c509594072822d71c65b48ec8e<br>
- SHA-1: 48f59c99ac43d1cd2f5656a283bb9868581663a8
- </td>
- </tr>
-
-</table>
-
-<h3 id="revertDevice">Desinstalar la Preview de un dispositivo</h3>
-
-<p>
- Si quieres desinstalar la muestra desde un dispositivo, puedes hacerlo de las
- siguientes maneras: </p>
- <ul>
- <li><strong>Obtener una imagen de sistema con las especificaciones de fábrica</strong> y luego actualízala de manera manual
- para el dispositivo.
- <ul>
- <li>Para <strong>los dispositivos Nexus y Pixel C</strong>, consulta
- la página <a href="http://developers.google.com/android/nexus/images">Imágenes de fábrica
- para dispositivos Nexus </a>para descargas. </li>
- <li>Para <strong>otros dispositivos</strong>, comunícate directamente con el fabricante del dispositivo
-. Como alternativa, si el dispositivo es compatible con
- el Programa de Android Beta, puedes registrar el dispositivo en el
- programa y luego darlo de baja (consulta a continuación).</li>
- </ul>
- </li>
- <li><strong>Dar de baja el dispositivo del Programa Android Beta</strong>. Si el
- dispositivo se registra en el <a href="https://g.co/androidbeta">Programa de Android
- Beta</a>, sin importar el dispositivo, puedes darlo de baja desde el programa fácilmente.
- <p>
- El dispositivo recibirá una actualización inalámbricas para la versión de producción más reciente de
- Android que se encuentre disponible para ese dispositivo (por ejemplo, Android 6.0 Marshmallow).
- La actualización requiere un restablecimiento completo del dispositivo, por lo que se eliminarán los datos del usuario del
- dispositivo. No te olvides de crear una <strong>copia de seguridad de los datos importantes</strong> antes
- de dar de baja un dispositivo.
- </p>
- </li>
-</ul>
-
-<p class="note"><strong>Nota:</strong>
- Desinstalar una imagen de sistema de la Developer Preview antes
- del final del programa requiere un restablecimiento completo del dispositivo y elimina todos los datos del usuario
- que se encuentren en él.
-</p>
-
-
-<h2 id="setupAVD">Configurar un emulador</h2>
-
-<p>Para usar el emulador de Android para la ejecución de la Android N Preview, necesitas
-descargar el Android N Preview SDK y crear un dispositivo virtual para el
-emulador.</p>
-
-<p>Primero, descarga el Android N Preview SDK de la siguiente manera (si
-ya la obtuviste durante <a href="{@docRoot}preview/setup-sdk.html">la configuración
-para desarrollar Android N</a>, puedes omitir esta parte):
-
-<ol>
- <li>En Android Studio, abre el cuadro de diálogo de configuración
- (<strong>File > Settings</strong> en Windows y Linux, o
- <strong>Android Studio > Preferences</strong> en Mac). En el panel
- izquierdo, selecciona <strong>Appearance & Behavior >
- System Settings > Android SDK</strong>.
-
- <li>Haz clic en la pestaña <strong>SDK platforms</strong> y luego selecciona la casilla de verificación
- <strong>Android N Preview</strong>.</li>
-
- <li>Haz clic en la pestaña <strong>SDK Tools</strong> y luego selecciona las casillas de verificación
- <strong>Android SDK Build Tools</strong>, <strong>Android SDK
- Platform-Tools</strong> y
- <strong>Android SDK Tools</strong>.
- </li>
-
- <li>Haz clic en <strong>OK</strong> y acepta los contratos
- de licencia para instalar cualquier paquete.
- </li>
-</ol>
-
-<p>Ahora debes tener <strong>Android SDK Built-Tools 24.0 0 rc1</strong>,
-<strong>Platform-Tools 24.0.0 rc1</strong>, y <strong>SDK Tools
-25.0.9</strong>. Si no actualizas las SDK Tools a 25.0.9, luego no podrás
-ejecutar las imágenes de sistema x86_64 para Android N.</p>
-
-
-<p>Ahora crea un dispositivo virtual con la imagen de sistema de Android N:</p>
-
-<ol>
- <li>Abre el Administrador de AVD seleccionando <strong>Tools > Android >
- AVD Manager</strong>.</li>
- <li>Haz clic en <strong>Create Virtual Device</strong>.</li>
- <li>Selecciona un dispositivo como Nexus 5X, Nexus 6P, Nexus 9, o Android TV,
- luego haz clic en <strong>Next</strong>.</li>
- <li>Selecciona la imagen de sistema <strong>N</strong> (con la ABI
- <strong>x86</strong>), luego haz clic en <strong>Next</strong>.
- (De momento, solo las imágenes de sistema x86 son compatibles con el emulador de Android
-para la Android N Preview).
- <li>Completa el resto de la configuración AVD y haz clic en
- <strong>Finish</strong>.</li>
-</ol>
-
-<p>Ahora puedes ejecutar el emulador de Android con el AVD de la Android N Preview.</p>
-
-<p>
-A fin de garantizar la mejor experiencia en el emulador de Android, verifica que estás utilizando
-Android Studio 2.1 o una versión superior, compatible con el <a href="http://tools.android.com/tech-docs/emulator">emulador de Android 2.0</a>,
-cuyo rendimiento es mayor si se lo compara con el emulador utilizado en
-Android Studio 1.5.</p>
-
-<p>Para obtener más información sobre la creación de dispositivos virtuales, consulta <a href="{@docRoot}tools/devices/index.html">Administración de dispositivos virtuales</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/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/afw.jd b/docs/html-intl/intl/es/preview/features/afw.jd
deleted file mode 100644
index 5e550a6..0000000
--- a/docs/html-intl/intl/es/preview/features/afw.jd
+++ /dev/null
@@ -1,552 +0,0 @@
-page.title=Actualizaciones de Android for Work
-page.metaDescription=Nuevas API y funciones de Android for Work en Android N.
-page.keywords="android for work", "android N", "enterprise", "QR code"
-
-@jd:body
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>En este documento</h2>
- <ol>
- <li><a href="#qr">Provisión de código QR
- </a></li>
-
- <li><a href="#sec-challenge">Comprobación de seguridad para perfiles de trabajo
- </a></li>
-
- <li><a href="#suspend">Inhabilitar acceso a aplicaciones
- </a></li>
-
- <li><a href="#toggle-work">Activar o desactivar el modo de trabajo
- </a></li>
-
- <li><a href="#always-on-vpn">VPN siempre visibles
- </a></li>
-
- <li><a href="#contacts">Integración de contactos con el perfil de trabajo
- </a></li>
-
- <li><a href="#remote-reboot">Reinicio remoto
- </a></li>
-
- <li><a href="#disable-roaming">Inhabilitar roaming de datos
- </a></li>
-
- <li><a href="#process-logging">Registros de procesos empresariales
- </a></li>
-
- <li><a href="#bug-reports">Informes de errores remotos
- </a></li>
-
- <li><a href="#remove-cert">Quitar un certificado de cliente
- </a></li>
-
- <li><a href="#grant-cert-on-install">Otorgar acceso a certificado de cliente
- en la instalación</a></li>
-
- <li><a href="#ui-policy">Transparencia de la política de IU del sistema
- </a></li>
-
- <li><a href="#restrictions-mgmt">Mejoras en la administración de restricciones de aplicaciones
- </a></li>
-
- <li><a href="#location-off">Interruptor de desactivación de los servicios de ubicación
- </a></li>
-
- <li><a href="#custom-provisioning">Provisión personalizada
- </a></li>
-
- <li><a href="#multi-wifi-ca">Múltiples certificados de CA de Wi-Fi
- </a></li>
-
- <li><a href="#custom-lock">Mensaje personalizado en la pantalla bloqueada
- </a></li>
-
- <li><a href="#work-connectionservice">ConnectionService del perfil de trabajo
- </a></li>
-
- <li><a href="#lock-wp">Bloquear fondo de pantalla
- </a></li>
-
- <li><a href="#lock-user-icon">Bloquear ícono de usuario
- </a></li>
-
- <li><a href="#health-monitoring">Control del estado del dispositivo
- </a></li>
-
- </ol>
-
- <h2>Consulta también</h2>
- <ul>
- <li><a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referencia sobre N Preview SDK
- </a></li>
- </ul>
- </div>
-</div>
-
-<p>En este documento, se describen las nuevas funciones de Android for Work que se proporcionan en
-Android N.</p>
-
-<h2 id="qr">Provisión de código QR</h2>
-
-<p>
- Android for Work ahora es compatible con la utilización de códigos QR para aprovisionar dispositivos
- de responsabilidad corporativa. Gracias al asistente de configuración, ahora puedes escanear un código QR para aprovisionar
- el dispositivo.
-</p>
-
-<h2 id="sec-challenge">Comprobación de seguridad para perfiles de trabajo</h2>
-
-<p>
- Los propietarios de perfiles pueden solicitar que los usuarios especifiquen una comprobación de seguridad para las aplicaciones
- que se ejecutan en el perfil de trabajo. Dicha comprobación se muestra en el sistema cuando el
- usuario intenta abrir cualquier aplicación de trabajo. Si el usuario completa con éxito la
- comprobación de seguridad, el sistema desbloquea el perfil de trabajo y lo descifra
- si es necesario.
-</p>
-
-<p>
- Si el propietario de un perfil envía una intent {@link
- android.app.admin.DevicePolicyManager#ACTION_SET_NEW_PASSWORD}, el
- sistema le pide al usuario que configure una comprobación de seguridad. El propietario del perfil también puede
- enviar una intent <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code>
- para que el usuario establezca un bloqueo de dispositivo.
-</p>
-
-<p>
- Los propietarios de perfiles pueden elegir establecer las políticas de contraseña para la comprobación del perfil de trabajo de modo que sean
- diferentes de aquellas para las contraseñas de otros dispositivos. Por ejemplo, la
- longitud mínima para la respuesta de comprobación del dispositivo puede ser diferente de la
- longitud necesaria para otras contraseñas. Los propietarios de perfiles establecen las políticas de
- comprobación mediante los métodos {@link android.app.admin.DevicePolicyManager}
- comunes, como por ejemplo, {@link
- android.app.admin.DevicePolicyManager#setPasswordQuality
- setPasswordQuality()} y {@link
- android.app.admin.DevicePolicyManager#setPasswordMinimumLength
- setPasswordMinimumLength()}. El propietario del perfil también puede establecer el bloqueo del dispositivo mediante
- la utilización de la instancia de{@link android.app.admin.DevicePolicyManager} devuelta
- por el nuevo método <code>DevicePolicyManager.getParentProfileInstance()</code>
-. Además, los propietarios de perfiles pueden personalizar la pantalla de credenciales para
- la comprobación de trabajo mediante la utilización de los nuevos métodos de la clase{@link android.app.admin.DevicePolicyManager}
- <code>setOrganizationColor()</code> y
- <code>setOrganizationName()</code>.
-</p>
-
-<p>
- Para obtener detalles sobre los nuevos métodos y constantes, consulta la página de referencia de
- <code>DevicePolicyManager</code> en la <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referencia sobre N Preview SDK</a>.
-</p>
-
-<h2 id="suspend">Inhabilitar acceso a aplicaciones</h2>
-
-<p>
- Los propietarios de perfiles y dispositivos pueden suspender temporariamente el acceso a los paquetes
- mediante una llamada al nuevo método <code>DevicePolicyManager.setPackagesSuspended()</code>
-. Los propietarios pueden utilizar el mismo método para volver a habilitar esos paquetes.
-</p>
-
-<p>
- Mientras un paquete está suspendido, este no puede comenzar actividades, se suprimen las notificaciones al
- paquete y se oculta la entrada de la aplicación en la <a href="{@docRoot}guide/components/recents.html">pantalla de información general</a>.
- Los paquetes suspendidos no aparecen en la <a href="{@docRoot}guide/components/recents.html">pantalla de información general</a> y
- no pueden mostrar diálogos (incluidos avisos y snackbars). Además, no pueden reproducir
- audio ni hacer vibrar el dispositivo.
-</p>
-
-<p>
- Los lanzadores deben aplicar una IU distintiva para las aplicaciones suspendidas a fin de mostrar que las
- aplicaciones no están actualmente disponibles; por ejemplo, el ícono de la aplicación puede aparecer en color
- gris. Los lanzadores pueden averiguar si una aplicación está suspendida llamando al nuevo método
- <code>DevicePolicyManager.getPackageSuspended()</code>.
-</p>
-
-<h2 id="toggle-work">Activar o desactivar el modo de trabajo</h2>
-
-<p>
- En dispositivos de perfil doble, los usuarios pueden activar o desactivar el modo de trabajo. Mientras este último está
- desactivado, el perfil administrado se encuentra inactivo temporariamente. Se inhabilitan
- todas las aplicaciones del perfil de trabajo, la sincronización en segundo plano y las notificaciones, incluida
- la aplicación del propietario del perfil. Mientras el perfil de trabajo está deshabilitado, en el sistema
- se muestra un ícono de estado persistente para recordarles a los usuarios que no pueden iniciar aplicaciones
- de trabajo. El launcher del sistema indica que no se puede acceder a aplicaciones ni widgets
- de trabajo.
-</p>
-
-<h2 id="always-on-vpn">VPN siempre visibles</h2>
-
-<p>
- Los propietarios de dispositivos y perfiles pueden solicitar que las aplicaciones de trabajo siempre se conecten a la red
- a través de una VPN especificada. Si los propietarios establecen este requisito, el
- dispositivo inicia automáticamente esa VPN en el inicio.
-</p>
-
-<p>
- Los propietarios pueden requerir el uso de una VPN llamando al nuevo método
- <code>DevicePolicyManager.setAlwaysOnVpnPackage()</code>. Para averiguar
- si el propietario ha establecido un requisito de VPN, llama al nuevo método
- <code>DevicePolicyManager.GetAlwaysOnVpnPackage()</code>.
-</p>
-
-<p>
- Debido a que los servicios de VPN pueden enlazarse directamente a través del sistema sin interacción con aplicaciones,
- los clientes de VPN deben administrar nuevos puntos de entrada para VPN siempre visibles. Como antes, puedes
- encontrar servicios activos mediante la utilización de un filtro de intent que coincida con la acción
- {@link android.net.VpnService android.net.VpnService}.
-</p>
-
-<p>
- Para configurar manualmente un cliente de VPN que esté siempre visible y que implemente {@link
- android.net.VpnService}, los usuarios deben ir a <strong>Settings > More >
- pantalla VPN</strong>.
-</p>
-
-<h2 id="contacts">Integración de contactos con el perfil de trabajo</h2>
-
-<p>
- Los propietarios de perfiles pueden permitir la búsqueda local y la búsqueda en directorio de los contactos de trabajo
- a partir del usuario principal. Por ejemplo, un usuario puede acceder a contactos personales y laborales del directorio
- desde el teléfono personal o la aplicación de contactos (si
- así lo permite el administrador del perfil).
-</p>
-
-<p>
- Los desarrolladores que aprovechan el proveedor de contactos pueden utilizar la API de contactos empresariales
- para acceder a las entradas del directorio del perfil de trabajo desde el usuario principal si así lo permiten
- las siguientes políticas:
-</p>
-
-<ul>
- <li><code>ContactsContract.Contacts.ENTERPRISE_CONTENT_FILTER_URI</code>
- </li>
-
- <li><code>ContactsContract.Phone.ENTERPRISE_CONTENT_FILTER_URI</code>
- </li>
-
- <li><code>ContactsContract.Email.ENTERPRISE_CONTENT_FILTER_URI</code>
- </li>
-
- <li><code>ContactsContract.Callable.ENTERPRISE_CONTENT_FILTER_URI</code>
- </li>
-
- <li><code>ContactsContract.Directory.ENTERPRISE_CONTENT_URI</code>
- </li>
-
- <li><code>ContactsContract.Directory.isEntepriseDirectoryId()</code>
- </li>
-</ul>
-
-<p>
- Los propietarios de perfiles pueden controlar la visibilidad de los contactos laborales en el usuario
- principal por medio de los nuevos métodos a continuación:
-</p>
-
-<ul>
- <li>
- <code>DevicePolicyManager.setCrossProfileContactsSearchDisabled()</code>
- </li>
-
- <li>
- <code>DevicePolicyManager.getCrossProfileContactsSearchDisabled()</code>
- </li>
-</ul>
-
-<h2 id="remote-reboot">Reinicio remoto</h2>
-
-<p>
- Los propietarios pueden reiniciar sus dispositivos de forma remota. En algunos casos, no se puede acceder al botón de encendido de los dispositivos implementados en
- lugares públicos dentro de recintos. Si se debe
- reiniciar un dispositivo, los administradores pueden hacerlo utilizando el nuevo método
- <code>DevicePolicyManager.reboot()</code>.
-</p>
-
-<h2 id="disable-roaming">Inhabilitar roaming de datos</h2>
-
-<p>
- Los propietarios de dispositivos pueden inhabilitar el roaming de datos mediante la nueva restricción de usuario de {@link
- android.os.UserManager} denominada <code>DISALLOW_DATA_ROAMING</code>.
-</p>
-
-<h2 id="process-logging">Registros de procesos empresariales</h2>
-
-<p>
- Los propietarios de dispositivos pueden identificar actividades sospechosas mediante un rastreo remoto de la actividad del
- dispositivo, incluidos inicios de aplicaciones, actividad adb y desbloqueos de pantalla. Los registros de
- procesos no requieren del consentimiento del usuario. Para recuperar registros, los propietarios de dispositivos habilitan
- los registros de dispositivos mediante <code>DevicePolicyManager.setSecurityLoggingEnabled()</code>.
-</p>
-
-<p>
- Entre los cambios en la API, se incluyen los siguientes:
-</p>
-
-<ul>
-
- <li>
- La nueva clase <code>android.app.admin.SecurityLog</code> y sus
- métodos
- </li>
-
- <li>
- <code>void DevicePolicyManager.setSecurityLoggingEnabled()</code>
- </li>
-
- <li>
- <code>boolean DevicePolicyManager.isSecurityLoggingEnabled()</code>
- </li>
-
- <li>
- <code>List<SecurityEvent>
- DevicePolicyManager.retrieveSecurityLogs()</code>
- </li>
-
- <li>
- <code>List<SecurityEvent>
- DevicePolicyManager.retrievePreRebootSecurityLogs()</code>
- </li>
-
- <li>
- <code>void DeviceAdminReceiver.onSecurityLogsAvailable()</code>
- </li>
-</ul>
-
-<h2 id="bug-reports">Informes de errores remotos</h2>
-
-<p>
- Los propietarios de dispositivos pueden activar y recuperar de forma remota un informe de errores que contenga un
- archivo de descarga sobre el estado del dispositivo, lo que permite llevar a cabo una investigación forense de un
- incidente conocido o un dispositivo afectado. Debido a la naturaleza detallada del informe de errores,
- se requiere el consentimiento del usuario.
-</p>
-
-<p>
- Android N incluye los siguientes agregados de API para ofrecer compatibilidad con esta función. Para obtener
- detalles, consulte la <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referencia sobre N Preview SDK
-</a>.
-</p>
-
-<ul>
- <li>
- <code>DevicePolicyManager.requestBugreport()</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.onBugreportFailed()</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.onBugreportShared()</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.onBugreportSharingDeclined()</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.BUGREPORT_FAILURE_FAILED_COMPLETING</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.BUGREPORT_FAILURE_FILE_NO_LONGER_AVAILABLE</code>
- </li>
-</ul>
-
-<h2 id="remove-cert">Quitar un certificado de cliente</h2>
-
-<p>
- Los propietarios de perfiles y dispositivos ahora pueden quitar certificados de cliente que se
- instalaron a través de {@link android.app.admin.DevicePolicyManager#installKeyPair
- installKeyPair()} llamando al nuevo método
- <code>DevicePolicyManager.removeKeyPair()</code>.
-</p>
-
-<h2 id="grant-cert-on-install">Otorgar acceso a certificado de cliente
- en la instalación</h2>
-
-<p>
- Si un propietario de perfil o dispositivo otorga a una aplicación de terceros la capacidad de
- administrar certificados, dicha aplicación puede acceder por sí sola a los certificados que
- instala sin intervención alguna por parte del propietario.
-</p>
-
-<p>
- La API existente para administrar certificados se extiende para incluir lo siguiente:
-</p>
-
-<ul>
- <li><code>DevicePolicyManager.installKeyPair()</code>
- </li>
-</ul>
-
-<h2 id="ui-policy">Transparencia de la política de IU del sistema</h2>
-
-<p>
- Las políticas que afectan la experiencia del usuario o restringen las configuraciones del usuario se divulgan
- en su totalidad al usuario, y los propietarios de perfiles y dispositivos pueden atribuir la
- política al departamento de TI de la empresa. Además de un mensaje “Action
- not allowed” consistente en Settings, los administradores de TI pueden configurar un
- mensaje de soporte específico para la organización en la configuración del dispositivo con los nuevos
- métodos{@link android.app.admin.DevicePolicyManager} a continuación:
-</p>
-
-<ul>
- <li>
- <code>DevicePolicyManager.setShortSupportMessage()</code>
- </li>
-
- <li>
- <code>DevicePolicyManager.setLongSupportMessage()</code>
- </li>
-</ul>
-
-<h2 id="restrictions-mgmt">Mejoras en la administración de las restricciones de aplicaciones</h2>
-
-<p>
- El propietario del dispositivo o perfil puede habilitar otra aplicación para que administre las restricciones de
- aplicaciones mediante el nuevo método
- <code>DevicePolicyManager.setApplicationRestrictionsManagingPackage()</code>
-. La aplicación nominada puede controlar si se otorgó este permiso
- llamando a
- <code>DevicePolicyManager.isCallerApplicationRestrictionsManagingPackage()</code>.
-</p>
-
-<p>
- Una aplicación nominada para administrar restricciones de aplicaciones puede llamar a {@link
- android.app.admin.DevicePolicyManager#setApplicationRestrictions
- setApplicationRestrictions()} y {@link
- android.app.admin.DevicePolicyManager#getApplicationRestrictions
- getApplicationRestrictions()} para cualquier paquete dentro de ese usuario o perfil.
-</p>
-
-<h2 id="location-off">Interruptor de desactivación de los servicios de ubicación</h2>
-
-<p>
- Los usuarios pueden inhabilitar los permisos de ubicación para las aplicaciones de trabajo mientras continúan
- accediendo a información sobre ubicación en sus aplicaciones personales. Mediante un interruptor independiente de acceso
- a información de ubicación en Location Settings, los usuarios pueden denegar las actualizaciones de ubicación o
- las consultas de última ubicación para las aplicaciones que se ejecutan en el perfil de trabajo.
-</p>
-
-<p>
- Gracias al interruptor de desactivación de servicios de ubicación de nivel superior, se inhabilita el acceso a este tipo de información para
- el perfil principal y el perfil administrado.
-</p>
-
-<h2 id="custom-provisioning">Aprovisionamiento personalizado</h2>
-
-<p>
- En una aplicación se pueden personalizar los flujos de provisión
- del propietario del perfil y del propietario del dispositivo con logos y colores corporativos.
-</p>
-
-<dl>
- <dt>
- <code>DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR</code>
- </dt>
-
- <dd>
- Permite personalizar el color del flujo.
- </dd>
-
- <dt>
- <code>DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI</code>
- </dt>
-
- <dd>
- Permite personalizar el flujo con un logo corporativo.
- </dd>
-</dl>
-
-<h2 id="multi-wifi-ca">Múltiples certificados de CA de Wi-Fi</h2>
-
-<p>
- Los propietarios de perfiles y dispositivos pueden configurar múltiples certificados de CA para una configuración
- de Wi-Fi determinada. Cuando las redes de Wi-Fi corporativas tienen CA independientes para
- diferentes puntos de acceso con el mismo SSID, los administradores de TI pueden incluir todas las
- CA relevantes en la configuración Wi-Fi utilizando el nuevo método
- <code>setCaCertificates()</code>.
-</p>
-
-<p>
- Las API que se agregaron son las siguientes:
-</p>
-
-<ul>
- <li>
- <code>WifiEnterpriseConfig.setCaCertificates()</code>
- </li>
-
- <li>
- <code>WifiEnterpriseConfig.getCaCertificates()</code>
- </li>
-</ul>
-
-<h2 id="custom-lock">Mensaje personalizado en la pantalla bloqueada</h2>
-
-<p>
- Los propietarios de dispositivos pueden proporcionar información de propietario para que aparezca en la pantalla bloqueada.
- Esta información prevalece sobre el mensaje de la pantalla bloqueada del usuario (si se configuró
- uno). Los nuevos métodos {@link android.app.admin.DevicePolicyManager} son los siguientes:
-</p>
-
-<ul>
- <li>
- <code>setDeviceOwnerLockScreenInfo()</code>
- </li>
-
- <li>
- <code>getDeviceOwnerLockScreenInfo()</code>
- </li>
-</ul>
-
-<h2 id="work-connectionservice">ConnectionService del perfil de trabajo</h2>
-
-<p>
- Los propietarios de perfiles pueden especificar una aplicación de teléfono de trabajo que utilice un
- {@link android.telecom.ConnectionService} específico del trabajo para el backend
- de llamadas (cuentas de llamadas). El teléfono de trabajo lleva únicamente un registro de llamadas de trabajo
- y depende solo de contactos laborales. Los usuarios tienen una experiencia de IU
- de llamada entrante consistente independientemente de la aplicación de marcación. Las llamadas laborales que ingresan en las
- cuentas de llamadas de trabajo se distinguen de las llamadas personales que ingresan en
- las cuentas de llamadas personales.
-</p>
-
-<p>
- El teléfono debe controlar el nuevo marcador
- <code>android.telecom.Call.PROPERTY_WORK_CALL</code> para determinar si una llamada es
- de tipo laboral. Si se trata de una llamada laboral, el teléfono debe indicarlo
-, por ejemplo, mediante el agregado de una insignia de trabajo.
-</p>
-
-<h2 id="lock-wp">Bloquear fondo de pantalla</h2>
-
-<p>
- Mediante una nueva restricción de usuario (<code>DISALLOW_SET_WALLPAPER</code>), se evita que el
- usuario modifique el fondo de pantalla. Los propietarios de dispositivos o perfiles aún pueden
- modificar el fondo de pantalla. Sin embargo, solo pueden hacerlo para el
- usuario o perfil que controlan. Por ejemplo, el propietario de un perfil no puede modificar el
- fondo de pantalla del usuario primario,
- pero sí pueden hacerlo el propietario de un dispositivo o el propietario de un perfil en el perfil principal. El propietario de un dispositivo o perfil que desea modificar el
- fondo de pantalla debe controlar si el usuario o perfil que administra posee un
- fondo de pantalla ({@link android.app.WallpaperManager#isWallpaperSupported
- isWallpaperSupported()}) y si puede modificarlo (con el
- nuevo método <code>WallpaperManager.isWallpaperSettingAllowed()</code>).
-</p>
-
-<h2 id="lock-user-icon">Bloquear ícono de usuario</h2>
-
-<p>
- Mediante una nueva restricción de usuario (<code>DISALLOW_SET_USER_ICON</code>), se evita que el
- usuario modifique el ícono de usuario. El propietario del dispositivo o del perfil del usuario
- aún puede modificar el ícono. Sin embargo, un propietario de perfil solo puede modificar el ícono
- de usuario del perfil que controla.
-</p>
-
-<h2 id="health-monitoring">Control del estado del dispositivo</h2>
-
-<p>
- El propietario de un perfil o dispositivo puede usar la nueva interfaz
- <code>HardwarePropertiesManager</code> para recuperar información
- sobre el estado del dispositivo, como por ejemplo, las temperaturas de CPU o GPU y el uso de la CPU. La nueva interfaz
- de control es especialmente útil para controlar dispositivos sin supervisión
- que se ejecutan en una ubicación remota.
-</p>
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/data-saver.jd b/docs/html-intl/intl/es/preview/features/data-saver.jd
deleted file mode 100644
index 458e662..0000000
--- a/docs/html-intl/intl/es/preview/features/data-saver.jd
+++ /dev/null
@@ -1,234 +0,0 @@
-page.title=Ahorro de datos
-metaDescription=User-enabled data usage optimization.
-page.keywords="android N", "data usage", "metered network"
-page.image=images/cards/card-nyc_2x.jpg
-@jd:body
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>
- En este documento
- </h2>
-
- <ol>
- <li>
- <a href="#status">Verificación de las preferencias de ahorro de datos</a>
- <ol>
- <li>
- <a href="#request-whitelist">Solicitud de permisos de lista blanca</a>
- </li>
- </ol>
- </li>
-
- <li>
- <a href="#monitor-changes">Control de cambios en las preferencias
- de ahorro de datos</a>
- </li>
-
- <li>
- <a href="#testing">Pruebas con comandos de Android Debug Bridge</a>
- </li>
- </ol>
- </div>
-</div>
-
-<p>
- Durante la vida útil de un smartphone, el costo de un plan de datos móviles puede
- superar fácilmente el costo del propio dispositivo. En la versión N Developer Preview, los usuarios pueden
- habilitar el ahorro de datos en todo el dispositivo a fin de reducir el uso de datos, ya sea con
- servicio de itinerancia, cerca del final del ciclo de facturación o con un pequeño paquete de datos prepago.
-</p>
-
-<p>
- Cuando un usuario habilita el ahorro de datos en <strong>Settings</strong> y el dispositivo está conectado
- a una red de uso medido, el sistema bloquea el uso de datos en segundo plano y envía señales
- a las aplicaciones para que utilicen menos datos en primer plano siempre que sea posible. Los usuarios pueden
- incluir aplicaciones específicas en la lista blanca para permitir el uso de datos medidos en segundo plano, incluso cuando está activado el ahorro
- de datos.
-</p>
-
-<p>
- La N Developer Preview extiende la API {@link android.net.ConnectivityManager}
- para que las aplicaciones puedan <a href="#status">recuperar las preferencias de
- ahorro de datos del usuario</a> y <a href="#monitor-changes">controlar
- los cambios en las preferencias</a>. Se considera una buena práctica que las aplicaciones verifiquen si el
- usuario habilitó el ahorro de datos y se esfuercen por reducir el uso de datos en primer
- y segundo plano.
-</p>
-
-<h2 id="status">
- Verificación de las preferencias de ahorro de datos
-</h2>
-
-<p>
- En la N Developer Preview, las aplicaciones pueden utilizar la API {@link
- android.net.ConnectivityManager} para determinar qué restricciones
- de uso de datos se aplican. Mediante el método {@code getRestrictBackgroundStatus()}
-, se devuelve uno de los siguientes valores:
-</p>
-
-<dl>
- <dt>
- {@code RESTRICT_BACKGROUND_STATUS_DISABLED}
- </dt>
-
- <dd>
- El ahorro de datos está inhabilitado.
- </dd>
-
- <dt>
- {@code RESTRICT_BACKGROUND_STATUS_ENABLED}
- </dt>
-
- <dd>
- El usuario habilitó el ahorro de datos para esta aplicación. Las aplicaciones deben esforzarse por reducir
- el uso de datos en primer plano y manejar correctamente las restricciones para
- el uso de datos en segundo plano.
- </dd>
-
- <dt>
- {@code RESTRICT_BACKGROUND_STATUS_WHITELISTED}
- </dt>
-
- <dd>
- El usuario habilitó el ahorro de datos, pero la aplicación se encuentra en la lista blanca. Las aplicaciones aún deben
- esforzarse por reducir el uso de datos en primer y segundo plano.
- </dd>
-</dl>
-
-<p>
- Se considera una buena práctica limitar el uso de datos siempre que el dispositivo esté
- conectado a una red de uso medido, incluso si el ahorro de datos está deshabilitado o la aplicación
- se encuentra en la lista blanca. El siguiente código de muestra utiliza {@link
- android.net.ConnectivityManager#isActiveNetworkMetered
- ConnectivityManager.isActiveNetworkMetered()} y {@code
- ConnectivityManager.getRestrictBackgroundStatus()} para determinar la cantidad de datos
- que la aplicación debe utilizar:
-</p>
-
-<pre>
-ConnectivityManager connMgr = (ConnectivityManager)
- getSystemService(Context.CONNECTIVITY_SERVICE);
-// Checks if the device is on a metered network
-if (connMgr.isActiveNetworkMetered()) {
- // Checks user’s Data Saver settings.
- switch (connMgr.getRestrictBackgroundStatus()) {
- case RESTRICT_BACKGROUND_STATUS_ENABLED:
- // Background data usage is blocked for this app. Wherever possible,
- // the app should also use less data in the foreground.
-
- case RESTRICT_BACKGROUND_STATUS_WHITELISTED:
- // The app is whitelisted. Wherever possible,
- // the app should use less data in the foreground and background.
-
- case RESTRICT_BACKGROUND_STATUS_DISABLED:
- // Data Saver is disabled. Since the device is connected to a
- // metered network, the app should use less data wherever possible.
- }
-} else {
- // The device is not on a metered network.
- // Use data as required to perform syncs, downloads, and updates.
-}
-</pre>
-
-<h3 id="request-whitelist">
- Solicitud de permisos de lista blanca
-</h3>
-
-<p>
- Si la aplicación necesita utilizar datos en segundo plano, esta puede solicitar permisos de
- lista blanca mediante el envío de una intent
- <code>Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS</code>
- que contenga un URI del nombre de paquete de la aplicación, como por ejemplo,
- <code>package:MY_APP_ID</code>.
-</p>
-
-<p>
- Mediante el envío de la intent y el URI, se inicia la aplicación <strong>Settings</strong> y
- se muestra la configuración de uso de datos para la aplicación. El usuario luego puede decidir si
- habilita los datos en segundo plano para la aplicación. Antes de enviar esta intent, resulta
- buena práctica consultarle primero al usuario acerca de si desea iniciar la aplicación
- <strong>Settings</strong> con el objetivo de habilitar el uso de datos
- en segundo plano.
-</p>
-
-<h2 id="monitor-changes">
- Control de cambios en las preferencias de ahorro de datos
-</h2>
-
-<p>
- Las aplicaciones pueden controlar los cambios en las preferencias de ahorro de datos mediante la creación de un {@link
- android.content.BroadcastReceiver} para escuchar {@code
- ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED} y mediante un registro
- dinámico del receptor con {@link android.content.Context#registerReceiver
- Context.registerReceiver()}. Cuando una aplicación recibe esta transmisión, debe
- <a href="#status">verificar si las nuevas preferencias de ahorro de datos afectan los
- permisos; para ello,</a> la aplicación debe llamar a {@code
- ConnectivityManager.getRestrictBackgroundStatus()}.
-</p>
-
-<p class="note">
- <strong>Nota:</strong> El sistema únicamente envía esta transmisión a las aplicaciones que
- se registran dinámicamente para recibirla con {@link
- android.content.Context#registerReceiver Context.registerReceiver()}. Las aplicaciones
- que en su manifiesto registran que la reciben no la
- recibirán.
-</p>
-
-<h2 id="testing">
- Pruebas con comandos de Android Debug Bridge
-</h2>
-
-<a href="{@docRoot}tools/help/adb.html">Android Debug Bridge (ADB)</a>
-ofrece algunos comandos que puedes utilizar para verificar y configurar los permisos
-de red:
-
-<dl>
- <dt>
- <code>$ adb shell dumpsys netpolicy</code>
- </dt>
-
- <dd>
- Se genera un informe en el que se incluyen la configuración global actual de restricciones de red
- en segundo plano, los UID de paquetes que se encuentran actualmente en una lista blanca y los permisos
- de red de otros paquetes conocidos.
- </dd>
-
- <dt>
- <code>$ adb shell cmd netpolicy</code>
- </dt>
-
- <dd>
- Se muestra una lista completa de los comandos del administrador de políticas de red (políticas de red).
- </dd>
-
- <dt>
- <code>$ adb shell cmd netpolicy set restrict-background
- <boolean></code>
- </dt>
-
- <dd>
- Se habilita o deshabilita el modo de ahorro de datos cuando se asignan los valores <code>true</code> o
- <code>false</code>, respectivamente.
- </dd>
-
- <dt>
- <code>$ adb shell cmd netpolicy add restrict-background-whitelist
- <UID></code>
- </dt>
-
- <dd>
- Se agrega el UID del paquete específico a la lista blanca para permitir el uso de datos
- medidos en segundo plano.
- </dd>
-
- <dt>
- <code>$ adb shell cmd netpolicy remove restrict-background-whitelist
- <UID></code>
- </dt>
-
- <dd>
- Se quita el UID del paquete específico de la lista blanca para bloquear el uso de datos
- medidos en segundo plano mientras el ahorro de datos está habilitado.
- </dd>
-</dl>
\ No newline at end of file
diff --git a/docs/html-intl/intl/es/preview/features/direct-boot.jd b/docs/html-intl/intl/es/preview/features/direct-boot.jd
deleted file mode 100644
index e1d99e9..0000000
--- a/docs/html-intl/intl/es/preview/features/direct-boot.jd
+++ /dev/null
@@ -1,181 +0,0 @@
-page.title=Inicio directo
-page.keywords=preview,sdk,direct boot
-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="#run">Solicitar acceso para ejecutar durante el inicio directo</a></li>
- <li><a href="#access">Acceder al almacenamiento encriptado por dispositivo</a></li>
- <li><a href="#notification">Recibir notificaciones sobre el desbloqueo del usuario</a></li>
- <li><a href="#migrating">Migrar datos existentes</a></li>
- <li><a href="#testing">Probar la aplicación con reconocimiento de encriptación</a></li>
- </ol>
-</div>
-</div>
-
-<p>Android N se ejecuta en un modo <i>de inicio directo</i> seguro
-cuando el dispositivo se enciende pero el usuario no lo ha
-desbloqueado. Para permitir esto, el sistema brinda dos ubicaciones de almacenamiento para los datos:</p>
-
-<ul>
-<li><i>Almacenamiento encriptado por credencial: </i>es la ubicación de almacenamiento predeterminada
-y solo está disponible después de que el usuario desbloquea el dispositivo.</li>
-<li><i>Almacenamiento encriptado por dispositivo: </i>es una ubicación de almacenamiento que está disponible tanto
-durante el modo de inicio directo como después de que el usuario desbloquea el dispositivo.</li>
-</ul>
-
-<p>De forma predeterminada, las aplicaciones no se ejecutan durante el modo de inicio directo.
-Si necesitas que tu aplicación se ejecute durante el modo de inicio directo, puedes registrar
-los componentes de la aplicación que deberían ejecutarse durante este modo. Algunos casos comunes de
-aplicaciones que necesitan ejecutarse durante el modo de inicio directo incluyen los siguientes:</p>
-
-<ul>
-<li>aplicaciones que tienen notificaciones programadas, como aplicaciones
-de alarma;</li>
-<li>aplicaciones que generan notificaciones de usuario importantes, como aplicaciones de mensajes SMS;</li>
-<li>aplicaciones que brindan servicios de accesibilidad, como Talkback.</li>
-</ul>
-
-<p>Si necesitas que tu aplicación acceda a datos mientras se ejecuta el modo de inicio directo, usa
-el almacenamiento encriptado por dispositivo. Este tipo de almacenamiento contiene datos
-encriptados con una clave que solo está disponible luego de que el dispositivo haya realizado un inicio
-verificado correctamente.</p>
-
-<p>Para los datos que se deben cifrar con una clave asociada con credenciales del
-usuario, como un PIN o una contraseña, usa el almacenamiento encriptado por credencial.
-Este tipo de almacenamiento solo está disponible luego de que el usuario haya desbloqueado
-correctamente el dispositivo y hasta que el usuario reinicie nuevamente el dispositivo. Si el
-usuario habilita el bloqueo de pantalla luego de desbloquear el dispositivo, esto no bloquea
-el almacenamiento encriptado por credencial.</p>
-
-<h2 id="run">Solicitar acceso para ejecutar durante el inicio directo</h2>
-
-<p>Debes registrar los componentes de las aplicaciones con el sistema antes de que estas puedan
-ejecutarse durante el modo de inicio directo o acceder al almacenamiento encriptado por
-dispositivo. Para registrar una aplicación en el sistema, debes marcar los componentes como
-<i>"con reconocimiento de encriptación"</i>. Para marcar tu dispositivo como "con reconocimiento de encriptación", configura el atributo
-<code>android:directBootAware</code> como verdadero en el manifiesto.<p>
-
-<p>Los componentes con reconocimiento de encriptación pueden registrarse para recibir un mensaje de transmisión
-<code>LOCKED_BOOT_COMPLETED</code> del
- sistema cuando el dispositivo se haya reiniciado. En este momento, el almacenamiento
-encriptado por dispositivo está disponible, y el componente puede ejecutar tareas que se deben
-ejecutar durante el modo de inicio directo, como disparar una alarma programada.</p>
-
-<p>El siguiente fragmento de código es un ejemplo de cómo registrar un
-{@link android.content.BroadcastReceiver} como reconocimiento de encriptación y de cómo agregar un
-filtro de intents para <code>LOCKED_BOOT_COMPLETED</code> en el manifiesto de la aplicación:</p>
-
-<pre>
-<receiver
- android:directBootAware="true" >
- ...
- <intent-filter>
- <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
- </intent-filter>
-</receiver>
-</pre>
-
-<p>Una vez que el usuario haya desbloqueado el dispositivo, todos los componentes podrán acceder tanto al
-almacenamiento encriptado por dispositivo como al almacenamiento cifrado por credencial.</p>
-
-<h2 id="access">Acceder al almacenamiento encriptado por dispositivo</h2>
-
-<p>Para acceder al almacenamiento encriptado por dispositivo, crea una segunda
-instancia de {@link android.content.Context} llamando a
-<code>Context.createDeviceProtectedStorageContext()</code>. Todas las llamadas
-de API de almacenamiento que se hacen usando este contexto acceden al almacenamiento encriptado por dispositivo. El siguiente
-ejemplo accede al almacenamiento encriptado por dispositivo y abre un archivo de datos de la aplicación
-existente:</p>
-
-<pre>
-Context directBootContext = appContext.createDeviceProtectedStorageContext();
-// Access appDataFilename that lives in device encrypted storage
-FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
-// Use inStream to read content...
-</pre>
-
-<p>Solo debes usar el almacenamiento encriptado por dispositivo para
-información que debe ser accesible durante el modo de inicio directo.
-No uses este tipo de almacenamiento como un almacenamiento encriptado de propósito general.
-Para información privada del usuario o datos encriptados que no son necesarios durante
-el modo de inicio directo, usa el almacenamiento encriptado por credencial.</p>
-
-<h2 id="notification">Recibir notificaciones sobre el desbloqueo del usuario</h2>
-
-<p>Una vez que el usuario desbloquea el dispositivo después de reiniciarlo, la aplicación puede cambiar y acceder
-al almacenamiento encriptado por credencial y usar servicios del sistema comunes que
-dependen de credenciales de usuario.</p>
-
-<p>Para recibir una notificación cuando el usuario desbloquea el dispositivo luego de reiniciarlo,
-registra un {@link android.content.BroadcastReceiver} de un componente en ejecución
-para que escuche el mensaje <code>ACTION_USER_UNLOCKED</code>. O puedes
-recibir el mensaje existente {@link android.content.Intent#ACTION_BOOT_COMPLETED
-ACTION_BOOT_COMPLETED}, que ahora indica que el dispositivo se ha iniciado y
-que el usuario ha desbloqueado el dispositivo.</p>
-
-<p>Puedes consultar directamente si el usuario ha desbloqueado el dispositivo llamando a
-<code>UserManager.isUserUnlocked()</code>.</p>
-
-<h2 id="migrating">Migrar datos existentes</h2>
-
-<p>Si un usuario actualiza el dispositivo para usar el modo de inicio directo, es posible que haya
-datos existentes que se deban migrar al almacenamiento encriptado por dispositivo. Usa
-<code>Context.moveSharedPreferencesFrom()</code> y
-<code>Context.moveDatabaseFrom()</code> para migrar los datos de preferencia y de base de datos
-del almacenamiento encriptado por credencial al almacenamiento encriptado por dispositivo.</p>
-
-<p>Debes tener cuidado cuando decidas qué datos migrar entre
-estos dos tipos de almacenamiento. No deberías migrar
-información de usuario privada, como contraseñas o tokens de autorización, al
- almacenamiento encriptado por dispositivo. En algunos casos, es posible que debas gestionar
-conjuntos separados de datos en ambos tipos de almacenamiento encriptado.</p>
-
-<h2 id="testing">Probar la aplicación con reconocimiento de encriptación</h2>
-
-<p>Prueba la aplicación con reconocimiento de encriptación usando el nuevo modo de inicio directo. Hay dos
-maneras de habilitar el inicio directo.</p>
-
-<p class="caution"><strong>Advertencia:</strong> Habilitar el inicio directo
-borrará todos los datos de usuario del dispositivo.</p>
-
-<p>Para los dispositivos compatibles que tienen Android N instalado, habilita
-el inicio directo mediante una de las siguientes opciones:</p>
-
-<ul>
-<li>En el dispositivo, habilita las <b>Developer options</b> si no lo haz hecho aún
-yendo a <b>Settings > About phone</b> y presionando <b>Build number</b>
-siete veces. Una vez que aparezca la pantalla Developer options, dirígete a
-<b>Settings > Developer options</b> y selecciona
-<b>Convert to file encryption</b>.</li>
-<li>Usa los siguientes comandos shell ADB para habilitar el modo de inicio directo:
-<pre class="no-pretty-print">
-$ adb reboot-bootloader
-$ fastboot --wipe-and-use-fbe
-</pre>
-</li>
-</ul>
-
-<p>También está disponible un modo de inicio directo emulado en caso de que debas cambiar
-de modo en los dispositivos de prueba. El modo emulado solo debería usarse durante
-el desarrollo, y puede provocar la pérdida de datos. Para habilitar el modo de inicio directo emulado,
-debes establecer un patrón de bloqueo en el dispositivo, elegir "No thanks" si te pregunta si deseas un
-inicio seguro cuando estás estableciendo el patrón de bloqueo y, luego, usar el
-siguiente comando shell ADB:</p>
-
-<pre class="no-pretty-print">
-$ adb shell sm set-emulate-fbe true
-</pre>
-
-<p>Para deshabilitar el modo de inicio directo emulado, usa el siguiente comando:</p>
-
-<pre class="no-pretty-print">
-$ adb shell sm set-emulate-fbe false
-</pre>
-
-<p>Usar estos comandos provoca el reinicio del dispositivo.</p>
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/multi-window.jd b/docs/html-intl/intl/es/preview/features/multi-window.jd
deleted file mode 100644
index 441e06a..0000000
--- a/docs/html-intl/intl/es/preview/features/multi-window.jd
+++ /dev/null
@@ -1,589 +0,0 @@
-page.title=Compatibilidad con ventanas múltiples
-page.metaDescription=Nueva compatibilidad en Android N para mostrar más de una aplicación a la vez.
-page.keywords="multi-window", "android N", "split screen", "free-form"
-
-@jd:body
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>En este documento</h2>
- <ol>
- <li><a href="#overview">Información general</a></li>
- <li><a href="#lifecycle">Ciclo de vida en modo de ventanas múltiples</a></li>
- <li><a href="#configuring">Configuración de tu aplicación para el modo de
- ventanas múltiples</a></li>
- <li><a href="#running">Ejecución de tu aplicación en modo de ventanas múltiples</a></li>
- <li><a href="#testing">Prueba de la compatibilidad de tu aplicación con el uso de ventanas múltiples</a></li>
- </ol>
- <h2>Consulta también</h2>
- <ol>
- <li><a class="external-link" href="https://github.com/googlesamples/android-MultiWindowPlayground">Aplicación de ejemplo para la
- prueba de ventanas múltiples</a></li>
- <li><a class="external-link" href="https://medium.com/google-developers/5-tips-for-preparing-for-multi-window-in-android-n-7bed803dda64">Cinco tips para prepararse para ventanas múltiples en Android N</a></li>
- </ol>
- </div>
-</div>
-
-<p>
- Android N agrega compatibilidad con la visualización de más de una aplicación
- a la vez. En dispositivos portátiles, se pueden ejecutar dos aplicaciones una al lado de la otra o
- una por encima de la otra en modo de <em>pantalla dividida</em>. En dispositivos de TV, las aplicaciones pueden
- usar el modo <em>picture-in-picture</em> para continuar la reproducción de video mientras los usuarios
- interactúan con otra aplicación.
-</p>
-
-<p>
- Si compilas tu aplicación con el N Preview SDK, puedes configurar la manera en que tu aplicación
- administra la visualización de ventanas múltiples. Por ejemplo, puedes especificar las dimensiones
- mínimas permitidas de tu actividad. También puedes inhabilitar la visualización de ventanas múltiples para
- tu aplicación asegurándote de que el sistema solo muestre tu aplicación en modo de
- pantalla completa.
-</p>
-
-<h2 id="overview">Información general</h2>
-
-<p>
- Android N permite que varias aplicaciones compartan la pantalla al mismo tiempo. Por
- ejemplo, un usuario podría dividir la pantalla y ver una página web a la izquierda
- mientras escribe un correo electrónico a la derecha. La experiencia de usuario depende
- del dispositivo:
-</p>
-
-<ul>
- <li>Los dispositivos portátiles con Android N ofrecen modo de
- pantalla dividida. En este modo, el sistema ocupa la pantalla con dos aplicaciones y las muestra
- una al lado de la otra o una encima de la otra. El usuario puede arrastrar la línea que divide
- las dos aplicaciones para visualizar una más grande que la otra.
- </li>
-
- <li>En dispositivos Nexus Player con Android N, las aplicaciones pueden ubicarse automáticamente
- en <a href="picture-in-picture.html">modo Picture-in-picture</a>, lo que les permite
- continuar mostrando contenido mientras el usuario explora o interactúa con
- otras aplicaciones.
- </li>
-
- <li>Los fabricantes de dispositivos más grandes pueden optar por habilitar el modo
- de forma libre, en el que el usuario puede modificar libremente el tamaño de cada actividad. Si el
- fabricante habilita está función, el dispositivo ofrecerá modo de forma libre además
- del modo de pantalla dividida.
- </li>
-</ul>
-
-<img src="{@docRoot}preview/images/mw-splitscreen.png" alt="" width="650" srcset="{@docRoot}preview/images/mw-splitscreen.png 1x,
- {@docRoot}preview/images/mw-splitscreen_2x.png 2x," id="img-split-screen" />
-<p class="img-caption">
- <strong>Figura 1:</strong> Dos aplicaciones ejecutándose una al lado de la otra en modo de pantalla dividida.
-</p>
-
-<p>
- El usuario puede cambiar a modo de ventanas múltiples de la siguiente manera:
-</p>
-
-<ul>
- <li>Si el usuario abre la <a href="{@docRoot}guide/components/recents.html">pantalla
- Overview</a> y presiona durante un momento el
- título de una actividad, puede arrastrar esa actividad a una parte resaltada de la
- pantalla para llevarla a modo de ventanas múltiples.
- </li>
-
- <li>Si el usuario presiona durante un momento el botón Overview, el dispositivo coloca
- la actividad actual en modo de ventanas múltiples y abre la pantalla Overview para
- permitirle al usuario seleccionar otra actividad para compartir la pantalla.
- </li>
-</ul>
-
-<p>
- Los usuarios pueden <a href="{@docRoot}guide/topics/ui/drag-drop.html">arrastrar y
- soltar</a> datos de una actividad a otra mientras las actividades comparten
- la pantalla. (Antes, los usuarios solo podían arrastrar y soltar datos dentro de una sola
- actividad).
-</p>
-
-<h2 id="lifecycle">Ciclo de vida en modo de ventanas múltiples</h2>
-
-<p>
- El modo de ventanas múltiples no cambia el <a href="{@docRoot}training/basics/activity-lifecycle/index.html">ciclo de vida
- de la actividad</a>.
-</p>
-
-<p>
- En modo de ventanas múltiples, solo la actividad con la que el usuario interactuó más recientemente
- está activa en un momento determinado. Esa actividad se considera la <em>principal</em>.
- Todas las demás actividades están pausadas, aunque estén visibles.
- No obstante, el sistema les da a esas actividades pausadas pero visibles una prioridad más alta
- que las actividades que no están visibles. Si el usuario interactúa con una de las
- actividades pausadas, se reanuda esa actividad y se pausa la actividad que antes
- era la principal.
-</p>
-
-<p class="note">
- <strong>Nota:</strong> En modo de ventanas múltiples, una aplicación puede estar pausada
- y aún visible para el usuario. Es posible que una aplicación necesite continuar sus
- actividades mientras está pausada. Por ejemplo, una aplicación de reproducción de video que está
- pausada pero visible debería continuar mostrando el video. Por ese
- motivo, recomendamos que las actividades que reproducen video <em>no</em> pausen el
- video en sus controladores{@link android.app.Activity#onPause onPause()}.
- En su lugar, deben pausar el video en {@link android.app.Activity#onStop
- onStop()} y reanudar la reproducción en {@link android.app.Activity#onStart
- onStart()}.
-</p>
-
-<p>
- Cuando el usuario coloca una aplicación en modo de ventanas múltiples, el sistema le notifica a la
- actividad de un cambio de configuración, tal como se especifica en <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Control de cambios en
- tiempo de ejecución</a>. Esto también sucede cuando el usuario modifica el tamaño de la aplicación o coloca la aplicación
- nuevamente en el modo de pantalla completa.
- Básicamente, este cambio tiene las mismas consecuencias en el ciclo de vida
- de la actividad que cuando el sistema notifica a la aplicación que el dispositivo cambió de
- modo vertical a modo de paisaje, excepto porque se modifican las dimensiones del dispositivo
- en lugar de intercambiarse solamente. Como se aborda en <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Control de cambios en
- tiempo de ejecución</a>, tu actividad puede administrar el cambio de configuración por sí misma, o
- puede permitir que el sistema destruya la actividad y la vuelva a crear con las nuevas
- dimensiones.
-</p>
-
-<p>
- Si el usuario cambia el tamaño de una ventana y la agranda en cualquier dirección, el
- sistema modifica el tamaño de la actividad para que coincida con la acción del usuario y emite <a href="{@docRoot}guide/topics/resources/runtime-changes.html">cambios en tiempo de ejecución</a>
- según sean necesarios. Si la aplicación se retrasa en el trazado de áreas recientemente expuestas, el
- sistema rellena esas áreas con el color especificado por el atributo {@link
- android.R.attr#windowBackground windowBackground} o por el atributo de estilo predeterminado
- <code>windowBackgroundFallback</code>.
-</p>
-
-<h2 id="configuring">Configuración de tu aplicación para el modo de ventanas múltiples</h2>
-
-<p>
- Si tu aplicación está orientada a Android N, puedes configurar cómo y
- si quieres que las actividades de tu aplicación admitan la visualización de ventanas múltiples. Puedes establecer
- atributos en tu manifiesto para controlar el tamaño y el diseño.
- La configuración de atributos de una actividad raíz se aplica a todas las actividades
- de su pila de tareas. Por ejemplo, si
- <code>android:resizeableActivity</code> está configurado en true para la actividad raíz, se puede modificar el tamaño de todas las actividades
- de la pila de tareas.
-</p>
-
-<p class="note">
- <strong>Nota:</strong> Si compilas una aplicación con múltiples orientaciones con una versión del
- SDK anterior a Android N, y el usuario usa la aplicación en
- modo de ventanas múltiples, el sistema cambia el tamaño de la aplicación de forma forzada. El sistema presenta un
- cuadro de diálogo en el que se advierte al usuario que la aplicación puede comportarse de forma inesperada. El sistema
- <em>no</em> modifica el tamaño de aplicaciones con orientación fija; si
- el usuario intenta abrir una aplicación con orientación fija en modo de ventanas múltiples,
- la aplicación ocupará toda la pantalla.
-</p>
-
-<h4 id="resizeableActivity">android:resizeableActivity</h4>
-<p>
- Establece este atributo en el nodo <code><activity></code> o
- <code><application></code> de tu manifiesto para habilitar o inhabilitar la visualización
- en modo de ventanas múltiples:
-</p>
-
-<pre>
-android:resizeableActivity=["true" | "false"]
-</pre>
-
-<p>
- Si este atributo se establece en true, la actividad puede iniciarse en
- los modos de pantalla dividida y forma libre. Si el atributo se establece en false, la
- actividad no admite el modo de ventanas múltiples. Si el valor es false, y el
- usuario intenta iniciar la actividad en modo de ventanas múltiples, la actividad ocupará
- toda la pantalla.
-</p>
-
-<p>
- Si tu aplicación está orientada a Android N, pero no especificas un valor
- para este atributo, el valor predeterminado del atributo será true.
-</p>
-
-<h4 id="supportsPictureInPicture">android:supportsPictureInPicture</h4>
-
-<p>
- Establece este atributo en el nodo <code><activity></code> de tu manifiesto
- para indicar si la actividad admite la visualización de Picture-in-picture. Este
- atributo se ignora si <code>android:resizeableActivity</code> es false.
-</p>
-
-<pre>
-android:supportsPictureInPicture=["true" | "false"]
-</pre>
-
-<h3 id="layout">Atributos de diseño</h3>
-
-<p>
- Con Android N, el elemento de manifiesto <code><layout></code>
- admite varios atributos que afectan cómo se comporta una actividad en
- modo de ventanas múltiples:
-</p>
-
-<dl>
- <dt>
- <code>android:defaultWidth</code>
- </dt>
-
- <dd>
- Ancho predeterminado de la actividad cuando se inicia en modo de forma libre.
- </dd>
-
- <dt>
- <code>android:defaultHeight</code>
- </dt>
-
- <dd>
- Altura predeterminada de la actividad cuando se inicia en modo de forma libre.
- </dd>
-
- <dt>
- <code>android:gravity</code>
- </dt>
-
- <dd>
- Ubicación inicial de la actividad cuando se inicia en modo de forma libre. Consulta la referencia
- {@link android.view.Gravity} para obtener valores adecuados.
- </dd>
-
- <dt>
- <code>android:minimalHeight</code>, <code>android:minimalWidth</code>
- </dt>
-
- <dd>
- Altura y ancho mínimos para la actividad tanto en el modo de pantalla dividida como en el
- modo de forma libre. Si el usuario mueve la línea divisoria en el modo de pantalla dividida
- para reducir el tamaño respecto del tamaño mínimo especificado, el sistema recorta
- la actividad para ajustarla a los requisitos del usuario.
- </dd>
-</dl>
-
-<p>
- Por ejemplo, el siguiente código muestra cómo especificar el tamaño
- y la ubicación predeterminados de una actividad, y su tamaño mínimo, cuando la actividad se visualiza en
- modo de forma libre:
-</p>
-
-<pre>
-<activity android:name=".MyActivity">
- <layout android:defaultHeight="500dp"
- android:defaultWidth="600dp"
- android:gravity="top|end"
- android:minimalHeight="450dp"
- android:minimalWidth="300dp" />
-</activity>
-</pre>
-
-<h2 id="running">Ejecución de tu aplicación en modo de ventanas múltiples</h2>
-
-<p>
- Android N ofrece nuevas funcionalidades para admitir aplicaciones que puedan ejecutarse
- en modo de ventanas múltiples.
-</p>
-
-<h3 id="disabled-features">Funciones deshabilitadas en modo de ventanas múltiples</h3>
-
-<p>
- Ciertas funciones están deshabilitadas o se ignoran cuando un dispositivo se encuentra en modo de
- ventanas múltiples, ya que no resultan útiles para una actividad que podría estar compartiendo la
- pantalla del dispositivo con otras actividades o aplicaciones. Esas funciones incluyen las siguientes:
-
-<ul>
- <li>Algunas opciones de personalización de la <a href="{@docRoot}training/system-ui/index.html">IU del sistema</a>
- están deshabilitadas; por ejemplo, las aplicaciones no pueden ocultar la barra de
- estado si no se están ejecutando en modo de pantalla completa.
- </li>
-
- <li>El sistema ignora los cambios en el atributo <code><a href=
- "{@docRoot}guide/topics/manifest/activity-element.html#screen"
- >android:screenOrientation</a></code>.
- </li>
-</ul>
-
-<h3 id="change-notification">Notificación y consulta de cambios en modo de ventanas múltiples</h3>
-
-<p>
- Se agregaron los siguientes métodos nuevos a la clase {@link android.app.Activity}
- para admitir la visualización de ventanas múltiples. Para obtener información detallada sobre cada método, consulta la
- <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referencia sobre N Preview SDK
-</a>.
-</p>
-
-<dl>
- <dt>
- <code>Activity.isInMultiWindowMode()</code>
- </dt>
-
- <dd>
- Realiza una llamada para averiguar si la actividad está en modo de ventanas múltiples.
- </dd>
-
- <dt>
- <code>Activity.isInPictureInPictureMode()</code>
- </dt>
-
- <dd>
- Realiza una llamada para averiguar si la actividad está en modo Picture-in-picture.
-
- <p class="note">
- <strong>Nota:</strong> El modo Picture-in-picture es un caso especial del
- modo de ventanas múltiples. Si <code>myActivity.isInPictureInPictureMode()</code>
- devuelve un valor true, <code>myActivity.isInMultiWindowMode()</code> también
- devuelve un valor true.
- </p>
- </dd>
-
- <dt>
- <code>Activity.onMultiWindowModeChanged()</code>
- </dt>
-
- <dd>
- El sistema llama a este método siempre que la actividad entra en modo de ventanas
- múltiples o sale de él. El sistema le pasa al método un valor de true si la
- actividad entra en modo de ventanas múltiples y false si la actividad
- sale del modo de ventanas múltiples.
- </dd>
-
- <dt>
- <code>Activity.onPictureInPictureModeChanged()</code>
- </dt>
-
- <dd>
- El sistema llama a este método siempre que la actividad entra en modo Picture-in-picture
- o sale de él. El sistema le pasa al método un valor de true si
- la actividad entra en modo Picture-in-picture y false si la actividad
- sale de dicho modo.
- </dd>
-</dl>
-
-<p>
- También hay versiones {@link android.app.Fragment} de cada uno de esos
- métodos; por ejemplo, <code>Fragment.isInMultiWindowMode()</code>.
-</p>
-
-<h3 id="entering-pip">Cómo entrar en modo Picture-in-picture</h3>
-
-<p>
- Para que una actividad entre en modo de Picture-in-picture, debes llamar al nuevo método
- <code>Activity.enterPictureInPictureMode()</code>. Este método no tiene efecto si
- el dispositivo no admite el modo de imagen en imagen. Para obtener más información,
- consulta la documentación de <a href="picture-in-picture.html">Picture-in-Picture</a>.
-</p>
-
-<h3 id="launch">Inicia nuevas actividades en modo de ventanas múltiples</h3>
-
-<p>
- Cuando inicias una nueva actividad, puedes indicarle al sistema que la nueva
- actividad se debe mostrar adyacente a la actual, si fuera posible. Para hacer
- esto, usa el marcador
- <code>Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT</code>. Pasar
- este marcador requiere el siguiente comportamiento:
-</p>
-
-<ul>
- <li>Si el dispositivo está en modo de pantalla dividida, el sistema intenta crear la
- nueva actividad junto a la actividad que lo inició, de modo que las dos actividades
- compartan la pantalla. No se garantiza que el sistema pueda hacerlo, pero
- ubicará las actividades de forma adyacente si fuera posible.
- </li>
-
- <li>Si el dispositivo no está en modo de pantalla dividida, este marcador no tendrá efecto.
- </li>
-</ul>
-
-<p>
- Si un dispositivo está en modo de forma libre e inicias una nueva actividad, puedes
- especificar las dimensiones y la ubicación de la pantalla de la nueva actividad al llamar a
- <code>ActivityOptions.setLaunchBounds()</code>. Este método no tiene efecto si
- el dispositivo no está en modo de ventanas múltiples.
-</p>
-
-<p class="note">
- <strong>Nota:</strong> Si inicias una actividad en una pila de tareas, esa
- actividad reemplaza la actividad en pantalla y hereda todas sus
- propiedades de ventanas múltiples. Si quieres iniciar la nueva actividad en una ventana
- independiente en modo de ventanas múltiples, debes iniciarla en una nueva pila de tareas.
-</p>
-
-<h3 id="dnd">Admisión de la funcionalidad de arrastrar y soltar</h3>
-
-<p>
- Los usuarios pueden <a href="{@docRoot}guide/topics/ui/drag-drop.html">arrastrar y
- soltar</a> datos de una actividad a otra mientras las dos actividades
- comparten la pantalla. (Antes, los usuarios solo podían arrastrar y soltar datos dentro de una
- sola actividad). Por este motivo, te recomendamos que agregues la funcionalidad de arrastrar y
- soltar a tu aplicación si es que aún no la admite.
-</p>
-
-<p>
- El N Preview SDK amplía el paquete <a href="{@docRoot}reference/android/view/package-summary.html"><code>android.view</code></a>
- para admitir la funcionalidad de arrastrar y soltar entre aplicaciones diferentes. Para obtener información detallada sobre las siguientes
- clase y métodos, consulta la <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referencia
- del N Preview SDK</a>.
-</p>
-
-<dl>
- <dt>
- <code>android.view.DropPermissions</code>
- </dt>
-
- <dd>
- Objeto token responsable de especificar los permisos otorgados a la aplicación
- que recibe datos mediante la funcionalidad de arrastrar y soltar.
- </dd>
-
- <dt>
- <code>View.startDragAndDrop()</code>
- </dt>
-
- <dd>
- Nuevo alias para {@link android.view.View#startDrag View.startDrag()}. Para
- habilitar la funcionalidad arrastrar y soltar entre diferentes actividades, pasa el nuevo marcador
- <code>View.DRAG_FLAG_GLOBAL</code>. Si necesitas otorgar permisos de URI a
- la actividad receptora, pasa los nuevos marcadores
- <code>View.DRAG_FLAG_GLOBAL_URI_READ</code> o
- <code>View.DRAG_FLAG_GLOBAL_URI_WRITE</code>, según corresponda.
- </dd>
-
- <dt>
- <code>View.cancelDragAndDrop()</code>
- </dt>
-
- <dd>
- Cancela una operación de arrastrar actualmente en curso. Solo puede ser llamado por la
- aplicación que originó la operación de arrastrar.
- </dd>
-
- <dt>
- <code>View.updateDragShadow()</code>
- </dt>
-
- <dd>
- Reemplaza la sombra del arrastre por una operación de arrastrar actualmente en curso. Solo
- puede ser llamado por la aplicación que originó la operación de arrastrar.
- </dd>
-
- <dt>
- <code>Activity.requestDropPermissions()</code>
- </dt>
-
- <dd>
- Solicita los permisos para los URI de contenido que se pasan con el {@link
- android.content.ClipData} incluido en un {@link android.view.DragEvent}.
- </dd>
-</dl>
-
-<h2 id="testing">Prueba de la compatibilidad de tu aplicación con el uso de ventanas múltiples</h2>
-
-<p>
- Ya sea que actualices o no tu aplicación para Android N, debes
- verificar la forma en que se comporta en modo de ventanas múltiples en caso de que un usuario intente iniciarla
- en modo de ventanas múltiples en un dispositivo con Android N.
-</p>
-
-<h3 id="configuring">Configuración de un dispositivo de prueba</h3>
-
-<p>
- Si instalas Android N en un dispositivo, se admite automáticamente el modo
- de pantalla dividida.
-</p>
-
-<h3 id="test-non-n">Si tu aplicación no se compiló con el N Preview SDK</h3>
-
-<p>
- Si no creaste tu aplicación con el N Preview SDK y el usuario intenta usar
- la aplicación en modo de ventanas múltiples, el sistema cambia el tamaño de la aplicación de forma forzada, a menos que la aplicación
- declare una orientación fija.
-</p>
-
-<p>
- Si tu aplicación no declara una orientación fija, debes iniciar tu aplicación
- en un dispositivo con Android N e intentar colocar la aplicación en
- modo de pantalla dividida. Cuando se modifique el tamaño de la aplicación de forma forzada,
- verifica que la experiencia de usuario sea aceptable.
-</p>
-
-<p>
- Si la aplicación declara una orientación fija, debes intentar colocar la aplicación en
- modo de ventanas múltiples. Cuando lo hagas, verifica que la aplicación
- continúe en modo de pantalla completa.
-</p>
-
-<h3 id="test-mw">Si admites el modo de ventanas múltiples</h3>
-
-<p>
- Si compilaste tu aplicación con el N Preview SDK y no deshabilitaste
- la compatibilidad con ventanas múltiples, verifica el siguiente comportamiento tanto en modo de pantalla dividida
- como en modo de forma libre.
-</p>
-
-<ul>
- <li>Inicia la aplicación en modo de pantalla completa y luego cambia al modo de ventanas múltiples al presionar
- durante un momento el botón Overview. Verifica que la aplicación pase de un modo a otro correctamente.
- </li>
-
- <li>Inicia la aplicación directamente en modo de ventanas múltiples y verifica que se
- inicie correctamente. Puedes iniciar una aplicación en modo de ventanas múltiples al presionar el
- botón Overview, luego presionar durante un momento la barra de título de la aplicación y arrastrarla
- a una de las áreas resaltadas de la pantalla.
- </li>
-
- <li>Cambia el tamaño de tu aplicación en modo de pantalla dividida al arrastrar la línea divisoria.
- Verifica que la aplicación cambie de tamaño sin fallar y que estén visibles los elementos
- necesarios de la IU.
- </li>
-
- <li>Si especificaste dimensiones mínimas para tu aplicación, intenta cambiar el tamaño
- de la aplicación a dimensiones más bajas que las especificadas. Verifica que no puedas modificar el tamaño de la aplicación
- para que sea más pequeña que la dimensión mínima especificada.
- </li>
-
- <li>En todas las pruebas, verifica que el rendimiento de la aplicación sea aceptable. Por
- ejemplo, verifica que la actualización de la IU después de cambiar el tamaño de la aplicación
- no demore mucho.
- </li>
-</ul>
-
-<h4 id="test-checklist">Lista de comprobación de pruebas</h4>
-
-<p>
- Para verificar el rendimiento de tu aplicación en modo de ventanas múltiples, intenta las siguientes
- operaciones. Debes probar estas operaciones tanto en modo de pantalla dividida como en
- modo de ventanas múltiples, excepto cuando se indique algo diferente.
-</p>
-
-<ul>
- <li>Ingresa en modo de ventanas múltiples y luego sal.
- </li>
-
- <li>Pasa de tu aplicación a otra y verifica que la aplicación se comporte
- correctamente mientras esté visible pero no activa. Por ejemplo, si tu aplicación está
- reproduciendo video, comprueba que el video se siga reproduciendo mientras el usuario interactúe
- con otra aplicación.
- </li>
-
- <li>En modo de pantalla dividida, prueba mover la barra divisora para agrandar y
- achicar la aplicación. Realiza estas operaciones en las configuraciones una al lado de la otra y
- una encima de la otra. Verifica que la aplicación no falle,
- que las funcionalidades necesarias estén visibles y que la operación de cambio de tamaño no demore
- mucho.
- </li>
-
- <li>Realiza varias operaciones de cambio de tamaño en una sucesión rápida. Verifica que tu
- aplicación no falle ni pierda memoria. Para obtener información acerca de cómo comprobar el uso de memoria
- de tu aplicación, consulta <a href="{@docRoot}tools/debugging/debugging-memory.html">
- Averiguación del uso de RAM</a>.
- </li>
-
- <li>Usa tu aplicación normalmente en diferentes configuraciones de ventanas y
- verifica que la aplicación se comporte correctamente. Verifica que el texto sea legible y que
- los elementos de la IU sean lo suficientemente grandes para interactuar con ellos.
- </li>
-</ul>
-
-<h3 id="test-disabled-mw">Si deshabilitaste la compatibilidad con el modo de ventanas múltiples</h3>
-
-<p>
- Si deshabilitaste la compatibilidad con el modo de ventanas múltiples al configurar
- <code>android:resizableActivity="false"</code>, debes iniciar tu aplicación en
- un dispositivo con Android N e intentar colocar la aplicación en los
- modos de forma libre y pantalla dividida. Cuando lo hagas, verifica que la aplicación
- continúe en modo de pantalla completa.
-</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/es/preview/features/picture-in-picture.jd b/docs/html-intl/intl/es/preview/features/picture-in-picture.jd
deleted file mode 100644
index 36c0c57..0000000
--- a/docs/html-intl/intl/es/preview/features/picture-in-picture.jd
+++ /dev/null
@@ -1,213 +0,0 @@
-page.title=Modo Picture-in-picture
-page.keywords=preview,sdk,PIP,Picture-in-picture
-page.tags=androidn
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>En este documento</h2>
-<ol>
- <li><a href="#declaring">Declarar que la actividad permite
-el modo Picture-in-Picture</a></li>
- <li><a href="#pip_button">Cambiar la actividad al modo Picture-in-picture</a>
-</li>
- <li><a href="#handling_ui">Gestionar las IU durante el modo Picture-in-picture</a>
-</li>
- <li><a href="#continuing_playback">Continuar la reproducción de video durante
-el modo Picture-in-picture</a></li>
- <li><a href="#single_playback">Usar una única actividad de reproducción para
-el modo Picture-in-picture</a></li>
- <li><a href="#best">Prácticas recomendadas</a></li>
-</ol>
-
-<h2>Consulta también</h2>
-<ol>
- <li><a href="{@docRoot}preview/features/multi-window.html">Compatibilidad con
-ventanas múltiples</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>Con Android N, los usuarios de Android TV ahora pueden ver un video
-en una ventana fija que se ubica en una esquina de la pantalla mientras navegan dentro de
-aplicaciones. El modo picture-in-picture (PIP) permite que las aplicaciones reproduzcan un video
-en una ventana fija mientras se lleva a cabo otra actividad
-en el fondo. La ventana de PIP les permite a los usuarios realizar múltiples tareas mientras usan tu aplicación, lo cual les permite
-ser más productivos.</p>
-
-<p>Tu aplicación puede decidir cuándo activar el modo PIP. Aquí te mostramos algunos ejemplos de
-situaciones en las que se podría usar el modo PIP:</p>
-
-<ul>
-<li>Tu aplicación puede pasar un video al modo PIP cuando el usuario retrocede
-en la navegación desde el video para explorar otro contenido.</li>
-<li>También puede hacerlo mientras el usuario está viendo el final
-de un episodio de contenido. La pantalla principal muestra información promocional
-o de resumen sobre el próximo capítulo de la serie.</li>
-<li>Tu aplicación puede brindarles a los usuarios una forma de poner en cola otro contenido mientras
-miran un video. El video continúa reproduciéndose en modo PIP mientras la pantalla
-principal muestra una actividad de selección de contenido.</li>
-</ul>
-
-<p>La ventana de PIP es de 240x135 dp y se muestra en la capa delantera en una de las
-cuatro esquinas de la pantalla que el sistema elige. El usuario puede acceder a un menú de
-PIP que le permite activar o desactivar la ventana de PIP a pantalla completa o cerrarla
-presionando el botón <b>Home</b> en el control remoto. Si se comienza a reproducir
-otro video en la pantalla principal, la ventana de PIP se cierra
-automáticamente. Los usuarios también pueden cerrar la ventana de PIP desde Recents.</p>
-
-<img src="{@docRoot}preview/images/pip-active.png" />
-<p class="img-caption"><strong>Imagen 1.</strong> Un video picture-in-picture
-visible en una esquina de la pantalla mientras el usuario explora contenido
-en la pantalla principal.</p>
-
-<p>El modo PIP aprovecha las API de ventanas múltiples disponibles en Android N para
-brindar la ventana superpuesta fija de video. Para agregarle el modo PIP a tu aplicación, debes
-registrar las actividades que permitan este modo, cambiar la actividad al modo PIP según
-sea necesario y asegurarte de que los elementos de IU se oculten y que la reproducción de video continúe mientras
-la actividad se encuentra en modo PIP.</p>
-
-<h2 id="declaring">Declarar que la actividad permite el modo picture-in-picture</h2>
-
-<p>De forma predeterminada, el sistema no permite el modo PIP para aplicaciones automáticamente.
-Si deseas permitir este modo en tu aplicaciones, registra la actividad
-de video en tu manifiesto configurando
-<code>android:supportsPictureInPicture</code> y
-<code>android:resizeableActivity</code> en <code>true</code>. Además, debes especificar
-que tu actividad gestiona los cambios de configuración de la presentación para que la actividad
-no se reinicie cuando ocurran cambios de presentación durante las transiciones en el modo PIP.</p>
-
-<pre>
-<activity android:name="VideoActivity"
- android:resizeableActivity="true"
- android:supportsPictureInPicture="true"
- android:configChanges=
- "screenSize|smallestScreenSize|screenLayout|orientation"
- ...
-</pre>
-
-<p>Cuando registres la actividad, ten en cuenta que, en el modo PIP, la
-actividad se muestra en una ventana superpuesta pequeña en una pantalla de TV. Las actividades de reproducción
-de videos con IU mínimas brindan la mejor experiencia de usuario. Las actividades que
-incluyen elementos de IU pequeños podrían no brindar una buena experiencia de usuario
-cuando se cambian al modo PIP, porque los usuarios no podrán ver los detalles de los elementos de IU
-en la ventana PIP.</p>
-
-<h2 id="pip_button">Cambiar la actividad al modo Picture-in-picture</h2>
-
-Cuando necesites cambiar la actividad al modo PIP, llama a
-<code>Activity.enterPictureInPictureMode()</code>. En el siguiente ejemplo, se
-cambia al modo PIP cuando el usuario selecciona un botón PIP especial en una barra
-de control de medios:</p>
-
-<pre>
-@Override
-public void onActionClicked(Action action) {
- if (action.getId() == R.id.lb_control_picture_in_picture) {
- getActivity().enterPictureInPictureMode();
- return;
- }
- ...
-</pre>
-
-<p>Agregar un botón PIP a la barra de control de medios le permite al usuario cambiar
-fácilmente al modo PIP y seguir controlando la reproducción de video.</p>
-
-<img src="{@docRoot}preview/images/pip-button.png" />
-<p class="img-caption"><strong>Imagen 1.</strong> Un botón
-PIP en una barra de control de medios.</p>
-
-<p>Android N incluye una nueva clase
-<code>PlaybackControlsRow.PictureInPictureAction</code> que define
-las acciones de PIP de la barra de control y usa el ícono PIP.</p>
-
-<h2 id="handling_ui">Gestionar las IU durante el modo picture-in-picture</h2>
-
-<p>Cuando la actividad ingresa al modo PIP, esta solo debería mostrar la reproducción
-de video. Debes quitar los elementos de IU antes de que la actividad ingrese al modo PIP
-y volver a mostrarlos cuando la actividad vuelva al modo de pantalla completa.
-Anula <code>Activity.onPictureInPictureModeChanged()</code> o
-<code>Fragment.onPictureInPictureModeChanged()</code> y habilita
-o inhabilita los elementos de IU según sea necesario, por ejemplo:</p>
-
-<pre>
-@Override
-public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
- if (isInPictureInPictureMode) {
- // Hide the controls in picture-in-picture mode.
- ...
- } else {
- // Restore the playback UI based on the playback status.
- ...
- }
-}
-</pre>
-
-<h2 id="continuing_playback">Continuar la reproducción de video durante
-el modo Picture-in-picture</h2>
-
-<p>Cuando la actividad cambia al modo PIP, el sistema considera que se encuentra en
-pausa y llama al método <code>onPause()</code> de la actividad. La reproducción
-de video no debería pausarse y debería continuar si la actividad se
-pausa debido al modo PIP. Busca el modo PIP en el método
-<code>onPause()</code> de la actividad y controla la reproducción según corresponda, por
-ejemplo:</p>
-
-<pre>
-@Override
-public void onPause() {
- // If called while in PIP mode, do not pause playback
- if (isInPictureInPictureMode()) {
- // Continue playback
- ...
- }
- // If paused but not in PIP, pause playback if necessary
- ...
-}
-</pre>
-
-<p>Cuando la actividad sale del modo PIP y vuelve al modo de pantalla completa, el
-sistema reinicia la actividad y llama al método <code>onResume()</code>.</p>
-
-<h2 id="single_playback">Usar una única actividad de reproducción para
-el modo Picture-in-picture</h2>
-
-<p>En tu aplicación, un usuario puede seleccionar un nuevo video cuando busca contenido en la
-pantalla principal, mientras una actividad de reproducción de video está en modo PIP. Reproduce el nuevo
-video en la actividad de reproducción actual en modo de pantalla completa, en lugar de
-iniciar una nueva actividad que podría confundir al usuario.</p>
-
-<p>A fin de garantizar que se utilice una única actividad para las solicitudes de reproducción de video y que esta
- ingrese en el modo PIP o salga de este cuando sea necesario, configura el
-<code>android:launchMode</code> de la actividad en <code>singleTask</code>, en el manifiesto:
-</p>
-
-<pre>
-<activity android:name="VideoActivity"
- ...
- android:supportsPictureInPicture="true"
- android:launchMode="singleTask"
- ...
-</pre>
-
-<p>En tu actividad, anula {@link android.app.Activity#onNewIntent
-Activity.onNewIntent()} y administra el nuevo video, deteniendo cualquier reproducción
-de video actual si es necesario.</p>
-
-<h2 id="best">Prácticas recomendadas</h2>
-
-<p>El modo PIP está diseñado para actividades que reproducen un video en pantalla completa. Cuando cambies la
-actividad al modo PIP, evita que se muestre cualquier elemento que no sea el contenido del video.
-Rastrea el cambio a modo PIP de la actividad y oculta los elementos de IU, como se explica
-en la sección <a href="#handling_ui">Gestionar las IU durante el modo picture-in-picture</a>.</p>
-
-<p>Debido a que la ventana de PIP se muestra como una ventana flotante en una
-esquina de la pantalla, debes evitar mostrar información importante en la pantalla principal
-en cualquier área que pueda quedar oculta detrás de la ventana de PIP.</p>
-
-<p>Cuando una actividad se encuentra en modo PIP, de forma predeterminada, no tiene focalización en las entradas. Para
-recibir eventos de entradas durante este modo, usa
-<code>MediaSession.setMediaButtonReceiver()</code>.</p>
diff --git a/docs/html-intl/intl/es/preview/features/scoped-folder-access.jd b/docs/html-intl/intl/es/preview/features/scoped-folder-access.jd
deleted file mode 100644
index e423e6a..0000000
--- a/docs/html-intl/intl/es/preview/features/scoped-folder-access.jd
+++ /dev/null
@@ -1,148 +0,0 @@
-page.title=Acceso a directorios determinados
-page.keywords=preview,sdk,scoped directory access
-page.tags=androidn
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>En este documento</h2>
- <ol>
- <li><a href="#accessing">Acceder a un directorio de almacenamiento externo</a></li>
- <li><a href="#removable">Acceder a un directorio de un medio extraíble</a></li>
- <li><a href="#best">Prácticas recomendadas</a></li>
- </ol>
-</div>
-</div>
-
-<p>Las aplicaciones como las aplicaciones de fotografía generalmente solo necesitan acceso a directorios de
-almacenamiento externo, como el directorio <code>Pictures</code>. Los métodos
-existentes para acceder a almacenamiento externo no están diseñados para brindar un
-acceso fácil a determinados directorios para estos tipos de aplicaciones. Por ejemplo:</p>
-
-<ul>
-<li>Solicitar {@link android.Manifest.permission#READ_EXTERNAL_STORAGE}
-o {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} en tu manifiesto
-permite el acceso a todos los directorios públicos de un almacenamiento externo, lo cual podría ser
-un acceso mayor que el que necesita tu aplicación.</li>
-<li>Usar el
-<a href="{@docRoot}guide/topics/providers/document-provider.html">framework
-de acceso al almacenamiento</a> generalmente implica que el usuario seleccione directorios
-mediante un sistema de IU, lo cual no es necesario si tu aplicación siempre accede al mismo
-directorio externo.</li>
-</ul>
-
-<p>Android N brinda una API nueva y simplificada para acceder a
- directorios de almacenamiento externo comunes. </p>
-
-<h2 id="accessing">Acceder a un directorio de almacenamiento externo</h2>
-
-<p>Usa la clase <code>StorageManager</code> para obtener la instancia de
-<code>StorageVolume</code> correcta. Luego, crea una intent llamando al
- método <code>StorageVolume.createAccessIntent()</code> de esa instancia.
-Usa esta intención para acceder a directorios de almacenamiento externo. Para obtener una lista de
-todos los volúmenes disponibles, incluidos los volúmenes de medios extraíbles, usa
-<code>StorageManager.getVolumesList()</code>.</p>
-
-<p>Si tienes información sobre un archivo específico, usa
-<code>StorageManager.getStorageVolume(File)</code> para obtener el
-<code>StorageVolume</code> que contiene el archivo. Llama a
-<code>createAccessIntent()</code> en este <code>StorageVolume</code> para acceder al
-directorio de almacenamiento externo del archivo.</p>
-
-<p>
-En el caso de los volúmenes secundarios, como las tarjetas SD externas, pasa un valor nulo cuando llames a
-<code>StorageVolume.createAccessIntent()</code> para solicitar acceso al volumen
- completo, en lugar de un directorio específico.
-<code>StorageVolume.createAccessIntent()</code> regresa un valor nulo si pasas un
- valor nulo para el volumen principal o si pasas un nombre de directorio no válido.
-</p>
-
-<p>El siguiente fragmento de código es un ejemplo de cómo abrir el
-directorio <code>Pictures</code> en el almacenamiento compartido principal:</p>
-
-<pre>
-StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
-StorageVolume volume = sm.getPrimaryVolume();
-Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
-startActivityForResult(intent, request_code);
-</pre>
-
-<p>El sistema intenta otorgar acceso al directorio externo y, si
-es necesario, confirma el acceso con el usuario usando una IU simplificada:</p>
-
-<img src="{@docRoot}preview/images/scoped-folder-access-framed.png" srcset="{@docRoot}preview/images/scoped-folder-access-framed.png 1x,
-{@docRoot}preview/images/scoped-folder-access-framed_2x.png 2x" />
-<p class="img-caption"><strong>Imagen 1.</strong> Una aplicación solicitando
-acceso al directorio Pictures.</p>
-
-<p>Si el usuario otorga el acceso, el sistema llama a tu
- anulación de <code>onActivityResult()</code> con un código resultante de
-<code>Activity.RESULT_OK</code> y datos de intents que contienen el URI. Usa
-el URI brindado para acceder a la información del directorio. Es similar a usar URI
-generados por el
-<a href="{@docRoot}guide/topics/providers/document-provider.html">framework
-de acceso al almacenamiento</a>.</p>
-
-<p>Si el usuario no otorga el acceso, el sistema llama a tu
-anulación de <code>onActivityResult()</code> con un código resultante de
-<code>Activity.RESULT_CANCELED</code> y datos de intents nulos.</p>
-
-<p class="note"><b>Nota</b>: Obtener acceso a un directorio externo específico
-también otorga el acceso a los subdirectorios de ese directorio.</p>
-
-<h2 id="removable">Acceder a un directorio de un medio extraíble</h2>
-
-<p>Para usar el acceso a directorios determinados para acceder a directorios de medios extraíbles,
-primero debes agregar un {@link android.content.BroadcastReceiver} que escuche la
-notificación{@link android.os.Environment#MEDIA_MOUNTED}, por ejemplo:</p>
-
-<pre>
-<receiver
- android:name=".MediaMountedReceiver"
- android:enabled="true"
- android:exported="true" >
- <intent-filter>
- <action android:name="android.intent.action.MEDIA_MOUNTED" />
- <data android:scheme="file" />
- </intent-filter>
-</receiver>
-</pre>
-
-<p>Cuando el usuario conecta un medio extraíble, como una tarjeta SD, el sistema envía una
-notificación{@link android.os.Environment#MEDIA_MOUNTED}. Esta notificación
-brinda un objeto <code>StorageVolume</code> en los datos de intents que puedes
-usar para acceder a directorios del medio extraíble. El siguiente ejemplo
-accede al directorio <code>Pictures</code> de medios extraíbles:</p>
-
-<pre>
-// BroadcastReceiver has already cached the MEDIA_MOUNTED
-// notification Intent in mediaMountedIntent
-StorageVolume volume = (StorageVolume)
- mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
-volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
-startActivityForResult(intent, request_code);
-</pre>
-
-<h2 id="best">Prácticas recomendadas</h2>
-
-<p>Cuando sea posible, sigue usando el URI de acceso a directorios externos de modo que no tengas
-que solicitarle acceso al usuario continuamente. Una vez que el usuario haya otorgado el acceso, llama a
-<code>getContentResolver().takePersistableUriPermssion()</code> con el
-URI de acceso a directorios. El sistema continuará el URI, y las siguientes solicitudes
-de acceso generarán <code>RESULT_OK</code> y no le mostrarán una IU de confirmación al
-usuario.</p>
-
-<p>Si el usuario deniega el acceso a un directorio externo, no vuelvas a solicitar el
-acceso inmediatamente. Hacer esto provocaría una mala experiencia
-de usuario. Si el usuario deniega una solicitud y la aplicación solicita acceso
- nuevamente, aparece la casilla de verificación <b>Don't ask again</b> en la IU:</p>
-
-<img src="{@docRoot}preview/images/scoped-folder-access-dont-ask.png" srcset="{@docRoot}preview/images/scoped-folder-access-dont-ask.png 1x,
-{@docRoot}preview/images/scoped-folder-access-dont-ask_2x.png 2x" />
-<p class="img-caption"><strong>Figura 1.</strong> Una aplicación que presenta una
-segunda solicitud para obtener acceso a medios extraíbles.</p>
-
-<p>Si el usuario selecciona <b>Don't ask again</b> y deniega la solicitud, todas las
-solicitudes futuras que presente la aplicación para el directorio determinado se denegarán
- automáticamente, y el usuario no recibirá ninguna IU de solicitud.</p>
\ No newline at end of file
diff --git a/docs/html-intl/intl/es/preview/features/security-config.jd b/docs/html-intl/intl/es/preview/features/security-config.jd
deleted file mode 100644
index 8c3db64..0000000
--- a/docs/html-intl/intl/es/preview/features/security-config.jd
+++ /dev/null
@@ -1,747 +0,0 @@
-page.title=Configuración de seguridad de la red
-page.keywords=androidn,security,network
-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="#manifest">Agregar un archivo de configuración de seguridad</a></li>
- <li><a href="#CustomTrust">Personalizar las CA de confianza</a>
- <ol>
- <li><a href="#ConfigCustom">Configurar una CA de confianza personalizada</a></li>
- <li><a href="#LimitingCas">Limitar el conjunto de CA de confianza</a></li>
- <li><a href="#TrustingAdditionalCas">Otorgar confianza a CA adicionales</a></li>
- </ol>
- </li>
- <li><a href="#TrustingDebugCa">CA de solo depuración</a></li>
- <li><a href="#UsesCleartextTraffic">Desactivar el tráfico de Cleartext</a></li>
- <li><a href="#CertificatePinning">Fijar certificados</a></li>
- <li><a href="#ConfigInheritance">Comportamiento de herencia de configuración</a></li>
- <li><a href="#FileFormat">Formato del archivo de configuración</a></li>
-</ol>
-</div>
-</div>
-
-
-<p>
- Android N incluye una función de configuración de seguridad de la red
- que les permite a las aplicaciones personalizar los ajustes de seguridad de la red mediante un archivo
- de configuración declarativo seguro sin que haya que modificar el código de la aplicación. Estos ajustes se pueden
- configurar para dominios específicos y para una aplicación específica. Las capacidades
- clave de esta función son las siguientes:
-</p>
-
-<ul>
- <li>
- <b>Anclajes de confianza personalizados:</b> personalizar qué autoridades de certificado (CA)
- son de confianza para las conexiones de seguridad de una aplicación. Por ejemplo,
- confiar en certificados autofirmados particulares
- o restringir el conjunto de CA públicas en las que confía la aplicación.
- </li>
-
- <li>
- <b>Anulaciones de solo depuración:</b> depurar de forma segura conexiones
- de una aplicación sin riesgos adicionales para la base instalada.
- </li>
-
- <li>
- <b>Desactivación del tráfico de Cleartext:</b> proteger a las aplicaciones del
- uso accidental de tráfico de Cleartext.
- </li>
-
- <li>
- <b>Fijación de certificados:</b> restringir la conexión segura de una aplicación
- a certificados en particular.
- </li>
-</ul>
-
-
-<h2 id="manifest">Agregar un archivo de configuración de seguridad</h2>
-
-<p>
- La función de configuración de seguridad de la red usa un archivo XML donde
- se especifican los ajustes para la aplicación. Debes incluir una entrada en el manifiesto de tu
- aplicación que apunte a este archivo. El siguiente fragmento de código de un manifiesto
- demuestra cómo crear esta entrada:
-</p>
-
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<manifest ... >
- <application ... >
- <meta-data android:name="android.security.net.config"
- android:resource="@xml/network_security_config" />
- ...
- </application>
-</manifest>
-</pre>
-
-<h2 id="CustomTrust">Personalizar las CA de confianza</h2>
-
-<p>
- Una aplicación podría querer otorgar confianza a un conjunto personalizado de CA en lugar de hacerlo según los ajustes
- predeterminados de la plataforma. Las razones más comunes son las siguientes:
-</p>
-
-<ul>
- <li>Conectarse a un host con una autoridad de certificado personalizada (autofirmado,
- emitido por una CA corporativa interna, etc.).
- </li>
-
- <li>Limitar el conjunto de CA a CA de confianza establecidas por el usuario y no a cada
- CA preinstalada.
- </li>
-
- <li>Otorgar confianza a CA adicionales que no están incluidas en el sistema
- </li>
-</ul>
-
-<p>
- De forma predeterminada, las conexiones seguras (p. ej.: TLS, HTTP) de todas las aplicaciones dependen de
- las CA preinstaladas del sistema; las aplicaciones que tienen como objetivo a la API nivel 23
- (Android M) e inferiores también dependen de la tienda de CA agregada por el usuario de forma predeterminada. Una
- aplicación puede personalizar sus propias conexiones usando {@code base-config} (para
- la personalización de toda la aplicación) o {@code domain-config} (para la personalización
- por dominio).
-</p>
-
-
-<h3 id="ConfigCustom">Configurar una CA de confianza personalizada</h3>
-
-<p>
- Supongamos que deseas conectarte a tu host, el cual usa un certificado SSL
- autofirmado, o a un host cuyo certificado SSL está emitido por una CA no pública
- en la cual confías, como la CA interna de tu empresa.
-</p>
-
-<p>
- <code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">example.com</domain>
- <trust-anchors>
- <certificates src="@raw/my_ca"/>
- </trust-anchors>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-<p>
- Agrega el certificado de CA autofirmado o no público, en formato PEM o DER, a
- {@code res/raw/my_ca}.
-</p>
-
-
-<h3 id="LimitingCas">Limitar el conjunto de CA de confianza</h3>
-
-<p>
- Una aplicación que no desee confiar en todas las CA en que confía el sistema puede,
- en su lugar, especificar su propio conjunto reducido de CA en las que confía. Esto protege a la aplicación
- de certificados fraudulentos emitidos por cualquiera de las demás CA.
-</p>
-
-<p>
- La configuración para limitar el conjunto de CA de confianza es similar a <a href="#TrustingACustomCa">confiar en una CA personalizada</a> para un dominio específico, con la diferencia
- de que se brindan múltiples CA en el recurso.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">secure.example.com</domain>
- <domain includeSubdomains="true">cdn.example.com</domain>
- <trust-anchors>
- <certificates src="@raw/trusted_roots"/>
- </trust-anchors>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-<p>
- Agrega las CA de confianza, en formato PEM o DER, a {@code res/raw/trusted_roots}.
- Ten en cuenta que, si usas el formato PEM, el archivo debe incluir <em>solo</em> datos PEM
- y ningún texto adicional. También puedes brindar elementos
-<a href="#certificates"><code><certificates></code></a>
- múltiples en lugar de solo uno.
-</p>
-
-
-<h3 id="TrustingAdditionalCas">
- Otorgar confianza a CA adicionales
-</h3>
-
-<p>
- Una aplicación podría querer otorgar confianza a CA adicionales en las cuales el sistema no confía,
- ya sea porque el sistema aún no incluye la CA o porque la CA no
- cumple con los requisitos de inclusión del sistema Android. La
- aplicación puede hacerlo especificando múltiples fuentes de certificado para una
- configuración.
-</p>
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <base-config>
- <trust-anchors>
- <certificates src="@raw/extracas"/>
- <certificates src="system"/>
- </trust-anchors>
- </base-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="TrustingDebugCa">Configurar las CA para depuración</h2>
-
-<p>
- Cuando depuras una aplicación que se conecta mediante HTTPS, podrías querer
- conectarte a un servidor de desarrollo local que no tiene el certificado
- SSL de tu servidor de producción. Para poder hacerlo sin
- tener que modificar el código de tu aplicación, puedes especificar CA de solo depuración que
- solo <i>son</i> de confianza cuando <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">
-android:debuggable</a>
- es {@code true} usando {@code debug-overrides}. Generalmente, las herramientas de IDE
- y de compilación configuran esta marca automáticamente para las compilaciones que no son de lanzamiento.
-</p>
-
-<p>
- Esto es más seguro que el código condicional habitual ya que, como precaución
- de seguridad, las tiendas de aplicaciones no aceptan aplicaciones que están marcadas
- como depurables.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <debug-overrides>
- <trust-anchors>
- <certificates src="@raw/debug_cas"/>
- </trust-anchors>
- </debug-overrides>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="UsesCleartextTraffic">Desactivar el tráfico de Cleartext</h2>
-
-<p>
- Las aplicaciones que deseen conectarse a destinos usando solo conexiones
- seguras pueden desactivar Cleartext (usando el protocolo
- HTTP no encriptado en lugar del protocolo HTTPS) para esos destinos. Esta opción ayuda a prevenir
- las regresiones accidentales en aplicaciones debido a cambios en direcciones URL generados por fuentes
- externas como servidores backend.
- Consulta {@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted
- NetworkSecurityPolicy.isCleartextTrafficPermitted()} para obtener más información.
-</p>
-
-<p>
- Por ejemplo, una aplicación puede querer garantizar que todas las conexiones a {@code
-secure.example.com} se hagan siempre mediante HTTPS para proteger el tráfico sensible
- de redes hostiles.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config usesCleartextTraffic="false">
- <domain includeSubdomains="true">secure.example.com</domain>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="CertificatePinning">Fijar certificados</h2>
-
-<p>
- Generalmente, una aplicación otorga confianza a todas las CA preinstaladas. Si alguna de estas CA emitiera
- un certificado fraudulento, la aplicación estaría en riesgo de sufrir un ataque
- MiTM. Algunas aplicaciones eligen limitar el conjunto de certificados que aceptan
- ya sea limitando el conjunto de CA al que otorgan confianza o fijando certificados.
-</p>
-
-<p>
- La fijación de certificados se hace brindando un conjunto de certificados por hash de la
- clave pública (SubjectPublicKeyInfo del certificado X.509). De este modo,
- una cadena de certificados solo es válida si contiene al menos una de
- las claves públicas fijadas.
-</p>
-
-<p>
- Ten en cuenta que, cuando uses la fijación de certificados, siempre debes incluir una clave
- de respaldo para que, si te ves obligado a cambiar a claves nuevas o a cambiar de CA (cuando
- fijas un certificado de CA o un intermediario de esa CA), la conectividad
- de la aplicación no se vea afectada. Si no, deberás actualizar
- la aplicación para recuperar la conectividad.
-</p>
-
-<p>
- Además, se puede configurar un tiempo de expiración para las fijaciones,
- luego del cual las fijaciones dejan de realizarse. Esto ayuda a evitar los problemas de conectividad
- en aplicaciones que no se han actualizado. Sin embargo, configurar un tiempo de expiración
- para las fijaciones puede habilitar la omisión de fijaciones.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">example.com</domain>
- <pin-set expiration="2018-01-01">
- <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
- <!-- backup pin -->
- <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
- </pin-set>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="ConfigInheritance">Comportamiento de herencia de configuración</h2>
-
-<p>
- Los valores que no se establecen en una configuración específica se heredan. Este comportamiento permite configuraciones
- más complejas y un archivo de configuración de fácil lectura.
-</p>
-
-<p>
- Si no se establece un valor en una entrada específica, se usa el valor de
- la siguiente entrada más general. Los valores no establecidos en una {@code domain-config} se
- toman de la {@code domain-config} primaria, si están anidados, o de la {@code
-base-config}, si no están anidados. Los valores no establecidos en la {@code base-config} usan
- los valores predeterminados de la plataforma.
-</p>
-
-<p>
- Por ejemplo, cuando todas las conexiones a subdominios de {@code
-example.com} deben usar un conjunto personalizado de CA. Además, el tráfico de Cleartext a
- estos dominios se permite <em>excepto</em> con las conexiones a {@code
- secure.example.com}. Anidando la configuración para {@code
-secure.example.com} dentro de la configuración para {@code example.com},
- {@code trust-anchors} no necesita duplicación.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">example.com</domain>
- <trust-anchors>
- <certificates src="@raw/my_ca"/>
- </trust-anchors>
- <domain-config cleartextTrafficPermitted="false">
- <domain includeSubdomains="true">secure.example.com</domain>
- </domain-config>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="FileFormat">Formato del archivo de configuración</h2>
-
-<p>
- La función de configuración de seguridad de la red usa un formato de archivo XML.
- La estructura general del archivo se muestra en el siguiente ejemplo de código:
-</p>
-
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <base-config>
- <trust-anchors>
- <certificates src="..."/>
- ...
- </trust-anchors>
- </base-config>
-
- <domain-config>
- <domain>android.com</domain>
- ...
- <trust-anchors>
- <certificates src="..."/>
- ...
- </trust-anchors>
- <pin-set>
- <pin digest="...">...</pin>
- ...
- </pin-set>
- </domain-config>
- ...
- <debug-overrides>
- <trust-anchors>
- <certificates src="..."/>
- ...
- </trust-anchors>
- </debug-overrides>
-</network-security-config>
-</pre>
-
-<p>
- Las siguientes secciones describen la sintaxis y otros detalles del formato
- de archivo.
-</p>
-
-<h3 id="network-security-config">
- <network-security-config>
-</h3>
-
-<dl class="xml">
- <dt>
- PUEDE CONTENER:
- </dt>
-
- <dd>
- 0 o 1 de <code><a href="#base-config"><base-config></a></code><br>
- Cualquier cantidad de <code><a href=
- "#domain-config"><domain-config></a></code><br>
- 0 o 1 de <code><a href="#debug-overrides"><debug-overrides></a></code>
- </dd>
-</dl>
-
-<h3 id="base-config">
- <base-config>
-</h3>
-
-<dl class="xml">
- <dt>
- SINTAXIS:
- </dt>
-</dl>
-
-<pre class="stx">
-<base-config <a href=
-"#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
- ...
-</base-config>
-</pre>
-<dl class="xml">
- <dt>
- PUEDE CONTENER:
- </dt>
-
- <dd>
- <code><a href="#trust-anchors"><trust-anchors></a></code>
- </dd>
-
- <dt>
- DESCRIPCIÓN:
- </dt>
-
- <dd>
- La configuración predeterminada usada por todas las conexiones cuyo destino no
- está cubierto por una <a href="#domain-config"><code>domain-config</code></a>.
-
-<p>
- Los valores que no están configurados usan los valores predeterminados de la plataforma. La configuración predeterminada
- para aplicaciones con API nivel 24 o superior es:
-</p>
-
-<pre>
-<base-config usesCleartextTraffic="true">
- <trust-anchors>
- <certificates src="system" />
- </trust-anchors>
-</base-config>
-</pre>
-La configuración predeterminada para aplicaciones con API nivel 23 o inferior es:
-<pre>
-<base-config usesCleartextTraffic="true">
- <trust-anchors>
- <certificates src="system" />
- <certificates src="user" />
- </trust-anchors>
-</base-config>
-</pre>
-
- </dd>
-</dl>
-
-<h3 id="domain-config"><domain-config></h3>
-<dl class="xml">
-<dt>SINTAXIS:</dt>
-<dd>
-<pre class="stx"><domain-config <a href="#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
- ...
-</domain-config></pre>
-</dd>
-
-<dt>PUEDE CONTENER:</dt>
-
-<dd>
-1 o más <code><a href="#domain"><domain></a></code>
-<br/>0 o 1 <code><a href="#trust-anchors"><trust-anchors></a></code>
-<br/>0 o 1 <code><a href="#pin-set"><pin-set></code></a>
-<br/>Cualquier cantidad de <code><domain-config></code> anidadas</dd>
-
-<dt>DESCRIPCIÓN</dt>
-<dd>Configuración usada para conexiones con destinos específicos, como los definidos por elementos de {@code domain}.
-
-<p>Ten en cuenta que, si múltiples elementos de {@code domain-config} cubren un destino, la configuración con la regla de coincidencia de dominio más específica (más larga)
- es la que se usa.</p></dd>
-</dl>
-
-
-<h3 id="domain"><domain></h3>
-
-<dl class="xml">
- <dt>
- SINTAXIS:
- </dt>
-
- <dd>
- <pre class="stx">
-<domain includeSubdomains=["true" | "false"]>example.com</domain>
-</pre>
- </dd>
-
- <dt>
- ATRIBUTOS:
- </dt>
-
- <dd>
- <dl class="attr">
- <dt>
- {@code includeSubdomains}
- </dt>
-
- <dd>
- Si es {@code "true"}, esta regla de dominio coincide con el dominio
- y con todos los subdominios, incluidos los subdominios de subdominios. Si no, la regla
- solo se aplica a coincidencias exactas.
- </dd>
- </dl>
- </dd>
-
- <dt>
- DESCRIPCIÓN:
- </dt>
-</dl>
-
-<h3 id="debug-overrides"><debug-overrides></h3>
-
-<dl class="xml">
- <dt>
- sintaxis:
- </dt>
-
- <dd>
- <pre class="stx">
-<debug-overrides>
- ...
-</debug-overrides>
-</pre>
- </dd>
-
- <dt>
- PUEDE CONTENER:
- </dt>
-
- <dd>
- 0 o 1 <code><a href="#trust-anchors"><trust-anchors></a></code>
- </dd>
-
- <dt>
- DESCRIPCIÓN:
- </dt>
-
- <dd>
- Sobrescrituras que se deben aplicar cuando <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
- es {@code "true"}, que es, generalmente, el caso de las compilaciones que no sean de lanzamiento
- generadas por herramientas de IDE y de compilación. Los anclajes de confianza especificados en {@code
- debug-overrides} se agregan a todas las demás configuraciones, y la fijación
- de certificados no se lleva a cabo cuando la cadena de certificados del servidor usa uno de estos
- anclajes de confianza de solo depuración. Si <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
- es {@code "false"}, entonces, esta sección se omite por completo.
- </dd>
-</dl>
-
-<h3 id="trust-anchors"><trust-anchors></h3>
-<dl class="xml">
- <dt>
- SINTAXIS:
- </dt>
-
- <dd>
- <pre class="stx">
-<trust-anchors>
-...
-</trust-anchors>
-</pre>
- </dd>
-
- <dt>
- PUEDE CONTENER:
- </dt>
-
- <dd>
- Cualquier cantidad de <code><a href="#certificates"><certificates></a></code>
- </dd>
-
- <dt>
- DESCRIPCIÓN:
- </dt>
-
- <dd>
- Conjunto de anclajes de confianza para conexiones seguras.
- </dd>
-</dl>
-
-
-<h3 id="certificates"><certificates></h3>
-<dl class="xml">
-<dt>SINTAXIS:</dt>
-<dd><pre class="stx"><certificates src=["system" | "user" | "<i>raw resource</i>"]
- overridePins=["true" | "false"] />
-</pre></dd>
-<dt>DESCRIPCIÓN:</dt>
-<dd>Conjunto de certificados X.509 para elementos de {@code trust-anchors}.</dd>
-
-<dt>ATRIBUTOS:</dt>
-<dd><dl class="attr">
-<dt>{@code src}</dt>
-<dd>
-La fuente de los certificados de CA puede ser una de las siguientes opciones:
-<ul>
- <li>Una ID de recurso sin procesar que apunta a un archivo que contiene certificados X.509.
- Los certificados deben estar codificados en formato DER o PEM. En el caso de los certificados
- PEM, el archivo <em>no debe</em> contener datos adicionales que no sean de PEM, como
- comentarios.
- </li>
-
- <li>{@code "system"} para los certificados de CA preinstalados del sistema.
- </li>
-
- <li>{@code "user"} para los certificados de CA agregados por el usuario.
- </li>
-</ul>
-</dd>
-
-<dt>{@code overridePins}</dt>
-<dd>
- <p>
- Especifica si las CA de esta fuente omiten la fijación de certificados. Si es {@code
-"true"}, las cadenas de certificados se encadenan mediante una de estas CA
- desde esta fuente, y la fijación no se lleva a cabo. Esto puede ser útil para CA de depuración
- o para poder permitirle al usuario hacer un ataque MiTM al tráfico seguro de la aplicación.
- </p>
-
- <p>
- Es {@code "false"} de forma predeterminada, a menos que se especifique en un elemento de {@code debug-overrides}
-, en cuyo caso, es {@code "true"} de forma predeterminada.
- </p>
-</dd>
-</dl>
-</dd>
-
-
-<h3 id="pin-set"><pin-set></h3>
-
-<dl class="xml">
- <dt>
- SINTAXIS:
- </dt>
-
- <dd>
-<pre class="stx">
-<pin-set expiration="date">
-...
-</pin-set>
-</pre>
- </dd>
-
- <dt>
- PUEDE CONTENER:
- </dt>
-
- <dd>
- Cualquier cantidad de <code><a href="#pin"><pin></a></code>
- </dd>
-
- <dt>
- DESCRIPCIÓN:
- </dt>
-
- <dd>
- Un conjunto de fijaciones de claves públicas. Para que una conexión segura sea de confianza, una de las
- claves públicas de la cadena de confianza debe estar en el conjunto de fijaciones. Consulta
- <code><a href="#pin"><pin></a></code> para el formato de las fijaciones.
- </dd>
-
- <dt>
- ATRIBUTOS:
- </dt>
-
- <dd>
- <dl class="attr">
- <dt>
- {@code expiration}
- </dt>
-
- <dd>
- La fecha, en formato {@code yyyy-MM-dd}, a partir de la cual
- expiran las fijaciones, lo cual deshabilita la fijación. Si el atributo no está establecido, las fijaciones
- no expiran.
- <p>
- La expiración ayuda a evitar problemas de conectividad en aplicaciones que no
- reciben actualizaciones para el conjunto de fijaciones, por ejemplo, porque el usuario
- deshabilitó las actualizaciones de la aplicación.
- </p>
- </dd>
- </dl>
- </dd>
-</dl>
-
-<h3 id="pin"><pin></h3>
-<dl class="xml">
- <dt>
- sintaxis:
- </dt>
-
- <dd>
-<pre class="stx">
-<pin digest=["SHA-256"]>base64 encoded digest of X.509
- SubjectPublicKeyInfo (SPKI)</pin>
-</pre>
- </dd>
-
- <dt>
- ATRIBUTOS:
- </dt>
-
- <dd>
- <dl class="attr">
- <dt>
- {@code digest}
- </dt>
-
- <dd>
- Resumen del algoritmo usado para generar la fijación. Actualmente, solo se admite
- {@code "SHA-256"}.
- </dd>
- </dl>
- </dd>
-</dl>
diff --git a/docs/html-intl/intl/es/preview/features/tv-recording-api.jd b/docs/html-intl/intl/es/preview/features/tv-recording-api.jd
deleted file mode 100644
index 855db8d..0000000
--- a/docs/html-intl/intl/es/preview/features/tv-recording-api.jd
+++ /dev/null
@@ -1,142 +0,0 @@
-page.title=Grabación de TV
-page.keywords=preview,sdk,tv,recording
-page.tags=androidn
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>En este documento</h2>
- <ol>
- <li><a href="#supporting">Indicar la compatibilidad para la grabación</a></li>
- <li><a href="#recording">Grabar una sesión</a></li>
- <li><a href="#errors">Gestionar los errores de grabación</a></li>
- <li><a href="#sessions">Gestionar las sesiones grabadas</a></li>
- <li><a href="#best">Prácticas recomendadas</a></li>
- </ol>
-</div>
-</div>
-
-<p>Los servicios de entrada de TV le permiten al usuario pausar y reanudar la reproducción de canales
-mediante API de time-shifting. Android N expande la función de time-shifting
- permitiéndoles a los usuarios guardar múltiples sesiones grabadas.</p>
-
-<p>Los usuarios pueden programar las grabaciones por adelantado o comenzar a grabar a la vez
-que miran un programa. Una vez que el sistema haya guardado una grabación, el usuario puede explorar, gestionar
-y reproducir las grabaciones usando la aplicación del sistema de TV.</p>
-
-<p>Si deseas brindar funcionalidades de grabación a tu servicio de entrada de TV,
-debes indicarle al sistema que tu aplicación permite la grabación, implementar
-la habilidad para grabar programas, gestionar y comunicar los errores que ocurren
-durante la grabación y gestionar las sesiones grabadas.</p>
-
-<p class="note"><strong>Nota:</strong> La aplicación Live Channels todavía no
- permite que los usuarios creen grabaciones ni accedan a estas. Hasta que se realicen
- cambios en la aplicación Live Channels, es posible que sea difícil probar completamente la
-experiencia de grabación para tu servicio de entrada de TV.</p>
-
-<h2 id="supporting">Indicar la compatibilidad para la grabación</h2>
-
-<p>Para comunicarle al sistema que tu servicio de entrada de TV permite la grabación, configura el
-atributo <code>android:canRecord</code> de tu archivo XML de metadatos de servicio
-en <code>true</code>:
-</p>
-
-<pre>
-<tv-input xmlns:android="http://schemas.android.com/apk/res/android"
- <b>android:canRecord="true"</b>
- android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />
-</pre>
-
-<p>Para obtener más información sobre el archivo de metadatos de servicio, consulta
-<a href="{@docRoot}training/tv/tif/tvinput.html#manifest">Declarar el servicio de entrada
- de TV en el manifiesto</a>.
-</p>
-
-<p>De forma alternativa, puedes indicar la compatibilidad para la grabación en tu código; para ello, sigue
- estos pasos:</p>
-
-<ol>
-<li>En el método <code>TvInputService.onCreate()</code>, crea un nuevo
-objeto <code>TvInputInfo</code> usando la clase <code>TvInputInfo.Builder</code>.
-</li>
-<li>Cuando crees el nuevo objeto <code>TvInputInfo</code>, llama a
-<code>setCanRecord(true)</code> antes de llamar a <code>build()</code> para
-indicar que tu servicio permite la grabación.</li>
-<li>Registra tu objeto <code>TvInputInfo</code> con el sistema llamando a
-<code>TvInputManager.updateTvInputInfo()</code>.</li>
-</ol>
-
-<h2 id="recording">Grabar una sesión</h2>
-
-<p>Luego de que el servicio de entrada de TV registra la compatibilidad
-con la funcionalidad de grabación, el sistema llama a tu
-<code>TvInputService.onCreateRecordingSession()</code> cuando necesita acceder
-a la implementación de grabación de tu aplicación. Implementa tu propia subclase
-<code>TvInputService.RecordingSession</code> y devuélvela
-cuando el callback de <code>onCreateRecordingSession()</code>
-se dispare. Esta subclase es responsable de cambiar a los datos del canal correcto,
-de grabar los datos solicitados y de comunicar el estado y los errores de grabación al
-sistema.</p>
-
-<p>Cuando el sistema llama a <code>RecordingSession.onTune()</code>, pasando en un
-URI de canal, sintoniza el canal que el URI especifica. Notifícale al sistema que tu
-aplicación se ha sintonizado al canal deseado llamando a <code>notifyTuned()</code>
-o, si tu aplicación no pudo sintonizarse al canal correcto, llama a
-<code>notifyError()</code>.</p>
-
-<p>El sistema invoca, a continuación, el callback <code>RecordingSession.onStartRecording()</code>.
- Tu aplicación debe comenzar a grabar inmediatamente. Cuando el sistema invoca
-este callback, puede brindar un URI que contiene información sobre el programa
-que se está por grabar. Cuando finaliza la grabación, debes copiar estos
-datos a la tabla de datos <code>RecordedPrograms</code>.</p>
-
-<p>Finalmente, el sistema llama a <code>RecordingSession.onStopRecording()</code>.
-En este momento, tu aplicación debe dejar de grabar inmediatamente. También debes crear
-una entrada en la tabla <code>RecordedPrograms</code>. Esta entrada debe
-incluir el URI de datos de la sesión grabada en la columna
-<code>RecordedPrograms.COLUMN_RECORDING_DATA_URI</code> y cualquier información
-del programa que el sistema haya brindado en la llamada inicial a
-<code>onStartRecording()</code>.</p>
-
-<p>Para obtener más información sobre cómo acceder a la tabla <code>RecordedPrograms</code>
-, consulta <a href="#sessions">Gestionar las sesiones grabadas</a>.</p>
-
-<h2 id="errors">Gestionar los errores de grabación</h2>
-
-<p>Si ocurre un error durante la grabación que hace que los datos grabados no se puedan usar,
-notifica al sistema llamando a<code>RecordingSession.notifyError()</code>.
-De forma similar, puedes llamar a <code>notifyError()</code> después de que se cree una sesión de grabación
-para que el sistema sepa que la aplicación ya no puede grabar sesiones.</p>
-
-<p>Si ocurre un error durante la grabación, pero deseas brindarle al usuario una grabación
-parcial usable para su reproducción, llama a
-<code>RecordingSession.notifyRecordingStopped()</code> para permitir que el sistema
-use la sesión parcial.</p>
-
-<h2 id="sessions">Gestionar las sesiones grabadas</h2>
-
-<p>El sistema mantiene información de todas las sesiones grabadas de todas
-las aplicaciones de canal con funcionalidad de grabación en la tabla de proveedor de contenido <code>TvContract.RecordedPrograms</code>
-. Esta información se accede mediante el URI de contenido
-<code>RecordedPrograms.Uri</code>. Usa API de proveedor de contenido para
-leer, agregar y borrar entradas de esta tabla.</p>
-
-<p>Para obtener más información sobre cómo trabajar con datos del proveedor de contenido, consulta
-<a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
-Conceptos básicos sobre el proveedor de contenido</a>.</p>
-
-<h2 id="best">Prácticas recomendadas</h2>
-
-<p>Los dispositivos de TV tienen un almacenamiento limitado, de modo que debes ser cuidadoso a la hora
-de asignar el almacenamiento para guardar las sesiones grabadas. Usa
-<code>RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)</code> cuando
-no haya espacio suficiente para guardar una sesión grabada.</p>
-
-<p>Cuando el usuario inicie la grabación, el registro de datos debe comenzar
-lo antes posible. Para facilitar este proceso, completa cualquier tarea anterior demandante,
-como acceder al espacio de almacenamiento y asignarlo, cuando el sistema invoque el
-callback <code>onCreateRecordingSession()</code>. Hacerlo te permite comenzar
-a grabar inmediatamente cuando el callback <code>onStartRecording()</code>
-se dispare.</p>
diff --git a/docs/html-intl/intl/es/preview/guide.jd b/docs/html-intl/intl/es/preview/guide.jd
deleted file mode 100644
index 9d12b57..0000000
--- a/docs/html-intl/intl/es/preview/guide.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="qv-wrapper">
- <div id="qv">
- <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/preview/index.jd b/docs/html-intl/intl/es/preview/index.jd
deleted file mode 100644
index c931270..0000000
--- a/docs/html-intl/intl/es/preview/index.jd
+++ /dev/null
@@ -1,131 +0,0 @@
-page.title=Android N Developer Preview
-page.tags="preview","developer"
-meta.tags="preview", "android"
-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">
- <div class="wrap" style="max-width:1100px;margin-top:0">
- <div class="cols dac-hero-content" style="padding-bottom:1em;">
-
- <div class="col-7of16 col-push-9of16" style="padding-left:2em">
- <h1 class="dac-hero-title">Android N Developer Preview</h1>
- <p class="dac-hero-description">
- ¡Prepárate para Android N!
- <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">
- <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>-->
- </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>
- </div>
- <div class="dac-section dac-small">
- <div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/resources"
- data-cardSizes="6x2"
- data-maxResults="6"></div>
- </div>
- </div>
-</section>
-
-<div id="useUpdatedTemplates" style="display:none" 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>
- </a>
- <ul class="dac-actions">
- <li class="dac-action">
- <a class="dac-action-link" href="https://developer.android.com/preview/bug">
- <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
- </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>
- 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"
- data-query="type:blog+tag:androidn+tag:featured, type:youtube+tag:androidn+tag:featured"
- data-sortOrder="-timestamp"
- data-cardSizes="6x6"
- data-items-per-page="6"
- data-maxResults="15"
- data-initial-results="3"></div>
-</div></section>
-
-<section class="dac-section dac-gray"><div class="wrap">
- <h1 class="dac-section-title">Recursos</h1>
- <div class="dac-section-subtitle">
- Información esencial para ayudarte a preparar tus aplicaciones para Android N.
- </div>
-
- <div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/more"
- data-cardSizes="6x6"
- data-items-per-page="6"
- data-maxResults="15"
- data-initial-results="6"></div>
-
- </div>
-</section>
-
diff --git a/docs/html-intl/intl/es/preview/license.jd b/docs/html-intl/intl/es/preview/license.jd
deleted file mode 100644
index 52643bc..0000000
--- a/docs/html-intl/intl/es/preview/license.jd
+++ /dev/null
@@ -1,145 +0,0 @@
-page.title=Contrato de licencia
-
-@jd:body
-
-<p>
-Para comenzar a usar la Android SDK Preview, debe aceptar los términos y las condiciones que se describen a continuación.
-Como se describe a continuación, tenga en cuenta que esta es una versión preliminar del Android SDK, que está sujeta a cambios y que usted utiliza bajo su cuenta y riesgo. La Android SDK Preview no es una versión estable y puede contener errores y defectos que pueden provocar daños graves a sus sistemas informáticos, dispositivos y datos.
-</p>
-
-<p>
-Este es el Contrato de licencia de la versión Android SDK Preview (el “Contrato de licencia”).
-</p>
-<div class="sdk-terms" style="height:auto;border:0;padding:0;width:700px">
-1. Introducción
-
-1.1 Se le otorga la licencia de la versión Android SDK Preview (denominada “Preview” en el Contrato de licencia y que incluye específicamente los archivos de sistema de Android, las API agrupadas y los archivos de biblioteca de la Preview, 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 realice de la Preview.
-
-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 “Compatible con Android” se refiere a cualquier implementación de Android que (i) cumpla con el documento Definición de compatibilidad de Android, disponible en el sitio web de compatibilidad de Android (http://source.android.com/compatibility) y que puede actualizarse esporádicamente; y (ii) apruebe satisfactoriamente la prueba de Compatibilidad con Android, "CTS” (en inglés, Android Compatibility Test Suite).
-
-1.4 “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 Preview, primero debe aceptar el Contrato de licencia. Si no acepta el Contrato de licencia, no podrá utilizar la Preview.
-
-2.2 Al hacer clic para aceptar o utilizar la Preview, por medio del presente, usted acepta los términos del Contrato de licencia.
-
-2.3 No puede utilizar la Preview ni aceptar el Contrato de licencia si tiene prohibido recibir la Preview 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 Preview.
-
-2.4 Si utilizará la Preview de forma interna, dentro de su empresa 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 usted no posee la autoridad requerida, no podrá aceptar el Contrato de licencia ni utilizar la Preview en representación de su empleador u otra entidad.
-
-3. Licencia de la Preview de Google
-
-3.1 Conforme a los términos de este contrato de licencia, Google le otorga una licencia limitada, con validez mundial, libre de regalías, no asignable, no exclusiva y sin la posibilidad de otorgar una sublicencia, para utilizar la Preview con el único propósito de desarrollar aplicaciones para ejecutar en implementaciones compatibles de Android.
-
-3.2 No puede utilizar esta Preview para desarrollar aplicaciones para otras plataformas (entre las que se incluyen implementaciones incompatibles de Android) o para desarrollar otro SDK. Desde luego, usted tiene la libertad para desarrollar aplicaciones para otras plataformas, entre las que se incluyen implementaciones incompatibles de Android, siempre y cuando esta Preview no se utilice con ese propósito.
-
-3.3 Usted acepta que Google o terceros poseen todos los derechos legales, títulos e intereses en relación con la Preview, incluidos derechos de propiedad intelectual que existan en esta. "Derechos de propiedad intelectual" hace referencia a todos los derechos de la ley de patentes, la ley de derechos de autor, la ley de secreto comercial, la ley de marca comercial y cualquier otro derecho de propiedad. Google se reserva todos los derechos que no se le otorguen expresamente.
-
-3.4 Usted no podrá utilizar la Preview 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 Preview ni de ninguna de sus partes; ni (b) cargar ninguna parte de la Preview 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 Preview con otro software, ni distribuir algún software o dispositivo que incorpore alguna parte de la Preview.
-
-3.5 El uso, la reproducción y la distribución de los componentes de la Preview 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 regla con respecto a dichas licencias de software de código abierto en virtud de todos los derechos otorgados y acepta abstenerte de realizar acción alguna que pudiera poner fin, suspender o violar dichos derechos.
-
-3.6 Acepta que la forma y la naturaleza de la Preview que proporciona Google pueden cambiar sin tener que brindarle aviso previo, y que las versiones futuras de la Preview pueden ser incompatibles con las aplicaciones desarrolladas en versiones anteriores de la Preview. Usted acepta que Google, generalmente a su entera discreción, puede dejar de proporcionarle a usted o a los demás usuarios (de forma permanente o temporal) la Preview (o cualquiera de sus funciones) sin previo aviso.
-
-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 quitará, ocultará o alterará ninguna de las notificaciones de derechos de autor (entre las que se incluyen las notificaciones de copyright y marcas comercias) que pudieran estar anexadas o implícitas en la Preview.
-
-4. Uso que usted realiza de la Preview
-
-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 Preview, lo que incluye los derechos de propiedad intelectual que conlleven esas aplicaciones.
-
-4.2 Usted acepta utilizar la Preview 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 y pertinentes en las jurisdicciones relevantes (entre las que se incluyen 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 Preview 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 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 Preview, usted reconoce que la implementación de algunas características aún se encuentra en desarrollo y que no debe confiar en que la Preview contará con todas las funcionalidades de una versión estable. Usted acepta no distribuir públicamente ni enviar ninguna aplicación que utilice esta Preview, dado que esta Preview ya no se admitirá tras el lanzamiento del Android SDK oficial.
-
-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 pudiera escoger usted mismo, 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 Con el objetivo de poder innovar y mejorar de forma continua la Preview, Google podría recopilar ciertas estadísticas de uso del software, entre las que se incluyen, de forma enunciativa, 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 Preview que se estén utilizando y la manera en que se estén utilizando. Antes de que se recopile esta información, la Preview 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 Preview 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 Preview 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 el permiso específico 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 con base 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 cualquier 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 cuando, y para 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 Preview y de las credenciales de desarrollador pertinentes.
-
-9.3 Google puede, en cualquier momento, rescindir el Contrato de licencia, con causa o sin ella, luego de notificárselo.
-
-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 Preview 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 Android SDK.
-
-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 Preview, 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 PREVIEW ES BAJO SU PROPIO RIESGO Y QUE LA PREVIEW 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 PREVIEW Y DE TODO MATERIAL DESCARGADO U OBTENIDO DE ALGUNA OTRA MANERA MEDIANTE EL USO DE LA PREVIEW 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 otorgadas 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>
\ No newline at end of file
diff --git a/docs/html-intl/intl/es/preview/overview.jd b/docs/html-intl/intl/es/preview/overview.jd
deleted file mode 100644
index dc42175..0000000
--- a/docs/html-intl/intl/es/preview/overview.jd
+++ /dev/null
@@ -1,440 +0,0 @@
-page.title=Información general del programa
-page.metaDescription=Prepara tus aplicaciones para la próxima versión de Android.
-page.image=images/cards/card-n-overview_2x.png
-meta.tags="preview", "developer", "android"
-page.tags="preview", "developer", "android"
-
-@jd:body
-<!--
-<div class="cols" style=
-"background-color:#f2daf5; padding: 5px 0;margin-bottom:1em; text-align:center;">
-<h3>
- Developer Preview 3 is now available
- </h3>
- <p>Includes final SDK and near-final system images</p>
- <div style="margin:auto 1em">
- <ul class="dac-section-links">
- <li class="dac-section-link">
- <a href="{@docRoot}preview/support.html#preview3-notes">
- <span class="dac-sprite dac-auto-chevron"></span>
- Read the Notes</a>
- </li>
-
- <li class="dac-section-link">
- <a href="{@docRoot}preview/support.html#preview3-get">
- <span class="dac-sprite dac-auto-chevron"></span>
- Get the Update</a>
- </li>
-
- <li class="dac-section-link">
- <a href="https://code.google.com/p/android-developer-preview/">
- <span class="dac-sprite dac-auto-chevron"></span>
- Report Issues</a>
- </li>
- </ul>
- </div>
-</div>
--->
-
-<p>
- Bienvenido a <strong>Android N Developer Preview</strong>, un programa en el que
- se ofrece todo lo que necesitas a fin de probar y optimizar tus aplicaciones para la próxima
- versión de Android. Es gratis, y puedes comenzar
- descargando las herramientas de la N Developer Preview.
-</p>
-
-
-
-
-
-
-
-<div style="background-color:#eceff1;padding:1em;">
-<div class="wrap">
- <div class="cols">
- <div class="col-4of12">
- <h5>
- Imágenes de hardware y emuladores
- </h5>
-
- <p>
- Ejecuta y prueba tus aplicaciones en varios dispositivos o en un emulador.
-
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- El código de plataforma más reciente
- </h5>
-
- <p>
- Durante el programa de muestra, ofreceremos varias actualizaciones mensuales. De esta manera, realizarás la prueba con los últimos cambios de la plataforma.
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- Prioridad para problemas de desarrolladores
- </h5>
-
- <p>
- Durante las primeras semanas, daremos prioridad a los problemas informados por los desarrolladores;
- por lo tanto, debes realizar las pruebas y enviar tus comentarios lo antes posible.
- </p>
- </div>
-
- </div>
-
- <div class="cols">
-
-
- <div class="col-4of12">
- <h5>
- Capacidades y comportamientos nuevos
- </h5>
-
- <p>
- Comienza a trabajar temprano para admitir los comportamientos de la nueva plataforma y realizar desarrollos con nuevas funciones.
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- Actualizaciones inalámbricas
- </h5>
-
- <p>
- Actualizaciones inalámbricas sin inconvenientes para dispositivos admitidos a través
- del Programa de Android Beta. No se requieren actualizaciones.
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- Comentarios y soporte
- </h5>
-
- <p>
- Infórmanos los problemas y envíanos comentarios a través de nuestro
- <a href="{@docRoot}preview/bug">seguimiento de problemas</a>. Conéctate con otros
- desarrolladores en la
- <a href="{@docRoot}preview/dev-community">comunidad de desarrolladores de Android N</a>.
- </p>
- </div>
- </div>
-</div>
-</div>
-
-<!--
-<p>New in the Android N Developer Preview: </p>
-
-<ul>
- <li> Accompanying Android Beta Program for consumers, starting later in the preview</li>
- <li> More supported devices, including devices from OEM partners</li>
- <li> Seamless OTAs for your devices, from initial release to final N release without flashing</li>
-</ul>
--->
-
-<h2 id="timeline">Escala de tiempo y actualizaciones</h2>
-<img src="{@docRoot}images/n-preview-updates_2x.png">
-
-<p>
- La N Developer Preview rige desde el 9 de marzo de 2016 hasta el lanzamiento público
- de Android N para AOSP y OEM, previsto para el tercer trimestre de 2016.
-</p>
-
-<p>
- En las versiones "milestone" del desarrollo, lanzaremos actualizaciones para tu entorno de pruebas y desarrollo.
- En general, podrás contar con una actualización por mes (intervalo de 4 a 6
- semanas). A continuación, se muestran las versiones "milestone":
-</p>
-
-<ul>
- <li><strong><a href="{@docRoot}preview/support.html#dp1">Preview 1</a></strong> (versión inicial, alpha);</li>
- <li><strong><a href="{@docRoot}preview/support.html#dp2">Preview 2</a></strong> (actualización gradual, alpha);</li>
- <li><strong><a href="{@docRoot}preview/support.html#dp3">Preview 3</a></strong> (actualización gradual, beta);</li>
- <li><strong>Preview 4</strong> (API finales y SDK oficial, publicación en Google Play);</li>
- <li><strong>Preview 5</strong> (imágenes de sistema casi definitivas para pruebas finales);</li>
- <li><strong>Lanzamiento de la versión final</strong> para AOSP y el ecosistema.</li>
-</ul>
-
-<p>
- En cada actualización se incluyen herramientas de SDK, imágenes de sistema de Preview, emuladores, documentación de referencia y diferencias de API.
-
-</p>
-
-<p>
- En las primeras <strong>tres versiones "milestone" de Preview</strong>, se proporciona un <strong>entorno
- de prueba y desarrollo tempranos</strong> que te permitirá identificar
- problemas de compatibilidad en tus aplicaciones actuales y planificar tareas relacionadas con la migración o las funciones que se necesitan
- para orientar la nueva plataforma. Este será el período de prioridad
- en el cual nos enviarás tus comentarios sobre funciones y problemas de compatibilidad de API y archivos;
- para hacerlo, usa el <a href="{@docRoot}preview/bug">sistema se seguimiento
- de problemas.</a> Podrás contar con cambios en las API en estas actualizaciones.
-</p>
-
-<p>
- En <strong>Preview 4 y 5</strong>, tendrás acceso a las <strong>API y al SDK finales
- de Android N</strong> para tareas de desarrollo, y también a imágenes de sistema casi definitivas
- para poner a prueba comportamientos y funciones del sistema. Durante este período, Android N ofrecerá un nivel
- de API estándar. Puedes iniciar la prueba de compatibilidad de tus aplicaciones
- heredadas y optimizar el código nuevo en el que se usen las API o funciones de Android N.
-</p>
-
-<p>
- A su vez, a partir de Preview 4, podrás <strong>publicar aplicaciones en
- dispositivos</strong> con Android N cuyo nivel de API sea el oficial (por ejemplo, dispositivos de
- consumidores inscritos en el Programa de Android Beta). Puedes
- realizar primero publicaciones en los canales alpha y beta de Google Play, para probar
- tus aplicaciones con consumidores de Android Beta antes de proceder con la distribución a gran escala en la
- tienda.
-</p>
-
-<p>
- A medida que pruebas y desarrollas en Android N, te recomendamos que <strong>mantengas
- tu entorno de desarrollo actualizado</strong> conforme se lanzan
- las actualizaciones de Preview. Para facilitar el proceso, puedes registrar tus dispositivos de prueba en el
- Programa de Android Beta y obtener <strong>actualizaciones inalámbricas</strong> en cada
- versión "milestone". Como alternativa, habrá imágenes de Preview actualizadas disponibles que puedes
- descargar y actualizar de manera manual.
-</p>
-
-<p>
- Cuando haya actualizaciones de Preview disponibles, te informaremos a través del <a href="http://android-developers.blogspot.com/">blog para desarrolladores de Android</a>, de este sitio y
- de la <a href="{@docRoot}preview/dev-community">Comunidad de desarrolladores de
- Android N</a>.
-</p>
-
-
-<h2 id="preview_tools">¿Qué es la N Developer Preview?</h2>
-
-<p>
- En la N Developer Preview se incluye todo lo que necesitas para probar tus aplicaciones
- existentes con diferentes tamaños de pantalla, tecnologías de red, chipsets de CPU y GPU,
- y arquitecturas de hardware.
-</p>
-
-<h3 id="sdk_tools">Herramientas del SDK</h3>
-
-<p>Puedes descargar todos estos componentes a través de SDK Manager en <a href="{@docRoot}studio/intro/update.html">Android Studio</a>:</p>
-
-<ul>
- <li> <strong>SDK y herramientas</strong> de la N Developer Preview;
- <li> <strong>imagen del sistema para el emulador</strong>de la N Developer Preview (32 y 64 bits);
- <li> <strong>imagen del sistema para el emulador para Android TV</strong> (32 bits) de la N Developer Preview;
- <li> bibliotecas de compatibilidad de la N Developer Preview (para nuevas plantillas de aplicaciones).
-</ul>
-
-<p>
- Ofreceremos actualizaciones para estas herramientas de desarrollo en cada momento clave (versión "milestone") según sea necesario.
-</p>
-
-<h3 id="hardware_system_images">Imágenes de sistema de hardware</h3>
-
-<p>
- En la N Developer Preview se incluyen, entre otras, imágenes de sistema del hardware de Nexus que puedes usar al
- realizar pruebas y desarrollos en dispositivos físicos. Consulta la sección de <a href="{@docRoot}preview/download.html">imágenes de sistema</a> para encontrar la lista
- completa de imágenes de hardware.
-</p>
-
-<p>
- Ofreceremos imágenes de sistema actualizadas para estos dispositivos en cada versión "milestone". Puedes
- descargar y actualizar manualmente las imágenes de sistema renovadas en tus dispositivos
- de prueba con la frecuencia que desees. Esto resulta particularmente útil para entornos de prueba
- automatizados en los cuales probablemente debas volver a actualizar tu dispositivo varias
- veces.
-</p>
-
-<p class="note"><strong>Nota</strong>:
- <strong>Los dispositivos actualizados de manera manual no recibirán actualizaciones inalámbricas</strong>, como en
- la Preview del año pasado. Este año, podrás recibir actualizaciones inalámbricas registrando dispositivos en el
- Programa de Android Beta. Consulta la sección siguiente para obtener información detallada.
-</p>
-
-<h3 id="android_beta">Actualizaciones inalámbricas a través del Programa de Android Beta</h3>
-
-<p>
- Como novedad en Android N, se ofrece un programa de actualización inalámbrica que
- proporciona las últimas actualizaciones de Android N directamente para dispositivos registrados
- en él. Es gratuito y está pensado para quienes tengan
- dispositivos compatibles registrados en sus cuentas de Google.
-</p>
-
-<p>
- Para el registro, visita el sitio del <a href="https://g.co/androidbeta">Programa de Android
- Beta</a>. En él,
- verás todos los dispositivos registrados en tu cuenta que cumplen con los requisitos para registrarse
- en el programa.
-</p>
-
-<ol>
- <li> Selecciona los dispositivos para los que deseas recibir actualizaciones de Android N
- <li> Haz clic en Registrar, lee y acepta las condiciones de servicio y luego haz clic en Aceptar
-</ol>
-
-<p>
- Una vez que realices el registro, tu dispositivo recibirá pronto una actualización. En la mayoría de los casos,
- no necesitarás restablecer por completo tus datos para la migración a Android N, pero
- te recomendamos crear una copia de seguridad de los datos que no desees perder antes de
- registrar el dispositivo.
-</p>
-
-<p>
- A medida que tu dispositivo reciba actualizaciones, te recomendamos descargarlas e
- instalarlas lo más pronto posible. Te convendrá mantenerte actualizado respecto de las
- últimas modificaciones en la IU, el comportamiento, las API y las funciones del sistema.
-</p>
-
-<p>
- Al finalizar la Developer Preview, tus dispositivos registrados
- recibirán una actualización a la versión oficial de Android N.
-</p>
-
-<p>
- Puedes dar de baja tus dispositivos del Programa de Android Beta en cualquier momento desde
- el sitio de Android Beta. Antes de hacerlo, no te olvides de realizar una copia de respaldo de los datos
- de tu dispositivo.
-</p>
-
- <p class="note"><strong>Nota</strong>:
- Cuando des de baja tu dispositivo, <strong>
- se someterá a un restablecimiento de fábrica</strong> a través del que se cargará la última versión de
- Android 6.0 Marshmallow (no necesariamente la versión
- instalada antes del registro). Para garantizar que la instalación sea nueva, se borrarán
- tus datos del dispositivo; entre otros, los contactos,
- los mensajes y las fotos.
-</p>
-
-<h3 id="documentation_and_sample_code">Documentación y ejemplo de código</h3>
-
-<p>
- Los siguientes recursos de documentación se encuentran disponibles en el sitio de Developer Preview y con ellos
- podrás obtener información sobre Android N:
-</p>
-
-<ul>
- <li> <a href="{@docRoot}preview/setup-sdk.html">Preparación para el desarrollo con
- Android N</a>: contiene
- instrucciones paso a paso para comenzar.</li>
- <li> En <a href="{@docRoot}preview/behavior-changes.html">Cambios en los
- comportamientos</a> se indican áreas clave que debes probar.</li>
- <li> Documentación de nuevas API, entre la que se incluye <a href="{@docRoot}preview/api-overview.html">Información general de API</a>, una <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referencia
- de API</a> descargable
- y guías exhaustivas para desarrolladores que muestran, por ejemplo, soporte
- de múltiples ventanas, notificaciones integradas, soporte de múltiples configuraciones regionales y mucho más.
- <li> <a href="{@docRoot}preview/samples.html">Ejemplo de código</a>, en el que se
- demuestra la manera de admitir permisos y otras funciones nuevas.
- <li> <a href="{@docRoot}preview/support.html#release-notes">Notas de la versión</a>
- sobre la versión actual de la N Developer Preview. Se incluyen notas sobre los cambios e informes
- de diferencias.
-</ul>
-
-<h4 id="reference">Referencia de la API descargable</h4>
-
-<p>
- Durante las actualizaciones de Preview, puedes descargar la <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referencia de la API más reciente
- para la plataforma de Android N</a> en forma de
- archivo .zip independiente. En esta descarga
- también se incluye un informe de diferencias que te permite identificar cambios en la API en comparación con la
- API 23 y la actualización anterior.
-</p>
-
-<p>
- Cuando las API de Android N sean definitivas y se asigne el nivel de API oficial,
- te proporcionaremos la referencia de la API en línea en <a href="https://developer.android.com">https://developer.android.com</a>.
-</p>
-
-<h3 id="support_resources">
- Recursos de soporte
-</h3>
-
-<p>
- A medida que realices pruebas y desarrollos con la N Developer Preview, recurre a los siguientes canales
- para informar problemas y enviar comentarios.
-</p>
-
-<ul>
- <li> <a href="https://code.google.com/p/android-developer-preview/">El sistema de seguimiento de problemas
- de la N Developer Preview</a> es el canal <strong>principal para comentarios.</strong> A través de él, puedes informar errores y
- problemas de rendimiento, y enviar comentarios generales. También puedes buscar
-<a href="{@docRoot}preview/bugs">problemas conocidos</a> y
- encontrar pasos para solucionarlos. Te mantendremos informado sobre tu problema durante el proceso de evaluación y
- derivación al equipo de ingeniería de Android para su resolución. </li>
- <li> La <a href="{@docRoot}preview/dev-community">comunidad de desarrolladores de Android N</a> es
- una comunidad de Google+ en la que puedes <strong>conectarte con otros desarrolladores</strong> que trabajen con
- Android N. Puedes compartir observaciones o ideas, o encontrar respuestas a
- preguntas acerca de Android N. Moderaremos la comunidad y proporcionaremos respuestas y
- orientación según sea necesario.</li>
-</ul>
-
-<h3 id="targeting">Orientación, API de la Preview y publicación</h3>
-
-<p>
- En la N Developer Preview se proporciona un sistema exclusivo para desarrollo y una
- biblioteca de Android <strong>cuyo nivel de API no es estándar</strong>. Si deseas
- no incluir comportamientos de compatibilidad para probar tu aplicación (un proceso muy
- recomendado), puedes orientar la versión Android N Preview fijando el valor
- de <code><a href=
- "{@docRoot}preview/setup-sdk.html#create-update">targetSdkVersion</a></code> de tu aplicación
- en <code>“N”</code>.
-</p>
-
-<p>
- Android N Developer Preview ofrece las <strong>API de Preview</strong>
- , que no serán oficiales hasta el lanzamiento de la versión definitiva de SDK,
- actualmente previsto para el tercer trimestre de 2016. Esto significa que podrás
- <strong>contar con cambios menores en las API</strong> conforme pase el tiempo, en especial durante
- las primeras semanas del programa. Te proporcionaremos un resumen de cambios con
- cada actualización de Android N Developer Preview.
-</p>
-
-<p class="note">
- <strong>Nota</strong>: Aunque las API de Preview pueden modificarse, los comportamientos del sistema
- subyacente permanecen estables y disponibles para cualquier prueba
- inmediata.
-</p>
-
-<p>
- Google Play <strong>evita la publicación de aplicaciones orientadas a la N Developer
- Preview</strong>. Cuando esté disponible el SDK definitivo de Android N, podrás
- apuntar hacia el nivel de API oficial de Android N y publicar tu aplicación en Google
- Play a través de los canales para versiones alpha y beta. Mientras tanto, si deseas
- distribuir una aplicación orientada a Android N para testers, puedes hacerlo por correo electrónico o
- mediante descarga directa desde tu sitio.
-</p>
-
-<p>
- Cuando se lance la versión completa de Android N para AOSP y OEM, evento previsto para el tercer trimestre de 2016,
- podrás publicar tus aplicaciones orientadas a Android N en el canal de lanzamientos
- públicos de Google Play.
-</p>
-
-
-<h2 id="how_to_get_started">Comenzar</h2>
-
-<p>
- Para comenzar a probar tu aplicación con Android N:
-</p>
-
-<ol>
- <li> Revisa 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> para
- conocer las novedades y el efecto que tienen en tus aplicaciones. En particular,
- procura obtener información sobre las nuevas funciones de <a href="{@docRoot}preview/features/notification-updates.html">notificaciones</a> y
- la <a href="{@docRoot}preview/features/multi-window.html">compatibilidad con ventanas múltiples</a>.</li>
- <li> Configura tu entorno siguiendo las instrucciones para <a href="{@docRoot}preview/setup-sdk.html">configurar el SDK Preview</a>
- y los dispositivos de prueba.</li>
- <li> Sigue las <a href="https://developers.google.com/android/nexus/images">instrucciones de
- actualización</a> a fin de usar la última imagen de sistema de Android N para tu dispositivo. </li>
- <li> Revisa la <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referencia de la API</a>
- y los <a href="{@docRoot}preview/samples.html">Ejemplos de Android N</a> para obtener más
- información sobre las nuevas funciones de la API y la manera de usarlas en tu aplicación.
- <li> Únete a la <a href="{@docRoot}preview/dev-community">comunidad de
- desarrolladores de Android N</a> para recibir las últimas noticias y para contactarte con otros
- desarrolladores que estén trabajando con la nueva plataforma.</li>
-</ol>
-
-<p>
- ¡Te agradecemos por participar de la Android N Developer Preview!
-</p>
diff --git a/docs/html-intl/intl/es/preview/preview_toc.cs b/docs/html-intl/intl/es/preview/preview_toc.cs
deleted file mode 100644
index 6c98c2f..0000000
--- a/docs/html-intl/intl/es/preview/preview_toc.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-<ul id="nav">
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/overview.html" es-lang="Información general del programa" in-lang="Ikhtisar Program" ja-lang="プログラム概要" ko-lang="프로그램 개요" pt-br-lang="Visão geral do programa" ru-lang="Обзор программы" vi-lang="Tổng quan về Chương trình" zh-cn-lang="计划概览" zh-tw-lang="程式總覽">Información general del programa</a></div>
- </li>
-
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/support.html">Compatibilidad y notas de la versión</a></div>
- </li>
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/setup-sdk.html" es-lang="Configurar el SDK de la versión preliminar" in-lang="Menyiapkan Preview" ja-lang="Preview SDK のセットアップ" ko-lang="미리 보기 SDK 설정하기" pt-br-lang="Configuração do Preview SDK" ru-lang="Настройка пакета SDK Preview" vi-lang="Kiểm thử trên Thiết bị" zh-cn-lang="设置预览版 SDK" zh-tw-lang="設定預覽版 SDK">Configuración de Preview</a></div>
- </li>
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/download.html" es-lang="Pruebe en un dispositivo" in-lang="Menguji pada Perangkat" ja-lang="デバイス上でテストする" ko-lang="기기에서 테스트" pt-br-lang="Testar em um dispositivo" ru-lang="Тестирование на устройстве" vi-lang="Kiểm thử trên Thiết bị" zh-cn-lang="在设备上测试" zh-tw-lang="在裝置上測試">Prueba en un dispositivo</a></div>
- </li>
-
-
- <li class="nav-section">
- <div class="nav-section-header"><a href="<?cs var:toroot ?>preview/behavior-changes.html" es-lang="Cambios en los comportamientos" in-lang="Perubahan Perilaku" ja-lang="動作の変更点" ko-lang="동작 변경" pt-br-lang="Mudanças de comportamento" ru-lang="Изменения в работе" vi-lang="Các thay đổi Hành vi" zh-cn-lang="行为变更" zh-tw-lang="行為變更">Cambios en los comportamientos</a></div>
- <ul>
- <li><a href="<?cs var:toroot ?>preview/features/background-optimization.html" es-lang="Optimizaciones en segundo plano" in-lang="Optimisasi Latar Belakang" ja-lang="バックグラウンド処理の最適化" ko-lang="백그라운드 최적화" pt-br-lang="Otimizações em segundo plano" ru-lang="Оптимизация фоновых процессов" vi-lang="Tối ưu hóa Chạy ngầm" zh-cn-lang="后台优化" zh-tw-lang="背景最佳化">Optimizaciones en segundo plano</a></li>
- <li><a href="<?cs var:toroot ?>preview/features/multilingual-support.html" es-lang="Idioma y configuración regional" in-lang="Bahasa dan Lokal" ja-lang="言語とロケール" ko-lang="언어 및 로케일" pt-br-lang="Idioma e localidade" ru-lang="Язык и языковой стандарт" vi-lang="Ngôn ngữ và Bản địa" zh-cn-lang="语言和区域设置" zh-tw-lang="語言和地區設定">Idioma y configuración regional</a></li>
- </ul>
- </li>
-
- <li class="nav-section">
- <div class="nav-section-header"><a href="<?cs var:toroot ?>preview/api-overview.html" es-lang="Información general de la API" in-lang="Android N untuk Pengembang" ja-lang="API の概要" ko-lang="API 개요" pt-br-lang="Visão geral da API" ru-lang="Обзор API-интерфейсов" vi-lang="Android N cho Nhà phát triển" zh-cn-lang="API 概览" zh-tw-lang="API 總覽">Android N for Developers </a></div>
- <ul>
-
- <li><a href="<?cs var:toroot ?>preview/features/multi-window.html" es-lang="Compatibilidad con ventanas múltiples" in-lang="Dukungan Multi-Jendela" ja-lang="マルチ ウィンドウのサポート" ko-lang="다중 창 지원" pt-br-lang="Suporte a várias janelas" ru-lang="Поддержка многооконного режима" vi-lang="Hỗ trợ đa cửa sổ" zh-cn-lang="多窗口支持" zh-tw-lang="多視窗支援">Compatibilidad con ventanas múltiples</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/notification-updates.html" es-lang="Notificaciones" in-lang="Pemberitahuan" ja-lang="通知" ko-lang="알림" pt-br-lang="Notificações" ru-lang="Уведомления" vi-lang="Thông báo" zh-cn-lang="通知" zh-tw-lang="通知">Notificaciones</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/data-saver.html">Ahorro de datos</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/tv-recording-api.html" es-lang="Grabación de TV" in-lang="Perekaman TV" ja-lang="TV の録画" ko-lang="TV 녹화" pt-br-lang="Gravação para TV" ru-lang="Запись ТВ" vi-lang="Ghi lại TV" zh-cn-lang="TV 录制" zh-tw-lang="電視錄製">Grabación de TV</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/security-config.html" es-lang="Configuración de seguridad de la red" in-lang="Network Security Configuration" ja-lang="ネットワーク セキュリティ構成" ko-lang="네트워크 보안 구성" pt-br-lang="Configurações de segurança de rede" ru-lang="Конфигурация сетевой безопасности" vi-lang="Cấu hình Bảo mật mạng" zh-cn-lang="网络安全配置" zh-tw-lang="網路安全性設定">Configuración de seguridad de la red</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/icu4j-framework.html" es-lang="API de ICU4J del framework de Android" in-lang="ICU4J Android Framework API" ja-lang="ICU4J Android フレームワーク API" ko-lang="ICU4J Android 프레임워크 API" pt-br-lang="APIs de estrutura do Android para ICU4J" ru-lang="API-интерфейсы ICU4J в платформе Android" vi-lang="API Khuôn khổ Android ICU4J" zh-cn-lang="ICU4J Android 框架 API" zh-tw-lang="ICU4J Android 架構 API">Compatibilidad con ICU4J</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/j8-jack.html" es-lang="Funciones del lenguaje Java 8" in-lang="Fitur Bahasa Java 8" ja-lang="Java 8 の機能" ko-lang="Java 8 언어 기능" pt-br-lang="Recursos de linguagem do Java 8" ru-lang="Возможности языка Java 8" vi-lang="Tính năng của Ngôn ngữ Java 8" zh-cn-lang="Java 8 语言功能" zh-tw-lang="Java 8 語言功能">Funciones del lenguaje Java 8</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/afw.html">Actualizaciones para Android for Work</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/scoped-folder-access.html" es-lang="Acceso a directorios determinados" in-lang="Scoped Directory Access" ja-lang="特定のディレクトリへのアクセス" ko-lang="범위가 지정된 디렉터리 액세스" pt-br-lang="Acesso a diretórios com escopo" ru-lang="Доступ к выделенным каталогам" vi-lang="Truy cập Thư mục theo Phạm vi" zh-cn-lang="作用域目录访问" zh-tw-lang="限定範圍目錄存取">Acceso a directorios determinados</a></li>
- </ul>
- </li>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/samples.html" es-lang="Ejemplos" in-lang="Contoh" ja-lang="サンプル" ko-lang="샘플" pt-br-lang="Exemplos" ru-lang="Примеры" zh-cn-lang="示例" zh-tw-lang="範例">Ejemplos</a></div>
- </li>
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/license.html" es-lang="Contrato de licencia" ja-lang="使用許諾契約" ko-lang="라이선스 계약" pt-br-lang="Contrato de licença" ru-lang="Лицензионное соглашение" zh-cn-lang="许可协议" zh-tw-lang="授權協議">Contrato de licencia</a></div>
- </li>
-
-</ul>
\ No newline at end of file
diff --git a/docs/html-intl/intl/es/preview/samples.jd b/docs/html-intl/intl/es/preview/samples.jd
deleted file mode 100644
index 204d11a..0000000
--- a/docs/html-intl/intl/es/preview/samples.jd
+++ /dev/null
@@ -1,85 +0,0 @@
-page.title=Ejemplos
-page.tags="preview", "samples", "android"
-page.image=images/cards/card-n-samples_2x.png
-@jd:body
-
-<p>
- Los siguientes ejemplos de código se proporcionan para Android N. Para
- descargarlos en Android Studio, selecciona la opción de menú <b>File > Import
- Samples</b>.
-</p>
-
-<p class="note">
- <strong>Nota:</strong> Estos proyectos que se pueden descargar están diseñados
- para su uso con Gradle y Android Studio.
-</p>
-
-
-<h3 id="mw">“Área de juegos” de ventanas múltiples</h3>
-<img src="{@docRoot}preview/images/sample-multiwindow.png" style="float: left; padding-right: 0.5em" height="250" width="156" />
-<p>
- En este ejemplo se muestra la manera de aprovechar interfaces de usuario
- de ventanas múltiples con tu aplicación.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-MultiWindowPlayground">
-Obtener en GitHub</a>
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="an">Notificaciones activas</h3>
-<img src="{@docRoot}preview/images/sample-activenotifications.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
-<p>
- Este es un ejemplo preexistente en el cual se muestra un servicio simple que envía
- notificaciones con NotificationCompat. Cada conversación no leída
- se envía como una notificación diferente.
-</p>
-<p>
- Este ejemplo se actualizó para aprovechar nuevas funciones de notificación
- disponibles en Android N.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-ActiveNotifications">
-Obtener en GitHub</a>
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="ms">Servicio de mensajería</h3>
-<img src="{@docRoot}preview/images/sample-messagingservice.png" style="float: left; padding-right: 0.5em" height="250" width="150" />
-<p>
- Este es un ejemplo preexistente en el que se demuestra la manera de usar
- NotificationManager para indicar la cantidad de notificaciones que se aparecen actualmente en una
- aplicación.
-</p>
-<p>
- Este ejemplo se actualizó para aprovechar nuevas funciones de notificación
- disponibles en Android N.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-MessagingService">
-Obtener en GitHub</a>
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="fbe">Inicio directo</h3>
-<img src="{@docRoot}preview/images/sample-directboot.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
-<p>
- En este ejemplo se demuestra la manera de almacenar datos, y de acceder a ellos, en un medio de almacenamiento encriptado por
- dispositivo que esté siempre disponible mientras el dispositivo se haya iniciado.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-DirectBoot">
-Obtener en GitHub</a>
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="sda">Acceso a directorios determinados</h3>
-<img src="{@docRoot}preview/images/sample-scopeddirectoryaccess.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
-<p>
- En este ejemplo se demuestra la manera de leer y escribir datos de
- directorios específicos y, al mismo tiempo, evitar más permisos.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-ScopedDirectoryAccess">
-Obtener en GitHub</a>
-</p>
\ No newline at end of file
diff --git a/docs/html-intl/intl/es/preview/setup-sdk.jd b/docs/html-intl/intl/es/preview/setup-sdk.jd
deleted file mode 100644
index 51260bb..0000000
--- a/docs/html-intl/intl/es/preview/setup-sdk.jd
+++ /dev/null
@@ -1,187 +0,0 @@
-page.title=Configuración de Preview
-meta.keywords="preview", "android"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-sdk_2x.png
-
-@jd:body
-
-
-<div id="qv-wrapper">
- <div id="qv">
-<ol>
- <li><a href="#get-as13">Obtener Android Studio 2.1</a></li>
- <li><a href="#get-sdk">Obtener el SDK de Android N</a>
- <ol>
- <li><a href="#docs-dl">Documentación de referencia</a>
- </ol>
- </li>
- <li><a href="#java8">Obtener el JDK de Java 8</a></li>
- <li><a href="#create-update">Actualizar o crear un proyecto</a></li>
- <li><a href="#next">Próximos pasos</a></li>
-</ol>
- </div>
-</div>
-
-<p>A fin de desarrollar aplicaciones para la Android N Preview, debes aplicar algunas actualizaciones
-a tu entorno de desarrollo, como se describe en esta página.</p>
-
-<p>Para solo probar la compatibilidad de tu aplicación en la
-imagen de sistema de Android N, sigue la guía de <a href="{@docRoot}preview/download.html">Prueba en un dispositivo Android N</a>.</p>
-
-<img src="{@docRoot}preview/images/n-preview-setup.png" width="700" alt="" />
-
-
-<h2 id="get-as13">Obtener Android Studio 2.1</h2>
-
-<p>La plataforma de Android N agrega compatibilidad para <a href="{@docRoot}preview/j8-jack.html">funciones de lenguaje de Java 8</a>,
- que requieren un nuevo compilador llamado Jack. La última versión de Jack
-actualmente solo es compatible con Android Studio 2.1. Por lo tanto, si deseas
-usar funciones de lenguaje de Java 8, debes usar Android Studio 2.1 para
-crear tu aplicación. De lo contrario, no necesitarás el compilador Jack, pero
-deberás aplicar una actualización a JDK 8 para compilar tu proyecto en función a la plataforma de Android N,
-según lo descrito a continuación.</p>
-
-<p>Si ya cuentas con Android Studio, cerciórate de que tienes Android
-Studio 2.1 o una versión anterior haciendo clic en <strong>Help > Check for Update</strong>
-(en Mac, <strong>Android Studio > Check for Updates</strong>).</p>
-
-<p>Si no cuentas con él, <a href="{@docRoot}studio/">descarga Android Studio
-2.1 aquí</a>.</p>
-
-
-<h2 id="get-sdk">Obtener el N Preview SDK</h2>
-
-<p>Para comenzar a desarrollar proyectos con las API de Android N, debes instalar el
-Android N Preview SDK en Android Studio de la siguiente manera:</p>
-
-<ol>
- <li>Abre el Administrador de SDK haciendo clic en <strong>Tools > Android >
- SDK Manager</strong>.</li>
-
- <li>En la pestaña <strong>SDK Platforms</strong>, selecciona la
- casilla de verificación <strong>Android N Preview</strong>.</li>
-
- <li>Haz clic en la pestaña <strong>SDK Tools</strong> y luego selecciona las casillas de verificación
- <strong>Android SDK Build Tools</strong>, <strong>Android SDK
- Platform-Tools</strong> y
- <strong>Android SDK Tools</strong>.
- </li>
-
- <li>Haz clic en <strong>OK</strong> y acepta los acuerdos
- de licencia para instalar cualquier paquete que se necesite.
- </li>
-</ol>
-
-<h3 id="docs-dl">Obtener documentación de referencia de la Android N Preview</h3>
-
-<p>
- En la documentación de referencia de la N Preview, se encuentra disponible información
- detallada acerca de las API de Android N. Puedes descargar la documentación de la tabla siguiente.
- Este paquete contiene una versión abreviada y de uso sin conexión del sitio web para desarrolladores
- de Android, y en ella se incluyen una referencia de API actualizada para las API de Android N y un
- informe de diferencia de API.
-</p>
-
-<table>
- <tr>
- <th scope="col">Documentación</th>
- <th scope="col">Sumas de comprobación</th>
- </tr>
- <tr>
- <td style="white-space: nowrap">
- <a href="{@docRoot}shareables/preview/n-preview-3-docs.zip">n-preview-3-docs.zip</a></td>
- <td width="100%">
- MD5: 19bcfd057a1f9dd01ffbb3d8ff7b8d81<br>
- SHA-1: 9224bd4445cd7f653c4c294d362ccb195a2101e7
- </td>
- </tr>
-<table>
-
-
-
-<h2 id="java8">Obtener el JDK de Java 8</h2>
-
-<p>Para compilar tu aplicación en función de la plataforma de Android N y para usar algunas herramientas con
-Android Studio 2.1 el Java 8 Developer Kit (JDK 8). Por lo tanto, si
-aún no tienes la última versión, descarga el JDK 8 ahora.</p>
-
-<p>Luego configura la versión de JDK en Android Studio de la siguiente manera:</p>
-
-<ol>
- <li>Abre un proyecto de Android en Android Studio y luego el
- cuadro de diálogo de estructura del proyecto seleccionando <strong>File >
- Project Structure</strong>. (Como alternativa, puedes fijar el valor predeterminado
- para todos los proyectos seleccionando<strong> File > Other Settings >
- Default Project Structure</strong>).
- </li>
- <li>En el panel izquierdo del cuadro de diálogo, haz clic en <strong>SDK Location</strong>.
- </li>
- <li>En el campo <strong>JDK Location</strong>, escribe la ubicación del
- JDK de Java 8 (haz clic en el botón de la derecha
- para explorar tus archivos) y luego haz clic en <strong>OK</strong>.
- </li>
-</ol>
-
-<img src="{@docRoot}preview/images/studio-jdk-location.jpg" width="700" alt="" />
-
-
-<h2 id="create-update">Actualizar o crear un proyecto</h2>
-
-<p>
- Para usar las API de Android N, debes configurar tu proyecto en forma correspondiente.
-</p>
-
-<p>Si planeas usar funciones del lenguaje Java 8, también debes leer
-<a href="{@docRoot}preview/j8-jack.html">Funciones del lenguaje Java 8</a>
-para obtener información sobre las funciones de Java 8 admitidas y
-la manera de configurar tu proyecto con el compilador Jack.</p>
-
-
-<h3 id="update">Actualizar un proyecto existente</h3>
-
-<p>Abre el archivo
- <code>build.gradle</code> de tu módulo y actualiza los valores de la siguiente
- manera:
-</p>
-
-<pre>
-android {
- compileSdkVersion <strong>'android-N'</strong>
- buildToolsVersion <strong>'24.0.0-rc3'</strong>
- ...
-
- defaultConfig {
- minSdkVersion <strong>'N'</strong>
- targetSdkVersion <strong>'N'</strong>
- ...
- }
- ...
-}</pre>
-
-
-<h3 id="create">Crear un proyecto nuevo</h3>
-
-
-<p>Si deseas crear un proyecto nuevo para realizar desarrollos con el Android N Preview SDK:</p>
-
-<ol>
- <li>Haz clic en <strong>File > New Project</strong> y sigue los pasos correspondientes hasta
- llegar a la página Target Android Devices.
- </li>
- <li>En la página, selecciona la opción <strong>Phone and Tablet</strong>.</li>
- <li>En la opción <strong>Phone and Tablet</strong>, dentro de la lista de opciones <strong>Minimum
- SDK</strong>, selecciona
- <strong>N: Android API 23, N Preview (Preview).</strong></li>
-</ol>
-
-
-<h2 id="next">Próximos pasos</h2>
-
-<ul>
- <li>Sigue la guía de <a href="{@docRoot}preview/download.html">Prueba en un dispositivo Android N</a>.</li>
- <li>Para obtener más información sobre la plataforma de Android N, visita las secciones
-<a href="{@docRoot}preview/behavior-changes.html">Cambios en los comportamientos</a>
-y <a href="{@docRoot}preview/api-overview.html">API y funciones de Android N
-</a>.</li>
-</ul>
-
diff --git a/docs/html-intl/intl/es/preview/support.jd b/docs/html-intl/intl/es/preview/support.jd
deleted file mode 100644
index 517429d..0000000
--- a/docs/html-intl/intl/es/preview/support.jd
+++ /dev/null
@@ -1,1188 +0,0 @@
-page.title=Soporte y notas de la versión
-meta.keywords="preview", "android"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-support_2x.png
-
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>En este documento</h2>
-
-<ul>
- <li><a href="#dp3">Developer Preview 3</a>
- <ul>
- <li><a href="#general">Recomendaciones generales</a></li>
- <li><a href="#new">Novedades en DP3</a></li>
- <li><a href="#ki">Problemas conocidos</a></li>
- </ul>
- </li>
- <li><a href="#dp2">Developer Preview 2</a></li>
- <li><a href="#dp1">Developer Preview 1</a></li>
-</ul>
-
-<!--
-<h2>See Also</h2>
-<ol>
- <li></li>
-</ol>
--->
-
-</div>
-</div>
-
-<p>
- Durante el desarrollo y las pruebas que lleves a cabo con
- la Android N Developer Preview tendrás dos canales de soporte principales: Para informar los errores específicos de
- dispositivos, de sistema o de Google Apps, visita <a href="https://developer.android.com/preview/bug">https://developer.android.com/preview/bug</a>. Para informar sobre problemas en otras aplicaciones,
- ponte en contacto directamente con el desarrollador.
-</p>
-
-<p>Para debatir sobre problemas o ideas con otros desarrolladores que estén trabajando en Android N, únete a la comunidad
-<a href="{@docRoot}preview/dev-community">M Developer Preview en Google+</a>.</p>
-
-<h2 id="dp3">Developer Preview 3</h2>
-
-<div class="wrap">
- <div class="cols">
- <div class="col-6of12">
- <p>
- <em>Fecha: Mayo de 2016<br>
- Versión: NPD35K<br>
- Compatibilidad con emulador: x86 y ARM (32/64-bit)<br>
- Servicios de Google Play: 8.4</em>
- </p>
- </div>
- </div>
-</div>
-
-<h3 id="general">Recomendaciones generales</h3>
-
-<p>
- Esta versión de Developer Preview está pensada para <strong>desarrolladores de aplicaciones y usuarios
- pioneros</strong> y está disponible para uso diario, desarrollo o
- pruebas de compatibilidad. Ten en cuenta estas notas generales sobre la
- versión:
-</p>
-
-<ul>
- <li>Esta versión puede tener varios <strong>problemas de estabilidad</strong> en
- dispositivos compatibles. Los usuarios se pueden topar con un sistema inestable, con errores
- internos del núcleo y fallas.
- </li>
-
- <li>Algunas aplicaciones <strong>quizá no funcionen como se espera</strong> en la versión de la plataforma
- nueva. Entre ellas se incluyen tanto aplicaciones de Google como de otros desarrolladores.
- </li>
-
- <li>Developer Preview 3 para desarrolladores ha superado el <strong>conjunto de pruebas de compatibilidad (CTS)
- </strong> en estos dispositivos: Nexus 5X, Nexus 6, Nexus 6P y Pixel
- C. Las aplicaciones que dependen de compilaciones que hayan aprobado el CTS deberían
- funcionar con normalidad en estos dispositivos (por ejemplo, Android Pay).
- </li>
-
- <li>Developer Preview 3 está <strong>disponible en todos los dispositivos
- compatibles:</strong> Nexus 5X, Nexus 6, Nexus 6P, Nexus 9, Nexus Player, Pixel
- C, General Mobile 4G (Android One) y Sony Xperia Z3 (modelos D6603 y
- D6653).
-
- </li>
-</ul>
-
-
-<h3 id="new">Novedades en DP3</h3>
-
-<h4 id="">Modo RV para Android</h4>
-
-<p>
- Android N agrega compatibilidad y optimizaciones de plataforma para un Modo RV nuevo, con el objetivo de que los
- desarrolladores puedan forjar experiencias RV móviles de alta calidad para los usuarios. Hay varias
- mejoras en el rendimiento, entre las que se incluye el acceso a un núcleo de CPU exclusivo
- para aplicaciones de RV. Dentro de tus aplicaciones, puedes aprovechar el seguimiento de cabeza
- inteligente y las notificaciones en sonido estéreo que funcionan para el modo RV. Un dato muy importante es que
- Android N presenta muy pocos gráficos de baja latencia.
-</p>
-
-<p>
- Para obtener más información, consulta <a href="https://developers.google.com/vr/android/">Google VR SDK para Android</a>.
-</p>
-
-<h4 id="">Modo de rendimiento sostenido</h4>
-
-<p>
- Android N incluye compatibilidad opcional para un <a href="{@docRoot}preview/api-overview.html#sustained_performance_api">modo de rendimiento
- sostenido</a>, que permite que los OEM arrojen datos sobre las capacidades de rendimiento del dispositivo
- para las aplicaciones que llevan tiempo ejecutándose. Los desarrolladores de aplicaciones pueden usar estos
- datos para pulir sus aplicaciones y alcanzar un nivel consistente y predecible de rendimiento durante períodos prolongados
- en el dispositivo. Los desarrolladores de aplicaciones solo pueden probar este API nuevo
- en la Preview instalada en Nexus 6P.
-</p>
-
-<h4>Multiprocess WebView</h4>
-
-<p>
- Desde la versión 51 de Android N, WebView ejecutará contenido web en
- procesos individuales de espacio aislado cuando se haya habilitado
- la opción "Multiprocess WebView". El equipo de WebView espera recibir comentarios sobre compatibilidad y
- rendimiento de tiempo de ejecución en N antes de habilitar Multiprocess WebView en
- versiones futuras de Android. En esta versión, pueden darse regresiones en el tiempo de inicio, uso total
- de la memoria y problemas de rendimiento en la representación de software.
-</p>
-
-<p>
- Si te topas con problemas inesperados en el modo de multiprocesos, nos gustaría que compartas la información
- con nosotros. Ponte en contacto con el equipo de WebView <a href="https://bugs.chromium.org/p/chromium/issues/entry?template=Webview%20Bugs">
- informándolos sobre un error</a>.
-</p>
-
-<h4 id="">Ayuda en los métodos abreviados del teclado</h4>
-
-<p>
- Android N permite que los usuarios pulsen <code>Meta+/</code> para activar una pantalla de <strong>Keyboard
- Shortcuts</strong> que muestra todos los métodos abreviados disponibles tanto para el
- sistema como para la aplicación que esté en primer plano. Los desarrolladores pueden agregar sus propios métodos abreviados o
- activar la pantalla de métodos abreviados desde sus aplicaciones. Consulta <a href="{@docRoot}preview/api-overview.html#keyboard_shortcuts_helper">Ayuda en los métodos
- abreviados del teclado</a> para ver más detalles.
-</p>
-
-<h4 id="">API FrameMetrics</h4>
-
-<p>
- DP3 presenta una <a href="{@docRoot}preview/api-overview.html#framemetrics_api">API FrameMetrics</a>nueva
- que permite que una aplicación monitoree su rendimiento de representación de IU mediante la exposición de una
- transmisión de API Pub/Sub para transferir información sobre el intervalo de los fotogramas para la ventana actual
- de la aplicación. Puedes usar <code>FrameMetricsListener</code> para medir
- el rendimiento de la IU del nivel de interacción en producción con una granularidad mayor y
- sin la necesidad de contar con conexión USB.
-</p>
-
-<h4 id="api-changes">Característica y cambios en la API</h4>
-
-<dl>
- <dt>
- Accesos directos al launcher y sus API
- </dt>
-
- <dd>
- Hemos decidido postergar esta característica hasta una versión futura de Android. El plan
- es eliminar las API de accesos directos al launcher (ShortcutManager y otras) de la
- API pública de Android N a partir de la siguiente Preview.
- </dd>
-
- <dt>
- Ejecución de WebView Javascript antes de la carga de página
- </dt>
-
- <dd>
- Comenzando por las aplicaciones que hagan objetivo a Android N, el contexto de JavaScript se restablece
- cuando se carga una página nueva. De momento, el contexto de la
- primera página cargada se mantiene en una instancia {@link android.webkit.WebView} nueva.
- Los desarrolladores que quieran introducir JavaScript en {@link
- android.webkit.WebView} deberían ejecutar la secuencia de comandos luego de que la página haya
- comenzado a cargar.
- </dd>
-
- <dt>
- Ubicación geográfica de WebView en orígenes inseguros
- </dt>
-
- <dd>
- Comenzando por las aplicaciones que hagan objetivo a Android N, solo se permitirá
- el uso de la API de ubicación geográfica en orígenes seguros (en HTTPS). Esta política se ha diseñado para proteger
- la información privada del usuario cuando use una conexión insegura.
- </dd>
-
- <dt>
- Ahorro de datos
- </dt>
-
- <dd>
- A partir de Developer Preview 3 para desarrolladores, las aplicaciones pueden usar una intent para mostrar un
- recuadro de diálogo de sistema que permite que el usuario agregue la aplicación directamente a la lista blanca de excepciones
- de ahorro de datos. Consulta la <a href="{@docRoot}preview/api-overview.html#data_saver">documentación
- sobre ahorro de datos</a> para ver más detalles.
- </dd>
-
- <dt>
- <a href="{@docRoot}preview/api-overview.html#number-blocking">Bloqueo de números</a>
- </dt>
-
- <dd>
- Ahora, si un usuario sin autorización intenta bloquear o desbloquear un número, la
- operación fallará y arrojará el mensaje {@link java.lang.SecurityException}. (Antes,
- la operación arrojaba el mensaje {@link java.lang.UnsupportedOperationException}).
- </dd>
-
- <dt>
- <a href="{@docRoot}preview/api-overview.html#tile_api">API para mosaico
- de configuración rápida</a>
- </dt>
-
- <dd>
- Ahora, el sistema utiliza metadatos de la actividad para definir el modo de mosaico.
- (Antes, el valor de devolución de
- <code>TileService.onTileAdded()</code> determinaba el modo de mosaico). Para obtener más información, consulta
- <code>TileService.META_DATA_ACTIVE_TILE</code> en la <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referencia de la API</a> descargable.
- </dd>
-</dl>
-
-<h4 id="dp3-fixes">Soluciones para los errores que informaron los desarrolladores</h4>
-
-<p>
- Se han solucionado varios errores que los desarrolladores habían informado, entre los que se incluyen:
-</p>
-
-<ul>
- <li>Interrupción de la reproducción de audio por Bluetooth luego de una canción (error <a href="https://code.google.com/p/android/issues/detail?id=206889">206889</a>)
- </li>
-
- <li>Fallas continuas en Pixel C (error <a href="https://code.google.com/p/android/issues/detail?id=206962">206962</a>)
- </li>
-
- <li>Problemas de notificaciones en Clock and Toast (error <a href="https://code.google.com/p/android/issues/detail?id=203094">203094</a>)
- </li>
-
- <li>Reinicio de Pixel C cuando se lo conecta a una MacBook Pro mediante un cable USB C (error
- <a href="https://code.google.com/p/android/issues/detail?id=205432">205432</a>)
- </li>
-
- <li>Diferencia de un día en el calendario (error <a href="https://code.google.com/p/android/issues/detail?id=203002">203002</a>)
- </li>
-
- <li>Devolución de datos no válidos de parte de TelephonyManager.getAllCellInfo (error <a href="https://code.google.com/p/android/issues/detail?id=203022">203022</a>)
- </li>
-
- <li>Nexus 6P - Desconexión continua de Bluetooth (error <a href="https://code.google.com/p/android/issues/detail?id=208062">208062</a>)
- </li>
-</ul>
-
-<p>Para conocer la lista completa de errores solucionados, consulta <a href="https://goo.gl/6uCKtf">el
-seguimiento de problemas</a>.</p>
-
-<h3 id="ki">Problemas conocidos</h3>
-
-<h4>Accesibilidad</h4>
-
-<ul>
- <li>Imposibilidad de escuchar el formato de salida TTS cuando la inclinación está cerca del nivel máximo.
- </li>
-
- <li>Las funciones y la configuración de accesibilidad pueden verse interrumpidas cuando el usuario agrega un
- perfil de trabajo, como el gesto y la configuración de ampliación. El estado
- de la accesibilidad se restablece cuando el usuario cambia la configuración asociada.
- </li>
-</ul>
-
-<h4>Cámara</h4>
-
-<ul>
- <li>La aplicación Cámara ha mostrado inestabilidad; puede presentar fallos en varias
- circunstancias, como cuando se la ejecuta en el modo de ventanas múltiples.
- </li>
-
- <li>Si se presiona el obturador repetidas veces en el modo panorámico, la aplicación Cámara
- puede fallar.
- </li>
-</ul>
-
-<h4>Audio</h4>
-<ul>
- <li>Un error en el reproductor de audio de plataforma impide que algunas aplicaciones
- funcionen con normalidad. Este error afecta, por ejemplo, a aplicaciones como Skype y otras.
- </li>
-</ul>
-
-<h4>Conectividad</h4>
-
-
-<ul>
- <li>Cuando un dispositivo de rol periférico Bluetooth Low Energy (BLE) indica un
- servicio y se conecta un dispositivo de rol central BLE, el dispositivo de rol periférico
- se desconecta rápidamente.
- </li>
-
- <li>La conexión Wi-Fi puede perderse cuando la pantalla está apagada.
- </li>
-
- <li>Las conexiones RFCOMM son inestables y pueden provocar daños en los datos y
- conexiones con poca estabilidad.
- </li>
-
- <li>El estado de red activo ({@link android.net.NetworkInfo#getState
- NetworkInfo.getState()} y {@link android.net.NetworkInfo#getDetailedState
- NetworkInfo.getDetailedState()}) pueden devolver valores incorrectos durante algunos
- escenarios de fondos restringidos.
- </li>
-</ul>
-
-
-<h4>
- Launcher
-</h4>
-
-<ul>
- <li>La bandeja All Apps predeterminada del lanzador puede dejar de responder luego de que
- la pantalla se apague y se encienda. El problema se puede resolver volviendo a la pantalla de inicio y ejecutando otra vez
- la bandeja All Apps.
- </li>
-</ul>
-
-<h4>
- Teclado
-</h4>
-
-<ul>
- <li>Cuando se actualiza un dispositivo que utiliza Android 6.0 o una versión anterior a la N Developer
- Preview, el teclado de Google no conserva los datos de preferencias como los emoji recientes
- y la configuración de sonido.
- </li>
-
- <li>Google Indic Managed Keyboard puede comportarse de manera inestable.
- </li>
-
- <li>Cuando se ingresa texto en un campo de contraseña, el usuario puede seleccionar ruso como
- el idioma de escritura, pero el teclado permanece en inglés. Esto impide que los
- usuarios puedan ingresar contraseñas en ruso.
- </li>
-</ul>
-
-<h4>
- Configuración regional e idiomas
-</h4>
-
-<ul>
- <li>Cuando se usa una configuración regional de derecha a izquierda (RTL), el sistema puede cambiar, de manera inesperada,
- a una presentación de izquierda a derecha (LTR) luego de reiniciar el dispositivo.
- </li>
-</ul>
-
-<h4>Medios</h4>
-
-<ul>
- <li>En Nexus 9 y Nexus Player, la reproducción de medios puede no ser la correcta y presentar, entre otros,
- errores al reproducir HD.
- </li>
-</ul>
-
-<h4>
- Modo de ventanas múltiples
-</h4>
-
-<ul>
- <li>El dispositivo se puede congelar cuando se cambia la orientación en el modo de ventanas múltiples.
- </li>
-
- <li>De momento, varias aplicaciones tienen problemas con el modo de ventanas múltiples:
- <ul>
- <li>La IU del sistema puede fallar cuando se cambia Settings > Display >
- Screen brightness al modo de ventanas múltiples.
- </li>
-
- <li>La aplicación Cámara puede fallar cuando se la ejecuta en el modo de ventanas múltiples.
- </li>
-
- <li>YouTube puede fallar cuando se lo ejecuta en el modo de ventanas múltiples. Para solucionar el
- problema, puedes borrar los datos de la aplicación YouTube en Storage > Apps >
- YouTube.
- </li>
- </ul>
- </li>
-</ul>
-
-<h4>
- Servicios de Google Play
-</h4>
-
-<ul>
- <li>Las aplicaciones que usen Google Cast por medio de los servicios de Google Play pueden presentar problemas cuando
- el usuario elige una configuración regional del sistema que usa letras y números que estén fuera del
- rango ASCII.
- </li>
-</ul>
-
-<h4>
- Android for Work y Google Apps Device Policy
-</h4>
-
-<ul>
- <li>La aplicación Device Policy puede fallar cuando el usuario desbloquea el dispositivo con la pantalla
- "device policy status" anclada.
- </li>
-
- <li>Después de configurar un perfil de trabajo con la encriptación a base de archivos habilitada y
- luego desactivar Work, los usuarios deberán desactivar el bloqueo de pantalla del perfil principal para volver
- a acceder a las aplicaciones de Work.
- </li>
-
- <li>El dispositivo se reinicia cuando se quita el patrón de seguridad y se abre una
- aplicación personal o de trabajo en el modo de ventanas múltiples.
- </li>
-
- <li>Configurar DISALLOW_VPN_CONFIG provoca que el diálogo de consentimiento aparezca en
- always-on-vpn, configurado por Device Policy Client.
- </li>
-
- <li>El tráfico no se bloquea hasta que la VPN esté conectada en el modo always-on-vpn.
- </li>
-</ul>
-
-<h4>
- Almacenamiento externo
-</h4>
-
-<ul>
- <li>Las aplicaciones pueden comenzar a funcionar mal cuando el usuario las mueve desde el almacenamiento interno a un dispositivo de
- almacenamiento externo (entre los que se incluyen las tarjetas SD o los dispositivos conectados por
- medio de USB).
- </li>
-</ul>
-
-<h4>
- Zoom de la pantalla y APK múltiples en Google Play
-</h4>
-
-<ul>
- <li>En dispositivos que usen Android N, los servicios de Google Play 9.0.83 informan erróneamente
- la densidad de la pantalla actual en vez de la densidad de la pantalla estable. Cuando se habilita el zoom
- de la pantalla en estos dispositivos, esto puede provocar que Google Play seleccione una
- versión de una aplicación con APK múltiples diseñada para pantallas más pequeñas. Este error se
- soluciona en la siguiente versión de los servicios de Google Play, y se incluirá en un
- lanzamiento futuro de la Developer Preview.
- </li>
-
- <li>De momento, en dispositivos que usen Android N, los servicios de Google Play 9.0.83 informan la compatibilidad con
- Vulkan, pero no con qué versión. Esto puede provocar que Google Play seleccione una
- versión de una aplicación con APK múltiples diseñada con compatibilidad inferior con Vulkan en
- dispositivos que son compatibles con versiones más nuevas. De momento, la tienda Google Play no
- acepta actualizaciones de aplicaciones que utilicen selección de versión de Vulkan. Esta compatibilidad
- se agregará a la tienda Google Play en el futuro, y se solucionará en la siguiente
- versión de los servicios Google Play (que se incluirá en una Developer Preview
- nueva). Cualquier dispositivo N que use una versión de servicios Google Play 9.0.83 seguirá
- recibiendo versiones de aplicaciones que tengan compatibilidad básica con Vulkan.
- </li>
-</ul>
-
-<h4 id="">Notificaciones</h4>
-
-<ul>
- <li>MessagingStyle no muestra notificaciones con emisor "null" (propio).
- </li>
-</ul>
-
-<h4 id="">Herramientas de desarrollador</h4>
-
-<ul>
- <li>
- <code>adb</code> se puede desconectar mientras se usa la depuración JDWP.
- </li>
-</ul>
-
-<!-- TBA, if any
-<h4>Device-specific issues</h4>
-
-<dl>
- <dt>
- <strong>Device Name</strong>
- </dt>
-
- <dd>
- Issue 1
- </dd>
-
- <dd>
- Issue 2
- </dd>
-</dl>
-
--->
-
-
-
-
-
-
-
-<!-- DP2 Release Notes Archive -->
-
-<h2 id="dp2">Developer Preview 2</h2>
-
-<div class="wrap">
- <div class="cols">
- <div class="col-6of12">
- <p>
- <em>Fecha: Abril de 2016<br>
- Compilaciones: NPC91K, NPC91O<br>
- Compatibilidad con emulador: x86 y ARM (32/64-bit)<br>
- Servicios de Google Play: 8.4</em>
- </p>
- </div>
- </div>
-</div>
-
-<h3 id="dp2-new">Novedades en DP2</h3>
-
-<ul>
- <li>Compatibilidad con plataformas para Vulkan, una nueva API de visualización 3D que permite
- controlar explícitamente y con baja sobrecarga la GPU (unidad de procesamiento de gráficos) y ofrece
- un rendimiento mejorado para aplicaciones sujetas a un nivel elevado de llamadas a draw. Para ver más detalles, consulta la
- <a href="{@docRoot}ndk/guides/graphics/index.html">documentación</a>.
- </li>
-
- <li>Emoji de gente nuevos con compatibilidad para tonos de piel, y glifos Unicode 9.
- El tono de piel y los emoji nuevos no se mostrarán hasta que la versión de los teclados sea compatible con
- ellos en la paleta. Las aplicaciones no deberían tomar ninguna acción para sacar
- ventaja de estos emoji nuevos, a menos que la aplicación utilice una fuente que no sea del sistema. Los desarrolladores de IME
- tienen que incorporar compatibilidad con los emoji nuevos.
- </li>
-
- <li>
- <a href="{@docRoot}preview/api-overview.html#launcher_shortcuts">API de accesos directos
- al launcher</a>: Las aplicaciones pueden usar <code>ShortcutManager</code> para enviar al launcher
- accesos directos a puntos de control dentro de sí mismos.
- </li>
-
- <li>
- <a href="{@docRoot}preview/features/multi-window.html">Ventanas múltiples</a>:
- Ahora puedes especificar un alto mínimo y un ancho mínimo individual para una
- actividad. Además, se han modificado los nombres de varias API.
- </li>
-</ul>
-
-<h4 id="dp2-fixes">Soluciones para los errores que informaron los desarrolladores</h4>
-
-<p>
- Se han solucionado varios errores que los desarrolladores habían informado, entre los que se incluyen:
-</p>
-
-<ul>
- <li>No se puede establecer la conexión a SSID o Wi-Fi ocultos. (error <a href="https://code.google.com/p/android/issues/detail?id=203116">203116</a>)
- </li>
-
- <li>El modo silenciado del micrófono persiste en distintas actividades. (error <a href="https://code.google.com/p/android/issues/detail?id=205922">205922</a>)
- </li>
-
- <li>Al cambiar el foco de ventanas múltiples, YouTube se pausa. (error <a href="https://code.google.com/p/android/issues/detail?id=203424">203424</a>)
- </li>
-
- <li>Respuesta directa puede cerrar la actividad abierta. (error <a href="https://code.google.com/p/android/issues/detail?id=204411">204411</a>)
- </li>
-
- <li>Varias soluciones de estabilidad.
- </li>
-</ul>
-
-<h3 id="dp2-general">Recomendaciones generales</h3>
-
-<p>
- Esta versión de la Developer Preview solo se recomienda a los <strong>desarrolladores de aplicaciones</strong>
-, y está diseñada para usarla en pruebas de compatibilidad y durante etapas tempranas del desarrollo.
- Ten en cuenta estas notas generales sobre la versión:
-</p>
-
-<ul>
-
- <li>Para el lanzamiento de la DP2,
- se han actualizado los componentes de herramienta de desarrollo y las bibliotecas de compatibilidad. No te olvides de actualizar tu entorno de desarrollo de Preview
- antes de desarrollar para DP2. Para ver instrucciones sobre cómo configurar tu entorno
- de desarrollo, consulta
- <a href="{@docRoot}preview/setup-sdk.html">Configuración de Preview</a>.
- </li>
-
- <li>Esta versión presenta varios problemas de estabilidad y rendimiento en todos los dispositivos
- que la convierten en una versión <strong>no recomendable para el uso diario en tablets o teléfonos</strong>,
- especialmente para quienes no sean desarrolladores.
- </li>
-
- <li>En esta
- versión, aún no se ha optimizado el rendimiento y la vida de la batería:
-
- <ul>
- <li>Se sabe que el <strong>rendimiento de las aplicaciones y el sistema es lento o
- problemático</strong>, y existe la posibilidad de que, periódicamente, los dispositivos dejen de funcionar. Estos
- problemas se pueden agravar con el uso prolongado.
- </li>
-
- <li>En esta versión, la vida de la batería se puede ver afectada cuando la pantalla
- se apaga y se enciende.
- </li>
- </ul>
- </li>
-
- <li>Algunas <strong>aplicaciones quizá no funcionen con normalidad</strong> en la Developer Preview
- 2. Entre ellas se incluyen tanto aplicaciones de Google como de otros desarrolladores.
- </li>
-
- <li>Esta versión temprana no ha superado <strong>el conjunto de pruebas de compatibilidad (CTS)
- </strong>. Las aplicaciones que dependen de compilaciones que hayan aprobado el CTS no funcionarán
- (Android Pay, por ejemplo).
- </li>
-
- <li>Esta versión de Preview es compatible con los siguientes dispositivos: Nexus 5X, Nexus 6,
- Nexus 6P, Nexus 9, Pixel C y General Mobile 4G
- (Android One). Próximamente también será compatible con Nexus Player.
- </li>
-
-
- <li><a href="https://github.com/googlesamples/android-testdpc/releases">TestDPC</a> se ha
- actualizado para manejar cambios de API entre DP1 y DP2.
- </li>
-</ul>
-
-<h3 id="dp2-ki">Problemas conocidos</h3>
-
-<h4>Rendimiento y batería</h4>
-
-<ul>
- <li>Se sabe que el rendimiento de las aplicaciones y el sistema es <strong>lento o
- problemático</strong>, y existe la posibilidad de que, periódicamente, los dispositivos dejen de funcionar. Estos
- problemas se pueden agravar con el uso prolongado.
- </li>
-</ul>
-
-<h4>Cuentas de Google</h4>
-
-<ul>
- <li>En ciertas circunstancias, pueden ocurrir problemas con
- <code>AccountManagerService</code>, que impide iniciar sesión en cuentas de Google.
- </li>
-</ul>
-
-<h4>Actualización del sistema</h4>
-
-<ul>
- <li>El dispositivo se puede reiniciar al momento de actualizar a DP2.
- </li>
-</ul>
-
-<h4>Accesibilidad</h4>
-
-<ul>
- <li>Problemas al escuchar formato de salida de texto a voz (TTS) cuando la inclinación está
- cerca del nivel máximo.
- </li>
-</ul>
-
-<h4>Bluetooth</h4>
-
-<ul>
- <li>Las características GATT del Bluetooth de bajo consumo (LE) utilizan el tipo
- de escritura equivocado, y no se enviarán a un dispositivo remoto. Por esa razón, algunos dispositivos útiles
- para la realización de ejercicios no funcionarán.
- </li>
-</ul>
-
-<h4>Asistente de configuración</h4>
-
-<ul>
- <li>La opción para recuperar datos en un dispositivo nuevo (o en un dispositivo que se ha restablecido hace poco tiempo) de
- "Your Google Account" no se puede utilizar en el asistente de configuración. Debes restablecer
- los datos de un dispositivo existente eligiendo "another Android device" en el
- asistente de configuración o configurarlo como un dispositivo nuevo.
- </li>
-</ul>
-
-<h4>OEM unlock</h4>
-
-<ul>
- <li>En algunos dispositivos, <strong>Enable OEM unlock</strong> aparecerá inhabilitado en
- "Developer Options" al ejecutar DP2.<br>
- <strong>Método alternativo:</strong> Apúntate para
- el Programa Android Beta (si aún no lo has hecho) en
- <a href="https://www.google.com/android/beta" class="external-link">www.google.com/android/beta</a>. Luego, date de baja y acepta el
- paso a una versión anterior (OTA). Darse de baja hará que el dispositivo pase a la versión Android 6.0. Ahora deberías
- poder elegir la opción <strong>Enable OEM unlock</strong> en
- "Developer Options". Cuando
- el dispositivo se desactualiza, todos los datos personales se pierden; sin embargo, si se hubiera desbloqueado el bootloader, también se habrían eliminado esos datos.
- </li>
-</ul>
-
-<h4>Android for Work</h4>
-
-<ul>
- <li>Comprobación de seguridad de trabajo
- <ul>
- <li>Luego de migrar a N, o después de que el usuario cree perfiles de trabajo, los perfiles
- de trabajo no pueden crear claves en el depósito de claves hasta que el usuario cambie su
- patrón, PIN o contraseña o configure una comprobación de trabajo.
- </li>
-
- <li>En modo de inicio directo, aplicar restricciones de contraseña al dispositivo
- hará que el perfil de trabajo se desbloquee, incluso si el dispositivo está bloqueado.
- Esto permite acceder al perfil de trabajo aunque debería estar protegido
- por la pantalla de bloqueo del dispositivo.
- </li>
- </ul>
- </li>
-
- <li>Always On VPN
- <ul>
- <li>Si el modo Always On VPN está activado, pero la VPN no está disponible, las aplicaciones
- se conectarán a la red normal. Las aplicaciones deberían quedar sin conexión si no hay
- una conexión de VPN disponible.
- </li>
-
- <li>Cuando el modo Always On VPN está activado, las conexiones VPN no se establecen después
- del reinicio de un dispositivo a modo de inicio directo, incluso luego de que el usuario desbloquee la
- pantalla de bloqueo.
- </li>
- </ul>
- </li>
-
- <li>Paquetes suspendidos
- <ul>
- <li>Los administradores de dispositivos pueden suspender paquetes de sistema críticos, lo que puede provocar
- un comportamiento inesperado, como la realización de llamadas a pesar de que se muestre el recuadro de diálogo "Telephone
- disabled".
- </li>
- </ul>
- </li>
-
- <li>Otros
- <ul>
- <li>Cuando se inicia, la aplicación Configuración falla si {@link
- android.os.UserManager#DISALLOW_MOUNT_PHYSICAL_MEDIA} está configurado como verdadero cuando el usuario
- conecta un medio físico como una tarjeta SD.
- </li>
-
- <li>El primer registro en un perfil de trabajo tarda varios minutos en
- completarse.
- </li>
- </ul>
- </li>
-</ul>
-
-<h4 id="vulkan">Vulkan</h4>
-
-<ul>
- <li>Nexus 5X/6P</li>
- <ul>
- <li>Los espacios entre números vinculantes y números distintos a cero
- como primer número vinculante hacen que {@code vkCreateGraphicsPipeline()} falle.</li>
- <li>Vulkan exhibe un comportamiento de muestras incorrecto en coordinadas de textura proyectada.</li>
- <li>En la muestra multithreadCmdBuffer, {@code vkCmdClearColorImage()} falla cuando
- se ejecuta con el controlador N-DP2.</li>
- <li>Los valores de devolución de {@code vkGetPhysicalDeviceFormatProperties()} no configuran un valor
- para {@code VkFormatProperties::linearTilingFeatures} que, como resultado,
- toma el valor de 0.</li>
- <li>Los anexos del búfer de fotogramas de punto flotante de Vulkan no se manejan de forma correcta.</li>
- </ul>
- <li>Nexus Player</li>
- <ul>
- <li>Los sombreadores SPIR-V no disparan activos del controlador.</li>
- <li>Algunas configuraciones del proceso pueden hacer que {@code vkCreateGraphicsPipeline()}
- falle.</li>
- </ul>
-</ul>
-
-<h4>Problemas específicos de dispositivo</h4>
-
-<dl>
- <dt>
- <strong>Android One</strong>
- </dt>
-
- <dd>
- La conexión de datos falla cuando un dispositivo se cambia de la ranura SIM 1 a la 2.
- </dd>
-
- <dt>
- <strong>Pixel C</strong>
- </dt>
-
- <dd>
- No se puede activar o desactivar la opción "Always On" de búsqueda por voz.
- </dd>
-
- <dt>
- <strong>Nexus 6</strong>
- </dt>
-
- <dd>
- Las fotografías de la cámara en orientación vertical están dañadas, a excepción de las fotos
- HDR+.
- </dd>
-
- <dt>
- <strong>Nexus Player</strong>
- </dt>
-
- <dd>
- En Nexus Player, la reproducción de contenido Netflix HD puede fallar.
- </dd>
-
- <dd>
- En Nexus Player, cualquier aplicación que dependa de cambios de resolución de video dinámico
- puede fallar.
- </dd>
-
- <dd>
- En Nexus Player, cualquier aplicación que use el códec de video VP9 puede fallar.
- </dd>
-</dl>
-
-<!-- DP 1 release notes archive -->
-
-<h2 id="dp1">Developer Preview 1</h2>
-
-<div class="wrap">
- <div class="cols">
- <div class="col-6of12">
- <p>
- <em>Fecha: Marzo de 2016<br>
- Compilaciones: NPC56P, NPC56R, actualizado: NPC56W, NPC56X<br>
- Compatibilidad con emulador: x86 y ARM (32/64-bit)<br>
- Servicios de Google Play: 8.4</em>
- </p>
- </div>
- </div>
-</div>
-
-<h3 id="dp1-general">Recomendaciones generales</h3>
-
-<p>
- Esta versión de la Developer Preview solo se recomienda a los desarrolladores de aplicaciones, y está diseñada para
- usarla en pruebas de compatibilidad y durante etapas tempranas del desarrollo. Ten en cuenta
- estas notas generales sobre la versión:
-</p>
-<ul>
- <li>Esta versión presenta varios problemas de estabilidad y rendimiento en todos los dispositivos
- que la convierten en una versión <em>no recomendable para el uso diario en tablets o teléfonos</em>,
- especialmente para quienes no sean desarrolladores.
- </li>
-
- <li>Se sabe que el rendimiento de las aplicaciones y el sistema es <strong>lento o
- problemático</strong>, y existe la posibilidad de que, periódicamente, los dispositivos dejen de funcionar. Estos
- problemas se pueden agravar con el uso prolongado.
- </li>
-
- <li>En esta versión, la vida de la batería se puede ver afectada cuando la pantalla se apaga y
- se enciende.
- </li>
-
- <li>Algunas aplicaciones quizá no funcionen con normalidad en la Developer Preview 1. Entre estas se incluyen
- tanto aplicaciones de Google como de otros desarrolladores.
- </li>
-
- <li>Esta versión temprana no ha superado el conjunto de pruebas de compatibilidad(CTS). Las aplicaciones
- que dependen de compilaciones que hayan aprobado el CTS no funcionarán (por ejemplo, Android Pay).
- </li>
-
- <li>Esta versión de Preview es compatible con los siguientes dispositivos: Nexus 5X, Nexus 6,
- Nexus 6P, Nexus 9, Nexus Player, Pixel C y General Mobile 4G
- (Android One).
- </li>
-</ul>
-
-<h3 id="dp1-platform">Problemas de plataforma</h3>
-
-<h4>Rendimiento y batería</h4>
-
-<ul>
- <li>Se sabe que el rendimiento de las aplicaciones y el sistema es <strong>lento o
- problemático</strong>, y existe la posibilidad de que, periódicamente, los dispositivos dejen de funcionar. Estos
- problemas se pueden agravar con el uso prolongado.
- </li>
-
- <li>En esta versión, la vida de la batería se puede ver afectada cuando la pantalla se apaga y
- se enciende.
- </li>
-</ul>
-<h4 id="dialer">Teléfono</h4>
-
-<ul>
- <li>La aplicación Teléfono no es compatible con el inicio directo. Este tema se abordará más adelante en
- N Developer Preview.
- </li>
-
- <li>La reproducción del buzón de voz no funciona.
- </li>
-</ul>
-
-<h4>Micrófono</h4>
-
-<ul>
- <li>El estado silencioso del micrófono en el sistema puede persistir de manera incorrecta entre aplicaciones y luego de haberlo reiniciado. Si silencias el micrófono en una aplicación y el estado persiste, abre cualquiera aplicación que tenga controles de silencio para el micrófono y reactiva el micrófono.</li>
-</ul>
-
-<h4 id="ui">IU del sistema</h4>
-
-<ul>
- <li>Algunas cadenas nuevas o modificadas de la IU del sistema no están traducidas a todos
- los idiomas.
- </li>
-
- <li>La IU de información general aún está en desarrollo y sujeta a modificaciones. Por ejemplo,
- tenemos pensado quitar el temporizado que aparece cuando el usuario alterna entre
- aplicaciones.
- </li>
-
- <li>Los controles y los cambios de configuración pueden ser lentos o no funcionar correctamente.
- </li>
-
- <li>El diseño visual de las notificaciones está sujeto a cambios.
- </li>
-
- <li>En la aplicación Gmail, el archivo directo de correos electrónicos incluidos en un
- paquete de notificación no funciona correctamente.
- </li>
-</ul>
-
-<h4>Android for Work</h4>
-
-<ul>
- <li>Comprobación de seguridad de trabajo
- <ul>
- <li>Luego de migrar a N, o después de que el usuario cree perfiles de trabajo, los perfiles
- de trabajo no pueden crear claves en el depósito de claves hasta que el usuario cambie su
- patrón, PIN o contraseña o configure una comprobación de trabajo.
- </li>
-
- <li>En modo de inicio directo, aplicar restricciones de contraseña al dispositivo
- hará que el perfil de trabajo se desbloquee, incluso si el dispositivo está bloqueado.
- Esto permite acceder al perfil de trabajo aunque debería estar protegido
- por la pantalla de bloqueo del dispositivo.
- </li>
-
- <li>Cuando el usuario ingresa una contraseña o un PIN incorrecto, el sistema no
- muestra ningún mensaje informativo; en vez de eso, solo borra el campo
- de entrada. Este problema no afecta al ingreso de huellas digitales o patrones.
- </li>
-
- <li>En una tablet, el fondo que se muestra durante la comprobación de trabajo es
- desproporcionalmente pequeño.
- </li>
-
- <li>La versión de <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.enterprise.dmagent">
- Google Apps Device Policy</a> que está integrada en la N Developer Preview
- aún no es compatible con la función comprobación de seguridad para perfiles de trabajo.
- Los desarrolladores debería usar <a href="https://github.com/googlesamples/android-testdpc/releases">TestDPC</a>
- para probar esta función.
- </li>
- </ul>
- </li>
-
- <li>Always On VPN
- <ul>
- <li>Si el modo Always On VPN está activado, pero la VPN no está disponible, las aplicaciones
- no especificadas como excepción en la política "Always On" se conectarán
- a la red normal. A menos que se especifiquen como excepciones en la política Always On VPN,
- las aplicaciones deberían quedar sin conexión si no hay una conexión de VPN disponible.
- <ul>
- <li>Cuando el modo Always On VPN está activado, las conexiones VPN no se establecen
- después del reinicio de un dispositivo a modo de inicio directo, incluso luego de que el usuario
- desbloquee la pantalla de bloqueo.
- </li>
- </ul>
- </li>
- </ul>
- </li>
-
- <li>Contactos mejorados
- <ul>
- <li>Los dispositivos Bluetooth PBAP/MAP no muestran el identificador de llamada para los contactos
- de trabajo. La versión siguiente de Preview resuelve este problema.
- </li>
- </ul>
- </li>
-
- <li>Modo de trabajo
- <ul>
- <li>El Google Now Launcher no muestra si el modo de trabajo está activado o
- desactivado. El launcher tampoco muestra el estado de suspensión de las aplicaciones.
- </li>
-
- <li>Después de que los usuarios activan o desactivan el modo de trabajo, el sistema ya no muestra
- los widgets de aplicación del perfil de trabajo como el Calendario.
- </li>
- </ul>
- </li>
-
- <li>Paquetes suspendidos
- </li>
-
- <li>Los administradores de dispositivos pueden suspender paquetes de sistema críticos, lo que puede provocar
- un comportamiento inesperado, como la realización de llamadas a pesar de que se muestre el recuadro de diálogo
- "Telephone disabled".
- </li>
-
- <li>Otros
- <ul>
- <li>Cuando se inicia, la aplicación Configuración falla si {@link
- android.os.UserManager#DISALLOW_MOUNT_PHYSICAL_MEDIA} está configurado como verdadero cuando el usuario
- conecta un medio físico como una tarjeta SD.
- </li>
-
- <li>El estado {@code DPM.setPackagesSuspended} no persiste cuando el
- usuario desinstala y luego reinstala la aplicación. La aplicación debería permanecer
- suspendida luego de desinstalarla/reinstalarla, o las aplicaciones suspendidas no deberían poder
- desinstalarse.
- </li>
-
- <li>El primer registro en un perfil de trabajo tarda varios minutos en
- completarse. Esto puede hacer que el dispositivo tarde más de lo normal en volverse
- visible en la API Play EMM.
- </li>
-
- <li>Las notificaciones de las aplicaciones de perfiles de trabajo no son visibles para los oyentes de las notificaciones
- instalados en el perfil personal. Como resultado, el sistema no
- muestra las notificaciones como se esperaría.
- </li>
-
- </ul>
- </li>
-</ul>
-
-<h4 >Teclado</h4>
-
-<ul>
- <li>La sincronización por Bluetooth entre teclados y dispositivos Android puede comportarse de manera inestable.
- </li>
-</ul>
-
-<h4 >Video</h4>
-
-<ul>
-<li>La reproducción de video puede interrumpirse y demorarse.</li>
-</ul>
-
-<h4>Wi-Fi</h4>
-
-<ul>
- <li>La conexión Wi-Fi ha sufrido algunos cambios, que podrían modificar el comportamiento
- del caso límite de la API. Específicamente, se deberían volver a probar las aplicaciones que intentan conectarse a redes
- específicas o intentan reconectarse a redes.
- </li>
-
- <li>El cliente DHCP heredado se ha quitado de la plataforma. El único cliente DHCP
- que es compatible con la plataforma es el cliente DHCP presentado en M.
- </li>
-</ul>
-
-<h4>Inicio directo</h4>
-
-<ul>
- <li>NFC no funciona hasta el primer desbloqueo.
- <ul>
- <li>Cuando se reinicia un teléfono con Bluetooth habilitado, el Bluetooth no
- se activa de forma automática. Tendrás que rehabilitar el Bluetooth de forma manual.
- </li>
-
- <li>En ciertas circunstancias, el tono predeterminado no se oye cuando
- se reciben llamadas o mensajes. Este comportamiento está corregido en la próxima versión de la N Preview
- , con una excepción (y solución alternativa):
- </li>
-
- <li>En un dispositivo cuyos datos no se hayan eliminado hace poco uno que se haya iniciado
- al menos una vez desde la activación del modo inicio directo, el tono de
- notificación predeterminado no se oye. El usuario puede solucionar este problema eligiendo de forma manual
- un tono del menú Configuración.
- </li>
-
- <li>El inicio directo no está habilitado de forma predeterminada en dispositivos que usen la versión N
- Developer Preview. Para habilitar el inicio directo para pruebas y
- desarrollo, ve a Developer Options y toca Convert to File Encryption.
- En esta Developer Preview, esta opción requiere de un restablecimiento de la configuración predeterminada de fábrica para reparticionar y
- reformatear tu dispositivo para encriptación a base de archivos.
- </li>
- </ul>
- </li>
-</ul>
-
-<h4>Picture-in-picture para Android TV</h4>
-
-<ul>
- <li>La integración PIP en la IU de Recientes no está finalizada y está sujeta a
- cambios.
- <ul>
- <li>La animación de la ventana de PIP no está terminada. Este aspecto se mejorará en las
- versiones futuras de la Preview.
- </li>
- </ul>
- </li>
-
- <li style="list-style: none">El diseño visual y la alineación del diseño de PIP se mejorarán
- en las versiones futuras de la Preview.
- </li>
-</ul>
-
-<h4>Informes de errores</h4>
-
-<ul>
- <li>Los informes de errores no siempre se completan con éxito (como solución alternativa,
- a menudo se puede acceder a ellos a través del documento de informe de error provisto
- en el almacenamiento interno).
- </li>
-</ul>
-
-<h4>Ventanas múltiples con pantalla dividida</h4>
-
-<ul>
- <li>Las aplicaciones pueden fallar, o el comportamiento de su IU puede no ser el adecuado, cuando se utiliza el modo de
- pantalla dividida. Estos son problemas de la aplicación que el desarrollador
- de la aplicación debe solucionar.
- </li>
-
- <li>Cuando una aplicación hace objetivo a una versión de la plataforma Android anterior a N, la
- aplicación quizá no funcione, y las alertas de pantalla dividida pueden aparecer en múltiples oportunidades.
- </li>
-
- <li>Presionar durante bastante tiempo el botón Recientes cuando se usa una aplicación con orientación fija
- puede hacer que la aplicación se comporte de manera inesperada.
- </li>
-
- <li>Las aplicaciones pueden parpadear cuando se les cambia el tamaño.
- </li>
-
- <li>Las animaciones no están terminadas.
- </li>
-</ul>
-
-<h4>Método de entrada.</h4>
-
-<ul>
- <li>El teclado de Google vuelve a su versión genérica de manera inesperada
- cuando se habilita<b> Use system language</b>, pero no es compatible con ninguno de los
- idiomas seleccionados en las preferencias del idioma del sistema. Debería volver
- al idioma inglés estadounidense.
- <p>
- Puedes sortear este problema agregado, al menos, un idioma que sea compatible con el
- teclado de Google.
- </p>
- </li>
-</ul>
-
-<h4>Accesibilidad</h4>
-
-<ul>
- <li>TalkBack tiene problemas con características como Notificaciones, mosaicos de Quick
- Settings e imágenes en modo ventanas múltiples que pueden hacer que el sistema falle o
- que haya pocos comentarios por voz de parte de TalkBack. Estos problemas se abordarán en las
- versiones futuras de la Preview.
- </li>
-</ul>
-
-<h3 id="dp1-device-sp">Problemas y notas específicas del dispositivo</h3>
-
-<h4>Nexus Player</h4>
-<ul>
- <li>En esta versión de la Preview, está previsto que ocurran errores de estabilidad y compatibilidad con aplicaciones y de reproducción de video en
- Nexus Player.
- </li>
-</ul>
-
-<h4>Pixel C</h4>
-<ul>
-<li>El cambio de tamaño en el modo de ventanas múltiples puede provocar fallos.</li>
-</ul>
-
-<h4>Nexus 9</h4>
-<ul>
-<li>Los dispositivos Nexus 9 pueden no iniciar luego de recibir una actualización inalámbrica
- mediante el Programa Android Beta. Para solventar este problema, puedes intentar
- instalar la imagen inalámbrica de forma manual. Para obtener más información, consulta
- <a href="{@docRoot}preview/download-ota.html">Aplicación de imágenes inalámbricas de dispositivo</a>.
-</li>
-</ul>
-
diff --git a/docs/html-intl/intl/es/training/articles/direct-boot.jd b/docs/html-intl/intl/es/training/articles/direct-boot.jd
new file mode 100644
index 0000000..0ce3f5b
--- /dev/null
+++ b/docs/html-intl/intl/es/training/articles/direct-boot.jd
@@ -0,0 +1,181 @@
+page.title=Inicio directo
+page.keywords=preview,sdk,direct boot
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>En este documento</h2>
+ <ol>
+ <li><a href="#run">Solicitar acceso para ejecutar durante el inicio directo</a></li>
+ <li><a href="#access">Acceder al almacenamiento encriptado por dispositivo</a></li>
+ <li><a href="#notification">Recibir notificaciones sobre el desbloqueo del usuario</a></li>
+ <li><a href="#migrating">Migrar datos existentes</a></li>
+ <li><a href="#testing">Probar la aplicación con reconocimiento de encriptación</a></li>
+ </ol>
+</div>
+</div>
+
+<p>Android N se ejecuta en un modo <i>de inicio directo</i> seguro
+cuando el dispositivo se enciende pero el usuario no lo ha
+desbloqueado. Para permitir esto, el sistema brinda dos ubicaciones de almacenamiento para los datos:</p>
+
+<ul>
+<li><i>Almacenamiento encriptado por credencial: </i>es la ubicación de almacenamiento predeterminada
+y solo está disponible después de que el usuario desbloquea el dispositivo.</li>
+<li><i>Almacenamiento encriptado por dispositivo: </i>es una ubicación de almacenamiento que está disponible tanto
+durante el modo de inicio directo como después de que el usuario desbloquea el dispositivo.</li>
+</ul>
+
+<p>De forma predeterminada, las aplicaciones no se ejecutan durante el modo de inicio directo.
+Si necesitas que tu aplicación se ejecute durante el modo de inicio directo, puedes registrar
+los componentes de la aplicación que deberían ejecutarse durante este modo. Algunos casos comunes de
+aplicaciones que necesitan ejecutarse durante el modo de inicio directo incluyen los siguientes:</p>
+
+<ul>
+<li>aplicaciones que tienen notificaciones programadas, como aplicaciones
+de alarma;</li>
+<li>aplicaciones que generan notificaciones de usuario importantes, como aplicaciones de mensajes SMS;</li>
+<li>aplicaciones que brindan servicios de accesibilidad, como Talkback.</li>
+</ul>
+
+<p>Si necesitas que tu aplicación acceda a datos mientras se ejecuta el modo de inicio directo, usa
+el almacenamiento encriptado por dispositivo. Este tipo de almacenamiento contiene datos
+encriptados con una clave que solo está disponible luego de que el dispositivo haya realizado un inicio
+verificado correctamente.</p>
+
+<p>Para los datos que se deben cifrar con una clave asociada con credenciales del
+usuario, como un PIN o una contraseña, usa el almacenamiento encriptado por credencial.
+Este tipo de almacenamiento solo está disponible luego de que el usuario haya desbloqueado
+correctamente el dispositivo y hasta que el usuario reinicie nuevamente el dispositivo. Si el
+usuario habilita el bloqueo de pantalla luego de desbloquear el dispositivo, esto no bloquea
+el almacenamiento encriptado por credencial.</p>
+
+<h2 id="run">Solicitar acceso para ejecutar durante el inicio directo</h2>
+
+<p>Debes registrar los componentes de las aplicaciones con el sistema antes de que estas puedan
+ejecutarse durante el modo de inicio directo o acceder al almacenamiento encriptado por
+dispositivo. Para registrar una aplicación en el sistema, debes marcar los componentes como
+<i>"con reconocimiento de encriptación"</i>. Para marcar tu dispositivo como "con reconocimiento de encriptación", configura el atributo
+<code>android:directBootAware</code> como verdadero en el manifiesto.<p>
+
+<p>Los componentes con reconocimiento de encriptación pueden registrarse para recibir un mensaje de transmisión
+<code>LOCKED_BOOT_COMPLETED</code> del
+ sistema cuando el dispositivo se haya reiniciado. En este momento, el almacenamiento
+encriptado por dispositivo está disponible, y el componente puede ejecutar tareas que se deben
+ejecutar durante el modo de inicio directo, como disparar una alarma programada.</p>
+
+<p>El siguiente fragmento de código es un ejemplo de cómo registrar un
+{@link android.content.BroadcastReceiver} como reconocimiento de encriptación y de cómo agregar un
+filtro de intents para <code>LOCKED_BOOT_COMPLETED</code> en el manifiesto de la aplicación:</p>
+
+<pre>
+<receiver
+ android:directBootAware="true" >
+ ...
+ <intent-filter>
+ <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
+ </intent-filter>
+</receiver>
+</pre>
+
+<p>Una vez que el usuario haya desbloqueado el dispositivo, todos los componentes podrán acceder tanto al
+almacenamiento encriptado por dispositivo como al almacenamiento cifrado por credencial.</p>
+
+<h2 id="access">Acceder al almacenamiento encriptado por dispositivo</h2>
+
+<p>Para acceder al almacenamiento encriptado por dispositivo, crea una segunda
+instancia de {@link android.content.Context} llamando a
+<code>Context.createDeviceProtectedStorageContext()</code>. Todas las llamadas
+de API de almacenamiento que se hacen usando este contexto acceden al almacenamiento encriptado por dispositivo. El siguiente
+ejemplo accede al almacenamiento encriptado por dispositivo y abre un archivo de datos de la aplicación
+existente:</p>
+
+<pre>
+Context directBootContext = appContext.createDeviceProtectedStorageContext();
+// Access appDataFilename that lives in device encrypted storage
+FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
+// Use inStream to read content...
+</pre>
+
+<p>Solo debes usar el almacenamiento encriptado por dispositivo para
+información que debe ser accesible durante el modo de inicio directo.
+No uses este tipo de almacenamiento como un almacenamiento encriptado de propósito general.
+Para información privada del usuario o datos encriptados que no son necesarios durante
+el modo de inicio directo, usa el almacenamiento encriptado por credencial.</p>
+
+<h2 id="notification">Recibir notificaciones sobre el desbloqueo del usuario</h2>
+
+<p>Una vez que el usuario desbloquea el dispositivo después de reiniciarlo, la aplicación puede cambiar y acceder
+al almacenamiento encriptado por credencial y usar servicios del sistema comunes que
+dependen de credenciales de usuario.</p>
+
+<p>Para recibir una notificación cuando el usuario desbloquea el dispositivo luego de reiniciarlo,
+registra un {@link android.content.BroadcastReceiver} de un componente en ejecución
+para que escuche el mensaje <code>ACTION_USER_UNLOCKED</code>. O puedes
+recibir el mensaje existente {@link android.content.Intent#ACTION_BOOT_COMPLETED
+ACTION_BOOT_COMPLETED}, que ahora indica que el dispositivo se ha iniciado y
+que el usuario ha desbloqueado el dispositivo.</p>
+
+<p>Puedes consultar directamente si el usuario ha desbloqueado el dispositivo llamando a
+<code>UserManager.isUserUnlocked()</code>.</p>
+
+<h2 id="migrating">Migrar datos existentes</h2>
+
+<p>Si un usuario actualiza el dispositivo para usar el modo de inicio directo, es posible que haya
+datos existentes que se deban migrar al almacenamiento encriptado por dispositivo. Usa
+<code>Context.moveSharedPreferencesFrom()</code> y
+<code>Context.moveDatabaseFrom()</code> para migrar los datos de preferencia y de base de datos
+del almacenamiento encriptado por credencial al almacenamiento encriptado por dispositivo.</p>
+
+<p>Debes tener cuidado cuando decidas qué datos migrar entre
+estos dos tipos de almacenamiento. No deberías migrar
+información de usuario privada, como contraseñas o tokens de autorización, al
+ almacenamiento encriptado por dispositivo. En algunos casos, es posible que debas gestionar
+conjuntos separados de datos en ambos tipos de almacenamiento encriptado.</p>
+
+<h2 id="testing">Probar la aplicación con reconocimiento de encriptación</h2>
+
+<p>Prueba la aplicación con reconocimiento de encriptación usando el nuevo modo de inicio directo. Hay dos
+maneras de habilitar el inicio directo.</p>
+
+<p class="caution"><strong>Advertencia:</strong> Habilitar el inicio directo
+borrará todos los datos de usuario del dispositivo.</p>
+
+<p>Para los dispositivos compatibles que tienen Android N instalado, habilita
+el inicio directo mediante una de las siguientes opciones:</p>
+
+<ul>
+<li>En el dispositivo, habilita las <b>Developer options</b> si no lo haz hecho aún
+yendo a <b>Settings > About phone</b> y presionando <b>Build number</b>
+siete veces. Una vez que aparezca la pantalla Developer options, dirígete a
+<b>Settings > Developer options</b> y selecciona
+<b>Convert to file encryption</b>.</li>
+<li>Usa los siguientes comandos shell ADB para habilitar el modo de inicio directo:
+<pre class="no-pretty-print">
+$ adb reboot-bootloader
+$ fastboot --wipe-and-use-fbe
+</pre>
+</li>
+</ul>
+
+<p>También está disponible un modo de inicio directo emulado en caso de que debas cambiar
+de modo en los dispositivos de prueba. El modo emulado solo debería usarse durante
+el desarrollo, y puede provocar la pérdida de datos. Para habilitar el modo de inicio directo emulado,
+debes establecer un patrón de bloqueo en el dispositivo, elegir "No thanks" si te pregunta si deseas un
+inicio seguro cuando estás estableciendo el patrón de bloqueo y, luego, usar el
+siguiente comando shell ADB:</p>
+
+<pre class="no-pretty-print">
+$ adb shell sm set-emulate-fbe true
+</pre>
+
+<p>Para deshabilitar el modo de inicio directo emulado, usa el siguiente comando:</p>
+
+<pre class="no-pretty-print">
+$ adb shell sm set-emulate-fbe false
+</pre>
+
+<p>Usar estos comandos provoca el reinicio del dispositivo.</p>
diff --git a/docs/html-intl/intl/es/training/articles/scoped-directory-access.jd b/docs/html-intl/intl/es/training/articles/scoped-directory-access.jd
new file mode 100644
index 0000000..194bfd7
--- /dev/null
+++ b/docs/html-intl/intl/es/training/articles/scoped-directory-access.jd
@@ -0,0 +1,148 @@
+page.title=Acceso a directorios determinados
+page.keywords=preview,sdk,scoped directory access
+page.tags=androidn
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>En este documento</h2>
+ <ol>
+ <li><a href="#accessing">Acceder a un directorio de almacenamiento externo</a></li>
+ <li><a href="#removable">Acceder a un directorio de un medio extraíble</a></li>
+ <li><a href="#best">Prácticas recomendadas</a></li>
+ </ol>
+</div>
+</div>
+
+<p>Las aplicaciones como las aplicaciones de fotografía generalmente solo necesitan acceso a directorios de
+almacenamiento externo, como el directorio <code>Pictures</code>. Los métodos
+existentes para acceder a almacenamiento externo no están diseñados para brindar un
+acceso fácil a determinados directorios para estos tipos de aplicaciones. Por ejemplo:</p>
+
+<ul>
+<li>Solicitar {@link android.Manifest.permission#READ_EXTERNAL_STORAGE}
+o {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} en tu manifiesto
+permite el acceso a todos los directorios públicos de un almacenamiento externo, lo cual podría ser
+un acceso mayor que el que necesita tu aplicación.</li>
+<li>Usar el
+<a href="{@docRoot}guide/topics/providers/document-provider.html">framework
+de acceso al almacenamiento</a> generalmente implica que el usuario seleccione directorios
+mediante un sistema de IU, lo cual no es necesario si tu aplicación siempre accede al mismo
+directorio externo.</li>
+</ul>
+
+<p>Android N brinda una API nueva y simplificada para acceder a
+ directorios de almacenamiento externo comunes. </p>
+
+<h2 id="accessing">Acceder a un directorio de almacenamiento externo</h2>
+
+<p>Usa la clase <code>StorageManager</code> para obtener la instancia de
+<code>StorageVolume</code> correcta. Luego, crea una intent llamando al
+ método <code>StorageVolume.createAccessIntent()</code> de esa instancia.
+Usa esta intención para acceder a directorios de almacenamiento externo. Para obtener una lista de
+todos los volúmenes disponibles, incluidos los volúmenes de medios extraíbles, usa
+<code>StorageManager.getVolumesList()</code>.</p>
+
+<p>Si tienes información sobre un archivo específico, usa
+<code>StorageManager.getStorageVolume(File)</code> para obtener el
+<code>StorageVolume</code> que contiene el archivo. Llama a
+<code>createAccessIntent()</code> en este <code>StorageVolume</code> para acceder al
+directorio de almacenamiento externo del archivo.</p>
+
+<p>
+En el caso de los volúmenes secundarios, como las tarjetas SD externas, pasa un valor nulo cuando llames a
+<code>StorageVolume.createAccessIntent()</code> para solicitar acceso al volumen
+ completo, en lugar de un directorio específico.
+<code>StorageVolume.createAccessIntent()</code> regresa un valor nulo si pasas un
+ valor nulo para el volumen principal o si pasas un nombre de directorio no válido.
+</p>
+
+<p>El siguiente fragmento de código es un ejemplo de cómo abrir el
+directorio <code>Pictures</code> en el almacenamiento compartido principal:</p>
+
+<pre>
+StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
+StorageVolume volume = sm.getPrimaryVolume();
+Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+</pre>
+
+<p>El sistema intenta otorgar acceso al directorio externo y, si
+es necesario, confirma el acceso con el usuario usando una IU simplificada:</p>
+
+<img src="{@docRoot}images/android-7.0/scoped-directory-access-framed.png" srcset="{@docRoot}images/android-7.0/scoped-directory-access-framed.png 1x,
+{@docRoot}images/android-7.0/scoped-directory-access-framed_2x.png 2x" />
+<p class="img-caption"><strong>Imagen 1.</strong> Una aplicación solicitando
+acceso al directorio Pictures.</p>
+
+<p>Si el usuario otorga el acceso, el sistema llama a tu
+ anulación de <code>onActivityResult()</code> con un código resultante de
+<code>Activity.RESULT_OK</code> y datos de intents que contienen el URI. Usa
+el URI brindado para acceder a la información del directorio. Es similar a usar URI
+generados por el
+<a href="{@docRoot}guide/topics/providers/document-provider.html">framework
+de acceso al almacenamiento</a>.</p>
+
+<p>Si el usuario no otorga el acceso, el sistema llama a tu
+anulación de <code>onActivityResult()</code> con un código resultante de
+<code>Activity.RESULT_CANCELED</code> y datos de intents nulos.</p>
+
+<p class="note"><b>Nota</b>: Obtener acceso a un directorio externo específico
+también otorga el acceso a los subdirectorios de ese directorio.</p>
+
+<h2 id="removable">Acceder a un directorio de un medio extraíble</h2>
+
+<p>Para usar el acceso a directorios determinados para acceder a directorios de medios extraíbles,
+primero debes agregar un {@link android.content.BroadcastReceiver} que escuche la
+notificación{@link android.os.Environment#MEDIA_MOUNTED}, por ejemplo:</p>
+
+<pre>
+<receiver
+ android:name=".MediaMountedReceiver"
+ android:enabled="true"
+ android:exported="true" >
+ <intent-filter>
+ <action android:name="android.intent.action.MEDIA_MOUNTED" />
+ <data android:scheme="file" />
+ </intent-filter>
+</receiver>
+</pre>
+
+<p>Cuando el usuario conecta un medio extraíble, como una tarjeta SD, el sistema envía una
+notificación{@link android.os.Environment#MEDIA_MOUNTED}. Esta notificación
+brinda un objeto <code>StorageVolume</code> en los datos de intents que puedes
+usar para acceder a directorios del medio extraíble. El siguiente ejemplo
+accede al directorio <code>Pictures</code> de medios extraíbles:</p>
+
+<pre>
+// BroadcastReceiver has already cached the MEDIA_MOUNTED
+// notification Intent in mediaMountedIntent
+StorageVolume volume = (StorageVolume)
+ mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
+volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+</pre>
+
+<h2 id="best">Prácticas recomendadas</h2>
+
+<p>Cuando sea posible, sigue usando el URI de acceso a directorios externos de modo que no tengas
+que solicitarle acceso al usuario continuamente. Una vez que el usuario haya otorgado el acceso, llama a
+<code>getContentResolver().takePersistableUriPermssion()</code> con el
+URI de acceso a directorios. El sistema continuará el URI, y las siguientes solicitudes
+de acceso generarán <code>RESULT_OK</code> y no le mostrarán una IU de confirmación al
+usuario.</p>
+
+<p>Si el usuario deniega el acceso a un directorio externo, no vuelvas a solicitar el
+acceso inmediatamente. Hacer esto provocaría una mala experiencia
+de usuario. Si el usuario deniega una solicitud y la aplicación solicita acceso
+ nuevamente, aparece la casilla de verificación <b>Don't ask again</b> en la IU:</p>
+
+<img src="{@docRoot}images/android-7.0/scoped-directory-access-dont-ask.png" srcset="{@docRoot}images/android-7.0/scoped-directory-access-dont-ask.png 1x,
+{@docRoot}images/android-7.0/scoped-directory-access-dont-ask_2x.png 2x" />
+<p class="img-caption"><strong>Figura 1.</strong> Una aplicación que presenta una
+segunda solicitud para obtener acceso a medios extraíbles.</p>
+
+<p>Si el usuario selecciona <b>Don't ask again</b> y deniega la solicitud, todas las
+solicitudes futuras que presente la aplicación para el directorio determinado se denegarán
+ automáticamente, y el usuario no recibirá ninguna IU de solicitud.</p>
\ No newline at end of file
diff --git a/docs/html-intl/intl/es/training/articles/security-config.jd b/docs/html-intl/intl/es/training/articles/security-config.jd
new file mode 100644
index 0000000..7deadbe
--- /dev/null
+++ b/docs/html-intl/intl/es/training/articles/security-config.jd
@@ -0,0 +1,747 @@
+page.title=Configuración de seguridad de la red
+page.keywords=androidn,security,network
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>En este documento</h2>
+<ol>
+ <li><a href="#manifest">Agregar un archivo de configuración de seguridad</a></li>
+ <li><a href="#CustomTrust">Personalizar las CA de confianza</a>
+ <ol>
+ <li><a href="#ConfigCustom">Configurar una CA de confianza personalizada</a></li>
+ <li><a href="#LimitingCas">Limitar el conjunto de CA de confianza</a></li>
+ <li><a href="#TrustingAdditionalCas">Otorgar confianza a CA adicionales</a></li>
+ </ol>
+ </li>
+ <li><a href="#TrustingDebugCa">CA de solo depuración</a></li>
+ <li><a href="#UsesCleartextTraffic">Desactivar el tráfico de Cleartext</a></li>
+ <li><a href="#CertificatePinning">Fijar certificados</a></li>
+ <li><a href="#ConfigInheritance">Comportamiento de herencia de configuración</a></li>
+ <li><a href="#FileFormat">Formato del archivo de configuración</a></li>
+</ol>
+</div>
+</div>
+
+
+<p>
+ Android N incluye una función de configuración de seguridad de la red
+ que les permite a las aplicaciones personalizar los ajustes de seguridad de la red mediante un archivo
+ de configuración declarativo seguro sin que haya que modificar el código de la aplicación. Estos ajustes se pueden
+ configurar para dominios específicos y para una aplicación específica. Las capacidades
+ clave de esta función son las siguientes:
+</p>
+
+<ul>
+ <li>
+ <b>Anclajes de confianza personalizados:</b> personalizar qué autoridades de certificado (CA)
+ son de confianza para las conexiones de seguridad de una aplicación. Por ejemplo,
+ confiar en certificados autofirmados particulares
+ o restringir el conjunto de CA públicas en las que confía la aplicación.
+ </li>
+
+ <li>
+ <b>Anulaciones de solo depuración:</b> depurar de forma segura conexiones
+ de una aplicación sin riesgos adicionales para la base instalada.
+ </li>
+
+ <li>
+ <b>Desactivación del tráfico de Cleartext:</b> proteger a las aplicaciones del
+ uso accidental de tráfico de Cleartext.
+ </li>
+
+ <li>
+ <b>Fijación de certificados:</b> restringir la conexión segura de una aplicación
+ a certificados en particular.
+ </li>
+</ul>
+
+
+<h2 id="manifest">Agregar un archivo de configuración de seguridad</h2>
+
+<p>
+ La función de configuración de seguridad de la red usa un archivo XML donde
+ se especifican los ajustes para la aplicación. Debes incluir una entrada en el manifiesto de tu
+ aplicación que apunte a este archivo. El siguiente fragmento de código de un manifiesto
+ demuestra cómo crear esta entrada:
+</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<manifest ... >
+ <application ... >
+ <meta-data android:name="android.security.net.config"
+ android:resource="@xml/network_security_config" />
+ ...
+ </application>
+</manifest>
+</pre>
+
+<h2 id="CustomTrust">Personalizar las CA de confianza</h2>
+
+<p>
+ Una aplicación podría querer otorgar confianza a un conjunto personalizado de CA en lugar de hacerlo según los ajustes
+ predeterminados de la plataforma. Las razones más comunes son las siguientes:
+</p>
+
+<ul>
+ <li>Conectarse a un host con una autoridad de certificado personalizada (autofirmado,
+ emitido por una CA corporativa interna, etc.).
+ </li>
+
+ <li>Limitar el conjunto de CA a CA de confianza establecidas por el usuario y no a cada
+ CA preinstalada.
+ </li>
+
+ <li>Otorgar confianza a CA adicionales que no están incluidas en el sistema
+ </li>
+</ul>
+
+<p>
+ De forma predeterminada, las conexiones seguras (p. ej.: TLS, HTTP) de todas las aplicaciones dependen de
+ las CA preinstaladas del sistema; las aplicaciones que tienen como objetivo a la API nivel 23
+ (Android M) e inferiores también dependen de la tienda de CA agregada por el usuario de forma predeterminada. Una
+ aplicación puede personalizar sus propias conexiones usando {@code base-config} (para
+ la personalización de toda la aplicación) o {@code domain-config} (para la personalización
+ por dominio).
+</p>
+
+
+<h3 id="ConfigCustom">Configurar una CA de confianza personalizada</h3>
+
+<p>
+ Supongamos que deseas conectarte a tu host, el cual usa un certificado SSL
+ autofirmado, o a un host cuyo certificado SSL está emitido por una CA no pública
+ en la cual confías, como la CA interna de tu empresa.
+</p>
+
+<p>
+ <code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/my_ca"/>
+ </trust-anchors>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+<p>
+ Agrega el certificado de CA autofirmado o no público, en formato PEM o DER, a
+ {@code res/raw/my_ca}.
+</p>
+
+
+<h3 id="LimitingCas">Limitar el conjunto de CA de confianza</h3>
+
+<p>
+ Una aplicación que no desee confiar en todas las CA en que confía el sistema puede,
+ en su lugar, especificar su propio conjunto reducido de CA en las que confía. Esto protege a la aplicación
+ de certificados fraudulentos emitidos por cualquiera de las demás CA.
+</p>
+
+<p>
+ La configuración para limitar el conjunto de CA de confianza es similar a <a href="#TrustingACustomCa">confiar en una CA personalizada</a> para un dominio específico, con la diferencia
+ de que se brindan múltiples CA en el recurso.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">secure.example.com</domain>
+ <domain includeSubdomains="true">cdn.example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/trusted_roots"/>
+ </trust-anchors>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+<p>
+ Agrega las CA de confianza, en formato PEM o DER, a {@code res/raw/trusted_roots}.
+ Ten en cuenta que, si usas el formato PEM, el archivo debe incluir <em>solo</em> datos PEM
+ y ningún texto adicional. También puedes brindar elementos
+<a href="#certificates"><code><certificates></code></a>
+ múltiples en lugar de solo uno.
+</p>
+
+
+<h3 id="TrustingAdditionalCas">
+ Otorgar confianza a CA adicionales
+</h3>
+
+<p>
+ Una aplicación podría querer otorgar confianza a CA adicionales en las cuales el sistema no confía,
+ ya sea porque el sistema aún no incluye la CA o porque la CA no
+ cumple con los requisitos de inclusión del sistema Android. La
+ aplicación puede hacerlo especificando múltiples fuentes de certificado para una
+ configuración.
+</p>
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <base-config>
+ <trust-anchors>
+ <certificates src="@raw/extracas"/>
+ <certificates src="system"/>
+ </trust-anchors>
+ </base-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="TrustingDebugCa">Configurar las CA para depuración</h2>
+
+<p>
+ Cuando depuras una aplicación que se conecta mediante HTTPS, podrías querer
+ conectarte a un servidor de desarrollo local que no tiene el certificado
+ SSL de tu servidor de producción. Para poder hacerlo sin
+ tener que modificar el código de tu aplicación, puedes especificar CA de solo depuración que
+ solo <i>son</i> de confianza cuando <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">
+android:debuggable</a>
+ es {@code true} usando {@code debug-overrides}. Generalmente, las herramientas de IDE
+ y de compilación configuran esta marca automáticamente para las compilaciones que no son de lanzamiento.
+</p>
+
+<p>
+ Esto es más seguro que el código condicional habitual ya que, como precaución
+ de seguridad, las tiendas de aplicaciones no aceptan aplicaciones que están marcadas
+ como depurables.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <debug-overrides>
+ <trust-anchors>
+ <certificates src="@raw/debug_cas"/>
+ </trust-anchors>
+ </debug-overrides>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="UsesCleartextTraffic">Desactivar el tráfico de Cleartext</h2>
+
+<p>
+ Las aplicaciones que deseen conectarse a destinos usando solo conexiones
+ seguras pueden desactivar Cleartext (usando el protocolo
+ HTTP no encriptado en lugar del protocolo HTTPS) para esos destinos. Esta opción ayuda a prevenir
+ las regresiones accidentales en aplicaciones debido a cambios en direcciones URL generados por fuentes
+ externas como servidores backend.
+ Consulta {@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted
+ NetworkSecurityPolicy.isCleartextTrafficPermitted()} para obtener más información.
+</p>
+
+<p>
+ Por ejemplo, una aplicación puede querer garantizar que todas las conexiones a {@code
+secure.example.com} se hagan siempre mediante HTTPS para proteger el tráfico sensible
+ de redes hostiles.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config usesCleartextTraffic="false">
+ <domain includeSubdomains="true">secure.example.com</domain>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="CertificatePinning">Fijar certificados</h2>
+
+<p>
+ Generalmente, una aplicación otorga confianza a todas las CA preinstaladas. Si alguna de estas CA emitiera
+ un certificado fraudulento, la aplicación estaría en riesgo de sufrir un ataque
+ MiTM. Algunas aplicaciones eligen limitar el conjunto de certificados que aceptan
+ ya sea limitando el conjunto de CA al que otorgan confianza o fijando certificados.
+</p>
+
+<p>
+ La fijación de certificados se hace brindando un conjunto de certificados por hash de la
+ clave pública (SubjectPublicKeyInfo del certificado X.509). De este modo,
+ una cadena de certificados solo es válida si contiene al menos una de
+ las claves públicas fijadas.
+</p>
+
+<p>
+ Ten en cuenta que, cuando uses la fijación de certificados, siempre debes incluir una clave
+ de respaldo para que, si te ves obligado a cambiar a claves nuevas o a cambiar de CA (cuando
+ fijas un certificado de CA o un intermediario de esa CA), la conectividad
+ de la aplicación no se vea afectada. Si no, deberás actualizar
+ la aplicación para recuperar la conectividad.
+</p>
+
+<p>
+ Además, se puede configurar un tiempo de expiración para las fijaciones,
+ luego del cual las fijaciones dejan de realizarse. Esto ayuda a evitar los problemas de conectividad
+ en aplicaciones que no se han actualizado. Sin embargo, configurar un tiempo de expiración
+ para las fijaciones puede habilitar la omisión de fijaciones.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <pin-set expiration="2018-01-01">
+ <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
+ <!-- backup pin -->
+ <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
+ </pin-set>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="ConfigInheritance">Comportamiento de herencia de configuración</h2>
+
+<p>
+ Los valores que no se establecen en una configuración específica se heredan. Este comportamiento permite configuraciones
+ más complejas y un archivo de configuración de fácil lectura.
+</p>
+
+<p>
+ Si no se establece un valor en una entrada específica, se usa el valor de
+ la siguiente entrada más general. Los valores no establecidos en una {@code domain-config} se
+ toman de la {@code domain-config} primaria, si están anidados, o de la {@code
+base-config}, si no están anidados. Los valores no establecidos en la {@code base-config} usan
+ los valores predeterminados de la plataforma.
+</p>
+
+<p>
+ Por ejemplo, cuando todas las conexiones a subdominios de {@code
+example.com} deben usar un conjunto personalizado de CA. Además, el tráfico de Cleartext a
+ estos dominios se permite <em>excepto</em> con las conexiones a {@code
+ secure.example.com}. Anidando la configuración para {@code
+secure.example.com} dentro de la configuración para {@code example.com},
+ {@code trust-anchors} no necesita duplicación.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/my_ca"/>
+ </trust-anchors>
+ <domain-config cleartextTrafficPermitted="false">
+ <domain includeSubdomains="true">secure.example.com</domain>
+ </domain-config>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="FileFormat">Formato del archivo de configuración</h2>
+
+<p>
+ La función de configuración de seguridad de la red usa un formato de archivo XML.
+ La estructura general del archivo se muestra en el siguiente ejemplo de código:
+</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <base-config>
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ </base-config>
+
+ <domain-config>
+ <domain>android.com</domain>
+ ...
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ <pin-set>
+ <pin digest="...">...</pin>
+ ...
+ </pin-set>
+ </domain-config>
+ ...
+ <debug-overrides>
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ </debug-overrides>
+</network-security-config>
+</pre>
+
+<p>
+ Las siguientes secciones describen la sintaxis y otros detalles del formato
+ de archivo.
+</p>
+
+<h3 id="network-security-config">
+ <network-security-config>
+</h3>
+
+<dl class="xml">
+ <dt>
+ PUEDE CONTENER:
+ </dt>
+
+ <dd>
+ 0 o 1 de <code><a href="#base-config"><base-config></a></code><br>
+ Cualquier cantidad de <code><a href=
+ "#domain-config"><domain-config></a></code><br>
+ 0 o 1 de <code><a href="#debug-overrides"><debug-overrides></a></code>
+ </dd>
+</dl>
+
+<h3 id="base-config">
+ <base-config>
+</h3>
+
+<dl class="xml">
+ <dt>
+ SINTAXIS:
+ </dt>
+</dl>
+
+<pre class="stx">
+<base-config <a href=
+"#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
+ ...
+</base-config>
+</pre>
+<dl class="xml">
+ <dt>
+ PUEDE CONTENER:
+ </dt>
+
+ <dd>
+ <code><a href="#trust-anchors"><trust-anchors></a></code>
+ </dd>
+
+ <dt>
+ DESCRIPCIÓN:
+ </dt>
+
+ <dd>
+ La configuración predeterminada usada por todas las conexiones cuyo destino no
+ está cubierto por una <a href="#domain-config"><code>domain-config</code></a>.
+
+<p>
+ Los valores que no están configurados usan los valores predeterminados de la plataforma. La configuración predeterminada
+ para aplicaciones con API nivel 24 o superior es:
+</p>
+
+<pre>
+<base-config usesCleartextTraffic="true">
+ <trust-anchors>
+ <certificates src="system" />
+ </trust-anchors>
+</base-config>
+</pre>
+La configuración predeterminada para aplicaciones con API nivel 23 o inferior es:
+<pre>
+<base-config usesCleartextTraffic="true">
+ <trust-anchors>
+ <certificates src="system" />
+ <certificates src="user" />
+ </trust-anchors>
+</base-config>
+</pre>
+
+ </dd>
+</dl>
+
+<h3 id="domain-config"><domain-config></h3>
+<dl class="xml">
+<dt>SINTAXIS:</dt>
+<dd>
+<pre class="stx"><domain-config <a href="#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
+ ...
+</domain-config></pre>
+</dd>
+
+<dt>PUEDE CONTENER:</dt>
+
+<dd>
+1 o más <code><a href="#domain"><domain></a></code>
+<br/>0 o 1 <code><a href="#trust-anchors"><trust-anchors></a></code>
+<br/>0 o 1 <code><a href="#pin-set"><pin-set></code></a>
+<br/>Cualquier cantidad de <code><domain-config></code> anidadas</dd>
+
+<dt>DESCRIPCIÓN</dt>
+<dd>Configuración usada para conexiones con destinos específicos, como los definidos por elementos de {@code domain}.
+
+<p>Ten en cuenta que, si múltiples elementos de {@code domain-config} cubren un destino, la configuración con la regla de coincidencia de dominio más específica (más larga)
+ es la que se usa.</p></dd>
+</dl>
+
+
+<h3 id="domain"><domain></h3>
+
+<dl class="xml">
+ <dt>
+ SINTAXIS:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<domain includeSubdomains=["true" | "false"]>example.com</domain>
+</pre>
+ </dd>
+
+ <dt>
+ ATRIBUTOS:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code includeSubdomains}
+ </dt>
+
+ <dd>
+ Si es {@code "true"}, esta regla de dominio coincide con el dominio
+ y con todos los subdominios, incluidos los subdominios de subdominios. Si no, la regla
+ solo se aplica a coincidencias exactas.
+ </dd>
+ </dl>
+ </dd>
+
+ <dt>
+ DESCRIPCIÓN:
+ </dt>
+</dl>
+
+<h3 id="debug-overrides"><debug-overrides></h3>
+
+<dl class="xml">
+ <dt>
+ sintaxis:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<debug-overrides>
+ ...
+</debug-overrides>
+</pre>
+ </dd>
+
+ <dt>
+ PUEDE CONTENER:
+ </dt>
+
+ <dd>
+ 0 o 1 <code><a href="#trust-anchors"><trust-anchors></a></code>
+ </dd>
+
+ <dt>
+ DESCRIPCIÓN:
+ </dt>
+
+ <dd>
+ Sobrescrituras que se deben aplicar cuando <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
+ es {@code "true"}, que es, generalmente, el caso de las compilaciones que no sean de lanzamiento
+ generadas por herramientas de IDE y de compilación. Los anclajes de confianza especificados en {@code
+ debug-overrides} se agregan a todas las demás configuraciones, y la fijación
+ de certificados no se lleva a cabo cuando la cadena de certificados del servidor usa uno de estos
+ anclajes de confianza de solo depuración. Si <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
+ es {@code "false"}, entonces, esta sección se omite por completo.
+ </dd>
+</dl>
+
+<h3 id="trust-anchors"><trust-anchors></h3>
+<dl class="xml">
+ <dt>
+ SINTAXIS:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<trust-anchors>
+...
+</trust-anchors>
+</pre>
+ </dd>
+
+ <dt>
+ PUEDE CONTENER:
+ </dt>
+
+ <dd>
+ Cualquier cantidad de <code><a href="#certificates"><certificates></a></code>
+ </dd>
+
+ <dt>
+ DESCRIPCIÓN:
+ </dt>
+
+ <dd>
+ Conjunto de anclajes de confianza para conexiones seguras.
+ </dd>
+</dl>
+
+
+<h3 id="certificates"><certificates></h3>
+<dl class="xml">
+<dt>SINTAXIS:</dt>
+<dd><pre class="stx"><certificates src=["system" | "user" | "<i>raw resource</i>"]
+ overridePins=["true" | "false"] />
+</pre></dd>
+<dt>DESCRIPCIÓN:</dt>
+<dd>Conjunto de certificados X.509 para elementos de {@code trust-anchors}.</dd>
+
+<dt>ATRIBUTOS:</dt>
+<dd><dl class="attr">
+<dt>{@code src}</dt>
+<dd>
+La fuente de los certificados de CA puede ser una de las siguientes opciones:
+<ul>
+ <li>Una ID de recurso sin procesar que apunta a un archivo que contiene certificados X.509.
+ Los certificados deben estar codificados en formato DER o PEM. En el caso de los certificados
+ PEM, el archivo <em>no debe</em> contener datos adicionales que no sean de PEM, como
+ comentarios.
+ </li>
+
+ <li>{@code "system"} para los certificados de CA preinstalados del sistema.
+ </li>
+
+ <li>{@code "user"} para los certificados de CA agregados por el usuario.
+ </li>
+</ul>
+</dd>
+
+<dt>{@code overridePins}</dt>
+<dd>
+ <p>
+ Especifica si las CA de esta fuente omiten la fijación de certificados. Si es {@code
+"true"}, las cadenas de certificados se encadenan mediante una de estas CA
+ desde esta fuente, y la fijación no se lleva a cabo. Esto puede ser útil para CA de depuración
+ o para poder permitirle al usuario hacer un ataque MiTM al tráfico seguro de la aplicación.
+ </p>
+
+ <p>
+ Es {@code "false"} de forma predeterminada, a menos que se especifique en un elemento de {@code debug-overrides}
+, en cuyo caso, es {@code "true"} de forma predeterminada.
+ </p>
+</dd>
+</dl>
+</dd>
+
+
+<h3 id="pin-set"><pin-set></h3>
+
+<dl class="xml">
+ <dt>
+ SINTAXIS:
+ </dt>
+
+ <dd>
+<pre class="stx">
+<pin-set expiration="date">
+...
+</pin-set>
+</pre>
+ </dd>
+
+ <dt>
+ PUEDE CONTENER:
+ </dt>
+
+ <dd>
+ Cualquier cantidad de <code><a href="#pin"><pin></a></code>
+ </dd>
+
+ <dt>
+ DESCRIPCIÓN:
+ </dt>
+
+ <dd>
+ Un conjunto de fijaciones de claves públicas. Para que una conexión segura sea de confianza, una de las
+ claves públicas de la cadena de confianza debe estar en el conjunto de fijaciones. Consulta
+ <code><a href="#pin"><pin></a></code> para el formato de las fijaciones.
+ </dd>
+
+ <dt>
+ ATRIBUTOS:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code expiration}
+ </dt>
+
+ <dd>
+ La fecha, en formato {@code yyyy-MM-dd}, a partir de la cual
+ expiran las fijaciones, lo cual deshabilita la fijación. Si el atributo no está establecido, las fijaciones
+ no expiran.
+ <p>
+ La expiración ayuda a evitar problemas de conectividad en aplicaciones que no
+ reciben actualizaciones para el conjunto de fijaciones, por ejemplo, porque el usuario
+ deshabilitó las actualizaciones de la aplicación.
+ </p>
+ </dd>
+ </dl>
+ </dd>
+</dl>
+
+<h3 id="pin"><pin></h3>
+<dl class="xml">
+ <dt>
+ sintaxis:
+ </dt>
+
+ <dd>
+<pre class="stx">
+<pin digest=["SHA-256"]>base64 encoded digest of X.509
+ SubjectPublicKeyInfo (SPKI)</pin>
+</pre>
+ </dd>
+
+ <dt>
+ ATRIBUTOS:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code digest}
+ </dt>
+
+ <dd>
+ Resumen del algoritmo usado para generar la fijación. Actualmente, solo se admite
+ {@code "SHA-256"}.
+ </dd>
+ </dl>
+ </dd>
+</dl>
diff --git a/docs/html-intl/intl/es/training/basics/network-ops/data-saver.jd b/docs/html-intl/intl/es/training/basics/network-ops/data-saver.jd
new file mode 100644
index 0000000..d1d6c34
--- /dev/null
+++ b/docs/html-intl/intl/es/training/basics/network-ops/data-saver.jd
@@ -0,0 +1,234 @@
+page.title=Ahorro de datos
+metaDescription=User-enabled data usage optimization.
+page.keywords="android N", "data usage", "metered network"
+page.image=images/cards/card-nyc_2x.jpg
+@jd:body
+
+<div id="tb-wrapper">
+ <div id="tb">
+ <h2>
+ En este documento
+ </h2>
+
+ <ol>
+ <li>
+ <a href="#status">Verificación de las preferencias de ahorro de datos</a>
+ <ol>
+ <li>
+ <a href="#request-whitelist">Solicitud de permisos de lista blanca</a>
+ </li>
+ </ol>
+ </li>
+
+ <li>
+ <a href="#monitor-changes">Control de cambios en las preferencias
+ de ahorro de datos</a>
+ </li>
+
+ <li>
+ <a href="#testing">Pruebas con comandos de Android Debug Bridge</a>
+ </li>
+ </ol>
+ </div>
+</div>
+
+<p>
+ Durante la vida útil de un smartphone, el costo de un plan de datos móviles puede
+ superar fácilmente el costo del propio dispositivo. En la versión N Developer Preview, los usuarios pueden
+ habilitar el ahorro de datos en todo el dispositivo a fin de reducir el uso de datos, ya sea con
+ servicio de itinerancia, cerca del final del ciclo de facturación o con un pequeño paquete de datos prepago.
+</p>
+
+<p>
+ Cuando un usuario habilita el ahorro de datos en <strong>Settings</strong> y el dispositivo está conectado
+ a una red de uso medido, el sistema bloquea el uso de datos en segundo plano y envía señales
+ a las aplicaciones para que utilicen menos datos en primer plano siempre que sea posible. Los usuarios pueden
+ incluir aplicaciones específicas en la lista blanca para permitir el uso de datos medidos en segundo plano, incluso cuando está activado el ahorro
+ de datos.
+</p>
+
+<p>
+ La N Developer Preview extiende la API {@link android.net.ConnectivityManager}
+ para que las aplicaciones puedan <a href="#status">recuperar las preferencias de
+ ahorro de datos del usuario</a> y <a href="#monitor-changes">controlar
+ los cambios en las preferencias</a>. Se considera una buena práctica que las aplicaciones verifiquen si el
+ usuario habilitó el ahorro de datos y se esfuercen por reducir el uso de datos en primer
+ y segundo plano.
+</p>
+
+<h2 id="status">
+ Verificación de las preferencias de ahorro de datos
+</h2>
+
+<p>
+ En la N Developer Preview, las aplicaciones pueden utilizar la API {@link
+ android.net.ConnectivityManager} para determinar qué restricciones
+ de uso de datos se aplican. Mediante el método {@code getRestrictBackgroundStatus()}
+, se devuelve uno de los siguientes valores:
+</p>
+
+<dl>
+ <dt>
+ {@code RESTRICT_BACKGROUND_STATUS_DISABLED}
+ </dt>
+
+ <dd>
+ El ahorro de datos está inhabilitado.
+ </dd>
+
+ <dt>
+ {@code RESTRICT_BACKGROUND_STATUS_ENABLED}
+ </dt>
+
+ <dd>
+ El usuario habilitó el ahorro de datos para esta aplicación. Las aplicaciones deben esforzarse por reducir
+ el uso de datos en primer plano y manejar correctamente las restricciones para
+ el uso de datos en segundo plano.
+ </dd>
+
+ <dt>
+ {@code RESTRICT_BACKGROUND_STATUS_WHITELISTED}
+ </dt>
+
+ <dd>
+ El usuario habilitó el ahorro de datos, pero la aplicación se encuentra en la lista blanca. Las aplicaciones aún deben
+ esforzarse por reducir el uso de datos en primer y segundo plano.
+ </dd>
+</dl>
+
+<p>
+ Se considera una buena práctica limitar el uso de datos siempre que el dispositivo esté
+ conectado a una red de uso medido, incluso si el ahorro de datos está deshabilitado o la aplicación
+ se encuentra en la lista blanca. El siguiente código de muestra utiliza {@link
+ android.net.ConnectivityManager#isActiveNetworkMetered
+ ConnectivityManager.isActiveNetworkMetered()} y {@code
+ ConnectivityManager.getRestrictBackgroundStatus()} para determinar la cantidad de datos
+ que la aplicación debe utilizar:
+</p>
+
+<pre>
+ConnectivityManager connMgr = (ConnectivityManager)
+ getSystemService(Context.CONNECTIVITY_SERVICE);
+// Checks if the device is on a metered network
+if (connMgr.isActiveNetworkMetered()) {
+ // Checks user’s Data Saver settings.
+ switch (connMgr.getRestrictBackgroundStatus()) {
+ case RESTRICT_BACKGROUND_STATUS_ENABLED:
+ // Background data usage is blocked for this app. Wherever possible,
+ // the app should also use less data in the foreground.
+
+ case RESTRICT_BACKGROUND_STATUS_WHITELISTED:
+ // The app is whitelisted. Wherever possible,
+ // the app should use less data in the foreground and background.
+
+ case RESTRICT_BACKGROUND_STATUS_DISABLED:
+ // Data Saver is disabled. Since the device is connected to a
+ // metered network, the app should use less data wherever possible.
+ }
+} else {
+ // The device is not on a metered network.
+ // Use data as required to perform syncs, downloads, and updates.
+}
+</pre>
+
+<h3 id="request-whitelist">
+ Solicitud de permisos de lista blanca
+</h3>
+
+<p>
+ Si la aplicación necesita utilizar datos en segundo plano, esta puede solicitar permisos de
+ lista blanca mediante el envío de una intent
+ <code>Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS</code>
+ que contenga un URI del nombre de paquete de la aplicación, como por ejemplo,
+ <code>package:MY_APP_ID</code>.
+</p>
+
+<p>
+ Mediante el envío de la intent y el URI, se inicia la aplicación <strong>Settings</strong> y
+ se muestra la configuración de uso de datos para la aplicación. El usuario luego puede decidir si
+ habilita los datos en segundo plano para la aplicación. Antes de enviar esta intent, resulta
+ buena práctica consultarle primero al usuario acerca de si desea iniciar la aplicación
+ <strong>Settings</strong> con el objetivo de habilitar el uso de datos
+ en segundo plano.
+</p>
+
+<h2 id="monitor-changes">
+ Control de cambios en las preferencias de ahorro de datos
+</h2>
+
+<p>
+ Las aplicaciones pueden controlar los cambios en las preferencias de ahorro de datos mediante la creación de un {@link
+ android.content.BroadcastReceiver} para escuchar {@code
+ ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED} y mediante un registro
+ dinámico del receptor con {@link android.content.Context#registerReceiver
+ Context.registerReceiver()}. Cuando una aplicación recibe esta transmisión, debe
+ <a href="#status">verificar si las nuevas preferencias de ahorro de datos afectan los
+ permisos; para ello,</a> la aplicación debe llamar a {@code
+ ConnectivityManager.getRestrictBackgroundStatus()}.
+</p>
+
+<p class="note">
+ <strong>Nota:</strong> El sistema únicamente envía esta transmisión a las aplicaciones que
+ se registran dinámicamente para recibirla con {@link
+ android.content.Context#registerReceiver Context.registerReceiver()}. Las aplicaciones
+ que en su manifiesto registran que la reciben no la
+ recibirán.
+</p>
+
+<h2 id="testing">
+ Pruebas con comandos de Android Debug Bridge
+</h2>
+
+<a href="{@docRoot}tools/help/adb.html">Android Debug Bridge (ADB)</a>
+ofrece algunos comandos que puedes utilizar para verificar y configurar los permisos
+de red:
+
+<dl>
+ <dt>
+ <code>$ adb shell dumpsys netpolicy</code>
+ </dt>
+
+ <dd>
+ Se genera un informe en el que se incluyen la configuración global actual de restricciones de red
+ en segundo plano, los UID de paquetes que se encuentran actualmente en una lista blanca y los permisos
+ de red de otros paquetes conocidos.
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy</code>
+ </dt>
+
+ <dd>
+ Se muestra una lista completa de los comandos del administrador de políticas de red (políticas de red).
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy set restrict-background
+ <boolean></code>
+ </dt>
+
+ <dd>
+ Se habilita o deshabilita el modo de ahorro de datos cuando se asignan los valores <code>true</code> o
+ <code>false</code>, respectivamente.
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy add restrict-background-whitelist
+ <UID></code>
+ </dt>
+
+ <dd>
+ Se agrega el UID del paquete específico a la lista blanca para permitir el uso de datos
+ medidos en segundo plano.
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy remove restrict-background-whitelist
+ <UID></code>
+ </dt>
+
+ <dd>
+ Se quita el UID del paquete específico de la lista blanca para bloquear el uso de datos
+ medidos en segundo plano mientras el ahorro de datos está habilitado.
+ </dd>
+</dl>
diff --git a/docs/html-intl/intl/es/training/tv/playback/picture-in-picture.jd b/docs/html-intl/intl/es/training/tv/playback/picture-in-picture.jd
new file mode 100644
index 0000000..30c9e8b
--- /dev/null
+++ b/docs/html-intl/intl/es/training/tv/playback/picture-in-picture.jd
@@ -0,0 +1,213 @@
+page.title=Modo Picture-in-picture
+page.keywords=preview,sdk,PIP,Picture-in-picture
+page.tags=androidn
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>En este documento</h2>
+<ol>
+ <li><a href="#declaring">Declarar que la actividad permite
+el modo Picture-in-Picture</a></li>
+ <li><a href="#pip_button">Cambiar la actividad al modo Picture-in-picture</a>
+</li>
+ <li><a href="#handling_ui">Gestionar las IU durante el modo Picture-in-picture</a>
+</li>
+ <li><a href="#continuing_playback">Continuar la reproducción de video durante
+el modo Picture-in-picture</a></li>
+ <li><a href="#single_playback">Usar una única actividad de reproducción para
+el modo Picture-in-picture</a></li>
+ <li><a href="#best">Prácticas recomendadas</a></li>
+</ol>
+
+<h2>Consulta también</h2>
+<ol>
+ <li><a href="{@docRoot}preview/features/multi-window.html">Compatibilidad con
+ventanas múltiples</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>Con Android N, los usuarios de Android TV ahora pueden ver un video
+en una ventana fija que se ubica en una esquina de la pantalla mientras navegan dentro de
+aplicaciones. El modo picture-in-picture (PIP) permite que las aplicaciones reproduzcan un video
+en una ventana fija mientras se lleva a cabo otra actividad
+en el fondo. La ventana de PIP les permite a los usuarios realizar múltiples tareas mientras usan tu aplicación, lo cual les permite
+ser más productivos.</p>
+
+<p>Tu aplicación puede decidir cuándo activar el modo PIP. Aquí te mostramos algunos ejemplos de
+situaciones en las que se podría usar el modo PIP:</p>
+
+<ul>
+<li>Tu aplicación puede pasar un video al modo PIP cuando el usuario retrocede
+en la navegación desde el video para explorar otro contenido.</li>
+<li>También puede hacerlo mientras el usuario está viendo el final
+de un episodio de contenido. La pantalla principal muestra información promocional
+o de resumen sobre el próximo capítulo de la serie.</li>
+<li>Tu aplicación puede brindarles a los usuarios una forma de poner en cola otro contenido mientras
+miran un video. El video continúa reproduciéndose en modo PIP mientras la pantalla
+principal muestra una actividad de selección de contenido.</li>
+</ul>
+
+<p>La ventana de PIP es de 240x135 dp y se muestra en la capa delantera en una de las
+cuatro esquinas de la pantalla que el sistema elige. El usuario puede acceder a un menú de
+PIP que le permite activar o desactivar la ventana de PIP a pantalla completa o cerrarla
+presionando el botón <b>Home</b> en el control remoto. Si se comienza a reproducir
+otro video en la pantalla principal, la ventana de PIP se cierra
+automáticamente. Los usuarios también pueden cerrar la ventana de PIP desde Recents.</p>
+
+<img src="{@docRoot}images/android-7.0/pip-active.png" />
+<p class="img-caption"><strong>Imagen 1.</strong> Un video picture-in-picture
+visible en una esquina de la pantalla mientras el usuario explora contenido
+en la pantalla principal.</p>
+
+<p>El modo PIP aprovecha las API de ventanas múltiples disponibles en Android N para
+brindar la ventana superpuesta fija de video. Para agregarle el modo PIP a tu aplicación, debes
+registrar las actividades que permitan este modo, cambiar la actividad al modo PIP según
+sea necesario y asegurarte de que los elementos de IU se oculten y que la reproducción de video continúe mientras
+la actividad se encuentra en modo PIP.</p>
+
+<h2 id="declaring">Declarar que la actividad permite el modo picture-in-picture</h2>
+
+<p>De forma predeterminada, el sistema no permite el modo PIP para aplicaciones automáticamente.
+Si deseas permitir este modo en tu aplicaciones, registra la actividad
+de video en tu manifiesto configurando
+<code>android:supportsPictureInPicture</code> y
+<code>android:resizeableActivity</code> en <code>true</code>. Además, debes especificar
+que tu actividad gestiona los cambios de configuración de la presentación para que la actividad
+no se reinicie cuando ocurran cambios de presentación durante las transiciones en el modo PIP.</p>
+
+<pre>
+<activity android:name="VideoActivity"
+ android:resizeableActivity="true"
+ android:supportsPictureInPicture="true"
+ android:configChanges=
+ "screenSize|smallestScreenSize|screenLayout|orientation"
+ ...
+</pre>
+
+<p>Cuando registres la actividad, ten en cuenta que, en el modo PIP, la
+actividad se muestra en una ventana superpuesta pequeña en una pantalla de TV. Las actividades de reproducción
+de videos con IU mínimas brindan la mejor experiencia de usuario. Las actividades que
+incluyen elementos de IU pequeños podrían no brindar una buena experiencia de usuario
+cuando se cambian al modo PIP, porque los usuarios no podrán ver los detalles de los elementos de IU
+en la ventana PIP.</p>
+
+<h2 id="pip_button">Cambiar la actividad al modo Picture-in-picture</h2>
+
+Cuando necesites cambiar la actividad al modo PIP, llama a
+<code>Activity.enterPictureInPictureMode()</code>. En el siguiente ejemplo, se
+cambia al modo PIP cuando el usuario selecciona un botón PIP especial en una barra
+de control de medios:</p>
+
+<pre>
+@Override
+public void onActionClicked(Action action) {
+ if (action.getId() == R.id.lb_control_picture_in_picture) {
+ getActivity().enterPictureInPictureMode();
+ return;
+ }
+ ...
+</pre>
+
+<p>Agregar un botón PIP a la barra de control de medios le permite al usuario cambiar
+fácilmente al modo PIP y seguir controlando la reproducción de video.</p>
+
+<img src="{@docRoot}images/android-7.0/pip-button.png" />
+<p class="img-caption"><strong>Imagen 1.</strong> Un botón
+PIP en una barra de control de medios.</p>
+
+<p>Android N incluye una nueva clase
+<code>PlaybackControlsRow.PictureInPictureAction</code> que define
+las acciones de PIP de la barra de control y usa el ícono PIP.</p>
+
+<h2 id="handling_ui">Gestionar las IU durante el modo picture-in-picture</h2>
+
+<p>Cuando la actividad ingresa al modo PIP, esta solo debería mostrar la reproducción
+de video. Debes quitar los elementos de IU antes de que la actividad ingrese al modo PIP
+y volver a mostrarlos cuando la actividad vuelva al modo de pantalla completa.
+Anula <code>Activity.onPictureInPictureModeChanged()</code> o
+<code>Fragment.onPictureInPictureModeChanged()</code> y habilita
+o inhabilita los elementos de IU según sea necesario, por ejemplo:</p>
+
+<pre>
+@Override
+public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
+ if (isInPictureInPictureMode) {
+ // Hide the controls in picture-in-picture mode.
+ ...
+ } else {
+ // Restore the playback UI based on the playback status.
+ ...
+ }
+}
+</pre>
+
+<h2 id="continuing_playback">Continuar la reproducción de video durante
+el modo Picture-in-picture</h2>
+
+<p>Cuando la actividad cambia al modo PIP, el sistema considera que se encuentra en
+pausa y llama al método <code>onPause()</code> de la actividad. La reproducción
+de video no debería pausarse y debería continuar si la actividad se
+pausa debido al modo PIP. Busca el modo PIP en el método
+<code>onPause()</code> de la actividad y controla la reproducción según corresponda, por
+ejemplo:</p>
+
+<pre>
+@Override
+public void onPause() {
+ // If called while in PIP mode, do not pause playback
+ if (isInPictureInPictureMode()) {
+ // Continue playback
+ ...
+ }
+ // If paused but not in PIP, pause playback if necessary
+ ...
+}
+</pre>
+
+<p>Cuando la actividad sale del modo PIP y vuelve al modo de pantalla completa, el
+sistema reinicia la actividad y llama al método <code>onResume()</code>.</p>
+
+<h2 id="single_playback">Usar una única actividad de reproducción para
+el modo Picture-in-picture</h2>
+
+<p>En tu aplicación, un usuario puede seleccionar un nuevo video cuando busca contenido en la
+pantalla principal, mientras una actividad de reproducción de video está en modo PIP. Reproduce el nuevo
+video en la actividad de reproducción actual en modo de pantalla completa, en lugar de
+iniciar una nueva actividad que podría confundir al usuario.</p>
+
+<p>A fin de garantizar que se utilice una única actividad para las solicitudes de reproducción de video y que esta
+ ingrese en el modo PIP o salga de este cuando sea necesario, configura el
+<code>android:launchMode</code> de la actividad en <code>singleTask</code>, en el manifiesto:
+</p>
+
+<pre>
+<activity android:name="VideoActivity"
+ ...
+ android:supportsPictureInPicture="true"
+ android:launchMode="singleTask"
+ ...
+</pre>
+
+<p>En tu actividad, anula {@link android.app.Activity#onNewIntent
+Activity.onNewIntent()} y administra el nuevo video, deteniendo cualquier reproducción
+de video actual si es necesario.</p>
+
+<h2 id="best">Prácticas recomendadas</h2>
+
+<p>El modo PIP está diseñado para actividades que reproducen un video en pantalla completa. Cuando cambies la
+actividad al modo PIP, evita que se muestre cualquier elemento que no sea el contenido del video.
+Rastrea el cambio a modo PIP de la actividad y oculta los elementos de IU, como se explica
+en la sección <a href="#handling_ui">Gestionar las IU durante el modo picture-in-picture</a>.</p>
+
+<p>Debido a que la ventana de PIP se muestra como una ventana flotante en una
+esquina de la pantalla, debes evitar mostrar información importante en la pantalla principal
+en cualquier área que pueda quedar oculta detrás de la ventana de PIP.</p>
+
+<p>Cuando una actividad se encuentra en modo PIP, de forma predeterminada, no tiene focalización en las entradas. Para
+recibir eventos de entradas durante este modo, usa
+<code>MediaSession.setMediaButtonReceiver()</code>.</p>
diff --git a/docs/html-intl/intl/es/training/tv/tif/content-recording.jd b/docs/html-intl/intl/es/training/tv/tif/content-recording.jd
new file mode 100644
index 0000000..9e8a346
--- /dev/null
+++ b/docs/html-intl/intl/es/training/tv/tif/content-recording.jd
@@ -0,0 +1,142 @@
+page.title=Grabación de TV
+page.keywords=preview,sdk,tv,recording
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>En este documento</h2>
+ <ol>
+ <li><a href="#supporting">Indicar la compatibilidad para la grabación</a></li>
+ <li><a href="#recording">Grabar una sesión</a></li>
+ <li><a href="#errors">Gestionar los errores de grabación</a></li>
+ <li><a href="#sessions">Gestionar las sesiones grabadas</a></li>
+ <li><a href="#best">Prácticas recomendadas</a></li>
+ </ol>
+</div>
+</div>
+
+<p>Los servicios de entrada de TV le permiten al usuario pausar y reanudar la reproducción de canales
+mediante API de time-shifting. Android N expande la función de time-shifting
+ permitiéndoles a los usuarios guardar múltiples sesiones grabadas.</p>
+
+<p>Los usuarios pueden programar las grabaciones por adelantado o comenzar a grabar a la vez
+que miran un programa. Una vez que el sistema haya guardado una grabación, el usuario puede explorar, gestionar
+y reproducir las grabaciones usando la aplicación del sistema de TV.</p>
+
+<p>Si deseas brindar funcionalidades de grabación a tu servicio de entrada de TV,
+debes indicarle al sistema que tu aplicación permite la grabación, implementar
+la habilidad para grabar programas, gestionar y comunicar los errores que ocurren
+durante la grabación y gestionar las sesiones grabadas.</p>
+
+<p class="note"><strong>Nota:</strong> La aplicación Live Channels todavía no
+ permite que los usuarios creen grabaciones ni accedan a estas. Hasta que se realicen
+ cambios en la aplicación Live Channels, es posible que sea difícil probar completamente la
+experiencia de grabación para tu servicio de entrada de TV.</p>
+
+<h2 id="supporting">Indicar la compatibilidad para la grabación</h2>
+
+<p>Para comunicarle al sistema que tu servicio de entrada de TV permite la grabación, configura el
+atributo <code>android:canRecord</code> de tu archivo XML de metadatos de servicio
+en <code>true</code>:
+</p>
+
+<pre>
+<tv-input xmlns:android="http://schemas.android.com/apk/res/android"
+ <b>android:canRecord="true"</b>
+ android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />
+</pre>
+
+<p>Para obtener más información sobre el archivo de metadatos de servicio, consulta
+<a href="{@docRoot}training/tv/tif/tvinput.html#manifest">Declarar el servicio de entrada
+ de TV en el manifiesto</a>.
+</p>
+
+<p>De forma alternativa, puedes indicar la compatibilidad para la grabación en tu código; para ello, sigue
+ estos pasos:</p>
+
+<ol>
+<li>En el método <code>TvInputService.onCreate()</code>, crea un nuevo
+objeto <code>TvInputInfo</code> usando la clase <code>TvInputInfo.Builder</code>.
+</li>
+<li>Cuando crees el nuevo objeto <code>TvInputInfo</code>, llama a
+<code>setCanRecord(true)</code> antes de llamar a <code>build()</code> para
+indicar que tu servicio permite la grabación.</li>
+<li>Registra tu objeto <code>TvInputInfo</code> con el sistema llamando a
+<code>TvInputManager.updateTvInputInfo()</code>.</li>
+</ol>
+
+<h2 id="recording">Grabar una sesión</h2>
+
+<p>Luego de que el servicio de entrada de TV registra la compatibilidad
+con la funcionalidad de grabación, el sistema llama a tu
+<code>TvInputService.onCreateRecordingSession()</code> cuando necesita acceder
+a la implementación de grabación de tu aplicación. Implementa tu propia subclase
+<code>TvInputService.RecordingSession</code> y devuélvela
+cuando el callback de <code>onCreateRecordingSession()</code>
+se dispare. Esta subclase es responsable de cambiar a los datos del canal correcto,
+de grabar los datos solicitados y de comunicar el estado y los errores de grabación al
+sistema.</p>
+
+<p>Cuando el sistema llama a <code>RecordingSession.onTune()</code>, pasando en un
+URI de canal, sintoniza el canal que el URI especifica. Notifícale al sistema que tu
+aplicación se ha sintonizado al canal deseado llamando a <code>notifyTuned()</code>
+o, si tu aplicación no pudo sintonizarse al canal correcto, llama a
+<code>notifyError()</code>.</p>
+
+<p>El sistema invoca, a continuación, el callback <code>RecordingSession.onStartRecording()</code>.
+ Tu aplicación debe comenzar a grabar inmediatamente. Cuando el sistema invoca
+este callback, puede brindar un URI que contiene información sobre el programa
+que se está por grabar. Cuando finaliza la grabación, debes copiar estos
+datos a la tabla de datos <code>RecordedPrograms</code>.</p>
+
+<p>Finalmente, el sistema llama a <code>RecordingSession.onStopRecording()</code>.
+En este momento, tu aplicación debe dejar de grabar inmediatamente. También debes crear
+una entrada en la tabla <code>RecordedPrograms</code>. Esta entrada debe
+incluir el URI de datos de la sesión grabada en la columna
+<code>RecordedPrograms.COLUMN_RECORDING_DATA_URI</code> y cualquier información
+del programa que el sistema haya brindado en la llamada inicial a
+<code>onStartRecording()</code>.</p>
+
+<p>Para obtener más información sobre cómo acceder a la tabla <code>RecordedPrograms</code>
+, consulta <a href="#sessions">Gestionar las sesiones grabadas</a>.</p>
+
+<h2 id="errors">Gestionar los errores de grabación</h2>
+
+<p>Si ocurre un error durante la grabación que hace que los datos grabados no se puedan usar,
+notifica al sistema llamando a<code>RecordingSession.notifyError()</code>.
+De forma similar, puedes llamar a <code>notifyError()</code> después de que se cree una sesión de grabación
+para que el sistema sepa que la aplicación ya no puede grabar sesiones.</p>
+
+<p>Si ocurre un error durante la grabación, pero deseas brindarle al usuario una grabación
+parcial usable para su reproducción, llama a
+<code>RecordingSession.notifyRecordingStopped()</code> para permitir que el sistema
+use la sesión parcial.</p>
+
+<h2 id="sessions">Gestionar las sesiones grabadas</h2>
+
+<p>El sistema mantiene información de todas las sesiones grabadas de todas
+las aplicaciones de canal con funcionalidad de grabación en la tabla de proveedor de contenido <code>TvContract.RecordedPrograms</code>
+. Esta información se accede mediante el URI de contenido
+<code>RecordedPrograms.Uri</code>. Usa API de proveedor de contenido para
+leer, agregar y borrar entradas de esta tabla.</p>
+
+<p>Para obtener más información sobre cómo trabajar con datos del proveedor de contenido, consulta
+<a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
+Conceptos básicos sobre el proveedor de contenido</a>.</p>
+
+<h2 id="best">Prácticas recomendadas</h2>
+
+<p>Los dispositivos de TV tienen un almacenamiento limitado, de modo que debes ser cuidadoso a la hora
+de asignar el almacenamiento para guardar las sesiones grabadas. Usa
+<code>RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)</code> cuando
+no haya espacio suficiente para guardar una sesión grabada.</p>
+
+<p>Cuando el usuario inicie la grabación, el registro de datos debe comenzar
+lo antes posible. Para facilitar este proceso, completa cualquier tarea anterior demandante,
+como acceder al espacio de almacenamiento y asignarlo, cuando el sistema invoque el
+callback <code>onCreateRecordingSession()</code>. Hacerlo te permite comenzar
+a grabar inmediatamente cuando el callback <code>onStartRecording()</code>
+se dispare.</p>
diff --git a/docs/html-intl/intl/id/about/versions/marshmallow/android-6.0-testing.jd b/docs/html-intl/intl/id/about/versions/marshmallow/android-6.0-testing.jd
new file mode 100644
index 0000000..94bc74c
--- /dev/null
+++ b/docs/html-intl/intl/id/about/versions/marshmallow/android-6.0-testing.jd
@@ -0,0 +1,190 @@
+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/id/about/versions/nougat/android-7.0-changes.jd b/docs/html-intl/intl/id/about/versions/nougat/android-7.0-changes.jd
new file mode 100644
index 0000000..af01cd2
--- /dev/null
+++ b/docs/html-intl/intl/id/about/versions/nougat/android-7.0-changes.jd
@@ -0,0 +1,610 @@
+page.title=Perubahan Perilaku
+page.keywords=pratinjau,sdk,kompatibilitas
+meta.tags="preview", "compatibility"
+page.tags="preview", "developer preview"
+page.image=images/cards/card-n-changes_2x.png
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>Dalam dokumen ini</h2>
+
+<ol>
+ <li><a href="#perf">Peningkatan Kinerja</a>
+ <ol>
+ <li><a href="#doze">Istirahatkan</a></li>
+ <li><a href="#bg-opt">Optimalisasi Latar Belakang</a></li>
+ </ol>
+ </li>
+ <li><a href="#perm">Perubahan Izin</a>
+ </li>
+ <li><a href="#sharing-files">Berbagi File Antar Aplikasi</a></li>
+ <li><a href="#accessibility">Peningkatan Aksesibilitas</a>
+ <ol>
+ <li><a href="#screen-zoom">Perbesaran Layar</a></li>
+ <li><a href="#vision-settings">Vision Settings di Setup Wizard</a></li>
+ </ol>
+ </li>
+ <li><a href="#ndk">Penautan Aplikasi NDK ke Pustaka Platform</a></li>
+ <li><a href="#afw">Android for Work</a></li>
+ <li><a href="#annotations">Retensi Anotasi</a></li>
+ <li><a href="#other">Poin Penting Lainnya</a></li>
+</ol>
+
+<h2>Lihat Juga</h2>
+<ol>
+ <li><a href="{@docRoot}preview/api-overview.html">
+ Ringkasan Android N API</a></li>
+</ol>
+
+</div>
+</div>
+
+
+<p>
+ Bersama fitur dan kemampuan baru, Android N
+ menyertakan berbagai macam perubahan sistem dan perubahan perilaku API. Dokumen ini
+ menyoroti beberapa perubahan utama yang harus dipahami dan diperhitungkan
+ dalam aplikasi Anda.
+</p>
+
+<p>
+ Jika Anda sebelumnya telah mempublikasikan aplikasi untuk Android, ketahuilah bahwa aplikasi Anda
+ mungkin dipengaruhi oleh perubahan dalam platform.
+</p>
+
+
+<h2 id="perf">Baterai dan Memori</h2>
+
+<p>
+Android N menyertakan perubahan perilaku sistem yang bertujuan untuk meningkatkan daya tahan baterai
+perangkat dan mengurangi penggunaan RAM. Perubahan ini bisa memengaruhi akses aplikasi Anda ke
+sumber daya sistem, termasuk cara aplikasi Anda berinteraksi dengan aplikasi lain melalui
+intent implisit tertentu.
+</p>
+
+<h3 id="doze">Istirahatkan</h3>
+
+<p>
+ Diperkenalkan dalam Android 6.0 (API level 23), Istirahatkan meningkatkan daya tahan baterai dengan
+ menangguhkan aktivitas CPU dan jaringan bila pengguna tidak mencabut perangkat,
+ tidak bergerak, dan layar dinonaktifkan. Android N lebih
+ menyempurnakan Istirahatkan dengan menerapkan subset CPU dan pembatasan jaringan
+ bila perangkat dicabut dan layar dinonaktifkan, namun tidak harus
+ diam, misalnya, bila handset dibawa bepergian di saku pengguna.
+</p>
+
+
+<img src="{@docRoot}images/android-7.0/doze-diagram-1.png" alt="" height="251px" id="figure1" />
+<p class="img-caption">
+ <strong>Gambar 1.</strong> Ilustrasi tentang cara Istirahatkan menerapkan pembatasan
+ aktivitas sistem level pertama untuk meningkatkan daya tahan baterai.
+</p>
+
+<p>
+ Bila perangkat sedang menggunakan daya baterai, dan layar telah nonaktif selama jangka waktu
+ tertentu, perangkat akan memasuki Istirahatkan dan menerapkan subset pembatasan pertama: Perangkat
+ akan menutup akses jaringan aplikasi, serta menangguhkan pekerjaan dan sinkronisasi. Jika perangkat sedang
+ diam selama jangka waktu tertentu setelah memasuki Istirahatkan, sistem akan menerapkan
+ pembatasan Istirahatkan selebihnya terhadap alarm {@link android.os.PowerManager.WakeLock},
+ {@link android.app.AlarmManager}, GPS, dan pemindaian Wi-Fi. Tidak peduli
+ apakah sebagian atau semua pembatasan Istirahatkan diterapkan, sistem akan membangunkan
+ perangkat selama jeda pemeliharaan singkat, dan selama itu aplikasi diizinkan
+ mengakses jaringan dan bisa mengeksekusi semua pekerjaan/sinkronisasi yang telah ditangguhkan.
+</p>
+
+
+<img src="{@docRoot}images/android-7.0/doze-diagram-2.png" alt="" id="figure2" />
+<p class="img-caption">
+ <strong>Gambar 2.</strong> Ilustrasi tentang cara Istirahatkan menerapkan pembatasan
+ aktivitas sistem level kedua setelah perangkat diam selama jangka waktu tertentu.
+</p>
+
+<p>
+ Perhatikan, mengaktifkan layar atau mencolokkan steker perangkat akan mengeluarkan dari Istirahatkan
+ dan membuang pembatasan pemrosesan ini. Perilaku tambahan ini tidak
+ memengaruhi rekomendasi dan praktik terbaik dalam menyesuaikan aplikasi Anda dengan versi
+ Istirahatkan sebelumnya yang diperkenalkan dalam Android 6.0 (API level 23), seperti yang dibahas di
+ <a href="{@docRoot}training/monitoring-device-state/doze-standby.html">
+ Mengoptimalkan untuk Istirahatkan dan Aplikasi Siaga</a>. Anda tetap harus
+ mengikuti rekomendasi itu, seperti menggunakan Google Cloud Messaging (GCM) untuk
+ mengirim dan menerima pesan, serta mulai merencanakan pembaruan
+ untuk mengakomodasi perilaku Istirahatkan tambahan.
+</p>
+
+
+<h3 id="bg-opt">Project Svelte: Optimalisasi Latar Belakang</h3>
+
+<p>
+ Android N membuang tiga siaran implisit untuk membantu mengoptimalkan
+ penggunaan memori dan konsumsi daya. Perubahan ini penting karena siaran
+ implisit sering memulai aplikasi yang telah didaftarkan untuk mendengarkannya di
+ latar belakang. Membuang siaran ini bisa sangat menguntungkan
+ kinerja perangkat dan pengalaman pengguna.
+</p>
+
+<p>
+ Perangkat seluler seringkali mengalami perubahan konektivitas, seperti saat berpindah
+ antara Wi-Fi dan data seluler. Saat ini, aplikasi bisa memantau perubahan dalam
+ konektivitas dengan mendaftarkan suatu penerima untuk siaran implisit {@link
+ android.net.ConnectivityManager#CONNECTIVITY_ACTION} dalam manifes
+ mereka. Karena banyak aplikasi yang didaftarkan untuk menerima siaran ini, switch jaringan tunggal
+ bisa menyebabkan semuanya aktif dan memproses siaran tersebut
+ secara bersamaan.
+</p>
+
+<p>
+ Demikian pula, dalam Android versi sebelumnya, aplikasi bisa mendaftar untuk menerima siaran implisit {@link
+ android.hardware.Camera#ACTION_NEW_PICTURE} dan {@link
+ android.hardware.Camera#ACTION_NEW_VIDEO} dari aplikasi lain, seperti
+ Kamera. Bila pengguna mengambil gambar dengan aplikasi Kamera, semua aplikasi ini akan aktif
+ untuk memproses siaran.
+</p>
+
+<p>
+ Untuk meminimalkan masalah ini, Android N menerapkan optimalisasi
+ berikut:
+</p>
+
+<ul>
+ <li>Aplikasi yang menargetkan Android N tidak menerima siaran {@link
+ android.net.ConnectivityManager#CONNECTIVITY_ACTION}, sekalipun
+ memiliki entri manifes untuk meminta pemberitahuan mengenai kejadian ini. Aplikasi
+ yang berjalan tetap bisa mendengarkan {@code CONNECTIVITY_CHANGE} pada thread utama
+ jika mereka meminta pemberitahuan dengan {@link android.content.BroadcastReceiver}.
+ </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, bukan hanya aplikasi yang menargetkan Android N.
+ </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} API menyediakan mekanisme yang tangguh untuk menjadwalkan
+ operasi jaringan bila kondisi yang ditetapkan, seperti koneksi ke jaringan
+ berbiaya tetap, terpenuhi. Anda juga dapat menggunakan {@link
+ android.app.job.JobScheduler} untuk bereaksi terhadap perubahan pada penyedia materi.
+</p>
+
+<p>
+ Untuk informasi selengkapnya tentang optimalisasi latar belakang di N dan cara menyesuaikan aplikasi Anda,
+ lihat <a href="{@docRoot}preview/features/background-optimization.html">Optimalisasi
+ Latar Belakang</a>.
+</p>
+
+<h2 id="perm">Perubahan Izin</h2>
+
+<p>
+ Android N menyertakan perubahan pada izin yang bisa memengaruhi aplikasi Anda.
+</p>
+
+<h3 id="permfilesys">Perubahan izin sistem file</h3>
+
+<p>
+ Guna meningkatkan keamanan file privat, direktori privat
+ aplikasi yang menargetkan Android N atau yang lebih tinggi memiliki akses terbatas (<code>0700</code>).
+ Pengaturan ini mencegah kebocoran metadata dari file privat, seperti ukuran
+ atau eksistensi. Perubahan izin ini memiliki beberapa efek samping:
+</p>
+
+<ul>
+ <li>
+ Izin file privat tidak boleh dianggap remeh oleh pemilik,
+ dan usaha untuk melakukannya menggunakan
+ {@link android.content.Context#MODE_WORLD_READABLE} dan/atau
+ {@link android.content.Context#MODE_WORLD_WRITEABLE}, akan memicu sebuah
+ {@link java.lang.SecurityException}.
+ <p class="note">
+ <strong>Catatan:</strong> Seperti sebelumnya, pembatasan ini tidak sepenuhnya diterapkan.
+ Aplikasi mungkin masih memodifikasi izin ke direktori privat mereka menggunakan
+ API asal atau {@link java.io.File File} API. Akan tetapi, kami sangat
+ tidak menyarankan Anda meremehkan izin direktori privat.
+ </p>
+ </li>
+ <li>
+ Meneruskan URI <code>file://</code> di luar domain paket dapat meninggalkan
+ penerima dengan jalur yang tidak bisa di akses. Karena itu, upaya untuk meneruskan URI
+ <code>file://</code> akan memicu
+ <code>FileUriExposedException</code>. Cara yang disarankan adalah
+ materi file privat menggunakan {@link
+ android.support.v4.content.FileProvider}.
+ </li>
+ <li>
+ {@link android.app.DownloadManager} tidak bisa lagi berbagi
+ file yang tersimpan secara privat berdasarkan nama file. Aplikasi lawas dapat mengakibatkan
+ jalur yang tidak dapat diakses saat mengakses {@link
+ android.app.DownloadManager#COLUMN_LOCAL_FILENAME}. Aplikasi yang menargetkan
+ Android N atau yang lebih tinggi akan memicu {@link java.lang.SecurityException} saat
+ berupaya mengakses
+ {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}.
+ Aplikasi lawas yang menyetel lokasi unduhan ke lokasi publik dengan
+ menggunakan
+ {@link
+ android.app.DownloadManager.Request#setDestinationInExternalFilesDir
+ DownloadManager.Request.setDestinationInExternalFilesDir()} atau
+ {@link
+ android.app.DownloadManager.Request#setDestinationInExternalPublicDir
+ DownloadManager.Request.setDestinationInExternalPublicDir()}
+ tetap bisa mengakses jalur tersebut di
+ {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}, akan tetapi,
+ metode ini sangat tidak disarankan. Cara yang disarankan untuk mengakses file
+ yang diekspos oleh {@link android.app.DownloadManager} adalah menggunakan
+ {@link android.content.ContentResolver#openFileDescriptor
+ ContentResolver.openFileDescriptor()}.
+ </li>
+</ul>
+
+<h2 id="sharing-files">Berbagi File Antar Aplikasi</h2>
+
+<p>
+Untuk aplikasi yang menargetkan Android N, kerangka kerja Android menerapkan
+kebijakan {@link android.os.StrictMode} API yang melarang mengekspos URI {@code file://}
+di luar aplikasi Anda. Jika sebuah intent berisi URI file meninggalkan aplikasi Anda, aplikasi tersebut akan gagal
+dengan pengecualian {@code FileUriExposedException}.
+</p>
+
+<p>
+Untuk berbagi file antar aplikasi, Anda harus mengirim URI {@code content://}
+dan memberikan izin akses sementara pada URI. Cara termudah untuk memberikan izin ini adalah dengan
+menggunakan kelas {@link android.support.v4.content.FileProvider}. Untuk informasi selengkapnya
+mengenai izin dan berbagi file,
+lihat <a href="{@docRoot}training/secure-file-sharing/index.html">Berbagi File</a>.
+</p>
+
+<h2 id="accessibility">Peningkatan Aksesibilitas</h2>
+
+<p>
+ Android N menyertakan perubahan yang bertujuan meningkatkan kegunaan
+ platform untuk pengguna dengan penglihatan yang rendah atau lemah. Perubahan ini umumnya tidak
+ memerlukan perubahan kode dalam aplikasi Anda, akan tetapi Anda harus memeriksa
+ fitur ini dan mengujinya dengan aplikasi untuk menilai kemungkinan dampaknya terhadap pengalaman
+ pengguna.
+</p>
+
+
+<h3 id="screen-zoom">Perbesaran Layar</h3>
+
+<p>
+ Android N memungkinkan pengguna menyetel <strong>Display size</strong> yang akan memperbesar
+ atau memperkecil semua elemen pada layar, sehingga meningkatkan aksesibilitas perangkat
+ bagi pengguna yang kurang melihat. Pengguna tidak bisa memperbesar layar melewati lebar layar
+ minimum <a href="http://developer.android.com/guide/topics/resources/providing-resources.html">
+ sw320dp</a>, yang merupakan lebar Nexus 4, yakni ponsel ukuran sedang pada umumnya.
+</p>
+
+<div class="cols">
+
+<div class="col-6">
+ <img src="{@docRoot}images/android-7.0/screen-zoom-1.png" alt="" height="XXX" id="figure1" />
+</div>
+<div class="col-6">
+ <img src="{@docRoot}images/android-7.0/screen-zoom-2.png" alt="" height="XXX" id="figure1" />
+</div>
+
+</div> <!-- end cols -->
+<p class="img-caption">
+ <strong>Gambar 3.</strong> Layar di sebelah kanan menampilkan efek
+ penambahan Display size perangkat yang menjalankan citra sistem Android N.
+</p>
+
+
+<p>
+ Bila kepadatan perangkat berubah, sistem akan memberi tahu aplikasi yang sedang berjalan dengan
+ cara berikut:
+</p>
+
+<ul>
+ <li>Jika aplikasi menargetkan API level 23 atau yang lebih rendah, sistem secara otomatis akan mematikan
+ semua proses latar belakang. Artinya, jika pengguna beralih dari
+ aplikasi tersebut untuk membuka layar <em>Settings</em> dan mengubah
+ setelan <strong>Display size</strong>, maka sistem akan mematikan aplikasi tersebut dengan cara yang
+ sama dengan saat memori tinggal sedikit. Jika aplikasi memiliki beberapa proses
+ latar depan, sistem akan memberi tahu proses tersebut mengenai perubahan konfigurasi seperti
+ dijelaskan dalam <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Menangani Perubahan
+ Waktu Proses</a>, seolah-olah orientasi perangkat telah berubah.
+ </li>
+
+ <li>Jika sebuah aplikasi menargetkan Android N, semua prosesnya
+ (latar depan dan latar belakang) akan diberi tahu mengenai perubahan konfigurasi seperti
+ dijelaskan dalam <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Menangani Perubahan
+ Waktu Proses</a>.
+ </li>
+</ul>
+
+<p>
+ Sebagian besar aplikasi tidak perlu melakukan perubahan untuk mendukung fitur ini, asalkan
+ aplikasi tersebut mengikuti praktik terbaik Android. Hal-hal tertentu yang harus diperiksa:
+</p>
+
+<ul>
+ <li>Uji aplikasi Anda pada perangkat dengan lebar layar <code><a href=
+ "{@docRoot}guide/topics/resources/providing-resources.html">sw320dp</a></code>
+ dan pastikan aplikasi berjalan dengan semestinya.
+ </li>
+
+ <li>Bila konfigurasi perangkat berubah, perbarui informasi cache
+ yang bergantung pada kepadatan, seperti bitmap di cache atau sumber daya yang dimuat dari
+ jaringan. Periksa perubahan konfigurasi bila aplikasi melanjutkan dari status dihentikan
+ sementara.
+ <p class="note">
+ <strong>Catatan:</strong> Catatan: Jika Anda meng-cache data yang bergantung pada konfigurasi, ada
+ baiknya untuk menyertakan metadata yang relevan seperti ukuran layar
+ atau kepadatan piksel yang sesuai untuk data tersebut. Menyimpan metadata ini memungkinkan Anda untuk
+ memutuskan apakah Anda perlu segarkan data cache setelah perubahan
+ konfigurasi.
+ </p>
+ </li>
+
+ <li>Hindari menetapkan dimensi dengan satuan px, karena satuan ini tidak diskalakan dengan
+ kepadatan layar. Sebagai gantinya, tetapkan dimensi dengan satuan <a href="{@docRoot}guide/practices/screens_support.html">piksel yang tidak bergantung kepadatan
+ </a> (<code>dp</code>).
+ </li>
+</ul>
+
+<h3 id="vision-settings">Vision Settings di Setup Wizard</h3>
+
+<p>
+ Android N menyertakan Vision Settings di layar Sambutan, di mana pengguna bisa
+ menyiapkan setelan aksesibilitas berikut pada perangkat baru:
+ <strong>Magnification gesture</strong>, <strong>Font size</strong>,
+ <strong>Display size</strong> dan <strong>TalkBack</strong>. Perubahan ini
+ meningkatkan visibilitas bug terkait dengan setelan layar yang berbeda. Untuk
+ mengurangi dampak fitur ini, Anda harus menguji aplikasi dengan setelan ini
+ diaktifkan. Anda bisa menemukannya pada <strong>Settings >
+ Accessibility</strong>.
+</p>
+
+<h2 id="ndk">Penautan Aplikasi NDK ke Pustaka Platform</h2>
+
+<p>
+ Android N menyertakan perubahan ruang nama untuk mencegah pemuatan API non-publik.
+ Jika menggunakan NDK, Anda hanya boleh menggunakan API publik dari platform
+ Android. Menggunakan API non-publik dalam rilis Android resmi berikutnya
+ bisa menyebabkan aplikasi mogok.
+</p>
+
+<p>
+ Untuk memberi tahu Anda agar menggunakan API non-publik, aplikasi yang berjalan pada perangkat
+ Android N akan menghasilkan kesalahan dalam keluaran logcat bila aplikasi memanggil API non-publik.
+ Kesalahan ini juga ditampilkan di layar perangkat berupa pesan untuk membantu
+ meningkatkan kepedulian terhadap situasi ini. Anda harus memeriksa kode aplikasi untuk
+ membuang penggunaan API platform non-publik dan secara saksama menguji aplikasi Anda menggunakan
+ perangkat pratinjau atau emulator.
+</p>
+
+<p>
+ Jika aplikasi Anda bergantung pada pustaka platform, lihat dokumentasi NDK untuk
+ perbaikan tipikal guna menggantikan API privat umum dengan padanan API publik.
+ Anda mungkin juga menautkan ke pustaka platform tanpa menyadarinya,
+ terutama jika aplikasi Anda menggunakan pustaka yang merupakan bagian dari platform ini (seperti
+ <code>libpng</code>), namun bukan bagian dari NDK. Dalam hal itu, pastikan
+ APK Anda berisi semua file .so yang ingin ditautkan.
+</p>
+
+<p class="caution">
+ <strong>Perhatian:</strong> Beberapa pustaka pihak ketiga mungkin menautkan ke API
+ non-publik. Jika menggunakan pustaka ini, aplikasi Anda bisa mogok saat dijalankan
+ pada rilis resmi Android berikutnya.
+</p>
+
+<p>
+ Aplikasi tidak boleh bergantung pada atau menggunakan pustaka bawaan yang tidak disertakan dalam
+ NDK, karena bisa mengalami perubahan, atau dipindahkan dari satu rilis Android ke
+ rilis lainnya. Peralihan dari OpenSSL ke BoringSSL merupakan satu contoh dari perubahan semacam ini.
+ Selain itu, perangkat yang berbeda bisa menawarkan tingkat kompatibilitas yang berbeda, karena
+ tidak ada persyaratan kompatibilitas untuk pustaka platform yang tidak disertakan
+ dalam NDK. Jika Anda harus mengakses pustaka non-NDK pada perangkat yang lebih lama, jadikan
+ pemuatan bergantung pada level Android API.
+</p>
+
+<p>
+ Untuk membantu Anda mendiagnosis tipe masalah ini ada beberapa contoh kesalahan Java dan NDK
+ yang mungkin Anda temui saat berusaha membangun aplikasi dengan Android N:
+</p>
+
+<p>Contoh kesalahan Java:</p>
+<pre class="no-pretty-print">
+java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so"
+ is not accessible for the namespace "classloader-namespace"
+</pre>
+
+<p>Contoh kesalahan NDK:</p>
+<pre class="no-pretty-print">
+dlopen failed: cannot locate symbol "__system_property_get" referenced by ...
+</pre>
+
+
+<p>
+ Inilah beberapa perbaikan tipikal untuk aplikasi yang mengalami tipe kesalahan ini:
+</p>
+
+<ul>
+ <li>Penggunaan getJavaVM dan getJNIEnv dari libandroid_runtime.so bisa diganti
+ dengan fungsi JNI standar:
+<pre class="no-pretty-print">
+AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h>
+AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or
+JavaVM::AttachCurrentThread from <jni.h>.
+</pre>
+ </li>
+
+ <li>Penggunaan simbol {@code property_get} dari {@code libcutils.so} bisa
+ diganti dengan {@code alternative __system_property_get} publik.
+ Caranya, gunakan {@code __system_property_get} dengan menyertakan yang berikut:
+<pre>
+#include <sys/system_properties.h>
+</pre>
+ </li>
+
+ <li>Penggunaan simbol {@code SSL_ctrl} dari {@code libcrypto.so} harus
+ diganti dengan aplikasi versi lokal. Misalnya, Anda harus menautkan
+ {@code libcyrpto.a} secara statis dalam file {@code .so} atau menyertakan
+ {@code libcrypto.so} Anda sendiri secara dinamis dari BoringSSL atau OpenSSL dalam aplikasi Anda.
+ </li>
+</ul>
+
+<h2 id="afw">Android for Work</h2>
+<p>
+ Android N berisi perubahan untuk aplikasi yang menargetkan Android for Work, termasuk
+ perubahan pada pemasangan sertifikat, penyetelan ulang sandi, manajemen pengguna
+ tambahan, dan akses ke identifier perangkat. Jika Anda membangun aplikasi untuk
+ lingkungan Android for Work, Anda harus meninjau perubahan ini dan memodifikasi
+ aplikasi sebagaimana mestinya.
+</p>
+
+<ul>
+ <li>Anda harus pasang pemasang sertifikat yang didelegasikan sebelum DPC bisa
+ menyetelnya. Untuk aplikasi profil dan aplikasi pemilik perangkat yang menargetkan N SDK, Anda harus
+ pasang pemasang sertifikat yang didelegasikan sebelum pengontrol kebijakan
+ perangkat (DPC) memanggil
+ <code>DevicePolicyManager.setCertInstallerPackage()</code>. Jika pemasang
+ belum dipasang, sistem akan melontarkan
+ <code>IllegalArgumentException</code>.
+ </li>
+
+ <li>Pembatasan sandi penyetelan ulang untuk admin perangkat sekarang diterapkan ke pemilik
+ profil. Admin perangkat tidak bisa lagi menggunakan
+ {@code DevicePolicyManager.resetPassword()} untuk menghapus sandi atau mengubah
+ sandi yang sudah disetel. Admin perangkat tetap bisa menyetel sandi, namun hanya
+ bila perangkat belum memiliki sandi, PIN, atau pola.
+ </li>
+
+ <li>Pemilik perangkat dan profil bisa mengelola akun meskipun pembatasan
+ telah disetel. Pemilik perangkat dan pemilik profil bisa memanggil Account Management API
+ sekalipun pembatasan pengguna <code>DISALLOW_MODIFY_ACCOUNTS</code> diberlakukan.
+ </li>
+
+ <li>Pemilik perangkat bisa mengelola pengguna tambahan lebih mudah. Bila perangkat
+ berjalan dalam mode pemilik perangkat, maka pembatasan <code>DISALLOW_ADD_USER</code>
+ secara otomatis akan ditetapkan. Ini mencegah pengguna membuat pengguna tambahan yang
+ tidak terkelola. Selain itu, <code>CreateUser()</code> dan
+ <code>createAndInitializeUser()</code> metode tidak digunakan lagi; metode
+ <code>DevicePolicyManager.createAndManageUser()</code> telah menggantikannya.
+ </li>
+
+ <li>Pemilik perangkat bisa mengakses identifier perangkat. Pemilik perangkat bisa mengakses
+ alamat MAC Wi-Fi dari perangkat, menggunakan
+ <code>DevicePolicyManagewr.getWifiMacAddress()</code>. Jika Wi-Fi belum pernah
+ diaktifkan pada perangkat tersebut, metode ini akan mengembalikan nilai {@code null}.
+ </li>
+
+ <li>Setelan Mode Kerja mengontrol akses ke aplikasi kerja. Bila mode kerja tidak aktif, peluncur sistem
+ akan menunjukkan aplikasi kerja tidak tersedia dengan membuat warnanya jadi abu-abu. Mengaktifkan kembali
+ mode kerja akan memulihkan perilaku normal.
+</ul>
+
+<p>
+ Untuk informasi selengkapnya tentang perubahan Android for Work di Android N, lihat
+ <a href="{@docRoot}preview/features/afw.html">Pembaruan Android for Work</a>.
+</p>
+
+<h2 id="annotations">Retensi Anotasi</h2>
+
+<p>
+Android N memperbaiki bug dengan visibilitas anotasi diabaikan.
+Masalah ini mengaktifkan waktu proses untuk mengakses anotasi yang seharusnya tidak bisa
+dilakukan. Anotasi ini termasuk:
+</p>
+
+<ul>
+ <li>{@code VISIBILITY_BUILD}: Dimaksudkan agar hanya bisa terlihat pada waktu pembuatan.</li>
+ <li>{@code VISIBILITY_SYSTEM}: Dimaksud agar bisa terlihat pada waktu proses, namun hanya pada
+ sistem yang mendasarinya.</li>
+</ul>
+
+<p>
+Jika aplikasi Anda mengandalkan perilaku ini, tambahkan kebijakan retensi untuk anotasi yang harus
+tersedia di waktu proses. Caranya dengan menggunakan {@code @Retention(RetentionPolicy.RUNTIME)}.
+</p>
+
+<h2 id="other">Poin Penting Lainnya</h2>
+
+<ul>
+<li>Bila aplikasi berjalan pada Android N, namun menargetkan level API yang lebih rendah,
+dan pengguna mengubah ukuran tampilan, proses aplikasi akan dimatikan. Aplikasi
+harus dapat menangani skenario ini dengan lancar. Jika tidak, maka akan mogok
+bila pengguna memulihkannya dari Recents.
+
+<p>
+Anda harus menguji aplikasi untuk memastikan
+perilaku ini tidak terjadi.
+Anda bisa melakukannya dengan menyebabkan suatu mogok yang identik
+saat mematikan aplikasi secara manual melalui DDMS.
+</p>
+
+<p>
+Aplikasi yang menargetkan N dan yang di atasnya tidak secara otomatis dimatikan saat perubahan kepadatan;
+akan tetapi, aplikasi tersebut mungkin tetap merespons perubahan konfigurasi dengan buruk.
+</p>
+</li>
+
+<li>
+Aplikasi pada Android N harus mampu menangani perubahan konfigurasi dengan lancar,
+dan tidak boleh mengalami mogok pada start selanjutnya. Anda bisa memverifikasi perilaku aplikasi
+dengan mengubah ukuran font (<strong>Setting</strong> >
+<strong>Display</strong> > <strong>Font size</strong>), kemudian memulihkan
+aplikasi dari Recents.
+</li>
+
+<li>
+Dikarenakan adanya bug di versi Android sebelumnya, sistem tidak menandai penulisan
+ ke soket TCP di thread utama sebagai pelanggaran mode-ketat. Android N memperbaiki bug ini.
+Aplikasi yang menunjukkan perilaku ini kini melontarkan sebuah {@code android.os.NetworkOnMainThreadException}.
+Secara umum, melakukan operasi jaringan di thread utama tidak baik karena operasi ini
+biasanya memiliki latensi tinggi yang menyebabkan ANR dan jank.
+</li>
+
+<li>
+Kelompok metode {@code Debug.startMethodTracing()} kini default ke
+keluaran penyimpanan di direktori paket tertentu di penyimpanan bersama,
+sebagai ganti di level teratas
+kartu SD. Berarti aplikasi tidak perlu lagi meminta izin {@code WRITE_EXTERNAL_STORAGE} untuk menggunakan API ini.
+</li>
+
+<li>
+Banyak platform API yang kini mulai memeriksa beban besar yang dikirim
+ke seluruh transaksi {@link android.os.Binder}, dan sistem
+kini melontarkan kembali {@code TransactionTooLargeExceptions}
+sebagai {@code RuntimeExceptions}, sebagai ganti logging secara diam-diam atau menyembunyikannya. Satu contoh
+umum adalah menyimpan terlalu banyak data di
+{@link android.app.Activity#onSaveInstanceState Activity.onSaveInstanceState()},
+yang menyebabkan {@code ActivityThread.StopInfo} melontarkan
+{@code RuntimeException} bila aplikasi Anda menargetkan Android N.
+</li>
+
+<li>
+Jika sebuah aplikasi mengeposkan tugas {@link java.lang.Runnable} ke{@link android.view.View}, dan
+{@link android.view.View}
+tidak terpasang ke jendela, sistem
+akan mengantrekan tugas {@link java.lang.Runnable} dengan {@link android.view.View};
+tugas {@link java.lang.Runnable} tidak akan dieksekusi hingga
+{@link android.view.View} terpasang
+ke jendela. Perilaku ini mengatasi bug berikut:
+<ul>
+ <li>Jika sebuah aplikasi mengeposkan ke {@link android.view.View} dari thread selain thread UI jendela yang dimaksud,
+ maka {@link java.lang.Runnable} mungkin akan menjalankan thread yang salah.
+ </li>
+ <li>Jika tugas {@link java.lang.Runnable} diposkan dari thread selain
+ looper-thread, aplikasi bisa mengekspos tugas {@link java.lang.Runnable}.</li>
+</ul>
+</li>
+
+<li>
+Jika sebuah aplikasi di Android N dengan
+izin{@link android.Manifest.permission#DELETE_PACKAGES DELETE_PACKAGES}
+mencoba menghapus sebuah paket, namun sebuah aplikasi berbeda telah memasang paket itu,
+sistem akan memerlukan konfirmasi pengguna. Dalam skenario ini, aplikasi harus mengharapkan
+{@link android.content.pm.PackageInstaller#STATUS_PENDING_USER_ACTION STATUS_PENDING_USER_ACTION}
+sebagai status kembalian bila memanggil
+{@link android.content.pm.PackageInstaller#uninstall PackageInstaller.uninstall()}.
+</li>
+
+</ul>
+
diff --git a/docs/html-intl/intl/id/about/versions/nougat/android-7.0-samples.jd b/docs/html-intl/intl/id/about/versions/nougat/android-7.0-samples.jd
new file mode 100644
index 0000000..d31c0c0
--- /dev/null
+++ b/docs/html-intl/intl/id/about/versions/nougat/android-7.0-samples.jd
@@ -0,0 +1,85 @@
+page.title=Contoh
+page.tags="preview", "samples", "android"
+page.image=images/cards/card-n-samples_2x.png
+@jd:body
+
+<p>
+ Contoh kode berikut disediakan untuk Android N. Untuk
+ mengunduh contoh di Android Studio, pilih opsi menu <b>File > Import
+ Samples</b>.
+</p>
+
+<p class="note">
+ <strong>Catatan:</strong> Proyek yang bisa diunduh ini didesain
+ untuk digunakan bersama Gradle dan Android Studio.
+</p>
+
+
+<h3 id="mw">Playground Multi-Jendela</h3>
+<img src="{@docRoot}images/android-7.0/sample-multiwindow.png" style="float: left; padding-right: 0.5em" height="250" width="156" />
+<p>
+ Contoh ini memperagakan cara memanfaatkan antarmuka pengguna
+ multi-jendela bersama aplikasi Anda.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-MultiWindowPlayground">
+ Dapatkan di GitHub</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="an">Pemberitahuan Aktif</h3>
+<img src="{@docRoot}images/android-7.0/sample-activenotifications.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ Ini adalah contoh yang sudah ada sebelumnya, menampilkan layanan sederhana yang mengirimkan
+ pemberitahuan menggunakan NotificationCompat. Setiap percakapan yang belum dibaca dari pengguna
+ dikirimkan sebagai pemberitahuan berbeda.
+</p>
+<p>
+ Contoh ini telah diperbarui untuk memanfaatkan fitur pemberitahuan baru
+ yang tersedia di Android N.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-ActiveNotifications">
+ Dapatkan di GitHub</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="ms">Layanan Perpesanan</h3>
+<img src="{@docRoot}images/android-7.0/sample-messagingservice.png" style="float: left; padding-right: 0.5em" height="250" width="150" />
+<p>
+ Ini adalah contoh yang telah ada sebelumnya yang memperagakan cara menggunakan
+ NotificationManager untuk memberi tahu jumlah pemberitahuan yang saat ini ditampilkan
+ oleh aplikasi.
+</p>
+<p>
+ Contoh ini telah diperbarui untuk memanfaatkan fitur pemberitahuan baru
+ yang tersedia di Android N.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-MessagingService">
+ Dapatkan di GitHub</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="fbe">Direct Boot</h3>
+<img src="{@docRoot}images/android-7.0/sample-directboot.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ Contoh ini memperagakan cara menyimpan dan mengakses data dalam penyimpanan yang dienkripsi
+ dengan perangkat yang selalu tersedia saat perangkat booting.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-DirectBoot">
+ Dapatkan di GitHub</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="sda">Scoped Directory Access</h3>
+<img src="{@docRoot}images/android-7.0/sample-scopeddirectoryaccess.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ Contoh ini memperagakan cara membaca dan menulis data dari direktori
+ spesifik, sekaligus meminta izin lebih sedikit.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-ScopedDirectoryAccess">
+ Dapatkan di GitHub</a>
+</p>
diff --git a/docs/html-intl/intl/id/about/versions/nougat/android-7.0.jd b/docs/html-intl/intl/id/about/versions/nougat/android-7.0.jd
new file mode 100644
index 0000000..ff8af12
--- /dev/null
+++ b/docs/html-intl/intl/id/about/versions/nougat/android-7.0.jd
@@ -0,0 +1,1039 @@
+page.title=Android N for Developers
+meta.tags="preview", "androidn"
+page.tags="preview", "developer preview"
+page.image=images/cards/card-n-apis_2x.png
+@jd:body
+
+
+
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>Fitur-fitur Utama bagi Pengembang</h2>
+ <ol>
+ <ul style="list-style-type:none;">
+ <li><a href="#multi-window_support">Dukungan Multi-Jendela</a></li>
+ <li><a href="#notification_enhancements">Pemberitahuan</a></li>
+ <li><a href="#jit_aot">Kompilasi JIT/AOT</a></li>
+ <li><a href="#quick_path_to_app_install">Jalur Cepat untuk Pasang Aplikasi</a></li>
+ <li><a href="#doze_on_the_go">Istirahatkan Kapan Saja</a></li>
+ <li><a href="#background_optimizations">Optimalisasi Latar Belakang</a></li>
+ <li><a href="#data_saver">Data Saver</a></li>
+ <li><a href="#vulkan">Vulkan API</a></li>
+ <li><a href="#tile_api">Quick Settings Tile API</a></li>
+ <li><a href="#number-blocking">Pemblokiran Nomor</a></li>
+ <li><a href="#call_screening">Penyaringan Panggilan</a></li>
+ <li><a href="#multi-locale_languages">Lokal dan Bahasa</a></li>
+ <li><a href="#emoji">Emoji Baru</a></li>
+ <li><a href="#icu4">ICU4J API di Android</a></li>
+ <li><a href="#gles_32">OpenGL ES 3.2 API</a></li>
+ <li><a href="#android_tv_recording">Perekaman Android TV</a></li>
+ <li><a href="#android_for_work">Android for Work</a></li>
+ <li><a href="#accessibility_enhancements">Aksesibilitas</a></li>
+ <li><a href="#direct_boot">Direct Boot</a></li>
+ <li><a href="#key_attestation">Key Attestation</a></li>
+ <li><a href="#network_security_config">Network Security Config</a></li>
+ <li><a href="#default_trusted_ca">CA Tepercaya Default</a></li>
+ <li><a href="#apk_signature_v2">APK Signature Scheme V2</a></li>
+ <li><a href="#scoped_directory_access">Scoped Directory Access</a></li>
+ <li><a href="#keyboard_shortcuts_helper">Keyboard Shortcuts Helper</a></li>
+ <li><a href="#sustained_performance_api">Sustained Performance API</a></li>
+ <li><a href="#vr">Dukungan VR</a></li>
+ <li><a href="#print_svc">Penyempurnaan Layanan Cetak</a></li>
+ <li><a href="#virtual_files">File Maya</a></li>
+ <li><a href="#framemetrics_api">FrameMetricsListener API</a></li>
+ </ol>
+</div>
+</div>
+
+
+
+<p>Android N masih dalam pengembangan aktif, namun Anda bisa mencobanya
+sekarang sebagai bagian dari N Developer Preview. Bagian-bagian di bawah ini akan menyoroti sebagian dari
+fitur baru untuk pengembang. </p>
+
+<p>
+ Pastikan memeriksa <a href="{@docRoot}preview/behavior-changes.html">Perubahan Perilaku</a> untuk mengetahui selengkapnya tentang
+ bagian-bagian perubahan platform yang bisa memengaruhi aplikasi Anda, lihatlah
+ panduan pengembang untuk mengetahui selengkapnya tentang fitur-fitur utama, dan unduh <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi API</a> untuk mengetahui detail tentang
+ API baru.
+</p>
+
+<h2 id="multi-window_support">Dukungan Multi-Jendela</h2>
+
+
+<p>Di Android N, kami memperkenalkan fitur multitasking baru dan yang banyak diminta
+ke dalam platform — dukungan multi-jendela. </p>
+
+ <p>Pengguna sekarang bisa membuka dua aplikasi sekaligus di layar. </p>
+ <ul>
+ <li>Pada ponsel dan tablet
+yang menjalankan Android N, pengguna bisa menjalankan dua aplikasi secara berdampingan atau
+satu aplikasi di atas yang lain dalam mode layar terbagi. Pengguna bisa mengubah ukuran aplikasi dengan menyeret
+pembagi di antara keduanya. </li>
+
+<li>Pada perangkat Android TV, aplikasi bisa menempatkan dirinya sendiri dalam <a href="{@docRoot}preview/features/picture-in-picture.html">mode
+gambar-dalam-gambar</a>, sehingga aplikasi bisa terus menampilkan materi sementara pengguna menjelajahi atau
+berinteraksi dengan aplikasi lain.</li>
+ </ul>
+
+<div class="col-4of10">
+<img src="{@docRoot}images/android-7.0/mw-portrait.png" alt="" style="height:460px;padding-left:1em;" id="img-split-screen" />
+<p class="img-caption">
+ <strong>Gambar 1.</strong> Aplikasi yang berjalan dalam mode layar terbagi.
+</p>
+
+ </div>
+
+<p>Khususnya pada tablet dan perangkat yang berlayar lebih besar lainnya, dukungan multi-jendela
+memberi Anda cara baru untuk memikat pengguna. Anda bahkan bisa mengaktifkan fitur seret-dan-lepas di
+aplikasi untuk memudahkan pengguna menyeret materi ke dan dari aplikasi — cara bagus
+untuk menyempurnakan pengalaman pengguna Anda. </p>
+
+<p>Tidak sulit menambahkan dukungan multi-jendela ke aplikasi Anda dan mengonfigurasi cara
+menangani tampilan multi-jendela. Misalnya, Anda bisa menetapkan dimensi
+minimum yang diizinkan aktivitas, sehingga mencegah pengguna mengubah ukuran aktivitas di bawah
+ukuran itu. Anda juga bisa menonaktifkan tampilan multi-jendela untuk aplikasi Anda, yang
+ akan memastikan sistem hanya menampilkan aplikasi dalam mode layar penuh.</p>
+
+<p>
+ Untuk informasi selengkapnya, lihat dokumentasi pengembang <a href="{@docRoot}preview/features/multi-window.html">Dukungan Multi-Jendela</a>.
+
+</p>
+
+<h2 id="notification_enhancements">Penyempurnaan Pemberitahuan</h2>
+
+<p>Di Android N kami telah mengubah desain pemberitahuan agar lebih mudah dan lebih cepat
+digunakan. Beberapa perubahan tersebut antara lain:</p>
+
+<ul>
+ <li>
+ <strong>Pembaruan template</strong>: Kami telah memperbarui template pemberitahuan untuk
+ lebih menekankan citra pahlawan dan avatar. Pengembang akan dapat
+ memanfaatkan template baru dengan penyesuaian kode yang minimal.
+ </li>
+
+ <li>
+ <strong>Penyesuaian gaya pesan</strong>: Anda bisa menyesuaikan lebih banyak
+ label antarmuka pengguna yang berkaitan dengan pemberitahuan Anda menggunakan kelas
+ <code>MessageStyle</code>. Anda bisa mengonfigurasi pesan, judul percakapan,
+ dan tampilan materi.
+ </li>
+
+ <li>
+ <strong>Bundel pemberitahuan</strong>: Sistem bisa mengelompokkan pesan,
+ misalnya menurut topik pesan, dan menampilkan kelompok pesan tersebut. Seorang pengguna bisa
+ bertindak, misalnya Tutup atau Arsipkan, atas pesan yang ditampilkan. Jika Anda sudah
+ mengimplementasikan pemberitahuan untuk Android Wear, Anda akan terbiasa dengan
+ model ini.
+ </li>
+
+ <li>
+ <strong>Balasan Langsung</strong>: Untuk aplikasi komunikasi real-time, sistem
+ Android mendukung balasan inline sehingga pengguna bisa dengan cepat membalas
+ SMS atau pesan teks secara langsung dari dalam antarmuka pemberitahuan.
+ </li>
+
+ <li>
+ <strong>Tampilan khusus</strong>: Dua API baru memungkinkan Anda memanfaatkan dekorasi sistem,
+ misalnya header pemberitahuan dan tindakan, saat menggunakan tampilan
+ khusus dalam pemberitahuan.
+ </li>
+</ul>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-1.png" alt="" style="padding:.5em;max-width:226px">
+</div>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-3.png" alt="" style="padding:.5em;max-width:226px">
+</div>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-2.png" alt="" style="padding:.5em;max-width:226px">
+</div>
+
+
+<p class="img-caption">
+ <strong>Gambar 2.</strong> Bundel pemberitahuan dan balasan langsung.
+</p>
+
+<p>Untuk mengetahui cara mengimplementasikan fitur-fitur
+ baru ini, lihat panduan <a href="{@docRoot}preview/features/notification-updates.html">Pemberitahuan</a>.
+</p>
+
+
+
+<h2 id="jit_aot">Kompilasi JIT/AOT yang dipandu profil</h2>
+
+<p>Di Android N, kami telah menambahkan compiler Just in Time (JIT) dengan pembuatan profil kode ke
+ART, yang memungkinkannya terus meningkatkan kinerja aplikasi Android saat
+dijalankan. Compiler JIT melengkapi compiler Ahead of Time (AOT) pada ART
+dan membantu memperbaiki kinerja waktu proses, menghemat ruang penyimpanan, dan mempercepat
+pembaruan aplikasi serta pembaruan sistem.</p>
+
+<p>Kompilasi yang dipandu profil memungkinkan ART mengelola kompilasi AOT/JIT untuk setiap aplikasi
+sesuai dengan penggunaan sebenarnya, serta kondisi pada perangkat. Misalnya
+,ART menyimpan profil setiap metode terbaik aplikasi dan bisa melakukan kompilasi lebih awal
+serta menyimpan sementara metode-metode tersebut di cache untuk mendapatkan kinerja terbaik. Hal ini membuat bagian lain dari aplikasi
+dibiarkan tidak dikompilasi hingga benar-benar digunakan.</p>
+
+<p>Di samping meningkatkan kinerja bagian-bagian penting aplikasi, kompilasi yang dipandu profil
+membantu mengurangi footprint RAM keseluruhan aplikasi, termasuk biner
+terkait. Fitur ini terutama penting pada perangkat dengan memori minim.</p>
+
+<p>ART mengelola kompilasi yang dipandu profil dengan cara yang meminimalkan dampak terhadap
+baterai perangkat. ART melakukan prakompilasi hanya bila perangkat sedang diam dan
+mengisi daya, sehingga menghemat waktu dan baterai dengan melakukan pekerjaan tersebut di awal.</p>
+
+<h2 id="quick_path_to_app_install">Jalur Cepat untuk Pasang Aplikasi</h2>
+
+<p>Salah satu manfaat paling nyata dari compiler JIT pada ART adalah kecepatan
+pemasnagan aplikasi dan pembaruan sistem. Bahkan aplikasi besar yang membutuhkan beberapa menit untuk
+dioptimalkan dan dipasang di Android 6.0 sekarang bisa dipasang hanya dalam hitungan
+detik. Pembaruan sistem juga lebih cepat, karena tidak ada lagi langkah optimalisasi. </p>
+
+<h2 id="doze_on_the_go">Istirahatkan Kapan Saja...</h2>
+
+<p>Android 6.0 memperkenalkan Istirahatkan, yaitu mode sistem yang menghemat baterai dengan menangguhkan
+aktivitas CPU dan jaringan di aplikasi bila perangkat sedang diam, misalnya saat
+diletakkan di atas meja atau dalam laci. </p>
+
+<p>Sekarang di Android N, Istirahatkan selangkah lebih maju dalam menghemat baterai kapan saja.
+Setiap kali layar mati dalam jangka waktu tertentu dan perangkat tidak terhubung ke sumber daya,
+Istirahatkan akan menerapkan subset pembatasan umum CPU dan jaringan pada aplikasi.
+Artinya pengguna bisa menghemat daya baterai meskipun perangkat dibawa di dalam
+tasnya.</p>
+
+
+<img src="/preview/images/doze-diagram-1.png" alt="" id="figure1" />
+<p class="img-caption">
+ <strong>Gambar 3.</strong> Istirahatkan sekarang menerapkan
+ pembatasan untuk meningkatkan daya tahan baterai bahkan saat perangkat sedang tidak diam.
+</p>
+
+
+<p>Tidak lama setelah layar dimatikan saat perangkat menggunakan daya baterai, Istirahatkan
+akan membatasi akses jaringan serta menangguhkan pekerjaan dan sinkronisasi. Selama jeda
+pemeliharaan, aplikasi diizinkan mengakses jaringan dan menjalankan semua
+pekerjaan/sinkronisasi yang ditangguhkan. Menyalakan layar atau mencolokkan perangkat akan mengeluarkan
+perangkat dari Istirahatkan.</p>
+
+<p>Bila perangkat dalam kondisi diam lagi, dengan layar mati dan menggunakan daya baterai selama
+jangka waktu tertentu, Istirahatkan akan menerapkan pembatasan CPU dan jaringan pada {@link
+android.os.PowerManager.WakeLock}, alarm {@link android.app.AlarmManager}, dan
+pemindaian GPS/Wi-Fi.</p>
+
+<p>Praktik terbaik untuk menyesuaikan aplikasi Anda dengan Istirahatkan adalah sama, baik
+perangkat sedang bergerak maupun diam, jadi jika Anda sudah memperbarui aplikasi untuk
+menjalankan Istirahatkan dengan lancar, berarti Anda sudah siap. Jika belum, mulailah <a href="{@docRoot}training/monitoring-device-state/doze-standby.html#assessing_your_app">menyesuaikan
+aplikasi Anda dengan Istirahatkan</a> sekarang juga.</p>
+
+<h2 id="background_optimizations">Project Svelte: Optimalisasi Latar Belakang</h2>
+
+<p>Project Svelte merupakan upaya berkelanjutan untuk meminimalkan penggunaan RAM oleh sistem dan aplikasi
+di semua jenis perangkat Android dalam ekosistem. Di Android N, Project
+Svelte berfokus pada optimalisasi cara aplikasi berjalan di latar belakang. </p>
+
+<p>Proses latar belakang merupakan bagian terpenting dari sebagian besar aplikasi. Bila ditangani dengan benar, proses
+ini bisa memberikan pengalaman pengguna yang mengagumkan — segera, cepat, dan sesuai konteks.
+Bila tidak ditangani dengan benar, proses latar belakang bisa menguras RAM (dan
+baterai) yang sebenarnya tidak perlu serta memengaruhi kinerja sistem untuk aplikasi lain. </p>
+
+<p>Sejak Android 5.0, {@link android.app.job.JobScheduler} telah menjadi
+cara yang disukai untuk melakukan pekerjaan latar belakang dengan cara yang baik
+bagi pengguna. Aplikasi bisa menjadwalkan pekerjaan sekaligus memungkinkan sistem mengoptimalkan berdasarkan
+kondisi memori, daya, dan konektivitas. JobScheduler menawarkan kontrol serta
+kemudahan, dan kami ingin semua aplikasi menggunakannya. </p>
+
+<p>
+ Opsi baik lainnya adalah <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
+ <code>GCMNetworkManager</code></a>, bagian dari Google Play Services, yang
+ menawarkan penjadwalan pekerjaan serupa dengan kompatibilitas pada semua versi lawas
+ Android.
+</p>
+
+<p>Kami terus memperluas <code>JobScheduler</code> dan
+<code>GCMNetworkManager</code> untuk memenuhi lebih banyak
+kasus penggunaan Anda — misalnya, di Android N Anda sekarang bisa menjadwalkan pekerjaan
+latar belakang berdasarkan perubahan di Content Providers. Pada saat yang sama kami mulai
+menghilangkan beberapa pola lama yang bisa mengurangi kinerja sistem,
+terutama pada perangkat yang minim memori.</p>
+
+<p>Di Android N kami membuang tiga siaran implisit yang umum digunakan —
+ {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, {@link
+ android.hardware.Camera#ACTION_NEW_PICTURE}, dan {@link
+ android.hardware.Camera#ACTION_NEW_VIDEO} — karena ketiganya bisa mengaktifkan
+proses latar belakang pada beberapa aplikasi sekaligus serta menguras memori dan baterai. Jika
+aplikasi Anda menerimanya, manfaatkan N Developer Preview untuk
+ beralih ke <code>JobScheduler</code> dan API terkait sebagai gantinya. </p>
+
+<p>
+ Lihat dokumentasi <a href="{@docRoot}preview/features/background-optimization.html">Optimalisasi
+ Latar Belakang</a> untuk mengetahui detailnya.
+</p>
+
+
+<h2 id="data_saver">Data Saver</h2>
+
+<div class="col-5of12" style="margin-right:1.5em;">
+<img src="{@docRoot}images/android-7.0/datasaver.png" style="border:2px solid #ddd">
+
+<p class="img-caption" style="padding-right:2em;">
+ <strong>Gambar 4.</strong> Data Saver di Settings.
+</p>
+ </div>
+
+<p>Selama penggunaan perangkat seluler, biaya paket data seluler biasanya
+ melebihi harga perangkat itu sendiri. Bagi banyak pengguna, data seluler adalah sumber daya
+mahal yang ingin mereka hemat. </p>
+
+<p>Android N memperkenalkan mode Data Saver, layanan sistem baru yang mengurangi
+penggunaan data seluler oleh aplikasi, baik saat roaming, mendekati akhir siklus tagihan,
+atau saat menggunakan paket data prabayar yang kecil. Data Saver memberi pengguna kemampuan mengontrol cara aplikasi
+menggunakan data seluler dan memungkinkan pengembang memberikan layanan yang lebih efisien bila Data
+Saver aktif. </p>
+
+<p>Bila pengguna mengaktifkan Data Saver di <strong>Settings</strong> dan perangkat
+dalam jaringan berkuota, sistem akan memblokir penggunaan data latar belakang dan memberi tahu aplikasi
+untuk menghemat penggunaan data latar depan — misalnya dengan membatasi
+kecepatan bit untuk streaming, mengurangi kualitas gambar, menangguhkan precaching optimistik,
+dan seterusnya. Pengguna bisa memasukkan aplikasi tertentu ke daftar putih untuk memungkinkan penggunaan data berkuota
+bila Data Saver diaktifkan.</p>
+
+<p>Android N memperluas {@link android.net.ConnectivityManager} untuk menyediakan cara pada aplikasi
+untuk <a href="{@docRoot}preview/features/data-saver.html#status">mengambil
+preferensi Data Saver pengguna</a> dan <a href="{@docRoot}preview/features/data-saver.html#monitor-changes">memantau
+perubahan preferensi</a>. Semua aplikasi harus memeriksa apakah pengguna telah mengaktifkan Data
+Saver dan berusaha membatasi penggunaan data latar belakang dan latar depan.</p>
+
+
+<h2 id="vulkan">Vulkan API</h2>
+
+<p>
+ Android N mengintegrasikan <a href="http://www.khronos.org/vulkan" class="external-link">Vulkan™</a>, sebuah API rendering 3D baru, ke dalam platform. Seperti
+ <a href="https://www.khronos.org/opengles/" class="external-link">OpenGL™
+ ES</a>, Vulkan merupakan standar terbuka untuk grafik 3D dan rendering yang dikelola
+ oleh Khronos Group.
+</p>
+
+<p>
+ Vulkan didesain dari nol untuk meminimalkan overhead CPU dalam driver,
+ dan memungkinkan aplikasi Anda mengontrol operasi GPU lebih langsung. Vulkan
+ juga memungkinkan paralelisasi yang lebih baik dengan mengizinkan beberapa thread menjalankan
+ pekerjaan seperti pembuatan buffer perintah sekaligus.
+</p>
+
+<p>
+ Pustaka dan alat pengembangan Vulkan telah dimasukkan ke dalam Android NDK. Ini
+ berisi:
+</p>
+
+<ul>
+ <li>Header
+ </li>
+
+ <li>Layer validasi (pustaka debug)
+ </li>
+
+ <li>SPIR-V shader compiler
+ </li>
+
+ <li>Pustaka kompilasi shader waktu proses SPIR-V
+ </li>
+</ul>
+
+<p>
+ Vulkan hanya tersedia untuk aplikasi pada perangkat dengan perangkat keras yang mendukung Vulkan,
+ seperti Nexus 5X, Nexus 6P, dan Nexus Player. Kami bekerja sama erat dengan mitra
+ agar secepatnya makin banyak perangkat yang dilengkapi Vulkan.
+</p>
+
+<p>
+ Untuk informasi selengkapnya, lihat <a href="{@docRoot}ndk/guides/graphics/index.html">dokumentasi API</a>.
+</p>
+
+<h2 id="tile_api">Quick Settings Tile API</h2>
+
+
+<div style="float:right;max-width:320px">
+<img src="{@docRoot}images/android-7.0/quicksettings.png" style="padding-left:1.5em;">
+
+<p class="img-caption" style="padding-left:2em;">
+ <strong>Gambar 5.</strong> Quick Settings Tile dalam bayangan pemberitahuan.
+</p>
+
+
+ </div><p>Quick Settings adalah cara populer dan mudah untuk mengekspos setelan dan tindakan utama,
+langsung dari bayangan pemberitahuan. Di Android N, kami telah memperluas lingkup
+Quick Settings untuk membuatnya lebih berguna dan praktis lagi. </p>
+
+<p>Kami telah menambahkan ruang lebih banyak untuk petak Quick Settings tambahan, yang bisa
+diakses pengguna di semua bagian area tampilan halaman bernomor dengan mengusap ke kiri atau kanan. Kami juga memberi pengguna
+kontrol untuk mengatur letak dan petak Quick Settings apa yang akan
+ditampilkan — pengguna bisa menambahkan atau memindahkan petak dengan menyeret dan melepasnya. </p>
+
+<p>Bagi pengembang, Android N juga menambahkan API baru yang memungkinkan Anda mendefinisikan
+ petak Quick Settings untuk memberi akses mudah kepada pengguna ke berbagai kontrol dan tindakan utama dalam aplikasi Anda.</p>
+
+<p>
+ Petak Quick Settings dicadangkan untuk kontrol atau tindakan yang
+ mendesak atau sering digunakan, dan tidak boleh digunakan sebagai pintasan untuk
+ membuka aplikasi.
+</p>
+
+<p>
+ Setelah mendefinisikan petak, Anda bisa menyediakannya kepada pengguna, yang bisa mereka tambahkan
+ ke Quick Settings cukup dengan seret dan lepas.
+</p>
+
+<p>
+ Untuk informasi tentang pembuatan petak aplikasi, lihat dokumentasi untuk
+ <code>android.service.quicksettings.Tile</code> dalam <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi API</a> yang bisa diunduh.
+</p>
+
+
+
+<h2 id="number-blocking">Pemblokiran Nomor</h2>
+
+<p>Android N sekarang mendukung pemblokiran nomor di platform dan menyediakan
+API kerangka kerja agar penyedia layanan bisa mengelola daftar nomor blokir. Aplikasi SMS
+default, aplikasi telepon default, dan aplikasi operator bisa membaca dari dan
+menulis ke daftar nomor blokir. Daftar ini tidak dapat diakses oleh aplikasi lain.</p>
+
+<p>Dengan membuat pemblokiran nomor sebagai fitur standar pada platformnya, Android menyediakan
+cara konsisten bagi aplikasi untuk mendukung pemblokiran nomor di berbagai
+perangkat. Manfaat lain yang bisa diperoleh aplikasi antara lain:</p>
+
+<ul>
+ <li> Nomor yang diblokir untuk panggilan juga akan diblokir untuk SMS
+ <li> Nomor yang diblokir tetap disimpan saat pengaturan ulang dan pada berbagai perangkat melalui fitur Backup &
+Restore.
+ <li> Beberapa aplikasi sekaligus bisa menggunakan daftar nomor blokir yang sama.
+</ul>
+
+<p>Selain itu, dengan integrasi aplikasi operator melalui Android berarti operator bisa
+membaca daftar nomor blokir pada perangkat dan melakukan pemblokiran di sisi layanan
+bagi pengguna tersebut untuk menghentikan panggilan dan SMS yang tidak diinginkan
+agar tidak sampai ke pengguna lewat media apa pun, misalnya VOIP-endpoint atau meneruskan panggilan telepon.</p>
+
+<p>
+ Untuk informasi selengkapnya, lihat <code>android.provider.BlockedNumberContract</code>
+ dalam <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi
+ API</a> yang bisa diunduh.
+</p>
+
+<h2 id="call_screening">Penyaringan Panggilan</h2>
+
+<p>
+ Android N memungkinkan aplikasi telepon default untuk menyaring panggilan masuk. Aplikasi
+ telepon melakukannya dengan mengimplementasikan <code>CallScreeningService</code> baru,
+ yang memungkinkan aplikasi telepon untuk melakukan sejumlah tindakan berdasarkan
+ {@link android.telecom.Call.Details Call.Details} panggilan masuk, misalnya:
+</p>
+
+<ul>
+ <li> Menolak panggilan masuk
+ <li> Tidak mengizinkan panggilan tersebut disimpan ke log panggilan
+ <li> Tidak menampilkan pemberitahuan untuk panggilan tersebut kepada pengguna
+</ul>
+
+<p>
+ Untuk informasi selengkapnya, lihat <code>android.telecom.CallScreeningService</code>
+ dalam <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi
+ API</a> yang bisa diunduh.
+</p>
+
+
+<h2 id="multi-locale_languages">Dukungan Multilokal, Lebih Banyak Bahasa yang Didukung</h2>
+
+
+<p>Android N kini memungkinkan pengguna memilih <strong>banyak lokal</strong> di Settings,
+untuk mendukung kasus penggunaan dwibahasa dengan lebih baik. Aplikasi bisa menggunakan
+API baru untuk mendapatkan lokal pilihan pengguna kemudian menawarkan pengalaman pengguna
+yang lebih canggih untuk pengguna multilokal — seperti menampilkan hasil telusur dalam
+banyak bahasa dan tidak menawarkan untuk menerjemahkan halaman web dalam bahasa
+yang sudah diketahui pengguna.</p>
+
+<p>Bersama dukungan multilokal, Android N juga memperluas ragam bahasa
+yang tersedia untuk pengguna. Masing-masing ditawarkan lebih dari 25 varian untuk bahasa yang umum
+digunakan seperti Inggris, Spanyol, Prancis, dan Arab. Juga ditambahkan dukungan
+parsial untuk lebih dari 100 bahasa baru.</p>
+
+<p>Aplikasi bisa mendapatkan daftar lokal yang disetel oleh pengguna dengan memanggil
+<code>LocaleList.GetDefault()</code>. Untuk mendukung jumlah lokal yang diperluas, Android N sedang
+ mengubah cara mengatasi masalah sumber daya. Pastikan Anda menguji dan memverifikasi bahwa aplikasi Anda
+berfungsi seperti yang diharapkan dengan logika resolusi sumber daya baru.</p>
+
+<p>Untuk mengetahui tentang perilaku resolusi sumber daya baru dan praktik terbaik yang
+harus Anda ikuti, lihat <a href="{@docRoot}preview/features/multilingual-support.html">Dukungan Multibahasa</a>.</p>
+
+
+<h2 id="emoji">Emoji Baru</h2>
+
+<p>
+ Android N memperkenalkan emoji tambahan dan fitur terkait emoji termasuk
+ emoji warna kulit dan dukungan untuk pemilih
+ variasi. Jika aplikasi Anda mendukung emoji,
+ ikuti panduan berikut untuk memanfaatkan fitur terkait emoji ini.
+</p>
+
+<ul>
+ <li>
+ <strong>Periksa apakah perangkat berisi emoji sebelum memasukannya.</strong>
+ Untuk memeriksa emoji mana yang terdapat di
+ font sistem, gunakan metode {@link android.graphics.Paint#hasGlyph(String)}.
+ </li>
+ <li>
+ <strong>Periksa apakah emoji mendukung pemilih variasi.</strong>
+ Pemilih variasi memungkinkan Anda
+ menampilkan emoji tertentu berwarna atau hitam-putih.
+ Pada perangkat seluler, aplikasi akan menghadirkan emoji berwarna daripada hitam-putih. Akan tetapi,
+ jika aplikasi Anda menampilkan emoji sebaris dengan teks, maka harus menggunakan variasi hitam-putih.
+ Untuk menentukan apakah sebuah emoji memiliki variasi, gunakan pemilih variasi.
+ Untuk daftar lengkap dari karakter dengan variasinya, tinjaulah bagian
+ <em>rangkaian variasi emoji</em> pada
+ <a class="external-link" href="http://www.unicode.org/Public/9.0.0/ucd/StandardizedVariants-9.0.0d1.txt">
+ dokumentasi Unicode mengenai variasi</a>.
+ </li>
+ <li>
+ <strong>Periksa apakah emoji mendukung warna kulit.</strong> Android N memungkinkan pengguna memodifikasi
+ warna kulit emoji yang dirender sesuai dengan preferensi mereka. Aplikasi keyboard harus menyediakan indikasi
+ visual untuk emoji yang memiliki beberapa warna kulit dan harus memungkinkan pengguna
+ memilih warna kulit yang mereka sukai. Untuk menentukan apakah emoji sistem memiliki
+ modifier warna kulit, gunakan metode {@link android.graphics.Paint#hasGlyph(String)}.
+ Anda bisa menentukan emoji mana yang menggunakan warna kulit dengan membaca
+ <a class="external-link" href="http://unicode.org/emoji/charts/full-emoji-list.html">
+ dokumentasi Unicode</a>.
+ </li>
+</ul>
+
+
+<h2 id="icu4">ICU4J API di Android</h2>
+
+<p>
+ Android N kini menawarkan subset <a href="http://site.icu-project.org/">ICU4J</a> API dalam kerangka kerja Android pada paket
+ <code>android.icu</code>. Migrasi mudah, dan biasanya hanya perlu
+ mengubah dari ruang nama <code>com.java.icu</code> ke
+ <code>android.icu</code>. Jika Anda sudah menggunakan bundel ICU4J dalam aplikasi,
+ maka beralih ke <code>android.icu</code> API yang disediakan dalam kerangka kerja
+ Android bisa menghasilkan penghematan besar dalam ukuran APK.
+</p>
+
+<p>
+ Untuk mengetahui selengkapnya tentang Android ICU4J API, lihat <a href="{@docRoot}preview/features/icu4j-framework.html">Dukungan ICU4J</a>.
+</p>
+
+
+
+<h2 id="gles_32">OpenGL™ ES 3.2 API</h2>
+
+<p>Android N menambahkan antarmuka kerangka kerja dan dukungan platform untuk OpenGL ES 3.2, termasuk:</p>
+
+<ul>
+ <li> Semua ekstensi dari <a class="external-link" href="https://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">
+Android Extension Pack</a></a> (AEP) kecuali untuk <code>EXT_texture_sRGB_decode</code>.
+ <li> Floating-point framebuffer untuk HDR dan shading yang ditangguhkan.
+ <li> Panggilan draw BaseVertex agar batching dan streaming jadi lebih baik.
+ <li> Kontrol akses buffer yang tangguh untuk mengurangi overhead WebGL.
+</ul>
+
+<p>API kerangka kerja untuk OpenGL ES 3.2 di Android N dilengkapi dengan kelas
+ <code>GLES32</code>. Saat menggunakan OpenGL ES 3.2, pastikan
+mendeklarasikan persyaratan dalam file manifes Anda, dengan tag <code><uses-feature></code> dan
+atribut <code>android:glEsVersion</code>. </p>
+
+<p>Untuk informasi tentang menggunakan OpenGL ES, termasuk cara memeriksa versi
+OpenGL ES yang didukung perangkat saat waktu proses, lihat <a href="{@docRoot}guide/topics/graphics/opengl.html">Panduan OpenGL ES API</a>.</p>
+
+
+<h2 id="android_tv_recording">Perekaman Android TV</h2>
+
+<p>Android N menambahkan kemampuan untuk merekam dan memutar kembali materi dari layanan masukan
+Android TV melalui API perekaman baru. Karena dibangun dengan API perekaman yang sudah
+ada, layanan masukan TV bisa mengontrol data saluran apa yang bisa direkam, cara menyimpan
+sesi rekaman, dan mengelola interaksi pengguna dengan materi rekaman. </p>
+
+<p>Untuk informasi selengkapnya, lihat <a href="{@docRoot}preview/features/tv-recording-api.html">API Perekaman Android TV</a>.</p>
+
+
+<h2 id="android_for_work">Android for Work</h2>
+
+<p>Android for Work menambahkan berbagai fitur dan API baru untuk perangkat yang menjalankan Android N.
+Beberapa fitur unggulannya ada di bawah ini — untuk mengetahui daftar lengkap perubahannya, lihat
+<a href="{@docRoot}preview/features/afw.html">Pembaruan Android for Work</a>.</p>
+
+<h3 id="work_profile_security_challenge">Pertanyaan Keamanan Profil Kerja </h3>
+
+<p>
+ Pemilik profil yang menargetkan N SDK
+ bisa menetapkan pertanyaan keamanan terpisah untuk aplikasi yang berjalan di
+ profil kerja. Pertanyaan kerja ditampilkan bila pengguna mencoba membuka
+ aplikasi kerja apa pun. Jawaban pertanyaan keamanan yang benar akan membuka
+ profil kerja dan mendekripsinya jika diperlukan. Untuk pemilik profil,
+ <code>ACTION_SET_NEW_PASSWORD</code> akan meminta pengguna untuk menetapkan pertanyaan
+ kerja, dan <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> meminta
+ pengguna menyetel kunci perangkat.
+</p>
+
+<p>
+ Pemilik profil bisa menyetel kebijakan kode sandi untuk pertanyaan kerja
+ (seperti berapa lama seharusnya PIN, atau apakah sidik jari bisa digunakan
+ untuk membuka kunci profil) menggunakan <code>setPasswordQuality()</code>,
+ <code>setPasswordMinimumLength()</code> dan metode terkait. Pemilik profil
+ juga bisa menyetel kunci perangkat, menggunakan instance <code>DevicePolicyManager</code>
+ yang dikembalikan oleh metode <code>getParentProfileInstance()</code> baru.
+ Selain itu, pemilik profil bisa menyesuaikan layar kredensial untuk
+ pertanyaan kerja menggunakan metode baru <code>setOrganizationColor()</code> dan
+ <code>setOrganizationName()</code>.
+</p>
+<h3 id="turn_off_work">Menonaktifkan pekerjaan </h3>
+
+<p>Pada perangkat dengan profil kerja, pengguna bisa beralih mode kerja. Bila mode
+kerja dinonaktifkan, profil yang dikelola akan dinonaktifkan untuk sementara, yang akan menonaktifkan aplikasi
+profil kerja, sinkronisasi latar belakang, dan pemberitahuan. Termasuk aplikasi pemilik
+profil. Bila profil kerja dinonaktifkan, sistem akan menampilkan ikon status
+tetap untuk mengingatkan pengguna bahwa mereka tidak bisa meluncurkan aplikasi kerja. Peluncur
+menunjukkan bahwa aplikasi kerja dan widget tidak bisa diakses. </p>
+
+<h3 id="always_on_vpn">Always-On VPN </h3>
+
+<p>Pemilik perangkat dan pemilik profil bisa memastikan bahwa aplikasi kerja selalu menghubungkan
+melalui VPN yang ditetapkan. Sistem secara otomatis akan memulai VPN itu setelah booting
+perangkat.</p>
+
+<p>
+ Metode <code>DevicePolicyManager</code> baru adalah
+ <code>setAlwaysOnVpnPackage()</code> dan
+ <code>getAlwaysOnVpnPackage()</code>.
+</p>
+
+<p>Karena layanan VPN bisa diikat langsung oleh sistem tanpa interaksi
+aplikasi, klien VPN perlu menangani titik masuk baru untuk Always-On VPN. Seperti
+sebelumnya, layanan ditunjukkan ke sistem melalui
+tindakan pencocokan filter intent <code>android.net.VpnService</code>. </p>
+
+<p>
+ Pengguna bisa secara manual menyetel klien Always-On VPN yang mengimplementasikan
+ metode <code>VPNService</code> dalam pengguna utama dengan menggunakan
+ <strong>Settings>More>Vpn</strong>.
+</p>
+
+<h3 id="custom_provisioning">Penyediaan yang disesuaikan</h3>
+
+<p>
+ Aplikasi bisa menyesuaikan alur penyediaan pemilik profil dan pemilik perangkat
+ dengan warna dan logo perusahaan.
+ <code>DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR</code> menyesuaikan
+ warna alur. <code>DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI</code>
+ menyesuaikan alur dengan logo perusahaan.
+</p>
+
+<h2 id="accessibility_enhancements">Penyempurnaan Aksesibilitas</h2>
+
+<p>Android N saat ini menawarkan Vision Settings langsung di layar Sambutan untuk
+persiapan perangkat baru. Ini sangat memudahkan pengguna untuk menemukan dan mengonfigurasi
+fitur aksesibilitas pada perangkat mereka, termasuk isyarat perbesaran, ukuran
+font, ukuran layar, dan TalkBack. </p>
+
+<p>Dengan fitur aksesibilitas yang penempatannya semakin jelas, pengguna Anda
+kemungkinan besar akan mencoba aplikasi dengan fitur-fitur yang diaktifkan itu. Pastikan Anda menguji aplikasi
+lebih dini dengan mengaktifkan dahulu setelan ini. Anda bisa mengaktifkannya dari Settings >
+Accessibility.</p>
+
+<p>Di Android N, layanan aksesibilitas sekarang bisa membantu pengguna yang mengalami gangguan
+motorik untuk menyentuh layar. API baru memungkinkan membangun layanan dengan
+fitur-fitur seperti pelacakan wajah, pelacakan mata, pemindaian titik, dan seterusnya, untuk
+memenuhi kebutuhan para pengguna tersebut.</p>
+
+<p>Untuk informasi selengkapnya, lihat <code>android.accessibilityservice.GestureDescription</code>
+ dalam <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi API</a> yang bisa diunduh.</p>
+
+
+<h2 id="direct_boot">Direct Boot</h2>
+
+<p>Direct Boot memperbaiki waktu startup perangkat dan memungkinkan aplikasi
+yang telah didaftarkan memiliki fungsionalitas terbatas bahkan setelah boot ulang tak terduga.
+Misalnya, jika perangkat yang dienkripsi melakukan boot ulang selagi pengguna tidur,
+alarm terdaftar, pesan dan panggilan masuk sekarang bisa terus memberi tahu
+pengguna seperti biasa. Ini juga berarti layanan aksesibilitas bisa
+ segera tersedia setelah restart.</p>
+
+<p>Direct Boot memanfaatkan enkripsi berbasis file di Android N
+untuk mengaktifkan kebijakan enkripsi yang telah disesuaikan bagi sistem dan data aplikasi.
+Sistem akan menggunakan penyimpanan yang dienkripsi dengan perangkat untuk data sistem terpilih dan data
+aplikasi yang terdaftar secara eksplisit. Secara default, penyimpanan yang dienkripsi dengan kredensial digunakan untuk semua
+ data sistem lainnya, data pengguna, aplikasi, dan data aplikasi. </p>
+
+<p>Saat booting, sistem dimulai dalam mode terbatas dengan akses
+ke data yang dienkripsi dengan perangkat saja, dan tanpa akses umum ke aplikasi atau data.
+Jika Anda memiliki komponen yang ingin Anda jalankan dalam mode ini, Anda bisa mendaftarkannya
+dengan menyetel flag dalam manifes. Setelah restart, sistem akan mengaktifkan
+komponen terdaftar dengan menyiarkan intent <code>LOCKED_BOOT_COMPLETED</code>.
+ Sistem akan memastikan data aplikasi yang dienkripsi dengan perangkat tersedia
+sebelum membuka kunci. Semua data lainnya tidak tersedia sebelum Pengguna mengonfirmasi
+ kredensial layar kunci mereka untuk mendekripsinya. </p>
+
+Untuk informasi selengkapnya, lihat <a href="{@docRoot}preview/features/direct-boot.html">Direct Boot</a>.</p>
+</p>
+
+
+<h2 id="key_attestation">Key Attestation</h2>
+
+<p>Keystore yang didukung perangkat keras menyediakan metode yang jauh lebih aman untuk membuat, menyimpan,
+dan menggunakan kunci kriptografi pada perangkat Android. Keystore itu melindungi kunci dari
+kernel Linux, potensi kerentanan Android, dan ekstraksi
+dari perangkat yang di-root.</p>
+
+<p>Agar lebih mudah dan lebih aman dalam menggunakan keystore yang didukung perangkat keras,
+Android N memperkenalkan Key Attestation. Aplikasi dan perangkat-nonaktif bisa menggunakan Key
+Attestation untuk menentukan apakah penyandingan kunci RSA atau EC
+didukung perangkat keras, apa properti dari penyandingan kunci, dan batasan
+ apa yang diterapkan terhadap penggunaan dan validitasnya. </p>
+
+<p>Aplikasi dan layanan perangkat-nonaktif bisa meminta informasi tentang penyandingan kunci
+melalui sertifikat pengesahan X.509 yang harus ditandatangani dengan kunci
+pengesahan yang valid. Kunci pengesahan adalah kunci penandatanganan ECDSA yang
+telah diinjeksikan ke dalam keystore yang didukung perangkat keras pada perangkat saat di pabriknya.
+Karena itu, sertifikat pengesahan yang ditandatangani oleh kunci pengesahan yang
+valid akan mengonfirmasi keberadaan keystore yang didukung perangkat keras, bersama
+ detail pasangan kunci dalam keystore itu.</p>
+
+<p>Untuk memastikan perangkat ini menggunakan citra Android resmi yang
+aman dari pabrik, Key Attestation mengharuskan <a class="external-link" href="https://source.android.com/security/verifiedboot/verified-boot.html#bootloader_requirements">bootloader</a> perangkat
+menyediakan informasi berikut pada <a class="external-link" href="https://source.android.com/security/trusty/index.html">Trusted
+Execution Environment (TEE)</a>:</p>
+
+<ul>
+<li>Versi OS dan level patch yang dipasang pada perangkat</li>
+<li>Kunci publik <a href="https://source.android.com/security/verifiedboot/index.html" class="external-link">Verified Boot</a> dan status kunci</li>
+ </ul>
+
+<p>Untuk informasi selengkapnya tentang fitur keystore yang didukung perangkat keras,
+lihat panduan untuk <a href="https://source.android.com/security/keystore/" class="external-link">Keystore yang Didukung Perangkat Keras</a>.</p>
+
+<p>Selain Key Attestation, Android N juga memperkenalkan
+ kunci yang terikat sidik jari yang tidak dipanggil saat pendaftaran sidik jari.</p>
+
+<h2 id="network_security_config">Network Security Config</h2>
+
+<p>Di Android N, aplikasi bisa menyesuaikan perilaku koneksi aman mereka
+(HTTPS, TLS) secara aman, tanpa modifikasi kode, dengan menggunakan
+<em>Network Security Config</em> deklaratif sebagai ganti menggunakan API programatik
+konvensional yang rawan kesalahan (mis. X509TrustManager).</p>
+
+ <p>Fitur yang didukung:</p>
+<ul>
+<li><b>Trust-anchor khusus.</b> Memungkinkan aplikasi menyesuaikan
+Certificate Authorities (CA) mana yang dipercaya untuk koneksi amannya. Misalnya,
+mempercayai sertifikat tertentu yang ditandatangani sendiri atau set CA publik yang dibatasi.
+</li>
+<li><b>Penggantian hanya-debug.</b> Memungkinkan pengembang aplikasi dengan aman men-debug
+koneksi aman aplikasi mereka tanpa menambah risiko pada basis yang sudah
+dipasang.
+</li>
+<li><b>Berhenti dari lalu lintas cleartext.</b> Memungkinkan aplikasi melindungi dirinya sendiri dari
+penggunaan lalu lintas cleartext yang tidak disengaja.</li>
+<li><b>Penyematan sertifikat.</b> Sebuah fitur canggih yang memungkinkan aplikasi
+ membatasi kunci server mana yang dipercaya untuk koneksi aman.</li>
+</ul>
+
+<p>Untuk informasi selengkapnya, lihat <a href="{@docRoot}preview/features/security-config.html">Network Security
+Config</a>.</p>
+
+<h2 id="default_trusted_ca">Certificate Authority Tepercaya Default</h2>
+
+<p>Secara default, aplikasi yang menargetkan Android N hanya mempercayai sertifikat yang disediakan sistem
+dan tidak lagi mempercayai Certificate Authorities (CA) yang ditambahkan pengguna. Aplikasi yang menargetkan Android
+N dan ingin mempercayai CA yang ditambahkan pengguna harus menggunakan
+<a href="{@docRoot}preview/features/security-config.html">Network Security Config</a> untuk
+menetapkan cara mempercayai CA pengguna.</p>
+
+<h2 id="apk_signature_v2">APK Signature Scheme v2</h2>
+
+<p>
+ Android N memperkenalkan APK Signature Scheme v2, sebuah skema penandatanganan aplikasi baru yang
+ menawarkan waktu pasang aplikasi lebih cepat dan lebih banyak perlindungan terhadap perubahan
+ tidak sah pada file APK. Secara default, Android Studio 2.2 dan Android
+ Plugin untuk Gradle 2.2 menandatangani aplikasi Anda menggunakan APK Signature Scheme v2 dan
+ skema penandatanganan tradisional, yang menggunakan penandatanganan JAR.
+</p>
+
+<p>
+ Meskipun kami menyarankan untuk menerapkan APK Signature Scheme v2 pada aplikasi Anda, skema
+ baru ini tidak wajib. Jika aplikasi Anda tidak dibangun dengan benar saat menggunakan APK
+ Signature Scheme v2, Anda bisa menonaktifkan skema baru ini. Proses penonaktifan
+ menyebabkan Android Studio 2.2 dan Android Plugin untuk Gradle 2.2 menandatangani aplikasi Anda
+ menggunakan skema penandatanganan tradisional saja. Untuk menandatangani dengan
+ skema tradisional saja, buka file <code>build.gradle</code> level-modul, kemudian
+ tambahkan baris <code>v2SigningEnabled false</code> ke konfigurasi
+ penandatanganan rilis Anda:
+</p>
+
+<pre>
+ android {
+ ...
+ defaultConfig { ... }
+ signingConfigs {
+ release {
+ storeFile file("myreleasekey.keystore")
+ storePassword "password"
+ keyAlias "MyReleaseKey"
+ keyPassword "password"
+ <strong>v2SigningEnabled false</strong>
+ }
+ }
+ }
+</pre>
+
+<p class="caution"><strong>Perhatian: </strong> Jika Anda menandatangani aplikasi menggunakan APK
+ Signature Scheme v2 dan membuat perubahan lebih jauh pada aplikasi, tanda tangan aplikasi
+ menjadi tidak valid. Untuk alasan ini, gunakan alat seperti <code>zipalign</code>
+ sebelum menandatangani aplikasi Anda menggunakan APK Signature Scheme v2, bukan setelahnya.
+</p>
+
+<p>
+ Untuk informasi selengkapnya, baca dokumen Android Studio yang menjelaskan cara
+ <a href="{@docRoot}studio/publish/app-signing.html#release-mode">
+ menandatangani aplikasi</a> di Android Studio dan cara<a href="{@docRoot}studio/build/build-variants.html#signing"> mengonfigurasi
+ file build untuk menandatangani aplikasi</a> menggunakan Android Plugin untuk Gradle.
+</p>
+
+<h2 id="scoped_directory_access">Scoped Directory Access</h2>
+
+<p>Di Android N, aplikasi bisa menggunakan API baru untuk meminta akses ke direktori <a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">penyimpanan
+eksternal</a> tertentu, termasuk direktori di media lepas-pasang seperti kartu
+SD. API baru ini sangat menyederhanakan cara aplikasi Anda mengakses direktori
+penyimpanan eksternal standar, seperti direktori <code>Pictures</code>. Aplikasi
+seperti aplikasi foto bisa menggunakan API ini sebagai ganti menggunakan
+<code>READ_EXTERNAL_STORAGE</code>, yang memberikan akses ke semua direktori
+penyimpanan, atau Storage Access Framework, yang membuat pengguna mengarah ke
+direktori tersebut.</p>
+
+<p>Selain itu, API baru ini menyederhanakan langkah-langkah yang diambil pengguna untuk memberikan akses
+penyimpanan eksternal ke aplikasi Anda. Bila Anda menggunakan API baru, sistem akan menggunakan UI izin
+sederhana yang memperinci dengan jelas direktori apa yang aksesnya diminta
+oleh aplikasi.</p>
+
+<p>Untuk informasi selengkapnya, lihat dokumentasi pengembang
+<a href="{@docRoot}preview/features/scoped-folder-access.html">Scoped
+Directory Access</a>.</p>
+
+<h2 id="keyboard_shortcuts_helper">Keyboard Shortcuts Helper</h2>
+
+<p>
+Di Android N, pengguna bisa menekan "Alt + /" untuk memunculkan layar <em>Keyboard Shortcuts</em>
+yang menampilkan semua pintasan yang tersedia baik dari sistem maupun dari
+aplikasi yang sedang mendapatkan fokus. Ini diambil secara otomatis dari menu aplikasi
+jika tersedia, namun pengembang bisa menyediakan daftar pintasan yang telah disesuaikan
+untuk layar. Anda bisa melakukannya dengan mengganti metode
+<code>Activity.onProvideKeyboardShortcuts()</code> baru, yang dijelaskan dalam
+<a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi API</a> yang bisa diunduh.
+</p>
+
+<p>
+Untuk memunculkan Keyboard Shortcuts Helper dari mana saja di aplikasi Anda,
+panggil {@code Activity.requestKeyboardShortcutsHelper()} untuk aktivitas terkait.
+</p>
+
+<h2 id="sustained_performance_api">Sustained Performance API</h2>
+
+<p>
+Kinerja bisa berfluktuasi secara dramatis untuk aplikasi yang berjalan lama, karena
+sistem melakukan throttle pada mesin sistem-di-chip saat komponen perangkat mencapai
+batas suhunya. Fluktuasi ini memberikan target bergerak bagi pengembang
+aplikasi yang sedang membuat aplikasi berkinerja tinggi dan berjalan lama.
+</p>
+
+<p>
+Untuk menangani batasan ini, Android N menyertakan dukungan untuk
+<em>mode kinerja kontinu</em>, yang memungkinkan OEM memberikan petunjuk mengenai kemampuan kinerja
+perangkat untuk aplikasi yang berjalan lama. Pengembang aplikasi
+bisa menggunakan petunjuk ini untuk menyesuaikan aplikasi agar kinerja perangkat bisa diprediksi
+dan pada level yang konsisten dalam jangka waktu lama.
+</p>
+
+<p>
+Pengembang aplikasi bisa mencoba API baru ini dalam N Developer Preview pada
+perangkat Nexus 6P saja. Untuk menggunakan fitur ini,
+setel flag jendela kinerja kontinu
+yang ingin Anda jalankan dalam mode kinerja kontinu. Setel flag ini menggunakan metode
+{@code Window.setSustainedPerformanceMode()}. Sistem secara otomatis
+akan menonaktifkan mode ini bila jendela tidak lagi mendapatkan fokus.
+</p>
+
+<h2 id="vr">Dukungan VR</h2>
+
+<p>
+Android N menambahkan dukungan platform dan optimalisasi untuk VR Mode baru yang memungkinkan
+pengembang membuat pengalaman VR berkualitas tinggi di seluler bagi para pengguna. Ada banyak perbaikan
+kinerja, termasuk akses ke inti CPU yang eksklusif untuk aplikasi VR.
+Di dalam aplikasi, Anda bisa memanfaatkan pelacakan kepala yang cerdas,
+dan pemberitahuan stereo yang bekerja untuk VR. Hal terpenting adalah Android N menyediakan
+grafis dengan latensi sangat rendah. Untuk informasi selengkapnya tentang membangun aplikasi VR untuk Android N,
+lihat <a href="https://developers.google.com/vr/android/">Google VR SDK untuk Android</a>.
+</p>
+
+
+<h2 id="print_svc">Penyempurnaan Layanan Cetak</h2>
+
+<p>
+ Di Android N, pengembang layanan cetak kini bisa menampilkan informasi tambahan
+ tentang masing-masing printer dan pekerjaan cetak.
+</p>
+
+<p>
+ Saat mendaftarkan masing-masing printer, layanan cetak kini bisa menyetel
+ ikon per printer dalam dua cara:
+</p>
+
+<ul>
+ <li>Anda bisa menyetel ikon dari ID sumber daya dengan memanggil
+ <code>PrinterInfo.Builder.setResourceIconId()</code>
+ </li>
+
+ <li>Anda bisa menampilkan ikon dari jaringan dengan memanggil
+ <code>PrinterInfo.Builder.setHasCustomPrinterIcon()</code>, dan menyetel sebuah
+ callback bila ikon diminta menggunakan
+ <code>android.printservice.PrinterDiscoverySession.onRequestCustomPrinterIcon()</code>
+ </li>
+</ul>
+
+<p>
+ Selain itu, Anda bisa menyediakan aktivitas per printer untuk menampilkan informasi
+ tambahan dengan memanggil <code>PrinterInfo.Builder.setInfoIntent()</code>.
+</p>
+
+<p>
+ Anda bisa menunjukkan kemajuan dan status pekerjaan cetak di
+ pemberitahuan pekerjaan cetak dengan memanggil masing-masing
+ <code>android.printservice.PrintJob.setProgress()</code> dan
+ <code>android.printservice.PrintJob.setStatus()</code>.
+</p>
+
+<p>
+ Untuk informasi selengkapnya tentang metode ini,lihat dalam <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi API</a> yang bisa diunduh.
+</p>
+
+<h2 id="framemetrics_api">FrameMetricsListener API</h2>
+
+<p>
+FrameMetricsListener API memungkinkan aplikasi untuk memantau
+kinerja rendering UI. API tersebut menyediakan kemampuan ini dengan mengekspos Pub/Sub API streaming
+untuk mentransfer info frame-timing untuk jendela aplikasi saat ini. Data yang dikembalikan
+setara dengan yang ditampilkan <code><a href="{@docRoot}tools/help/shell.html#shellcommands">adb shell</a>
+dumpsys gfxinfo framestats</code>, namun tidak dibatasi pada 120 bingkai.
+</p>
+
+<p>
+Anda bisa menggunakan FrameMetricsListener untuk mengukur kinerja UI
+level interaksi di produksi, tanpa koneksi USB. API
+ini memungkinkan pengumpulan data dengan granularitas lebih tinggi daripada
+{@code adb shell dumpsys gfxinfo}. Granularitas lebih tinggi ini dimungkinkan karena
+sistem bisa mengumpulkan data untuk interaksi tertentu di aplikasi; sistem
+tidak perlu merekam ringkasan global untuk keseluruhan kinerja
+aplikasi, atau mengosongkan status global yang ada. Anda bisa menggunakan kemampuan ini
+untuk mengumpulkan data kinerja dan menangkap regresi di kinerja UI
+untuk kasus penggunaan sungguhan di dalam aplikasi.
+</p>
+
+<p>
+Untuk memantau sebuah jendela, implementasikan metode callback <code>FrameMetricsListener.onMetricsAvailable()</code>
+dan daftarkan di jendela itu. Untuk informasi selengkapnya, lihat
+dokumentasi kelas {@code FrameMetricsListener} di
+<a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi API</a> yang bisa diunduh.
+</p>
+
+<p>
+API menyediakan objek {@code FrameMetrics}, yang berisi data timing yang
+dilaporkan subsistem rendering untuk berbagai tahap pencapaian dalam daur hidup bingkai.
+Metrik yang didukung adalah: {@code UNKNOWN_DELAY_DURATION},
+{@code INPUT_HANDLING_DURATION}, {@code ANIMATION_DURATION},
+{@code LAYOUT_MEASURE_DURATION}, {@code DRAW_DURATION}, {@code SYNC_DURATION},
+{@code COMMAND_ISSUE_DURATION}, {@code SWAP_BUFFERS_DURATION},
+{@code TOTAL_DURATION}, dan {@code FIRST_DRAW_FRAME}.
+</p>
+
+
+<h2 id="virtual_files">File Maya</h2>
+
+<p>
+ Di versi Android sebelumnya, aplikasi Anda bisa menggunakan Storage Access
+ Framework untuk memungkinkan pengguna memilih file dari akun penyimpanan awan mereka,
+ seperti Google Drive. Akan tetapi, tidak ada cara untuk merepresentasikan file yang
+ tidak memiliki representasi bytecode langsung; setiap file diharuskan menyediakan
+ aliran masukan.
+</p>
+
+<p>
+ Android N menambahkan konsep <em>file maya</em> pada Storage Access
+ Framework. Fitur file maya memungkinkan
+ {@link android.provider.DocumentsProvider} Anda mengembalikan URI dokumen yang bisa
+ digunakan bersama intent {@link android.content.Intent#ACTION_VIEW} sekalipun
+ tidak memiliki representasi bytecode langsung. Android N juga memungkinkan Anda untuk
+ menyediakan format alternatif untuk file pengguna, maya atau dengan cara lain.
+</p>
+
+<p>
+ Untuk mendapatkan URI sebuah dokumen maya di aplikasi Anda, terlebih dahulu Anda membuat
+ {@link android.content.Intent} untuk membuka UI pemilih file. Karena aplikasi
+ tidak bisa membuka file maya secara langsung dengan menggunakan metode
+ {@link android.content.ContentResolver#openInputStream(Uri) openInputStream()},
+ aplikasi Anda tidak akan menerima file maya jika Anda memasukkan kategori
+ {@link android.content.Intent#CATEGORY_OPENABLE}.
+</p>
+
+<p>
+ Setelah pengguna menentukan pilihan, sistem akan memanggil metode
+ {@link android.app.Activity#onActivityResult onActivityResult()}.
+ Aplikasi Anda bisa mengambil URI file maya dan mendapatkan aliran masukan, seperti yang
+ diperagakan dalam cuplikan kode di bawah.
+</p>
+
+<pre>
+ // Other Activity code ...
+
+ final static private int REQUEST_CODE = 64;
+
+ // We listen to the OnActivityResult event to respond to the user's selection.
+ @Override
+ public void onActivityResult(int requestCode, int resultCode,
+ Intent resultData) {
+ try {
+ if (requestCode == REQUEST_CODE &&
+ resultCode == Activity.RESULT_OK) {
+
+ Uri uri = null;
+
+ if (resultData != null) {
+ uri = resultData.getData();
+
+ ContentResolver resolver = getContentResolver();
+
+ // Before attempting to coerce a file into a MIME type,
+ // check to see what alternative MIME types are available to
+ // coerce this file into.
+ String[] streamTypes =
+ resolver.getStreamTypes(uri, "*/*");
+
+ AssetFileDescriptor descriptor =
+ resolver.openTypedAssetFileDescriptor(
+ uri,
+ streamTypes[0],
+ null);
+
+ // Retrieve a stream to the virtual file.
+ InputStream inputStream = descriptor.createInputStream();
+ }
+ }
+ } catch (Exception ex) {
+ Log.e("EXCEPTION", "ERROR: ", ex);
+ }
+ }
+</pre>
+
+<p>
+ Untuk informasi selengkapnya tentang mengakses file pengguna, lihat
+ <a href="{@docRoot}guide/topics/providers/document-provider.html">Panduan Storage
+ Access Frameworks</a>.
+</p>
diff --git a/docs/html-intl/intl/id/about/versions/nougat/index.jd b/docs/html-intl/intl/id/about/versions/nougat/index.jd
new file mode 100644
index 0000000..212870a
--- /dev/null
+++ b/docs/html-intl/intl/id/about/versions/nougat/index.jd
@@ -0,0 +1,110 @@
+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
+
+<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-8of16" style="padding-left:2em">
+ <h1 class="dac-hero-title">Android 7.0 Nougat</h1>
+ <p class="dac-hero-description">
+ 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}about/versions/nougat/android-7.0.html">
+ <span class="dac-sprite dac-auto-chevron"></span>
+ Mulai
+ </a>
+ </div>
+ <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></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>
+</section>
+
+
+<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://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/dev-community">
+ <i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
+ Bergabunglah dengan komunitas pengembang
+ </a>
+ </li>
+ </ul>
+ </div><!-- end .wrap -->
+</div><!-- end .dac-actions -->
+
+<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"
+ data-query="type:blog+tag:androidn+tag:featured, type:youtube+tag:androidn+tag:featured"
+ data-sortOrder="-timestamp"
+ data-cardSizes="6x6"
+ data-items-per-page="6"
+ data-maxResults="15"
+ data-initial-results="3"></div>
+</div></section>
+
+<section class="dac-section dac-gray" id="videos"><div class="wrap">
+ <h1 class="dac-section-title">Videos</h1>
+ <div class="dac-section-subtitle">
+ 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: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>
\ No newline at end of file
diff --git a/docs/html-intl/intl/id/design/get-started/principles.jd b/docs/html-intl/intl/id/design/get-started/principles.jd
new file mode 100644
index 0000000..2a1d194
--- /dev/null
+++ b/docs/html-intl/intl/id/design/get-started/principles.jd
@@ -0,0 +1,307 @@
+page.title=Prinsip Desain Android
+@jd:body
+
+<p>Prinsip desain ini dikembangkan oleh dan untuk Tim Pengalaman Pengguna
+ Android agar selalu mempertimbangkan kepentingan pengguna.
+Untuk pengembang dan desainer Android, mereka terus
+meletakkan dasar pedoman desain yang lebih detail untuk beragam tipe
+perangkat.</p>
+
+<p>
+Perhatikan prinsip-prinsip ini saat Anda menerapkan
+kreativitas dan pemikiran desain sendiri. Menyimpang dengan sengaja.
+</p>
+
+<h2 id="enchant-me">Pikat Saya</h2>
+
+<div class="cols">
+ <div class="col-7">
+
+<h4 id="delight-me">Senangkan saya dengan cara yang mengejutkan</h4>
+<p>Permukaan yang cantik, animasi yang ditempatkan dengan hati-hati, atau efek suara di saat yang tepat sungguh menyenangkan untuk
+dinikmati. Efek yang lembut menimbulkan perasaan serba mudah dan kesadaran bahwa kekuatan yang
+bisa diandalkan ada dalam genggaman.</p>
+
+ </div>
+ <div class="col-6">
+
+ <img src="{@docRoot}design/media/principles_delight.png">
+
+ </div>
+</div>
+
+<div class="vspace size-2"> </div>
+
+<div class="cols">
+ <div class="col-7">
+
+<h4 id="real-objects-more-fun">Objek sungguhan lebih menyenangkan daripada tombol dan menu</h4>
+<p>Biarkan orang langsung menyentuh dan memanipulasi objek dalam aplikasi Anda. Ini mengurangi upaya kognitif
+yang diperlukan untuk menjalankan tugas sekaligus membuatnya lebih memuaskan secara emosional.</p>
+
+ </div>
+ <div class="col-6">
+
+ <img src="{@docRoot}design/media/principles_real_objects.png">
+
+ </div>
+</div>
+
+<div class="vspace size-2"> </div>
+
+<div class="cols">
+ <div class="col-7">
+
+<h4 id="make-it-mine">Biarkan saya memilikinya</h4>
+<p>Orang suka menambahkan sentuhan pribadi karena membantu mereka merasa betah dan memegang kendali. Memberikan
+default yang pantas dan indah, tetapi juga mempertimbangkan penyesuaian opsional yang menyenangkan, yang tidak mengganggu
+tugas utama.</p>
+
+ </div>
+ <div class="col-6">
+
+ <img src="{@docRoot}design/media/principles_make_it_mine.png">
+
+ </div>
+</div>
+
+<div class="vspace size-2"> </div>
+
+<div class="cols">
+ <div class="col-7">
+
+<h4 id="get-to-know-me">Kenali saya</h4>
+<p>Pelajari preferensi orang dari waktu ke waktu. Daripada meminta mereka untuk membuat pilihan yang sama
+berulang-ulang, tempatkan pilihan sebelumnya agar mudah dijangkau.</p>
+
+ </div>
+ <div class="col-6">
+
+ <img src="{@docRoot}design/media/principles_get_to_know_me.png">
+
+ </div>
+</div>
+
+<h2 id="simplify-my-life">Sederhanakan Hidup Saya</h2>
+
+<div class="cols">
+ <div class="col-7">
+
+<h4 id="keep-it-brief">Persingkat</h4>
+<p>Gunakan frasa pendek dengan kata-kata sederhana. Orang cenderung melewatkan kalimat-kalimat panjang.</p>
+
+ </div>
+ <div class="col-6">
+
+ <img src="{@docRoot}design/media/principles_keep_it_brief.png">
+
+ </div>
+</div>
+
+<div class="vspace size-2"> </div>
+
+<div class="cols">
+ <div class="col-7">
+
+<h4 id="pictures-faster-than-words">Gambar lebih cepat dibanding kata-kata</h4>
+<p>Pertimbangkan menggunakan gambar untuk menjelaskan gagasan. Gambar menarik perhatian orang dan bisa jauh lebih efisien
+dibanding kata-kata.</p>
+
+ </div>
+ <div class="col-6">
+
+ <img src="{@docRoot}design/media/principles_pictures.png">
+
+ </div>
+</div>
+
+<div class="vspace size-2"> </div>
+
+<div class="cols">
+ <div class="col-7">
+
+<h4 id="decide-for-me">Putuskan untuk saya tetapi biarkan saya yang menentukan</h4>
+<p>Gunakan tebakan terbaik Anda dan bertindaklah daripada meminta terlebih dahulu. Terlalu banyak pilihan dan keputusan membuat orang
+tidak suka. Untuk berjaga-jaga jika Anda salah, izinkan 'pembatalan'.</p>
+
+ </div>
+ <div class="col-6">
+
+ <img src="{@docRoot}design/media/principles_decide_for_me.png">
+
+ </div>
+</div>
+
+<div class="vspace size-2"> </div>
+
+<div class="cols">
+ <div class="col-7">
+
+<h4 id="only-show-when-i-need-it">Cukup tunjukkan yang saya perlukan ketika saya memerlukannya</h4>
+<p>Orang merasa kewalahan ketika melihat terlalu banyak hal sekaligus. Uraikan tugas dan informasi menjadi potongan-potongan
+kecil yang mudah dicerna. Sembunyikan opsi yang tidak perlu pada saat ini, dan ajari orang sambil jalan.</p>
+
+ </div>
+ <div class="col-6">
+
+ <img src="{@docRoot}design/media/principles_information_when_need_it.png">
+
+ </div>
+</div>
+
+<div class="vspace size-2"> </div>
+
+<div class="cols">
+ <div class="col-7">
+
+<h4 id="always-know-where-i-am">Saya harus selalu tahu di mana saya berada</h4>
+<p>Beri orang kepercayaan diri bahwa mereka tahu di mana berada. Buat agar tempat-tempat dalam aplikasi Anda terlihat berbeda dan
+gunakan transisi untuk menunjukkan hubungan antar layar. Berikan umpan balik tentang tugas yang sedang berlangsung.</p>
+
+ </div>
+ <div class="col-6">
+
+ <img src="{@docRoot}design/media/principles_navigation.png">
+
+ </div>
+</div>
+
+<div class="vspace size-2"> </div>
+
+<div class="cols">
+ <div class="col-7">
+
+<h4 id="never-lose-my-stuff">Jangan sekali-kali menghilangkan milik saya</h4>
+<p>Simpan apa yang telah susah-payah dibuat orang dan biarkan mereka mengaksesnya dari mana saja. Ingat pengaturan,
+sentuhan pribadi, dan kreasi lintas ponsel, tablet, dan komputer. Itu membuat pemutakhiran menjadi
+hal termudah di dunia.</p>
+
+ </div>
+ <div class="col-6">
+
+ <img src="{@docRoot}design/media/principles_never_lose_stuff.png">
+
+ </div>
+</div>
+
+<div class="vspace size-2"> </div>
+
+<div class="cols">
+ <div class="col-7">
+
+<h4 id="looks-same-should-act-same">Jika terlihat sama, seharusnya fungsinya sama</h4>
+<p>Bantu orang merasakan perbedaan fungsional dengan membuat mereka terlihat berbeda daripada mirip.
+Hindari mode, yaitu tempat yang terlihat mirip tetapi berbeda fungsinya pada input yang sama.</p>
+
+ </div>
+ <div class="col-6">
+
+ <img src="{@docRoot}design/media/principles_looks_same.png">
+
+ </div>
+</div>
+
+<div class="vspace size-2"> </div>
+
+<div class="cols">
+ <div class="col-7">
+
+<h4 id="interrupt-only-if-important">Sela saya jika penting saja</h4>
+<p>Layaknya asisten pribadi yang baik, lindungi orang dari detail yang tidak penting. Orang ingin tetap
+fokus, dan kecuali jika memang penting dan sensitif waktu, interupsi bisa melelahkan dan menjengkelkan.</p>
+
+ </div>
+ <div class="col-6">
+
+ <img src="{@docRoot}design/media/principles_important_interruption.png">
+
+ </div>
+</div>
+
+<h2 id="make-me-amazing">Buat Saya Terpesona</h2>
+
+<div class="cols">
+ <div class="col-7">
+
+<h4 id="give-me-tricks">Beri saya trik yang efektif di mana saja</h4>
+<p>Orang merasa senang ketika mereka memahami sendiri sesuatu. Jadikan aplikasi Anda lebih mudah dipelajari dengan
+memanfaatkan pola visual dan memori otot dari aplikasi Android lainnya. Misalnya, gerakan menggeser
+dapat menjadi pintasan navigasi yang bagus.</p>
+
+ </div>
+ <div class="col-6">
+
+ <img src="{@docRoot}design/media/principles_tricks.png">
+
+ </div>
+</div>
+
+<div class="vspace size-2"> </div>
+
+<div class="cols">
+ <div class="col-7">
+
+<h4 id="its-not-my-fault">Bukan salah saya</h4>
+<p>Bersikap ramahlah dalam meminta orang untuk melakukan koreksi. Mereka ingin merasa pintar ketika menggunakan
+aplikasi Anda. Jika terjadi kesalahan, berikan petunjuk perbaikan yang jelas tetapi lepaskan mereka dari detail teknis.
+Jika Anda dapat memperbaikinya secara diam-diam, tentu lebih baik.</p>
+
+ </div>
+ <div class="col-6">
+
+ <img src="{@docRoot}design/media/principles_error.png">
+
+ </div>
+</div>
+
+<div class="vspace size-2"> </div>
+
+<div class="cols">
+ <div class="col-7">
+
+<h4 id="sprinkle-encouragement">Berikan dorongan</h4>
+<p>Uraikan tugas-tugas rumit menjadi langkah-langkah kecil yang dapat dilakukan dengan mudah. Beri umpan balik tentang tindakan,
+meskipun hanya sesuatu yang sederhana.</p>
+
+ </div>
+ <div class="col-6">
+
+ <img src="{@docRoot}design/media/principles_sprinkle_encouragement.png">
+
+ </div>
+</div>
+
+<div class="vspace size-2"> </div>
+
+<div class="cols">
+ <div class="col-7">
+
+<h4 id="do-heavy-lifting-for-me">Lakukan pekerjaan yang sulit untuk saya</h4>
+<p>Buatlah pemula merasa seperti ahli dengan memungkinkan mereka untuk melakukan hal-hal yang mereka pikir tidak akan bisa.
+Misalnya, pintasan yang menggabungkan beberapa efek foto dapat membuat foto amatir terlihat mengagumkan hanya
+dalam beberapa langkah.</p>
+
+ </div>
+ <div class="col-6">
+
+ <img src="{@docRoot}design/media/principles_heavy_lifting.png">
+
+ </div>
+</div>
+
+<div class="vspace size-2"> </div>
+
+<div class="cols">
+ <div class="col-7">
+
+<h4 id="make-important-things-fast">Percepat hal penting</h4>
+<p>Tidak semua tindakan itu sama. Putuskan apa yang terpenting dalam aplikasi Anda dan permudah untuk menemukannya serta
+cepat untuk digunakan, seperti tombol rana pada kamera, atau tombol jeda pada pemutar musik.</p>
+
+ </div>
+ <div class="col-6">
+
+ <img src="{@docRoot}design/media/principles_make_important_fast.png">
+
+ </div>
+</div>
diff --git a/docs/html-intl/intl/id/design/material/index.jd b/docs/html-intl/intl/id/design/material/index.jd
new file mode 100644
index 0000000..0cb4dbc
--- /dev/null
+++ b/docs/html-intl/intl/id/design/material/index.jd
@@ -0,0 +1,186 @@
+page.title=Material Design for Android
+page.tags=Material,design
+page.type=design
+page.image=images/cards/design-material-for-android_2x.jpg
+
+@jd:body
+
+<!-- developer docs box -->
+<a class="notice-developers right" href="{@docRoot}training/material/index.html">
+ <div>
+ <h3>Dokumen Pengembang</h3>
+ <p>Membuat Aplikasi dengan Desain Bahan</p>
+ </div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=p4gmvHyuZzw">
+<div>
+ <h3>Video</h3>
+ <p>Pengantar Desain Bahan</p>
+</div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=YaG_ljfzeUw">
+<div>
+ <h3>Video</h3>
+ <p>Kertas dan Tinta: Bahan Penting</p>
+</div>
+</a>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=XOcCOBe8PTc">
+<div>
+ <h3>Video</h3>
+ <p>Desain Bahan di Aplikasi Google I/O</p>
+</div>
+</a>
+
+
+
+<p itemprop="description">Desain bahan adalah panduan komprehensif untuk desain visual, gerak, dan
+interaksi lintas platform dan perangkat. Android kini menyertakan dukungan untuk
+aplikasi desain bahan. Untuk menggunakan desain bahan di aplikasi Android, ikuti panduan yang didefinisikan
+dalam <a href="http://www.google.com/design/spec">spesifikasi desain bahan</a> dan gunakan
+komponen dan fungsionalitas baru yang tersedia di Android 5.0 (API level 21) ke atas.</p>
+
+<p>Android menyediakan elemen berikut untuk membangun aplikasi desain bahan:</p>
+
+<ul>
+ <li>Tema baru</li>
+ <li>Widget baru untuk tampilan yang kompleks</li>
+ <li>API baru untuk animasi dan bayangan custom</li>
+</ul>
+
+<p>Untuk informasi selengkapnya tentang mengimplementasikan desain bahan pada Android, lihat
+<a href="{@docRoot}training/material/index.html">Membuat Aplikasi dengan Desain Bahan</a>.</p>
+
+
+<h3>Tema Bahan</h3>
+
+<p>Tema bahan menyediakan gaya baru untuk aplikasi Anda, widget sistem yang memungkinkan Anda mengatur
+palet warnanya, dan animasi default untuk umpan balik sentuh dan transisi aktivitas.</p>
+
+<!-- two columns -->
+<div style="width:700px;margin-top:25px;margin-bottom:20px">
+<div style="float:left;width:250px;margin-left:40px;margin-right:60px;">
+ <img src="{@docRoot}design/material/images/MaterialDark.png" width="500" height="238" />
+ <div style="width:140px;margin:0 auto">
+ <p style="margin-top:8px">Tema bahan gelap</p>
+ </div>
+</div>
+<div style="float:left;width:250px;margin-right:0px;">
+ <img src="{@docRoot}design/material/images/MaterialLight.png" width="500" height="238" />
+ <div style="width:140px;margin:0 auto">
+ <p style="margin-top:8px">Tema bahan terang</p>
+ </div>
+</div>
+<br style="clear:left"/>
+</div>
+
+<p>Untuk informasi selengkapnya, lihat <a href="{@docRoot}training/material/theme.html">Menggunakan Tema
+Bahan</a>.</p>
+
+
+<h3>Daftar dan Kartu</h3>
+
+<p>Android menyediakan dua widget baru untuk menampilkan kartu dan daftar dengan gaya desain bahan
+dan animasi:</p>
+
+<!-- two columns -->
+<div style="width:700px;margin-top:25px;margin-bottom:20px">
+<div style="float:left;width:250px;margin-left:40px;margin-right:60px;">
+ <img src="{@docRoot}design/material/images/list_mail.png" width="500" height="426" />
+ <p>Widget <code>RecyclerView</code> baru adalah versi <code>ListView</code>
+ yang lebih mudah dimasukkan dan mendukung beragam tipe layout serta memberikan peningkatan kinerja.</p>
+</div>
+<div style="float:left;width:250px;margin-right:0px;">
+ <img src="{@docRoot}design/material/images/card_travel.png" width="500" height="426" />
+ <p>Widget <code>CardView</code> baru memungkinkan Anda menampilkan potongan informasi penting dalam
+ kartu yang memiliki tampilan dan cara kerja yang konsisten.</p>
+</div>
+<br style="clear:left"/>
+</div>
+
+<p>Untuk informasi selengkapnya, lihat <a href="{@docRoot}training/material/lists-cards.html">Membuat Daftar
+dan Kartu</a>.</p>
+
+
+<h3>Bayangan Tampilan</h3>
+
+<p>Selain properti X dan Y, tampilan di Android kini memiliki
+properti Z. Properti baru ini mewakili ketinggian tampilan, yang menentukan:</p>
+
+<ul>
+<li>Ukuran bayangan: tampilan dengan nilai Z lebih tinggi menghasilkan bayangan lebih besar.</li>
+<li>Urutan penggambaran: tampilan dengan nilai Z lebih tinggi muncul di atas tampilan lainnya.</li>
+</ul>
+
+<div style="width:290px;margin-left:35px;float:right">
+ <div class="framed-nexus5-port-span-5">
+ <video class="play-on-hover" autoplay>
+ <source src="{@docRoot}design/material/videos/ContactsAnim.mp4"/>
+ <source src="{@docRoot}design/videos/ContactsAnim.webm"/>
+ <source src="{@docRoot}design/videos/ContactsAnim.ogv"/>
+ </video>
+ </div>
+ <div style="font-size:10pt;margin-left:20px;margin-bottom:30px">
+ <em>Untuk memutar ulang film, klik layar perangkat</em>
+ </div>
+</div>
+
+<p>Untuk informasi selengkapnya, lihat <a href="{@docRoot}training/material/shadows-clipping.html">Mendefinisikan
+Bayangan dan Memangkas Tampilan</a>.</p>
+
+
+<h3>Animasi</h3>
+
+<p>API animasi baru memungkinkan Anda membuat animasi custom untuk umpan balik sentuh dalam kontrol UI,
+perubahan status tampilan, dan transisi aktivitas.</p>
+
+<p>API ini memungkinkan Anda:</p>
+
+<ul>
+<li style="margin-bottom:15px">
+Merespons kejadian sentuh dalam tampilan Anda dengan animasi <strong>umpan balik sentuh</strong>.
+</li>
+<li style="margin-bottom:15px">
+Menyembunyikan dan memperlihatkan tampilan dengan animasi <strong>membuka melingkar</strong>.
+</li>
+<li style="margin-bottom:15px">
+Peralihan antar aktivitas dengan animasi <strong>transisi aktivitas</strong> custom.
+</li>
+<li style="margin-bottom:15px">
+Membuat animasi yang lebih alami dengan <strong>gerak melengkung</strong>.
+</li>
+<li style="margin-bottom:15px">
+Menganimasikan perubahan dalam satu atau beberapa properti tampilan dengan animasi <strong>perubahan status tampilan</strong>.
+</li>
+<li style="margin-bottom:15px">
+Menampilkan animasi di <strong>drawable daftar status</strong> di antara perubahan status tampilan.
+</li>
+</ul>
+
+<p>Animasi umpan balik sentuh dimasukkan ke dalam beberapa tampilan standar, misalnya tombol. API baru
+ini memungkinkan Anda menyesuaikan animasi ini dan menambahkannya ke tampilan custom Anda.</p>
+
+<p>Untuk informasi selengkapnya, lihat <a href="{@docRoot}training/material/animations.html">Mendefinisikan Animasi
+Custom</a>.</p>
+
+
+<h3>Drawable</h3>
+
+<p>Kemampuan baru untuk drawable ini membantu Anda mengimplementasikan aplikasi desain bahan:</p>
+
+<ul>
+<li><strong>Drawable vektor</strong> bisa diubah skalanya tanpa kehilangan definisi dan cocok
+untuk ikon satu-warna dalam-aplikasi.</li>
+<li><strong>Pewarnaan drawable</strong> memungkinkan Anda mendefinisikan bitmap sebagai alpha-mask dan mewarnainya
+saat runtime.</li>
+<li><strong>Ekstraksi warna</strong> memungkinkan Anda mengekstrak warna mencolok secara otomatis dari
+gambar bitmap.</li>
+</ul>
+
+<p>Untuk informasi selengkapnya, lihat <a href="{@docRoot}training/material/drawables.html">Bekerja dengan
+Drawable</a>.</p>
diff --git a/docs/html-intl/intl/id/design/patterns/compatibility.jd b/docs/html-intl/intl/id/design/patterns/compatibility.jd
new file mode 100644
index 0000000..cafaac4
--- /dev/null
+++ b/docs/html-intl/intl/id/design/patterns/compatibility.jd
@@ -0,0 +1,70 @@
+page.title=Kompatibilitas Mundur
+page.tags="support"
+page.metaDescription=Catatan tentang bagaimana Android 4.x menyesuaikan UI yang didesain untuk perangkat keras dan versi OS yang lebih lama.
+@jd:body
+
+<a class="notice-developers" href="{@docRoot}training/basics/supporting-devices/index.html">
+ <div>
+ <h3>Dokumen Pengembang</h3>
+ <p>Mendukung Perangkat Berbeda</p>
+ </div>
+</a>
+
+<p>Perubahan signifikan dalam Android 3.0 meliputi:</p>
+<ul>
+<li>Dihilangkannya tombol perangkat keras navigasi (Back, Menu, Search, Home) untuk membantu menangani navigasi
+ melalui kontrol maya (Back, Home, Recents).</li>
+<li>Pola yang tangguh untuk penggunaan menu pada action-bar.</li>
+</ul>
+<p>Android 4.0 membawa perubahan ini untuk tablet dengan platform ponsel.</p>
+
+<h2 id="older-hardware">Menyesuaikan Android 4.0 dengan Perangkat Keras dan Aplikasi yang Lebih Lama</h2>
+
+<div class="cols">
+ <div class="col-6">
+
+<h4>Ponsel dengan kontrol navigasi virtual</h4>
+<p>Aplikasi Android yang ditulis untuk Android 3.0 dan yang lebih baru menampilkan tindakan dalam action-bar. Tindakan yang tidak
+muat dalam action-bar atau tidak cukup penting untuk ditampilkan di tingkat atas akan muncul dalam
+action-overflow.</p>
+<p>Pengguna mengakses action-overflow dengan menyentuhnya dalam action-bar.</p>
+
+ </div>
+ <div class="col-7">
+
+ <img src="{@docRoot}design/media/compatibility_virtual_nav.png">
+
+ </div>
+</div>
+
+<div class="cols">
+ <div class="col-6">
+
+<h4>Ponsel dengan tombol navigasi fisik</h4>
+<p>Ponsel Android dengan tombol perangkat keras navigasi biasa tidak menampilkan baris navigasi virtual di
+bagian bawah layar. Sebagai gantinya, action-overflow tersedia dari tombol perangkat keras menu. Popup
+tindakan yang dihasilkan memiliki gaya yang sama dengan contoh sebelumnya, tetapi ditampilkan di bagian bawah layar.</p>
+
+ </div>
+ <div class="col-7">
+
+ <img src="{@docRoot}design/media/compatibility_physical_buttons.png">
+
+ </div>
+</div>
+
+<div class="cols">
+ <div class="col-6">
+
+<h4>Aplikasi lama pada ponsel dengan kontrol navigasi virtual</h4>
+<p>Bila Anda menjalankan aplikasi yang dibuat untuk Android 2.3 atau yang lebih lama pada ponsel
+dengan kontrol navigasi virtual, sebuah kontrol action-overflow akan muncul di sebelah kanan baris navigasi virtual. Anda
+dapat menyentuh kontrol itu untuk menampilkan tindakan aplikasi dalam gaya menu Android biasa.</p>
+
+ </div>
+ <div class="col-7">
+
+ <img src="{@docRoot}design/media/compatibility_legacy_apps.png">
+
+ </div>
+</div>
diff --git a/docs/html-intl/intl/id/design/patterns/confirming-acknowledging.jd b/docs/html-intl/intl/id/design/patterns/confirming-acknowledging.jd
new file mode 100644
index 0000000..d22e924
--- /dev/null
+++ b/docs/html-intl/intl/id/design/patterns/confirming-acknowledging.jd
@@ -0,0 +1,70 @@
+page.title=Mengonfirmasi & Mengakui
+page.tags=dialog,toast,notification
+@jd:body
+
+<p>Dalam beberapa situasi, bila pengguna memanggil suatu tindakan dalam aplikasi Anda, ada baiknya <em>mengonfirmasi</em> atau <em>mengakui</em> tindakan itu melalui teks.</p>
+
+<div class="cols">
+ <div class="col-6">
+ <img src="{@docRoot}design/media/confirm_ack_confirming.png">
+ <p><strong>Mengonfirmasi</strong> adalah meminta pengguna untuk memverifikasi bahwa mereka benar-benar ingin melanjutkan tindakan yang baru saja mereka panggil. Dalam beberapa kasus, konfirmasi ditampilkan bersama-sama dengan peringatan atau informasi penting yang terkait dengan tindakan yang perlu mereka pertimbangkan.</p>
+ </div>
+ <div class="col-6">
+ <img src="{@docRoot}design/media/confirm_ack_acknowledge.png">
+ <p><strong>Mengakui</strong> adalah menampilkan teks untuk memberi tahu pengguna bahwa tindakan yang baru mereka panggil sudah dilakukan. Ini menghilangkan ketidakpastian tentang operasi implisit yang dilakukan sistem. Dalam beberapa kasus, pengakuan ditampilkan bersama dengan opsi untuk membatalkan tindakan.</p>
+ </div>
+</div>
+
+<p>Berkomunikasi pada pengguna dengan cara ini bisa membantu mengurangi ketidakpastian tentang hal-hal yang sudah atau akan terjadi. Mengonfirmasi atau mengakui juga dapat mencegah pengguna melakukan kesalahan yang akan mereka sesali.</p>
+
+<h2>Kapan Harus Mengonfirmasi atau Mengakui Tindakan Pengguna</h2>
+<p>Tidak semua tindakan memerlukan konfirmasi atau pengakuan. Gunakan bagan alur ini untuk memandu keputusan desain Anda.</p>
+<img src="{@docRoot}design/media/confirm_ack_flowchart.png">
+
+<h2>Mengonfirmasi</h2>
+<div class="cols">
+ <div class="col-6">
+ <h4>Contoh: Google Play Books</h4>
+ <img src="{@docRoot}design/media/confirm_ack_ex_books.png">
+ <p>Dalam contoh ini, pengguna telah meminta untuk menghapus sebuah buku dari perpustakaan Google Play mereka. Sebuah <a href="{@docRoot}design/building-blocks/dialogs.html#alerts">peringatan</a> muncul untuk mengonfirmasi tindakan ini karena perlu dipahami bahwa buku tersebut tidak akan tersedia lagi dari perangkat apa pun.</p>
+ <p>Saat membuat dialog konfirmasi, buat judul bermakna dengan mencerminkan tindakan yang diminta.</p>
+ </div>
+ <div class="col-7">
+ <h4>Contoh: Android Beam</h4>
+ <img src="{@docRoot}design/media/confirm_ack_ex_beam.png">
+ <p>Konfirmasi tidak harus ditampilkan dalam peringatan dengan dua tombol. Setelah menjalankan Android Beam, pengguna diminta untuk menyentuh konten yang akan dibagikan (dalam contoh ini, sebuah foto). Jika mereka memutuskan untuk tidak melanjutkan, mereka tinggal memindahkan ponsel.</p>
+ </div>
+</div>
+
+<h2>Mengakui</h2>
+<div class="cols">
+ <div class="col-6">
+ <h4>Contoh: Draf Gmail batal yang disimpan</h4>
+ <img src="{@docRoot}design/media/confirm_ack_ex_draftsave.png">
+ <p>Dalam contoh ini, jika pengguna menyusuri ke belakang atau ke atas dari layar pembuatan email di Gmail, sesuatu yang tak diharapkan bisa terjadi: draf saat itu akan disimpan secara otomatis. Pengakuan dalam bentuk pemberitahuan akan lebih jelas. Ini menghilang setelah beberapa detik.</p>
+ <p>Pembatalan tidak cocok di sini karena penyimpanan dilakukan oleh aplikasi, bukan pengguna. Cepat dan mudah untuk melanjutkan penulisan pesan dengan menyusuri daftar draf.</p>
+
+ </div>
+ <div class="col-6">
+ <h4>Contoh: Percakapan Gmail dihapus</h4>
+ <img src="{@docRoot}design/media/confirm_ack_draft_deleted.png">
+ <p>Setelah pengguna menghapus percakapan dari daftar dalam Gmail, sebuah pengakuan muncul tanpa opsi pembatalan. Pengakuan tetap ada sampai pengguna melakukan tindakan yang tidak berkaitan, seperti menggulir daftar.</p>
+ </div>
+</div>
+
+<h2>Tidak ada Konfirmasi atau Pengakuan</h2>
+<div class="cols">
+ <div class="col-6">
+ <h4>Contoh: memberikan +1</h4>
+ <img style="padding: 33px 0 30px;" src="{@docRoot}design/media/confirm_ack_ex_plus1.png">
+ <p><strong>Konfirmasi tidak diperlukan</strong>. Jika pengguna telah memberikan +1 secara tidak sengaja, tidak masalah. Mereka cukup menyentuh kembali tombol itu untuk membatalkan tindakan.</p>
+ <p><strong>Pengakuan tidak diperlukan</strong>. Pengguna akan melihat tombol +1 memantul dan berubah merah. Itu tanda yang sangat jelas.</p>
+ </div>
+ <div class="col-7">
+ <h4>Contoh: Menghapus aplikasi dari Layar Beranda</h4>
+ <img src="{@docRoot}design/media/confirm_ack_ex_removeapp.png">
+ <p><strong>Konfirmasi tidak diperlukan</strong>. Ini adalah tindakan yang disengaja: pengguna harus menyeret dan meletakkan sebuah item di atas target yang relatif besar dan terpisah. Karena itu, kecil kemungkinan terjadi ketidaksengajaan. Tetapi jika pengguna menyesali keputusan itu, maka hanya perlu beberapa detik untuk mengembalikannya lagi.</p>
+ <p><strong>Pengakuan tidak diperlukan</strong>. Pengguna akan mengetahui bahwa aplikasi itu tidak ada di Layar Beranda karena mereka menghilangkannya dengan cara menyeretnya.</p>
+
+ </div>
+</div>
diff --git a/docs/html-intl/intl/id/design/patterns/navigation.jd b/docs/html-intl/intl/id/design/patterns/navigation.jd
new file mode 100644
index 0000000..4915700
--- /dev/null
+++ b/docs/html-intl/intl/id/design/patterns/navigation.jd
@@ -0,0 +1,213 @@
+page.title=Navigasi dengan Back dan Up
+page.tags="navigation","activity","task","up navigation","back navigation"
+page.image=/design/media/navigation_between_siblings_gmail.png
+@jd:body
+
+<a class="notice-developers" href="{@docRoot}training/implementing-navigation/index.html">
+ <div>
+ <h3>Dokumen Pengembang</h3>
+ <p>Mengimplementasikan Navigasi yang Efektif</p>
+ </div>
+</a>
+
+<p itemprop="description">Navigasi yang konsisten merupakan komponen penting dari keseluruhan pengalaman pengguna. Hampir tidak ada yang lebih membingungkan
+pengguna selain navigasi dasar yang perilakunya tidak konsisten dan tidak sesuai harapan. Android 3.0
+memperkenalkan perubahan besar dalam perilaku navigasi global. Mengikuti dengan saksama
+panduan untuk Back dan Up akan membuat navigasi aplikasi Anda dapat diprediksi dan dapat diandalkan pengguna.</p>
+<p>Android 2.3 dan versi sebelumnya mengandalkan tombol <em>Back</em> sistem untuk mendukung navigasi dalam
+aplikasi. Dengan diperkenalkannya action-bar dalam Android 3.0, mekanisme navigasi kedua muncul:
+tombol <em>Up</em>, yang terdiri dari ikon aplikasi dan tanda panah yang menunjuk ke kiri.</p>
+
+<img src="{@docRoot}design/media/navigation_with_back_and_up.png">
+
+<h2 id="up-vs-back">Up vs. Back</h2>
+
+<p>Tombol Up digunakan untuk berpindah dalam aplikasi berdasarkan hubungan hierarki
+antar layar. Misalnya, jika layar A menampilkan daftar item, dan memilih sebuah item akan membuka
+layar B (yang menampilkan item tersebut secara lebih detail), maka layar B akan menawarkan tombol Up untuk
+kembali ke layar A.</p>
+<p>Jika suatu layar merupakan yang teratas dalam aplikasi (yaitu layar Home aplikasi), maka tidak perlu menampilkan tombol
+Up.</p>
+
+<p>Tombol Back sistem digunakan untuk berpindah, dalam urutan kronologis terbalik, melalui riwayat
+layar yang baru dibuka oleh pengguna. Biasanya ini berdasarkan hubungan sementara
+antar layar, dan bukan hierarki aplikasi.</p>
+
+<p>Bila layar yang dilihat sebelumnya juga merupakan induk hierarki dari layar yang sekarang, menekan tombol
+Back akan sama hasilnya dengan menekan tombol Up—ini adalah kejadian
+biasa. Akan tetapi, berbeda dengan tombol Up, yang memastikan pengguna tetap berada dalam aplikasi Anda, tombol Back
+dapat mengembalikan pengguna ke layar Home, atau bahkan ke aplikasi lain.</p>
+
+<img src="{@docRoot}design/media/navigation_up_vs_back_gmail.png">
+
+<p>Tombol Back juga mendukung beberapa perilaku yang tidak terkait langsung dengan navigasi antar layar:
+</p>
+<ul>
+<li>Menghilangkan jendela mengambang (dialog, popup)</li>
+<li>Menghilangkan action-bar kontekstual, dan menghapus sorotan dari item yang dipilih</li>
+<li>Menyembunyikan keyboard di layar (IME)</li>
+</ul>
+<h2 id="within-app">Navigasi Dalam Aplikasi Anda</h2>
+
+<h4>Berpindah ke layar yang memiliki beberapa titik masuk</h4>
+<p>Kadang-kadang layar tidak memiliki posisi pasti dalam hierarki aplikasi, dan bisa dimasuki
+dari berbagai titik masuk—seperti layar pengaturan yang dapat dibuka dari layar lain
+dalam aplikasi Anda. Dalam hal ini, tombol Up akan memilih untuk kembali ke layar pengarah, yang cara kerjanya
+sama dengan tombol Back.</p>
+<h4>Mengubah tampilan dalam layar</h4>
+<p>Mengubah opsi tampilan untuk layar tidak mengubah perilaku Up atau Back: layar tetap
+berada di tempat yang sama dalam hierarki aplikasi, dan tidak dibuat riwayat navigasi yang baru.</p>
+<p>Contoh perubahan tampilan tersebut adalah:</p>
+<ul>
+<li>Mengganti tampilan menggunakan tab dan/atau geser kiri dan kanan</li>
+<li>Mengubah tampilan menggunakan tarik-turun (alias tab turun)</li>
+<li>Memfilter daftar</li>
+<li>Menyortir daftar</li>
+<li>Mengubah karakteristik tampilan (seperti zoom)</li>
+</ul>
+<h4>Berpindah antar layar yang seinduk</h4>
+<p>Bila aplikasi Anda mendukung navigasi dari daftar item ke tampilan detail salah satu item tersebut, aplikasi
+juga sering diharapkan mendukung navigasi langsung dari item itu ke item sebelumnya atau
+sesudahnya dalam daftar. Misalnya, dalam Gmail, begitu mudah untuk bergeser ke kiri atau kanan dari sebuah percakapan
+untuk melihat percakapan yang lebih baru atau lebih lama dalam Inbox yang sama. Sama seperti saat mengubah tampilan dalam layar, navigasi
+ini tidak mengubah perilaku Up atau Back.</p>
+
+<img src="{@docRoot}design/media/navigation_between_siblings_gmail.png">
+
+<p>Akan tetapi, pengecualian khusus terhadap hal ini terjadi saat menjelajah di antara tampilan detail terkait yang tidak disatukan
+oleh daftar yang merujuknya—misalnya, saat menjelajahi Play Store di antara aplikasi dari
+pengembang yang sama, atau album dari artis yang sama. Dalam hal ini, mengikuti setiap tautan akan membuat
+riwayat, sehingga tombol Back akan menyusuri setiap layar yang dilihat sebelumnya. Tombol Up akan terus
+melewatkan semua layar terkait ini dan berpindah ke layar kontainer yang terakhir dilihat.</p>
+
+<img src="{@docRoot}design/media/navigation_between_siblings_market1.png">
+
+<p>Anda dapat menjadikan perilaku tombol Up lebih cerdas lagi berdasarkan pengetahuan Anda tentang tampilan
+detail. Dengan memperluas contoh Play Store dari atas, bayangkan pengguna yang telah berpindah dari Buku
+terakhir yang dilihat ke detail untuk adaptasi Film. Dalam hal itu, tombol Up dapat kembali ke kontainer
+(Movies) yang sebelumnya belum dilalui pengguna.</p>
+
+<img src="{@docRoot}design/media/navigation_between_siblings_market2.png">
+
+<h2 id="into-your-app">Navigasi ke Aplikasi Anda melalui Widget dan Pemberitahuan Layar Home</h2>
+
+<p>Anda bisa menggunakan widget atau pemberitahuan layar Home untuk membantu pengguna berpindah langsung ke layar
+jauh dalam hierarki aplikasi Anda. Misalnya, widget Inbox dan pemberitahuan pesan baru di Gmail dapat
+melewatkan layar Inbox, dan membawa pengguna langsung ke tampilan percakapan.</p>
+
+<p>Untuk kedua kasus ini, tangani tombol Up sebagai berikut:</p>
+
+<ul>
+<li><em>Jika layar tujuan biasanya dicapai dari satu layar tertentu dalam aplikasi
+Anda</em>, tombol Up akan mengarahkannya ke layar itu.</li>
+<li><em>Jika tidak</em>, tombol Up akan mengarahkan ke layar teratas ("Home") dari aplikasi Anda.</li>
+</ul>
+
+<p>Dalam hal tombol Back, Anda harus membuat navigasi lebih bisa diprediksi dengan menyisipkan ke dalam
+back-stack tugas path navigasi naik lengkap menuju layar teratas aplikasi. Ini memungkinkan pengguna
+yang lupa cara masuk ke aplikasi Anda untuk berpindah ke layar teratas aplikasi sebelum
+keluar.</p>
+
+<p>Sebagai contoh, widget layar Home di Gmail memiliki tombol untuk menuju langsung ke layar
+Compose. Tombol Up atau Back dari layar Compose akan membawa pengguna ke Inbox, dan dari sana tombol
+Back berlanjut ke Home.</p>
+
+<img src="{@docRoot}design/media/navigation_from_outside_back.png">
+
+<h4>Pemberitahuan tidak langsung</h4>
+
+<p>Jika aplikasi Anda perlu menampilkan informasi tentang beberapa kejadian sekaligus, aplikasi dapat menggunakan
+pemberitahuan tunggal yang mengarahkan pengguna ke layar antara. Layar ini merangkum semua
+kejadian tersebut, dan menyediakan path bagi pengguna untuk menjelajah ke dalam aplikasi. Pemberitahuan dengan gaya seperti ini
+disebut <em>pemberitahuan tidak langsung</em>.</p>
+
+<p>Berbeda dengan pemberitahuan standar (langsung), menekan tombol Back dari
+layar antara pada pemberitahuan tidak langsung akan mengembalikan pengguna ke titik pemicu pemberitahuan tersebut—tidak ada
+layar tambahan yang disisipkan ke dalam back-stack. Setelah pengguna melanjutkan ke dalam aplikasi dari
+layar antara, tombol Up dan Back akan berperilaku seperti pada pemberitahuan standar, sebagaimana dijelaskan di atas:
+menyusuri ke dalam aplikasi dan bukan kembali ke layar antara.</p>
+
+<p>Misalnya, anggaplah seorang pengguna di Gmail menerima pemberitahuan tidak langsung dari Kalender. Menyentuh
+pemberitahuan ini akan membuka layar antara, yang menampilkan pengingat beberapa macam
+kejadian. Menyentuh Back dari layar antara akan mengembalikan pengguna ke Gmail. Menyentuh kejadian
+tertentu akan membawa pengguna dari layar antara ke aplikasi Kalender lengkap untuk menampilkan detail
+kejadian. Dari detail kejadian, tombol Up dan Back akan mengarahkan ke tampilan Kalender tingkat atas.</p>
+
+<img src="{@docRoot}design/media/navigation_indirect_notification.png">
+
+<h4>Pemberitahuan pop-up</h4>
+
+<p><em>Pemberitahuan pop-up</em> akan melewatkan laci pemberitahuan, bukan muncul secara langsung di
+hadapan pengguna. Ini jarang digunakan, dan <strong>harus dicadangkan untuk peristiwa yang memerlukan respons tepat waktu
+dan diperlukan interupsi dari konteks pengguna</strong>. Misalnya,
+Talk menggunakan gaya ini untuk memberi tahu pengguna tentang ajakan dari teman untuk bergabung dalam chatting video, karena
+ajakan ini akan kedaluwarsa secara otomatis setelah beberapa detik.</p>
+
+<p>Dalam hal perilaku navigasi, pemberitahuan pop-up sangat mirip perilaku pemberitahuan
+tidak langsung pada layar antara. Tombol Back akan menghilangkan pemberitahuan pop-up. Jika pengguna berpindah
+dari pop-up ke aplikasi yang memberi tahu, tombol Up dan Back akan mengikuti aturan pemberitahuan standar,
+berpindah dalam aplikasi.</p>
+
+<img src="{@docRoot}design/media/navigation_popup_notification.png">
+
+<h2 id="between-apps">Navigasi Antar Aplikasi</h2>
+
+<p>Salah satu kekuatan dasar sistem Android adalah kemampuan aplikasi untuk saling
+mengaktifkan, sehingga pengguna dapat berpindah langsung dari satu aplikasi ke aplikasi lainnya. Misalnya, sebuah
+aplikasi yang perlu mengambil foto dapat mengaktifkan aplikasi Kamera, yang akan mengembalikan foto
+ke aplikasi perujuk. Ini sangat menguntungkan pengembang, yang bisa dengan mudah memanfaatkan
+kode dari aplikasi lain, maupun pengguna, yang menikmati pengalaman konsisten untuk tindakan yang biasa
+dilakukan.</p>
+
+<p>Untuk memahami navigasi antar aplikasi, maka perlu memahami perilaku kerangka kerja Android
+yang akan dibahas di bawah ini.</p>
+
+<h4>Aktivitas, tugas, dan intent</h4>
+
+<p>Dalam Android, <strong>aktivitas</strong> adalah komponen aplikasi yang mendefinisikan layar
+informasi dan semua tindakan terkait yang dapat dilakukan pengguna. Aplikasi Anda adalah kumpulan
+aktivitas, yang terdiri dari aktivitas yang Anda buat dan aktivitas yang Anda gunakan ulang dari aplikasi lain.</p>
+
+<p><strong>Tugas</strong> adalah urutan aktivitas yang diikuti pengguna untuk mencapai tujuan.
+Tugas tunggal dapat memanfaatkan aktivitas dari satu aplikasi saja, atau dapat memanfaatkan aktivitas dari sejumlah
+aplikasi berbeda.</p>
+
+<p><strong>Intent</strong> adalah mekanisme bagi satu aplikasi untuk memberi isyarat minta bantuan
+aplikasi lain dalam menjalankan suatu tindakan. Aktivitas aplikasi dapat menunjukkan intent
+ apa saja yang dapat diresponsnya. Untuk intent umum seperti "Share", pengguna mungkin telah menginstal beberapa aplikasi
+yang dapat memenuhi permintaan itu.</p>
+
+<h4>Contoh: berpindah antar aplikasi untuk mendukung berbagi</h4>
+
+<p>Untuk memahami cara kerja sama aktivitas, tugas, dan intent, perhatikan bagaimana sebuah aplikasi memungkinkan pengguna
+untuk berbagi konten dengan menggunakan aplikasi lain. Misalnya, membuka aplikasi Play Store dari Home akan memulai
+Task A baru (lihat gambar di bawah). Setelah menyusuri Play Store dan menyentuh buku yang dipromosikan
+untuk melihat detailnya, pengguna tetap berada dalam tugas yang sama, memperluasnya dengan menambahkan aktivitas. Memicu
+tindakan Share akan memberi tahu pengguna dengan dialog berisi daftar aktivitas (dari aplikasi berbeda)
+yang telah terdaftar untuk menangani intent Share.</p>
+
+<img src="{@docRoot}design/media/navigation_between_apps_inward.png">
+
+<p>Bila pengguna memilih untuk berbagi melalui Gmail, aktivitas penulisan di Gmail akan ditambahkan sebagai kelanjutan dari
+Task A—tidak ada tugas baru yang dibuat. Jika Gmail sedang menjalankan tugasnya di latar belakang, maka
+tidak akan terpengaruh.</p>
+
+<p>Dari aktivitas penulisan, mengirim pesan atau menyentuh tombol Back akan mengembalikan pengguna ke
+aktivitas detail buku tersebut. Penyentuhan tombol Back berikutnya akan terus mengarahkan kembali melalui Play
+Store, sampai akhirnya tiba di Home.</p>
+
+<img src="{@docRoot}design/media/navigation_between_apps_back.png">
+
+<p>Akan tetapi, dengan menyentuh tombol Up dari aktivitas penulisan, pengguna menunjukkan keinginan untuk tetap berada di
+Gmail. Aktivitas daftar percakapan Gmail muncul, Task B yang baru akan dibuat untuk itu. Tugas baru
+selalu terkait ke Home, maka menyentuh tombol Back dari daftar percakapan akan mengembalikan ke sana.</p>
+
+<img src="{@docRoot}design/media/navigation_between_apps_up.png">
+
+<p>Task A tetap berjalan di latar belakang, dan pengguna nanti dapat kembali ke sana (misalnya, melalui layar
+Recents). Jika Gmail sedang menjalankan tugasnya di latar belakang, maka itu akan digantikan
+dengan Task B—konteks sebelumnya akan diabaikan demi tujuan baru pengguna.</p>
+
+<p>Jika register aplikasi Anda menangani intent dengan aktivitas yang jauh di dalam hierarki aplikasi,
+lihat <a href="#into-your-app">Navigasi Aplikasi Anda melalui Widget Layar Home dan
+Pemberitahuan</a> untuk panduan mengenai cara menetapkan navigasi Up.</p>
diff --git a/docs/html-intl/intl/id/guide/components/activities.jd b/docs/html-intl/intl/id/guide/components/activities.jd
new file mode 100644
index 0000000..bbc061c
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/components/activities.jd
@@ -0,0 +1,756 @@
+page.title=Aktivitas
+page.tags=aktivitas,intent
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+<h2>Dalam dokumen ini</h2>
+<ol>
+ <li><a href="#Creating">Membuat Aktivitas</a>
+ <ol>
+ <li><a href="#UI">Mengimplementasikan antarmuka pengguna</a></li>
+ <li><a href="#Declaring">Mendeklarasikan aktivitas dalam manifes</a></li>
+ </ol>
+ </li>
+ <li><a href="#StartingAnActivity">Memulai Aktivitas</a>
+ <ol>
+ <li><a href="#StartingAnActivityForResult">Memulai aktivitas agar berhasil</a></li>
+ </ol>
+ </li>
+ <li><a href="#ShuttingDown">Mematikan Aktivitas</a></li>
+ <li><a href="#Lifecycle">Mengelola Daur Hidup Aktivitas</a>
+ <ol>
+ <li><a href="#ImplementingLifecycleCallbacks">Mengimplementasikan callback daur hidup</a></li>
+ <li><a href="#SavingActivityState">Menyimpan status aktivitas</a></li>
+ <li><a href="#ConfigurationChanges">Menangani perubahan konfigurasi</a></li>
+ <li><a href="#CoordinatingActivities">Mengoordinasikan aktivitas</a></li>
+ </ol>
+ </li>
+</ol>
+
+<h2>Kelas-kelas utama</h2>
+<ol>
+ <li>{@link android.app.Activity}</li>
+</ol>
+
+<h2>Lihat juga</h2>
+<ol>
+ <li><a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tugas dan
+Back-Stack</a></li>
+</ol>
+
+</div>
+</div>
+
+
+
+<p>{@link android.app.Activity} adalah sebuah komponen aplikasi yang menyediakan layar yang digunakan
+pengguna untuk berinteraksi guna melakukan sesuatu, misalnya memilih nomor telepon, mengambil foto, mengirim email, atau
+menampilkan peta. Tiap aktivitas diberi sebuah jendela untuk menggambar antarmuka penggunanya. Jendela ini
+biasanya mengisi layar, namun mungkin lebih kecil daripada layar dan mengambang di atas
+jendela lain.</p>
+
+<p> Sebuah aplikasi biasanya terdiri atas beberapa aktivitas yang terikat secara longgar
+satu sama lain. Biasanya, satu aktivitas dalam aplikasi ditetapkan sebagai aktivitas "utama", yang
+ditampilkan kepada pengguna saat membuka aplikasi untuk pertama kali. Tiap
+aktivitas kemudian bisa memulai aktivitas lain untuk melakukan berbagai tindakan. Tiap kali
+aktivitas baru dimulai, aktivitas sebelumnya akan dihentikan, namun sistem mempertahankan aktivitas
+dalam sebuah tumpukan ("back-stack"). Bila sebuah aktivitas baru dimulai, aktivitas itu akan didorong ke atas back-stack dan
+mengambil fokus pengguna. Back-stack mematuhi mekanisme dasar tumpukan "masuk terakhir, keluar pertama",
+jadi, bila pengguna selesai dengan aktivitas saat ini dan menekan tombol <em>Back</em>, aktivitas
+akan dikeluarkan dari tumpukan (dan dimusnahkan) dan aktivitas sebelumnya akan dilanjutkan. (Back-stack
+dibahas selengkapnya dalam dokumen <a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tugas
+dan Back-Stack</a>.)</p>
+
+<p>Bila aktivitas dihentikan karena ada aktivitas baru yang dimulai, aktivitas lama akan diberi tahu tentang perubahan status ini
+melalui metode callback daur hidupnya.
+Ada beberapa metode callback yang mungkin diterima aktivitas, karena sebuah perubahan dalam
+statusnya—apakah sistem sedang membuatnya, menghentikannya, melanjutkannya, atau menghapuskannya—dan
+masing-masing callback memberi Anda kesempatan melakukan pekerjaan tertentu yang
+sesuai untuk perubahan status itu. Misalnya, bila dihentikan, aktivitas Anda harus melepas
+objek besar, seperti koneksi jaringan atau database. Bila aktivitas dilanjutkan, Anda bisa
+memperoleh kembali sumber daya yang diperlukan dan melanjutkan tindakan yang terputus. Transisi status ini
+semuanya bagian dari daur hidup aktivitas.</p>
+
+<p>Bagian selebihnya dari dokumen ini membahas dasar-dasar cara membuat dan menggunakan aktivitas,
+yang meliputi satu pembahasan lengkap tentang cara kerja daur hidup aktivitas, sehingga Anda bisa dengan benar mengelola
+transisi di antara berbagai status aktivitas.</p>
+
+
+
+<h2 id="Creating">Membuat Aktivitas</h2>
+
+<p>Untuk membuat sebuah aktivitas, Anda harus membuat subkelas {@link android.app.Activity} (atau
+subkelasnya yang ada). Dalam subkelas itu, Anda perlu mengimplementasikan metode-metode callback yang
+dipanggil sistem saat aktivitas bertransisi di antara berbagai status daur hidupnya, misalnya saat
+aktivitas sedang dibuat, dihentikan, dilanjutkan, atau dimusnahkan. Dua metode callback
+terpenting adalah:</p>
+
+<dl>
+ <dt>{@link android.app.Activity#onCreate onCreate()}</dt>
+ <dd>Anda harus mengimplementasikan metode ini. Sistem memanggilnya saat membuat
+ aktivitas Anda. Dalam implementasi, Anda harus menginisialisasi komponen-komponen esensial
+aktivitas.
+ Yang terpenting, inilah tempat Anda harus memanggil {@link android.app.Activity#setContentView
+ setContentView()} untuk mendefinisikan layout untuk antarmuka pengguna aktivitas.</dd>
+ <dt>{@link android.app.Activity#onPause onPause()}</dt>
+ <dd>Sistem memanggil metode ini sebagai pertanda pertama bahwa pengguna sedang meninggalkan
+aktivitas Anda (walau itu tidak selalu berarti aktivitas sedang dimusnahkan). Inilah biasanya tempat Anda
+harus mengikat setiap perubahan yang harus dipertahankan selepas sesi pengguna saat ini (karena
+pengguna mungkin tidak kembali).</dd>
+</dl>
+
+<p>Ada beberapa metode callback daur hidup lainnya yang harus Anda gunakan untuk memberikan
+pengalaman pengguna yang mengalir di antara aktivitas dan menangani interupsi tidak terduga yang menyebabkan aktivitas Anda
+dihentikan dan bahkan dimusnahkan. Semua metode callback daur hidup akan dibahas nanti, di
+bagian tentang <a href="#Lifecycle">Mengelola Daur Hidup Aktivitas</a>.</p>
+
+
+
+<h3 id="UI">Mengimplementasikan antarmuka pengguna</h3>
+
+<p> Antarmuka pengguna aktivitas disediakan oleh hierarki objek—tampilan yang diturunkan
+dari kelas {@link android.view.View}. Tiap tampilan mengontrol sebuah ruang persegi panjang tertentu
+dalam jendela aktivitas dan bisa merespons interaksi pengguna. Misalnya, sebuah tampilan mungkin berupa sebuah
+tombol yang mengawali suatu tindakan bila pengguna menyentuhnya.</p>
+
+<p>Android menyediakan sejumlah tampilan siap-dibuat yang bisa Anda gunakan untuk mendesain dan mengatur
+layout. "Widget" adalah tampilan yang menyediakan elemen-elemen visual (dan interaktif) untuk layar,
+misalnya tombol, bidang teks, kotak cek, atau sekadar sebuah gambar. "Layout" adalah tampilan yang diturunkan dari {@link
+android.view.ViewGroup} yang memberikan sebuah model layout unik untuk tampilan anaknya, misalnya
+layout linier, layout grid, atau layout relatif. Anda juga bisa mensubkelaskan kelas-kelas {@link android.view.View} dan
+{@link android.view.ViewGroup} (atau subkelas yang ada) untuk membuat widget dan
+layout Anda sendiri dan menerapkannya ke layout aktivitas Anda.</p>
+
+<p>Cara paling umum untuk mendefinisikan layout dengan menggunakan tampilan adalah dengan file layout XML yang disimpan dalam
+sumber daya aplikasi Anda. Dengan cara ini, Anda bisa memelihara desain antarmuka pengguna Anda secara terpisah dari
+kode yang mendefinisikan perilaku aktivitas. Anda bisa mengatur layout sebagai UI
+aktivitas Anda dengan {@link android.app.Activity#setContentView(int) setContentView()}, dengan meneruskan
+ID sumber daya untuk layout itu. Akan tetapi, Anda juga bisa membuat {@link android.view.View} baru dalam
+kode aktivitas dan membuat hierarki tampilan dengan menyisipkan {@link
+android.view.View} baru ke dalam {@link android.view.ViewGroup}, kemudian menggunakan layout itu dengan meneruskan akar
+{@link android.view.ViewGroup} ke {@link android.app.Activity#setContentView(View)
+setContentView()}.</p>
+
+<p>Untuk informasi tentang cara membuat antarmuka pengguna, lihat dokumentasi <a href="{@docRoot}guide/topics/ui/index.html">Antarmuka Pengguna</a>.</p>
+
+
+
+<h3 id="Declaring">Mendeklarasikan aktivitas dalam manifes</h3>
+
+<p>Anda harus mendeklarasikan aktivitas dalam file manifes agar file itu
+bisa diakses oleh sistem. Untuk mendeklarasikan aktivitas, bukalah file manifes Anda dan tambahkan sebuah elemen <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
+sebagai anak elemen <a href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>
+. Misalnya:</p>
+
+<pre>
+<manifest ... >
+ <application ... >
+ <activity android:name=".ExampleActivity" />
+ ...
+ </application ... >
+ ...
+</manifest >
+</pre>
+
+<p>Ada beberapa atribut lain yang bisa Anda sertakan dalam elemen ini, untuk mendefinisikan properti
+misalnya label untuk aktivitas, ikon untuk aktivitas, atau tema untuk memberi gaya ke
+UI aktivitas. Atribut <a href="{@docRoot}guide/topics/manifest/activity-element.html#nm">{@code android:name}</a>
+ adalah satu-satunya atribut yang diperlukan—atribut ini menetapkan nama kelas aktivitas. Setelah
+Anda mempublikasikan aplikasi, Anda tidak boleh mengubah nama ini, karena jika melakukannya, Anda bisa merusak
+sebagian fungsionalitas, misalnya pintasan aplikasi (bacalah posting blog berjudul <a href="http://android-developers.blogspot.com/2011/06/things-that-cannot-change.html">Things
+That Cannot Change</a>).</p>
+
+<p>Lihat acuan elemen <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
+untuk informasi selengkapnya tentang cara mendeklarasikan aktivitas Anda dalam manifes.</p>
+
+
+<h4>Menggunakan filter intent</h4>
+
+<p>Elemen <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
+<activity>}</a> juga bisa menetapkan berbagai filter intent—dengan menggunakan elemen <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
+<intent-filter>}</a> —untuk mendeklarasikan cara komponen aplikasi lain
+mengaktifkannya.</p>
+
+<p>Bila Anda membuat aplikasi baru dengan Android SDK Tools, aktivitas stub
+yang dibuat untuk Anda secara otomatis menyertakan filter intent yang mendeklarasikan respons
+aktivitas pada tindakan "main" (utama) dan harus diletakkan dalam kategori "launcher"). Filter intent
+terlihat seperti ini:</p>
+
+<pre>
+<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+</activity>
+</pre>
+
+<p>Elemen <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
+<action>}</a> menetapkan bahwa ini adalah titik masuk "main" ke aplikasi. Elemen <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code
+<category>}</a> menetapkan bahwa aktivitas ini harus tercantum dalam launcher aplikasi
+sistem (untuk memungkinkan pengguna meluncurkan aktivitas ini).</p>
+
+<p>Jika Anda bermaksud agar aplikasi dimuat dengan sendirinya dan tidak memperbolehkan aplikasi lain
+mengaktifkan aktivitasnya, maka Anda tidak memerlukan filter intent lain. Hanya satu aktivitas yang boleh
+memiliki tindakan "main" dan kategori "launcher", seperti dalam contoh sebelumnya. Aktivitas yang
+tidak ingin Anda sediakan untuk aplikasi lain tidak boleh memiliki filter intent dan Anda bisa
+memulai sendiri aktivitas dengan menggunakan intent secara eksplisit (seperti dibahas di bagian berikut).</p>
+
+<p>Akan tetapi, jika ingin aktivitas Anda merespons intent implisit yang dikirim dari
+aplikasi lain (dan aplikasi Anda sendiri), maka Anda harus mendefinisikan filter intent tambahan untuk
+aktivitas. Untuk masing-masing tipe intent yang ingin direspons, Anda harus menyertakan sebuah <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
+<intent-filter>}</a> yang menyertakan elemen
+<a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
+<action>}</a> dan, opsional, sebuah elemen <a href="{@docRoot}guide/topics/manifest/category-element.html">{@code
+<category>}</a> dan/atau elemen <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code
+<data>}</a>. Elemen-elemen ini menetapkan tipe intent yang bisa
+direspons oleh aktivitas Anda.</p>
+
+<p>Untuk informasi selengkapnya tentang cara aktivitas Anda merespons intent, lihat dokumen <a href="{@docRoot}guide/components/intents-filters.html">Intent dan Filter Intent</a>.
+</p>
+
+
+
+<h2 id="StartingAnActivity">Memulai Aktivitas</h2>
+
+<p>Anda bisa memulai aktivitas lain dengan memanggil {@link android.app.Activity#startActivity
+ startActivity()}, dengan meneruskan sebuah {@link android.content.Intent} yang menjelaskan aktivitas
+ yang ingin Anda mulai. Intent menetapkan aktivitas persis yang ingin Anda mulai atau menjelaskan
+ tipe tindakan yang ingin Anda lakukan (dan sistem akan memilih aktivitas yang sesuai untuk Anda,
+yang bahkan
+ bisa berasal dari aplikasi berbeda). Intent juga bisa membawa sejumlah kecil data untuk
+ digunakan oleh aktivitas yang dimulai.</p>
+
+<p>Saat bekerja dalam aplikasi sendiri, Anda nanti akan sering meluncurkan aktivitas yang dikenal saja.
+ Anda bisa melakukannya dengan membuat intent yang mendefinisikan secara eksplisit aktivitas yang ingin Anda mulai,
+dengan menggunakan nama kelas. Misalnya, beginilah cara satu aktivitas memulai aktivitas lain bernama {@code
+SignInActivity}:</p>
+
+<pre>
+Intent intent = new Intent(this, SignInActivity.class);
+startActivity(intent);
+</pre>
+
+<p>Akan tetapi, aplikasi Anda mungkin juga perlu melakukan beberapa tindakan, misalnya mengirim email,
+ pesan teks, atau pembaruan status, dengan menggunakan data dari aktivitas Anda. Dalam hal ini, aplikasi Anda mungkin
+ tidak memiliki aktivitasnya sendiri untuk melakukan tindakan tersebut, sehingga Anda bisa memanfaatkan aktivitas
+ yang disediakan oleh aplikasi lain pada perangkat, yang bisa melakukan tindakan itu untuk Anda. Inilah saatnya
+intent benar-benar berharga—Anda bisa membuat intent yang menjelaskan tindakan yang ingin
+dilakukan dan sistem
+ akan meluncurkan aktivitas yang tepat dari aplikasi lain. Jika ada
+ beberapa aktivitas yang bisa menangani intent itu, pengguna bisa memilih aktivitas yang akan digunakan. Misalnya,
+ jika Anda ingin memperbolehkan pengguna mengirim pesan email, Anda bisa membuat
+ intent berikut:</p>
+
+<pre>
+Intent intent = new Intent(Intent.ACTION_SEND);
+intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);
+startActivity(intent);
+</pre>
+
+<p>Ekstra {@link android.content.Intent#EXTRA_EMAIL} yang ditambahkan ke intent adalah sebuah larik string
+ alamat email yang menjadi tujuan pengiriman email. Bila aplikasi email merespons intent ini,
+ aplikasi itu akan membaca larik string yang disediakan dalam ekstra dan meletakkannya dalam bidang "to"
+ pada formulir penulisan email. Dalam situasi ini, aktivitas aplikasi email dimulai dan bila
+ pengguna selesai, aktivitas Anda akan dilanjutkan.</p>
+
+
+
+
+<h3 id="StartingAnActivityForResult">Memulai aktivitas agar berhasil</h3>
+
+<p>Kadang-kadang, Anda mungkin ingin menerima hasil dari aktivitas yang Anda mulai. Dalam hal itu,
+ mulailah aktivitas dengan memanggil {@link android.app.Activity#startActivityForResult
+ startActivityForResult()} (sebagai ganti {@link android.app.Activity#startActivity
+ startActivity()}). Untuk menerima hasil dari
+aktivitas selanjutnya nanti, implementasikan metode callback {@link android.app.Activity#onActivityResult onActivityResult()}
+. Bila aktivitas selanjutnya selesai, aktivitas akan mengembalikan hasil dalam {@link
+android.content.Intent} kepada metode {@link android.app.Activity#onActivityResult onActivityResult()}
+Anda.</p>
+
+<p>Misalnya, mungkin Anda ingin pengguna mengambil salah satu kontaknya, sehingga aktivitas Anda bisa
+melakukan sesuatu dengan informasi dalam kontak itu. Begini caranya membuat intent tersebut dan
+menangani hasilnya:</p>
+
+<pre>
+private void pickContact() {
+ // Create an intent to "pick" a contact, as defined by the content provider URI
+ Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
+ startActivityForResult(intent, PICK_CONTACT_REQUEST);
+}
+
+@Override
+protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ // If the request went well (OK) and the request was PICK_CONTACT_REQUEST
+ if (resultCode == Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST) {
+ // Perform a query to the contact's content provider for the contact's name
+ Cursor cursor = getContentResolver().query(data.getData(),
+ new String[] {Contacts.DISPLAY_NAME}, null, null, null);
+ if (cursor.moveToFirst()) { // True if the cursor is not empty
+ int columnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
+ String name = cursor.getString(columnIndex);
+ // Do something with the selected contact's name...
+ }
+ }
+}
+</pre>
+
+<p>Contoh ini menunjukkan logika dasar yang harus Anda gunakan dalam metode {@link
+android.app.Activity#onActivityResult onActivityResult()} Anda untuk menangani
+hasil aktivitas. Syarat pertama memeriksa apakah permintaan berhasil—jika ya, maka
+ {@code resultCode} akan berupa {@link android.app.Activity#RESULT_OK}—dan apakah permintaan
+yang direspons hasil ini dikenal—dalam hal ini, {@code requestCode} cocok dengan
+parameter kedua yang dikirim dengan {@link android.app.Activity#startActivityForResult
+startActivityForResult()}. Dari sana, kode akan menangani hasil aktivitas dengan membuat query
+data yang dihasilkan dalam{@link android.content.Intent} (parameter {@code data}).</p>
+
+<p>Yang terjadi adalah {@link
+android.content.ContentResolver} melakukan query terhadap penyedia konten, yang menghasilkan
+{@link android.database.Cursor} yang memperbolehkan data query dibaca. Untuk informasi selengkapnya, lihat dokumen
+<a href="{@docRoot}guide/topics/providers/content-providers.html">Penyedia Konten</a>.</p>
+
+<p>Untuk informasi selengkapnya tentang menggunakan intent, lihat dokumen <a href="{@docRoot}guide/components/intents-filters.html">Intent dan Filter
+Intent</a>.</p>
+
+
+<h2 id="ShuttingDown">Mematikan Aktivitas</h2>
+
+<p>Anda bisa mematikan aktivitas dengan memanggil metode {@link android.app.Activity#finish
+finish()}-nya. Anda juga bisa mematikan aktivitas terpisah yang sebelumnya Anda mulai dengan memanggil
+{@link android.app.Activity#finishActivity finishActivity()}.</p>
+
+<p class="note"><strong>Catatan:</strong> Pada umumnya, Anda tidak boleh secara eksplisit mengakhiri aktivitas
+dengan menggunakan metode-metode ini. Seperti yang dibahas di bagian berikut tentang daur hidup aktivitas,
+sistem Android mengelola hidup aktivitas untuk Anda, sehingga Anda tidak perlu menyelesaikan sendiri
+aktivitas tersebut. Memanggil metode-metode ini bisa berpengaruh negatif pada pengalaman
+pengguna yang diharapkan dan hanya boleh digunakan bila Anda benar-benar tidak ingin pengguna kembali ke
+instance aktivitas ini.</p>
+
+
+<h2 id="Lifecycle">Mengelola Daur Hidup Aktivitas</h2>
+
+<p>Mengelola daur hidup aktivitas dengan mengimplementasikan metode-metode callback sangat
+penting untuk mengembangkan
+aplikasi yang kuat dan fleksibel. Daur hidup aktivitas dipengaruhi langsung oleh kaitannya dengan
+aktivitas lain, tugasnya, serta back-stack.</p>
+
+<p>Pada dasarnya, sebuah aktivitas bisa berada dalam tiga status:</p>
+
+<dl>
+ <dt><i>Dilanjutkan</i></dt>
+ <dd>Aktivitas berada di latar depan layar dan mendapatkan fokus pengguna. (Status ini
+kadang-kadang disebut juga dengan "running" (berjalan).)</dd>
+
+ <dt><i>Dihentikan sementara</i></dt>
+ <dd>Aktivitas lain berada di latar depan dan mendapat fokus, namun aktivitas ini masih terlihat. Yakni,
+aktivitas lain terlihat di atas aplikasi ini dan aktivitas itu setengah transparan atau tidak
+menuutpi seluruh layar. Aktivitas yang dihentikan sementara adalah benar-benar hidup (objek {@link android.app.Activity}
+dipertahankan dalam memori, objek itu memelihara semua informasi status dan anggota, dan tetap dikaitkan dengan
+window manager), namun bisa dimatikan oleh sistem dalam situasi memori sangat rendah.</dd>
+
+ <dt><i>Dihentikan</i></dt>
+ <dd>Aktivitas ditutupi sepenuhnya oleh aktivitas lain (aktivitas sekarang berada di
+"latar belakang"). Aktivitas yang dihentikan juga masih hidup (objek {@link android.app.Activity}
+dipertahankan dalam memori, objek itu menjaga semua informasi status dan anggota, namun <em>tidak</em>
+dikaitkan dengan window manager). Akan tetapi, aktivitas tidak lagi terlihat bagi pengguna dan
+bisa dimatikan oleh sistem bila memori diperlukan di lain.</dd>
+</dl>
+
+<p>Jika aktivitas dihentikan sementara atau dihentikan, sistem bisa mengeluarkannya dari memori baik dengan memintanya agar
+diakhiri (memanggil metode {@link android.app.Activity#finish finish()}-nya), atau sekadar mematikan
+prosesnya. Bila dibuka lagi (setelah diakhiri atau dimatikan), aktivitas harus dibuat dari
+awal.</p>
+
+
+
+<h3 id="ImplementingLifecycleCallbacks">Mengimplementasikan callback daur hidup</h3>
+
+<p>Saat bertransisi ke dalam dan ke luar berbagai status yang dijelaskan di atas, aktivitas diberi tahu
+melalui berbagai metode callback. Semua metode callback adalah sangkutan yang
+bisa Anda kesampingkan untuk melakukan pekerjaan yang sesuai saat status aktivitas Anda berubah. Aktivitas skeleton
+berikut menyertakan setiap metode daur hidup mendasar:</p>
+
+
+<pre>
+public class ExampleActivity extends Activity {
+ @Override
+ public void {@link android.app.Activity#onCreate onCreate}(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ // The activity is being created.
+ }
+ @Override
+ protected void {@link android.app.Activity#onStart onStart()} {
+ super.onStart();
+ // The activity is about to become visible.
+ }
+ @Override
+ protected void {@link android.app.Activity#onResume onResume()} {
+ super.onResume();
+ // The activity has become visible (it is now "resumed").
+ }
+ @Override
+ protected void {@link android.app.Activity#onPause onPause()} {
+ super.onPause();
+ // Another activity is taking focus (this activity is about to be "paused").
+ }
+ @Override
+ protected void {@link android.app.Activity#onStop onStop()} {
+ super.onStop();
+ // The activity is no longer visible (it is now "stopped")
+ }
+ @Override
+ protected void {@link android.app.Activity#onDestroy onDestroy()} {
+ super.onDestroy();
+ // The activity is about to be destroyed.
+ }
+}
+</pre>
+
+<p class="note"><strong>Catatan:</strong> Implementasi Anda terhadap metode-metode daur hidup ini harus
+selalu memanggil implementasi superkelas sebelum melakukan pekerjaan apa pun, seperti yang ditampilkan dalam contoh-contoh di atas.</p>
+
+<p>Bersama-sama, semua metode ini mendefinisikan seluruh daur hidup sebuah aktivitas. Dengan mengimplementasikan
+metode-metode ini, Anda bisa memantau tiga loop tersarang (nested loop) dalam daur hidup aktivitas: </p>
+
+<ul>
+<li><b>Seluruh masa hidup</b> aktivitas berlangsung antara panggilan ke {@link
+android.app.Activity#onCreate onCreate()} dan panggilan ke {@link
+android.app.Activity#onDestroy}. Aktivitas Anda harus melakukan penyiapan
+status "global" (misalnya mendefinisikan layout) dalam {@link android.app.Activity#onCreate onCreate()}, dan
+melepas semua sisa sumber daya dalam {@link android.app.Activity#onDestroy}. Misalnya, jika
+aktivitas Anda memiliki sebuah thread yang berjalan di latar belakang untuk mengunduh data dari jaringan, aktivitas itu bisa membuat
+thread itu dalam {@link android.app.Activity#onCreate onCreate()} kemudian menghentikan thread dalam {@link
+android.app.Activity#onDestroy}.</li>
+
+<li><p><b>Masa pakai terlihat</b> (visible lifetime) aktivitas berlangsung antara panggilan ke {@link
+android.app.Activity#onStart onStart()} dan panggilan ke {@link
+android.app.Activity#onStop onStop()}. Selama ini, pengguna bisa melihat aktivitas
+pada layar dan berinteraksi dengannya. Misalnya, {@link android.app.Activity#onStop onStop()} dipanggil
+bila sebuah aktivitas baru dimulai dan aktivitas ini tidak lagi terlihat. Di antara dua metode ini, Anda bisa
+memelihara sumber daya yang diperlukan untuk menampilkan aktivitas kepada pengguna. Misalnya, Anda bisa mendaftarkan sebuah
+{@link android.content.BroadcastReceiver} dalam {@link
+android.app.Activity#onStart onStart()} untuk memantau perubahan yang berdampak pada UI Anda, dan mencabut pendaftarannya
+dalam {@link android.app.Activity#onStop onStop()} bila pengguna tidak bisa lagi melihat apa yang sedang Anda
+tampilkan. Sistem bisa memanggil {@link android.app.Activity#onStart onStart()} dan {@link
+android.app.Activity#onStop onStop()} beberapa kali selama masa pakai aktivitas, sambil
+aktivitas berganti-ganti antara terlihat dan tersembunyi bagi pengguna.</p></li>
+
+<li><p><b>Masa pakai latar depan</b> aktivitas berlangsung antara panggilan ke {@link
+android.app.Activity#onResume onResume()} dan panggilan ke {@link android.app.Activity#onPause
+onPause()}. Selama waktu ini, aktivitas berada di depan semua aktivitas lain pada layar dan mendapatkan
+fokus input pengguna. Aktivitas bisa sering bertransisi ke dalam dan ke luar latar depan—misalnya,
+ {@link android.app.Activity#onPause onPause()} dipanggil bila perangkat masuk ke mode tidur atau
+bila dialog muncul. Karena status ini bisa sering bertransisi, kode dalam dua metode ini harus
+cukup ringan untuk menghindari transisi lamban yang membuat pengguna menunggu.</p></li>
+</ul>
+
+<p>Gambar 1 mengilustrasikan loop dan path yang mungkin diambil sebuah aktivitas di antara status-status.
+Persegi panjang mewakili metode callback yang bisa Anda implementasikan untuk melakukan operasi saat
+aktivitas bertransisi di antara status. <p>
+
+<img src="{@docRoot}images/activity_lifecycle.png" alt="" />
+<p class="img-caption"><strong>Gambar 1.</strong> Daur hidup aktivitas.</p>
+
+<p>Metode-metode callback daur hidup yang sama tercantum dalam tabel 1, yang menjelaskan setiap metode callback
+secara lebih detail dan menentukan lokasinya masing-masing dalam
+daur hidup aktivitas keseluruhan, termasuk apakah sistem bisa mematikan aktivitas setelah
+metode callback selesai.</p>
+
+<p class="table-caption"><strong>Tabel 1.</strong> Rangkuman metode callback
+daur hidup aktivitas.</p>
+
+<table border="2" width="85%" frame="hsides" rules="rows">
+<colgroup align="left" span="3"></colgroup>
+<colgroup align="left"></colgroup>
+<colgroup align="center"></colgroup>
+<colgroup align="center"></colgroup>
+
+<thead>
+<tr><th colspan="3">Metode</th> <th>Keterangan</th> <th>Bisa dimatikan setelahnya?</th> <th>Berikutnya</th></tr>
+</thead>
+
+<tbody>
+<tr>
+ <td colspan="3" align="left"><code>{@link android.app.Activity#onCreate onCreate()}</code></td>
+ <td>Dipanggil saat aktivitas pertama kali dibuat.
+ Di sinilah Anda harus melakukan semua persiapan statis normal —
+ membuat tampilan, mengikat data ke daftar, dan sebagainya. Metode ini diberi
+ sebuah objek Bundle yang berisi status aktivitas sebelumnya, jika
+ status itu tertangkap (lihat <a href="#actstate">Menyimpan Status Aktivitas</a>,
+ nanti).
+ <p>Selalu diikuti oleh {@code onStart()}.</p></td>
+ <td align="center">Tidak</td>
+ <td align="center">{@code onStart()}</td>
+</tr>
+
+<tr>
+ <td rowspan="5" style="border-left: none; border-right: none;"> </td>
+ <td colspan="2" align="left"><code>{@link android.app.Activity#onRestart
+onRestart()}</code></td>
+ <td>Dipanggil setelah aktivitas dihentikan, tepat sebelum
+ dimulai lagi.
+ <p>Selalu diikuti oleh {@code onStart()}</p></td>
+ <td align="center">Tidak</td>
+ <td align="center">{@code onStart()}</td>
+</tr>
+
+<tr>
+ <td colspan="2" align="left"><code>{@link android.app.Activity#onStart onStart()}</code></td>
+ <td>Dipanggil tepat sebelum aktivitas menjadi terlihat bagi pengguna.
+ <p>Diikuti oleh {@code onResume()} jika aktivitas maju
+ ke latar depan, atau {@code onStop()} jika menjadi tersembunyi.</p></td>
+ <td align="center">Tidak</td>
+ <td align="center">{@code onResume()} <br/>atau<br/> {@code onStop()}</td>
+</tr>
+
+<tr>
+ <td rowspan="2" style="border-left: none;"> </td>
+ <td align="left"><code>{@link android.app.Activity#onResume onResume()}</code></td>
+ <td>Dipanggil tepat sebelum aktivitas mulai
+ berinteraksi dengan pengguna. Pada titik ini, aktivitas berada di
+ puncak tumpukan aktivitas, dengan input pengguna menuju kepadanya.
+ <p>Selalu diikuti oleh {@code onPause()}.</p></td>
+ <td align="center">Tidak</td>
+ <td align="center">{@code onPause()}</td>
+</tr>
+
+<tr>
+ <td align="left"><code>{@link android.app.Activity#onPause onPause()}</code></td>
+ <td>Dipanggil bila sistem akan memulai pelanjutan
+ aktivitas lain. Metode ini biasanya digunakan untuk menerapkan (commit) perubahan yang tidak tersimpan pada
+ data persisten, menghentikan animasi dan hal-hal lain yang mungkin menghabiskan
+ CPU, dan sebagainya. Metode ini harus melakukan apa saja yang dilakukannya dengan sangat cepat, karena
+ aktivitas berikutnya tidak akan dilanjutkan hingga aktivitas ini kembali.
+ <p>Diikuti oleh {@code onResume()} jika aktivitas
+ kembali ke depan, atau oleh {@code onStop()} jika menjadi
+ tidak terlihat bagi pengguna.</td>
+ <td align="center"><strong style="color:#800000">Ya</strong></td>
+ <td align="center">{@code onResume()} <br/>atau<br/> {@code onStop()}</td>
+</tr>
+
+<tr>
+ <td colspan="2" align="left"><code>{@link android.app.Activity#onStop onStop()}</code></td>
+ <td>Dipanggil bila aktivitas tidak lagi terlihat bagi pengguna. Hal ini
+ bisa terjadi karena aktivitas sedang dimusnahkan, atau karena aktivitas lain
+ (aktivitas yang ada atau yang baru) telah dilanjutkan dan sedang menutupinya.
+ <p>Diikuti oleh {@code onRestart()} jika
+ aktivitas kembali untuk berinteraksi dengan pengguna, atau oleh
+ {@code onDestroy()} jika aktivitas ini akan menghilang.</p></td>
+ <td align="center"><strong style="color:#800000">Ya</strong></td>
+ <td align="center">{@code onRestart()} <br/>atau<br/> {@code onDestroy()}</td>
+</tr>
+
+<tr>
+ <td colspan="3" align="left"><code>{@link android.app.Activity#onDestroy
+onDestroy()}</code></td>
+ <td>Dipanggil sebelum aktivitas dimusnahkan. Inilah panggilan terakhir
+ yang akan diterima aktivitas. Metode ini bisa dipanggil karena
+ aktivitas selesai (seseorang memanggil <code>{@link android.app.Activity#finish
+ finish()}</code> padanya), atau karena sistem memusnahkan sementara
+ instance aktivitas ini untuk menghemat tempat. Anda bisa membedakan
+ kedua skenario ini dengan metode <code>{@link
+ android.app.Activity#isFinishing isFinishing()}</code>.</td>
+ <td align="center"><strong style="color:#800000">Ya</strong></td>
+ <td align="center"><em>tidak ada</em></td>
+</tr>
+</tbody>
+</table>
+
+<p>Kolom berlabel "Bisa dimatikan setelahnya?" menunjukkan apakah sistem bisa
+atau tidak mematikan proses yang menjadi host aktivitas kapan saja <em>setelah metode kembali</em>, tanpa
+menjalankan baris lain pada kode aktivitas. Tiga metode ini ditandai "ya": ({@link
+android.app.Activity#onPause
+onPause()}, {@link android.app.Activity#onStop onStop()}, dan {@link android.app.Activity#onDestroy
+onDestroy()}). Karena {@link android.app.Activity#onPause onPause()} adalah yang pertama
+dari tiga, begitu aktivitas dibuat, {@link android.app.Activity#onPause onPause()} adalah
+metode terakhir yang dipastikan akan dipanggil sebelum proses <em>bisa</em> dimatikan—jika
+sistem harus memulihkan memori dalam keadaan darurat, maka {@link
+android.app.Activity#onStop onStop()} dan {@link android.app.Activity#onDestroy onDestroy()} mungkin
+tidak dipanggil. Karena itu, Anda harus menggunakan {@link android.app.Activity#onPause onPause()} untuk menulis
+data persisten yang penting (misalnya hasil edit pengguna) ke penyimpanan. Akan tetapi, Anda harus selektif dalam hal
+informasi yang harus dipertahankan selama {@link android.app.Activity#onPause onPause()}, karena setiap
+prosedur pemblokiran dalam metode ini akan memblokir transisi ke aktivitas berikutnya dan memperlambat
+pengalaman pengguna.</p>
+
+<p> Metode-metode yang ditandai "Tidak" dalam kolom <b>Bisa dimatikan</b> melindungi proses yang menjadi host
+aktivitas dari dimatikan sejak saat metode dipanggil. Jadi, aktivitas bisa dimatikan
+sejak {@link android.app.Activity#onPause onPause()} kembali hingga waktu
+{@link android.app.Activity#onResume onResume()} dipanggil. Aktivitas tidak akan lagi bisa dimatikan hingga
+{@link android.app.Activity#onPause onPause()} dipanggil lagi dan kembali. </p>
+
+<p class="note"><strong>Catatan:</strong> Aktivitas yang tidak "bisa dimatikan" secara teknis oleh
+definisi dalam tabel 1 masih bisa dimatikan oleh sistem—namun itu hany terjadi dalam
+situasi ekstrem bila tidak ada jalan lain. Kapan aktivitas bisa dimatikan
+akan dibahas selengkapnya dalam dokumen <a href="{@docRoot}guide/components/processes-and-threads.html">Proses dan
+Threading</a>.</p>
+
+
+<h3 id="SavingActivityState">Menyimpan status aktivitas</h3>
+
+<p>Pengantar untuk <a href="#Lifecycle">Mengelola Daur Hidup Aktivitas</a> secara ringkas menyebutkan
+bahwa
+bila aktivitas dihentikan sementara atau dihentikan, status aktivitas akan dipertahankan. Hal itu terjadi karena
+objek {@link android.app.Activity} masih ditahan dalam memori saat aktivitas dihentikan sementara atau
+dihentikan—semua informasi tentang anggota dan statusnya saat ini masih hidup. Jadi, setiap perubahan
+yang dibuat pengguna dalam aktivitas akan dipertahankan sehingga bila aktivitas kembali ke
+latar depan (bila "dilanjutkan"), perubahan itu masih ada.</p>
+
+<p>Akan tetapi, bila sistem memusnahkan aktivitas untuk memulihkan memori, objek {@link
+android.app.Activity} akan dimusnahkan, sehingga sistem tidak bisa sekadar melanjutkan aktivitas dengan status
+tidak berubah. Sebagai gantinya, sistem harus membuat ulang objek {@link android.app.Activity} jika pengguna
+menyusuri kembali ke aktivitas tersebut. Namun, pengguna tidak menyadari
+bahwa sistem memusnahkan aktivitas dan membuatnya kembali dan, karena itu, mungkin
+mengharapkan aktivitas untuk sama persis dengan sebelumnya. Dalam situasi ini, Anda bisa memastikan bahwa
+informasi penting tentang status aktivitas tetap terjaga dengan mengimplementasikan
+metode callback tambahan yang memungkinkan Anda menyimpan informasi tentang status aktivitas: {@link
+android.app.Activity#onSaveInstanceState onSaveInstanceState()}.</p>
+
+<p>Sistem memanggil {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}
+sebelum membuat aktivitas rawan terhadap pemusnahan. Sistem meneruskan ke metode ini
+sebuah {@link android.os.Bundle} tempat Anda bisa menyimpan
+informasi status tentang aktivitas sebagai pasangan nama-nilai, dengan menggunakan metode-metode misalnya {@link
+android.os.Bundle#putString putString()} dan {@link
+android.os.Bundle#putInt putInt()}. Kemudian, jika sistem mematikan proses aplikasi Anda
+dan pengguna menyusuri kembali ke aktivitas tersebut, sistem akan membuat kembali aktivitas dan meneruskan
+{@link android.os.Bundle} ke {@link android.app.Activity#onCreate onCreate()} maupun {@link
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}. Dengan menggunakan salah satu
+metode ini, Anda bisa mengekstrak status tersimpan dari {@link android.os.Bundle} dan memulihkan
+status aktivitas. Jika tidak ada informasi status untuk dipulihkan, maka {@link
+android.os.Bundle} yang diteruskan kepada adalah Anda null (yang akan terjadi bila aktivitas dibuat untuk
+pertama kali).</p>
+
+<img src="{@docRoot}images/fundamentals/restore_instance.png" alt="" />
+<p class="img-caption"><strong>Gambar 2.</strong> Ada dua cara yang bisa digunakan aktivitas untuk kembali ke fokus pengguna
+dengan status tetap: aktivitas dimusnahkan, kemudian dibuat kembali, dan aktivitas harus memulihkan
+status yang disimpan sebelumnya, atau aktivitas dihentikan, kemudian dilanjutkan dengan status aktivitas
+tetap.</p>
+
+<p class="note"><strong>Catatan:</strong> Tidak ada jaminan bahwa {@link
+android.app.Activity#onSaveInstanceState onSaveInstanceState()} akan dipanggil sebelum
+aktivitas Anda dimusnahkan, karena bisa saja terjadi aktivitas tidak perlu menyimpan status
+(misalnya saat pengguna meninggalkan aktivitas Anda dengan menggunakan tombol <em>Back</em>, karena pengguna menutup aktivitas
+secara eksplisit
+). Jika sistem memanggil {@link android.app.Activity#onSaveInstanceState
+onSaveInstanceState()}, ini akan dilakukan sebelum {@link
+android.app.Activity#onStop onStop()} dan mungkin sebelum {@link android.app.Activity#onPause
+onPause()}.</p>
+
+<p>Akan tetapi, sekalipun Anda tidak melakukan apa-apa dan tidak mengimplementasikan {@link
+android.app.Activity#onSaveInstanceState onSaveInstanceState()}, beberapa status aktivitas
+akan dipulihkan oleh implementasi default {@link
+android.app.Activity#onSaveInstanceState onSaveInstanceState()} dalam kelas {@link android.app.Activity}. Khususnya,
+implementasi default akan memanggil metode {@link
+android.view.View#onSaveInstanceState onSaveInstanceState()} yang sesuai untuk setiap {@link
+android.view.View} dalam layout, yang memungkinkan setiap tampilan untuk memberi informasi tentang dirinya
+yang harus disimpan. Hampir setiap widget dalam kerangka kerja Android mengimplementasikan metode ini
+sebagaimana mestinya, sehingga setiap perubahan yang terlihat pada UI akan disimpan dan dipulihkan secara otomatis bila
+aktivitas Anda dibuat kembali. Misalnya, widget {@link android.widget.EditText} menyimpan teks apa saja
+yang dimasukkan oleh pengguna dan widget {@link android.widget.CheckBox} menyimpan baik teks itu diperiksa maupun
+tidak. Satu-satunya pekerjaan yang Anda perlukan adalah memberikan ID unik (dengan atribut <a href="{@docRoot}guide/topics/resources/layout-resource.html#idvalue">{@code android:id}</a>
+) untuk masing-masing widget yang ingin disimpan statusnya. Jika widget tidak memiliki ID, maka sistem
+tidak bisa menyimpan statusnya.</p>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+<p>Anda juga bisa menghentikan secara eksplisit sebuah tampilan dalam layout Anda agar tidak menyimpan statusnya dengan mengatur atribut
+{@link android.R.attr#saveEnabled android:saveEnabled} ke {@code "false"} atau dengan memanggil
+metode {@link android.view.View#setSaveEnabled setSaveEnabled()}. Biasanya, Anda tidak boleh
+menonaktifkannya, namun Anda boleh melakukannya jika ingin memulihkan status UI aktivitas secara berbeda.</p>
+</div>
+</div>
+
+<p>Walaupun implementasi default {@link
+android.app.Activity#onSaveInstanceState onSaveInstanceState()} menyimpan informasi yang berguna tentang
+UI aktivitas, Anda mungkin masih perlu mengesampingkannya untuk menyimpan informasi tambahan.
+Misalnya, Anda mungkin perlu menyimpan nilai-nilai anggota yang berubah selama masa pakai aktivitas (yang
+mungkin berkorelasi dengan nilai-nilai yang dipulihkan dalam UI, namun anggota-anggota yang menyimpan nilai-nilai UI itu tidak
+dipulihkan, secara default).</p>
+
+<p>Karena implementasi default {@link
+android.app.Activity#onSaveInstanceState onSaveInstanceState()} membantu menyimpan status UI, jika
+Anda mengesampingkan metode ini untuk menyimpan informasi tambahan status, Anda harus selalu memanggil
+implementasi superkelas {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}
+sebelum melakukan pekerjaan apa pun. Demikian pula, Anda juga harus memanggil implementasi superkelas {@link
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} jika Anda mengesampingkannya, sehingga
+implementasi default bisa memulihkan status tampilan.</p>
+
+<p class="note"><strong>Catatan:</strong> Karena {@link android.app.Activity#onSaveInstanceState
+onSaveInstanceState()} tidak dijamin
+akan dipanggil, Anda harus menggunakannya hanya untuk mencatat status aktivitas sementara (transient) (status
+UI)—Anda tidak boleh menggunakannya untuk menyimpan data persisten. Sebagai gantinya, Anda harus menggunakan {@link
+android.app.Activity#onPause onPause()} untuk menyimpan data persisten (misalnya data yang harus disimpan
+ke database) saat pengguna meninggalkan aktivitas.</p>
+
+<p>Salah satu cara yang baik untuk menguji kemampuan aplikasi dalam memulihkan statusnya adalah cukup dengan memutar
+perangkat sehingga orientasi layarnya berubah. Bila orientasi layar berubah, sistem
+akan memusnahkan dan membuat kembali aktivitas untuk menerapkan sumber daya alternatif yang mungkin tersedia
+untuk konfigurasi layar baru. Karena alasan ini saja, sangat penting bahwa aktivitas Anda
+memulihkan statusnya secara lengkap saat dibuat kembali, karena pengguna memutar layar secara rutin saat
+menggunakan aplikasi.</p>
+
+
+<h3 id="ConfigurationChanges">Menangani perubahan konfigurasi</h3>
+
+<p>Sebagian konfigurasi perangkat bisa berubah saat runtime (misalnya orientasi layar, ketersediaan keyboard
+, dan bahasa). Bila terjadi perubahan demikian, Android akan membuat kembali aktivitas yang berjalan
+(sistem akan memanggil {@link android.app.Activity#onDestroy}, kemudian segera memanggil {@link
+android.app.Activity#onCreate onCreate()}). Perilaku ini
+didesain untuk membantu aplikasi Anda menyesuaikan diri dengan konfigurasi baru dengan cara memuat ulang
+aplikasi Anda secara otomatis dengan sumber daya alternatif yang telah Anda sediakan (misalnya layout yang berbeda untuk
+layar orientasi dan ukuran yang berbeda).</p>
+
+<p>Jika Anda mendesain aktivitas dengan benar untuk menangani restart karena perubahan orientasi layar dan
+memulihkan status aktivitas seperti yang dijelaskan di atas, aplikasi Anda akan lebih tahan terhadap
+kejadian tidak terduga lainnya dalam daur hidup aktivitas.</p>
+
+<p>Cara terbaik menangani restart tersebut adalah
+ menyimpan dan memulihkan status aktivitas Anda dengan menggunakan {@link
+ android.app.Activity#onSaveInstanceState onSaveInstanceState()} dan {@link
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} (atau {@link
+android.app.Activity#onCreate onCreate()}), seperti yang dibahas di bagian sebelumnya.</p>
+
+<p>Untuk informasi selengkapnya tentang konfigurasi perubahan yang terjadi saat program berjalan dan cara menanganinya
+, bacalah panduan untuk <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Menangani
+Perubahan Runtime</a>.</p>
+
+
+
+<h3 id="CoordinatingActivities">Mengoordinasikan aktivitas</h3>
+
+ <p>Bila suatu aktivitas memulai aktivitas lain, keduanya akan mengalami transisi daur hidup. Aktivitas pertama
+akan berhenti sementara dan berhenti sama sekali (walau tidak akan berhenti jika masih terlihat di latar belakang), saat
+aktivitas lain dibuat. Jika aktivitas-aktivitas ini berbagi data yang disimpan ke disk atau di tempat lain, Anda perlu
+memahami bahwa aktivitas pertama tidak dihentikan sepenuhnya sebelum aktivitas kedua dibuat.
+Sebagai gantinya, proses akan memulai aktivitas kedua secara tumpang tindih dengan proses penghentian
+aktivitas pertama.</p>
+
+<p>Urutan callback daur hidup didefinisikan dengan baik, khususnya bila kedua aktivitas berada dalam
+proses yang sama dan salah satunya memulai yang lain. Berikut ini adalah urutan operasi yang terjadi bila Aktivitas
+A memulai Aktivitas B: </p>
+
+<ol>
+<li>Metode {@link android.app.Activity#onPause onPause()} Aktivitas A berjalan.</li>
+
+<li>Metode-metode {@link android.app.Activity#onCreate onCreate()}, {@link
+android.app.Activity#onStart onStart()}, dan {@link android.app.Activity#onResume onResume()}
+Aktivitas B berjalan secara berurutan. (Aktivitas B sekarang mendapatkan fokus pengguna.)</li>
+
+<li>Kemudian, jika Aktivitas A tidak lagi terlihat di layar, metode {@link
+android.app.Activity#onStop onStop()}-nya akan dijalankan.</li>
+</ol>
+
+ <p>Urutan callback daur hidup yang bisa diramalkan ini memungkinkan Anda mengelola transisi
+informasi dari satu aktivitas ke aktivitas lainnya. Misalnya, jika Anda harus menulis ke database saat
+aktivitas pertama berhenti agar aktivitas berikutnya bisa membacanya, maka Anda harus menulis ke
+database selama {@link android.app.Activity#onPause onPause()} sebagai ganti selama {@link
+android.app.Activity#onStop onStop()}.</p>
+
+<!--
+<h2>Beginner's Path</h2>
+
+<p>For more information about how Android maintains a history of activities and
+enables user multitasking, continue with the <b><a
+href="{@docRoot}guide/components/tasks-and-back-stack.html">Tasks and Back
+Stack</a></b> document.</p>
+-->
diff --git a/docs/html-intl/intl/id/guide/components/bound-services.jd b/docs/html-intl/intl/id/guide/components/bound-services.jd
new file mode 100644
index 0000000..6e5e65a
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/components/bound-services.jd
@@ -0,0 +1,658 @@
+page.title=Layanan Terikat
+parent.title=Layanan
+parent.link=services.html
+@jd:body
+
+
+<div id="qv-wrapper">
+<ol id="qv">
+<h2>Dalam dokumen ini</h2>
+<ol>
+ <li><a href="#Basics">Dasar-Dasar</a></li>
+ <li><a href="#Creating">Membuat Layanan Terikat</a>
+ <ol>
+ <li><a href="#Binder">Memperluas kelas Binder</a></li>
+ <li><a href="#Messenger">Menggunakan Messenger</a></li>
+ </ol>
+ </li>
+ <li><a href="#Binding">Mengikat ke Layanan</a></li>
+ <li><a href="#Lifecycle">Mengelola Daur Hidup Layanan Terikat</a></li>
+</ol>
+
+<h2>Kelas-kelas utama</h2>
+<ol>
+ <li>{@link android.app.Service}</li>
+ <li>{@link android.content.ServiceConnection}</li>
+ <li>{@link android.os.IBinder}</li>
+</ol>
+
+<h2>Contoh</h2>
+<ol>
+ <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.html">{@code
+ RemoteService}</a></li>
+ <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LocalService.html">{@code
+ LocalService}</a></li>
+</ol>
+
+<h2>Lihat juga</h2>
+<ol>
+ <li><a href="{@docRoot}guide/components/services.html">Layanan</a></li>
+</ol>
+</div>
+
+
+<p>Layanan terikat adalah server di antarmuka klien-server. Layanan terikat memungkinkan komponen-komponen
+(seperti aktivitas) untuk diikat ke layanan, mengirim permintaan, menerima respons, dan bahkan melakukan
+komunikasi antarproses (IPC). Layanan terikat biasanya hidup hanya saat melayani
+komponen aplikasi lain dan tidak berjalan di latar belakang terus-menerus.</p>
+
+<p>Dokumen ini menampilkan cara membuat layanan terikat, termasuk cara mengikat
+ke layanan dari komponen aplikasi lain. Akan tetapi, Anda juga harus mengacu dokumen <a href="{@docRoot}guide/components/services.html">Layanan</a> untuk
+informasi tambahan tentang layanan secara umum, seperti cara menyampaikan pemberitahuan dari layanan, mengatur
+layanan agar berjalan di latar depan, dan lain-lain.</p>
+
+
+<h2 id="Basics">Dasar-Dasar</h2>
+
+<p>Layanan terikat adalah implementasi kelas {@link android.app.Service} yang memungkinkan
+aplikasi lain diikat padanya dan berinteraksi dengannya. Untuk menyediakan pengikatan bagi sebuah
+layanan, Anda harus mengimplementasikan metode callback {@link android.app.Service#onBind onBind()}. Metode ini
+menghasilkan objek {@link android.os.IBinder} yang mendefinisikan antarmuka pemprograman yang
+bisa digunakan klien untuk berinteraksi dengan layanan.</p>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+ <h3>Mengikat ke Layanan yang Sudah Dimulai</h3>
+
+<p>Seperti dibahas dalam dokumen <a href="{@docRoot}guide/components/services.html">Layanan</a>
+, Anda bisa membuat layanan yang dimulai sekaligus diikat. Yakni, layanan bisa
+dimulai dengan memanggil {@link android.content.Context#startService startService()}, yang memungkinkan
+layanan berjalan terus-menerus, dan juga membolehkan klien untuk mengikat ke layanan dengan memanggil {@link
+android.content.Context#bindService bindService()}.
+ <p>Jika Anda mengizinkan layanan dimulai dan diikat, lalu ketika layanan telah
+dimulai, sistem <em>tidak</em> menghapus layanan ketika semua klien melepas ikatan. Sebagai gantinya, Anda harus
+menghentikan layanan secara eksplisit, dengan memanggil {@link android.app.Service#stopSelf stopSelf()} atau {@link
+android.content.Context#stopService stopService()}.</p>
+
+<p>Walaupun Anda biasanya harus mengimplementasikan {@link android.app.Service#onBind onBind()}
+<em>atau</em> {@link android.app.Service#onStartCommand onStartCommand()}, kadang-kadang perlu
+mengimplementasikan keduanya. Misalnya, sebuah pemutar musik bisa merasakan manfaatnya karena layanannya boleh berjalan
+terus-menerus dan juga menyediakan pengikatan. Dengan cara ini, sebuah aktivitas bisa memulai layanan untuk memutar beberapa
+lagu dan musik terus dimainkan sekalipun pengguna meninggalkan aplikasi. Lalu, bila pengguna
+kembali ke aplikasi, aktivitas bisa mengikat ke layanan untuk mendapatkan kembali kontrol atas pemutaran.</p>
+
+<p>Pastikan membaca bagian tentang <a href="#Lifecycle">Mengelola Daur Hidup Layanan
+Terikat</a>, untuk informasi selengkapnya tentang daur hidup layanan saat menambahkan pengikatan ke
+layanan yang sudah dimulai.</p>
+</div>
+</div>
+
+<p>Klien bisa mengikat ke layanan dengan memanggil {@link android.content.Context#bindService
+bindService()}. Bila itu dilakukan, klien harus menyediakan implementasi {@link
+android.content.ServiceConnection}, yang memantau koneksi dengan layanan. Metode {@link
+android.content.Context#bindService bindService()} kembali dengan serta-merta tanpa sebuah nilai, namun
+bila sistem Android membuat koneksi antara klien
+dan layanan, sistem akan memanggil {@link
+android.content.ServiceConnection#onServiceConnected onServiceConnected()} pada {@link
+android.content.ServiceConnection} untuk mengirim {@link android.os.IBinder} yang
+bisa digunakan klien untuk berkomunikasi dengan layanan.</p>
+
+<p>Beberapa klien bisa terhubung ke layanan dengan serentak. Akan tetapi, sistem akan memanggil metode
+{@link android.app.Service#onBind onBind()} layanan Anda untuk mengambil {@link android.os.IBinder} hanya
+bila klien pertama mengikat. Sistem lalu memberikan {@link android.os.IBinder} yang sama ke setiap
+klien tambahan yang mengikat, tanpa memanggil {@link android.app.Service#onBind onBind()} lagi.</p>
+
+<p>Bila klien terakhir melepas ikatan dari layanan, sistem akan menghapus layanan (kecuali jika
+layanan juga dimulai oleh {@link android.content.Context#startService startService()}).</p>
+
+<p>Bila Anda mengimplementasikan layanan terikat, yang terpenting adalah mendefinisikan antarmuka
+yang dihasilkan metode callback {@link android.app.Service#onBind onBind()} Anda. Ada sedikit
+cara mendefinisikan antarmuka {@link android.os.IBinder} layanan Anda dan bagian berikut
+akan membahas masing-masing teknik.</p>
+
+
+
+<h2 id="Creating">Membuat Layanan Terikat</h2>
+
+<p>Saat membuat layanan yang menyediakan pengikatan, Anda harus menyediakan {@link android.os.IBinder}
+yang menyediakan antarmuka pemrograman yang bisa digunakan klien untuk berinteraksi dengan layanan. Ada
+tiga cara untuk mendefinisikan antarmuka:</p>
+
+<dl>
+ <dt><a href="#Binder">Memperluas kelas Binder</a></dt>
+ <dd>Jika layanan Anda bersifat privat untuk aplikasi Anda sendiri dan berjalan dalam proses yang sama dengan klien
+(biasanya), Anda harus membuat antarmuka dengan memperluas kelas {@link android.os.Binder}
+dan menghasilkan instance dari
+{@link android.app.Service#onBind onBind()}. Klien akan menerima {@link android.os.Binder} dan
+bisa menggunakannya untuk mengakses langsung metode publik yang tersedia dalam implementasi {@link android.os.Binder}
+atau bahkan {@link android.app.Service}.
+ <p>Inilah teknik yang lebih disukai bila layanan Anda sekadar pekerja latar belakang untuk aplikasi Anda
+sendiri. Satu-satunya alasan tidak membuat antarmuka dengan cara ini adalah karena
+layanan Anda akan digunakan oleh aplikasi lain atau pada proses-proses terpisah.</dd>
+
+ <dt><a href="#Messenger">Menggunakan Messenger</a></dt>
+ <dd>Jika antarmuka Anda perlu bekerja lintas proses, Anda bisa membuat
+antarmuka untuk layanan dengan {@link android.os.Messenger}. Dengan cara ini, layanan
+mendefinisikan {@link android.os.Handler} yang akan merespons aneka tipe objek {@link
+android.os.Message}. {@link android.os.Handler}
+ini adalah dasar bagi {@link android.os.Messenger} yang nanti bisa berbagi {@link android.os.IBinder}
+dengan klien, sehingga memungkinkan klien mengirim perintah ke layanan dengan menggunakan objek {@link
+android.os.Message}. Selain itu, klien bisa mendefinisikan sendiri {@link android.os.Messenger}
+sehingga layanan bisa mengirim balik pesan.
+ <p>Inilah cara termudah melakukan komunikasi antarproses (IPC), karena {@link
+android.os.Messenger} akan mengantre semua permintaan ke dalam satu thread sehingga Anda tidak perlu mendesain
+layanan agar thread-safe.</p>
+ </dd>
+
+ <dt>Menggunakan AIDL</dt>
+ <dd>AIDL (Android Interface Definition Language) melakukan semua pekerjaan untuk mengurai objek menjadi
+primitif yang bisa dipahami dan diarahkan oleh sistem operasi ke berbagai proses untuk melakukan
+IPC. Teknik sebelumnya, dengan menggunakan {@link android.os.Messenger}, sebenarnya berdasarkan AIDL sebagai
+struktur yang mendasarinya. Seperti disebutkan di atas, {@link android.os.Messenger} membuat antrean
+semua permintaan klien dalam satu thread, sehingga layanan akan menerima permintaan satu per satu. Akan tetapi,
+jika ingin layanan Anda menangani beberapa permintaan sekaligus, Anda bisa menggunakan AIDL
+secara langsung. Dalam hal ini, layanan Anda harus mampu multi-thread dan dibuat thread-safe.
+ <p>Untuk menggunakan AIDL secara langsung, Anda harus
+membuat file {@code .aidl} yang mendefinisikan antarmuka pemrograman. Alat Android SDK menggunakan
+file ini untuk menghasilkan kelas abstrak yang mengimplementasikan antarmuka dan menangani IPC, yang nanti
+bisa Anda perluas dalam layanan.</p>
+ </dd>
+</dl>
+
+ <p class="note"><strong>Catatan:</strong> Umumnya aplikasi <strong>tidak boleh</strong> menggunakan AIDL untuk
+membuat layanan terikat, karena hal itu mungkin memerlukan kemampuan multi-thread dan
+bisa mengakibatkan implementasi yang lebih rumit. Dengan demikian, AIDL tidak cocok untuk sebagian besar aplikasi
+dan dokumen ini tidak membahas cara menggunakannya untuk layanan Anda. Jika Anda yakin perlu
+menggunakan AIDL secara langsung, lihat dokumen <a href="{@docRoot}guide/components/aidl.html">AIDL</a>
+.</p>
+
+
+
+
+<h3 id="Binder">Memperluas kelas Binder</h3>
+
+<p>Jika layanan Anda hanya digunakan oleh aplikasi lokal dan tidak perlu bekerja lintas proses,
+maka Anda bisa mengimplementasikan kelas {@link android.os.Binder} Anda sendiri yang memberi klien Anda
+akses langsung ke metode publik dalam layanan.</p>
+
+<p class="note"><strong>Catatan:</strong> Hal ini hanya berhasil jika klien dan layanan berada dalam
+aplikasi dan proses yang sama, suatu kondisi yang paling umum. Misalnya, cara ini sangat cocok untuk sebuah aplikasi musik
+yang perlu mengikat aktivitas ke layanannya sendiri, yakni memutar musik di
+latar belakang.</p>
+
+<p>Berikut cara menyiapkannya:</p>
+<ol>
+ <li>Dalam layanan Anda, buat sebuah instance {@link android.os.Binder} yang:
+ <ul>
+ <li>berisi metode publik yang bisa dipanggil klien</li>
+ <li>menghasilkan instance {@link android.app.Service} saat ini, yang memiliki metode publik yang
+bisa dipanggil klien</li>
+ <li>atau, menghasilkan instance kelas lain yang host-nya di layanan dengan metode publik yang
+bisa dipanggil klien</li>
+ </ul>
+ <li>Hasilkan instance {@link android.os.Binder} ini dari metode callback {@link
+android.app.Service#onBind onBind()}.</li>
+ <li>Di klien, terima {@link android.os.Binder} dari metode callback {@link
+android.content.ServiceConnection#onServiceConnected onServiceConnected()} dan
+buat panggilan ke layanan terikat dengan menggunakan metode yang disediakan.</li>
+</ol>
+
+<p class="note"><strong>Catatan:</strong> Alasan layanan dan klien harus berada dalam aplikasi yang sama
+adalah agar klien bisa mengkonversi objek yang dihasilkan dan memanggil API-nya dengan benar. Layanan
+dan klien juga harus berada dalam proses yang sama, karena teknik ini tidak melakukan
+pengarahan (marshalling) apa pun untuk lintas proses.</p>
+
+<p>Misalnya, berikut ini adalah layanan yang memberi klien akses ke metode-metode dalam layanan melalui
+implementasi {@link android.os.Binder}:</p>
+
+<pre>
+public class LocalService extends Service {
+ // Binder given to clients
+ private final IBinder mBinder = new LocalBinder();
+ // Random number generator
+ private final Random mGenerator = new Random();
+
+ /**
+ * Class used for the client Binder. Because we know this service always
+ * runs in the same process as its clients, we don't need to deal with IPC.
+ */
+ public class LocalBinder extends Binder {
+ LocalService getService() {
+ // Return this instance of LocalService so clients can call public methods
+ return LocalService.this;
+ }
+ }
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ return mBinder;
+ }
+
+ /** method for clients */
+ public int getRandomNumber() {
+ return mGenerator.nextInt(100);
+ }
+}
+</pre>
+
+<p>{@code LocalBinder} menyediakan {@code getService()} metode bagi klien untuk mengambil
+instance {@code LocalService} saat ini. Cara ini memungkinkan klien memanggil metode publik dalam
+layanan. Misalnya, klien bisa memanggil {@code getRandomNumber()} dari layanan.</p>
+
+<p>Berikut ini adalah aktivitas yang mengikat ke {@code LocalService} dan memanggil {@code getRandomNumber()}
+bila tombol diklik:</p>
+
+<pre>
+public class BindingActivity extends Activity {
+ LocalService mService;
+ boolean mBound = false;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.main);
+ }
+
+ @Override
+ protected void onStart() {
+ super.onStart();
+ // Bind to LocalService
+ Intent intent = new Intent(this, LocalService.class);
+ bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
+ }
+
+ @Override
+ protected void onStop() {
+ super.onStop();
+ // Unbind from the service
+ if (mBound) {
+ unbindService(mConnection);
+ mBound = false;
+ }
+ }
+
+ /** Called when a button is clicked (the button in the layout file attaches to
+ * this method with the android:onClick attribute) */
+ public void onButtonClick(View v) {
+ if (mBound) {
+ // Call a method from the LocalService.
+ // However, if this call were something that might hang, then this request should
+ // occur in a separate thread to avoid slowing down the activity performance.
+ int num = mService.getRandomNumber();
+ Toast.makeText(this, "number: " + num, Toast.LENGTH_SHORT).show();
+ }
+ }
+
+ /** Defines callbacks for service binding, passed to bindService() */
+ private ServiceConnection mConnection = new ServiceConnection() {
+
+ @Override
+ public void onServiceConnected(ComponentName className,
+ IBinder service) {
+ // We've bound to LocalService, cast the IBinder and get LocalService instance
+ LocalBinder binder = (LocalBinder) service;
+ mService = binder.getService();
+ mBound = true;
+ }
+
+ @Override
+ public void onServiceDisconnected(ComponentName arg0) {
+ mBound = false;
+ }
+ };
+}
+</pre>
+
+<p>Contoh di atas menampilkan cara klien mengikat ke layanan dengan menggunakan implementasi
+{@link android.content.ServiceConnection} dan callback {@link
+android.content.ServiceConnection#onServiceConnected onServiceConnected()}. Bagian
+berikut menyediakan informasi selengkapnya tentang proses pengikatan ke layanan.</p>
+
+<p class="note"><strong>Catatan:</strong> Contoh di atas tidak secara eksplisit melepas ikatan dari layanan,
+namun semua klien harus melepas ikatan pada waktu yang tepat (seperti saat aktivitas sedang jeda).</p>
+
+<p>Untuk contoh kode selengkapnya, lihat kelas <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LocalService.html">{@code
+LocalService.java}</a> dan kelas <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LocalServiceActivities.html">{@code
+LocalServiceActivities.java}</a> dalam <a href="{@docRoot}resources/samples/ApiDemos/index.html">ApiDemos</a>.</p>
+
+
+
+
+
+<h3 id="Messenger">Menggunakan Messenger</h3>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+ <h4>Dibandingkan dengan AIDL</h4>
+ <p>Bila Anda perlu melakukan IPC, menggunakan {@link android.os.Messenger} untuk antarmuka
+lebih sederhana daripada mengimplementasikannya dengan AIDL, karena {@link android.os.Messenger} mengantre
+semua panggilan ke layanan, sementara antarmuka AIDL murni mengirim permintaan serentak ke
+layanan, yang nanti harus menangani multi-threading.</p>
+ <p>Untuk sebagian besar aplikasi, layanan tidak perlu melakukan multi-threading, jadi dengan menggunakan {@link
+android.os.Messenger} memungkinkan layanan menangani panggilan satu per satu. Jika
+layanan harus multi-thread, Anda harus menggunakan <a href="{@docRoot}guide/components/aidl.html">AIDL</a> untuk mendefinisikan antarmuka.</p>
+</div>
+</div>
+
+<p>Jika layanan perlu berkomunikasi dengan proses jauh, Anda bisa menggunakan
+{@link android.os.Messenger} untuk menyediakan antarmuka bagi layanan Anda. Teknik ini memungkinkan
+Anda melakukan komunikasi antarproses (IPC) tanpa harus menggunakan AIDL.</p>
+
+<p>Berikut ini rangkuman cara menggunakan {@link android.os.Messenger}:</p>
+
+<ul>
+ <li>Layanan mengimplementasikan {@link android.os.Handler} yang menerima callback untuk tiap
+panggilan dari klien.</li>
+ <li>{@link android.os.Handler} digunakan untuk membuat objek {@link android.os.Messenger}
+(yang merupakan acuan ke {@link android.os.Handler}).</li>
+ <li>{@link android.os.Messenger} membuat {@link android.os.IBinder} yang
+dikembalikan layanan ke klien dari {@link android.app.Service#onBind onBind()}.</li>
+ <li>Klien menggunakan {@link android.os.IBinder} untuk membuat instance {@link android.os.Messenger}
+(yang mengacu {@link android.os.Handler} layanan), yang digunakan klien untuk mengirim
+objek {@link android.os.Message} ke layanan.</li>
+ <li>Layanan menerima setiap {@link android.os.Message} dalam {@link
+android.os.Handler}—secara spesifik, dalam metode {@link android.os.Handler#handleMessage
+handleMessage()}.</li>
+</ul>
+
+
+<p>Dengan cara ini, tidak ada "metode" untuk dipanggil klien pada layanan. Sebagai gantinya,
+klien mengirim "pesan" (objek-objek {@link android.os.Message}) yang diterima layanan dalam
+{@link android.os.Handler}-nya.</p>
+
+<p>Berikut ini contoh layanan sederhana yang menggunakan antarmuka {@link android.os.Messenger}:</p>
+
+<pre>
+public class MessengerService extends Service {
+ /** Command to the service to display a message */
+ static final int MSG_SAY_HELLO = 1;
+
+ /**
+ * Handler of incoming messages from clients.
+ */
+ class IncomingHandler extends Handler {
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case MSG_SAY_HELLO:
+ Toast.makeText(getApplicationContext(), "hello!", Toast.LENGTH_SHORT).show();
+ break;
+ default:
+ super.handleMessage(msg);
+ }
+ }
+ }
+
+ /**
+ * Target we publish for clients to send messages to IncomingHandler.
+ */
+ final Messenger mMessenger = new Messenger(new IncomingHandler());
+
+ /**
+ * When binding to the service, we return an interface to our messenger
+ * for sending messages to the service.
+ */
+ @Override
+ public IBinder onBind(Intent intent) {
+ Toast.makeText(getApplicationContext(), "binding", Toast.LENGTH_SHORT).show();
+ return mMessenger.getBinder();
+ }
+}
+</pre>
+
+<p>Perhatikan bahwa metode {@link android.os.Handler#handleMessage handleMessage()} dalam
+{@link android.os.Handler} adalah tempat layanan menerima {@link android.os.Message}
+yang masuk dan memutuskan aksi yang harus dilakukan, berdasarkan anggota {@link android.os.Message#what}.</p>
+
+<p>Klien tinggal membuat {@link android.os.Messenger} berdasarkan {@link
+android.os.IBinder} yang dihasilkan layanan dan mengirim pesan menggunakan {@link
+android.os.Messenger#send send()}. Misalnya, berikut ini adalah aktivitas sederhana yang mengikat ke
+layanan dan mengirim pesan {@code MSG_SAY_HELLO} ke layanan:</p>
+
+<pre>
+public class ActivityMessenger extends Activity {
+ /** Messenger for communicating with the service. */
+ Messenger mService = null;
+
+ /** Flag indicating whether we have called bind on the service. */
+ boolean mBound;
+
+ /**
+ * Class for interacting with the main interface of the service.
+ */
+ private ServiceConnection mConnection = new ServiceConnection() {
+ public void onServiceConnected(ComponentName className, IBinder service) {
+ // This is called when the connection with the service has been
+ // established, giving us the object we can use to
+ // interact with the service. We are communicating with the
+ // service using a Messenger, so here we get a client-side
+ // representation of that from the raw IBinder object.
+ mService = new Messenger(service);
+ mBound = true;
+ }
+
+ public void onServiceDisconnected(ComponentName className) {
+ // This is called when the connection with the service has been
+ // unexpectedly disconnected -- that is, its process crashed.
+ mService = null;
+ mBound = false;
+ }
+ };
+
+ public void sayHello(View v) {
+ if (!mBound) return;
+ // Create and send a message to the service, using a supported 'what' value
+ Message msg = Message.obtain(null, MessengerService.MSG_SAY_HELLO, 0, 0);
+ try {
+ mService.send(msg);
+ } catch (RemoteException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.main);
+ }
+
+ @Override
+ protected void onStart() {
+ super.onStart();
+ // Bind to the service
+ bindService(new Intent(this, MessengerService.class), mConnection,
+ Context.BIND_AUTO_CREATE);
+ }
+
+ @Override
+ protected void onStop() {
+ super.onStop();
+ // Unbind from the service
+ if (mBound) {
+ unbindService(mConnection);
+ mBound = false;
+ }
+ }
+}
+</pre>
+
+<p>Perhatikan bahwa contoh ini tidak menampilkan cara layanan merespons klien. Jika ingin
+layanan merespons, Anda juga perlu membuat {@link android.os.Messenger} di klien. Lalu
+saat menerima callback {@link android.content.ServiceConnection#onServiceConnected
+onServiceConnected()}, klien akan mengirim {@link android.os.Message} ke layanan yang berisi
+{@link android.os.Messenger} klien dalam parameter {@link android.os.Message#replyTo}
+metode {@link android.os.Messenger#send send()}.</p>
+
+<p>Anda bisa melihat contoh cara menyediakan pertukaran pesan dua arah dalam contoh <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/MessengerService.html">{@code
+MessengerService.java}</a> (layanan) dan <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/MessengerServiceActivities.html">{@code
+MessengerServiceActivities.java}</a> (klien).</p>
+
+
+
+
+
+<h2 id="Binding">Mengikat ke Layanan</h2>
+
+<p>Komponen-komponen aplikasi (klien) bisa mengikat ke layanan dengan memanggil
+{@link android.content.Context#bindService bindService()}. Sistem Android
+lalu memanggil metode {@link android.app.Service#onBind
+onBind()} layanan, yang menghasilkan {@link android.os.IBinder} untuk berinteraksi dengan layanan.</p>
+
+<p>Pengikatan ini bersifat asinkron. {@link android.content.Context#bindService
+bindService()} segera kembali dan <em>tidak</em> mengembalikan {@link android.os.IBinder} ke
+klien. Untuk menerima {@link android.os.IBinder}, klien harus membuat instance {@link
+android.content.ServiceConnection} dan meneruskannya ke {@link android.content.Context#bindService
+bindService()}. {@link android.content.ServiceConnection} berisi metode callback yang
+dipanggil sistem untuk mengirim {@link android.os.IBinder}.</p>
+
+<p class="note"><strong>Catatan:</strong> Hanya aktivitas, layanan, dan penyedia konten yang bisa mengikat
+ke layanan yang—Anda <strong>tidak bisa</strong> ikat ke layanan dari penerima siaran.</p>
+
+<p>Jadi, untuk mengikat ke layanan dari klien, Anda harus: </p>
+<ol>
+ <li>Mengimplementasikan {@link android.content.ServiceConnection}.
+ <p>Implementasi Anda harus mengesampingkan dua metode callback:</p>
+ <dl>
+ <dt>{@link android.content.ServiceConnection#onServiceConnected onServiceConnected()}</dt>
+ <dd>Sistem memanggil ini untuk mengirim {@link android.os.IBinder} yang dihasilkan oleh
+metode {@link android.app.Service#onBind onBind()} layanan.</dd>
+ <dt>{@link android.content.ServiceConnection#onServiceDisconnected
+onServiceDisconnected()}</dt>
+ <dd>Sistem Android memanggil ini bila koneksi ke layanan putus
+tanpa terduga, seperti ketika layanan mengalami crash atau dimatikan. Ini <em>tidak</em> dipanggil ketika
+klien melepas ikatan.</dd>
+ </dl>
+ </li>
+ <li>Panggil {@link
+android.content.Context#bindService bindService()}, dengan meneruskan implementasi {@link
+android.content.ServiceConnection}. </li>
+ <li>Bila sistem memanggil metode callback {@link android.content.ServiceConnection#onServiceConnected
+onServiceConnected()}, Anda bisa mulai membuat panggilan ke layanan, dengan menggunakan
+metode yang didefinisikan oleh antarmuka.</li>
+ <li>Untuk memutus koneksi dari layanan, panggil {@link
+android.content.Context#unbindService unbindService()}.
+ <p>Bila telah dimusnahkan (destroyed), klien Anda akan melepas ikatan dari layanan, namun Anda harus selalu melepas ikatan
+bila sudah selesai berinteraksi dengan layanan atau bila aktivitas Anda sedang jeda sehingga layanan bisa
+dimatikan saat tidak sedang digunakan. (Waktu yang tepat untuk mengikat dan melepas ikatan dibahas
+selengkapnya di bawah ini.)</p>
+ </li>
+</ol>
+
+<p>Misalnya, cuplikan berikut menghubungkan klien ke layanan yang dibuat di atas dengan
+<a href="#Binder">memperluas kelas Binder</a>, sehingga tinggal mengkonversi
+{@link android.os.IBinder} yang dihasilkan ke kelas {@code LocalService} dan meminta instance {@code
+LocalService}:</p>
+
+<pre>
+LocalService mService;
+private ServiceConnection mConnection = new ServiceConnection() {
+ // Called when the connection with the service is established
+ public void onServiceConnected(ComponentName className, IBinder service) {
+ // Because we have bound to an explicit
+ // service that is running in our own process, we can
+ // cast its IBinder to a concrete class and directly access it.
+ LocalBinder binder = (LocalBinder) service;
+ mService = binder.getService();
+ mBound = true;
+ }
+
+ // Called when the connection with the service disconnects unexpectedly
+ public void onServiceDisconnected(ComponentName className) {
+ Log.e(TAG, "onServiceDisconnected");
+ mBound = false;
+ }
+};
+</pre>
+
+<p>Dengan {@link android.content.ServiceConnection} ini, klien bisa mengikat ke layanan dengan meneruskannya
+ke {@link android.content.Context#bindService bindService()}. Misalnya:</p>
+
+<pre>
+Intent intent = new Intent(this, LocalService.class);
+bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
+</pre>
+
+<ul>
+ <li>Parameter pertama {@link android.content.Context#bindService bindService()} adalah sebuah
+{@link android.content.Intent} yang secara eksplisit menyebutkan layanan yang akan diikat (walaupun intent
+boleh implisit).</li>
+<li>Parameter kedua adalah objek {@link android.content.ServiceConnection}.</li>
+<li>Parameter ketiga adalah tanda (flag) yang menunjukkan opsi pengikatan. Tanda ini biasanya harus {@link
+android.content.Context#BIND_AUTO_CREATE} agar dapat membuat layanan jika belum hidup.
+Nilai-nilai lain yang memungkinkan adalah {@link android.content.Context#BIND_DEBUG_UNBIND}
+dan {@link android.content.Context#BIND_NOT_FOREGROUND}, atau {@code 0} untuk tidak satu pun.</li>
+</ul>
+
+
+<h3>Catatan tambahan</h3>
+
+<p>Berikut ini beberapa catatan penting tentang mengikat ke layanan:</p>
+<ul>
+ <li>Anda harus selalu menjebak eksepsi {@link android.os.DeadObjectException}, yang dilontarkan
+bila koneksi terputus. Inilah satu-satunya eksepsi yang dilontarkan oleh metode jauh.</li>
+ <li>Objek adalah acuan yang dihitung lintas proses. </li>
+ <li>Anda biasanya harus memasangkan pengikatan dan pelepasan ikatan selama
+memasangkan momen membuat dan menghapus daur hidup klien. Misalnya:
+ <ul>
+ <li>Jika Anda hanya perlu berinteraksi dengan layanan saat aktivitas terlihat, Anda
+harus mengikat selama {@link android.app.Activity#onStart onStart()} dan melepas ikatan selama {@link
+android.app.Activity#onStop onStop()}.</li>
+ <li>Jika Anda ingin aktivitas menerima tanggapan bahkan saat dihentikan di
+latar belakang, Anda bisa mengikat selama {@link android.app.Activity#onCreate onCreate()} dan melepas ikatan
+selama {@link android.app.Activity#onDestroy onDestroy()}. Berhati-hatilah karena hal ini menyiratkan aktivitas
+Anda perlu menggunakan layanan selama dijalankan (sekalipun di latar belakang), jadi jika
+layanan berada dalam proses lain, Anda meningkatkan bobot proses dan semakin besar
+kemungkinan sistem akan mematikannya.</li>
+ </ul>
+ <p class="note"><strong>Catatan:</strong> Anda biasanya <strong>tidak</strong> boleh mengikat dan melepas ikatan
+selama {@link android.app.Activity#onResume onResume()} aktivitas Anda dan {@link
+android.app.Activity#onPause onPause()}, karena callback ini terjadi pada setiap transisi daur hidup
+dan Anda harus menjaga pemrosesan yang terjadi pada transisi ini tetap minim. Juga, jika
+banyak aktivitas dalam aplikasi Anda mengikat ke layanan yang sama dan ada transisi antara
+dua aktivitas, layanan bisa dimusnahkan dan dibuat lagi sambil aktivitas saat ini melepas ikatan
+(selama jeda) sebelum aktivitas berikutnya mengikat (selama lanjutkan). (Transisi aktivitas ini untuk cara
+aktivitas mengoordinasikan daur hidupnya dijelaskan dalam dokumen <a href="{@docRoot}guide/components/activities.html#CoordinatingActivities">Aktivitas</a>
+.)</p>
+</ul>
+
+<p>Untuk contoh kode selengkapnya, yang menampilkan cara mengikat ke layanan, lihat kelas <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.html">{@code
+RemoteService.java}</a> dalam <a href="{@docRoot}resources/samples/ApiDemos/index.html">ApiDemos</a>.</p>
+
+
+
+
+
+<h2 id="Lifecycle">Mengelola Daur Hidup Layanan Terikat</h2>
+
+<p>Bila layanan dilepas ikatannya dari semua klien, sistem Android akan menghapusnya (kecuali jika layanan juga
+dimulai dengan {@link android.app.Service#onStartCommand onStartCommand()}). Dengan demikian, Anda tidak harus
+mengelola daur hidup layanan jika layanan itu murni sebuah layanan
+terikat—yang dikelola sistem Android untuk Anda berdasarkan apakah layanan terikat ke klien atau tidak.</p>
+
+<p>Akan tetapi, Jika Anda memilih untuk mengimplementasikan metode callback {@link android.app.Service#onStartCommand
+onStartCommand()}, maka Anda harus menghentikan layanan secara eksplisit, karena layanan
+sekarang dianggap telah <em>dimulai</em>. Dalam hal ini, layanan akan berjalan hingga layanan
+menghentikan dirinya sendiri dengan {@link android.app.Service#stopSelf()} atau panggilan komponen lain {@link
+android.content.Context#stopService stopService()}, terlepas dari apakah layanan terikat ke
+klien atau tidak.</p>
+
+<p>Selain itu, jika layanan Anda telah dimulai dan menerima pengikatan, maka saat sistem memanggil
+metode {@link android.app.Service#onUnbind onUnbind()}, Anda bisa memilih untuk mengembalikan
+{@code true} jika ingin menerima panggilan ke {@link android.app.Service#onRebind
+onRebind()} bila nanti klien mengikat ke layanan (sebagai ganti menerima panggilan ke {@link
+android.app.Service#onBind onBind()}). {@link android.app.Service#onRebind
+onRebind()} akan menghasilkan void, namun klien tetap menerima {@link android.os.IBinder} dalam callback
+{@link android.content.ServiceConnection#onServiceConnected onServiceConnected()}.
+Di bawah ini adalah gambar 1 yang mengilustrasikan logika untuk jenis daur hidup ini.</p>
+
+
+<img src="{@docRoot}images/fundamentals/service_binding_tree_lifecycle.png" alt="" />
+<p class="img-caption"><strong>Gambar 1.</strong> Daur hidup untuk layanan yang dimulai
+dan juga memungkinkan pengikatan.</p>
+
+
+<p>Untuk informasi selengkapnya tentang daur hidup layanan yang telah dimulai, lihat dokumen <a href="{@docRoot}guide/components/services.html#Lifecycle">Layanan</a>.</p>
+
+
+
+
diff --git a/docs/html-intl/intl/id/guide/components/fragments.jd b/docs/html-intl/intl/id/guide/components/fragments.jd
new file mode 100644
index 0000000..9f7199c
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/components/fragments.jd
@@ -0,0 +1,812 @@
+page.title=Fragmen
+parent.title=Aktivitas
+parent.link=activities.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+ <h2>Dalam dokumen ini</h2>
+ <ol>
+ <li><a href="#Design">Filosofi Desain</a></li>
+ <li><a href="#Creating">Membuat Fragmen</a>
+ <ol>
+ <li><a href="#UI">Menambahkan antarmuka pengguna</a></li>
+ <li><a href="#Adding">Menambahkan fragmen ke aktivitas</a></li>
+ </ol>
+ </li>
+ <li><a href="#Managing">Mengelola Fragmen</a></li>
+ <li><a href="#Transactions">Melakukan Transaksi Fragmen</a></li>
+ <li><a href="#CommunicatingWithActivity">Berkomunikasi dengan Aktivitas</a>
+ <ol>
+ <li><a href="#EventCallbacks">Membuat callback kejadian pada aktivitas</a></li>
+ <li><a href="#ActionBar">Menambahkan item ke Action-Bar</a></li>
+ </ol>
+ </li>
+ <li><a href="#Lifecycle">Menangani Daur Hidup Fragmen</a>
+ <ol>
+ <li><a href="#CoordinatingWithActivity">Mengoordinasi dengan daur hidup aktivitas</a></li>
+ </ol>
+ </li>
+ <li><a href="#Example">Contoh</a></li>
+ </ol>
+
+ <h2>Kelas-kelas utama</h2>
+ <ol>
+ <li>{@link android.app.Fragment}</li>
+ <li>{@link android.app.FragmentManager}</li>
+ <li>{@link android.app.FragmentTransaction}</li>
+ </ol>
+
+ <h2>Lihat juga</h2>
+ <ol>
+ <li><a href="{@docRoot}training/basics/fragments/index.html">Membangun UI Dinamis dengan Fragmen</a></li>
+ <li><a href="{@docRoot}guide/practices/tablets-and-handsets.html">Mendukung Tablet
+dan Handset</a></li>
+ </ol>
+</div>
+</div>
+
+<p>{@link android.app.Fragment} mewakili perilaku atau bagian dari antarmuka pengguna dalam
+{@link android.app.Activity}. Anda bisa mengombinasikan beberapa fragmen dalam satu aktivitas untuk membangun UI
+multipanel dan menggunakan kembali sebuah fragmen dalam beberapa aktivitas. Anda bisa menganggap fragmen sebagai bagian
+modular dari aktivitas, yang memiliki daur hidup sendiri, menerima kejadian input sendiri, dan
+yang bisa Anda tambahkan atau hapus saat aktivitas berjalan (semacam "sub aktivitas" yang
+bisa digunakan kembali dalam aktivitas berbeda).</p>
+
+<p>Fragmen harus selalu tertanam dalam aktivitas dan daur hidup fragmen secara langsung
+dipengaruhi oleh daur hidup aktivitas host-nya. Misalnya, saat aktivitas dihentikan sementara,
+semua fragmen di dalamnya juga dihentikan sementara, dan bila aktivitas dimusnahkan, semua fragmen juga demikian. Akan tetapi, saat
+aktivitas berjalan (dalam <a href="{@docRoot}guide/components/activities.html#Lifecycle">status daur hidup</a> <em>dilanjutkan</em>, Anda bisa
+memanipulasi setiap fragmen secara terpisah, seperti menambah atau menghapusnya. Saat melakukan transaksi
+fragmen, Anda juga bisa menambahkannya ke back-stack yang dikelola oleh aktivitas
+—setiap entri back-stack merupakan record transaksi fragmen yang
+terjadi. Dengan back-stack pengguna dapat membalikkan transaksi fragmen (mengarah mundur),
+dengan menekan tombol <em>Back</em>.</p>
+
+<p>Bila Anda menambahkan fragmen sebagai bagian dari layout aktivitas, fragmen itu berada dalam {@link
+android.view.ViewGroup} di hierarki tampilan aktivitas tersebut dan fragmen mendefinisikan
+layout
+tampilannya sendiri. Anda bisa menyisipkan fragmen ke dalam layout aktivitas dengan mendeklarasikan fragmen dalam file layout aktivitas
+, sebagai elemen {@code <fragment>}, atau dari kode aplikasi dengan menambahkannya ke
+ {@link android.view.ViewGroup} yang ada. Akan tetapi, fragmen tidak harus menjadi bagian dari
+layout aktivitas; Anda juga bisa menggunakan fragmen tanpa UI-nya sendiri sebagai pekerja tak terlihat untuk
+aktivitas tersebut.</p>
+
+<p>Dokumen ini menjelaskan cara membangun aplikasi menggunakan fragmen, termasuk
+cara fragmen mempertahankan statusnya bila ditambahkan ke back-stack aktivitas, berbagi
+kejadian dengan aktivitas, dan fragmen lain dalam aktivitas, berkontribusi pada action-bar
+aktivitas, dan lainnya.</p>
+
+
+<h2 id="Design">Filosofi Desain</h2>
+
+<p>Android memperkenalkan fragmen di Android 3.0 (API level 11), terutama untuk mendukung desain UI yang lebih
+dinamis dan fleksibel pada layar besar, seperti tablet. Karena
+layar tablet jauh lebih besar daripada layar handset, maka lebih banyak ruang untuk mengombinasikan dan
+bertukar komponen UI. Fragmen memungkinkan desain seperti itu tanpa perlu mengelola perubahan
+kompleks pada hierarki tampilan. Dengan membagi layout aktivitas menjadi beberapa fragmen, Anda bisa
+mengubah penampilan aktivitas saat runtime dan mempertahankan perubahan itu di back-stack
+yang dikelola oleh aktivitas.</p>
+
+<p>Misalnya, aplikasi berita bisa menggunakan satu fragmen untuk menampilkan daftar artikel di
+sebelah kiri dan fragmen lainnya untuk menampilkan artikel di sebelah kanan—kedua fragmen ini muncul di satu
+aktivitas, berdampingan, dan masing-masing fragmen memiliki serangkaian metode callback daur hidup dan menangani kejadian input
+penggunanya sendiri. Sehingga, sebagai ganti menggunakan satu aktivitas untuk memilih
+artikel dan aktivitas lainnya untuk membaca artikel, pengguna bisa memilih artikel dan membaca semuanya dalam
+aktivitas yang sama, sebagaimana diilustrasikan dalam layout tablet pada gambar 1.</p>
+
+<p>Anda harus mendesain masing-masing fragmen sebagai komponen aktivitas modular dan bisa digunakan kembali. Yakni, karena
+setiap fragmen mendefinisikan layoutnya dan perilakunya dengan callback daur hidupnya sendiri, Anda bisa memasukkan
+satu fragmen dalam banyak aktivitas, sehingga Anda harus mendesainnya untuk digunakan kembali dan mencegah
+memanipulasi satu fragmen dari fragmen lain secara langsung. Ini terutama penting karena dengan
+fragmen modular Anda bisa mengubah kombinasi fragmen untuk ukuran layar berbeda. Saat mendesain aplikasi
+untuk mendukung tablet maupun handset, Anda bisa menggunakan kembali fragmen dalam
+konfigurasi layout berbeda untuk mengoptimalkan pengalaman pengguna berdasarkan ruang layar yang tersedia. Misalnya
+, pada handset, fragmen mungkin perlu dipisahkan untuk menyediakan UI panel tunggal
+bila lebih dari satu yang tidak cocok dalam aktivitas yang sama.</p>
+
+<img src="{@docRoot}images/fundamentals/fragments.png" alt="" />
+<p class="img-caption"><strong>Gambar 1.</strong> Contoh cara dua modul UI yang didefinisikan oleh
+ fragmen bisa digabungkan ke dalam satu aktivitas untuk desain tablet, namun dipisahkan untuk
+desain handset.</p>
+
+<p>Misalnya—untuk melanjutkan contoh aplikasi berita— aplikasi bisa menanamkan
+dua fragmen dalam <em>Aktivitas A</em>, saat berjalan pada perangkat berukuran tablet. Akan tetapi, pada
+layar berukuran handset, ruang untuk kedua fragmen tidak cukup, sehingga <em>Aktivitas A</em> hanya
+menyertakan fragmen untuk daftar artikel, dan saat pengguna memilih artikel,
+<em>Aktivitas B</em> akan dimulai, termasuk fragmen kedua untuk membaca artikel. Sehingga, aplikasi mendukung
+tablet dan handset dengan menggunakan kembali fragmen dalam kombinasi berbeda, seperti diilustrasikan dalam
+gambar 1.</p>
+
+<p>Untuk informasi selengkapnya tentang mendesain aplikasi menggunakan kombinasi fragmen berbeda
+untuk konfigurasi layar berbeda, lihat panduan untuk <a href="{@docRoot}guide/practices/tablets-and-handsets.html">Mendukung Tablet dan Handset</a>.</p>
+
+
+
+<h2 id="Creating">Membuat Fragmen</h2>
+
+<div class="figure" style="width:327px">
+<img src="{@docRoot}images/fragment_lifecycle.png" alt="" />
+<p class="img-caption"><strong>Gambar 2.</strong> Daur hidup fragmen (saat
+ aktivitasnya berjalan).</p>
+</div>
+
+<p>Untuk membuat fragmen, Anda harus membuat subkelas {@link android.app.Fragment} (atau
+subkelasnya yang ada). Kelas {@link android.app.Fragment} memiliki kode yang mirip seperti
+{@link android.app.Activity}. Kelas ini memiliki metode callback yang serupa dengan aktivitas, seperti
+ {@link android.app.Fragment#onCreate onCreate()}, {@link android.app.Fragment#onStart onStart()},
+{@link android.app.Fragment#onPause onPause()}, dan {@link android.app.Fragment#onStop onStop()}. Sebenarnya
+, jika Anda mengkonversi aplikasi Android saat ini untuk menggunakan fragmen, Anda mungkin cukup memindahkan
+kode dari metode callback aktivitas ke masing-masing metode callback
+fragmen.</p>
+
+<p>Biasanya, Anda harus mengimplementasikan setidaknya metode daur hidup berikut ini:</p>
+
+<dl>
+ <dt>{@link android.app.Fragment#onCreate onCreate()}</dt>
+ <dd>Sistem akan memanggilnya saat membuat fragmen. Dalam implementasi, Anda harus
+menginisialisasi komponen penting dari fragmen yang ingin dipertahankan saat fragmen
+dihentikan sementara atau dihentikan, kemudian dilanjutkan.</dd>
+ <dt>{@link android.app.Fragment#onCreateView onCreateView()}</dt>
+ <dd>Sistem akan memanggilnya saat fragmen menggambar antarmuka penggunanya
+untuk yang pertama kali. Untuk menggambar UI fragmen, Anda harus mengembalikan {@link android.view.View} dari metode
+ini yang menjadi akar layout fragmen. Hasil yang dikembalikan bisa berupa null jika
+fragmen tidak menyediakan UI.</dd>
+ <dt>{@link android.app.Activity#onPause onPause()}</dt>
+ <dd>Sistem akan memanggil metode ini sebagai indikasi pertama bahwa pengguna sedang meninggalkan
+fragmen Anda (walau itu tidak selalu berarti fragmen sedang dimusnahkan). Inilah biasanya tempat Anda
+harus mengikat setiap perubahan yang harus dipertahankan selepas sesi pengguna saat ini (karena
+pengguna mungkin tidak kembali).</dd>
+</dl>
+
+<p>Kebanyakan aplikasi harus mengimplementasikan setidaknya tiga metode ini untuk setiap fragmen, namun ada
+beberapa metode callback lain yang juga harus Anda gunakan untuk menangani berbagai tahap
+daur hidup fragmen. Semua metode callback daur hidup akan dibahas secara lebih detail, di bagian
+tentang <a href="#Lifecycle">Menangani Daur Hidup Fragmen</a>.</p>
+
+
+<p>Ada juga beberapa subkelas yang mungkin ingin diperpanjang, sebagai ganti kelas basis {@link
+android.app.Fragment}:</p>
+
+<dl>
+ <dt>{@link android.app.DialogFragment}</dt>
+ <dd>Menampilkan dialog mengambang. Penggunaan kelas ini untuk membuat dialog merupakan alternatif yang baik dari
+penggunaan metode helper dialog di kelas {@link android.app.Activity}, karena Anda bisa
+menyatukan dialog fragmen ke dalam back-stack fragmen yang dikelola oleh aktivitas,
+sehingga pengguna bisa kembali ke fragmen yang ditinggalkan.</dd>
+
+ <dt>{@link android.app.ListFragment}</dt>
+ <dd>Menampilkan daftar item yang dikelola oleh adaptor (seperti {@link
+android.widget.SimpleCursorAdapter}), serupa dengan {@link android.app.ListActivity}. Menampilkan
+beberapa metode pengelolaan daftar tampilan seperti callback {@link
+android.app.ListFragment#onListItemClick(ListView,View,int,long) onListItemClick()} untuk
+menangani kejadian klik.</dd>
+
+ <dt>{@link android.preference.PreferenceFragment}</dt>
+ <dd>Menampilkan hierarki objek {@link android.preference.Preference} sebagai daftar, serupa dengan
+{@link android.preference.PreferenceActivity}. Hal ini berguna saat membuat aktivitas
+"pengaturan" untuk aplikasi Anda.</dd>
+</dl>
+
+
+<h3 id="UI">Menambahkan antarmuka pengguna</h3>
+
+<p>Fragmen biasanya digunakan sebagai bagian dari antarmuka pengguna aktivitas dan menyumbangkan
+layoutnya sendiri ke aktivitas.</p>
+
+<p>Untuk menyediakan layout fragmen, Anda harus mengimplementasikan metode callback {@link
+android.app.Fragment#onCreateView onCreateView()}, yang dipanggil sistem Android
+bila tiba saatnya fragmen menggambar layoutnya. Implementasi Anda atas metode ini harus mengembalikan
+{@link android.view.View} yang menjadi akar layout fragmen.</p>
+
+<p class="note"><strong>Catatan:</strong> Jika fragmen adalah subkelas {@link
+android.app.ListFragment}, implementasi default akan mengembalikan {@link android.widget.ListView} dari
+{@link android.app.Fragment#onCreateView onCreateView()}, sehingga Anda tidak perlu mengimplementasikannya.</p>
+
+<p>Untuk mengembalikan layout dari {@link
+android.app.Fragment#onCreateView onCreateView()}, Anda bisa memekarkannya dari <a href="{@docRoot}guide/topics/resources/layout-resource.html">sumber daya layout</a> yang didefinisikan di XML. Untuk
+membantu melakukannya, {@link android.app.Fragment#onCreateView onCreateView()} menyediakan objek
+{@link android.view.LayoutInflater}.</p>
+
+<p>Misalnya, ini adalah subkelas {@link android.app.Fragment} yang memuat layout dari file
+{@code example_fragment.xml}:</p>
+
+<pre>
+public static class ExampleFragment extends Fragment {
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ return inflater.inflate(R.layout.example_fragment, container, false);
+ }
+}
+</pre>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+ <h3>Membuat layout</h3>
+ <p>Dalam contoh di atas, {@code R.layout.example_fragment} merupakan acuan ke sumber daya layout
+bernama {@code example_fragment.xml} yang tersimpan dalam sumber daya aplikasi. Untuk informasi tentang cara
+membuat layout di XML, lihat dokumentasi
+<a href="{@docRoot}guide/topics/ui/index.html">Antarmuka Pengguna</a>.</p>
+</div>
+</div>
+
+<p>Parameter {@code container} yang diteruskan ke {@link android.app.Fragment#onCreateView
+onCreateView()} adalah induk {@link android.view.ViewGroup} (dari layout aktivitas) tempat
+layout fragmen
+akan disisipkan. Parameter {@code savedInstanceState} adalah {@link android.os.Bundle} yang
+menyediakan data tentang instance fragmen sebelumnya, jika fragmen dilanjutkan
+(status pemulihan dibahas selengkapnya di bagian tentang <a href="#Lifecycle">Menangani
+Daur Hidup Fragmen</a>).</p>
+
+<p>Metode {@link android.view.LayoutInflater#inflate(int,ViewGroup,boolean) inflate()} membutuhkan
+tiga argumen:</p>
+<ul>
+ <li>ID sumber daya layout yang ingin dimekarkan.</li>
+ <li>{@link android.view.ViewGroup} akan menjadi induk dari layout yang dimekarkan. {@code
+container} perlu diteruskan agar sistem menerapkan parameter layout ke tampilan akar layout
+yang dimekarkan, yang ditetapkan dalam tampilan induk yang akan dituju.</li>
+ <li>Boolean yang menunjukkan apakah layout akan dimekarkan harus ditempelkan pada {@link
+android.view.ViewGroup} (parameter kedua) selama pemekaran. (Dalam hal ini, ini
+salah karena sistem sudah memasukkan layout yang dimekarkan ke dalam {@code
+container}—meneruskan benar akan membuat tampilan grup yang berlebihan dalam layout akhir.)</li>
+</ul>
+
+<p>Anda kini telah melihat cara membuat fragmen yang menyediakan layout. Berikutnya, Anda perlu menambahkan
+fragmen ke aktivitas.</p>
+
+
+
+<h3 id="Adding">Menambahkan fragmen ke aktivitas</h3>
+
+<p>Biasanya, fragmen berkontribusi pada sebagian UI ke aktivitas host, yang ditanamkan sebagai
+bagian dari hierarki tampilan keseluruhan aktivitas. Ada dua cara untuk menambahkan fragmen ke layout
+aktivitas:</p>
+
+<ul>
+ <li><b>Deklarasikan fragmen dalam file layout aktivitas.</b>
+<p>Dalam hal ini, Anda bisa
+menetapkan properti layout fragmen seakan-akan sebuah tampilan. Misalnya, berikut ini adalah file
+layout untuk aktivitas dengan dua fragmen:</p>
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="horizontal"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+ <fragment android:name="com.example.news.ArticleListFragment"
+ android:id="@+id/list"
+ android:layout_weight="1"
+ android:layout_width="0dp"
+ android:layout_height="match_parent" />
+ <fragment android:name="com.example.news.ArticleReaderFragment"
+ android:id="@+id/viewer"
+ android:layout_weight="2"
+ android:layout_width="0dp"
+ android:layout_height="match_parent" />
+</LinearLayout>
+</pre>
+ <p>Atribut {@code android:name} dalam {@code <fragment>} menetapkan kelas {@link
+android.app.Fragment} untuk dibuat instance-nya dalam layout.</p>
+
+<p>Saat sistem membuat layout aktivitas, sistem membuat instance setiap fragmen sebagaimana yang ditetapkan dalam layout
+dan memanggil metode {@link android.app.Fragment#onCreateView onCreateView()} masing-masing,
+untuk mengambil setiap fragmen. Sistem akan menyisipkan {@link android.view.View} yang dikembalikan langsung oleh fragmen,
+ menggantikan elemen {@code <fragment>}.</p>
+
+<div class="note">
+ <p><strong>Catatan:</strong> Setiap fragmen memerlukan identifier
+unik yang bisa digunakan sistem untuk memulihkan fragmen jika aktivitas dimulai kembali (dan identifier yang bisa digunakan menangkap
+fragmen untuk melakukan transaksi, seperti menghapusnya). Ada tiga cara untuk memberikan
+ID bagi fragmen:</p>
+ <ul>
+ <li>Memberikan atribut {@code android:id} bersama ID unik.</li>
+ <li>Memberikan atribut {@code android:tag} bersama string unik.</li>
+ <li>Jika Anda tidak memberikan dua hal tersebut, sistem akan menggunakan ID
+tampilan kontainer.</li>
+ </ul>
+</div>
+ </li>
+
+ <li><b>Atau, secara programatis tambahkan fragmen ke {@link android.view.ViewGroup} yang ada.</b>
+<p>Kapan saja saat aktivitas berjalan, Anda bisa menambahkan fragmen ke layout aktivitas. Anda
+cukup menetapkan {@link
+android.view.ViewGroup} di tempat memasukkan fragmen.</p>
+ <p>Untuk membuat transaksi fragmen dalam aktivitas (seperti menambah, menghapus, atau mengganti
+fragmen), Anda harus menggunakan API dari {@link android.app.FragmentTransaction}. Anda bisa mengambil instance
+ {@link android.app.FragmentTransaction} dari {@link android.app.Activity} seperti ini:</p>
+
+<pre>
+FragmentManager fragmentManager = {@link android.app.Activity#getFragmentManager()}
+FragmentTransaction fragmentTransaction = fragmentManager.{@link android.app.FragmentManager#beginTransaction()};
+</pre>
+
+<p>Selanjutnya Anda bisa menambahkan fragmen menggunakan metode {@link
+android.app.FragmentTransaction#add(int,Fragment) add()}, dengan menetapkan fragmen yang akan ditambahkan dan
+tampilan tempat menyisipkannya. Misalnya:</p>
+
+<pre>
+ExampleFragment fragment = new ExampleFragment();
+fragmentTransaction.add(R.id.fragment_container, fragment);
+fragmentTransaction.commit();
+</pre>
+
+ <p>Argumen pertama yang diteruskan ke {@link android.app.FragmentTransaction#add(int,Fragment) add()}
+ adalah {@link android.view.ViewGroup} tempat fragmen harus dimasukkan, yang ditetapkan oleh
+ID sumber daya, dan parameter kedua merupakan fragmen yang akan ditambahkan.</p>
+ <p>Setelah membuat perubahan dengan
+{@link android.app.FragmentTransaction}, Anda harus
+ memanggil {@link android.app.FragmentTransaction#commit} untuk menerapkan perubahan.</p>
+ </li>
+</ul>
+
+
+<h4 id="AddingWithoutUI">Menambahkan fragmen tanpa UI</h4>
+
+<p>Contoh di atas menampilkan cara menambahkan fragmen ke aktivitas untuk menyediakan UI. Akan tetapi,
+Anda juga bisa menggunakan fragmen untuk menyediakan perilaku latar belakang bagi aktivitas tanpa menampilkan UI
+tambahan.</p>
+
+<p>Untuk menambahkan fragmen tanpa UI, tambahkan fragmen dari aktivitas menggunakan {@link
+android.app.FragmentTransaction#add(Fragment,String)} (dengan menyediakan string unik "tag" untuk fragmen
+, bukan ID tampilan). Ini akan menambahkan fragmen, namun, karena tidak dikaitkan dengan tampilan
+dalam layout aktivitas, ini tidak akan menerima panggilan ke {@link
+android.app.Fragment#onCreateView onCreateView()}. Jadi Anda tidak perlu mengimplementasikan metode itu.</p>
+
+<p>Menyediakan tag string untuk fragmen tidak hanya untuk fragmen non-UI—Anda juga bisa
+menyediakan tag string untuk fragmen yang memiliki UI—namun jika fragmen tidak memiliki UI
+, maka tag string adalah satu-satunya cara untuk mengidentifikasinya. Jika Anda ingin mendapatkan fragmen dari
+aktivitas nantinya, Anda perlu menggunakan {@link android.app.FragmentManager#findFragmentByTag
+findFragmentByTag()}.</p>
+
+<p>Untuk contoh aktivitas yang menggunakan fragmen sebagai pekerja latar belakang, tanpa UI, lihat sampel {@code
+FragmentRetainInstance.java}, yang disertakan dalam sampel SDK (tersedia melalui
+Android SDK Manager) dan terletak di sistem Anda sebagai
+<code><sdk_root>/APIDemos/app/src/main/java/com/example/android/apis/app/FragmentRetainInstance.java</code>.</p>
+
+
+
+<h2 id="Managing">Mengelola Fragmen</h2>
+
+<p>Untuk mengelola fragmen dalam aktivitas, Anda perlu menggunakan {@link android.app.FragmentManager}. Untuk
+mendapatkannya, panggil {@link android.app.Activity#getFragmentManager()} dari aktivitas Anda.</p>
+
+<p>Beberapa hal yang dapat Anda lakukan dengan {@link android.app.FragmentManager} antara lain:</p>
+
+<ul>
+ <li>Dapatkan fragmen yang ada di aktivitas dengan {@link
+android.app.FragmentManager#findFragmentById findFragmentById()} (untuk fragmen yang menyediakan UI dalam
+layout aktivitas) atau {@link android.app.FragmentManager#findFragmentByTag
+findFragmentByTag()} (untuk fragmen yang menyediakan atau tidak menyediakan UI).</li>
+ <li>Tarik fragmen dari back-stack, dengan {@link
+android.app.FragmentManager#popBackStack()} (mensimulasikan perintah <em>Back</em> oleh pengguna).</li>
+ <li>Daftarkan listener untuk perubahan pada back-stack, dengan {@link
+android.app.FragmentManager#addOnBackStackChangedListener addOnBackStackChangedListener()}.</li>
+</ul>
+
+<p>Untuk informasi selengkapnya tentang metode ini dan hal lainnya, lihat dokumentasi kelas {@link
+android.app.FragmentManager}.</p>
+
+<p>Seperti yang ditunjukkan di bagian sebelumnya, Anda juga bisa menggunakan {@link android.app.FragmentManager}
+untuk membuka {@link android.app.FragmentTransaction}, sehingga Anda bisa melakukan transaksi, seperti
+menambah dan menghapus fragmen.</p>
+
+
+<h2 id="Transactions">Melakukan Transaksi Fragmen</h2>
+
+<p>Fitur menarik terkait penggunaan fragmen di aktivitas adalah kemampuan menambah, menghapus, mengganti,
+dan melakukan tindakan lain dengannya, sebagai respons atas interaksi pengguna. Setiap set perubahan
+yang Anda lakukan untuk aktivitas disebut transaksi dan Anda bisa melakukan transaksi menggunakan API di {@link
+android.app.FragmentTransaction}. Anda juga bisa menyimpan setiap transaksi ke back-stack yang dikelola
+aktivitas, sehingga pengguna bisa mengarah mundur melalui perubahan fragmen (mirip mengarah
+mundur melalui aktivitas).</p>
+
+<p>Anda bisa mengambil instance {@link android.app.FragmentTransaction} dari {@link
+android.app.FragmentManager} seperti ini:</p>
+
+<pre>
+FragmentManager fragmentManager = {@link android.app.Activity#getFragmentManager()};
+FragmentTransaction fragmentTransaction = fragmentManager.{@link android.app.FragmentManager#beginTransaction()};
+</pre>
+
+<p>Setiap transaksi merupakan serangkaian perubahan yang ingin dilakukan pada waktu yang sama. Anda bisa
+mengatur semua perubahan yang ingin dilakukan untuk transaksi mana saja menggunakan metode seperti {@link
+android.app.FragmentTransaction#add add()}, {@link android.app.FragmentTransaction#remove remove()},
+dan {@link android.app.FragmentTransaction#replace replace()}. Kemudian, untuk menerapkan transaksi
+pada aktivitas, Anda harus memanggil {@link android.app.FragmentTransaction#commit()}.</p>
+</dl>
+
+<p>Akan tetapi, sebelum memanggil {@link
+android.app.FragmentTransaction#commit()}, Anda mungkin perlu memanggil {@link
+android.app.FragmentTransaction#addToBackStack addToBackStack()}, untuk menambahkan transaksi
+ke back-stack dari transaksi fragmen. Back-stack ini dikelola oleh aktivitas dan memungkinkan
+pengguna kembali ke status fragmen sebelumnya, dengan menekan tombol <em>Back</em>.</p>
+
+<p>Misalnya, berikut ini cara mengganti satu fragmen dengan yang fragmen yang lain, dan mempertahankan
+status sebelumnya di back-stack:</p>
+
+<pre>
+// Create new fragment and transaction
+Fragment newFragment = new ExampleFragment();
+FragmentTransaction transaction = getFragmentManager().beginTransaction();
+
+// Replace whatever is in the fragment_container view with this fragment,
+// and add the transaction to the back stack
+transaction.replace(R.id.fragment_container, newFragment);
+transaction.addToBackStack(null);
+
+// Commit the transaction
+transaction.commit();
+</pre>
+
+<p>Dalam contoh ini, {@code newFragment} menggantikan fragmen apa saja (jika ada) yang saat ini berada dalam
+kontainer layout yang diidentifikasi oleh ID {@code R.id.fragment_container}. Dengan memanggil @link
+android.app.FragmentTransaction#addToBackStack addToBackStack()}, transaksi yang diganti
+disimpan ke back-stack sehingga pengguna bisa membalikkan transaksi dan mengembalikan fragmen
+sebelumnya dengan menekan tombol <em>Back</em>.</p>
+
+<p>Jika Anda menambahkan beberapa perubahan pada transaksi (seperti {@link
+android.app.FragmentTransaction#add add()} atau {@link android.app.FragmentTransaction#remove
+remove()}) dan panggil {@link
+android.app.FragmentTransaction#addToBackStack addToBackStack()}, maka semua perubahan akan diterapkan
+sebelum Anda memanggil {@link android.app.FragmentTransaction#commit commit()} akan ditambahkan ke
+back-stack sebagai satu transaksi dan tombol <em>Back</em> akan membalikannya semua.</p>
+
+<p>Urutan menambahkan perubahan pada {@link android.app.FragmentTransaction} tidak berpengaruh,
+kecuali:</p>
+<ul>
+ <li>Anda harus memanggil {@link android.app.FragmentTransaction#commit()} paling akhir</li>
+ <li>Jika Anda menambahkan beberapa fragmen ke kontainer yang sama, maka
+urutan penambahannya akan menentukan urutan munculnya dalam hierarki tampilan</li>
+</ul>
+
+<p>Jika Anda tidak memanggil {@link android.app.FragmentTransaction#addToBackStack(String)
+addToBackStack()} saat melakukan transaksi yang menghapus fragmen, maka fragmen itu
+akan dimusnahkan bila transaksi diikat dan pengguna tidak bisa mengarah kembali ke sana. Sedangkan, jika
+Anda memanggil {@link android.app.FragmentTransaction#addToBackStack(String) addToBackStack()} saat
+menghapus fragmen, maka fragmen itu akan <em>dihentikan</em> dan akan dilanjutkan jika pengguna mengarah
+kembali.</p>
+
+<p class="note"><strong>Tip:</strong> Untuk setiap transaksi fragmen, Anda bisa menerapkan animasi
+transisi, dengan memanggil {@link android.app.FragmentTransaction#setTransition setTransition()} sebelum
+mengikatnya.</p>
+
+<p>Memanggil {@link android.app.FragmentTransaction#commit()} tidak akan langsung menjalankan
+transaksi. Namun sebuah jadwal akan dibuat untuk dijalankan pada thread UI aktivitas (thread "utama")
+begitu thread bisa melakukannya. Akan tetapi, jika perlu Anda bisa memanggil {@link
+android.app.FragmentManager#executePendingTransactions()} dari thread UI untuk segera
+mengeksekusi transaksi yang diserahkan oleh {@link android.app.FragmentTransaction#commit()}. Hal itu
+biasanya tidak perlu kecuali jika transaksi merupakan dependensi bagi pekerjaan dalam thread lain.</p>
+
+<p class="caution"><strong>Perhatian:</strong> Anda bisa mengikat transaksi menggunakan {@link
+android.app.FragmentTransaction#commit commit()} hanya sebelum aktivitas <a href="{@docRoot}guide/components/activities.html#SavingActivityState">menyimpan
+statusnya</a> (saat pengguna meninggalkan aktivitas). Jika Anda mencoba mengikatnya setelah itu,
+eksepsi akan dilontarkan. Ini karena status setelah pengikatan bisa hilang jika aktivitas
+perlu dipulihkan. Untuk situasi yang memperbolehkan Anda meniadakan pengikatan (commit), gunakan {@link
+android.app.FragmentTransaction#commitAllowingStateLoss()}.</p>
+
+
+
+
+<h2 id="CommunicatingWithActivity">Berkomunikasi dengan Aktivitas</h2>
+
+<p>Meskipun {@link android.app.Fragment} diimplementasikan sebagai objek yang tidak bergantung pada
+{@link android.app.Activity} dan bisa digunakan dalam banyak aktivitas, instance tertentu
+dari fragmen secara langsung terkait dengan aktivitas yang dimuatnya.</p>
+
+<p>Khususnya, fragmen bisa mengakses instance {@link android.app.Activity} dengan {@link
+android.app.Fragment#getActivity()} dan dengan mudah melakukan tugas-tugas seperti mencari tampilan dalam
+ layout aktivitas:</p>
+
+<pre>
+View listView = {@link android.app.Fragment#getActivity()}.{@link android.app.Activity#findViewById findViewById}(R.id.list);
+</pre>
+
+<p>Demikian pula, aktivitas Anda bisa memanggil metode di fragmen dengan meminta acuan ke
+{@link android.app.Fragment} dari {@link android.app.FragmentManager}, menggunakan {@link
+android.app.FragmentManager#findFragmentById findFragmentById()} atau {@link
+android.app.FragmentManager#findFragmentByTag findFragmentByTag()}. Misalnya:</p>
+
+<pre>
+ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
+</pre>
+
+
+<h3 id="EventCallbacks">Membuat callback kejadian pada aktivitas</h3>
+
+<p>Dalam beberapa kasus, Anda mungkin perlu fragmen untuk berbagi kejadian dengan aktivitas. Cara yang baik untuk melakukannya
+adalah mendefinisikan antarmuka callback di dalam fragmen dan mengharuskan aktivitas host
+mengimplementasikannya. Saat aktivitas menerima callback melalui antarmuka, aktivitas akan bisa berbagi informasi itu
+dengan fragmen lain dalam layout jika perlu.</p>
+
+<p>Misalnya, jika sebuah aplikasi berita memiliki dua fragmen dalam aktivitas—satu untuk menampilkan daftar
+artikel (fragmen A) dan satu lagi untuk menampilkan artikel (fragmen B)—maka fragmen A harus
+memberi tahu aktivitas bila item daftar dipilih sehingga aktivitas bisa memberi tahu fragmen B untuk menampilkan artikel. Dalam
+hal ini, antarmuka {@code OnArticleSelectedListener} dideklarasikan di dalam fragmen A:</p>
+
+<pre>
+public static class FragmentA extends ListFragment {
+ ...
+ // Container Activity must implement this interface
+ public interface OnArticleSelectedListener {
+ public void onArticleSelected(Uri articleUri);
+ }
+ ...
+}
+</pre>
+
+<p>Selanjutnya aktivitas yang menjadi host fragmen akan mengimplementasikan antarmuka {@code OnArticleSelectedListener}
+ dan
+mengesampingkan {@code onArticleSelected()} untuk memberi tahu fragmen B mengenai kejadian dari fragmen A. Untuk memastikan
+bahwa aktivitas host mengimplementasikan antarmuka ini, metode callback fragmen A {@link
+android.app.Fragment#onAttach onAttach()} (yang dipanggil sistem saat menambahkan
+fragmen ke aktivitas) membuat instance {@code OnArticleSelectedListener} dengan
+membuat {@link android.app.Activity} yang diteruskan ke {@link android.app.Fragment#onAttach
+onAttach()}:</p>
+
+<pre>
+public static class FragmentA extends ListFragment {
+ OnArticleSelectedListener mListener;
+ ...
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ try {
+ mListener = (OnArticleSelectedListener) activity;
+ } catch (ClassCastException e) {
+ throw new ClassCastException(activity.toString() + " must implement OnArticleSelectedListener");
+ }
+ }
+ ...
+}
+</pre>
+
+<p>Jika aktivitas belum mengimplementasikan antarmuka, maka fragmen akan melontarkan
+{@link java.lang.ClassCastException}.
+Jika berhasil, anggota {@code mListener} yang menyimpan acuan ke implementasi aktivitas
+{@code OnArticleSelectedListener}, sehingga fragmen A bisa berbagi kejadian dengan aktivitas, dengan memanggil metode
+yang didefinisikan oleh antarmuka {@code OnArticleSelectedListener}. Misalnya, jika fragmen A adalah
+ekstensi dari {@link android.app.ListFragment}, maka setiap kali
+pengguna mengklik item daftar, sistem akan memanggil {@link android.app.ListFragment#onListItemClick
+onListItemClick()} di fragmen, yang selanjutnya memanggil {@code onArticleSelected()} untuk berbagi
+kejadian dengan aktivitas:</p>
+
+<pre>
+public static class FragmentA extends ListFragment {
+ OnArticleSelectedListener mListener;
+ ...
+ @Override
+ public void onListItemClick(ListView l, View v, int position, long id) {
+ // Append the clicked item's row ID with the content provider Uri
+ Uri noteUri = ContentUris.{@link android.content.ContentUris#withAppendedId withAppendedId}(ArticleColumns.CONTENT_URI, id);
+ // Send the event and Uri to the host activity
+ mListener.onArticleSelected(noteUri);
+ }
+ ...
+}
+</pre>
+
+<p>Parameter {@code id} yang diteruskan ke {@link
+android.app.ListFragment#onListItemClick onListItemClick()} merupakan ID baris dari item yang diklik,
+yang digunakan aktivitas (atau fragmen lain) untuk mengambil artikel dari {@link
+android.content.ContentProvider} aplikasi.</p>
+
+<p><!--To see a complete implementation of this kind of callback interface, see the <a
+href="{@docRoot}resources/samples/NotePad/index.html">NotePad sample</a>. -->Informasi selengkapnya tentang
+menggunakan penyedia konten tersedia dalam dokumen <a href="{@docRoot}guide/topics/providers/content-providers.html">Penyedia Konten</a>.</p>
+
+
+
+<h3 id="ActionBar">Menambahkan item ke Action-Bar</h3>
+
+<p>Fragmen Anda bisa menyumbangkan item menu ke <a href="{@docRoot}guide/topics/ui/menus.html#options-menu">Menu Opsi</a> aktivitas (dan, konsekuensinya, <a href="{@docRoot}guide/topics/ui/actionbar.html">Action-Bar</a>) dengan mengimplementasikan
+{@link android.app.Fragment#onCreateOptionsMenu(Menu,MenuInflater) onCreateOptionsMenu()}. Agar
+metode ini bisa menerima panggilan, Anda harus memanggil {@link
+android.app.Fragment#setHasOptionsMenu(boolean) setHasOptionsMenu()} selama {@link
+android.app.Fragment#onCreate(Bundle) onCreate()}, untuk menunjukkan bahwa fragmen
+ingin menambahkan item ke Menu Opsi (jika tidak, fragmen tidak akan menerima panggilan ke
+{@link android.app.Fragment#onCreateOptionsMenu onCreateOptionsMenu()}).</p>
+
+<p>Setiap item yang selanjutnya Anda tambahkan ke Menu Opsi dari fragmen akan ditambahkan ke item menu
+yang ada. Fragmen juga menerima callback ke {@link
+android.app.Fragment#onOptionsItemSelected(MenuItem) onOptionsItemSelected()} bila item menu
+dipilih.</p>
+
+<p>Anda juga bisa mendaftarkan tampilan dalam layout fragmen untuk menyediakan menu konteks dengan memanggil {@link
+android.app.Fragment#registerForContextMenu(View) registerForContextMenu()}. Bila pengguna
+membuka menu konteks, fragmen akan menerima panggilan ke {@link
+android.app.Fragment#onCreateContextMenu(ContextMenu,View,ContextMenu.ContextMenuInfo)
+onCreateContextMenu()}. Bila pengguna memilih item, fragmen akan menerima panggilan ke @link
+android.app.Fragment#onContextItemSelected(MenuItem) onContextItemSelected()}.</p>
+
+<p class="note"><strong>Catatan:</strong> Walaupun fragmen menerima callback pada item yang dipilih
+untuk setiap item menu yang ditambahkannya, aktivitaslah yang pertama kali menerima masing-masing callback saat pengguna
+memilih item menu. Jika implementasi aktivitas dari callback bila-item-dipilih,
+tidak menangani item yang dipilih, maka kejadian akan diteruskan ke callback fragmen. Ini berlaku
+untuk Menu Opsi dan menu konteks.</p>
+
+<p>Untuk informasi selengkapnya tentang menu, lihat panduan pengembang <a href="{@docRoot}guide/topics/ui/menus.html">Menu</a> dan <a href="{@docRoot}guide/topics/ui/actionbar.html">Action-Bar</a>.</p>
+
+
+
+
+<h2 id="Lifecycle">Menangani Daur Hidup Fragmen</h2>
+
+<div class="figure" style="width:350px">
+<img src="{@docRoot}images/activity_fragment_lifecycle.png" alt="" />
+<p class="img-caption"><strong>Gambar 3.</strong> Efek daur hidup aktivitas pada daur hidup
+fragmen.</p>
+</div>
+
+<p>Mengelola daur hidup fragmen mirip sekali dengan mengelola daur hidup aktivitas. Seperti
+aktivitas, fragmen bisa berada dalam tiga status:</p>
+
+<dl>
+ <dt><i>Dilanjutkan</i></dt>
+ <dd>Fragmen terlihat dalam aktivitas yang berjalan.</dd>
+
+ <dt><i>Dihentikan sementara</i></dt>
+ <dd>Aktivitas lain berada di latar depan dan memiliki fokus, namun aktivitas tempat fragmen berada
+masih terlihat (aktivitas latar depan sebagian terlihat atau tidak menutupi
+seluruh layar).</dd>
+
+ <dt><i>Dihentikan</i></dt>
+ <dd>Fragmen tidak terlihat. Aktivitas host telah dihentikan atau
+fragmen telah dihapus dari aktivitas namun ditambahkan ke back-stack. Fragmen yang dihentikan
+masih hidup (semua status dan informasi anggota masih disimpan oleh sistem). Akan tetapi, fragmen
+tidak terlihat lagi oleh pengguna dan akan dimatikan jika aktivitas dimatikan.</dd>
+</dl>
+
+<p>Seperti halnya aktivitas, Anda bisa mempertahankan status fragmen menggunakan {@link
+android.os.Bundle}, jika proses aktivitas dimatikan dan Anda harus memulihkan status
+fragmen bila aktivitas dibuat kembali. Anda bisa menyimpan status selama callback {@link
+android.app.Fragment#onSaveInstanceState onSaveInstanceState()} fragmen dan memulihkannya selama
+{@link android.app.Fragment#onCreate onCreate()}, {@link
+android.app.Fragment#onCreateView onCreateView()}, atau {@link
+android.app.Fragment#onActivityCreated onActivityCreated()}. Untuk informasi selengkapnya tentang menyimpan
+status, lihat dokumen <a href="{@docRoot}guide/components/activities.html#SavingActivityState">Aktivitas</a>
+.</p>
+
+<p>Perbedaan paling signifikan dalam daur hidup antara aktivitas dan fragmen ada
+pada cara penyimpanannya dalam back-stack masing-masing. Aktivitas ditempatkan ke back-stack aktivitas
+yang dikelola oleh sistem saat dihentikan, secara default (sehingga pengguna bisa mengarah kembali
+ke aktivitas dengan tombol <em>Back</em>, seperti yang dibahas dalam <a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tugas dan Back-Stack</a>).
+Akan tetapi, fragmen yang ditempatkan ke back-stack dikelola oleh aktivitas host hanya saat
+Anda secara eksplisit meminta agar instance disimpan dengan memanggil {@link
+android.app.FragmentTransaction#addToBackStack(String) addToBackStack()} selama transaksi yang
+menghapus fragmen.</p>
+
+<p>Jika tidak, pengelolaan daur hidup fragmen mirip sekali dengan mengelola daur hidup
+aktivitas. Jadi, praktik yang sama untuk <a href="{@docRoot}guide/components/activities.html#Lifecycle">mengelola daur hidup
+aktivitas</a> juga berlaku untuk fragmen. Namun yang perlu juga Anda pahami adalah bagaimana hidup
+aktivitas memengaruhi hidup fragmen.</p>
+
+<p class="caution"><strong>Perhatian:</strong> Jika Anda memerlukan objek {@link android.content.Context}
+ dalam {@link android.app.Fragment}, Anda bisa memanggil {@link android.app.Fragment#getActivity()}.
+Akan tetapi, berhati-hatilah memanggil {@link android.app.Fragment#getActivity()} hanya bila fragmen
+terkait dengan aktivitas. Bila fragmen belum terkait, atau terlepas selama akhir daur
+hidupnya, {@link android.app.Fragment#getActivity()} akan kembali nol.</p>
+
+
+<h3 id="CoordinatingWithActivity">Mengoordinasi dengan daur hidup aktivitas</h3>
+
+<p>Daur hidup aktivitas tempat fragmen berada akan memengaruhi langsung siklus hidup
+fragmen sedemikian rupa sehingga setiap callback daur hidup aktivitas menghasilkan callback yang sama untuk masing-masing
+fragmen. Misalnya, bila aktivitas menerima {@link android.app.Activity#onPause}, masing-masing
+fragmen dalam aktivitas akan menerima {@link android.app.Fragment#onPause}.</p>
+
+<p>Namun fragmen memiliki beberapa callback daur hidup ekstra, yang menangani interaksi
+unik dengan aktivitas untuk melakukan tindakan seperti membangun dan memusnahkan UI fragmen. Metode callback
+tambahan ini adalah:</p>
+
+<dl>
+ <dt>{@link android.app.Fragment#onAttach onAttach()}</dt>
+ <dd>Dipanggil bila fragmen telah dikaitkan dengan aktivitas ({@link
+android.app.Activity} diteruskan di sini).</dd>
+ <dt>{@link android.app.Fragment#onCreateView onCreateView()}</dt>
+ <dd>Dipanggil untuk membuat hierarki tampilan yang dikaitkan dengan fragmen.</dd>
+ <dt>{@link android.app.Fragment#onActivityCreated onActivityCreated()}</dt>
+ <dd>Dipanggil bila metode {@link android.app.Activity#onCreate
+onCreate()} aktivitas telah dikembalikan.</dd>
+ <dt>{@link android.app.Fragment#onDestroyView onDestroyView()}</dt>
+ <dd>Dipanggil bila hierarki tampilan yang terkait dengan fragmen dihapus.</dd>
+ <dt>{@link android.app.Fragment#onDetach onDetach()}</dt>
+ <dd>Dipanggil bila fragmen diputuskan dari aktivitas.</dd>
+</dl>
+
+<p>Aliran daur hidup fragmen, karena dipengaruhi oleh aktivitas host-nya, diilustrasikan oleh
+gambar 3. Dalam gambar ini, Anda bisa melihat bagaimana setiap status aktivitas menentukan
+metode callback mana yang mungkin diterima fragmen. Misalnya, saat aktivitas menerima call back {@link
+android.app.Activity#onCreate onCreate()}, fragmen dalam aktivitas akan menerima tidak lebih
+dari callback {@link android.app.Fragment#onActivityCreated onActivityCreated()}.</p>
+
+<p>Setelah status aktivitas diteruskan kembali, Anda bisa bebas menambah dan menghapus fragmen untuk
+aktivitas tersebut. Sehingga, hanya saat aktivitas berada dalam status dilanjutkan, daur hidup fragmen bisa
+berubah secara independen.</p>
+
+<p>Akan tetapi, saat aktivitas meninggalkan status dilanjutkan, fragmen akan kembali didorong
+melalui daur hidupnya oleh aktivitas.</p>
+
+
+
+
+<h2 id="Example">Contoh</h2>
+
+<p>Untuk merangkum semua yang telah dibahas dalam dokumen ini, berikut ini contoh aktivitas
+yang menggunakan dua fragmen untuk membuat layout dua panel. Aktivitas di bawah ini menyertakan satu fragmen untuk
+menampilkan daftar putar Shakespeare dan fragmen lainnya menampilkan rangkuman pemutaran bila dipilih dari
+daftar. Aktivitas ini juga menunjukkan cara menyediakan konfigurasi fragmen berbeda,
+berdasarkan konfigurasi layar.</p>
+
+<p class="note"><strong>Catatan:</strong> Kode sumber lengkap untuk aktivitas ini tersedia di
+<a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.html">{@code
+FragmentLayout.java}</a>.</p>
+
+<p>Aktivitas utama akan menerapkan layout seperti biasa, selama {@link
+android.app.Activity#onCreate onCreate()}:</p>
+
+{@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java main}
+
+<p>Layout yang diterapkan adalah {@code fragment_layout.xml}:</p>
+
+{@sample development/samples/ApiDemos/res/layout-land/fragment_layout.xml layout}
+
+<p>Dengan layout ini, sistem akan membuat instance {@code TitlesFragment} (yang mencantumkan
+judul) segera setelah aktivitas memuat layout, sementara {@link android.widget.FrameLayout}
+ (lokasi penempatan fragmen untuk menampilkan rangkuman pemutaran) menempati ruang di sisi kanan
+layar, namun pada awalnya masih kosong. Seperti yang akan Anda lihat di bawah ini, sampai pengguna memilih item
+dari daftar maka fragmen baru akan ditempatkan ke dalam {@link android.widget.FrameLayout}.</p>
+
+<p>Akan tetapi, tidak semua konfigurasi layar cukup lebar untuk menampilkan
+daftar putar dan rangkuman secara berdampingan. Sehingga, layout di atas hanya digunakan untuk konfigurasi
+layar mendatar, dengan menyimpannya di {@code res/layout-land/fragment_layout.xml}.</p>
+
+<p>Sehingga, bila layar berada dalam orientasi tegak, sistem akan menerapkan layout berikut, yang
+tersimpan di {@code res/layout/fragment_layout.xml}:</p>
+
+{@sample development/samples/ApiDemos/res/layout/fragment_layout.xml layout}
+
+<p>Layout ini hanya menyertakan {@code TitlesFragment}. Ini artinya saat perangkat berada dalam
+orientasi tegak, hanya judul daftar putar yang terlihat. Jadi, saat pengguna mengklik item
+daftar dalam konfigurasi ini, aplikasi akan memulai aktivitas baru untuk menampilkan rangkuman,
+sebagai ganti pemuatan fragmen kedua.</p>
+
+<p>Berikutnya, Anda bisa melihat bagaimana hal ini dilakukan dalam kelas fragmen. Pertama adalah {@code
+TitlesFragment}, yang menampilkan judul daftar putar Shakespeare. Fragmen ini membuat ekstensi {@link
+android.app.ListFragment} dan mengandalkannya itu untuk menangani sebagian besar pekerjaan tampilan daftar.</p>
+
+<p>Saat Anda memeriksa kode ini, perhatikan bahwa ada dua kemungkinan perilaku saat pengguna mengklik
+item daftar: bergantung pada layout mana yang aktif, bisa membuat dan menampilkan fragmen
+baru untuk menampilkan detail dalam aktivitas yang sama (menambahkan fragmen ke {@link
+android.widget.FrameLayout}), atau memulai aktivitas baru (tempat fragmen ditampilkan).</p>
+
+{@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java titles}
+
+<p>Fragmen kedua, {@code DetailsFragment} menampilkan rangkuman pemutaran untuk item yang dipilih dari
+daftar dari {@code TitlesFragment}:</p>
+
+{@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java details}
+
+<p>Ingatlah dari kelas {@code TitlesFragment}, bahwa, jika pengguna mengklik item daftar dan
+layout saat ini <em>tidak</em> menyertakan tampilan {@code R.id.details} (yaitu tempat
+{@code DetailsFragment} berada), maka aplikasi memulai aktivitas {@code DetailsActivity}
+untuk menampilkan konten item.</p>
+
+<p>Berikut ini adalah {@code DetailsActivity}, yang hanya menanamkan {@code DetailsFragment} untuk menampilkan rangkuman pemutaran
+yang dipilih saat layar dalam orientasi tegak:</p>
+
+{@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java
+details_activity}
+
+<p>Perhatikan bahwa aktivitas ini selesai sendiri jika konfigurasi mendatar, sehingga aktivitas utama
+bisa mengambil alih dan menampilkan {@code DetailsFragment} bersama {@code TitlesFragment}.
+Ini bisa terjadi jika pengguna memulai {@code DetailsActivity} saat dalam orientasi tegak, namun kemudian
+memutarnya menjadi mendatar (yang akan memulai lagi aktivitas saat ini).</p>
+
+
+<p>Untuk contoh lainnya mengenai penggunaan fragmen (dan file sumber lengkap untuk contoh ini),
+lihat aplikasi contoh Demo API yang tersedia di <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/index.html#Fragment">
+ApiDemos</a> (bisa diunduh dari <a href="{@docRoot}resources/samples/get.html">Komponen contoh SDK</a>).</p>
+
+
diff --git a/docs/html-intl/intl/id/guide/components/fundamentals.jd b/docs/html-intl/intl/id/guide/components/fundamentals.jd
new file mode 100644
index 0000000..2c925e9
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/components/fundamentals.jd
@@ -0,0 +1,480 @@
+page.title=Dasar-Dasar Aplikasi
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>Dalam dokumen ini</h2>
+<ol>
+<li><a href="#Components">Komponen Aplikasi</a>
+ <ol>
+ <li><a href="#ActivatingComponents">Mengaktifkan komponen</a></li>
+ </ol>
+</li>
+<li><a href="#Manifest">File Manifes</a>
+ <ol>
+ <li><a href="#DeclaringComponents">Mendeklarasikan komponen</a></li>
+ <li><a href="#DeclaringRequirements">Mendeklarasikan kebutuhan aplikasi</a></li>
+ </ol>
+</li>
+<li><a href="#Resources">Sumber Daya Aplikasi</a></li>
+</ol>
+</div>
+</div>
+
+<p>Aplikasi Android ditulis dalam bahasa pemrograman Java. Android SDK Tools mengkompilasi
+kode Anda—bersama data dan file sumber daya —ke dalam APK: <i>Paket Android</i>,
+yaitu file arsip berekstensi {@code .apk}. Satu file APK berisi semua konten
+aplikasi Android dan merupakan file yang digunakan perangkat berbasis Android untuk menginstal aplikasi.</p>
+
+<p>Setelah diinstal di perangkat, setiap aplikasi Android tinggal di sandbox keamanannya sendiri: </p>
+
+<ul>
+ <li>Sistem operasi Android merupakan sistem Linux multi-pengguna yang di dalamnya setiap
+aplikasi adalah pengguna berbeda.</li>
+
+<li>Secara default, sistem menetapkan ID pengguna Linux unik kepada setiap aplikasi (ID ini hanya
+ digunakan oleh sistem dan tidak diketahui aplikasi). Sistem menetapkan izin
+bagi semua file dalam aplikasi sehingga hanya ID pengguna yang diizinkan yang bisa mengaksesnya. </li>
+
+<li>Setiap proses memiliki mesin virtual (VM) sendiri, sehingga kode aplikasi yang berjalan secara terisolasi dari
+aplikasi lainnya.</li>
+
+<li>Secara default, setiap aplikasi berjalan dalam proses Linux-nya sendiri. Android memulai proses
+bila ada komponen aplikasi yang perlu dijalankan, kemudian mematikan proses bila tidak lagi diperlukan
+atau bila sistem harus memulihkan memori untuk digunakan aplikasi lain.</li>
+</ul>
+
+<p>Dengan cara ini, sistem Android mengimplementasikan <em>prinsip privilese minim</em>. Ini berarti,
+secara default aplikasi hanya memiliki akses ke komponen yang diperlukannya untuk melakukan pekerjaannya dan
+tidak lebih dari itu. Hal ini menghasilkan lingkungan yang sangat aman sehingga aplikasi tidak bisa mengakses bagian
+sistem bila tidak diberi izin.</p>
+
+<p>Akan tetapi, ada beberapa cara bagi aplikasi untuk berbagi data dengan aplikasi lain dan bagi aplikasi
+untuk mengakses layanan sistem:</p>
+
+<ul>
+ <li>Dua aplikasi bisa diatur untuk menggunakan ID pengguna Linux yang sama,
+dalam hal ini keduanya bisa saling mengakses file masing-masing. Untuk menghemat sumber daya sistem, aplikasi dengan ID
+pengguna yang sama juga bisa diatur agar berjalan dalam proses Linux yang sama dan menggunakan VM yang sama (
+aplikasi juga harus ditandatangani dengan sertifikat yang sama).</li>
+ <li>Aplikasi bisa meminta izin akses ke data perangkat seperti kontak
+pengguna, pesan SMS, penyimpanan lepas-pasang (kartu SD), kamera, Bluetooth, dan lainnya. Semua
+izin aplikasi harus diberikan oleh pengguna saat menginstal.</li>
+</ul>
+
+<p>Hal tersebut mencakup dasar-dasar tentang cara aplikasi Android berada di dalam sistem. Bagian dokumen
+selanjutnya memperkenalkan Anda pada:</p>
+<ul>
+ <li>Komponen kerangka kerja inti yang mendefinisikan aplikasi.</li>
+ <li>File manifes tempat Anda mendeklarasikan komponen dan fitur yang diperlukan perangkat
+untuk aplikasi.</li>
+ <li>Sumber daya yang terpisah dari kode aplikasi dan memungkinkan
+aplikasi mengoptimalkan perilakunya untuk beragam konfigurasi perangkat.</li>
+</ul>
+
+
+
+<h2 id="Components">Komponen Aplikasi</h2>
+
+<p>Komponen aplikasi adalah blok pembangun penting dari aplikasi Android.
+Setiap komponen merupakan titik berbeda yang digunakan sistem untuk memasuki aplikasi. Tidak semua komponen
+merupakan titik masuk sebenarnya bagi pengguna dan sebagian saling bergantung, namun masing-masing komponen tersedia
+sebagai kesatuan sendiri dan memainkan peran tertentu—masing-masing merupakan
+blok pembangun unik yang mendefinisikan perilaku aplikasi secara keseluruhan.</p>
+
+<p>Ada empat macam tipe komponen aplikasi. Setiap tipe memiliki kegunaan tersendiri
+dan daur hidupnya sendiri yang mendefinisikan cara komponen dibuat dan dimusnahkan.</p>
+
+<p>Berikut ini empat tipe komponen aplikasi:</p>
+
+<dl>
+
+<dt><b>Aktivitas</b></dt>
+
+<dd>Sebuah <i>aktivitas</i> mewakili satu layar dengan antarmuka pengguna. Misalnya,
+aplikasi email mungkin memiliki satu aktivitas yang menampilkan daftar email
+baru, aktivitas lain untuk menulis email, dan aktivitas satunya lagi untuk membaca email. Walaupun
+semua aktivitas bekerja sama untuk membentuk pengalaman pengguna yang kohesif dalam aplikasi email,
+masing-masing tidak saling bergantung. Karenanya, aplikasi berbeda bisa memulai
+salah satu aktivitas ini (jika aplikasi email mengizinkannya). Misalnya, aplikasi kamera bisa memulai
+aktivitas dalam aplikasi email yang membuat email baru agar pengguna bisa berbagi gambar.
+
+<p>Aktivitas diimplementasikan sebagai subkelas {@link android.app.Activity} dan Anda bisa mengetahui selengkapnya
+tentang hal ini dalam panduan pengembang <a href="{@docRoot}guide/components/activities.html">Aktivitas</a>
+.</p>
+</dd>
+
+
+<dt><b>Layanan</b></dt>
+
+<dd>Sebuah <i>layanan</i> adalah komponen yang berjalan di latar belakang untuk melakukan
+operasi yang berjalan lama atau untuk melakukan pekerjaan bagi proses jarak jauh. Layanan
+tidak menyediakan antarmuka pengguna. Misalnya, sebuah layanan bisa memutar musik di latar belakang sementara
+pengguna berada dalam aplikasi lain, atau layanan bisa menarik data lewat jaringan tanpa
+memblokir interaksi pengguna dengan aktivitas. Komponen lain, seperti aktivitas, bisa memulai
+layanan dan membiarkannya berjalan atau mengikat layanan untuk berinteraksi dengannya.
+
+<p>Layanan diimplementasikan sebagai subkelas {@link android.app.Service} dan Anda bisa mengetahui selengkapnya
+tentang hal ini dalam panduan
+pengembang <a href="{@docRoot}guide/components/services.html">Layanan</a>.</p>
+</dd>
+
+
+<dt><b>Penyedia konten</b></dt>
+
+<dd>Sebuah <i>penyedia konten</i> mengelola seperangkat data-bersama aplikasi. Anda bisa menyimpan data
+dalam sistem file, database SQLite, di web, atau lokasi penyimpanan permanen lainnya
+yang bisa diakses aplikasi. Melalui penyedia konten, aplikasi lain bisa melakukan query atau bahkan
+memodifikasi data (jika penyedia konten mengizinkannya). Misalnya, sistem Android menyediakan penyedia
+konten yang mengelola informasi kontak pengguna. Karenanya, setiap aplikasi
+dengan izin yang sesuai bisa melakukan query mengenai bagian dari penyedia konten (seperti {@link
+android.provider.ContactsContract.Data}) untuk membaca dan menulis informasi tentang orang tertentu.
+
+<p>Penyedia konten juga berguna untuk membaca dan menulis data privat ke aplikasi Anda
+dan tidak dibagikan. Misalnya, aplikasi contoh <a href="{@docRoot}resources/samples/NotePad/index.html">Note Pad</a> menggunakan
+penyedia konten untuk menyimpan catatan.</p>
+
+<p>Penyedia konten diimplementasikan sebagai subkelas {@link android.content.ContentProvider}
+dan harus mengimplementasikan seperangkat standar API yang memungkinkan aplikasi
+lain melakukan transaksi. Untuk informasi selengkapnya, lihat panduan pengembang
+<a href="{@docRoot}guide/topics/providers/content-providers.html">Penyedia Konten</a>.</p>
+</dd>
+
+
+<dt><b>Penerima siaran</b></dt>
+
+<dd>Sebuah <i>penerima siaran</i> adalah komponen yang merespons pengumuman siaran dalam lingkup
+sistem. Banyak siaran yang berasal dari sistem—misalnya, siaran yang mengumumkan bahwa
+layar telah dimatikan, baterai lemah, atau gambar telah direkam.
+Aplikasi juga bisa memulai siaran—misalnya untuk menginformasikan ke
+aplikasi lain bahwa sebagian data telah diunduh ke perangkat dan bisa digunakan aplikasi lain tersebut. Walaupun penerima
+siaran tidak menampilkan antarmuka pengguna, penerima bisa <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">membuat pemberitahuan baris status</a>
+untuk memberi tahu pengguna kapan kejadian siaran dilakukan. Meskipun penerima siaran umumnya cuma menjadi
+"gerbang" untuk komponen lain dan dimaksudkan untuk melakukan pekerjaan dalam jumlah sangat minim. Misalnya
+, penerima siaran bisa menjalankan layanan untuk melakukan beberapa pekerjaan berdasarkan kejadian.
+
+<p>Penerima siaran diimplementasikan sebagai subkelas {@link android.content.BroadcastReceiver}
+dan setiap siaran dikirim sebagai objek {@link android.content.Intent}. Untuk informasi selengkapnya,
+lihat kelas {@link android.content.BroadcastReceiver}.</p>
+</dd>
+
+</dl>
+
+
+
+<p>Aspek unik dari desain sistem Android adalah aplikasi mana pun bisa memulai
+komponen aplikasi lain. Misalnya, jika Anda menginginkan pengguna mengambil
+foto dengan kamera perangkat, bisa saja aplikasi lain yang melakukannya dan aplikasi
+Anda bisa menggunakannya, sebagai ganti mengembangkan aktivitas sendiri untuk mengambil foto. Anda tidak
+harus menyatukan atau bahkan menautkan ke kode dari aplikasi kamera.
+Sebagai gantinya, Anda tinggal memulai aktivitas di aplikasi kamera yang akan mengambil
+foto. Bila selesai, foto akan dikembalikan ke aplikasi sehingga Anda bisa menggunakannya. Bagi pengguna,
+kamera seakan menjadi bagian dari aplikasi Anda.</p>
+
+<p>Saat sistem memulai komponen, sistem akan memulai proses untuk aplikasi itu (jika
+belum berjalan) dan membuat instance kelas yang diperlukan untuk komponen. Misalnya, jika aplikasi Anda
+memulai aktivitas dalam aplikasi kamera yang mengambil foto, aktivitas itu akan
+berjalan dalam proses yang dimiliki oleh aplikasi kamera, bukan dalam proses aplikasi Anda.
+Karenanya, tidak seperti aplikasi di sebagian besar sistem lain, aplikasi Android tidak memiliki titik
+masuk tunggal (misalnya tidak ada fungsi {@code main()}).</p>
+
+<p>Karena sistem menjalankan setiap aplikasi dalam proses terpisah dengan izin file yang
+membatasi akses ke aplikasi lain, aplikasi Anda tidak bisa langsung mengaktifkan komponen dari aplikasi lain. Akan tetapi, sistem
+Android bisa melakukannya. Jadi, untuk mengaktifkan
+komponen dalam aplikasi lain, Anda harus mengirim pesan ke sistem yang menetapkan <em>intent</em> Anda untuk memulai
+komponen tertentu. Selanjutnya sistem akan mengaktifkan komponen untuk Anda.</p>
+
+
+<h3 id="ActivatingComponents">Mengaktifkan Komponen</h3>
+
+<p>Tiga dari empat tipe komponen—aktivitas, layanan, dan
+penerima siaran—diaktifkan oleh pesan asinkron yang disebut <em>intent</em>.
+Intent saling mengikat setiap komponen saat runtime (Anda bisa menganggapnya
+sebagai pembawa pesan yang meminta tindakan dari komponen lain), baik komponen itu milik aplikasi Anda
+atau milik aplikasi lain.</p>
+
+<p>Intent dibuat dengan objek {@link android.content.Intent}, yang mendefinisikan pesan untuk
+mengaktifkan komponen tertentu atau komponen <em>tipe</em> komponen tertentu—masing-masing intent
+bisa eksplisit atau implisit.</p>
+
+<p>Untuk aktivitas dan layanan, intent mendefinisikan tindakan yang akan dilakukan (misalnya, untuk "melihat" atau
+"mengirim" sesuatu) dan mungkin menetapkan URI data untuk ditindaklanjuti (salah satu hal yang mungkin perlu diketahui
+oleh komponen yang akan dimulai). Misalnya, intent mungkin menyampaikan permintaan suatu
+aktivitas untuk menampilkan gambar atau membuka halaman web. Dalam beberapa kasus, Anda bisa memulai
+aktivitas untuk menerima hasil, dalam hal ini, aktivitas juga akan mengembalikan hasil
+dalam {@link android.content.Intent} (misalnya Anda bisa mengeluarkan intent agar
+pengguna bisa memilih kontak pribadi dan memintanya dikembalikan kepada Anda—intent yang dikembalikan menyertakan URI yang
+menunjuk ke kontak yang dipilih).</p>
+
+<p>Untuk penerima siaran, intent hanya mendefinisikan
+pengumuman yang sedang disiarkan (misalnya, siaran untuk menunjukkan baterai perangkat hampir habis
+hanya menyertakan string tindakan yang menunjukkan "baterai hampir habis").</p>
+
+<p>Tipe komponen lainnya dan penyedia konten, tidak diaktifkan oleh intent. Melainkan
+diaktifkan saat ditargetkan oleh permintaan dari {@link android.content.ContentResolver}. Resolver
+konten menangani semua transaksi langsung dengan penyedia konten sehingga komponen yang melakukan
+transaksi dengan penyedia tidak perlu dan sebagai gantinya memanggil metode pada objek {@link
+android.content.ContentResolver}. Ini membuat lapisan abstraksi antara penyedia
+konten dan komponen yang meminta informasi (demi keamanan).</p>
+
+<p>Ada beberapa metode terpisah untuk mengaktifkan masing-masing tipe komponen:</p>
+<ul>
+ <li>Anda bisa memulai aktivitas (atau memberinya pekerjaan baru) dengan
+meneruskan {@link android.content.Intent} ke {@link android.content.Context#startActivity
+startActivity()} atau {@link android.app.Activity#startActivityForResult startActivityForResult()}
+(bila Anda ingin aktivitas mengembalikan hasil).</li>
+ <li>Anda bisa memulai layanan (atau memberikan instruksi baru ke layanan yang sedang berlangsung) dengan
+meneruskan {@link android.content.Intent} ke {@link android.content.Context#startService
+startService()}. Atau Anda bisa mengikat ke layanan dengan meneruskan {@link android.content.Intent} ke
+{@link android.content.Context#bindService bindService()}.</li>
+ <li>Anda bisa memulai siaran dengan meneruskan {@link android.content.Intent} ke metode seperti
+{@link android.content.Context#sendBroadcast(Intent) sendBroadcast()}, {@link
+android.content.Context#sendOrderedBroadcast(Intent, String) sendOrderedBroadcast()}, atau {@link
+android.content.Context#sendStickyBroadcast sendStickyBroadcast()}.</li>
+ <li>Anda bisa melakukan query ke penyedia konten dengan memanggil {@link
+android.content.ContentProvider#query query()} pada {@link android.content.ContentResolver}.</li>
+</ul>
+
+<p>Untuk informasi selengkapnya tentang menggunakan intent, lihat dokumen <a href="{@docRoot}guide/components/intents-filters.html">Intent dan Filter
+ Intent</a>. Informasi selengkapnya tentang mengaktifkan komponen
+tertentu juga tersedia dalam dokumen berikut: <a href="{@docRoot}guide/components/activities.html">Aktivitas</a>, <a href="{@docRoot}guide/components/services.html">Layanan</a>, {@link
+android.content.BroadcastReceiver} dan <a href="{@docRoot}guide/topics/providers/content-providers.html">Penyedia Konten</a>.</p>
+
+
+<h2 id="Manifest">File Manifes</h2>
+
+<p>Sebelum sistem Android bisa memulai komponen aplikasi, sistem harus mengetahui
+keberadaan komponen dengan membaca file {@code AndroidManifest.xml} aplikasi (file
+"manifes"). Aplikasi Anda harus mendeklarasikan semua komponennya dalam file ini, yang harus menjadi akar
+dari direktori proyek aplikasi.</p>
+
+<p>Manifes melakukan banyak hal selain mendeklarasikan komponen aplikasi,
+seperti:</p>
+<ul>
+ <li>Mengidentifikasi izin pengguna yang diperlukan aplikasi, seperti akses Internet atau
+akses-baca ke kontak pengguna.</li>
+ <li>Mendeklarasikan <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Level</a>
+ minimum yang diperlukan aplikasi, berdasarkan API yang digunakan aplikasi.</li>
+ <li>Mendeklarasikan fitur perangkat keras dan perangkat lunak yang diperlukan aplikasi, seperti kamera,
+layanan Bluetooth, atau layar multisentuh.</li>
+ <li>Pustaka API aplikasi perlu ditautkan (selain
+API kerangka kerja Android), seperti pustaka
+<a href="http://code.google.com/android/add-ons/google-apis/maps-overview.html">Google Maps.</a></li>
+ <li>Dan lainnya</li>
+</ul>
+
+
+<h3 id="DeclaringComponents">Mendeklarasikan komponen</h3>
+
+<p>Tugas utama manifes adalah menginformasikan komponen aplikasi pada sistem. Misalnya,
+file manifes bisa mendeklarasikan aktivitas sebagai berikut: </p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<manifest ... >
+ <application android:icon="@drawable/app_icon.png" ... >
+ <activity android:name="com.example.project.ExampleActivity"
+ android:label="@string/example_label" ... >
+ </activity>
+ ...
+ </application>
+</manifest></pre>
+
+<p>Dalam elemen <code><a
+href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>
+, atribut {@code android:icon} menunjuk ke sumber daya untuk ikon yang mengidentifikasi
+aplikasi.</p>
+
+<p>Dalam elemen <code><a
+href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>,
+atribut {@code android:name} menetapkan nama kelas yang sepenuhnya memenuhi syarat subkelas {@link
+android.app.Activity} dan atribut {@code android:label} menetapkan string yang akan
+digunakan sebagai label yang terlihat oleh pengguna untuk aktivitas tersebut.</p>
+
+<p>Anda harus mendeklarasikan semua komponen aplikasi dengan cara ini:</p>
+<ul>
+ <li>Elemen <code><a
+href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code> untuk
+aktivitas</li>
+ <li>Elemen <code><a
+href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code> untuk
+layanan</li>
+ <li>Elemen <code><a
+href="{@docRoot}guide/topics/manifest/receiver-element.html"><receiver></a></code> untuk
+penerima siaran</li>
+ <li>Elemen <code><a
+href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code> untuk
+penyedia konten</li>
+</ul>
+
+<p>Aktivitas, layanan, dan penyedia konten yang Anda sertakan dalam kode sumber, namun tidak
+dideklarasikan dalam manifes, tidak akan terlihat pada sistem dan, akibatnya, tidak pernah bisa berjalan. Akan tetapi,
+penerima siaran
+bisa dideklarasikan dalam manifes atau dibuat secara dinamis dalam kode (sebagai objek
+{@link android.content.BroadcastReceiver}) dan didaftarkan pada sistem dengan memanggil
+{@link android.content.Context#registerReceiver registerReceiver()}.</p>
+
+<p>Untuk informasi selengkapnya tentang cara menstrukturkan file manifes untuk aplikasi Anda,
+lihat dokumentasi <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">File AndroidManifest.xml</a>. </p>
+
+
+
+<h3 id="DeclaringComponentCapabilities">Mendeklarasikan kemampuan komponen</h3>
+
+<p>Seperti telah dibahas di atas, dalam <a href="#ActivatingComponents">Mengaktifkan Komponen</a>, Anda bisa menggunakan
+{@link android.content.Intent} untuk memulai aktivitas, layanan, dan penerima siaran. Anda bisa
+melakukannya dengan menamai komponen sasaran secara eksplisit (menggunakan nama kelas komponen) dalam intent. Akan tetapi,
+kemampuan intent sebenarnya ada pada konsep <em>intent implisit</em>. Intent implisit
+cuma menjelaskan tipe tindakan yang akan dilakukan (dan, secara opsional, data tempat Anda ingin
+melakukan tindakan) dan memungkinkan sistem untuk menemukan komponen pada perangkat yang bisa melakukan
+tindakan tersebut dan memulainya. Jika ada banyak komponen yang bisa melakukan tindakan yang dijelaskan oleh intent,
+maka pengguna bisa memilih komponen yang akan digunakan.</p>
+
+<p>Cara sistem mengidentifikasi komponen yang bisa merespons intent adalah dengan membandingkan
+intent yang diterima dengan <i>filter intent</i> yang disediakan dalam file manifes aplikasi lainnya pada
+perangkat.</p>
+
+<p>Bila mendeklarasikan aktivitas dalam manifes aplikasi, secara opsional Anda bisa menyertakan
+filter intent yang mendeklarasikan kemampuan aktivitas agar bisa merespons intent dari
+aplikasi lain. Anda bisa mendeklarasikan filter intent untuk komponen dengan
+menambahkan elemen <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
+<intent-filter>}</a> sebagai anak elemen deklarasi komponen.</p>
+
+<p>Misalnya, jika Anda telah membangun aplikasi email dengan aktivitas untuk menulis email baru, Anda bisa
+mendeklarasikan filter intent untuk merespons intent "kirim" (untuk mengirim email baru) seperti ini:</p>
+<pre>
+<manifest ... >
+ ...
+ <application ... >
+ <activity android:name="com.example.project.ComposeEmailActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.SEND" />
+ <data android:type="*/*" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ </activity>
+ </application>
+</manifest>
+</pre>
+
+<p>Kemudian, jika aplikasi lain membuat intent dengan tindakan {@link
+android.content.Intent#ACTION_SEND} dan meneruskannya ke {@link android.app.Activity#startActivity
+startActivity()}, sistem bisa memulai aktivitas Anda agar pengguna bisa menulis draf dan mengirim
+email.</p>
+
+<p>Untuk informasi selengkapnya tentang membuat filter intent, lihat dokumen <a href="{@docRoot}guide/components/intents-filters.html">Intent dan Filter Intent</a>.
+</p>
+
+
+
+<h3 id="DeclaringRequirements">Mendeklarasikan kebutuhan aplikasi</h3>
+
+<p>Ada berbagai macam perangkat yang didukung oleh Android dan tidak
+semuanya menyediakan fitur dan kemampuan yang sama. Agar aplikasi Anda tidak dihapus pada perangkat yang tidak memiliki
+fitur yang diperlukan aplikasi, Anda harus jelas mendefinisikan profil mengenai
+tipe perangkat yang didukung aplikasi dengan mendeklarasikan kebutuhan perangkat dan perangkat lunak dalam file
+manifes. Kebanyakan deklarasi ini hanya bersifat informasi dan sistem tidak
+membacanya, namun layanan eksternal seperti Google Play akan membacanya untuk menyediakan
+penyaringan bagi pengguna saat mereka mencari aplikasi dari perangkat.</p>
+
+<p>Misalnya, jika aplikasi memerlukan kamera dan menggunakan API yang disediakan dalam Android 2.1 (<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Level</a> 7)
+, Anda harus mendeklarasikannya sebagai kebutuhan dalam file manifes seperti ini:</p>
+
+<pre>
+<manifest ... >
+ <uses-feature android:name="android.hardware.camera.any"
+ android:required="true" />
+ <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="19" />
+ ...
+</manifest>
+</pre>
+
+<p>Sekarang, perangkat yang <em>tidak</em> memiliki kamera dan menggunakan
+Android versi <em>lebih rendah</em> dari 2.1 tidak bisa menginstal aplikasi Anda dari Google Play.</p>
+
+<p>Akan tetapi, bisa juga mendeklarasikan bahwa aplikasi Anda menggunakan kamera, namun tidak
+<em>mengharuskannya</em>. Dalam hal itu, aplikasi Anda harus mengatur atribut <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#required">{@code required}</a>
+ ke {@code "false"} dan memeriksa saat runtime apakah
+perangkat memiliki kamera dan menonaktifkan setiap fitur kamera yang sesuai.</p>
+
+<p>Informasi selengkapnya tentang cara mengelola kompatibilitas aplikasi dengan
+perangkat yang berbeda disediakan dalam dokumen
+<a href="{@docRoot}guide/practices/compatibility.html">Kompatibilitas Perangkat</a>.</p>
+
+
+
+<h2 id="Resources">Sumber Daya Aplikasi</h2>
+
+<p>Aplikasi Android tidak hanya terdiri dari kode—Aplikasi memerlukan sumber daya yang
+terpisah dari kode sumber, seperti gambar, file audio, dan apa saja yang berkaitan dengan
+presentasi visual dari aplikasi. Misalnya, Anda harus mendefinisikan animasi, menu, gaya, warna,
+dan layout antarmuka pengguna aktivitas dengan file XML. Penggunaan sumber daya aplikasi
+mempermudah pembaruan berbagai karakteristik aplikasi Anda tanpa memodifikasi kode dan—dengan menyediakan
+seperangkat sumber daya alternatif—memungkinkan Anda mengoptimalkan aplikasi untuk berbagai konfigurasi
+perangkat berbeda (seperti bahasa dan ukuran layar yang berbeda).</p>
+
+<p>Untuk setiap sumber daya yang Anda sertakan dalam proyek Android, alat bawaan SDK akan mendefinisikan ID integer
+unik, yang bisa Anda gunakan untuk mengacu sumber daya dari kode aplikasi atau dari sumber daya lainnya yang
+didefinisikan dalam XML. Misalnya, jika aplikasi berisi file gambar bernama {@code
+logo.png} (disimpan dalam direktori {@code res/drawable/}), alat SDK akan menghasilkan ID sumber daya
+bernama {@code R.drawable.logo}, yang bisa Anda gunakan untuk mengacu gambar dan memasukkannya dalam
+antarmuka pengguna.</p>
+
+<p>Salah satu aspek paling penting dari penyediaan sumber daya yang terpisah dari
+kode sumber adalah kemampuan Anda menyediakan sumber daya alternatif untuk konfigurasi perangkat
+yang berbeda. Misalnya, dengan mendefinisikan string UI dalam XML, Anda bisa menerjemahkan string ke dalam
+bahasa lain dan menyimpan string itu dalam file terpisah. Kemudian, berdasarkan <em>qualifier</em>
+bahasa yang ditambahkan ke nama direktori sumber daya (seperti {@code res/values-fr/} untuk nilai
+string Prancis) dan pengaturan bahasa pengguna, sistem Android akan menerapkan string bahasa yang sesuai
+untuk UI Anda.</p>
+
+<p>Android mendukung banyak <em>qualifier</em> berbeda untuk sumber daya alternatif Anda. Qualifier
+adalah string pendek yang Anda sertakan dalam nama direktori sumber
+daya untuk mendefinisikan konfigurasi perangkat yang harus digunakan sumber daya tersebut. Contoh lainnya,
+Anda harus sering membuat layout berbeda untuk aktivitas, bergantung pada
+orientasi layar dan ukuran perangkat. Misalnya, saat layar perangkat dalam orientasi
+tegak, Anda mungkin ingin layout tombolnya vertikal, tetapi saat layar dalam orientasi
+mendatar, tombolnya harus sejajar horizontal. Untuk mengubah layout
+sesuai orientasi, Anda bisa mendefinisikan dua layout berbeda dan menerapkan qualifier yang
+tepat untuk setiap nama direktori layout. Kemudian, sistem secara otomatis menerapkan
+layout yang tepat sesuai dengan orientasi perangkat saat ini.</p>
+
+<p>Untuk informasi selengkapnya tentang berbagai jenis sumber daya yang bisa disertakan dalam aplikasi dan cara
+membuat sumber daya alternatif untuk konfigurasi perangkat berbeda, bacalah <a href="{@docRoot}guide/topics/resources/providing-resources.html">Menyediakan Sumber Daya</a>.</p>
+
+
+
+<div class="next-docs">
+<div class="col-6">
+ <h2 class="norule">Teruskan membaca tentang:</h2>
+ <dl>
+ <dt><a href="{@docRoot}guide/components/intents-filters.html">Intent dan Filter Intent</a>
+ </dt>
+ <dd>Informasi tentang cara menggunakan API {@link android.content.Intent} untuk
+ mengaktifkan komponen aplikasi, seperti aktivitas dan layanan, dan cara menyediakan komponen aplikasi
+ untuk digunakan oleh aplikasi lain.</dd>
+ <dt><a href="{@docRoot}guide/components/activities.html">Aktivitas</a></dt>
+ <dd>Informasi tentang cara membuat instance kelas {@link android.app.Activity},
+yang menyediakan layar tersendiri dalam aplikasi bersama antarmuka pengguna.</dd>
+ <dt><a href="{@docRoot}guide/topics/resources/providing-resources.html">Menyediakan Sumber Daya</a></dt>
+ <dd>Informasi tentang cara aplikasi Android disusun untuk memisahkan sumber daya aplikasi dari
+kode aplikasi, termasuk cara Anda bisa menyediakan sumber daya alternatif untuk
+konfigurasi perangkat tertentu.
+ </dd>
+ </dl>
+</div>
+<div class="col-6">
+ <h2 class="norule">Anda juga mungkin tertarik dengan:</h2>
+ <dl>
+ <dt><a href="{@docRoot}guide/practices/compatibility.html">Kompatibilitas Perangkat</a></dt>
+ <dd>Informasi tentang cara kerja Android pada berbagai tipe perangkat dan
+pengenalan mengenai cara mengoptimalkan aplikasi untuk setiap perangkat atau membatasi ketersediaan aplikasi Anda untuk
+perangkat berbeda.</dd>
+ <dt><a href="{@docRoot}guide/topics/security/permissions.html">Izin Sistem</a></dt>
+ <dd>Informasi tentang cara Android membatasi akses aplikasi pada API tertentu dengan sistem izin
+yang mengharuskan persetujuan pengguna agar aplikasi dapat menggunakan API tersebut.</dd>
+ </dl>
+</div>
+</div>
+
diff --git a/docs/html-intl/intl/id/guide/components/index.jd b/docs/html-intl/intl/id/guide/components/index.jd
new file mode 100644
index 0000000..de40b22
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/components/index.jd
@@ -0,0 +1,57 @@
+page.title=Komponen Aplikasi
+page.landing=true
+page.landing.intro=Kerangka kerja aplikasi Android memungkinkan Anda membuat aplikasi yang kaya dan inovatif menggunakan seperangkat komponen yang dapat digunakan kembali. Bagian ini menjelaskan cara membangun komponen yang mendefinisikan blok pembangun aplikasi Anda dan cara menghubungkannya bersama menggunakan intent.
+page.metaDescription=Kerangka kerja aplikasi Android memungkinkan Anda membuat aplikasi yang kaya dan inovatif menggunakan seperangkat komponen yang dapat digunakan kembali. Bagian ini menjelaskan cara membangun komponen yang mendefinisikan blok pembangun aplikasi Anda dan cara menghubungkannya bersama menggunakan intent.
+page.landing.image=images/develop/app_components.png
+page.image=images/develop/app_components.png
+
+@jd:body
+
+<div class="landing-docs">
+
+ <div class="col-6">
+ <h3>Artikel Blog</h3>
+
+ <a href="http://android-developers.blogspot.com/2012/05/using-dialogfragments.html">
+ <h4>Menggunakan DialogFragments</h4>
+ <p>Dalam posting ini, saya akan menunjukkan cara menggunakan DialogFragments dengan pustaka dukungan v4 (untuk kompatibilitas mundur pada perangkat sebelum Honeycomb) untuk menunjukkan dialog edit sederhana dan mengembalikan hasil ke Aktivitas pemanggil menggunakan antarmuka.</p>
+ </a>
+
+ <a href="http://android-developers.blogspot.com/2011/03/fragments-for-all.html">
+ <h4>Fragmen Untuk Semua</h4>
+ <p>Hari ini kami telah merilis pustaka statis yang memperlihatkan API Fragment yang sama (serta LoaderManager baru dan beberapa kelas lain) agar aplikasi yang kompatibel dengan Android 1.6 atau yang lebih baru bisa menggunakan fragmen untuk membuat antarmuka pengguna yang kompatibel dengan tablet. </p>
+ </a>
+
+ <a href="http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html">
+ <h4>Multithreading untuk Kinerja</h4>
+ <p>Praktik yang baik dalam membuat aplikasi yang responsif adalah memastikan thread UI utama Anda
+melakukan pekerjaan minimum. Setiap tugas yang berpotensi lama dan dapat membuat aplikasi mogok harus
+ditangani di thread berbeda.</p>
+ </a>
+ </div>
+
+ <div class="col-6">
+ <h3>Pelatihan</h3>
+
+ <a href="http://developer.android.com/training/basics/activity-lifecycle/index.html">
+ <h4>Mengelola Daur Hidup Aktivitas</h4>
+ <p>Bagian ini menjelaskan pentingnya metode callback daur hidup yang diterima setiap instance Aktivitas
+dan cara menggunakannya sehingga aktivitas Anda melakukan yang diharapkan pengguna dan tidak menghabiskan sumber daya sistem
+saat aktivitas tidak membutuhkannya.</p>
+ </a>
+
+ <a href="http://developer.android.com/training/basics/fragments/index.html">
+ <h4>Membangun UI Dinamis dengan Fragmen</h4>
+ <p>Bagian ini menunjukkan kepada Anda cara membuat pengalaman pengguna yang dinamis dengan fragmen dan mengoptimalkan
+pengalaman pengguna aplikasi Anda dengan berbagai ukuran layar, sekaligus terus mendukung
+perangkat yang menjalankan versi sebelumnya, sesudah versi Android 1.6.</p>
+ </a>
+
+ <a href="http://developer.android.com/training/sharing/index.html">
+ <h4>Berbagi Konten</h4>
+ <p>Bagian ini membahas beberapa cara umum untuk mengirim dan menerima konten antar
+aplikasi menggunakan API Intent dan objek ActionProvider.</p>
+ </a>
+ </div>
+
+</div>
diff --git a/docs/html-intl/intl/id/guide/components/intents-filters.jd b/docs/html-intl/intl/id/guide/components/intents-filters.jd
new file mode 100644
index 0000000..8e89b5d
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/components/intents-filters.jd
@@ -0,0 +1,899 @@
+page.title=Intent dan Filter Intent
+page.tags="IntentFilter"
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>Dalam dokumen ini</h2>
+<ol>
+ <li><a href="#Types">Tipe Intent</a></li>
+ <li><a href="#Building">Membangun Intent</a>
+ <ol>
+ <li><a href="#ExampleExplicit">Contoh intent eksplisit</a></li>
+ <li><a href="#ExampleSend">Contoh intent implisit</a></li>
+ <li><a href="#ForceChooser">Memaksakan pemilih aplikasi</a></li>
+ </ol>
+ </li>
+ <li><a href="#Receiving">Menerima Intent Implisit</a>
+ <ol>
+ <li><a href="#ExampleFilters">Contoh filter</a></li>
+ </ol>
+ </li>
+ <li><a href="#PendingIntent">Menggunakan Intent Tertunda</a></li>
+ <li><a href="#Resolution">Resolusi Intent</a>
+ <ol>
+ <li><a href="#ActionTest">Pengujian tindakan</a></li>
+ <li><a href="#CategoryTest">Pengujian kategori</a></li>
+ <li><a href="#DataTest">Pengujian data</a></li>
+ <li><a href="#imatch">Pencocokan intent</a></li>
+ </ol>
+ </li>
+</ol>
+
+<h2>Lihat juga</h2>
+<ol>
+<li><a href="{@docRoot}training/basics/intents/index.html">Berinteraksi dengan Aplikasi Lain</a></li>
+<li><a href="{@docRoot}training/sharing/index.html">Berbagi Konten</a></li>
+</ol>
+
+</div>
+</div>
+
+
+
+
+<p>{@link android.content.Intent} merupakan objek pertukaran pesan yang bisa Anda gunakan untuk meminta tindakan
+dari <a href="{@docRoot}guide/components/fundamentals.html#Components">komponen aplikasi</a> lain.
+Walaupun intent memudahkan komunikasi antarkomponen dalam beberapa cara, ada tiga
+kasus-penggunaan dasar:</p>
+
+<ul>
+<li><b>Untuk memulai aktivitas:</b>
+<p>{@link android.app.Activity} menyatakan satu layar dalam aplikasi. Anda bisa memulai instance
+baru {@link android.app.Activity} dengan meneruskan {@link android.content.Intent}
+ke {@link android.content.Context#startActivity startActivity()}. {@link android.content.Intent}
+menjelaskan aktivitas yang akan dimulai dan membawa data yang diperlukan.</p>
+
+<p>Jika Anda ingin menerima hasil dari aktivitas bila selesai,
+panggil {@link android.app.Activity#startActivityForResult
+startActivityForResult()}. Aktivitas Anda menerima hasil
+sebagai objek {@link android.content.Intent} terpisah dalam callback {@link
+android.app.Activity#onActivityResult onActivityResult()} aktivitas Anda.
+Untuk informasi selengkapnya, lihat panduan <a href="{@docRoot}guide/components/activities.html">Aktivitas</a>.</p></li>
+
+<li><b>Untuk memulai layanan:</b>
+<p>{@link android.app.Service} adalah komponen yang melakukan operasi di latar belakang
+tanpa antarmuka pengguna. Anda bisa memulai layanan untuk melakukan operasi satu-kali
+(misalnya mengunduh file) dengan meneruskan {@link android.content.Intent}
+ke {@link android.content.Context#startService startService()}. {@link android.content.Intent}
+menjelaskan layanan yang akan dimulai dan membawa data yang diperlukan.</p>
+
+<p>Jika layanan didesain dengan antarmuka pengguna klien-server, Anda bisa mengikat ke layanan
+dari komponen lain dengan meneruskan {@link android.content.Intent} ke {@link
+android.content.Context#bindService bindService()}</code>. Untuk informasi selengkapnya, lihat panduan <a href="{@docRoot}guide/components/services.html">Layanan</a>.</p></li>
+
+<li><b>Untuk mengirim siaran:</b>
+<p>Siaran adalah pesan yang bisa diterima aplikasi apa saja. Sistem menyampaikan beragam siaran
+untuk kejadian sistem, misalnya saat sistem booting atau saat perangkat mulai mengisi daya.
+Anda bisa mengirim siaran ke aplikasi lain dengan meneruskan {@link android.content.Intent}
+ke {@link android.content.Context#sendBroadcast(Intent) sendBroadcast()},
+{@link android.content.Context#sendOrderedBroadcast(Intent, String)
+sendOrderedBroadcast()}, atau {@link
+android.content.Context#sendStickyBroadcast sendStickyBroadcast()}.</p>
+</li>
+</ul>
+
+
+
+
+<h2 id="Types">Tipe Intent</h2>
+
+<p>Ada dua tipe intent:</p>
+
+<ul>
+<li><b>Intent eksplisit</b> menetapkan komponen untuk memulai dengan nama (
+nama kelas yang sepenuhnya memenuhi syarat). Anda biasanya akan menggunakan intent eksplisit untuk memulai sebuah komponen
+dalam aplikasi sendiri, karena Anda mengetahui nama kelas dari aktivitas atau layanan yang ingin dimulai.
+Misalnya, mulai aktivitas baru sebagai respons terhadap tindakan pengguna atau mulai layanan untuk mengunduh
+file di latar belakang.</li>
+
+<li><b>Intent implisit</b> tidak menetapkan komponen tertentu, melainkan mendeklarasikan tindakan umum
+yang dilakukan, yang memungkinkan komponen aplikasi lain untuk menanganinya. Misalnya, jika Anda ingin
+menampilkan sebuah lokasi di peta pada pengguna, Anda bisa menggunakan intent implisit untuk meminta aplikasi lain
+yang mampu untuk menunjukkan lokasi yang telah ditetapkan di peta tersebut.</li>
+</ul>
+
+<p>Saat Anda membuat intent eksplisit untuk memulai aktivitas atau layanan, sistem akan segera
+memulai komponen aplikasi yang telah ditetapkan dalam objek {@link android.content.Intent}.</p>
+
+<div class="figure" style="width:446px">
+<img src="{@docRoot}images/components/intent-filters@2x.png" width="446" alt="" />
+<p class="img-caption"><strong>Gambar 1.</strong> Ilustrasi yang menggambarkan cara intent implisit
+disampaikan melalui sistem untuk memulai aktivitas lain: <b>[1]</b> <em>Aktivitas A</em> membuat sebuah
+{@link android.content.Intent} dengan keterangan tindakan dan meneruskannya ke {@link
+android.content.Context#startActivity startActivity()}. <b>[2]</b> Sistem Android akan mencari semua
+aplikasi untuk filter intent yang cocok dengan intent tersebut. Bila cocok, <b>[3]</b> sistem akan
+memulai aktivitas mencocokkan (<em>Aktivitas B</em>) dengan memanggil metode {@link
+android.app.Activity#onCreate onCreate()} dan meneruskannya ke {@link android.content.Intent}.
+</p>
+</div>
+
+<p>Bila Anda membuat intent implisit, sistem Android akan menemukan komponen yang sesuai untuk memulai
+dengan membandingkan konten intent dengan <em>filter intent</em> yang dideklarasikan dalam <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">file manifes</a> aplikasi lain di
+perangkat. Jika intent cocok dengan filter intent, sistem akan memulai komponen tersebut dan mengiriminya
+objek {@link android.content.Intent}. Jika banyak filter intent yang kompatibel, sistem
+menampilkan dialog sehingga pengguna bisa memilih aplikasi yang akan digunakan.</p>
+
+<p>Filter intent adalah ekspresi dalam file manifes aplikasi yang
+menetapkan tipe intent yang akan diterima
+komponen. Misalnya, dengan mendeklarasikan intent filter untuk aktivitas,
+Anda akan memungkinkan aplikasi lain untuk langsung memulai aktivitas Anda dengan intent tertentu.
+Demikian pula, jika Anda <em>tidak</em> mendeklarasikan filter intent untuk suatu aktivitas, maka aktivitas tersebut hanya bisa dimulai
+dengan intent eksplisit.</p>
+
+<p class="caution"><strong>Perhatian:</strong> Untuk memastikan aplikasi Anda aman, selalu gunakan intent
+eksplisit saat memulai {@link android.app.Service} dan jangan
+mendeklarasikan filter intent untuk layanan. Menggunakan intent implisit untuk memulai layanan akan menimbulkan
+bahaya keamanan karena Anda tidak bisa memastikan layanan apa yang akan merespons intent,
+dan pengguna tidak bisa melihat layanan mana yang dimulai. Mulai dari Android 5.0 (API level 21), sistem
+melontarkan eksepsi jika Anda memanggil {@link android.content.Context#bindService bindService()}
+dengan intent implisit.</p>
+
+
+
+
+
+<h2 id="Building">Membangun Intent</h2>
+
+<p>Objek {@link android.content.Intent} membawa informasi yang digunakan sistem Android
+untuk menentukan komponen mana yang akan dimulai (misalnya nama persis dari suatu komponen atau kategori
+komponen yang seharusnya menerima intent), ditambah informasi yang digunakan komponen penerima untuk
+melakukan tindakan dengan benar (misalnya tindakan yang harus dilakukan dan data yang harus diolah).</p>
+
+
+<p>Informasi utama yang dimuat dalam {@link android.content.Intent} adalah sebagai berikut:</p>
+
+<dl>
+
+<dt><b>Nama komponen</b></dt>
+<dd>Nama komponen yang akan dimulai.
+
+<p>Ini opsional, namun merupakan bagian informasi penting yang membuat intent
+menjadi <b>eksplisit</b>, yaitu intent harus dikirim hanya ke komponen aplikasi
+yang didefinisikan oleh nama komponen. Tanpa nama komponen, intent menjadi <b>implisit</b> dan
+sistem akan memutuskan komponen mana yang harus menerima intent berdasarkan informasi intent lain
+(misalnya tindakan, data, dan kategori—yang dijelaskan di bawah ini). Jadi jika Anda ingin memulai komponen
+tertentu dalam aplikasi, Anda harus menetapkan nama komponen tersebut.</p>
+
+<p class="note"><strong>Catatan:</strong> Saat memulai {@link android.app.Service}, Anda harus
+<strong>selalu menetapkan nama komponen</strong>. Jika tidak, maka Anda tidak bisa memastikan layanan apa
+yang akan merespons intent tersebut, dan pengguna tidak bisa melihat layanan mana yang dimulai.</p>
+
+<p>Bidang {@link android.content.Intent} ini adalah objek
+{@link android.content.ComponentName}, yang bisa Anda tetapkan menggunakan
+nama kelas yang sepenuhnya memenuhi syarat dari komponen target, termasuk nama paket aplikasi. Misalnya,
+{@code com.example.ExampleActivity}. Anda bisa mengatur nama komponen dengan {@link
+android.content.Intent#setComponent setComponent()}, {@link android.content.Intent#setClass
+setClass()}, {@link android.content.Intent#setClassName(String, String) setClassName()}, atau dengan konstruktor
+{@link android.content.Intent}.</p>
+
+</dd>
+
+<p><dt><b>Tindakan</b></dt>
+<dd>String yang menetapkan tindakan generik untuk dilakukan (misalnya <em>lihat</em> atau <em>pilih</em>).
+
+<p>Dalam hal intent siaran, ini adalah tindakan yang terjadi dan dilaporkan.
+Tindakan ini sangat menentukan bagaimana keseluruhan intent disusun—terutama
+apa yang dimuat dalam data dan ekstra.
+
+<p>Anda bisa menetapkan tindakan sendiri yang akan digunakan oleh intent dalam aplikasi Anda (atau digunakan oleh aplikasi
+lain untuk memanggil komponen dalam aplikasi Anda), namun Anda harus menggunakan konstanta tindakan
+yang didefinisikan oleh kelas {@link android.content.Intent} atau kelas kerangka kerja lain. Berikut ini adalah beberapa
+tindakan umum untuk memulai sebuah aktivitas:</p>
+
+<dl>
+<dt>{@link android.content.Intent#ACTION_VIEW}</dt>
+ <dd>Gunakan tindakan ini dalam intent dengan {@link
+ android.content.Context#startActivity startActivity()} saat Anda memiliki beberapa informasi yang
+ bisa ditampilkan aktivitas kepada pengguna, misalnya foto yang bisa dilihat dalam aplikasi galeri, atau alamat
+ yang bisa dilihat dalam aplikasi peta.</dd>
+
+<dt>{@link android.content.Intent#ACTION_SEND}</dt>
+ <dd>Juga dikenal dengan intent "berbagi", Anda harus menggunakannya dalam intent dengan {@link
+ android.content.Context#startActivity startActivity()} bila Anda memiliki data yang bisa digunakan pengguna untuk
+ berbagi melalui aplikasi lain, misalnya aplikasi email atau aplikasi jaringan sosial.</dd>
+</dl>
+
+<p>Lihat referensi kelas {@link android.content.Intent} untuk konstanta
+selengkapnya yang mendefinisikan tindakan generik. Tindakan lain yang didefinisikan
+di tempat lain dalam kerangka kerja Android, misalnya dalam {@link android.provider.Settings} untuk tindakan
+yang membuka layar tertentu dalam aplikasi Settings di sistem.</p>
+
+<p>Anda bisa menetapkan tindakan untuk sebuah intent dengan {@link android.content.Intent#setAction
+setAction()} atau dengan konstruktor {@link android.content.Intent}.</p>
+
+<p>Jika mendefinisikan tindakan Anda sendiri, pastikan untuk memasukkan nama paket aplikasi Anda
+sebagai awalan. Misalnya:</p>
+<pre>static final String ACTION_TIMETRAVEL = "com.example.action.TIMETRAVEL";</pre>
+</dd>
+
+<dt><b>Data</b></dt>
+<dd>URI (objek {@link android.net.Uri}) yang mengacu data untuk diolah dan/atau
+tipe MIME dari data tersebut. Tipe data yang disediakan umumnya didikte oleh tindakan intent.
+Misalnya, jika tindakan merupakan {@link android.content.Intent#ACTION_EDIT}, data harus berisi
+URI dari dokumen untuk diedit.
+
+<p>Saat membuat intent,
+seringkali tipe data (tipe MIME-nya) selain URI perlu ditetapkan.
+Misalnya, aktivitas yang mampu menampilkan gambar mungkin tidak mampu
+memutar file audio, walaupun format URI mungkin serupa.
+Jadi menetapkan tipe MIME data Anda akan membantu sistem
+Android menemukan komponen terbaik untuk diterima intent.
+Akan tetapi, tipe MIME seringkali bisa diambil dari URI—terutama saat datanya merupakan URI
+{@code content:}, yang menunjukkan data tersebut berada di perangkat dan dikontrol oleh
+{@link android.content.ContentProvider}, yang membuat data tipe MIME terlihat di sistem.</p>
+
+<p>Untuk mengatur data URI saja, panggil {@link android.content.Intent#setData setData()}.
+Untuk mengatur tipe MIME saja, panggil {@link android.content.Intent#setType setType()}. Jika perlu, Anda
+bisa mengatur keduanya secara eksplisit dengan {@link
+android.content.Intent#setDataAndType setDataAndType()}.</p>
+
+<p class="caution"><strong>Perhatian:</strong> Jika ingin mengatur tipe URI dan MIME,
+<strong>jangan</strong> panggil {@link android.content.Intent#setData setData()} dan
+{@link android.content.Intent#setType setType()} karena mereka saling menghapuskan nilai satu sama lain.
+Selalu gunakan {@link android.content.Intent#setDataAndType setDataAndType()} untuk mengatur
+tipe URI maupun MIME.</p>
+</dd>
+
+<p><dt><b>Kategori</b></dt>
+<dd>String yang berisi informasi tambahan tentang jenis komponen
+yang harus menangani intent. Keterangan kategori dalam jumlah berapa pun bisa
+dimasukkan dalam intent, namun sebagian besar intent tidak memerlukan kategori.
+Berikut ini adalah beberapa kategori umum:
+
+<dl>
+<dt>{@link android.content.Intent#CATEGORY_BROWSABLE}</dt>
+ <dd>Aktivitas target memungkinkannya dimulai oleh browser web untuk menampilkan data
+yang diacu oleh tautan—misalnya gambar atau pesan e-mail.
+ </dd>
+<dt>{@link android.content.Intent#CATEGORY_LAUNCHER}</dt>
+ <dd>Aktivitas tersebut adalah aktivitas awal dari sebuah tugas dan dicantumkan dalam
+ launcher aplikasi sistem.
+ </dd>
+</dl>
+
+<p>Lihat keterangan kelas {@link android.content.Intent} untuk mengetahui daftar lengkap
+kategori.</p>
+
+<p>Anda bisa menetapkan kategori dengan {@link android.content.Intent#addCategory addCategory()}.</p>
+</dd>
+</dl>
+
+
+<p>Properti yang tercantum di atas (nama komponen, tindakan, data, dan kategori) menyatakan
+karakteristik yang mendefinisikan intent. Dengan membaca properti ini, sistem Android
+mampu memutuskan komponen aplikasi yang harus dimulainya.</p>
+
+<p>Akan tetapi, intent bisa membawa informasi tambahan yang tidak memengaruhi
+cara intent ditetapkan pada komponen aplikasi. Intent juga bisa menyediakan:</p>
+
+<dl>
+<dt><b>Ekstra</b></dt>
+<dd>Pasangan nilai-kunci yang membawa informasi yang diperlukan untuk menghasilkan tindakan yang diminta.
+Seperti halnya beberapa tindakan menggunakan jenis tertentu URI data, beberapa tindakan juga menggunakan ekstra tertentu.
+
+<p>Anda bisa menambahkan data ekstra dengan beragam metode {@link android.content.Intent#putExtra putExtra()},
+masing-masing menerima dua parameter: nama kunci dan nilainya.
+Anda juga bisa membuat objek {@link android.os.Bundle} dengan semua data ekstra, kemudian memasukkan
+{@link android.os.Bundle} dalam {@link android.content.Intent} dengan {@link
+android.content.Intent#putExtras putExtras()}.</p>
+
+<p>Misalnya, saat membuat intent yang akan dikirimkan bersama email
+{@link android.content.Intent#ACTION_SEND}, Anda bisa menetapkan penerima "kepada" dengan kunci
+{@link android.content.Intent#EXTRA_EMAIL}, dan menetapkan "subjek" dengan kunci
+{@link android.content.Intent#EXTRA_SUBJECT}.</p>
+
+<p>Kelas {@link android.content.Intent} menetapkan beberapa konstanta {@code EXTRA_*}
+untuk tipe data standar. Jika Anda ingin mendeklarasikan kunci ekstra sendiri (untuk intent yang
+diterima aplikasi Anda), pastikan untuk memasukkan nama paket aplikasi
+sebagai awalan. Misalnya:</p>
+<pre>static final String EXTRA_GIGAWATTS = "com.example.EXTRA_GIGAWATTS";</pre>
+</dd>
+
+<dt><b>Flag</b></dt>
+<dd>Flag didefinisikan dalam kelas {@link android.content.Intent} yang berfungsi sebagai metadata untuk
+intent. Flag menginstruksikan cara meluncurkan aktivitas (misalnya,
+<a href="{@docRoot}guide/components/tasks-and-back-stack.html">tugas</a> mana yang harus dimiliki suatu aktivitas
+) dan cara memperlakukannya setelah diluncurkan (misalnya, apakah aktivitas tersebut masuk ke dalam daftar aktivitas
+terbaru) pada sistem Android.
+
+<p>Untuk informasi selengkapnya, lihat metode {@link android.content.Intent#setFlags setFlags()} .</p>
+</dd>
+
+</dl>
+
+
+
+
+<h3 id="ExampleExplicit">Contoh intent eksplisit</h3>
+
+<p>Intent eksplisit adalah intent yang Anda gunakan untuk meluncurkan komponen aplikasi tertentu, seperti
+aktivitas tertentu atau layanan dalam aplikasi Anda. Untuk membuat intent eksplisit, definisikan
+nama komponen untuk objek {@link android.content.Intent} —semua
+properti intent lain bersifat opsional.</p>
+
+<p>Misalnya, jika Anda ingin membangun layanan dalam aplikasi Anda, bernama {@code DownloadService},
+yang didesain untuk mengunduh file dari web, Anda bisa memulainya dengan kode berikut ini:</p>
+
+<pre>
+// Executed in an Activity, so 'this' is the {@link android.content.Context}
+// The fileUrl is a string URL, such as "http://www.example.com/image.png"
+Intent downloadIntent = new Intent(this, DownloadService.class);
+downloadIntent.setData({@link android.net.Uri#parse Uri.parse}(fileUrl));
+startService(downloadIntent);
+</pre>
+
+<p>Konstruktor {@link android.content.Intent#Intent(Context,Class)}
+ menyediakan {@link android.content.Context} aplikasi dan
+objek {@link java.lang.Class} pada komponen. Dengan demikian,
+intent ini memulai secara eksplisit kelas {@code DownloadService} dalam aplikasi.</p>
+
+<p>Untuk informasi selengkapnya tentang membangun dan memulai layanan, lihat panduan
+<a href="{@docRoot}guide/components/services.html">Layanan</a>.</p>
+
+
+
+
+<h3 id="ExampleSend">Contoh intent implisit</h3>
+
+<p>Intent implisit menetapkan tindakan yang bisa memanggil aplikasi pada perangkat yang mampu
+melakukan tindakan. Menggunakan intent implisit berguna bila aplikasi Anda tidak bisa melakukan
+tindakan, namun aplikasi lain mungkin bisa melakukannya dan Anda ingin pengguna untuk memilih aplikasi mana yang ingin digunakan.</p>
+
+<p>Misalnya, jika memiliki konten yang Anda ingin agar pengguna berbagi konten itu dengan orang lain, buatlah intent
+dengan tindakan {@link android.content.Intent#ACTION_SEND}
+dan tambahkan ekstra yang menetapkan konten yang akan dibagikan. Bila Anda memanggil
+{@link android.content.Context#startActivity startActivity()} dengan intent tersebut, pengguna bisa
+memilih aplikasi yang akan digunakan untuk berbagi konten.</p>
+
+<p class="caution"><strong>Perhatian:</strong> Ada kemungkinan pengguna tidak memiliki <em>suatu</em>
+aplikasi yang menangani intent implisit yang Anda kirimkan ke {@link android.content.Context#startActivity
+startActivity()}. Jika itu terjadi, panggilan akan gagal dan aplikasi Anda akan crash. Untuk memeriksa
+apakah aktivitas bisa menerima intent, panggil {@link android.content.Intent#resolveActivity
+resolveActivity()} pada objek {@link android.content.Intent} Anda. Jika hasilnya bukan nol,
+berarti setidaknya ada satu aplikasi yang bisa menangani intent tersebut dan aman untuk memanggil
+{@link android.content.Context#startActivity startActivity()}. Jika hasilnya nol,
+Anda tidak boleh menggunakan intent tersebut dan, jika memungkinkan, Anda harus menonaktifkan fitur yang mengeluarkan
+intent tersebut.</p>
+
+
+<pre>
+// Create the text message with a string
+Intent sendIntent = new Intent();
+sendIntent.setAction(Intent.ACTION_SEND);
+sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);
+sendIntent.setType("text/plain");
+
+// Verify that the intent will resolve to an activity
+if (sendIntent.resolveActivity(getPackageManager()) != null) {
+ startActivity(sendIntent);
+}
+</pre>
+
+<p class="note"><strong>Catatan:</strong> Dalam hal ini, URI tidak digunakan, namun tipe data intent
+dideklarasikan untuk menetapkan konten yang dibawa oleh ekstra.</p>
+
+
+<p>Saat {@link android.content.Context#startActivity startActivity()} dipanggil, sistem akan
+memeriksa semua aplikasi yang terinstal untuk menentukan aplikasi mana yang bisa menangani intent jenis ini (
+intent dengan tindakan {@link android.content.Intent#ACTION_SEND} dan yang membawa data
+"teks/polos"). Jika hanya ada satu aplikasi yang bisa menanganinya, aplikasi tersebut akan langsung terbuka dan diberi
+intent tersebut. Jika banyak aktivitas menerima intent, sistem akan
+menampilkan dialog sehingga pengguna bisa memilih aplikasi mana yang digunakan.</p>
+
+
+<div class="figure" style="width:200px">
+ <img src="{@docRoot}images/training/basics/intent-chooser.png" alt="">
+ <p class="img-caption"><strong>Gambar 2.</strong> Dialog pemilih.</p>
+</div>
+
+<h3 id="ForceChooser">Memaksakan pemilih aplikasi</h3>
+
+<p>Bila ada lebih dari satu aplikasi yang merespons intent implisit Anda,
+pengguna bisa memilih aplikasi mana yang digunakan dan membuat aplikasi tersebut pilihan default untuk
+tindakan tersebut. Ini sangat membantu saat melakukan tindakan di mana pengguna
+mungkin ingin menggunakan aplikasi yang sama untuk seterusnya, seperti saat membuka halaman web (pengguna
+biasanya memilih hanya satu browser web).</p>
+
+<p>Akan tetapi, jika ada banyak aplikasi yang bisa merespons intent tersebut dan pengguna mungkin ingin menggunakan aplikasi
+yang berbeda untuk setiap kalinya, Anda harus menampilkan dialog pemilih secara eksplisit. Dialog pemilih akan meminta
+pengguna memilih aplikasi yang akan digunakan untuk tindakan tertentu setiap kali (pengguna tidak bisa memilih aplikasi default untuk
+tindakan tersebut). Misalnya, saat aplikasi Anda melakukan "berbagi" dengan tindakan {@link
+android.content.Intent#ACTION_SEND}, pengguna mungkin ingin berbagi menggunakan aplikasi berbeda sesuai
+dengan situasi mereka saat itu, jadi Anda harus selalu menggunakan dialog pemilih, seperti yang ditampilkan dalam gambar 2.</p>
+
+
+
+
+<p>Untuk menampilkan pemilih, buatlah {@link android.content.Intent} menggunakan {@link
+android.content.Intent#createChooser createChooser()} dan teruskan ke {@link
+android.app.Activity#startActivity startActivity()}. Misalnya:</p>
+
+<pre>
+Intent sendIntent = new Intent(Intent.ACTION_SEND);
+...
+
+// Always use string resources for UI text.
+// This says something like "Share this photo with"
+String title = getResources().getString(R.string.chooser_title);
+// Create intent to show the chooser dialog
+Intent chooser = Intent.createChooser(sendIntent, title);
+
+// Verify the original intent will resolve to at least one activity
+if (sendIntent.resolveActivity(getPackageManager()) != null) {
+ startActivity(chooser);
+}
+</pre>
+
+<p>Ini menampilkan dialog dengan daftar aplikasi yang merespons intent yang diteruskan ke metode {@link
+android.content.Intent#createChooser createChooser()} dan menggunakan teks yang disediakan sebagai
+judul dialog.</p>
+
+
+
+
+
+
+
+
+
+<h2 id="Receiving">Menerima Intent Implisit</h2>
+
+<p>Untuk mengiklankan intent implisit yang bisa diterima aplikasi Anda, deklarasikan satu atau beberapa filter intent untuk
+tiap komponen aplikasi dengan elemen <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a>
+dalam <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">file manifes</a> Anda.
+Tiap filter intent menetapkan tipe intent yang diterimanya berdasarkan tindakan intent,
+data, dan kategori. Sistem akan mengirim intent implisit ke komponen aplikasi Anda hanya jika
+intent tersebut bisa diteruskan melalui salah satu filter intent.</p>
+
+<p class="note"><strong>Catatan:</strong> Intent eksplisit selalu dikirimkan ke targetnya,
+apa pun filter intent yang dideklarasikan komponen.</p>
+
+<p>Komponen aplikasi harus mendeklarasikan filter terpisah untuk setiap pekerjaan unik yang bisa dilakukannya.
+Misalnya, satu aktivitas dalam aplikasi galeri gambar bisa memiliki dua filter: satu filter
+untuk melihat gambar, dan filter lainnya untuk mengedit gambar. Bila aktivitas dimulai,
+aktivitas akan memeriksa {@link android.content.Intent} dan menentukan cara berperilaku berdasarkan informasi
+dalam {@link android.content.Intent} (misalnya menampilkan kontrol editor atau tidak).</p>
+
+<p>Tiap filter intent didefinisikan oleh elemen <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a>
+dalam file manifes aplikasi, yang tersarang dalam komponen aplikasi terkait (seperti
+elemen <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
+). Di dalam <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code <intent-filter>}</a>,
+Anda bisa menetapkan tipe intent yang akan diterima dengan menggunakan salah satu atau beberapa
+dari tiga elemen ini:</p>
+
+<dl>
+<dt><a href="{@docRoot}guide/topics/manifest/action-element.html">{@code <action>}</a></dt>
+ <dd>Mendeklarasikan tindakan intent yang diterima, dalam atribut {@code name}. Nilai
+ haruslah nilai string literal dari tindakan, bukan konstanta kelas.</dd>
+<dt><a href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a></dt>
+ <dd>Mendeklarasikan tipe data yang diterima, menggunakan salah satu atau beberapa atribut yang menetapkan beragam
+ aspek URI data (<code>scheme</code>, <code>host</code>, <code>port</code>,
+ <code>path</code>, dll.) dan tipe MIME.</dd>
+<dt><a href="{@docRoot}guide/topics/manifest/category-element.html">{@code <category>}</a></dt>
+ <dd>Mendeklarasikan kategori intent yang diterima, dalam atribut {@code name}. Nilai
+ haruslah nilai string literal dari tindakan, bukan konstanta kelas.
+
+ <p class="note"><strong>Catatan:</strong> Untuk menerima intent implisit, Anda
+ <strong>harus menyertakan</strong> kategori
+{@link android.content.Intent#CATEGORY_DEFAULT} dalam filter intent. Metode
+ {@link android.app.Activity#startActivity startActivity()}dan
+ {@link android.app.Activity#startActivityForResult startActivityForResult()} memperlakukan semua intent
+ seolah-olah mendeklarasikan kategori {@link android.content.Intent#CATEGORY_DEFAULT}.
+ Jika tidak mendeklarasikan kategori ini dalam filter intent Anda, tidak ada intent implisit yang ditetapkan untuk
+ aktivitas Anda.</p>
+ </dd>
+</dl>
+
+<p>Misalnya, ini adalah deklarasi aktivitas dengan filter intent yang diterima intent
+{@link android.content.Intent#ACTION_SEND} bila tipe data berupa teks:</p>
+
+<pre>
+<activity android:name="ShareActivity">
+ <intent-filter>
+ <action android:name="android.intent.action.SEND"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+ <data android:mimeType="text/plain"/>
+ </intent-filter>
+</activity>
+</pre>
+
+<p>Anda bisa membuat filter yang menyertakan lebih dari satu instance
+<a href="{@docRoot}guide/topics/manifest/action-element.html">{@code <action>}</a>,
+<a href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a>, atau
+<a href="{@docRoot}guide/topics/manifest/category-element.html">{@code <category>}</a>.
+Jika Anda melakukannya, Anda hanya perlu memastikan bahwa komponen bisa menangani semua kombinasi
+elemen filter tersebut.</p>
+
+<p>Bila ingin menangani beragam jenis intent, namun hanya dalam kombinasi
+tindakan, data, dan tipe kategori tertentu, maka Anda harus membuat banyak filter intent.</p>
+
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+<h2>Membatasi akses ke komponen</h2>
+<p>Menggunakan filter intent bukanlah cara yang aman untuk mencegah aplikasi lain memulai
+komponen Anda. Walaupun filter intent membatasi komponen agar hanya merespons
+jenis intent implisit tertentu, aplikasi lain bisa saja memulai komponen aplikasi Anda
+dengan menggunakan intent eksplisit jika pengembangnya menentukan nama komponen Anda.
+Jika perlu <em>hanya aplikasi Anda sendiri</em> yang mampu memulai salah satu komponen,
+atur atribut <a href="{@docRoot}guide/topics/manifest/activity-element.html#exported">{@code
+exported}</a> ke {@code "false"} untuk komponen itu.
+</p>
+</div>
+</div>
+
+<p>Intent implisit diuji terhadap filter dengan membandingkan intent dengan masing-masing
+dari ketiga elemen. Agar dikirim ke komponen, intent harus lolos ketiga pengujian tersebut.
+Jika intent gagal dalam salah satu pengujian, sistem Android tidak akan mengirim intent ke
+komponen. Akan tetapi, karena sebuah komponen dapat memiliki beberapa filter intent, intent yang tidak
+lolos melalui salah satu filter komponen mungkin akan lolos di filter lain.
+Informasi selengkapnya tentang cara sistem menetapkan intent disediakan dalam bagian di bawah ini
+tentang <a href="#Resolution">Resolusi Intent</a>.</p>
+
+<p class="caution"><strong>Perhatian:</strong> Untuk menghindari menjalankan
+{@link android.app.Service} aplikasi yang berbeda secara tidak sengaja, selalu gunakan intent eksplisit untuk memulai layanan Anda sendiri dan jangan
+deklarasikan filter intent untuk layanan Anda.</p>
+
+<p class="note"><strong>Catatan:</strong>
+Untuk semua aktivitas, Anda harus mendeklarasikan filter intent dalam file manifes.
+Akan tetapi, filter untuk penerima siaran bisa didaftarkan secara dinamis dengan memanggil
+{@link android.content.Context#registerReceiver(BroadcastReceiver, IntentFilter, String,
+Handler) registerReceiver()}. Anda nanti bisa mencabut pendaftaran penerima dengan {@link
+android.content.Context#unregisterReceiver unregisterReceiver()}. Dengan begitu aplikasi Anda
+bisa mendengarkan siaran tertentu hanya selama periode waktu yang telah ditetapkan saat aplikasi Anda
+berjalan.</p>
+
+
+
+
+
+
+
+<h3 id="ExampleFilters">Contoh filter</h3>
+
+<p>Untuk lebih memahami beberapa perilaku filter intent, lihatlah cuplikan berikut
+dari file manifes aplikasi berbagi di jaringan sosial.</p>
+
+<pre>
+<activity android:name="MainActivity">
+ <!-- This activity is the main entry, should appear in app launcher -->
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+</activity>
+
+<activity android:name="ShareActivity">
+ <!-- This activity handles "SEND" actions with text data -->
+ <intent-filter>
+ <action android:name="android.intent.action.SEND"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+ <data android:mimeType="text/plain"/>
+ </intent-filter>
+ <!-- This activity also handles "SEND" and "SEND_MULTIPLE" with media data -->
+ <intent-filter>
+ <action android:name="android.intent.action.SEND"/>
+ <action android:name="android.intent.action.SEND_MULTIPLE"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+ <data android:mimeType="application/vnd.google.panorama360+jpg"/>
+ <data android:mimeType="image/*"/>
+ <data android:mimeType="video/*"/>
+ </intent-filter>
+</activity>
+</pre>
+
+<p>Aktivitas pertama, {@code MainActivity}, merupakan titik masuk utama aplikasi—aplikasi yang
+terbuka saat pengguna meluncurkan aplikasi dengan ikon launcher:</p>
+<ul>
+ <li>Tindakan {@link android.content.Intent#ACTION_MAIN}
+ menunjukkan ini adalah titik masuk utama dan tidak mengharapkan data intent apa pun.</li>
+ <li>Kategori {@link android.content.Intent#CATEGORY_LAUNCHER} menunjukjkan bahwa ikon
+ aktivitas ini harus ditempatkan dalam launcher aplikasi sistem. Jika elemen <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
+ tidak menetapkan ikon dengan{@code icon}, maka sistem akan menggunakan ikon dari elemen
+<a href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>.</li>
+</ul>
+<p>Keduanya harus dipasangkan bersama agar aktivitas muncul dalam launcher aplikasi.</p>
+
+<p>Aktivitas kedua, {@code ShareActivity}, dimaksudkan untuk memudahkan berbagi teks dan konten
+media. Walaupun pengguna mungkin memasuki aktivitas ini dengan mengarah ke aktivitas dari {@code MainActivity},
+pengguna juga bisa memasukkan {@code ShareActivity} secara langsung dari aplikasi lain yang mengeluarkan intent
+implisit yang cocok dengan salah satu dari kedua filter intent.</p>
+
+<p class="note"><strong>Catatan:</strong> Tipe MIME,
+<a href="https://developers.google.com/panorama/android/">{@code
+application/vnd.google.panorama360+jpg}</a>, merupakan tipe data khusus yang menetapkan
+foto panorama, yang bisa Anda tangani dengan API <a href="{@docRoot}reference/com/google/android/gms/panorama/package-summary.html">panorama
+Google</a>.</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h2 id="PendingIntent">Menggunakan Intent Tertunda</h2>
+
+<p>Objek {@link android.app.PendingIntent} merupakan pembungkus objek {@link
+android.content.Intent}. Tujuan utama {@link android.app.PendingIntent}
+adalah memberikan izin pada aplikasi asing
+untuk menggunakan {@link android.content.Intent} yang termuat seolah-olah dieksekusi dari
+proses aplikasi Anda sendiri.</p>
+
+<p>Kasus penggunaan utama untuk intent tertunda antara lain:</p>
+<ul>
+ <li>Mendeklarasikan intent untuk dieksekusi saat pengguna melakukan tindakan dengan <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">Pemberitahuan</a>
+ ({@link android.app.NotificationManager}
+ sistem Android akan mengeksekusi {@link android.content.Intent}) Anda.
+ <li>Mendeklarasikan intent untuk dieksekusi saat pengguna melakukan tindakan dengan
+<a href="{@docRoot}guide/topics/appwidgets/index.html">App Widget</a>
+ (aplikasi layar Home mengeksekusi {@link android.content.Intent}).
+ <li>Mendeklarasikan intent untuk dieksekusi di waktu yang telah ditetapkan di masa mendatang
+({@link android.app.AlarmManager} sistem Android akan mengeksekusi {@link android.content.Intent}).
+</ul>
+
+<p>Karena setiap objek {@link android.content.Intent} didesain untuk ditangani oleh tipe
+tertentu dari komponen aplikasi (baik {@link android.app.Activity}, {@link android.app.Service}, maupun
+ {@link android.content.BroadcastReceiver}), jadi {@link android.app.PendingIntent} harus
+dibuat dengan pertimbangan yang sama. Saat menggunakan intent tertunda, aplikasi Anda tidak akan
+mengeksekusi intent dengan panggilan seperti {@link android.content.Context#startActivity
+startActivity()}. Anda harus mendeklarasikan tipe komponen yang dimaksud saat membuat
+{@link android.app.PendingIntent} dengan memanggil metode kreator masing-masing:</p>
+
+<ul>
+ <li>{@link android.app.PendingIntent#getActivity PendingIntent.getActivity()} untuk
+ {@link android.content.Intent} yang memulai {@link android.app.Activity}.</li>
+ <li>{@link android.app.PendingIntent#getService PendingIntent.getService()} untuk
+ {@link android.content.Intent} yang memulai {@link android.app.Service}.</li>
+ <li>{@link android.app.PendingIntent#getBroadcast PendingIntent.getBroadcast()} untuk
+ {@link android.content.Intent} yang memulai {@link android.content.BroadcastReceiver}.</li>
+</ul>
+
+<p>Kecuali jika aplikasi Anda <em>menerima</em> intent tertunda dari aplikasi lain,
+metode di atas untuk membuat {@link android.app.PendingIntent} menjadi satu-satunya metode
+{@link android.app.PendingIntent} yang mungkin Anda butuhkan.</p>
+
+<p>Tiap metode mengambil {@link android.content.Context} aplikasi saat itu,
+{@link android.content.Intent} yang ingin Anda bungkus, dan satu atau beberapa flag yang menetapkan
+cara penggunaan intent (misalnya apakah intent bisa digunakan lebih dari sekali).</p>
+
+<p>Informasi selengkapnya tentang intent tertunda disediakan pada dokumentasi untuk setiap
+kasus penggunaan yang bersangkutan, seperti dalam panduan API <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">Notifications</a>
+dan <a href="{@docRoot}guide/topics/appwidgets/index.html">App Widgets</a>.</p>
+
+
+
+
+
+
+
+<h2 id="Resolution">Resolusi Intent</h2>
+
+
+<p>Saat sistem menerima intent implisit yang memulai suatu aktivitas, sistem tersebut akan mencari
+aktivitas terbaik untuk intent dengan membandingkan intent dengan filter intent berdasarkan tiga aspek:</p>
+
+<ul>
+ <li>Tindakan intent
+ <li>Data intent (baik URI maupun tipe data)
+ <li>Kategori intent
+</ul>
+
+<p>Bagian berikut menjelaskan cara pencocokan intent dengan komponen yang sesuai
+sehubungan dengan cara pendeklarasian filter intent dalam file manifes aplikasi.</p>
+
+
+<h3 id="ActionTest">Pengujian tindakan</h3>
+
+<p>Untuk menetapkan tindakan intent yang diterima, filter intent bisa mendeklarasikan nol atau beberapa elemen
+<a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
+<action>}</a>. Misalnya:</p>
+
+<pre>
+<intent-filter>
+ <action android:name="android.intent.action.EDIT" />
+ <action android:name="android.intent.action.VIEW" />
+ ...
+</intent-filter>
+</pre>
+
+<p>Untuk melewati filter ini, tindakan yang ditetapkan dalam {@link android.content.Intent}
+harus sesuai dengan salah satu tindakan yang tercantum dalam filter.</p>
+
+<p>Jika filter tidak mencantumkan tindakan apa pun, maka tidak ada intent
+yang dicocokkan, jadi semua intent gagal dalam pengujian. Akan tetapi, jika sebuah {@link android.content.Intent}
+tidak menetapkan suatu tindakan, maka akan lolos pengujian (asalkan filter
+berisi setidaknya satu tindakan).</p>
+
+
+
+<h3 id="CategoryTest">Pengujian kategori</h3>
+
+<p>Untuk menetapkan kategori intent yang diterima, filter intent bisa mendeklarasikan nol atau beberapa elemen
+<a href="{@docRoot}guide/topics/manifest/category-element.html">{@code
+<category>}</a>. Misalnya:</p>
+
+<pre>
+<intent-filter>
+ <category android:name="android.intent.category.DEFAULT" />
+ <category android:name="android.intent.category.BROWSABLE" />
+ ...
+</intent-filter>
+</pre>
+
+<p>Agar intent bisa lolos pengujian kategori, setiap kategori dalam {@link android.content.Intent}
+harus sesuai dengan kategori dalam filter. Kebalikannya tidak diperlukan—filter intent bisa
+mendeklarasikan kategori lebih banyak daripada yang ditetapkan dalam {@link android.content.Intent} dan
+{@link android.content.Intent} tetap akan lolos. Oleh karena itu, intent tanpa kategori harus
+selalu lolos pengujian ini, kategori apa pun yang dideklarasikan dalam filter.</p>
+
+<p class="note"><strong>Catatan:</strong>
+Android secara otomatis menerapkan kategori {@link android.content.Intent#CATEGORY_DEFAULT}
+untuk semua intent implisit yang diteruskan ke {@link
+android.content.Context#startActivity startActivity()} dan {@link
+android.app.Activity#startActivityForResult startActivityForResult()}.
+Jadi jika ingin aktivitas Anda menerima intent implisit, aktivitas tersebut harus
+menyertakan kategori untuk{@code "android.intent.category.DEFAULT"} dalam filter intent (seperti
+yang ditampilkan dalam contoh{@code <intent-filter>} sebelumnya.</p>
+
+
+
+<h3 id="DataTest">Pengujian data</h3>
+
+<p>Untuk menetapkan data intent yang diterima, filter intent bisa mendeklarasikan nol atau beberapa elemen
+<a href="{@docRoot}guide/topics/manifest/data-element.html">{@code
+<data>}</a>. Misalnya:</p>
+
+<pre>
+<intent-filter>
+ <data android:mimeType="video/mpeg" android:scheme="http" ... />
+ <data android:mimeType="audio/mpeg" android:scheme="http" ... />
+ ...
+</intent-filter>
+</pre>
+
+<p>Tiap elemen <code><a href="{@docRoot}guide/topics/manifest/data-element.html"><data></a></code>
+bisa menetapkan struktur URI dan tipe data (tipe media MIME). Ada atribut
+terpisah — {@code scheme}, {@code host}, {@code port},
+dan {@code path} — untuk setiap bagian URI:
+</p>
+
+<p style="margin-left: 2em">{@code <scheme>://<host>:<port>/<path>}</p>
+
+<p>
+Misalnya:
+</p>
+
+<p style="margin-left: 2em">{@code content://com.example.project:200/folder/subfolder/etc}</p>
+
+<p>Dalam URI ini, skemanya adalah {@code content}, host-nya adalah {@code com.example.project},
+port-nya adalah {@code 200}, dan path-nya adalah {@code folder/subfolder/etc}.
+</p>
+
+<p>Tiap atribut bersifat opsional dalam elemen <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a>,
+namun ada dependensi linear:</p>
+<ul>
+ <li>Jika skema tidak ditetapkan, host akan diabaikan.</li>
+ <li>Jika host tidak ditetapkan, port akan diabaikan.</li>
+ <li>Jika skema dan host tidak ditetapkan, path akan diabaikan.</li>
+</ul>
+
+<p>Bila URI dalam intent dibandingkan dengan spesifikasi URI dalam filter,
+pembandingannya hanya dengan bagian URI yang disertakan dalam filter. Misalnya:</p>
+<ul>
+ <li>Jika sebuah filter menetapkan hanya satu skema, semua URI dengan skema tersebut akan cocok
+dengan filter.</li>
+ <li>Jika sebuah filter menetapkan satu skema dan satu otoritas namun tanpa path, semua URI
+dengan skema dan otoritas yang sama akan lolos dari filter, apa pun path-nya.</li>
+ <li>Jika sebuah filter menetapkan satu skema, otoritas dan path, hanya URI dengan skema,
+otoritas, dan path sama yang bisa lolos dari filter.</li>
+</ul>
+
+<p class="note"><strong>Catatan:</strong> Spesifikasi path bisa berisi
+wildcard bintang (*) untuk hanya mencocokkan nama path secara parsial.</p>
+
+<p>Pengujian data membandingkan URI maupun tipe MIME dalam intent dengan URI
+dan tipe MIME yang ditetapkan dalam filter. Aturannya adalah sebagai berikut:
+</p>
+
+<ol type="a">
+<li>Intent yang tidak berisi URI maupun tipe MIME hanya akan lolos
+pengujian jika filter tersebut tidak menetapkan URI atau tipe MIME apa pun.</li>
+
+<li>Intent yang berisi URI namun tidak berisi tipe MIME (baik secara eksplisit maupun tidak langsung dari
+URI) hanya akan lolos pengujian jika URI-nya cocok dengan format URI filter
+dan filternya juga tidak menetapkan tipe MIME.</li>
+
+<li>Intent yang berisi tipe MIME namun tidak berisi URI hanya akan lolos pengujian
+jika filter mencantumkan tipe MIME yang sama dan tidak menetapkan format URI.</li>
+
+<li>Intent yang berisi URI maupun tipe MIME (baik secara eksplisit maupun tidak langsung dari
+URI) hanya akan lolos pengujian bagian tipe MIME jika
+tipe tersebut cocok dengan tipe yang dicantumkan dalam filter. Ini akan lolos pengujian bagian URI
+jika URI-nya cocok dengan URI dalam filter atau memiliki {@code content:}
+atau URI {@code file:} dan filter tidak menetapkan URI. Dengan kata lain,
+komponen dianggap mendukung data {@code content:} dan {@code file:} jika
+filternya <em>hanya</em> mencantumkan tipe MIME.</p></li>
+</ol>
+
+<p>
+Aturan terakhir ini, aturan (d), mencerminkan harapan
+bahwa komponen mampu mendapatkan data lokal dari file atau penyedia konten.
+Oleh karena itu, filter mereka mencatumkan tipe data saja dan tidak secara eksplisit
+harus menamai skema {@code content:} dan {@code file:}.
+Ini adalah kasus umum. Elemen <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a>
+seperti berikut ini, misalnya, memberi tahu Android bahwa komponen bisa mengambil data gambar dari penyedia
+konten dan menampilkannya:
+</p>
+
+<pre>
+<intent-filter>
+ <data android:mimeType="image/*" />
+ ...
+</intent-filter></pre>
+
+<p>
+Karena sebagian besar data yang tersedia dikeluarkan oleh penyedia konten, filter yang
+menetapkan tipe data namun bukan URI mungkin adalah yang paling umum.
+</p>
+
+<p>
+Konfigurasi umum yang lain adalah filter dengan skema dan tipe data. Misalnya
+, elemen <a href="{@docRoot}guide/topics/manifest/data-element.html">{@code <data>}</a>
+ seperti berikut ini akan memberi tahu Android bahwa
+komponen bisa mengambil data video dari jaringan untuk melakukan tindakan:
+</p>
+
+<pre>
+<intent-filter>
+ <data android:scheme="http" android:type="video/*" />
+ ...
+</intent-filter></pre>
+
+
+
+<h3 id="imatch">Pencocokan intent</h3>
+
+<p>Intent dicocokkan dengan filter intent selain untuk menemukan komponen
+target yang akan diaktifkan, juga untuk menemukan sesuatu tentang rangkaian
+komponen pada perangkat. Misalnya, aplikasi Home akan menempatkan launcher aplikasi
+dengan mencari semua aktivitas dengan filter intent yang menetapkan tindakan
+{@link android.content.Intent#ACTION_MAIN} dan
+kategori {@link android.content.Intent#CATEGORY_LAUNCHER}.</p>
+
+<p>Aplikasi Anda bisa menggunakan pencocokan intent dengan cara serupa.
+{@link android.content.pm.PackageManager} memiliki seperangkat metode {@code query...()}
+yang mengembalikan semua komponen yang bisa menerima intent tertentu, dan
+serangkaian metode{@code resolve...()} serupa yang menentukan komponen
+terbaik untuk merespons intent. Misalnya,
+{@link android.content.pm.PackageManager#queryIntentActivities
+queryIntentActivities()} akan mengembalikan daftar semua aktivitas yang bisa melakukan
+intent yang diteruskan sebagai argumen, dan {@link
+android.content.pm.PackageManager#queryIntentServices
+queryIntentServices()} akan mengembalikan daftar layanan serupa.
+Tidak ada metode yang akan mengaktifkan komponen; mereka hanya mencantumkan komponen yang
+bisa merespons. Ada metode serupa,
+{@link android.content.pm.PackageManager#queryBroadcastReceivers
+queryBroadcastReceivers()}, untuk penerima siaran.
+</p>
+
+
+
+
diff --git a/docs/html-intl/intl/id/guide/components/loaders.jd b/docs/html-intl/intl/id/guide/components/loaders.jd
new file mode 100644
index 0000000..88093cc
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/components/loaders.jd
@@ -0,0 +1,494 @@
+page.title=Aktivitas
+parent.title=Loader
+parent.link=activities.html
+@jd:body
+<div id="qv-wrapper">
+<div id="qv">
+ <h2>Dalam dokumen ini</h2>
+ <ol>
+ <li><a href="#summary">Rangkuman Loader API</a></li>
+ <li><a href="#app">Menggunakan Loader dalam Aplikasi</a>
+ <ol>
+ <li><a href="#requirements"></a></li>
+ <li><a href="#starting">Memulai Loader</a></li>
+ <li><a href="#restarting">Me-restart Loader</a></li>
+ <li><a href="#callback">Menggunakan Callback LoaderManager</a></li>
+ </ol>
+ </li>
+ <li><a href="#example">Contoh</a>
+ <ol>
+ <li><a href="#more_examples">Contoh Selengkapnya</a></li>
+ </ol>
+ </li>
+ </ol>
+
+ <h2>Kelas-kelas utama</h2>
+ <ol>
+ <li>{@link android.app.LoaderManager}</li>
+ <li>{@link android.content.Loader}</li>
+
+ </ol>
+
+ <h2>Contoh-contoh terkait</h2>
+ <ol>
+ <li> <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderCursor.html">
+LoaderCursor</a></li>
+ <li> <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html">
+LoaderThrottle</a></li>
+ </ol>
+ </div>
+</div>
+
+<p>Diperkenalkan di Android 3.0, loader memudahkan pemuatan data asinkron
+dalam aktivitas atau fragmen. Loader memiliki karakteristik ini:</p>
+ <ul>
+ <li>Loader tersedia untuk setiap {@link android.app.Activity} dan {@link
+android.app.Fragment}.</li>
+ <li>Loader menyediakan pemuatan data asinkron.</li>
+ <li>Loader memantau sumber data mereka dan memberikan hasil baru bila
+konten berubah.</li>
+ <li>Loader secara otomatis menghubungkan kembali ke kursor loader lalu saat
+dibuat kembali setelah perubahan konfigurasi. Karena itu, loader tidak perlu melakukan query ulang
+datanya.</li>
+ </ul>
+
+<h2 id="summary">Rangkuman Loader API</h2>
+
+<p>Ada beberapa kelas dan antarmuka yang mungkin dilibatkan dalam menggunakan
+loader pada aplikasi. Semuanya dirangkum dalam tabel ini:</p>
+
+<table>
+ <tr>
+ <th>Kelas/Antarmuka</th>
+ <th>Keterangan</th>
+ </tr>
+ <tr>
+ <td>{@link android.app.LoaderManager}</td>
+ <td>Kelas abstrak yang dikaitkan dengan {@link android.app.Activity} atau
+{@link android.app.Fragment} untuk mengelola satu atau beberapa instance {@link
+android.content.Loader}. Ini membantu aplikasi mengelola
+operasi berjalan lebih lama bersamaan dengan daur hidup {@link android.app.Activity}
+atau {@link android.app.Fragment}; penggunaan paling umumnya adalah dengan
+{@link android.content.CursorLoader}, akan tetapi aplikasi bebas menulis loader-nya
+ sendiri untuk memuat tipe data lainnya.
+ <br />
+ <br />
+ Hanya ada satu {@link android.app.LoaderManager} per aktivitas atau fragmen. Namun {@link android.app.LoaderManager} bisa memiliki
+beberapa loader.</td>
+ </tr>
+ <tr>
+ <td>{@link android.app.LoaderManager.LoaderCallbacks}</td>
+ <td>Antarmuka callback untuk klien berinteraksi dengan {@link
+android.app.LoaderManager}. Misalnya, Anda menggunakan metode callback {@link
+android.app.LoaderManager.LoaderCallbacks#onCreateLoader onCreateLoader()}
+untuk membuat loader baru.</td>
+ </tr>
+ <tr>
+ <td>{@link android.content.Loader}</td>
+ <td>Kelas abstrak yang melakukan pemuatan data asinkron. Ini
+adalah kelas dasar untuk loader. Biasanya Anda akan menggunakan {@link
+android.content.CursorLoader}, namun Anda bisa menerapkan subkelas sendiri. Selagi
+loader aktif, loader harus memantau sumber datanya dan memberikan hasil
+baru bila konten berubah. </td>
+ </tr>
+ <tr>
+ <td>{@link android.content.AsyncTaskLoader}</td>
+ <td>Loader abstrak yang menyediakan {@link android.os.AsyncTask} untuk melakukan pekerjaan.</td>
+ </tr>
+ <tr>
+ <td>{@link android.content.CursorLoader}</td>
+ <td>Subkelas {@link android.content.AsyncTaskLoader} yang meng-query
+{@link android.content.ContentResolver} dan mengembalikan {@link
+android.database.Cursor}. Kelas ini mengimplementasikan protokol {@link
+android.content.Loader} dengan cara standar untuk query kursor,
+yang dibuat berdasarkan {@link android.content.AsyncTaskLoader} untuk melakukan query kursor
+pada thread latar belakang agar tidak memblokir UI aplikasi. Menggunakan loader
+ini merupakan cara terbaik untuk memuat data secara asinkron dari {@link
+android.content.ContentProvider}, sebagai ganti melakukan query terkelola melalui
+fragmen atau API aktivitas.</td>
+ </tr>
+</table>
+
+<p>Kelas dan antarmuka dalam tabel di atas merupakan komponen
+esensial yang akan Anda gunakan untuk mengimplementasikan loader dalam aplikasi Anda. Anda tidak memerlukan semuanya
+untuk setiap loader yang dibuat, namun Anda akan selalu memerlukan acuan ke {@link
+android.app.LoaderManager} untuk memulai loader dan implementasi
+kelas {@link android.content.Loader} seperti {@link
+android.content.CursorLoader}. Bagian berikut ini menunjukkan kepada Anda cara menggunakan
+kelas dan antarmuka ini dalam aplikasi.</p>
+
+<h2 id ="app">Menggunakan Loader dalam Aplikasi</h2>
+<p>Bagian ini menjelaskan cara menggunakan loader dalam aplikasi Android. Aplikasi
+yang menggunakan loader biasanya berisi yang berikut ini:</p>
+<ul>
+ <li>{@link android.app.Activity} atau {@link android.app.Fragment}.</li>
+ <li>Instance {@link android.app.LoaderManager}.</li>
+ <li>{@link android.content.CursorLoader} akan memuat data yang didukung oleh {@link
+android.content.ContentProvider}. Atau, Anda dapat mengimplementasikan subkelas sendiri
+ dari {@link android.content.Loader} atau {@link android.content.AsyncTaskLoader} untuk
+memuat data dari beberapa sumber lain.</li>
+ <li>Implementasi untuk {@link android.app.LoaderManager.LoaderCallbacks}.
+Di sinilah Anda membuat loader baru dan mengelola acuan bagi loader
+yang ada.</li>
+<li>Cara menampilkan data loader, seperti {@link
+android.widget.SimpleCursorAdapter}.</li>
+ <li>Sumber data, seperti {@link android.content.ContentProvider}, saat menggunakan
+{@link android.content.CursorLoader}.</li>
+</ul>
+<h3 id="starting">Memulai Loader</h3>
+
+<p>{@link android.app.LoaderManager} mengelola satu atau beberapa instance {@link
+android.content.Loader} dalam {@link android.app.Activity} atau
+{@link android.app.Fragment}. Hanya ada satu {@link
+android.app.LoaderManager} per aktivitas atau fragmen.</p>
+
+<p>Anda biasanya
+memulai {@link android.content.Loader} dalam metode {@link
+android.app.Activity#onCreate onCreate()} aktivitas, atau dalam metode
+{@link android.app.Fragment#onActivityCreated onActivityCreated()} fragmen. Anda
+melakukannya dengan cara berikut ini:</p>
+
+<pre>// Prepare the loader. Either re-connect with an existing one,
+// or start a new one.
+getLoaderManager().initLoader(0, null, this);</pre>
+
+<p>Metode {@link android.app.LoaderManager#initLoader initLoader()} mengambil
+parameter berikut:</p>
+<ul>
+ <li>ID unik yang mengidentifikasi loader. Dalam contoh ini, ID-nya adalah 0.</li>
+<li>Argumen opsional untuk dipasok ke loader
+pada saat pembuatan (dalam contoh ini <code>null</code>).</li>
+
+<li>Implementasi {@link android.app.LoaderManager.LoaderCallbacks}, yang
+akan dipanggil {@link android.app.LoaderManager} untuk melaporkan kejadian loader. Dalam contoh
+ini, kelas lokal mengimplementasikan antarmuka {@link
+android.app.LoaderManager.LoaderCallbacks}, sehingga meneruskan acuan
+ke dirinya sendiri, {@code this}.</li>
+</ul>
+<p>Panggilan {@link android.app.LoaderManager#initLoader initLoader()} memastikan bahwa loader
+telah dimulai dan aktif. Ia memiliki dua kemungkinan hasil:</p>
+<ul>
+ <li>Jika loader yang disebutkan oleh ID sudah ada, loader yang dibuat terakhir akan digunakan
+kembali.</li>
+ <li>Jika loader yang disebutkan oleh ID <em>tidak</em> ada,
+{@link android.app.LoaderManager#initLoader initLoader()} akan memicu metode
+{@link android.app.LoaderManager.LoaderCallbacks} {@link android.app.LoaderManager.LoaderCallbacks#onCreateLoader onCreateLoader()}.
+Di sinilah Anda mengimplementasikan kode untuk membuat instance dan mengembalikan loader baru.
+Untuk diskusi selengkapnya, lihat bagian <a href="#onCreateLoader">onCreateLoader</a>.</li>
+</ul>
+<p>Dalam hal ini, implementasi {@link android.app.LoaderManager.LoaderCallbacks}
+yang ditentukan akan dikaitkan dengan loader, dan akan dipanggil bila
+status loader berubah. Jika saat panggilan ini status pemanggil sudah
+dimulai, dan loader yang diminta sudah ada dan telah menghasilkan
+datanya, maka sistem segera memanggil {@link
+android.app.LoaderManager.LoaderCallbacks#onLoadFinished onLoadFinished()}
+(selama {@link android.app.LoaderManager#initLoader initLoader()}),
+sehingga Anda harus siap bila hal ini terjadi. Lihat <a href="#onLoadFinished">
+onLoadFinished</a> untuk diskusi selengkapnya mengenai callback ini</p>
+
+<p>Perhatikan bahwa metode {@link android.app.LoaderManager#initLoader initLoader()}
+mengembalikan {@link android.content.Loader} yang dibuat, namun Anda tidak
+perlu menangkap acuan ke sana. {@link android.app.LoaderManager} mengelola
+masa hidup loader secara otomatis. {@link android.app.LoaderManager}
+memulai dan menghentikan pemuatan jika perlu, dan menjaga status loader
+dan konten terkaitnya. Seperti yang tersirat di sini, Anda akan jarang berinteraksi dengan loader
+secara langsung (meskipun misalnya menggunakan metode loader untuk menyempurnakan perilaku
+loader, lihat contoh <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html"> LoaderThrottle</a>).
+Anda paling sering akan menggunakan metode {@link
+android.app.LoaderManager.LoaderCallbacks} untuk mengintervensi proses
+pemuatan saat terjadi kejadian tertentu. Untuk diskusi selengkapnya mengenai topik ini, lihat <a href="#callback">Menggunakan Callback LoaderManager</a>.</p>
+
+<h3 id="restarting">Me-restart Loader</h3>
+
+<p>Bila Anda menggunakan {@link android.app.LoaderManager#initLoader initLoader()}, seperti
+ditampilkan di atas, loader yang ada akan digunakan dengan ID yang ditetapkan jika ada.
+Jika tidak ada, ID akan dibuat. Namun kadang-kadang Anda perlu membuang data lama
+dan mulai dari awal.</p>
+
+<p>Untuk membuang data lama, gunakan {@link
+android.app.LoaderManager#restartLoader restartLoader()}. Misalnya, implementasi
+{@link android.widget.SearchView.OnQueryTextListener} ini akan me-restart
+bila query pengguna berubah. Loader perlu di-restart
+agar dapat menggunakan filter pencarian yang telah direvisi untuk melakukan query baru:</p>
+
+<pre>
+public boolean onQueryTextChanged(String newText) {
+ // Called when the action bar search text has changed. Update
+ // the search filter, and restart the loader to do a new query
+ // with this filter.
+ mCurFilter = !TextUtils.isEmpty(newText) ? newText : null;
+ getLoaderManager().restartLoader(0, null, this);
+ return true;
+}</pre>
+
+<h3 id="callback">Menggunakan Callback LoaderManager</h3>
+
+<p>{@link android.app.LoaderManager.LoaderCallbacks} adalah antarmuka callback
+yang memungkinkan klien berinteraksi dengan {@link android.app.LoaderManager}. </p>
+<p>Loader, khususnya {@link android.content.CursorLoader}, diharapkan
+mempertahankan datanya setelah dihentikan. Ini memungkinkan aplikasi mempertahankan
+datanya di aktivitas atau metode {@link android.app.Activity#onStop
+onStop()} fragmen dan {@link android.app.Activity#onStart onStart()}, sehingga
+bila pengguna kembali ke aplikasi, mereka tidak harus menunggu data
+dimuat kembali. Anda menggunakan metode {@link android.app.LoaderManager.LoaderCallbacks}
+untuk mengetahui waktu membuat loader baru, dan memberi tahu aplikasi kapan
+berhenti menggunakan data loader.</p>
+
+<p>{@link android.app.LoaderManager.LoaderCallbacks} berisi metode
+ini:</p>
+<ul>
+ <li>{@link android.app.LoaderManager.LoaderCallbacks#onCreateLoader onCreateLoader()} —
+Membuat instance dan mengembalikan {@link android.content.Loader} baru untuk ID yang diberikan.
+</li></ul>
+<ul>
+ <li> {@link android.app.LoaderManager.LoaderCallbacks#onLoadFinished onLoadFinished()}
+— Dipanggil bila loader yang dibuat sebelumnya selesai dimuat.
+</li></ul>
+<ul>
+ <li>{@link android.app.LoaderManager.LoaderCallbacks#onLoaderReset onLoaderReset()}
+ — Dipanggil bila loader yang dibuat sebelumnya sedang di-reset, sehingga datanya
+tidak tersedia.
+</li>
+</ul>
+<p>Metode ini dijelaskan lebih detail dalam bagian berikutnya.</p>
+
+<h4 id ="onCreateLoader">onCreateLoader</h4>
+
+<p>Saat Anda mencoba mengakses loader (misalnya, melalui {@link
+android.app.LoaderManager#initLoader initLoader()}), ia akan memeriksa untuk mengetahui adanya
+loader yang ditetapkan oleh ID. Jika tidak ada, ia akan memicu metode {@link
+android.app.LoaderManager.LoaderCallbacks} {@link
+android.app.LoaderManager.LoaderCallbacks#onCreateLoader onCreateLoader()}. Di
+sinilah Anda membuat loader baru. Biasanya ini adalah {@link
+android.content.CursorLoader}, namun Anda bisa mengimplementasikan sendiri subkelas {@link
+android.content.Loader}. </p>
+
+<p>Dalam contoh ini, metode callback {@link
+android.app.LoaderManager.LoaderCallbacks#onCreateLoader onCreateLoader()}
+ akan membuat {@link android.content.CursorLoader}. Anda harus membuat
+{@link android.content.CursorLoader} menggunakan metode konstruktornya, yang
+memerlukan set informasi lengkap untuk melakukan query ke {@link
+android.content.ContentProvider}. Secara khusus, ia memerlukan:</p>
+<ul>
+ <li><em>uri</em> — URI untuk konten yang akan diambil. </li>
+ <li><em>projection</em> — Daftar berisi kolom yang akan dikembalikan. Meneruskan
+<code>null</code> akan mengembalikan semua kolom, jadi tidak efisien. </li>
+ <li><em>selection</em> — Filter yang mendeklarasikan baris yang akan dikembalikan,
+diformat sebagai klausa SQL WHERE (tidak termasuk WHERE itu sendiri). Meneruskan
+<code>null</code> akan mengembalikan semua baris untuk URI yang diberikan. </li>
+ <li><em>selectionArgs</em> — Anda dapat menyertakan ?s dalam pilihan, yang akan
+digantikan dengan nilai dari <em>selectionArgs</em>, agar muncul dalam
+pilihan. Nilai-nilai akan diikat sebagai String. </li>
+ <li><em>sortOrder</em> — Cara menyusun baris, diformat sebagai klausa SQL
+ORDER BY (tidak termasuk ORDER BY itu sendiri). Meneruskan <code>null</code> akan
+menggunakan urutan sortir default, yang mungkin tidak berurutan.</li>
+</ul>
+<p>Misalnya:</p>
+<pre>
+ // If non-null, this is the current filter the user has provided.
+String mCurFilter;
+...
+public Loader<Cursor> onCreateLoader(int id, Bundle args) {
+ // This is called when a new Loader needs to be created. This
+ // sample only has one Loader, so we don't care about the ID.
+ // First, pick the base URI to use depending on whether we are
+ // currently filtering.
+ Uri baseUri;
+ if (mCurFilter != null) {
+ baseUri = Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI,
+ Uri.encode(mCurFilter));
+ } else {
+ baseUri = Contacts.CONTENT_URI;
+ }
+
+ // Now create and return a CursorLoader that will take care of
+ // creating a Cursor for the data being displayed.
+ String select = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND ("
+ + Contacts.HAS_PHONE_NUMBER + "=1) AND ("
+ + Contacts.DISPLAY_NAME + " != '' ))";
+ return new CursorLoader(getActivity(), baseUri,
+ CONTACTS_SUMMARY_PROJECTION, select, null,
+ Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
+}</pre>
+<h4 id="onLoadFinished">onLoadFinished</h4>
+
+<p>Metode ini dipanggil bila loader yang dibuat sebelumnya selesai dimuat.
+Metode ini dijamin dipanggil sebelum pelepasan data terakhir
+yang disediakan untuk loader ini. Di titik ini Anda harus menyingkirkan semua penggunaan
+data lama (karena akan segera dilepas), namun jangan melepas sendiri
+data tersebut karena loader memilikinya dan akan menanganinya.</p>
+
+
+<p>Loader akan melepas data setelah mengetahui bahwa aplikasi tidak
+lagi menggunakannya. Misalnya, jika data adalah kursor dari {@link
+android.content.CursorLoader}, Anda tidak boleh memanggil {@link
+android.database.Cursor#close close()} sendiri. Jika kursor ditempatkan
+dalam {@link android.widget.CursorAdapter}, Anda harus menggunakan metode {@link
+android.widget.SimpleCursorAdapter#swapCursor swapCursor()} agar
+{@link android.database.Cursor} lama tidak ditutup. Misalnya:</p>
+
+<pre>
+// This is the Adapter being used to display the list's data.<br
+/>SimpleCursorAdapter mAdapter;
+...
+
+public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
+ // Swap the new cursor in. (The framework will take care of closing the
+ // old cursor once we return.)
+ mAdapter.swapCursor(data);
+}</pre>
+
+<h4 id="onLoaderReset">onLoaderReset</h4>
+
+<p>Metode ini dipanggil bila loader yang dibuat sebelumnya sedang di-reset, sehingga datanya
+tidak tersedia. Callback ini memungkinkan Anda mengetahui
+kapan data akan dilepas sehingga dapat menghapus acuannya ke callback. </p>
+<p>Implementasi ini memanggil
+{@link android.widget.SimpleCursorAdapter#swapCursor swapCursor()}
+dengan nilai <code>null</code>:</p>
+
+<pre>
+// This is the Adapter being used to display the list's data.
+SimpleCursorAdapter mAdapter;
+...
+
+public void onLoaderReset(Loader<Cursor> loader) {
+ // This is called when the last Cursor provided to onLoadFinished()
+ // above is about to be closed. We need to make sure we are no
+ // longer using it.
+ mAdapter.swapCursor(null);
+}</pre>
+
+
+<h2 id="example">Contoh</h2>
+
+<p>Sebagai contoh, berikut ini adalah implementasi penuh {@link
+android.app.Fragment} yang menampilkan {@link android.widget.ListView} berisi
+hasil query terhadap penyedia konten kontak. Ia menggunakan {@link
+android.content.CursorLoader} untuk mengelola query pada penyedia.</p>
+
+<p>Agar aplikasi dapat mengakses kontak pengguna, seperti yang ditampilkan dalam contoh ini,
+manifesnya harus menyertakan izin
+{@link android.Manifest.permission#READ_CONTACTS READ_CONTACTS}.</p>
+
+<pre>
+public static class CursorLoaderListFragment extends ListFragment
+ implements OnQueryTextListener, LoaderManager.LoaderCallbacks<Cursor> {
+
+ // This is the Adapter being used to display the list's data.
+ SimpleCursorAdapter mAdapter;
+
+ // If non-null, this is the current filter the user has provided.
+ String mCurFilter;
+
+ @Override public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+
+ // Give some text to display if there is no data. In a real
+ // application this would come from a resource.
+ setEmptyText("No phone numbers");
+
+ // We have a menu item to show in action bar.
+ setHasOptionsMenu(true);
+
+ // Create an empty adapter we will use to display the loaded data.
+ mAdapter = new SimpleCursorAdapter(getActivity(),
+ android.R.layout.simple_list_item_2, null,
+ new String[] { Contacts.DISPLAY_NAME, Contacts.CONTACT_STATUS },
+ new int[] { android.R.id.text1, android.R.id.text2 }, 0);
+ setListAdapter(mAdapter);
+
+ // Prepare the loader. Either re-connect with an existing one,
+ // or start a new one.
+ getLoaderManager().initLoader(0, null, this);
+ }
+
+ @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ // Place an action bar item for searching.
+ MenuItem item = menu.add("Search");
+ item.setIcon(android.R.drawable.ic_menu_search);
+ item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
+ SearchView sv = new SearchView(getActivity());
+ sv.setOnQueryTextListener(this);
+ item.setActionView(sv);
+ }
+
+ public boolean onQueryTextChange(String newText) {
+ // Called when the action bar search text has changed. Update
+ // the search filter, and restart the loader to do a new query
+ // with this filter.
+ mCurFilter = !TextUtils.isEmpty(newText) ? newText : null;
+ getLoaderManager().restartLoader(0, null, this);
+ return true;
+ }
+
+ @Override public boolean onQueryTextSubmit(String query) {
+ // Don't care about this.
+ return true;
+ }
+
+ @Override public void onListItemClick(ListView l, View v, int position, long id) {
+ // Insert desired behavior here.
+ Log.i("FragmentComplexList", "Item clicked: " + id);
+ }
+
+ // These are the Contacts rows that we will retrieve.
+ static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] {
+ Contacts._ID,
+ Contacts.DISPLAY_NAME,
+ Contacts.CONTACT_STATUS,
+ Contacts.CONTACT_PRESENCE,
+ Contacts.PHOTO_ID,
+ Contacts.LOOKUP_KEY,
+ };
+ public Loader<Cursor> onCreateLoader(int id, Bundle args) {
+ // This is called when a new Loader needs to be created. This
+ // sample only has one Loader, so we don't care about the ID.
+ // First, pick the base URI to use depending on whether we are
+ // currently filtering.
+ Uri baseUri;
+ if (mCurFilter != null) {
+ baseUri = Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI,
+ Uri.encode(mCurFilter));
+ } else {
+ baseUri = Contacts.CONTENT_URI;
+ }
+
+ // Now create and return a CursorLoader that will take care of
+ // creating a Cursor for the data being displayed.
+ String select = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND ("
+ + Contacts.HAS_PHONE_NUMBER + "=1) AND ("
+ + Contacts.DISPLAY_NAME + " != '' ))";
+ return new CursorLoader(getActivity(), baseUri,
+ CONTACTS_SUMMARY_PROJECTION, select, null,
+ Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
+ }
+
+ public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
+ // Swap the new cursor in. (The framework will take care of closing the
+ // old cursor once we return.)
+ mAdapter.swapCursor(data);
+ }
+
+ public void onLoaderReset(Loader<Cursor> loader) {
+ // This is called when the last Cursor provided to onLoadFinished()
+ // above is about to be closed. We need to make sure we are no
+ // longer using it.
+ mAdapter.swapCursor(null);
+ }
+}</pre>
+<h3 id="more_examples">Contoh Selengkapnya</h3>
+
+<p>Ada beberapa contoh berbeda dalam <strong>ApiDemos</strong> yang
+mengilustrasikan cara menggunakan loader:</p>
+<ul>
+ <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderCursor.html">
+LoaderCursor</a> — Versi lengkap dari
+cuplikan yang ditampilkan di atas.</li>
+ <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html"> LoaderThrottle</a> — Contoh cara penggunaan throttling untuk
+mengurangi jumlah query dari penyedia konten saat datanya berubah.</li>
+</ul>
+
+<p>Untuk informasi tentang mengunduh dan menginstal contoh SDK, lihat <a href="http://developer.android.com/resources/samples/get.html"> Mendapatkan
+Contoh</a>. </p>
+
diff --git a/docs/html-intl/intl/id/guide/components/processes-and-threads.jd b/docs/html-intl/intl/id/guide/components/processes-and-threads.jd
new file mode 100644
index 0000000..cdab715
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/components/processes-and-threads.jd
@@ -0,0 +1,411 @@
+page.title=Proses dan Thread
+page.tags=daur hidup,latar belakang
+
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>Dalam dokumen ini</h2>
+<ol>
+<li><a href="#Processes">Proses</a>
+ <ol>
+ <li><a href="#Lifecycle">Daur hidup proses</a></li>
+ </ol>
+</li>
+<li><a href="#Threads">Thread</a>
+ <ol>
+ <li><a href="#WorkerThreads">Thread pekerja</a></li>
+ <li><a href="#ThreadSafe">Metode thread-safe</a></li>
+ </ol>
+</li>
+<li><a href="#IPC">Komunikasi antarproses</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>Bila komponen aplikasi dimulai dan tidak ada komponen aplikasi lain yang
+berjalan, sistem Android akan memulai proses Linux baru untuk aplikasi dengan satu thread
+eksekusi. Secara default, semua komponen aplikasi yang sama berjalan dalam proses dan
+thread yang sama (disebut thread "utama"). Jika komponen aplikasi dimulai dan sudah ada
+proses untuk aplikasi itu (karena komponen lain dari aplikasi itu sudah ada), maka komponen
+akan dimulai dalam proses itu dan menggunakan thread eksekusi yang sama. Akan tetapi, Anda bisa
+mengatur komponen berbeda di aplikasi agar berjalan di proses terpisah, dan Anda bisa membuat thread tambahan untuk
+setiap proses.</p>
+
+<p>Dokumen ini membahas cara kerja proses dan thread di aplikasi Android.</p>
+
+
+<h2 id="Processes">Proses</h2>
+
+<p>Secara default, semua komponen aplikasi yang sama berjalan dalam proses yang sama dan kebanyakan
+aplikasi tidak boleh mengubah ini. Akan tetapi, jika Anda merasa perlu mengontrol proses milik
+komponen tertentu, Anda dapat melakukannya dalam file manifes.</p>
+
+<p>Entri manifes untuk setiap tipe elemen komponen—<a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
+<activity>}</a>, <a href="{@docRoot}guide/topics/manifest/service-element.html">{@code
+<service>}</a>, <a href="{@docRoot}guide/topics/manifest/receiver-element.html">{@code
+<receiver>}</a>, dan <a href="{@docRoot}guide/topics/manifest/provider-element.html">{@code
+<provider>}</a>—mendukung atribut {@code android:process} yang bisa menetapkan
+dalam proses mana komponen harus dijalankan. Anda bisa mengatur atribut ini agar setiap komponen
+berjalan dalam prosesnya sendiri atau agar beberapa komponen menggunakan proses yang sama sementara yang lainnya tidak. Anda juga bisa mengatur
+{@code android:process} agar komponen aplikasi yang berbeda berjalan dalam proses yang sama
+—sepanjang aplikasi menggunakan ID Linux yang sama dan ditandatangani
+dengan sertifikat yang sama.</p>
+
+<p>Elemen <a href="{@docRoot}guide/topics/manifest/application-element.html">{@code
+<application>}</a> juga mendukung atribut {@code android:process}, untuk mengatur
+nilai default yang berlaku bagi semua komponen.</p>
+
+<p>Android bisa memutuskan untuk mematikan proses pada waktu tertentu, bila memori tinggal sedikit dan diperlukan oleh
+proses lain yang lebih mendesak untuk melayani pengguna. Komponen
+aplikasi yang berjalan dalam proses yang dimatikan maka sebagai konsekuensinya juga akan dimusnahkan. Proses dimulai
+kembali untuk komponen itu bila ada lagi pekerjaan untuk mereka lakukan.</p>
+
+<p>Saat memutuskan proses yang akan dimatikan, sistem Android akan mempertimbangkan kepentingan relatifnya bagi
+pengguna. Misalnya, sistem lebih mudah menghentikan proses yang menjadi host aktivitas yang tidak
+ lagi terlihat di layar, dibandingkan dengan proses yang menjadi host aktivitas yang terlihat. Karena itu, keputusan
+untuk menghentikan proses bergantung pada keadaan komponen yang berjalan dalam proses tersebut. Aturan
+yang digunakan untuk menentukan proses yang akan dihentikan dibahas di bawah ini. </p>
+
+
+<h3 id="Lifecycle">Daur hidup proses</h3>
+
+<p>Sistem Android mencoba mempertahankan proses aplikasi selama mungkin, namun
+pada akhirnya perlu menghapus proses lama untuk mengambil kembali memori bagi proses baru atau yang lebih penting. Untuk
+menentukan proses yang akan
+dipertahankan dan yang harus dimatikan, sistem menempatkan setiap proses ke dalam "hierarki prioritas" berdasarkan
+komponen yang berjalan dalam proses dan status komponen tersebut. Proses yang memiliki
+prioritas terendah akan dimatikan terlebih dahulu, kemudian yang terendah berikutnya, dan seterusnya, jika perlu
+untuk memulihkan sumber daya sistem.</p>
+
+<p>Ada lima tingkatan dalam hierarki prioritas. Daftar berikut berisi beberapa
+tipe proses berdasarkan urutan prioritas (proses pertama adalah yang <em>terpenting</em> dan
+<em>dimatikan terakhir</em>):</p>
+
+<ol>
+ <li><b>Proses latar depan</b>
+ <p>Proses yang diperlukan untuk aktivitas yang sedang dilakukan pengguna. Proses
+dianggap berada di latar depan jika salah satu kondisi berikut terpenuhi:</p>
+
+ <ul>
+ <li>Proses menjadi host {@link android.app.Activity} yang berinteraksi dengan pengguna dengan metode ({@link
+android.app.Activity}{@link android.app.Activity#onResume onResume()} telah
+dipanggil).</li>
+
+ <li>Proses menjadi host {@link android.app.Service} yang terikat dengan aktivitas yang sedang berinteraksi dengan
+pengguna.</li>
+
+ <li>Proses menjadi host {@link android.app.Service} yang berjalan "di latar depan"—
+layanan telah memanggil{@link android.app.Service#startForeground startForeground()}.
+
+ <li>Proses menjadi host {@link android.app.Service} yang menjalankan salah satu callback
+daur hidupnya ({@link android.app.Service#onCreate onCreate()}, {@link android.app.Service#onStart
+onStart()}, atau {@link android.app.Service#onDestroy onDestroy()}).</li>
+
+ <li>Proses menjadi host {@link android.content.BroadcastReceiver} yang menjalankan metode {@link
+ android.content.BroadcastReceiver#onReceive onReceive()}-nya.</li>
+ </ul>
+
+ <p>Secara umum, hanya ada beberapa proses latar depan pada waktu yang diberikan. Proses dimatikan hanya sebagai
+upaya terakhir— jika memori hampir habis sehingga semuanya tidak bisa terus berjalan. Pada umumnya, pada
+titik itu, perangkat dalam keadaan memory paging, sehingga menghentikan beberapa proses latar depan
+diperlukan agar antarmuka pengguna tetap responsif.</p></li>
+
+ <li><b>Proses yang terlihat</b>
+ <p>Proses yang tidak memiliki komponen latar depan, namun masih bisa
+memengaruhi apa yang dilihat pengguna di layar. Proses dianggap terlihat jika salah satu kondisi
+berikut terpenuhi:</p>
+
+ <ul>
+ <li>Proses ini menjadi host {@link android.app.Activity} yang tidak berada di latar depan, namun masih
+terlihat oleh penggunanya (metode {@link android.app.Activity#onPause onPause()} telah dipanggil).
+Ini bisa terjadi, misalnya, jika aktivitas latar depan memulai dialog, sehingga
+aktivitas sebelumnya terlihat berada di belakangnya.</li>
+
+ <li>Proses menjadi host {@link android.app.Service} yang terikat dengan aktivitas yang terlihat (atau latar
+depan)</li>
+ </ul>
+
+ <p>Proses yang terlihat dianggap sangat penting dan tidak akan dimatikan kecuali jika hal itu
+diperlukan agar semua proses latar depan tetap berjalan. </p>
+ </li>
+
+ <li><b>Proses layanan</b>
+ <p>Proses yang menjalankan layanan yang telah dimulai dengan metode {@link
+android.content.Context#startService startService()} dan tidak termasuk dalam salah satu dari dua kategori
+yang lebih tinggi. Walaupun proses pelayanan tidak langsung terkait dengan semua yang dilihat oleh pengguna, proses ini
+umumnya melakukan hal-hal yang dipedulikan pengguna (seperti memutar musik di latar belakang
+atau mengunduh data di jaringan), jadi sistem membuat proses tetap berjalan kecuali memori tidak cukup untuk
+mempertahankannya bersama semua proses latar depan dan proses yang terlihat. </p>
+ </li>
+
+ <li><b>Proses latar belakang</b>
+ <p>Proses yang menampung aktivitas yang saat ini tidak terlihat oleh pengguna (metode
+{@link android.app.Activity#onStop onStop()} aktivitas telah dipanggil). Proses ini tidak memiliki dampak
+langsung pada pengalaman pengguna, dan sistem bisa menghentikannya kapan saja untuk memperoleh kembali memori bagi
+proses latar depan, proses yang terlihat,
+atau proses layanan. Biasanya ada banyak proses latar belakang yang berjalan, sehingga disimpan
+dalam daftar LRU (least recently used atau paling sedikit digunakan) untuk memastikan bahwa proses dengan aktivitas yang paling baru
+terlihat oleh pengguna sebagai yang terakhir untuk dimatikan. Jika aktivitas mengimplementasikan metode
+ daur hidupnya dengan benar, dan menyimpan statusnya saat ini, menghentikan prosesnya tidak akan memiliki efek
+yang terlihat pada pengalaman pengguna, karena ketika pengguna kembali ke aktivitas, aktivitas itu memulihkan
+semua statusnya yang terlihat. Lihat dokumen <a href="{@docRoot}guide/components/activities.html#SavingActivityState">Aktivitas</a>
+ untuk mendapatkan informasi tentang menyimpan dan memulihkan status.</p>
+ </li>
+
+ <li><b>Proses kosong</b>
+ <p>Sebuah proses yang tidak berisi komponen aplikasi aktif apa pun. Alasan satu-satunya mempertahankan proses
+seperti ini tetap hidup adalah untuk keperluan caching, meningkatkan waktu mulai (startup) bila
+nanti komponen perlu dijalankan di dalamnya. Sistem sering menghentikan proses ini untuk menyeimbangkan sumber
+daya sistem secara keseluruhan antara proses cache dan cache kernel yang mendasarinya.</p>
+ </li>
+</ol>
+
+
+ <p>Android sebisa mungkin memeringkat proses setinggi
+mungkin, berdasarkan prioritas komponen yang sedang aktif dalam proses. Misalnya, jika suatu proses menjadi host sebuah layanan dan
+aktivitas yang terlihat, proses akan diperingkat sebagai proses yang terlihat, bukan sebagai proses layanan.</p>
+
+ <p>Selain itu, peringkat proses dapat meningkat karena adanya proses lain yang bergantung padanya
+—proses yang melayani proses lain tidak bisa diperingkat lebih rendah daripada proses yang
+sedang dilayaninya. Misalnya, jika penyedia konten dalam proses A melayani klien dalam proses B, atau
+jika layanan dalam proses A terikat dengan komponen dalam proses B, proses A selalu dipertimbangkan sebagai paling rendah
+prioritasnya dibandingkan dengan proses B.</p>
+
+ <p>Karena proses yang menjalankan layanan diperingkat lebih tinggi daripada aktivitas latar belakang,
+aktivitas yang memulai operasi yang berjalan lama mungkin lebih baik memulai <a href="{@docRoot}guide/components/services.html">layanan</a> untuk operasi itu, daripada hanya
+membuat thread pekerja—khususnya jika operasi mungkin akan berlangsung lebih lama daripada aktivitas.
+ Misalnya, aktivitas yang mengunggah gambar ke situs web harus memulai layanan
+untuk mengunggah sehingga unggahan bisa terus berjalan di latar belakang meskipun pengguna meninggalkan aktivitas tersebut.
+Menggunakan layanan akan memastikan operasi paling tidak memiliki prioritas "proses layanan",
+apa pun yang terjadi pada aktivitas. Ini menjadi alasan yang sama yang membuat penerima siaran harus
+menjalankan layanan daripada hanya menempatkan operasi yang menghabiskan waktu di thread.</p>
+
+
+
+
+<h2 id="Threads">Thread</h2>
+
+<p>Bila aplikasi diluncurkan, sistem akan membuat thread eksekusi untuk aplikasi tersebut, yang diberi nama,
+"main". Thread ini sangat penting karena bertugas mengirim kejadian ke widget
+antarmuka pengguna yang sesuai, termasuk kejadian menggambar. Ini juga merupakan thread yang
+membuat aplikasi berinteraksi dengan komponen dari Android UI toolkit (komponen dari paket {@link
+android.widget} dan {@link android.view}). Karena itu, thread 'main' juga terkadang
+disebut thread UI.</p>
+
+<p>Sistem ini <em>tidak</em> membuat thread terpisah untuk setiap instance komponen. Semua
+komponen yang berjalan di proses yang sama akan dibuat instance-nya dalam thread UI, dan sistem akan memanggil
+setiap komponen yang dikirim dari thread itu. Akibatnya, metode yang merespons callback sistem
+ (seperti {@link android.view.View#onKeyDown onKeyDown()} untuk melaporkan tindakan pengguna atau metode callback daur hidup)
+ selalu berjalan di thread UI proses.</p>
+
+<p>Misalnya saat pengguna menyentuh tombol pada layar, thread UI aplikasi akan mengirim kejadian
+sentuh ke widget, yang selanjutnya menetapkan status ditekan dan mengirim permintaan yang tidak divalidasi ke
+antrean kejadian. Thread UI akan menghapus antrean permintaan dan memberi tahu widget bahwa widget harus menggambar
+dirinya sendiri.</p>
+
+<p>Saat aplikasi melakukan pekerjaan intensif sebagai respons terhadap interaksi pengguna, model
+thread tunggal ini bisa menghasilkan kinerja yang buruk kecuali jika Anda mengimplementasikan aplikasi dengan benar. Khususnya jika
+ semua terjadi di thread UI, melakukan operasi yang panjang seperti akses ke jaringan atau query
+database akan memblokir seluruh UI. Bila thread diblokir, tidak ada kejadian yang bisa dikirim,
+termasuk kejadian menggambar. Dari sudut pandang pengguna, aplikasi
+tampak mogok (hang). Lebih buruk lagi, jika thread UI diblokir selama lebih dari beberapa detik
+(saat ini sekitar 5 detik) pengguna akan ditampilkan dialog "<a href="http://developer.android.com/guide/practices/responsiveness.html">aplikasi tidak
+merespons</a>" (ANR) yang populer karena reputasi buruknya. Pengguna nanti bisa memutuskan untuk keluar dari aplikasi dan menghapus aplikasi
+jika mereka tidak suka.</p>
+
+<p>Selain itu, toolkit Android UI <em>bukan</em> thread-safe. Jadi, Anda tidak harus memanipulasi
+UI dari thread pekerja—Anda harus melakukan semua manipulasi pada antarmuka pengguna dari thread
+UI. Sehingga hanya ada dua aturan untuk model thread tunggal Android:</p>
+
+<ol>
+<li>Jangan memblokir thread UI
+<li>Jangan mengakses toolkit Android UI dari luar thread UI
+</ol>
+
+<h3 id="WorkerThreads">Thread pekerja</h3>
+
+<p>Karena model thread tunggal yang dijelaskan di atas, Anda dilarang memblokir thread
+UI demi daya respons UI aplikasi. Jika memiliki operasi untuk dijalankan
+yang tidak seketika, Anda harus memastikan untuk melakukannya di thread terpisah (thread "latar belakang" atau
+thread "pekerja").</p>
+
+<p>Misalnya, berikut ini beberapa kode untuk listener klik yang mengunduh gambar dari
+thread terpisah dan menampilkannya dalam {@link android.widget.ImageView}:</p>
+
+<pre>
+public void onClick(View v) {
+ new Thread(new Runnable() {
+ public void run() {
+ Bitmap b = loadImageFromNetwork("http://example.com/image.png");
+ mImageView.setImageBitmap(b);
+ }
+ }).start();
+}
+</pre>
+
+<p>Awalnya hal ini tampak bekerja dengan baik, karena menciptakan thread baru untuk menangani
+operasi jaringan. Akan tetapi, hal tersebut melanggar aturan kedua model thread tunggal: <em>jangan mengakses
+ toolkit Android UI dari luar thread UI</em>—sampel ini memodifikasi {@link
+android.widget.ImageView} dari thread pekerja sebagai ganti thread UI. Ini bisa
+mengakibatkan perilaku yang tidak terdefinisi dan tidak diharapkan, yang bisa menyulitkan dan menghabiskan waktu untuk melacaknya.</p>
+
+<p>Untuk memperbaiki masalah ini, Android menawarkan beberapa cara untuk mengakses thread UI dari
+thread lainnya. Berikut ini daftar metode yang bisa membantu:</p>
+
+<ul>
+<li>{@link android.app.Activity#runOnUiThread(java.lang.Runnable)
+Activity.runOnUiThread(Runnable)}</li>
+<li>{@link android.view.View#post(java.lang.Runnable) View.post(Runnable)}</li>
+<li>{@link android.view.View#postDelayed(java.lang.Runnable, long) View.postDelayed(Runnable,
+long)}</li>
+</ul>
+
+<p>Misalnya, Anda bisa memperbaiki kode di atas dengan menggunakan metode {@link
+android.view.View#post(java.lang.Runnable) View.post(Runnable)}:</p>
+
+<pre>
+public void onClick(View v) {
+ new Thread(new Runnable() {
+ public void run() {
+ final Bitmap bitmap = loadImageFromNetwork("http://example.com/image.png");
+ mImageView.post(new Runnable() {
+ public void run() {
+ mImageView.setImageBitmap(bitmap);
+ }
+ });
+ }
+ }).start();
+}
+</pre>
+
+<p>Kini implementasi ini thread-safe: operasi jaringan dilakukan terpisah dari thread
+ sementara {@link android.widget.ImageView} dimanipulasi dari thread UI.</p>
+
+<p>Akan tetapi, karena operasi semakin kompleks, jenis kode seperti ini bisa semakin rumit
+dan sulit dipertahankan. Untuk menangani interaksi yang lebih kompleks dengan thread pekerja, Anda bisa mempertimbangkan
+ penggunaan {@link android.os.Handler}di thread pekerja, untuk memproses pesan yang dikirim dari
+ thread UI. Mungkin solusi terbaiknya adalah memperpanjang kelas {@link android.os.AsyncTask},
+yang akan menyederhanakan eksekusi tugas-tugas thread pekerja yang perlu berinteraksi dengan UI.</p>
+
+
+<h4 id="AsyncTask">Menggunakan AsyncTask</h4>
+
+<p>Dengan {@link android.os.AsyncTask}, Anda bisa melakukan pekerjaan asinkron pada antarmuka
+pengguna. AsyncTask memblokir operasi di thread pekerja kemudian mempublikasikan hasilnya
+di thread UI, tanpa mengharuskan Anda untuk menangani sendiri thread dan/atau handler sendiri.</p>
+
+<p>Untuk menggunakannya, Anda harus menempatkan {@link android.os.AsyncTask} sebagai subkelas dan mengimplementasikan metode callback {@link
+android.os.AsyncTask#doInBackground doInBackground()} yang berjalan di kumpulan
+thread latar belakang. Untuk memperbarui UI, Anda harus mengimplementasikan {@link
+android.os.AsyncTask#onPostExecute onPostExecute()}, yang memberikan hasil dari {@link
+android.os.AsyncTask#doInBackground doInBackground()} dan berjalan di thread UI, jadi Anda bisa
+memperbarui UI dengan aman. Selanjutnya Anda bisa menjalankan tugas dengan memanggil {@link android.os.AsyncTask#execute execute()}
+dari thread UI.</p>
+
+<p>Misalnya, Anda bisa mengimplementasikan contoh sebelumnya menggunakan {@link android.os.AsyncTask} dengan cara
+ini:</p>
+
+<pre>
+public void onClick(View v) {
+ new DownloadImageTask().execute("http://example.com/image.png");
+}
+
+private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
+ /** The system calls this to perform work in a worker thread and
+ * delivers it the parameters given to AsyncTask.execute() */
+ protected Bitmap doInBackground(String... urls) {
+ return loadImageFromNetwork(urls[0]);
+ }
+
+ /** The system calls this to perform work in the UI thread and delivers
+ * the result from doInBackground() */
+ protected void onPostExecute(Bitmap result) {
+ mImageView.setImageBitmap(result);
+ }
+}
+</pre>
+
+<p>Kini UI aman dan kode jadi lebih sederhana, karena memisahkan pekerjaan ke
+dalam bagian-bagian yang harus dilakukan pada thread pekerja dan thread UI.</p>
+
+<p>Anda harus membaca acuan {@link android.os.AsyncTask} untuk memahami sepenuhnya
+cara menggunakan kelas ini, namun berikut ini ikhtisar singkat cara kerjanya:</p>
+
+<ul>
+<li>Anda bisa menetapkan tipe parameter, nilai kemajuan, dan nilai
+ akhir tugas, dengan menggunakan generik</li>
+<li>Metode {@link android.os.AsyncTask#doInBackground doInBackground()} berjalan secara otomatis pada
+thread pekerja</li>
+<li>{@link android.os.AsyncTask#onPreExecute onPreExecute()}, {@link
+android.os.AsyncTask#onPostExecute onPostExecute()}, dan {@link
+android.os.AsyncTask#onProgressUpdate onProgressUpdate()} semuanya dipanggil pada thread UI</li>
+<li>Nilai yang dikembalikan oleh {@link android.os.AsyncTask#doInBackground doInBackground()} akan dikirim ke
+{@link android.os.AsyncTask#onPostExecute onPostExecute()}</li>
+<li>Anda bisa memangil {@link android.os.AsyncTask#publishProgress publishProgress()} setiap saat di {@link
+android.os.AsyncTask#doInBackground doInBackground()} untuk mengeksekusi {@link
+android.os.AsyncTask#onProgressUpdate onProgressUpdate()} pada thread UI</li>
+<li>Anda bisa membatalkan tugas ini kapan saja, dari thread mana saja</li>
+</ul>
+
+<p class="caution"><strong>Perhatian:</strong> Masalah lain yang mungkin Anda temui saat menggunakan
+thread pekerja adalah restart tak terduga dalam aktivitas karena <a href="{@docRoot}guide/topics/resources/runtime-changes.html">perubahan konfigurasi runtime</a>
+ (seperti saat pengguna mengubah orientasi layar), yang bisa memusnahkan thread pekerja. Untuk
+melihat cara mempertahankan tugas selama restart ini dan cara membatalkan
+tugas dengan benar saat aktivitas dimusnahkan, lihat kode sumber untuk aplikasi sampel <a href="http://code.google.com/p/shelves/">Shelves</a>.</p>
+
+
+<h3 id="ThreadSafe">Metode thread-safe</h3>
+
+<p> Dalam beberapa situasi, metode yang Anda implementasikan bisa dipanggil dari lebih dari satu thread,
+dan karena itu harus ditulis agar menjadi thread-safe. </p>
+
+<p>Ini terutama terjadi untuk metode yang bisa dipanggil dari jauh —seperti metode dalam <a href="{@docRoot}guide/components/bound-services.html">layanan terikat</a>. Bila sebuah panggilan pada
+metode yang dijalankan dalam {@link android.os.IBinder} berasal dari proses yang sama di mana
+{@link android.os.IBinder IBinder} berjalan, metode ini akan dieksekusi di thread pemanggil.
+Akan tetapi, bila panggilan berasal proses lain, metode akan dieksekusi dalam thread yang dipilih dari
+ kumpulan (pool) thread yang dipertahankan sistem dalam proses yang sama seperti{@link android.os.IBinder
+IBinder} (tidak dieksekusi dalam thread UI proses). Misalnya, karena metode
+{@link android.app.Service#onBind onBind()} layanan akan dipanggil dari thread UI
+proses layanan, metode yang diimplementasikan dalam objek yang dikembalikan {@link android.app.Service#onBind
+onBind()} (misalnya, subkelas yang mengimplementasikan metode RPC) akan dipanggil dari thread
+di pool. Karena layanan bisa memiliki lebih dari satu klien, maka lebih dari satu pool thread bisa melibatkan
+ metode {@link android.os.IBinder IBinder} yang sama sekaligus. Metode {@link android.os.IBinder
+IBinder} karenanya harus diimplementasikan sebagai thread-safe.</p>
+
+<p> Penyedia konten juga bisa menerima permintaan data yang berasal dalam proses lain.
+Meskipun kelas {@link android.content.ContentResolver} dan {@link android.content.ContentProvider}
+ menyembunyikan detail cara komunikasi antarproses dikelola, metode {@link
+android.content.ContentProvider} yang merespons permintaan itu—metode {@link
+android.content.ContentProvider#query query()}, {@link android.content.ContentProvider#insert
+insert()}, {@link android.content.ContentProvider#delete delete()}, {@link
+android.content.ContentProvider#update update()}, dan {@link android.content.ContentProvider#getType
+getType()}— dipanggil dari pool thread pada proses penyedia konten, bukan thread UI
+untuk proses tersebut. Mengingat metode ini bisa dipanggil dari thread mana pun
+sekaligus, metode-metode ini juga harus diimplementasikan sebagai thread-safe. </p>
+
+
+<h2 id="IPC">Komunikasi Antarproses</h2>
+
+<p>Android menawarkan mekanisme komunikasi antarproses (IPC) menggunakan panggilan prosedur jauh
+ (RPC), yang mana metode ini dipanggil oleh aktivitas atau komponen aplikasi lain, namun dieksekusi dari
+jauh (di proses lain), bersama hasil yang dikembalikan ke
+pemanggil. Ini mengharuskan penguraian panggilan metode dan datanya ke tingkat yang bisa
+dipahami sistem operasi, mentransmisikannya dari proses lokal dan ruang alamat untuk proses jauh
+dan ruang proses, kemudian merakit kembali dan menetapkannya kembali di sana. Nilai-nilai yang dikembalikan
+akan ditransmisikan dalam arah berlawanan. Android menyediakan semua kode untuk melakukan transaksi IPC
+ ini, sehingga Anda bisa fokus pada pendefinisian dan implementasi antarmuka pemrograman RPC. </p>
+
+<p>Untuk melakukan IPC, aplikasi Anda harus diikat ke layanan, dengan menggunakan {@link
+android.content.Context#bindService bindService()}. Untuk informasi selengkapnya, lihat panduan pengembang <a href="{@docRoot}guide/components/services.html">Layanan</a>.</p>
+
+
+<!--
+<h2>Beginner's Path</h2>
+
+<p>For information about how to perform work in the background for an indefinite period of time
+(without a user interface), continue with the <b><a
+href="{@docRoot}guide/components/services.html">Services</a></b> document.</p>
+-->
diff --git a/docs/html-intl/intl/id/guide/components/recents.jd b/docs/html-intl/intl/id/guide/components/recents.jd
new file mode 100644
index 0000000..286fdc1
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/components/recents.jd
@@ -0,0 +1,256 @@
+page.title=Layar Ikhtisar
+page.tags="recents","overview"
+
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+ <h2>Dalam dokumen ini</h2>
+ <ol>
+ <li><a href="#adding">Menambahkan Tugas ke Layar Ikhtisar</a>
+ <ol>
+ <li><a href="#flag-new-doc">Menggunakan flag Intent untuk menambahkan tugas</a></li>
+ <li><a href="#attr-doclaunch">Menggunakan atribut Aktivitas untuk menambahkan tugas</a></li>
+ </ol>
+ </li>
+ <li><a href="#removing">Menghapus Tugas</a>
+ <ol>
+ <li><a href="#apptask-remove">Menggunakan kelas AppTask untuk menghapus tugas</a></li>
+ <li><a href="#retain-finished">Mempertahankan tugas yang telah selesai</a></li>
+ </ol>
+ </li>
+ </ol>
+
+ <h2>Kelas-kelas utama</h2>
+ <ol>
+ <li>{@link android.app.ActivityManager.AppTask}</li>
+ <li>{@link android.content.Intent}</li>
+ </ol>
+
+ <h2>Kode contoh</h2>
+ <ol>
+ <li><a href="{@docRoot}samples/DocumentCentricApps/index.html">Aplikasi yang berorientasi dokumen</a></li>
+ </ol>
+
+</div>
+</div>
+
+<p>Layar ikhtisar (juga disebut sebagai layar terbaru, daftar tugas terbaru, atau aplikasi terbaru)
+UI tingkat sistem yang mencantumkan <a href="{@docRoot}guide/components/activities.html">
+aktivitas</a> dan <a href="{@docRoot}guide/components/tasks-and-back-stack.html">tugas</a> yang baru saja diakses. Pengguna
+bisa menyusuri daftar ini dan memilih satu tugas untuk dilanjutkan, atau pengguna bisa menghapus tugas dari
+daftar dengan gerakan mengusap. Dengan dirilisnya Android 5.0 (API level 21), beberapa instance aktivitas yang
+sama yang berisi dokumen berbeda dapat muncul sebagai tugas di layar ikhtisar. Misalnya,
+Google Drive mungkin memiliki satu tugas untuk setiap beberapa dokumen Google. Setiap dokumen muncul sebagai
+tugas dalam layar ikhtisar.</p>
+
+<img src="{@docRoot}images/components/recents.png" alt="" width="284" />
+<p class="img-caption"><strong>Gambar 1.</strong> Layar ikhtisar menampilkan tiga dokumen
+Google Drive, masing-masing dinyatakan sebagai tugas terpisah.</p>
+
+<p>Biasanya Anda harus mengizinkan sistem mendefinisikan cara menyatakan tugas dan
+aktivitas di layar ikhtisar, dan Anda tidak perlu memodifikasi perilaku ini.
+Akan tetapi, aplikasi Anda dapat menentukan cara dan waktu munculnya aktivitas di layar ikhtisar. Kelas
+{@link android.app.ActivityManager.AppTask} memungkinkan Anda mengelola tugas, dan flag
+ aktivitas kelas {@link android.content.Intent} memungkinkan Anda menentukan kapan aktivitas ditambahkan atau dihapus dari
+layar ikhtisar. Selain itu, atribut <code><a href="{@docRoot}guide/topics/manifest/activity-element.html">
+<activity></a></code> memungkinkan Anda menetapkan perilaku di manifes.</p>
+
+<h2 id="adding">Menambahkan Tugas ke Layar Ikhtisar</h2>
+
+<p>Penggunaan flag kelas {@link android.content.Intent} untuk menambahkan tugas memberi kontrol lebih besar
+atas waktu dan cara dokumen dibuka atau dibuka kembali di layar ikhtisar. Bila menggunakan atribut
+<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>
+, Anda dapat memilih antara selalu membuka dokumen dalam tugas baru atau menggunakan kembali tugas
+yang ada untuk dokumen tersebut.</p>
+
+<h3 id="flag-new-doc">Menggunakan flag Intent untuk menambahkan tugas</h3>
+
+<p>Bila membuat dokumen baru untuk aktivitas, Anda memanggil metode
+{@link android.app.ActivityManager.AppTask#startActivity(android.content.Context, android.content.Intent, android.os.Bundle) startActivity()}
+ dari kelas {@link android.app.ActivityManager.AppTask}, dengan meneruskannya ke intent yang
+menjalankan aktivitas tersebut. Untuk menyisipkan jeda logis agar sistem memperlakukan aktivitas Anda sebagai tugas
+baru di layar ikhtisar, teruskan flag {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT}
+dalam metode {@link android.content.Intent#addFlags(int) addFlags()} dari {@link android.content.Intent}
+yang memulai aktivitas itu.</p>
+
+<p class="note"><strong>Catatan:</strong> Flag {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT}
+menggantikan flag {@link android.content.Intent#FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET},
+yang tidak digunakan lagi pada Android 5.0 (API level 21).</p>
+
+<p>Jika Anda menetapkan flag {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK} saat membuat
+dokumen baru, sistem akan selalu membuat tugas baru dengan aktivitas target sebagai akar.
+Dengan pengaturan ini, dokumen yang sama dapat dibuka di lebih dari satu tugas. Kode berikut memperagakan
+cara aktivitas utama melakukannya:</p>
+
+<p class="code-caption"><a href="{@docRoot}samples/DocumentCentricApps/index.html">
+DocumentCentricActivity.java</a></p>
+<pre>
+public void createNewDocument(View view) {
+ final Intent newDocumentIntent = newDocumentIntent();
+ if (useMultipleTasks) {
+ newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
+ }
+ startActivity(newDocumentIntent);
+ }
+
+ private Intent newDocumentIntent() {
+ boolean useMultipleTasks = mCheckbox.isChecked();
+ final Intent newDocumentIntent = new Intent(this, NewDocumentActivity.class);
+ newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
+ newDocumentIntent.putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, incrementAndGet());
+ return newDocumentIntent;
+ }
+
+ private static int incrementAndGet() {
+ Log.d(TAG, "incrementAndGet(): " + mDocumentCounter);
+ return mDocumentCounter++;
+ }
+}
+</pre>
+
+<p class="note"><strong>Catatan:</strong> Aktivitas yang dimulai dengan flag {@code FLAG_ACTIVITY_NEW_DOCUMENT}
+ harus telah menetapkan nilai atribut {@code android:launchMode="standard"} (default) dalam
+manifes.</p>
+
+<p>Bila aktivitas utama memulai aktivitas baru, sistem akan mencari tugas yang intent
+-nya cocok dengan nama komponen intent dalam tugas-tugas yang sudah ada dan mencari aktivitas dalam data Intent. Jika tugas
+tidak ditemukan, atau intent ada dalam flag {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK}
+, tugas baru akan dibuat dengan aktivitas tersebut sebagai akarnya. Jika ditemukan, sistem akan
+mengedepankan tugas itu dan meneruskan intent baru ke {@link android.app.Activity#onNewIntent onNewIntent()}.
+Aktivitas baru akan mendapatkan intent dan membuat dokumen baru di layar ikhtisar, seperti dalam
+contoh berikut:</p>
+
+<p class="code-caption"><a href="{@docRoot}samples/DocumentCentricApps/index.html">
+NewDocumentActivity.java</a></p>
+<pre>
+@Override
+protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_new_document);
+ mDocumentCount = getIntent()
+ .getIntExtra(DocumentCentricActivity.KEY_EXTRA_NEW_DOCUMENT_COUNTER, 0);
+ mDocumentCounterTextView = (TextView) findViewById(
+ R.id.hello_new_document_text_view);
+ setDocumentCounterText(R.string.hello_new_document_counter);
+}
+
+@Override
+protected void onNewIntent(Intent intent) {
+ super.onNewIntent(intent);
+ /* If FLAG_ACTIVITY_MULTIPLE_TASK has not been used, this activity
+ is reused to create a new document.
+ */
+ setDocumentCounterText(R.string.reusing_document_counter);
+}
+</pre>
+
+
+<h3 id="#attr-doclaunch">Menggunakan atribut Aktivitas untuk menambahkan tugas</h3>
+
+<p>Aktivitas juga dapat menetapkan dalam manifesnya agar selalu dimulai ke dalam tugas baru dengan menggunakan
+atribut <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>
+, <a href="{@docRoot}guide/topics/manifest/activity-element.html#dlmode">
+{@code android:documentLaunchMode}</a>. Atribut ini memiliki empat nilai yang menghasilkan efek berikut
+bila pengguna membuka dokumen dengan aplikasi:</p>
+
+<dl>
+ <dt>"{@code intoExisting}"</dt>
+ <dd>Aktivitas menggunakan kembali tugas yang ada untuk dokumen tersebut. Ini sama dengan mengatur flag
+ {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT} <em>tanpa</em> mengatur flag
+ {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK}, seperti dijelaskan dalam
+ <a href="#flag-new-doc">Menggunakan flag Intent untuk menambahkan tugas</a>, di atas.</dd>
+
+ <dt>"{@code always}"</dt>
+ <dd>Aktivitas ini membuat tugas baru untuk dokumen, meski dokumen sudah dibuka. Menggunakan
+ nilai ini sama dengan menetapkan flag {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT}
+ maupun {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK}.</dd>
+
+ <dt>"{@code none”}"</dt>
+ <dd>Aktivitas ini tidak membuat tugas baru untuk dokumen. Layar ikhtisar memperlakukan
+ aktivitas seperti itu secara default: satu tugas ditampilkan untuk aplikasi, yang
+dilanjutkan dari aktivitas apa pun yang terakhir dipanggil pengguna.</dd>
+
+ <dt>"{@code never}"</dt>
+ <dd>Aktivitas ini tidak membuat tugas baru untuk dokumen. Mengatur nilai ini akan mengesampingkan
+ perilaku flag {@link android.content.Intent#FLAG_ACTIVITY_NEW_DOCUMENT}
+ dan {@link android.content.Intent#FLAG_ACTIVITY_MULTIPLE_TASK}, jika salah satunya ditetapkan di
+intent, dan layar ikhtisar menampilkan satu tugas untuk aplikasi, yang dilanjutkan dari
+ aktivitas apa pun yang terakhir dipanggil pengguna.</dd>
+</dl>
+
+<p class="note"><strong>Catatan:</strong> Untuk nilai selain {@code none} dan {@code never},
+aktivitas harus didefinisikan dengan {@code launchMode="standard"}. Jika atribut ini tidak ditetapkan, maka
+{@code documentLaunchMode="none"} akan digunakan.</p>
+
+<h2 id="removing">Menghapus Tugas</h2>
+
+<p>Secara default, tugas dokumen secara otomatis dihapus dari layar ikhtisar bila aktivitasnya
+selesai. Anda bisa mengesampingkan perilaku ini dengan kelas {@link android.app.ActivityManager.AppTask},
+dengan flag {@link android.content.Intent} atau atribut <code><a href="{@docRoot}guide/topics/manifest/activity-element.html">
+<activity></a></code>.</p>
+
+<p>Kapan saja Anda bisa mengecualikan tugas dari layar ikhtisar secara keseluruhan dengan menetapkan atribut
+<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>
+, <a href="{@docRoot}guide/topics/manifest/activity-element.html#exclude">
+{@code android:excludeFromRecents}</a> hingga {@code true}.</p>
+
+<p>Anda bisa menetapkan jumlah maksimum tugas yang dapat disertakan aplikasi Anda dalam layar ikhtisar dengan menetapkan
+atribut <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>
+ <a href="{@docRoot}guide/topics/manifest/activity-element.html#maxrecents">{@code android:maxRecents}
+</a> ke satu nilai integer. Nilai default-nya adalah 16. Bila telah mencapai jumlah maksimum, tugas yang terakhir
+digunakan akan dihapus dari layar ikhtisar. Nilai maksimum {@code android:maxRecents}
+ adalah 50 (25 pada perangkat dengan memori sedikit); nilai yang kurang dari 1 tidak berlaku.</p>
+
+<h3 id="#apptask-remove">Menggunakan kelas AppTask untuk menghapus tugas</h3>
+
+<p>Dalam aktivitas yang membuat tugas baru di layar ikhtisar, Anda bisa
+menetapkan kapan menghapus tugas dan menyelesaikan semua aktivitas yang terkait dengannya
+dengan memanggil metode {@link android.app.ActivityManager.AppTask#finishAndRemoveTask() finishAndRemoveTask()}.</p>
+
+<p class="code-caption"><a href="{@docRoot}samples/DocumentCentricApps/index.html">
+NewDocumentActivity.java</a></p>
+<pre>
+public void onRemoveFromRecents(View view) {
+ // The document is no longer needed; remove its task.
+ finishAndRemoveTask();
+}
+</pre>
+
+<p class="note"><strong>Catatan:</strong> Penggunaan metode
+{@link android.app.ActivityManager.AppTask#finishAndRemoveTask() finishAndRemoveTask()}
+akan mengesampingkan penggunaan tag {@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS}, seperti
+dibahas di bawah ini.</p>
+
+<h3 id="#retain-finished">Mempertahankan tugas yang telah selesai</h3>
+
+<p>Jika Anda ingin mempertahankan tugas di layar ikhtisar, sekalipun aktivitas sudah selesai, teruskan
+flag {@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS} dalam metode
+{@link android.content.Intent#addFlags(int) addFlags()} dari Intent yang memulai aktivitas itu.</p>
+
+<p class="code-caption"><a href="{@docRoot}samples/DocumentCentricApps/index.html">
+DocumentCentricActivity.java</a></p>
+<pre>
+private Intent newDocumentIntent() {
+ final Intent newDocumentIntent = new Intent(this, NewDocumentActivity.class);
+ newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
+ android.content.Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS);
+ newDocumentIntent.putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, incrementAndGet());
+ return newDocumentIntent;
+}
+</pre>
+
+<p>Untuk memperoleh efek yang sama, tetapkan atribut
+<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>
+ <a href="{@docRoot}guide/topics/manifest/activity-element.html#autoremrecents">
+{@code android:autoRemoveFromRecents}</a> hingga {@code false}. Nilai default-nya adalah {@code true}
+untuk aktivitas dokumen, dan {@code false} untuk aktivitas biasa. Penggunaan atribut ini akan mengesampingkan flag
+{@link android.content.Intent#FLAG_ACTIVITY_RETAIN_IN_RECENTS}, yang telah dibahas sebelumnya.</p>
+
+
+
+
+
+
+
diff --git a/docs/html-intl/intl/id/guide/components/services.jd b/docs/html-intl/intl/id/guide/components/services.jd
new file mode 100644
index 0000000..b36e565
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/components/services.jd
@@ -0,0 +1,813 @@
+page.title=Layanan
+@jd:body
+
+<div id="qv-wrapper">
+<ol id="qv">
+<h2>Dalam dokumen ini</h2>
+<ol>
+<li><a href="#Basics">Dasar-Dasar</a></li>
+<ol>
+ <li><a href="#Declaring">Mendeklarasikan layanan dalam manifes</a></li>
+</ol>
+<li><a href="#CreatingAService">Membuat Layanan yang Sudah Dimulai</a>
+ <ol>
+ <li><a href="#ExtendingIntentService">Memperluas kelas IntentService</a></li>
+ <li><a href="#ExtendingService">Memperluas kelas Layanan</a></li>
+ <li><a href="#StartingAService">Memulai layanan</a></li>
+ <li><a href="#Stopping">Menghentikan layanan</a></li>
+ </ol>
+</li>
+<li><a href="#CreatingBoundService">Membuat Layanan Terikat</a></li>
+<li><a href="#Notifications">Mengirim Pemberitahuan ke Pengguna</a></li>
+<li><a href="#Foreground">Menjalankan Layanan di Latar Depan</a></li>
+<li><a href="#Lifecycle">Mengelola Daur Hidup Layanan</a>
+<ol>
+ <li><a href="#LifecycleCallbacks">Mengimplementasikan callback daur hidup</a></li>
+</ol>
+</li>
+</ol>
+
+<h2>Kelas-kelas utama</h2>
+<ol>
+ <li>{@link android.app.Service}</li>
+ <li>{@link android.app.IntentService}</li>
+</ol>
+
+<h2>Contoh</h2>
+<ol>
+ <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/ServiceStartArguments.html">{@code
+ ServiceStartArguments}</a></li>
+ <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LocalService.html">{@code
+ LocalService}</a></li>
+</ol>
+
+<h2>Lihat juga</h2>
+<ol>
+<li><a href="{@docRoot}guide/components/bound-services.html">Layanan Terikat</a></li>
+</ol>
+
+</div>
+
+
+<p>{@link android.app.Service} adalah sebuah komponen aplikasi yang bisa melakukan
+operasi yang berjalan lama di latar belakang dan tidak menyediakan antarmuka pengguna. Komponen
+aplikasi lain bisa memulai layanan dan komponen aplikasi tersebut akan terus berjalan
+di latar belakang walaupun pengguna beralih ke aplikasi lain. Selain itu, komponen bisa mengikat ke layanan
+untuk berinteraksi dengannya dan bahkan melakukan komunikasi antarproses (IPC). Misalnya, layanan mungkin
+menangani transaksi jaringan, memutar musik, melakukan file I/O, atau berinteraksi dengan penyedia konten
+dari latar belakang.</p>
+
+<p>Ada dua bentuk dasar layanan:</p>
+
+<dl>
+ <dt>Sudah Dimulai</dt>
+ <dd>Layanan "sudah dimulai" bila komponen aplikasi (misalnya aktivitas) memulainya dengan
+memanggil {@link android.content.Context#startService startService()}. Sesudah dimulai, layanan
+bisa berjalan terus-menerus di latar belakang walaupun komponen yang memulainya telah dimusnahkan. Biasanya,
+layanan yang sudah dimulai akan melakukan operasi tunggal dan tidak mengembalikan hasil ke pemanggilnya.
+Misalnya, layanan bisa mengunduh atau mengunggah file melalui jaringan. Bila operasi selesai,
+layanan seharusnya berhenti sendiri.</dd>
+ <dt>Terikat</dt>
+ <dd>Layanan "terikat" bila komponen aplikasi mengikat kepadanya dengan memanggil {@link
+android.content.Context#bindService bindService()}. Layanan terikat menawarkan antarmuka
+klien-server yang memungkinkan komponen berinteraksi dengan layanan tersebut, mengirim permintaan, mendapatkan hasil dan bahkan
+melakukannya pada sejumlah proses dengan komunikasi antarproses (IPC). Layanan terikat hanya berjalan selama
+ada komponen aplikasi lain yang terikat padanya. Sejumlah komponen bisa terikat pada layanan secara bersamaan,
+namun bila semuanya melepas ikatan, layanan tersebut akan dimusnahkan.</dd>
+</dl>
+
+<p>Walaupun dokumentasi ini secara umum membahas kedua jenis layanan secara terpisah, layanan
+Anda bisa menggunakan keduanya—layanan bisa dimulai (untuk berjalan terus-menerus) sekaligus memungkinkan pengikatan.
+Cukup mengimplementasikan dua metode callback: {@link
+android.app.Service#onStartCommand onStartCommand()} untuk memungkinkan komponen memulainya dan {@link
+android.app.Service#onBind onBind()} untuk memungkinkan pengikatan.</p>
+
+<p>Apakah aplikasi Anda sudah dimulai, terikat, atau keduanya, semua komponen aplikasi
+bisa menggunakan layanan (bahkan dari aplikasi terpisah), demikian pula semua komponen bisa menggunakan
+suatu aktivitas—dengan memulainya dengan {@link android.content.Intent}. Akan tetapi, Anda bisa mendeklarasikan
+layanan sebagai privat, pada file manifes, dan memblokir akses dari aplikasi lain. Hal ini
+dibahas selengkapnya di bagian tentang <a href="#Declaring">Mendeklarasikan layanan dalam
+manifes</a>.</p>
+
+<p class="caution"><strong>Perhatian:</strong> Layanan berjalan di
+thread utama proses yang menjadi host-nya—layanan <strong>tidak</strong> membuat thread-nya sendiri
+dan <strong>tidak</strong> berjalan pada proses terpisah (kecuali bila Anda tentukan demikian). Artinya,
+jika layanan Anda akan melakukan pekerjaan yang membutuhkan tenaga CPU besar atau operasi yang memblokir (seperti
+pemutaran MP3 atau jaringan), Anda perlu membuat thread baru dalam layanan untuk melakukan pekerjaan tersebut. Dengan menggunakan
+thread terpisah, Anda mengurangi risiko terjadinya kesalahan Aplikasi Tidak Merespons (Application Not Responding/ANR) dan
+thread utama aplikasi bisa tetap dikhususkan pada interaksi pengguna dengan aktivitas Anda.</p>
+
+
+<h2 id="Basics">Dasar-Dasar</h2>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+ <h3>Haruskah menggunakan layanan atau thread?</h3>
+ <p>Layanan sekadar komponen yang bisa berjalan di latar belakang walaupun pengguna sedang tidak
+berinteraksi dengan aplikasi Anda. Sehingga, Anda harus membuat layanan bila memang itu
+yang dibutuhkan.</p>
+ <p>Bila Anda perlu melakukan pekerjaan di luar thread utama, namun hanya bila pengguna sedang berinteraksi
+dengan aplikasi, maka Anda harus membuat thread baru sebagai ganti layanan baru. Misalnya,
+bila Anda ingin memutar musik, namun hanya saat aktivitas Anda berjalan, Anda bisa membuat
+thread dalam {@link android.app.Activity#onCreate onCreate()}, mulai menjalankannya di {@link
+android.app.Activity#onStart onStart()}, kemudian menghentikannya di {@link android.app.Activity#onStop
+onStop()}. Pertimbangkan juga untuk menggunakan {@link android.os.AsyncTask} atau {@link android.os.HandlerThread},
+sebagai ganti kelas {@link java.lang.Thread} yang lazim digunakan. Lihat dokumen <a href="{@docRoot}guide/components/processes-and-threads.html#Threads">Proses dan
+Threading</a> untuk informasi selengkapnya tentang thread.</p>
+ <p>Ingatlah jika menggunakan layanan, layanan tersebut tetap berjalan di thread utama aplikasi Anda secara
+default, jadi Anda harus tetap membuat thread baru dalam layanan bila layanan tersebut melakukan operasi yang intensif
+atau operasi yang memblokir.</p>
+</div>
+</div>
+
+<p>Untuk membuat layanan, Anda harus membuat subkelas {@link android.app.Service} (atau
+salah satu dari subkelasnya yang ada). Dalam implementasi, Anda perlu mengesampingkan sebagian metode callback yang
+menangani aspek utama daur hidup layanan dan memberikan mekanisme bagi komponen untuk mengikat
+pada layanan, bila dibutuhkan. Metode callback terpenting yang perlu Anda kesampingkan adalah:</p>
+
+<dl>
+ <dt>{@link android.app.Service#onStartCommand onStartCommand()}</dt>
+ <dd>Sistem akan memanggil metode ini bila komponen lain, misalnya aktivitas,
+meminta dimulainya layanan, dengan memanggil {@link android.content.Context#startService
+startService()}. Setelah metode ini dieksekusi, layanan akan dimulai dan bisa berjalan di
+latar belakang terus-menerus. Jika mengimplementasikan ini, Anda bertanggung jawab menghentikan layanan bila
+bila pekerjaannya selesai, dengan memanggil {@link android.app.Service#stopSelf stopSelf()} atau {@link
+android.content.Context#stopService stopService()}. (Jika hanya ingin menyediakan pengikatan, Anda tidak
+perlu mengimplementasikan metode ini.)</dd>
+ <dt>{@link android.app.Service#onBind onBind()}</dt>
+ <dd>Sistem akan memanggil metode ini bila komponen lain ingin mengikat pada
+layanan (misalnya untuk melakukan RPC), dengan memanggil {@link android.content.Context#bindService
+bindService()}. Dalam mengimplementasikan metode ini, Anda harus menyediakan antarmuka yang digunakan
+klien untuk berkomunikasi dengan layanan, dengan mengembalikan {@link android.os.IBinder}. Anda harus selalu
+mengimplementasikan metode ini, namun jika tidak ingin mengizinkan pengikatan, Anda perlu mengembalikan null.</dd>
+ <dt>{@link android.app.Service#onCreate()}</dt>
+ <dd>Sistem memanggil metode ini bila layanan dibuat untuk pertama kalinya, untuk melakukan prosedur
+penyiapan satu kali (sebelum memanggil {@link android.app.Service#onStartCommand onStartCommand()} atau
+{@link android.app.Service#onBind onBind()}). Bila layanan sudah berjalan, metode ini tidak
+dipanggil.</dd>
+ <dt>{@link android.app.Service#onDestroy()}</dt>
+ <dd>Sistem memanggil metode ini bila layanan tidak lagi digunakan dan sedang dimusnahkan.
+Layanan Anda perlu mengimplementasikannya untuk membersihkan sumber daya seperti thread, listener
+terdaftar, penerima, dll. Ini adalah panggilan terakhir yang diterima layanan.</dd>
+</dl>
+
+<p>Bila komponen memulai layanan dengan memanggil {@link
+android.content.Context#startService startService()} (yang menyebabkan panggilan ke {@link
+android.app.Service#onStartCommand onStartCommand()}), maka layanan
+terus berjalan hingga terhenti sendiri dengan {@link android.app.Service#stopSelf()} atau bila komponen
+lain menghentikannya dengan memanggil {@link android.content.Context#stopService stopService()}.</p>
+
+<p>Bila komponen memanggil
+{@link android.content.Context#bindService bindService()} untuk membuat layanan (dan {@link
+android.app.Service#onStartCommand onStartCommand()} <em>tidak</em> dipanggil), maka layanan hanya berjalan
+selama komponen terikat kepadanya. Setelah layanan dilepas ikatannya dari semua klien,
+sistem akan menghancurkannya.</p>
+
+<p>Sistem Android akan menghentikan paksa layanan hanya bila memori tinggal sedikit dan sistem harus memulihkan
+sumber daya sistem untuk aktivitas yang mendapatkan fokus pengguna. Jika layanan terikat pada suatu aktivitas yang mendapatkan
+fokus pengguna, layanan tersebut lebih kecil kemungkinannya untuk dimatikan, dan jika layanan dideklarasikan untuk <a href="#Foreground">berjalan di latar depan</a> (akan dibahas kemudian), maka sudah hampir pasti ia tidak akan dimatikan.
+Sebaliknya, bila layanan sudah dimulai dan berjalan lama, maka sistem akan menurunkan posisinya
+dalam daftar tugas latar belakang seiring waktu dan layanan akan sangat rentan untuk
+dimatikan—bila layanan Anda dimulai, maka Anda harus mendesainnya agar bisa menangani restart
+oleh sistem dengan baik. Jika sistem mematikan layanan Anda, layanan akan dimulai kembali begitu sumber daya
+kembali tersedia (tetapi ini juga bergantung pada nilai yang Anda kembalikan dari {@link
+android.app.Service#onStartCommand onStartCommand()}, sebagaimana akan dibahas nanti). Untuk informasi selengkapnya
+tentang kapan sistem mungkin akan memusnahkan layanan, lihat dokumen
+<a href="{@docRoot}guide/components/processes-and-threads.html">Proses dan Threading</a>.</p>
+
+<p>Dalam bagian selanjutnya, Anda akan melihat bagaimana membuat masing-masing tipe layanan dan cara menggunakannya
+dari komponen aplikasi lain.</p>
+
+
+
+<h3 id="Declaring">Mendeklarasikan layanan dalam manifes</h3>
+
+<p>Sebagaimana aktivitas (dan komponen lainnya), Anda harus mendeklarasikan semua layanan dalam file manifes
+aplikasi Anda.</p>
+
+<p>Untuk mendeklarasikan layanan Anda, tambahkan sebuah elemen <a href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a>
+sebagai anak
+elemen <a href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application>}</a>. Misalnya:</p>
+
+<pre>
+<manifest ... >
+ ...
+ <application ... >
+ <service android:name=".ExampleService" />
+ ...
+ </application>
+</manifest>
+</pre>
+
+<p>Lihat acuan elemen <a href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a>
+untuk informasi selengkapnya tentang cara mendeklarasikan layanan Anda dalam manifes.</p>
+
+<p>Ada atribut lain yang bisa Anda sertakan dalam elemen <a href="{@docRoot}guide/topics/manifest/service-element.html">{@code <service>}</a> untuk
+mendefinisikan properti seperti izin yang dibutuhkan untuk memulai layanan dan proses
+tempat berjalannya layanan. <a href="{@docRoot}guide/topics/manifest/service-element.html#nm">{@code android:name}</a> adalah satu-satunya atribut yang diperlukan
+—atribut tersebut menetapkan nama kelas layanan. Setelah
+mempublikasikan aplikasi, Anda tidak boleh mengubah nama ini, karena jika melakukannya, Anda bisa merusak
+kode karena dependensi terhadap intent eksplisit untuk memulai atau mengikat layanan (bacalah posting blog berjudul <a href="http://android-developers.blogspot.com/2011/06/things-that-cannot-change.html">Things
+That Cannot Change</a>).
+
+<p>Untuk memastikan aplikasi Anda aman, <strong>selalu gunakan intent eksplisit saat memulai atau mengikat
+{@link android.app.Service} Anda</strong> dan jangan mendeklarasikan filter intent untuk layanan. Jika
+Anda perlu membiarkan adanya ambiguitas tentang layanan mana yang dimulai, Anda bisa
+menyediakan filter intent bagi layanan dan tidak memasukkan nama komponen pada {@link
+android.content.Intent}, namun Anda juga harus menyesuaikan paket bagi intent tersebut dengan {@link
+android.content.Intent#setPackage setPackage()}, yang memberikan klarifikasi memadai bagi
+target layanan.</p>
+
+<p>Anda juga bisa memastikan layanan tersedia hanya bagi aplikasi Anda dengan
+menyertakan atribut <a href="{@docRoot}guide/topics/manifest/service-element.html#exported">{@code android:exported}</a>
+dan mengaturnya ke {@code "false"}. Hal ini efektif menghentikan aplikasi lain agar tidak memulai
+layanan Anda, bahkan saat menggunakan intent eksplisit.</p>
+
+
+
+
+<h2 id="CreatingStartedService">Membuat Layanan yang Sudah Dimulai</h2>
+
+<p>Layanan yang sudah dimulai adalah layanan yang dimulai komponen lain dengan memanggil {@link
+android.content.Context#startService startService()}, yang menyebabkan panggilan ke metode
+{@link android.app.Service#onStartCommand onStartCommand()} layanan.</p>
+
+<p>Bila layanan sudah dimulai, layanan tersebut memiliki daur hidup yang tidak bergantung pada
+komponen yang memulainya dan bisa berjalan terus-menerus di latar belakang walaupun
+komponen yang memulainya dimusnahkan. Dengan sendirinya, layanan akan berhenti sendiri bila pekerjaannya
+selesai dengan memanggil {@link android.app.Service#stopSelf stopSelf()}, atau komponen lain bisa menghentikannya
+dengan memanggil {@link android.content.Context#stopService stopService()}.</p>
+
+<p>Komponen aplikasi seperti aktivitas bisa memulai layanan dengan memanggil {@link
+android.content.Context#startService startService()} dan meneruskan {@link android.content.Intent}
+yang menetapkan layanan dan menyertakan data untuk digunakan layanan. Layanan menerima
+{@link android.content.Intent} ini dalam metode {@link android.app.Service#onStartCommand
+onStartCommand()}.</p>
+
+<p>Sebagai contoh, anggaplah aktivitas perlu menyimpan data ke database online. Aktivitas tersebut bisa
+memulai layanan pendamping dan mengiriminya data untuk disimpan dengan meneruskan intent ke {@link
+android.content.Context#startService startService()}. Layanan akan menerima intent dalam {@link
+android.app.Service#onStartCommand onStartCommand()}, menghubungkan ke Internet dan melakukan
+transaksi database. Bila transaksi selesai, layanan akan berhenti sendiri dan
+dimusnahkan.</p>
+
+<p class="caution"><strong>Perhatian:</strong> Layanan berjalan dalam proses yang sama dengan aplikasi
+tempatnya dideklarasikan dan dalam thread utama aplikasi tersebut, secara default. Jadi, bila layanan Anda
+melakukan operasi yang intensif atau operasi pemblokiran saat pengguna berinteraksi dengan aktivitas dari
+aplikasi yang sama, layanan akan memperlambat kinerja aktivitas. Agar tidak memengaruhi
+kinerja aplikasi, Anda harus memulai thread baru di dalam layanan.</p>
+
+<p>Biasanya, ada dua kelas yang bisa Anda perluas untuk membuat layanan yang sudah dimulai:</p>
+<dl>
+ <dt>{@link android.app.Service}</dt>
+ <dd>Ini adalah kelas dasar untuk semua layanan. Bila memperluas kelas ini, Anda perlu
+membuat thread baru sebagai tempat melaksanakan semua pekerjaan layanan tersebut, karena layanan
+menggunakan thread utama aplikasi Anda secara default, dan hal ini bisa memperlambat
+kinerja aktivitas yang dijalankan aplikasi Anda.</dd>
+ <dt>{@link android.app.IntentService}</dt>
+ <dd>Ini adalah subkelas {@link android.app.Service} yang menggunakan thread pekerja untuk menangani
+semua permintaan memulai, satu per satu. Ini adalah pilihan terbaik jika Anda tidak mengharuskan layanan
+menangani beberapa permintaan sekaligus. Anda cukup mengimplementasikan {@link
+android.app.IntentService#onHandleIntent onHandleIntent()}, yang menerima intent untuk setiap
+permintaan memulai agar bisa melakukan pekerjaan latar belakang.</dd>
+</dl>
+
+<p>Bagian selanjutnya membahas cara mengimplementasikan layanan Anda menggunakan
+salah satu dari kelas-kelas ini.</p>
+
+
+<h3 id="ExtendingIntentService">Memperluas kelas IntentService</h3>
+
+<p>Mengingat kebanyakan layanan yang sudah dimulai tidak perlu menangani beberapa permintaan
+sekaligus (yang bisa berupa skenario multi-threading berbahaya), mungkin Anda sebaiknya mengimplementasikan
+layanan menggunakan kelas {@link android.app.IntentService}.</p>
+
+<p>Berikut ini yang dilakukan {@link android.app.IntentService}:</p>
+
+<ul>
+ <li>Membuat thread pekerja default yang menjalankan semua intent yang disampaikan ke {@link
+android.app.Service#onStartCommand onStartCommand()} terpisah dari thread utama aplikasi
+Anda.</li>
+ <li>Membuat antrean pekerjaan yang meneruskan intent satu per satu ke implementasi {@link
+android.app.IntentService#onHandleIntent onHandleIntent()}, sehingga Anda tidak perlu
+mengkhawatirkan multi-threading.</li>
+ <li>Menghentikan layanan setelah semua permintaan memulai telah ditangani, jadi Anda tidak perlu memanggil
+{@link android.app.Service#stopSelf}.</li>
+ <li>Menyediakan implementasi default {@link android.app.IntentService#onBind onBind()} yang
+mengembalikan null.</li>
+ <li>Menyediakan implementasi default {@link android.app.IntentService#onStartCommand
+onStartCommand()} yang mengirimkan intent ke antrean pekerjaan kemudian ke implementasi {@link
+android.app.IntentService#onHandleIntent onHandleIntent()} Anda.</li>
+</ul>
+
+<p>Oleh karena itu, Anda hanya perlu mengimplementasikan {@link
+android.app.IntentService#onHandleIntent onHandleIntent()} untuk melakukan pekerjaan yang diberikan oleh
+klien. (Akan tetapi, Anda juga perlu menyediakan konstruktor kecil bagi layanan.)</p>
+
+<p>Berikut ini contoh implementasi {@link android.app.IntentService}:</p>
+
+<pre>
+public class HelloIntentService extends IntentService {
+
+ /**
+ * A constructor is required, and must call the super {@link android.app.IntentService#IntentService}
+ * constructor with a name for the worker thread.
+ */
+ public HelloIntentService() {
+ super("HelloIntentService");
+ }
+
+ /**
+ * The IntentService calls this method from the default worker thread with
+ * the intent that started the service. When this method returns, IntentService
+ * stops the service, as appropriate.
+ */
+ @Override
+ protected void onHandleIntent(Intent intent) {
+ // Normally we would do some work here, like download a file.
+ // For our sample, we just sleep for 5 seconds.
+ long endTime = System.currentTimeMillis() + 5*1000;
+ while (System.currentTimeMillis() < endTime) {
+ synchronized (this) {
+ try {
+ wait(endTime - System.currentTimeMillis());
+ } catch (Exception e) {
+ }
+ }
+ }
+ }
+}
+</pre>
+
+<p>Anda hanya memerlukan: konstruktor dan implementasi {@link
+android.app.IntentService#onHandleIntent onHandleIntent()}.</p>
+
+<p>Jika Anda memutuskan untuk juga mengesampingkan metode callback lain, seperti {@link
+android.app.IntentService#onCreate onCreate()}, {@link
+android.app.IntentService#onStartCommand onStartCommand()}, atau {@link
+android.app.IntentService#onDestroy onDestroy()}, pastikan memanggil implementasi super, sehingga
+{@link android.app.IntentService} bisa menangani hidup thread pekerja dengan baik.</p>
+
+<p>Misalnya, {@link android.app.IntentService#onStartCommand onStartCommand()} harus mengembalikan
+implementasi default (yang merupakan cara penyampaian intent ke {@link
+android.app.IntentService#onHandleIntent onHandleIntent()}):</p>
+
+<pre>
+@Override
+public int onStartCommand(Intent intent, int flags, int startId) {
+ Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();
+ return super.onStartCommand(intent,flags,startId);
+}
+</pre>
+
+<p>Selain {@link android.app.IntentService#onHandleIntent onHandleIntent()}, satu-satunya metode lain
+yang tidak mengharuskan Anda memanggil super kelas adalah {@link android.app.IntentService#onBind
+onBind()} (namun Anda hanya perlu mengimplementasikannya bila layanan mengizinkan pengikatan).</p>
+
+<p>Dalam bagian berikutnya, Anda akan melihat bagaimana layanan serupa diimplementasikan saat
+memperluas kelas {@link android.app.Service} basis, yang membutuhkan kode lebih banyak lagi, namun mungkin
+cocok jika Anda perlu menangani beberapa permintaan memulai sekaligus.</p>
+
+
+<h3 id="ExtendingService">Memperluas kelas Layanan</h3>
+
+<p>Seperti telah Anda lihat di bagian sebelumnya, menggunakan {@link android.app.IntentService} membuat
+implementasi layanan yang sudah dimulai jadi sangat sederhana. Namun, bila Anda mengharuskan layanan untuk
+melakukan multi-threading (sebagai ganti memproses permintaan memulai melalui antrean pekerjaan), maka Anda
+bisa memperluas kelas {@link android.app.Service} untuk menangani masing-masing intent.</p>
+
+<p>Sebagai perbandingan, contoh kode berikut ini adalah implementasi kelas {@link
+android.app.Service} yang melakukan pekerjaan yang persis sama dengan contoh di atas menggunakan {@link
+android.app.IntentService}. Artinya, untuk setiap permintaan memulai, kode tersebut akan menggunakan thread pekerja
+untuk melakukan pekerjaan dan memproses permintaan satu per satu.</p>
+
+<pre>
+public class HelloService extends Service {
+ private Looper mServiceLooper;
+ private ServiceHandler mServiceHandler;
+
+ // Handler that receives messages from the thread
+ private final class ServiceHandler extends Handler {
+ public ServiceHandler(Looper looper) {
+ super(looper);
+ }
+ @Override
+ public void handleMessage(Message msg) {
+ // Normally we would do some work here, like download a file.
+ // For our sample, we just sleep for 5 seconds.
+ long endTime = System.currentTimeMillis() + 5*1000;
+ while (System.currentTimeMillis() < endTime) {
+ synchronized (this) {
+ try {
+ wait(endTime - System.currentTimeMillis());
+ } catch (Exception e) {
+ }
+ }
+ }
+ // Stop the service using the startId, so that we don't stop
+ // the service in the middle of handling another job
+ stopSelf(msg.arg1);
+ }
+ }
+
+ @Override
+ public void onCreate() {
+ // Start up the thread running the service. Note that we create a
+ // separate thread because the service normally runs in the process's
+ // main thread, which we don't want to block. We also make it
+ // background priority so CPU-intensive work will not disrupt our UI.
+ HandlerThread thread = new HandlerThread("ServiceStartArguments",
+ Process.THREAD_PRIORITY_BACKGROUND);
+ thread.start();
+
+ // Get the HandlerThread's Looper and use it for our Handler
+ mServiceLooper = thread.getLooper();
+ mServiceHandler = new ServiceHandler(mServiceLooper);
+ }
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();
+
+ // For each start request, send a message to start a job and deliver the
+ // start ID so we know which request we're stopping when we finish the job
+ Message msg = mServiceHandler.obtainMessage();
+ msg.arg1 = startId;
+ mServiceHandler.sendMessage(msg);
+
+ // If we get killed, after returning from here, restart
+ return START_STICKY;
+ }
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ // We don't provide binding, so return null
+ return null;
+ }
+
+ @Override
+ public void onDestroy() {
+ Toast.makeText(this, "service done", Toast.LENGTH_SHORT).show();
+ }
+}
+</pre>
+
+<p>Seperti yang bisa Anda lihat, ini membutuhkan lebih banyak pekerjaan daripada menggunakan {@link android.app.IntentService}.</p>
+
+<p>Akan tetapi, karena Anda menangani sendiri setiap panggilan ke {@link android.app.Service#onStartCommand
+onStartCommand()}, Anda bisa melakukan beberapa permintaan sekaligus. Itu bukan yang
+dilakukan contoh ini, namun jika itu yang diinginkan, Anda bisa membuat thread baru untuk setiap
+permintaan dan langsung menjalankannya (sebagai ganti menunggu permintaan sebelumnya selesai).</p>
+
+<p>Perhatikan bahwa metode {@link android.app.Service#onStartCommand onStartCommand()} harus mengembalikan
+integer. Integer tersebut merupakan nilai yang menjelaskan cara sistem melanjutkan layanan dalam
+kejadian yang dimatikan oleh sistem (sebagaimana dibahas di atas, implementasi default {@link
+android.app.IntentService} menangani hal ini untuk Anda, walaupun Anda bisa memodifikasinya). Nilai yang dikembalikan
+dari {@link android.app.Service#onStartCommand onStartCommand()} harus berupa salah satu
+konstanta berikut ini:</p>
+
+<dl>
+ <dt>{@link android.app.Service#START_NOT_STICKY}</dt>
+ <dd>Jika sistem mematikan layanan setelah {@link android.app.Service#onStartCommand
+onStartCommand()} dikembalikan, <em>jangan</em> membuat lagi layanan tersebut, kecuali jika ada intent
+tertunda yang akan disampaikan. Inilah pilihan teraman untuk menghindari menjalankan layanan Anda
+bila tidak diperlukan dan bila aplikasi Anda bisa me-restart pekerjaan yang belum selesai.</dd>
+ <dt>{@link android.app.Service#START_STICKY}</dt>
+ <dd>Jika sistem mematikan layanan setelah {@link android.app.Service#onStartCommand
+onStartCommand()} dikembalikan, buat kembali layanan dan panggil {@link
+android.app.Service#onStartCommand onStartCommand()}, namun <em>jangan</em> menyampaikan ulang intent terakhir.
+Sebagai gantinya, sistem akan memanggil {@link android.app.Service#onStartCommand onStartCommand()} dengan
+intent null, kecuali jika ada intent tertunda untuk memulai layanan, dan dalam hal ini,
+intent tersebut disampaikan. Ini cocok bagi pemutar media (atau layanan serupa) yang tidak
+mengeksekusi perintah, namun berjalan terus-menerus dan menunggu pekerjaan.</dd>
+ <dt>{@link android.app.Service#START_REDELIVER_INTENT}</dt>
+ <dd>Jika sistem mematikan layanan setelah {@link android.app.Service#onStartCommand
+onStartCommand()} kembali, buat kembali layanan dan panggil {@link
+android.app.Service#onStartCommand onStartCommand()} dengan intent terakhir yang disampaikan ke
+layanan. Intent yang tertunda akan disampaikan pada gilirannya. Ini cocok bagi layanan yang
+aktif melakukan pekerjaan yang harus segera dilanjutkan, misalnya mengunduh file.</dd>
+</dl>
+<p>Untuk detail selengkapnya tentang nilai pengembalian ini, lihat dokumentasi acuan untuk setiap
+konstanta.</p>
+
+
+
+<h3 id="StartingAService">Memulai Layanan</h3>
+
+<p>Anda bisa memulai layanan dari aktivitas atau komponen aplikasi lain dengan meneruskan
+{@link android.content.Intent} (yang menetapkan layanan yang akan dimulai) ke {@link
+android.content.Context#startService startService()}. Sistem Android akan memanggil metode {@link
+android.app.Service#onStartCommand onStartCommand()} layanan dan meneruskan {@link
+android.content.Intent} padanya. (Jangan sekali-kali memanggil {@link android.app.Service#onStartCommand
+onStartCommand()} secara langsung.)</p>
+
+<p>Misalnya, aktivitas bisa memulai contoh layanan di bagian sebelumnya ({@code
+HelloSevice}) menggunakan intent eksplisit dengan {@link android.content.Context#startService
+startService()}:</p>
+
+<pre>
+Intent intent = new Intent(this, HelloService.class);
+startService(intent);
+</pre>
+
+<p>Metode {@link android.content.Context#startService startService()} segera kembali dan
+sistem Android akan memanggil metode {@link android.app.Service#onStartCommand
+onStartCommand()} layanan. Jika layanan belum berjalan, sistem mula-mula memanggil {@link
+android.app.Service#onCreate onCreate()}, kemudian memanggil {@link android.app.Service#onStartCommand
+onStartCommand()}.</p>
+
+<p>Jika layanan juga tidak menyediakan pengikatan, intent yang disampaikan dengan {@link
+android.content.Context#startService startService()} adalah satu-satunya mode komunikasi antara
+komponen aplikasi dan layanan. Akan tetapi, jika Anda ingin agar layanan mengirimkan hasilnya kembali, maka
+klien yang memulai layanan bisa membuat {@link android.app.PendingIntent} untuk siaran
+(dengan {@link android.app.PendingIntent#getBroadcast getBroadcast()}) dan menyampaikannya ke layanan
+dalam {@link android.content.Intent} yang memulai layanan. Layanan kemudian bisa menggunakan
+siaran untuk menyampaikan hasil.</p>
+
+<p>Beberapa permintaan untuk memulai layanan menghasilkan beberapa panggilan pula ke
+{@link android.app.Service#onStartCommand onStartCommand()} layanan. Akan tetapi, hanya satu permintaan untuk menghentikan
+layanan (dengan {@link android.app.Service#stopSelf stopSelf()} atau {@link
+android.content.Context#stopService stopService()}) dibutuhkan untuk menghentikannya.</p>
+
+
+<h3 id="Stopping">Menghentikan layanan</h3>
+
+<p>Layanan yang sudah dimulai harus mengelola daur hidupnya sendiri. Artinya, sistem tidak menghentikan atau
+memusnahkan layanan kecuali jika harus memulihkan memori sistem dan layanan
+terus berjalan setelah {@link android.app.Service#onStartCommand onStartCommand()} kembali. Jadi,
+layanan tersebut harus berhenti sendiri dengan memanggil {@link android.app.Service#stopSelf stopSelf()} atau
+komponen lain bisa menghentikannya dengan memanggil {@link android.content.Context#stopService stopService()}.</p>
+
+<p>Setelah diminta untuk berhenti dengan {@link android.app.Service#stopSelf stopSelf()} atau {@link
+android.content.Context#stopService stopService()}, sistem akan menghapus layanan
+secepatnya.</p>
+
+<p>Akan tetapi, bila layanan Anda menangani beberapa permintaan ke {@link
+android.app.Service#onStartCommand onStartCommand()} sekaligus, Anda tidak boleh menghentikan
+layanan bila Anda baru selesai memproses permintaan memulai, karena setelah itu mungkin Anda sudah menerima permintaan memulai
+yang baru (berhenti pada permintaan pertama akan menghentikan permintaan kedua). Untuk menghindari
+masalah ini, Anda bisa menggunakan {@link android.app.Service#stopSelf(int)} untuk memastikan bahwa permintaan
+Anda untuk menghentikan layanan selalu berdasarkan pada permintaan memulai terbaru. Artinya, bila Anda memanggil {@link
+android.app.Service#stopSelf(int)}, Anda akan meneruskan ID permintaan memulai (<code>startId</code>
+yang disampaikan ke {@link android.app.Service#onStartCommand onStartCommand()}) yang terkait dengan permintaan berhenti
+Anda. Kemudian jika layanan menerima permintaan memulai baru sebelum Anda bisa memanggil {@link
+android.app.Service#stopSelf(int)}, maka ID tidak akan sesuai dan layanan tidak akan berhenti.</p>
+
+<p class="caution"><strong>Perhatian:</strong> Aplikasi Anda perlu menghentikan layanannya
+bila selesai bekerja untuk menghindari pemborosan sumber daya sistem dan tenaga baterai. Jika perlu,
+komponen lain bisa menghentikan layanan secara eksplisit dengan memanggil {@link
+android.content.Context#stopService stopService()}. Bahkan jika Anda mengaktifkan pengikatan bagi layanan,
+Anda harus selalu menghentikan layanan sendiri jika layanan tersebut menerima panggilan ke {@link
+android.app.Service#onStartCommand onStartCommand()}.</p>
+
+<p>Untuk informasi selengkapnya tentang daur hidup layanan, lihat bagian di bawah ini tentang <a href="#Lifecycle">Mengelola Daur Hidup Layanan</a>.</p>
+
+
+
+<h2 id="CreatingBoundService">Membuat Layanan Terikat</h2>
+
+<p>Layanan terikat adalah layanan yang memungkinkan komponen aplikasi untuk mengikatnya dengan memanggil {@link
+android.content.Context#bindService bindService()} guna membuat koneksi yang berlangsung lama
+(dan umumnya tidak mengizinkan komponen untuk <em>memulainya</em> dengan memanggil {@link
+android.content.Context#startService startService()}).</p>
+
+<p>Anda sebaiknya membuat layanan terikat bila ingin berinteraksi dengan layanan dari aktivitas
+dan komponen lain dalam aplikasi Anda atau mengeskpos sebagian fungsionalitas aplikasi Anda ke
+ke aplikasi lain, melalui komunikasi antarproses (IPC).</p>
+
+<p>Untuk membuat layanan terikat, Anda harus mengimplementasikan metode callback {@link
+android.app.Service#onBind onBind()} untuk mengembalikan {@link android.os.IBinder} yang
+mendefinisikan antarmuka bagi komunikasi dengan layanan. Komponen aplikasi lain kemudian bisa memanggil
+{@link android.content.Context#bindService bindService()} untuk mengambil antarmuka dan
+mulai memanggil metode pada layanan. Layanan hanya hidup untuk melayani komponen aplikasi yang
+terikat padanya, jadi bila tidak ada komponen yang terikat pada layanan, sistem akan memusnahkannya
+(Anda <em>tidak</em> perlu menghentikan layanan terikat seperti halnya bila layanan dimulai
+melalui {@link android.app.Service#onStartCommand onStartCommand()}).</p>
+
+<p>Untuk membuat layanan terikat, hal yang perlu dilakukan pertama kali adalah mendefinisikan antarmuka yang menetapkan
+cara klien berkomunikasi dengan layanan. Antarmuka antara layanan
+dan klien ini harus berupa implementasi {@link android.os.IBinder} dan yang harus dikembalikan
+layanan Anda dari metode callback {@link android.app.Service#onBind
+onBind()}. Setelah menerima {@link android.os.IBinder}, klien bisa mulai
+berinteraksi dengan layanan melalui antarmuka tersebut.</p>
+
+<p>Beberapa klien bisa mengikat ke layanan sekaligus. Bila klien selesai berinteraksi dengan
+layanan, klien akan memanggil {@link android.content.Context#unbindService unbindService()} untuk melepas ikatan. Bila
+tidak ada klien yang terikat pada layanan, sistem akan menghapus layanan tersebut.</p>
+
+<p>Ada beberapa cara untuk mengimplementasikan layanan terikat dan implementasinya lebih
+rumit daripada layanan yang sudah dimulai, jadi layanan terikat dibahas dalam dokumen
+terpisah tentang <a href="{@docRoot}guide/components/bound-services.html">Layanan Terikat</a>.</p>
+
+
+
+<h2 id="Notifications">Mengirim Pemberitahuan ke Pengguna</h2>
+
+<p>Setelah berjalan, layanan bisa memberi tahu pengguna tentang suatu kejadian menggunakan <a href="{@docRoot}guide/topics/ui/notifiers/toasts.html">Pemberitahuan Toast</a> atau <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">Pemberitahuan Baris Status</a>.</p>
+
+<p>Pemberitahuan Toast adalah pesan yang muncul sebentar pada permukaan jendela saat ini
+kemudian menghilang, sementara pemberitahuan baris status memberikan ikon di baris status dengan
+pesan yang bisa dipilih oleh pengguna untuk melakukan suatu tindakan (misalnya memulai suatu aktivitas).</p>
+
+<p>Biasanya, pemberitahuan baris status adalah teknik terbaik bila ada pekerjaan latar belakang yang sudah selesai
+(misalnya file selesai
+diunduh) dan pengguna kini bisa menggunakannya. Bila pengguna memilih pemberitahuan dari
+tampilan diperluas, pemberitahuan akan bisa memulai aktivitas (misalnya menampilkan file yang baru diunduh).</p>
+
+<p>Lihat panduan pengembang <a href="{@docRoot}guide/topics/ui/notifiers/toasts.html">Pemberitahuan Toast</a> atau <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">Pemberitahuan Baris Status</a>
+untuk informasi selengkapnya.</p>
+
+
+
+<h2 id="Foreground">Menjalankan Layanan di Latar Depan</h2>
+
+<p>Layanan latar depan adalah layanan yang dianggap sebagai sesuatu yang
+diketahui secara aktif oleh pengguna, jadi bukan sesuatu yang akan dihapus oleh sistem bila memori menipis. Sebuah
+layanan latar depan harus memberikan pemberitahuan bagi baris status, yang ditempatkan pada
+heading "Ongoing" yang artinya pemberitahuan tersebut tidak bisa diabaikan kecuali jika layanan
+dihentikan atau dihapus dari latar depan.</p>
+
+<p>Misalnya, pemutar musik yang memutar musik dari suatu layanan harus diatur untuk berjalan di
+latar depan, karena pengguna mengetahui operasi tersebut
+secara eksplisit. Pemberitahuan di baris status bisa menunjukkan lagu saat ini dan memungkinkan
+pengguna untuk menjalankan suatu aktivitas untuk berinteraksi dengan pemutar musik.</p>
+
+<p>Untuk meminta agar layanan Anda berjalan di latar depan, panggil {@link
+android.app.Service#startForeground startForeground()}. Metode ini memerlukan dua parameter: sebuah integer
+yang mengidentifikasi pemberitahuan secara unik dan {@link
+android.app.Notification} untuk baris status. Misalnya:</p>
+
+<pre>
+Notification notification = new Notification(R.drawable.icon, getText(R.string.ticker_text),
+ System.currentTimeMillis());
+Intent notificationIntent = new Intent(this, ExampleActivity.class);
+PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
+notification.setLatestEventInfo(this, getText(R.string.notification_title),
+ getText(R.string.notification_message), pendingIntent);
+startForeground(ONGOING_NOTIFICATION_ID, notification);
+</pre>
+
+<p class="caution"><strong>Perhatian:</strong> ID integer yang Anda berikan ke {@link
+android.app.Service#startForeground startForeground()} tidak boleh 0.</p>
+
+
+<p>Untuk menghapus layanan dari latar depan, panggil {@link
+android.app.Service#stopForeground stopForeground()}. Metode ini memerlukan boolean, yang menunjukkan
+apakah pemberitahuan baris status juga akan dihapus. Metode ini <em>tidak</em> menghentikan
+layanan. Akan tetapi, jika Anda menghentikan layanan saat masih berjalan di latar depan
+maka pemberitahuan juga akan dihapus.</p>
+
+<p>Untuk informasi selengkapnya tentang pemberitahuan, lihat <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">Membuat Pemberitahuan
+Baris Status</a>.</p>
+
+
+
+<h2 id="Lifecycle">Mengelola Daur Hidup Layanan</h2>
+
+<p>Daur hidup layanan jauh lebih sederhana daripada daur hidup aktivitas. Akan tetapi, lebih penting lagi adalah
+memerhatikan dengan cermat bagaimana layanan Anda dibuat dan dimusnahkan, karena suatu layanan
+bisa berjalan di latar belakang tanpa disadari oleh pengguna.</p>
+
+<p>Daur hidup layanan—dari saat dibuat hingga dimusnahkan—bisa mengikuti
+dua path berbeda:</p>
+
+<ul>
+<li>Layanan yang sudah dimulai
+ <p>Layanan dibuat bila komponen lain memanggil {@link
+android.content.Context#startService startService()}. Layanan kemudian berjalan terus-menerus dan harus
+berhenti sendiri dengan memanggil {@link
+android.app.Service#stopSelf() stopSelf()}. Komponen lain juga bisa menghentikan
+layanan dengan memanggil {@link android.content.Context#stopService
+stopService()}. Bila layanan dihentikan, sistem akan menghancurkannya.</p></li>
+
+<li>Layanan terikat
+ <p>Layanan dibuat bila komponen lain (klien) memanggil {@link
+android.content.Context#bindService bindService()}. Klien kemudian berkomunikasi dengan layanan
+melalui antarmuka {@link android.os.IBinder}. Klien bisa menutup koneksi dengan memanggil
+{@link android.content.Context#unbindService unbindService()}. Sejumlah klien bisa mengikat pada
+layanan yang sama dan bila semuanya melepas ikatan, sistem akan memusnahkan layanan tersebut. (Layanan
+<em>tidak</em> perlu berhenti sendiri.)</p></li>
+</ul>
+
+<p>Kedua path tersebut tidak benar-benar terpisah. Artinya, Anda bisa mengikat ke layanan yang sudah
+dimulai dengan {@link android.content.Context#startService startService()}. Misalnya, layanan
+musik latar belakang bisa dimulai dengan memanggil {@link android.content.Context#startService
+startService()} dengan {@link android.content.Intent} yang mengidentifikasi musik yang akan diputar. Kemudian,
+mungkin saat pengguna ingin mengontrol pemutar musik atau mendapatkan informasi
+tentang lagu yang diputar, aktivitas bisa mengikat ke layanan dengan memanggil {@link
+android.content.Context#bindService bindService()}. Dalam kasus seperti ini, {@link
+android.content.Context#stopService stopService()} atau {@link android.app.Service#stopSelf
+stopSelf()} tidak menghentikan layanan sampai semua klien melepas ikatan. </p>
+
+
+<h3 id="LifecycleCallbacks">Mengimplementasikan callback daur hidup</h3>
+
+<p>Seperti halnya aktivitas, layanan memiliki metode callback daur hidup yang bisa Anda implementasikan
+untuk memantau perubahan status layanan dan melakukan pekerjaan pada waktu yang tepat. Layanan skeleton
+berikut memperagakan setiap metode daur hidup:</p>
+
+<pre>
+public class ExampleService extends Service {
+ int mStartMode; // indicates how to behave if the service is killed
+ IBinder mBinder; // interface for clients that bind
+ boolean mAllowRebind; // indicates whether onRebind should be used
+
+ @Override
+ public void {@link android.app.Service#onCreate onCreate}() {
+ // The service is being created
+ }
+ @Override
+ public int {@link android.app.Service#onStartCommand onStartCommand}(Intent intent, int flags, int startId) {
+ // The service is starting, due to a call to {@link android.content.Context#startService startService()}
+ return <em>mStartMode</em>;
+ }
+ @Override
+ public IBinder {@link android.app.Service#onBind onBind}(Intent intent) {
+ // A client is binding to the service with {@link android.content.Context#bindService bindService()}
+ return <em>mBinder</em>;
+ }
+ @Override
+ public boolean {@link android.app.Service#onUnbind onUnbind}(Intent intent) {
+ // All clients have unbound with {@link android.content.Context#unbindService unbindService()}
+ return <em>mAllowRebind</em>;
+ }
+ @Override
+ public void {@link android.app.Service#onRebind onRebind}(Intent intent) {
+ // A client is binding to the service with {@link android.content.Context#bindService bindService()},
+ // after onUnbind() has already been called
+ }
+ @Override
+ public void {@link android.app.Service#onDestroy onDestroy}() {
+ // The service is no longer used and is being destroyed
+ }
+}
+</pre>
+
+<p class="note"><strong>Catatan:</strong> Tidak seperti metode callback daur hidup aktivitas, Anda
+<em>tidak</em> perlu memanggil implementasi superkelas metode callback tersebut.</p>
+
+<img src="{@docRoot}images/service_lifecycle.png" alt="" />
+<p class="img-caption"><strong>Gambar 2.</strong> Daur hidup layanan. Diagram di sebelah kiri
+menampilkan daur hidup bila layanan dibuat dengan {@link android.content.Context#startService
+startService()} dan diagram di sebelah kanan menampilkan daur hidup bila layanan dibuat
+dengan {@link android.content.Context#bindService bindService()}.</p>
+
+<p>Dengan mengimplementasikan metode-metode ini, Anda bisa memantau dua loop tersarang (nested loop) daur hidup layanan: </p>
+
+<ul>
+<li><strong>Seluruh masa pakai</strong> layanan terjadi antara saat {@link
+android.app.Service#onCreate onCreate()} dipanggil dan saat {@link
+android.app.Service#onDestroy} kembali. Seperti halnya aktivitas, layanan melakukan penyiapan awal di
+{@link android.app.Service#onCreate onCreate()} dan melepaskan semua sisa sumber daya yang ada di {@link
+android.app.Service#onDestroy onDestroy()}. Misalnya,
+layanan pemutar musik bisa membuat thread tempat musik akan diputar dalam {@link
+android.app.Service#onCreate onCreate()}, kemudian menghentikan thread tersebut dalam {@link
+android.app.Service#onDestroy onDestroy()}.
+
+<p>Metode {@link android.app.Service#onCreate onCreate()} dan {@link android.app.Service#onDestroy
+onDestroy()} diperlukan semua layanan, baik yang
+dibuat oleh {@link android.content.Context#startService startService()} maupun {@link
+android.content.Context#bindService bindService()}.</p></li>
+
+<li><strong>Masa pakai aktif</strong> layanan dimulai dengan panggilan ke {@link
+android.app.Service#onStartCommand onStartCommand()} atau {@link android.app.Service#onBind onBind()}.
+Masing-masing metode diberikan {@link
+android.content.Intent} yang diteruskan ke {@link android.content.Context#startService
+startService()} atau {@link android.content.Context#bindService bindService()}.
+<p>Jika layanan telah dimulai, masa pakai aktif akan berakhir pada saat yang sama dengan
+berakhirnya seluruh masa pakai (layanan masih aktif bahkan setelah {@link android.app.Service#onStartCommand
+onStartCommand()} kembali). Jika layanan tersebut terikat, masa pakai aktifnya akan berakhir bila {@link
+android.app.Service#onUnbind onUnbind()} kembali.</p>
+</li>
+</ul>
+
+<p class="note"><strong>Catatan:</strong> Meskipun layanan yang sudah dimulai dihentikan dengan panggilan ke
+{@link android.app.Service#stopSelf stopSelf()} atau {@link
+android.content.Context#stopService stopService()}, tidak ada callback tersendiri bagi
+layanan tersebut (tidak ada callback {@code onStop()}). Jadi, kecuali jika layanan terikat ke klien,
+sistem akan memusnahkannya bila layanan dihentikan—{@link
+android.app.Service#onDestroy onDestroy()} adalah satu-satunya callback yang diterima.</p>
+
+<p>Gambar 2 mengilustrasikan metode callback yang lazim bagi suatu layanan. Walaupun gambar tersebut memisahkan
+layanan yang dibuat oleh {@link android.content.Context#startService startService()} dari layanan
+yang dibuat oleh {@link android.content.Context#bindService bindService()}, ingatlah
+bahwa suatu layanan, bagaimana pun dimulainya, bisa memungkinkan klien mengikat padanya.
+Jadi, suatu layanan yang awalnya dimulai dengan {@link android.app.Service#onStartCommand
+onStartCommand()} (oleh klien yang memanggil {@link android.content.Context#startService startService()})
+masih bisa menerima panggilan ke {@link android.app.Service#onBind onBind()} (bila klien memanggil
+{@link android.content.Context#bindService bindService()}).</p>
+
+<p>Untuk informasi selengkapnya tentang membuat layanan yang menyediakan pengikatan, lihat dokumen <a href="{@docRoot}guide/components/bound-services.html">Layanan Terikat</a>,
+yang menyertakan informasi selengkapnya tentang metode callback {@link android.app.Service#onRebind onRebind()}
+di bagian tentang <a href="{@docRoot}guide/components/bound-services.html#Lifecycle">Mengelola Daur Hidup
+Layanan Terikat</a>.</p>
+
+
+<!--
+<h2>Beginner's Path</h2>
+
+<p>To learn how to query data from the system or other applications (such as contacts or media
+stored on the device), continue with the <b><a
+href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a></b>
+document.</p>
+-->
diff --git a/docs/html-intl/intl/id/guide/components/tasks-and-back-stack.jd b/docs/html-intl/intl/id/guide/components/tasks-and-back-stack.jd
new file mode 100644
index 0000000..4c344ae
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/components/tasks-and-back-stack.jd
@@ -0,0 +1,578 @@
+page.title=Tugas dan Back-Stack
+parent.title=Aktivitas
+parent.link=activities.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>Dalam dokumen ini</h2>
+<ol>
+<li><a href="#ActivityState">Menyimpan Status Aktivitas</a></li></li>
+<li><a href="#ManagingTasks">Mengelola Tugas</a>
+ <ol>
+ <li><a href="#TaskLaunchModes">Mendefinisikan mode peluncuran</a></li>
+ <li><a href="#Affinities">Menangani afinitas</a></li>
+ <li><a href="#Clearing">Menghapus back-stack</a></li>
+ <li><a href="#Starting">Memulai tugas</a></li>
+ </ol>
+</li>
+</ol>
+
+<h2>Artikel</h2>
+<ol>
+ <li><a href="http://android-developers.blogspot.com/2010/04/multitasking-android-way.html">
+ Multitasking Ala Android</a></li>
+</ol>
+
+<h2>Lihat juga</h2>
+<ol>
+ <li><a href="{@docRoot}design/patterns/navigation.html">Desain Android:
+Navigasi</a></li>
+ <li><a href="{@docRoot}guide/topics/manifest/activity-element.html">Elemen manifes
+{@code <activity>}</a></li>
+ <li><a href="{@docRoot}guide/components/recents.html">Layar Ikhtisar</a></li>
+</ol>
+</div>
+</div>
+
+
+<p>Sebuah aplikasi biasanya berisi beberapa <a href="{@docRoot}guide/components/activities.html">aktivitas</a>. Setiap aktivitas
+harus didesain dengan jenis tindakan tertentu yang bisa dilakukan pengguna dan bisa memulai aktivitas
+lain. Misalnya, aplikasi email mungkin memiliki satu aktivitas untuk menampilkan daftar pesan baru.
+Bila pengguna memilih sebuah pesan, aktivitas baru akan terbuka untuk melihat pesan tersebut.</p>
+
+<p>Aktivitas bahkan bisa memulai aktivitas yang ada dalam aplikasi lain di perangkat. Misalnya
+, jika aplikasi Anda ingin mengirim pesan email, Anda bisa mendefinisikan intent untuk melakukan tindakan
+"kirim" dan menyertakan sejumlah data, seperti alamat email dan pesan. Aktivitas dari aplikasi
+lain yang mendeklarasikan dirinya untuk menangani jenis intent ini akan terbuka. Dalam hal ini, intent
+tersebut untuk mengirim email, sehingga aktivitas "menulis" pada aplikasi email akan dimulai (jika beberapa aktivitas
+mendukung intent yang sama, maka sistem akan memungkinkan pengguna memilih mana yang akan digunakan). Bila email telah
+dikirim, aktivitas Anda akan dilanjutkan dan seolah-olah aktivitas email adalah bagian dari aplikasi Anda. Meskipun
+aktivitas mungkin dari aplikasi yang berbeda, Android akan tetap mempertahankan pengalaman pengguna yang mulus
+dengan menjalankan kedua aktivitas dalam <em>tugas</em> yang sama.</p>
+
+<p>Tugas adalah kumpulan aktivitas yang berinteraksi dengan pengguna
+saat melakukan pekerjaan tertentu. Aktivitas tersebut diatur dalam tumpukan (<em>back-stack</em>), dalam
+urutan membuka setiap aktivitas.</p>
+
+<!-- SAVE FOR WHEN THE FRAGMENT DOC IS ADDED
+<div class="sidebox-wrapper">
+<div class="sidebox">
+<h3>Adding fragments to a task's back stack</h3>
+
+<p>Your activity can also include {@link android.app.Fragment}s to the back stack. For example,
+suppose you have a two-pane layout using fragments, one of which is a list view (fragment A) and the
+other being a layout to display an item from the list (fragment B). When the user selects an item
+from the list, fragment B is replaced by a new fragment (fragment C). In this case, it might be
+desireable for the user to navigate back to reveal fragment B, using the <em>Back</em> button.</p>
+<p>In order to add fragment B to the back stack so that this is possible, you must call {@link
+android.app.FragmentTransaction#addToBackStack addToBackStack()} before you {@link
+android.app.FragmentTransaction#commit()} the transaction that replaces fragment B with fragment
+C.</p>
+<p>For more information about using fragments and adding them to the back stack, see the {@link
+android.app.Fragment} class documentation.</p>
+
+</div>
+</div>
+-->
+
+<p>Layar Home perangkat adalah tempat memulai hampir semua tugas. Bila pengguna menyentuh ikon di launcher
+aplikasi
+(atau pintasan pada layar Home), tugas aplikasi tersebut akan muncul pada latar depan. Jika tidak ada
+tugas untuk aplikasi (aplikasi tidak digunakan baru-baru ini), maka tugas baru
+akan dibuat dan aktivitas "utama" untuk aplikasi tersebut akan terbuka sebagai aktivitas akar dalam back-stack.</p>
+
+<p>Bila aktivitas saat ini dimulai lagi, aktivitas baru akan didorong ke atas back-stack dan
+mengambil fokus. Aktivitas sebelumnya tetap dalam back-stack, namun dihentikan. Bila aktivitas
+dihentikan, sistem akan mempertahankan status antarmuka penggunanya saat ini. Bila pengguna menekan tombol
+<em>Back</em>
+, aktivitas saat ini akan dikeluarkan dari atas back-stack (aktivitas dimusnahkan) dan
+ aktivitas sebelumnya dilanjutkan (status UI sebelumnya dipulihkan). Aktivitas dalam back-stack
+tidak pernah disusun ulang, hanya didorong dan dikeluarkan dari back-stack—yang didorong ke back-stack saat dimulai oleh
+aktivitas saat ini dan dikeluarkan bila pengguna meninggalkannya menggunakan tombol <em>Back</em>. Dengan demikian,
+back-stack
+beroperasi sebagai struktur objek "masuk terakhir, keluar pertama". Gambar 1 melukiskan perilaku
+ini dengan jangka waktu yang menunjukkan kemajuan antar aktivitas beserta
+back-stack pada setiap waktu.</p>
+
+<img src="{@docRoot}images/fundamentals/diagram_backstack.png" alt="" />
+<p class="img-caption"><strong>Gambar 1.</strong> Representasi tentang cara setiap aktivitas baru dalam
+tugas menambahkan item ke back-stack. Bila pengguna menekan tombol <em>Back</em>, aktivitas
+saat ini
+akan dimusnahkan dan aktivitas sebelumnya dilanjutkan.</p>
+
+
+<p>Jika pengguna terus menekan <em>Back</em>, maka setiap aktivitas dalam back-stack akan dikeluarkan untuk
+menampilkan
+yang sebelumnya, sampai pengguna kembali ke layar Home (atau aktivitas mana pun yang sedang dijalankan saat tugas
+dimulai. Bila semua aktivitas telah dihapus dari back-stack, maka tugas tidak akan ada lagi.</p>
+
+<div class="figure" style="width:287px">
+<img src="{@docRoot}images/fundamentals/diagram_multitasking.png" alt="" /> <p
+class="img-caption"><strong>Gambar 2.</strong> Dua tugas: Tugas B menerima interaksi pengguna
+di latar depan, sedangkan Tugas A di latar belakang, menunggu untuk dilanjutkan.</p>
+</div>
+<div class="figure" style="width:215px">
+ <img src="{@docRoot}images/fundamentals/diagram_multiple_instances.png" alt="" /> <p
+class="img-caption"><strong>Gambar 3.</strong> Satu aktivitas dibuat instance-nya beberapa kali.</p>
+</div>
+
+<p>Tugas adalah unit kohesif yang bisa dipindahkan ke "latar belakang" bila pengguna memulai tugas baru atau masuk ke
+layar Home, melalui tombol<em>Home</em>. Sementara di latar belakang, semua aktivitas dalam
+tugas
+dihentikan, namun back-stack untuk tugas tidak berubah—tugas kehilangan fokus saat
+tugas lain berlangsung, seperti yang ditampilkan dalam gambar 2. Kemudian, tugas bisa kembali ke "latar depan" agar pengguna
+bisa melanjutkan tugas di tempat menghentikannya. Anggaplah, misalnya, tugas saat ini (Tugas A) memiliki tiga
+aktivitas dalam back-stack—dua pada aktivitas saat ini. Pengguna menekan tombol <em>Home</em>
+, kemudian
+memulai aplikasi baru dari launcher aplikasi. Bila muncul layar Home, Tugas A akan beralih
+ke latar belakang. Bila aplikasi baru dimulai, sistem akan memulai tugas untuk aplikasi tersebut
+(Tugas B) dengan back-stack aktivitas sendiri. Setelah berinteraksi dengan aplikasi
+tersebut, pengguna akan kembali ke Home lagi dan memilih aplikasi yang semula
+memulai Tugas A. Sekarang, Tugas A muncul di
+latar depan—ketiga aktivitas dalam back-stack tidak berubah dan aktivitas di atas
+back-stack akan dilanjutkan. Pada
+titik ini pengguna juga bisa beralih kembali ke Tugas B dengan masuk ke Home dan memilih ikon aplikasi
+yang memulai tugas tersebut (atau dengan memilih tugas aplikasi dari
+<a href="{@docRoot}guide/components/recents.html">layar ikhtisar</a>).
+Ini adalah contoh dari melakukan multitasking di Android.</p>
+
+<p class="note"><strong>Catatan:</strong> Beberapa tugas bisa berlangsung di latar belakang secara bersamaan.
+Akan tetapi, jika pengguna menjalankan banyak tugas di latar belakang sekaligus, sistem mungkin mulai
+menghapus aktivitas latar belakang untuk memulihkan memori, yang akan menyebabkan status aktivitas hilang.
+Lihat bagian berikut tentang <a href="#ActivityState">Status aktivitas</a>.</p>
+
+<p>Karena aktivitas di back-stack tidak pernah diatur ulang, jika aplikasi Anda memungkinkan
+pengguna untuk memulai aktivitas tertentu dari lebih dari satu aktivitas, instance baru
+aktivitas tersebut akan dibuat dan didorong ke back-stack (bukannya memunculkan instance sebelumnya dari
+aktivitas ke atas). Dengan demikian, satu aktivitas pada aplikasi Anda mungkin dibuat beberapa
+kali (bahkan dari beberapa tugas), seperti yang ditampilkan dalam gambar 3. Dengan demikian, jika pengguna mengarahkan mundur
+menggunakan tombol <em>Back</em>, setiap instance aktivitas ini akan ditampilkan dalam urutan saat
+dibuka (masing-masing
+dengan status UI sendiri). Akan tetapi, Anda bisa memodifikasi perilaku ini jika tidak ingin aktivitas
+dibuat instance-nya lebih dari sekali. Caranya dibahas di bagian selanjutnya tentang <a href="#ManagingTasks">Mengelola Tugas</a>.</p>
+
+
+<p>Untuk meringkas perilaku default aktivitas dan tugas:</p>
+
+<ul>
+ <li>Bila Aktivitas A memulai Aktivitas B, Aktivitas A dihentikan, namun sistem mempertahankan statusnya
+(seperti posisi gulir dan teks yang dimasukkan ke dalam formulir).
+Jika pengguna menekan tombol <em>Back</em> saat dalam Aktivitas B, Aktivitas A akan dilanjutkan dengan status
+yang dipulihkan.</li>
+ <li>Bila pengguna meninggalkan tugas dengan menekan tombol <em>Home</em> aktivitas saat ini akan
+dihentikan dan
+tugas beralih ke latar belakang. Sistem akan mempertahankan status setiap aktivitas dalam tugas. Jika
+nanti pengguna melanjutkan tugas dengan memilih ikon launcher yang memulai tugas, tugas tersebut akan
+beralih ke latar depan dan melanjutkan aktivitas di atas back-stack.</li>
+ <li>Jika pengguna menekan tombol <em>Back</em>, aktivitas saat ini akan dikeluarkan dari back-stack
+dan
+dimusnahkan. Aktivitas sebelumnya dalam back-stack akan dilanjutkan. Bila suatu aktivitas dimusnahkan, sistem
+<em>tidak akan</em>mempertahankan status aktivitas.</li>
+ <li>Aktivitas bisa dibuat instance-nya beberapa kali, bahkan dari tugas-tugas lainnya.</li>
+</ul>
+
+
+<div class="note design">
+<p><strong>Desain Navigasi</strong></p>
+ <p>Untuk mengetahui selengkapnya tentang cara kerja navigasi aplikasi di Android, baca panduan <a href="{@docRoot}design/patterns/navigation.html">Navigasi</a> Desain Android.</p>
+</div>
+
+
+<h2 id="ActivityState">Menyimpan Status Aktivitas</h2>
+
+<p>Seperti dibahas di atas, perilaku default sistem akan mempertahankan status aktivitas bila
+dihentikan. Dengan cara ini, bila pengguna mengarah kembali ke aktivitas sebelumnya, antarmuka pengguna akan muncul
+seperti saat ditinggalkan. Akan tetapi, Anda bisa—dan <strong>harus</strong>—secara proaktif mempertahankan
+status aktivitas menggunakan metode callback, jika aktivitas ini dimusnahkan dan harus
+dibuat kembali.</p>
+
+<p>Bila sistem menghentikan salah satu aktivitas (seperti saat aktivitas baru dimulai atau tugas
+dipindah ke latar belakang), sistem mungkin memusnahkan aktivitas sepenuhnya jika perlu memulihkan
+memori sistem. Bila hal ini terjadi, informasi tentang status aktivitas akan hilang. Jika hal ini terjadi, sistem
+masih
+mengetahui bahwa aktivitas memiliki tempat di back-stack, namun saat aktivitas tersebut dibawa ke bagian teratas
+back-stack, sistem harus membuatnya kembali (bukan melanjutkannya). Untuk
+menghindari hilangnya pekerjaan pengguna, Anda harus secara proaktif mempertahankannya dengan menerapkan metode callback
+{@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}
+dalam aktivitas.</p>
+
+<p>Untuk informasi selengkapnya tentang cara menyimpan status aktivitas Anda, lihat dokumen
+<a href="{@docRoot}guide/components/activities.html#SavingActivityState">Aktivitas</a>.</p>
+
+
+
+<h2 id="ManagingTasks">Mengelola Tugas</h2>
+
+<p>Cara Android mengelola tugas dan back-stack, seperti yang dijelaskan di atas—dengan menempatkan semua
+aktivitas yang dimulai secara berurutan dalam tugas yang sama dan dalam back-stack "masuk terakhir, keluar pertama"—berfungsi
+dengan baik untuk kebanyakan aplikasi dan Anda tidak perlu khawatir tentang cara mengaitkan aktivitas
+dengan tugas atau cara penempatannya di back-stack. Akan tetapi, Anda bisa memutuskan apakah ingin menyela
+perilaku normal. Mungkin Anda ingin agar suatu aktivitas dalam aplikasi untuk memulai tugas baru bila telah
+dimulai (sebagai ganti menempatkannya dalam tugas saat ini); atau, bila memulai aktivitas, Anda ingin
+memajukan instance yang ada (sebagai ganti membuat instance
+baru pada bagian teratas back-stack); atau, Anda ingin back-stack dihapus dari semua
+aktivitas selain untuk aktivitas akar bila pengguna meninggalkan tugas.</p>
+
+<p>Anda bisa melakukan semua ini dan lainnya, dengan atribut dalam elemen manifes
+<a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
+dan dengan flag pada intent yang Anda teruskan ke
+{@link android.app.Activity#startActivity startActivity()}.</p>
+
+<p>Dalam hal ini, atribut<a href="{@docRoot}guide/topics/manifest/activity-element.html">
+{@code <activity>}</a> utama yang bisa Anda gunakan adalah:</p>
+
+<ul class="nolist">
+ <li><a href="{@docRoot}guide/topics/manifest/activity-element.html#aff">
+ {@code taskAffinity}</a></li>
+ <li><a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">
+ {@code launchMode}</a></li>
+ <li><a href="{@docRoot}guide/topics/manifest/activity-element.html#reparent">
+ {@code allowTaskReparenting}</a></li>
+ <li><a href="{@docRoot}guide/topics/manifest/activity-element.html#clear">
+ {@code clearTaskOnLaunch}</a></li>
+ <li><a href="{@docRoot}guide/topics/manifest/activity-element.html#always">
+ {@code alwaysRetainTaskState}</a></li>
+ <li><a href="{@docRoot}guide/topics/manifest/activity-element.html#finish">
+ {@code finishOnTaskLaunch}</a></li>
+</ul>
+
+<p>Dan flag intent utama yang bisa Anda gunakan adalah:</p>
+
+<ul class="nolist">
+ <li>{@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK}</li>
+ <li>{@link android.content.Intent#FLAG_ACTIVITY_CLEAR_TOP}</li>
+ <li>{@link android.content.Intent#FLAG_ACTIVITY_SINGLE_TOP}</li>
+</ul>
+
+<p>Dalam bagian berikut, Anda akan melihat cara menggunakan beberapa atribut manifes ini dan flag
+intent untuk mendefinisikan cara mengaitkan aktivitas dengan tugas dan cara perilakunya di back-stack.</p>
+
+<p>Juga, pertimbangan cara menyatakan dan mengelola tugas dan aktivitas
+dibahas secara terpisah di layar ikhtisar. Lihat <a href="{@docRoot}guide/components/recents.html">Layar Ikhtisar</a>
+untuk informasi selengkapnya. Biasanya Anda harus mengizinkan sistem mendefinisikan cara menyatakan tugas dan
+aktivitas di layar ikhtisar, dan Anda tidak perlu memodifikasi perilaku ini.</p>
+
+<p class="caution"><strong>Perhatian:</strong> Kebanyakan aplikasi tidak harus menyela perilaku
+default untuk aktivitas dan tugas. Jika merasa bahwa aktivitas Anda perlu memodifikasi
+perilaku default, lakukan dengan hati-hati dan pastikan menguji kegunaan aktivitas selama
+dijalankan dan saat mengarahkan kembali ke sana dari aktivitas dan tugas lain dengan tombol <em>Back</em>.
+Pastikan menguji perilaku navigasi yang mungkin bertentangan dengan perilaku yang diharapkan pengguna.</p>
+
+
+<h3 id="TaskLaunchModes">Mendefinisikan mode peluncuran</h3>
+
+<p>Mode peluncuran memungkinkan Anda mendefinisikan cara mengaitkan instance baru dari suatu aktivitas dengan
+tugas saat ini. Anda bisa mendefinisikan beragam mode peluncuran dalam dua cara:</p>
+<ul class="nolist">
+ <li><a href="#ManifestForTasks">Menggunakan file manifes</a>
+ <p>Bila Anda mendeklarasikan aktivitas dalam file manifes, Anda bisa menetapkan cara mengaitkan aktivitas
+dengan tugas-tugas saat mulai.</li>
+ <li><a href="#IntentFlagsForTasks">Menggunakan flag intent</a>
+ <p>Saat memanggil{@link android.app.Activity#startActivity startActivity()},
+Anda bisa menyertakan flag dalam {@link android.content.Intent} yang menyatakan cara (atau
+apakah) aktivitas baru tersebut harus dikaitkan dengan tugas saat ini.</p></li>
+</ul>
+
+<p>Dengan demikian, jika Aktivitas A memulai Aktivitas B, Aktivitas B bisa mendefinisikan dalam manifesnya cara
+mengaitkan dengan tugas saat ini (jika sama sekali) dan Aktivitas A juga bisa meminta cara mengaitkan Aktivitas B
+dengan tugas saat ini. Jika kedua aktivitas mendefinisikan cara mengaitkan Aktivitas B
+dengan tugas, maka permintaan Aktivitas A (sebagaimana didefinisikan dalam intent) lebih dihargai daripada
+permintaan Aktivitas B (sebagaimana didefinisikan dalam manifesnya).</p>
+
+<p class="note"><strong>Catatan:</strong> Beberapa mode peluncuran yang tersedia untuk file manifes
+tidak tersedia sebagai flag untuk intent dan, juga, beberapa mode peluncuran yang tersedia sebagai flag
+untuk intent tidak bisa didefinisikan dalam manifest.</p>
+
+
+<h4 id="ManifestForTasks">Menggunakan file manifes</h4>
+
+<p>Saat mendeklarasikan aktivitas dalam file manifes, Anda bisa menetapkan cara mengaitkan aktivitas
+dengan tugas menggunakan <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>
+melalui atribut <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code
+launchMode}</a> elemen.</p>
+
+<p>Atribut <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code
+launchMode}</a> menetapkan instruksi tentang cara meluncurkan aktivitas
+ke dalam tugas. Ada empat macam mode peluncuran yang bisa Anda tetapkan ke atribut
+<code><a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">launchMode</a></code>
+:</p>
+
+<dl>
+<dt>{@code "standard"} (mode default)</dt>
+ <dd>Default. Sistem membuat instance baru aktivitas dalam tugas yang
+akan menjadi tempat memulainya dan mengarahkan intent ke sana. Aktivitas ini bisa dibuat instance-nya beberapa kali,
+masing-masing instance bisa dimiliki oleh tugas berbeda, dan satu tugas bisa memiliki beberapa instance.</dd>
+<dt>{@code "singleTop"}</dt>
+ <dd>Jika instance aktivitas sudah ada di bagian teratas tugas saat ini, sistem
+akan mengarahkan intent ke instance tersebut melalui panggilan ke metode {@link
+android.app.Activity#onNewIntent onNewIntent()}, bukan membuat instance baru dari
+aktivitas tersebut. Aktivitas bisa dibuat instance-nya beberapa kali, masing-masing instance bisa dimiliki
+oleh tugas berbeda, dan satu tugas bisa memiliki beberapa instance (namun hanya jika
+aktivitas di bagian teratas back-stack <em>bukan</em> instance yang ada dari aktivitas tersebut).
+ <p>Misalnya, anggaplah back-stack tugas terdiri dari aktivitas A akar dengan aktivitas B, C,
+dan D di bagian teratas (back-stack adalah A-B-C-D; D yang teratas). Intent masuk untuk aktivitas tipe D.
+Jika D memiliki mode peluncuran {@code "standard"} default, instance baru dari kelas ini akan diluncurkan dan
+back-stack menjadi A-B-C-D-D. Namun, jika mode peluncuran D adalah {@code "singleTop"}, instance
+yang ada dari D akan menerima intent melalui {@link
+android.app.Activity#onNewIntent onNewIntent()}, karena ada di bagian teratas back-stack—
+back-stack tetap A-B-C-D. Akan tetapi, jika intent masuk untuk aktivitas tipe B, maka
+instance B baru akan ditambahkan ke back-stack, sekalipun mode peluncuran adalah{@code "singleTop"}.</p>
+ <p class="note"><strong>Catatan:</strong> Bila instance dari aktivitas baru telah dibuat,
+pengguna bisa menekan tombol <em>Back</em> untuk kembali ke aktivitas sebelumnya. Namun bila instance
+yang ada dari
+aktivitas menangani intent baru, pengguna tidak bisa menekan tombol <em>Back</em> untuk kembali ke
+status
+aktivitas sebelum intent baru masuk di {@link android.app.Activity#onNewIntent
+onNewIntent()}.</p>
+</dd>
+
+<dt>{@code "singleTask"}</dt>
+ <dd>Sistem membuat tugas baru dan membuat instance aktivitas di akar tugas baru.
+Akan tetapi, jika instance aktivitas sudah ada dalam tugas terpisah, sistem akan mengarahkan
+intent ke instance yang ada melalui panggilan ke metode {@link
+android.app.Activity#onNewIntent onNewIntent()}, bukan membuat instance baru. Hanya
+boleh ada satu instance aktivitas untuk setiap kalinya.
+ <p class="note"><strong>Catatan:</strong> Meskipun aktivitas dimulai di tugas baru, tombol
+<em>Back</em> tetap akan mengembalikan pengguna ke aktivitas sebelumnya.</p></dd>
+<dt>{@code "singleInstance"}.</dt>
+ <dd>Sama seperti {@code "singleTask"}, namun sistem tidak meluncurkan aktivitas lain ke
+tugas yang menyimpan instance. Aktivitas selalu satu dan satu-satunya anggota dari tugasnya;
+aktivitas apa pun yang dimulai dengan ini akan dibuka di tugas yang terpisah.</dd>
+</dl>
+
+
+<p>Sebagai contoh lainnya, aplikasi Browser Android mendeklarasikan bahwa aktivitas browser web harus
+selalu dibuka dalam tugasnya sendiri—dengan menetapkan mode pembuka {@code singleTask} dalam elemen<a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>.
+Ini berarti bahwa jika aplikasi Anda mengeluarkan
+intent untuk membuka Browser Android, aktivitasnya <em>tidak</em> akan ditempatkan dalam tugas
+yang sama seperti aplikasi Anda. Sebagai gantinya, tugas baru akan dimulai untuk Browser atau, jika Browser
+sudah memiliki tugas yang berjalan di latar belakang, tugas tersebut akan dimajukan untuk menangani intent
+baru.</p>
+
+<p>Baik aktivitas dimulai dalam tugas baru atau maupun dalam tugas yang sama seperti aktivitas yang memulainya, tombol
+<em>Back</em> selalu membawa pengguna ke aktivitas sebelumnya. Akan tetapi, jika
+Anda memulai aktivitas yang menetapkan mode pembuka {@code singleTask}, maka jika instance
+aktivitas tersebut ada dalam tugas latar belakang, seluruh tugas tersebut akan dibawa ke latar depan. Pada titik
+ini, back-stack sekarang menyertakan semua aktivitas dari tugas yang dimajukan, di atas
+back-stack. Gambar 4 mengilustrasikan tipe skenario ini.</p>
+
+<img src="{@docRoot}images/fundamentals/diagram_backstack_singletask_multiactivity.png" alt="" />
+<p class="img-caption"><strong>Gambar 4.</strong> Representasi tentang cara aktivitas dengan
+mode pembuka "singleTask" ditambahkan ke back-stack. Jika aktivitas tersebut sudah menjadi bagian dari
+tugas latar belakang dengan back-stack sendiri, maka seluruh back-stack juga
+dimajukan, di atas tugas saat ini.</p>
+
+<p>Untuk informasi selengkapnya tentang menggunakan mode pembuka dalam file manifes, lihat dokumentasi elemen
+<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>
+, di mana atribut {@code launchMode} dan nilai-nilai yang diterima
+akan dibahas selengkapnya.</p>
+
+<p class="note"><strong>Catatan:</strong> Perilaku yang Anda tentukan untuk aktivitas dengan atribut <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a>
+bisa dikesampingkan dengan flag yang disertakan bersama intent yang memulai aktivitas Anda, seperti dibahas dalam
+bagian berikutnya.</p>
+
+
+
+<h4 id="#IntentFlagsForTasks">Menggunakan flag Intent</h4>
+
+<p>Saat memulai aktivitas, Anda bisa memodifikasi asosiasi default aktivitas pada tugasnya
+ dengan menyertakan flag dalam intent yang Anda kirimkan ke {@link
+android.app.Activity#startActivity startActivity()}. Flag yang bisa Anda gunakan untuk memodifikasi perilaku default
+adalah:</p>
+
+<p>
+ <dt>{@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK}</dt>
+ <dd>Memulai aktivitas dalam tugas baru. Jika tugas sudah dijalankan untuk aktivitas yang sekarang
+Anda mulai, tugas tersebut akan dibawa ke latar depan dengan status terakhir yang dipulihkan dan aktivitas
+akan menerima intent baru dalam {@link android.app.Activity#onNewIntent onNewIntent()}.
+ <p>Ini menghasilkan perilaku yang sama dengan nilai {@code "singleTask"} <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a>
+yang dibahas di bagian sebelumnya.</p></dd>
+ <dt>{@link android.content.Intent#FLAG_ACTIVITY_SINGLE_TOP}</dt>
+ <dd>Jika aktivitas yang dimulai adalah aktivitas saat ini (di bagian teratas back-stack), maka
+instance yang ada akan menerima panggilan ke {@link android.app.Activity#onNewIntent onNewIntent()}
+sebagai ganti membuat instance baru aktivitas.
+ <p>Ini menghasilkan perilaku yang sama dengan nilai {@code "singleTop"} <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a>
+yang dibahas di bagian sebelumnya.</p></dd>
+ <dt>{@link android.content.Intent#FLAG_ACTIVITY_CLEAR_TOP}</dt>
+ <dd>Jika aktivitas yang dimulai sudah berjalan dalam tugas saat ini, maka sebagai
+ganti meluncurkan instance baru aktivitas tersebut, semua kegiatan lain di atasnya akan
+dimusnahkan dan intent ini akan disampaikan ke instance aktivitas yang dilanjutkan (sekarang di atas),
+melalui {@link android.app.Activity#onNewIntent onNewIntent()}).
+ <p>Tidak ada nilai untuk atribut <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a>
+ yang menghasilkan perilaku ini.</p>
+ <p>{@code FLAG_ACTIVITY_CLEAR_TOP} paling sering digunakan bersama dengan
+ {@code FLAG_ACTIVITY_NEW_TASK}.
+Bila digunakan bersama-sama, flag ini adalah cara penempatan aktivitas yang ada
+dalam tugas lain dan meletakkannya dalam posisi yang memungkinkannya merespons intent. </p>
+ <p class="note"><strong>Catatan:</strong> Jika mode pembuka aktivitas yang didesain adalah
+{@code "standard"},
+ini juga akan dihapus dari back-stack dan instance baru akan diluncurkan di tempatnya untuk menangani
+intent yang masuk. Itu karena instance baru selalu dibuat untuk intent baru bila
+mode peluncuran adalah {@code "standard"}. </p>
+</dd>
+</dl>
+
+
+
+
+
+<h3 id="Affinities">Menangani afinitas</h3>
+
+<p><em>Afinitas</em> menunjukkan tugas mana yang disukai aktivitas untuk dimiliki. Secara default, semua
+aktivitas aplikasi yang sama memiliki afinitas untuk satu sama lain. Jadi, secara default, semua
+aktivitas dalam aplikasi yang sama lebih menyukai berada dalam tugas yang sama. Akan tetapi, Anda bisa memodifikasi
+afinitas default untuk suatu aktivitas. Aktivitas yang didefinisikan dalam
+aplikasi yang berbeda bisa berbagi afinitas, atau aktivitas yang didefinisikan dalam aplikasi yang sama bisa
+diberi afinitas tugas yang berbeda.</p>
+
+<p>Anda bisa memodifikasi afinitas untuk setiap yang diberikan
+dengan atribut <a href="{@docRoot}guide/topics/manifest/activity-element.html#aff">{@code taskAffinity}</a>
+elemen <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a>.</p>
+
+<p>Atribut <a href="{@docRoot}guide/topics/manifest/activity-element.html#aff">{@code taskAffinity}</a>
+mengambil nilai string, yang harus unik dari nama paket default
+yang dideklarasikan dalam elemen <a href="{@docRoot}guide/topics/manifest/manifest-element.html">
+{@code <manifest>}
+</a>, karena sistem menggunakan nama untuk mengidentifikasi afinitas
+tugas default untuk aplikasi.</p>
+
+<p>Afinitas berperan dalam dua keadaan:</p>
+<ul>
+ <li>Bila intent yang meluncurkan aktivitas berisi flag
+ {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK}
+.
+
+<p>Aktivitas baru, secara default, diluncurkan ke dalam tugas aktivitas
+yang disebut {@link android.app.Activity#startActivity startActivity()}. Ini didorong ke back-stack
+yang sama seperti caller. Akan tetapi, jika intent yang diteruskan ke
+{@link android.app.Activity#startActivity startActivity()}
+berisi flag {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK}
+, maka sistem akan mencari tugas yang berbeda untuk menampung aktivitas baru. Sering kali, itu adalah tugas baru.
+Akan tetapi, tidak harus demikian. Jika sudah ada tugas lama dengan afinitas yang sama seperti
+aktivitas baru, aktivitas ini akan diluncurkan ke dalam tugas tersebut. Jika tidak, tugas baru akan dimulai.</p>
+
+<p>Jika flag ini menyebabkan aktivitas memulai tugas baru dan pengguna menekan tombol <em>Home</em>
+untuk meninggalkannya,
+harus ada cara bagi pengguna untuk mengarahkan kembali ke tugas. Beberapa entitas (seperti
+notification manager) selalu memulai aktivitas dalam tugas eksternal, tidak pernah sebagai bagian dari miliknya sendiri, jadi
+selalu menempatkan {@code FLAG_ACTIVITY_NEW_TASK} dalam intent yang diteruskan ke
+{@link android.app.Activity#startActivity startActivity()}.
+Jika Anda memiliki aktivitas yang bisa dipanggil melalui
+entitas eksternal yang mungkin menggunakan flag ini, hati-hatilah karena pengguna memiliki cara independen untuk kembali
+ke tugas yang telah dimulai, seperti dengan ikon launcher (aktivitas akar dari tugas
+memiliki filter intent {@link android.content.Intent#CATEGORY_LAUNCHER}; lihat bagian <a href="#Starting">Memulai tugas</a> di bawah ini).</p>
+</li>
+
+ <li>Bila aktivitas memiliki atribut <a href="{@docRoot}guide/topics/manifest/activity-element.html#reparent">
+{@code allowTaskReparenting}</a> sendiri yang diatur ke {@code "true"}.
+ <p>Dalam hal ini, aktivitas bisa berpindah dari tugas yang dimulainya ke tugas yang afinitasnya
+dimilikinya, bila tugas tersebut di bawa ke latar depan.</p>
+ <p>Misalnya, anggaplah sebuah aktivitas melaporkan kondisi cuaca di sejumlah kota terpilih
+yang didefinisikan sebagai bagian dari aplikasi perjalanan. Aktivitas memiliki afinitas yang sama dengan aktivitas lain dalam aplikasi
+yang sama (afinitas aplikasi default) dan aktivitas ini memungkinkan re-parenting dengan atribut ini.
+Bila salah satu aktivitas Anda memulai aktivitas laporan cuaca, awalnya aktivitas ini dimiliki oleh tugas
+yang sama dengan aktivitas Anda. Akan tetapi, bila tugas aplikasi perjalanan di bawa ke latar depan,
+aktivitas laporan cuaca akan ditetapkan kembali ke tugas itu dan ditampilkan di dalamnya.</p>
+</li>
+</ul>
+
+<p class="note"><strong>Tip:</strong> Jika file {@code .apk} berisi lebih dari satu "aplikasi"
+dari sudut pandang pengguna, Anda mungkin perlu menggunakan atribut <a href="{@docRoot}guide/topics/manifest/activity-element.html#aff">{@code taskAffinity}</a>
+ untuk menetapkan afinitas berbeda pada aktivitas yang terkait dengan setiap "aplikasi".</p>
+
+
+
+<h3 id="Clearing">Menghapus back-stack</h3>
+
+<p>Jika pengguna meninggalkan tugas dalam waktu yang lama, sistem akan menghapus tugas semua aktivitas kecuali
+aktivitas akar. Bila pengguna kembali ke tugas itu lagi, hanya aktivitas akar yang akan dipulihkan.
+Sistem berperilaku seperti ini, karena, setelah sekian waktu, pengguna mungkin telah mengabaikan
+apa yang mereka kerjakan sebelum dan kembali ke tugas itu untuk memulai sesuatu yang baru. </p>
+
+<p>Ada beberapa atribut aktivitas yang bisa Anda gunakan untuk memodifikasi perilaku ini: </p>
+
+<dl>
+<dt><code><a
+href="{@docRoot}guide/topics/manifest/activity-element.html#always">alwaysRetainTaskState</a></code>
+</dt>
+<dd>Jika atribut ini ditetapkan ke {@code "true"} dalam aktivitas akar tugas,
+perilaku default yang baru dijelaskan tidak akan terjadi.
+ Tugas akan mempertahankan semua aktivitas dalam back-stack bahkan setelah sekian lama.</dd>
+
+<dt><code><a
+href="{@docRoot}guide/topics/manifest/activity-element.html#clear">clearTaskOnLaunch</a></code></dt>
+<dd>Jika atribut ini diatur ke {@code "true"} dalam aktivitas akar tugas, back-
+stack akan dihapus hingga aktivitas akar bila pengguna meninggalkan tugas
+dan kembali lagi. Dengan kata lain, ini adalah lawan dari
+<a href="{@docRoot}guide/topics/manifest/activity-element.html#always">
+{@code alwaysRetainTaskState}</a>. Pengguna selalu kembali ke tugas dengan
+status awalnya, walaupun hanya sebentar meninggalkan tugas.</dd>
+
+<dt><code><a
+href="{@docRoot}guide/topics/manifest/activity-element.html#finish">finishOnTaskLaunch</a></code>
+</dt>
+<dd>Atribut ini seperti <a href="{@docRoot}guide/topics/manifest/activity-element.html#clear">{@code clearTaskOnLaunch}</a>,
+namun beroperasi pada
+satu aktivitas, bukan pada seluruh tugas. Hal ini juga bisa menyebabkan aktivitas
+hilang, termasuk aktivitas akar. Bila ini diatur ke {@code "true"},
+aktivitas akan tetap menjadi bagian dari tugas hanya untuk sesi saat ini. Jika pengguna
+keluar dan kemudian kembali ke tugas tersebut, tugas tidak akan ada lagi.</dd>
+</dl>
+
+
+
+
+<h3 id="Starting">Memulai tugas</h3>
+
+<p>Anda bisa mengatur aktivitas sebagai titik masuk untuk tugas dengan memberikan filter intent dengan
+{@code "android.intent.action.MAIN"} sebagai tindakan yang ditetapkan dan
+{@code "android.intent.category.LAUNCHER"}
+sebagai kategori yang ditetapkan. Misalnya:</p>
+
+<pre>
+<activity ... >
+ <intent-filter ... >
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ ...
+</activity>
+</pre>
+
+<p>Filter intent semacam ini akan menyebabkan ikon dan label untuk
+aktivitas ditampilkan dalam launcher aplikasi, yang akan memberi cara kepada pengguna untuk meluncurkan aktivitas dan
+kembali ke tugas yang dibuatnya kapan saja setelah ia telah diluncurkan.
+</p>
+
+<p>Kemampuan kedua ini penting: Pengguna harus bisa meninggalkan tugas dan kemudian kembali ke tugas tersebut
+nanti dengan menggunakan launcher aktivitas ini. Karena itu, kedua <a href="#LaunchModes">mode
+pembuka</a> yang menandai aktivitas selalu memulai tugas, {@code "singleTask"} dan
+{@code "singleInstance"}, hanya boleh digunakan bila aktivitas memiliki filter
+{@link android.content.Intent#ACTION_MAIN}
+dan {@link android.content.Intent#CATEGORY_LAUNCHER}. Bayangkan, misalnya, apa yang akan
+terjadi jika filter tidak ada: Intent meluncurkan aktivitas{@code "singleTask"}, memulai
+tugas yang baru, dan pengguna menghabiskan lebih banyak waktu mengerjakan tugas tersebut. Pengguna kemudian menekan tombol
+<em>Home</em>. Tugas kini dikirim ke latar belakang dan tidak terlihat. Sekarang pengguna tidak memiliki cara untuk kembali
+ke tugas tersebut, karena tidak dinyatakan dalam launcher aplikasi.</p>
+
+<p>Untuk kasus-kasus di mana Anda tidak ingin pengguna bisa kembali ke aktivitas, atur dalam
+<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>
+ pada
+<a href="{@docRoot}guide/topics/manifest/activity-element.html#finish">{@code finishOnTaskLaunch}</a>
+elemen ke {@code "true"} (lihat <a href="#Clearing">Menghapus back-stack</a>).</p>
+
+<p>Informasi lebih jauh tentang cara menyatakan dan mengelola tugas dan aktivitas dalam
+layar ikhtisar tersedia dalam<a href="{@docRoot}guide/components/recents.html">
+Layar Ikhtisar</a>.</p>
+
+<!--
+<h2>Beginner's Path</h2>
+
+<p>For more information about how to use intents to
+activate other application components and publish the intents to which your components
+respond, continue with the <b><a
+href="{@docRoot}guide/components/intents-filters.html">Intents and Intent
+Filters</a></b> document.</p>
+-->
diff --git a/docs/html-intl/intl/id/guide/index.jd b/docs/html-intl/intl/id/guide/index.jd
new file mode 100644
index 0000000..f24fab6
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/index.jd
@@ -0,0 +1,74 @@
+page.title=Pengantar Android
+
+@jd:body
+
+
+<div class="sidebox" style="width:220px"><!-- width to match col-4 below -->
+<p>Untuk mempelajari cara kerja aplikasi, mulailah dengan
+<a href="{@docRoot}guide/components/fundamentals.html">Dasar-Dasar Aplikasi</a>.</p>
+<p>Untuk langsung memulai pemrograman, bacalah <a href="{@docRoot}training/basics/firstapp/index.html">Membangun Aplikasi Pertama Anda.</a></p>
+</div>
+
+<p>Android menyediakan kerangka kerja aplikasi yang kaya dan memungkinkan Anda membangun aplikasi dan permainan
+inovatif untuk perangkat seluler di lingkungan bahasa pemrograman Java. Dokumen yang tercantum di navigasi
+sebelah kiri menyediakan detail tentang cara membangun aplikasi menggunakan berbagai API Android.</p>
+
+<p>Jika Anda masih baru dengan pengembangan Android, Anda perlu memahami
+konsep dasar berikut mengenai kerangka kerja aplikasi Android:</p>
+
+
+<div class="landing-banner">
+
+<div class="col-6">
+
+<h4>Aplikasi menyediakan beberapa titik masuk</h4>
+
+<p>Aplikasi Android dibangun sebagai kombinasi beragam komponen yang bisa dipanggil
+satu per satu. Misalnya, satu <em>aktivitas</em> individual menyediakan satu
+layar untuk antarmuka pengguna, dan <em>layanan</em> yang secara terpisah melakukan
+tugas di latar belakang.</p>
+
+<p>Dari satu komponen Anda dapat memulai komponen lainnya menggunakan <em>intent</em>. Anda bahkan dapat memulai
+satu komponen dalam aplikasi berbeda, seperti aktivitas dalam aplikasi peta untuk menampilkan alamat. Model ini
+menyediakan beberapa titik masuk untuk aplikasi tunggal dan memungkinkan setiap aplikasi untuk berfungsi sebagai "default"
+pengguna bagi tindakan yang dapat dipanggil aplikasi lain.</p>
+
+
+<p><b>Ketahui selengkapnya:</b></p>
+<ul class="nolist">
+<li><a href="{@docRoot}guide/components/fundamentals.html">Dasar-Dasar Aplikasi</a>
+<li><a href="{@docRoot}guide/components/intents-filters.html">Intent dan Filter Intent</a>
+<li><a href="{@docRoot}guide/components/activities.html">Aktivitas</a>
+</ul>
+
+</div>
+
+
+<div class="col-6">
+
+<h4>Aplikasi beradaptasi dengan perangkat berbeda</h4>
+
+<p>Android menyediakan kerangka kerja aplikasi adaptif yang memungkinkan Anda menyediakan sumber daya unik
+bagi konfigurasi perangkat yang berbeda-beda. Misalnya, Anda bisa membuat berbagai file layout
+XML untuk ukuran layar yang berbeda-beda dan sistem akan menentukan
+layout yang akan diterapkan berdasarkan ukuran layar perangkat yang ada saat ini.</p>
+
+<p>Anda dapat melakukan query ketersediaan fitur perangkat saat dijalankan (runtime) jika ada fitur aplikasi yang memerlukan
+perangkat keras spesifik seperti kamera. Jika diperlukan, Anda juga bisa mendeklarasikan fitur yang dibutuhkan aplikasi
+agar pasar aplikasi seperti Google Play Store tidak mengizinkan instalasi pada perangkat yang tidak
+mendukung fitur itu.</p>
+
+
+<p><b>Ketahui selengkapnya:</b></p>
+<ul class="nolist">
+<li><a href="{@docRoot}guide/practices/compatibility.html">Kompatibilitas Perangkat</a>
+<li><a href="{@docRoot}guide/topics/resources/overview.html">Ikhtisar Sumber Daya</a>
+<li><a href="{@docRoot}guide/topics/ui/overview.html">Ikhtisar Antarmuka Pengguna</a>
+</ul>
+
+</div>
+
+</div><!-- end landing-banner -->
+
+
+
diff --git a/docs/html-intl/intl/in/preview/j8-jack.jd b/docs/html-intl/intl/id/guide/platform/j8-jack.jd
similarity index 100%
copy from docs/html-intl/intl/in/preview/j8-jack.jd
copy to docs/html-intl/intl/id/guide/platform/j8-jack.jd
diff --git a/docs/html-intl/intl/id/guide/topics/manifest/manifest-intro.jd b/docs/html-intl/intl/id/guide/topics/manifest/manifest-intro.jd
new file mode 100644
index 0000000..050abf4
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/topics/manifest/manifest-intro.jd
@@ -0,0 +1,517 @@
+page.title=Manifes Aplikasi
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>Dalam dokumen ini</h2>
+<ol>
+<li><a href="#filestruct">Struktur File Manifes</a></li>
+<li><a href="#filec">Konvensi File</a>
+<li><a href="#filef">Fitur File</a>
+ <ol>
+ <li><a href="#ifs">Filter Intent</a></li>
+ <li><a href="#iconlabel">Ikon dan Label</a></li>
+ <li><a href="#perms">Izin</a></li>
+ <li><a href="#libs">Pustaka</a></li>
+ </ol></li>
+</ol>
+</div>
+</div>
+
+<p>
+ Setiap aplikasi harus memiliki file AndroidManifest.xml (bernama persis seperti ini) di direktori akar.
+ <span itemprop="description">File manifes
+ menyediakan informasi penting tentang aplikasi ke sistem Android,
+ informasi yang harus dimiliki sistem agar bisa menjalankan setiap kode
+aplikasi.</span> Di antaranya, manifes melakukan hal berikut ini:
+</p>
+
+<ul>
+<li>Menamai paket Java untuk aplikasi.
+Nama paket berfungsi sebagai identifier unik untuk aplikasi.</li>
+
+<li>Menjelaskan berbagai komponen aplikasi—aktivitas,
+ layanan, penerima siaran, dan penyedia konten
+yang membentuk aplikasi. Menamai kelas yang mengimplementasikan setiap komponen dan
+mempublikasikan kemampuannya (misalnya, pesan {@link android.content.Intent
+Intent} mana yang bisa ditanganinya). Deklarasi ini memberi tahu sistem Android mengenai
+komponennya dan dalam kondisi apa bisa diluncurkan.</li>
+
+<li>Menentukan proses yang akan menjadi host komponen aplikasi.</li>
+
+<li>Mendeklarasikan izin aplikasi mana yang harus dimiliki untuk
+mengakses bagian yang dilindungi pada API dan berinteraksi dengan aplikasi lain.</li>
+
+<li>Juga mendeklarasikan izin lain yang harus dimiliki untuk
+untuk berinteraksi dengan komponen aplikasi.</li>
+
+<li>Mencantumkan daftar kelas {@link android.app.Instrumentation} yang memberikan
+profil dan informasi lain saat aplikasi berjalan. Deklarasi ini
+hanya ada di manifes saat aplikasi dibuat dan diuji;
+ deklarasi dihapus sebelum aplikasi dipublikasikan.</li>
+
+<li>Mendeklarasikan tingkat minimum API Android yang diperlukan
+aplikasi.</li>
+
+<li>Mencantumkan daftar pustaka yang harus ditautkan aplikasi.</li>
+</ul>
+
+
+<h2 id="filestruct">Struktur File Manifes</h2>
+
+<p>
+Diagram di bawah ini menampilkan struktur umum file manifes dan setiap
+elemen yang bisa ditampungnya. Setiap elemen, bersama
+atributnya, didokumentasikan secara lengkap dalam file terpisah. Untuk melihat
+informasi terperinci tentang setiap elemen, klik nama elemen dalam diagram,
+dalam daftar abjad elemen yang mengikuti diagram, atau penyebutan nama
+elemen lainnya.
+</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+
+<a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a>
+
+ <a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission /></a>
+ <a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission /></a>
+ <a href="{@docRoot}guide/topics/manifest/permission-tree-element.html"><permission-tree /></a>
+ <a href="{@docRoot}guide/topics/manifest/permission-group-element.html"><permission-group /></a>
+ <a href="{@docRoot}guide/topics/manifest/instrumentation-element.html"><instrumentation /></a>
+ <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><uses-sdk /></a>
+ <a href="{@docRoot}guide/topics/manifest/uses-configuration-element.html"><uses-configuration /></a> <!-- ##api level 3## -->
+ <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><uses-feature /></a> <!-- ##api level 4## -->
+ <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><supports-screens /></a> <!-- ##api level 4## -->
+ <a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html"><compatible-screens /></a> <!-- ##api level 9## -->
+ <a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html"><supports-gl-texture /></a> <!-- ##api level 11## -->
+
+ <a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a>
+
+ <a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a>
+ <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a>
+ <a href="{@docRoot}guide/topics/manifest/action-element.html"><action /></a>
+ <a href="{@docRoot}guide/topics/manifest/category-element.html"><category /></a>
+ <a href="{@docRoot}guide/topics/manifest/data-element.html"><data /></a>
+ <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"></intent-filter></a>
+ <a href="{@docRoot}guide/topics/manifest/meta-data-element.html"><meta-data /></a>
+ <a href="{@docRoot}guide/topics/manifest/activity-element.html"></activity></a>
+
+ <a href="{@docRoot}guide/topics/manifest/activity-alias-element.html"><activity-alias></a>
+ <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a> . . . <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"></intent-filter></a>
+ <a href="{@docRoot}guide/topics/manifest/meta-data-element.html"><meta-data /></a>
+ <a href="{@docRoot}guide/topics/manifest/activity-alias-element.html"></activity-alias></a>
+
+ <a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a>
+ <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a> . . . <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"></intent-filter></a>
+ <a href="{@docRoot}guide/topics/manifest/meta-data-element.html"><meta-data/></a>
+ <a href="{@docRoot}guide/topics/manifest/service-element.html"></service></a>
+
+ <a href="{@docRoot}guide/topics/manifest/receiver-element.html"><receiver></a>
+ <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a> . . . <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"></intent-filter></a>
+ <a href="{@docRoot}guide/topics/manifest/meta-data-element.html"><meta-data /></a>
+ <a href="{@docRoot}guide/topics/manifest/receiver-element.html"></receiver></a>
+
+ <a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a>
+ <a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html"><grant-uri-permission /></a>
+ <a href="{@docRoot}guide/topics/manifest/meta-data-element.html"><meta-data /></a>
+ <a href="{@docRoot}guide/topics/manifest/path-permission-element.html"><path-permission /></a>
+ <a href="{@docRoot}guide/topics/manifest/provider-element.html"></provider></a>
+
+ <a href="{@docRoot}guide/topics/manifest/uses-library-element.html"><uses-library /></a>
+
+ <a href="{@docRoot}guide/topics/manifest/application-element.html"></application></a>
+
+<a href="{@docRoot}guide/topics/manifest/manifest-element.html"></manifest></a>
+</pre>
+
+<p>
+Semua elemen yang bisa muncul dalam file manifes tercantum di bawah ini
+dalam urutan abjad. Ini adalah satu-satunya elemen legal; Anda tidak bisa
+menambahkan elemen atau atribut sendiri.
+</p>
+
+<p style="margin-left: 2em">
+<code><a href="{@docRoot}guide/topics/manifest/action-element.html"><action></a></code>
+<br/><code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>
+<br/><code><a href="{@docRoot}guide/topics/manifest/activity-alias-element.html"><activity-alias></a></code>
+<br/><code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>
+<br/><code><a href="{@docRoot}guide/topics/manifest/category-element.html"><category></a></code>
+<br/><code><a href="{@docRoot}guide/topics/manifest/data-element.html"><data></a></code>
+<br/><code><a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html"><grant-uri-permission></a></code>
+<br/><code><a href="{@docRoot}guide/topics/manifest/instrumentation-element.html"><instrumentation></a></code>
+<br/><code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code>
+<br/><code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code>
+<br/><code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html"><meta-data></a></code>
+<br/><code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
+<br/><code><a href="{@docRoot}guide/topics/manifest/permission-group-element.html"><permission-group></a></code>
+<br/><code><a href="{@docRoot}guide/topics/manifest/permission-tree-element.html"><permission-tree></a></code>
+<br/><code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code>
+<br/><code><a href="{@docRoot}guide/topics/manifest/receiver-element.html"><receiver></a></code>
+<br/><code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code>
+<br/><code><a href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><supports-screens></a></code> <!-- ##api level 4## -->
+<br/><code><a href="{@docRoot}guide/topics/manifest/uses-configuration-element.html"><uses-configuration></a></code> <!-- ##api level 3## -->
+<br/><code><a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><uses-feature></a></code> <!-- ##api level 4## -->
+<br/><code><a href="{@docRoot}guide/topics/manifest/uses-library-element.html"><uses-library></a></code>
+<br/><code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>
+<br/><code><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><uses-sdk></a></code>
+</p>
+
+
+
+
+<h2 id="filec">Konvensi File</h2>
+
+<p>
+Sebagian konvensi dan aturan berlaku secara umum untuk semua elemen
+dan atribut di manifes:
+</p>
+
+<dl>
+<dt><b>Elemen</b></dt>
+<dd>Hanya elemen
+<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> dan
+<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>
+yang diwajibkan, masing-masing harus ada dan hanya boleh terjadi sekali.
+Umumnya elemen lain bisa terjadi berkali-kali atau sama sekali tidak terjadi — meskipun
+setidaknya sebagian dari elemen itu harus ada untuk agar manifes mencapai sesuatu yang
+berarti.
+
+<p>
+Jika elemen tidak berisi apa pun, berarti elemen itu berisi elemen lain.
+Semua nilai diatur melalui atribut, bukan sebagai data karakter dalam elemen.
+</p>
+
+<p>
+Elemen yang sama tingkatan umumnya tidak diurutkan. Misalnya, elemen
+<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>,
+<code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code>, dan
+<code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code>
+bisa dicampur dalam urutan apa pun. (Elemen
+<code><a href="{@docRoot}guide/topics/manifest/activity-alias-element.html"><activity-alias></a></code>
+ merupakan eksepsi untuk aturan ini: Elemen ini harus mengikuti
+<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>
+ini aliasnya.)
+</p></dd>
+
+<dt><b>Atribut</b></dt>
+<dd>Secara formal, semua atribut opsional. Akan tetapi, ada sebagian
+yang harus ditetapkan agar elemen bisa mencapai tujuannya. Gunakan
+dokumentasi sebagai panduan. Bagi atribut yang benar-benar opsional, ini menyebutkan
+nilai default atau menyatakan apa yang terjadi jika tidak ada spesifikasi.
+
+<p>Selain untuk beberapa atribut elemen akar
+<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code>,
+ semua nama atribut dimulai dengan awalan {@code android:} —
+misalnya, {@code android:alwaysRetainTaskState}. Karena awalan ini universal, dokumentasi umumnya meniadakannya saat mengacu atribut
+dengan nama.
+</p></dd>
+
+<dt><b>Mendeklarasikan nama kelas</b></dt>
+<dd>Banyak elemen berhubungan dengan objek Java, termasuk elemen
+aplikasi itu sendiri (elemen
+<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>
+) dan aktivitas komponen — utamanya
+(<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>),
+layanan
+(<code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code>),
+penerima siaran
+(<code><a href="{@docRoot}guide/topics/manifest/receiver-element.html"><receiver></a></code>),
+dan penyedia konten
+(<code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code>).
+
+<p>
+Jika mendefinisikan subkelas, seperti yang selalu Anda definisikan untuk kelas komponen
+({@link android.app.Activity}, {@link android.app.Service},
+{@link android.content.BroadcastReceiver}, dan {@link android.content.ContentProvider}),
+subkelas dideklarasikan melalui atribut {@code name}. Nama harus menyertakan tujuan
+paket lengkap.
+Misalnya, subkelas {@link android.app.Service} mungkin dideklarasikan sebagai berikut:
+</p>
+
+<pre><manifest . . . >
+ <application . . . >
+ <service android:name="com.example.project.SecretService" . . . >
+ . . .
+ </service>
+ . . .
+ </application>
+</manifest></pre>
+
+<p>
+Akan tetapi, sebagai shorthand, jika karakter pertama string adalah titik,
+string akan ditambahkan ke nama paket aplikasi (seperti yang ditetapkan dalam elemen
+<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code>
+ melalui atribut
+<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html#package">package</a></code>
+). Penetapan berikut sama dengan di atas:
+</p>
+
+<pre><manifest package="com.example.project" . . . >
+ <application . . . >
+ <service android:name=".SecretService" . . . >
+ . . .
+ </service>
+ . . .
+ </application>
+</manifest></pre>
+
+<p>
+Saat memulai komponen, Android akan membuat instance subkelas yang diberi nama.
+Jika subkelas tidak ditetapkan, maka akak dibuat instance kelas dasar.
+</p></dd>
+
+<dt><b>Banyak nilai</b></dt>
+<dd>Jika lebih dari satu nilai yang dapat ditetapkan, elemen ini hampir selalu
+diulangi, bukan menampilkan daftar banyak nilai dalam satu elemen.
+Misalnya, filter intent dapat mencantumkan beberapa tindakan:
+
+<pre><intent-filter . . . >
+ <action android:name="android.intent.action.EDIT" />
+ <action android:name="android.intent.action.INSERT" />
+ <action android:name="android.intent.action.DELETE" />
+ . . .
+</intent-filter></pre></dd>
+
+<dt><b>Nilai sumber daya</b></dt>
+<dd>Beberapa atribut memiliki nilai yang bisa ditampilkan kepada pengguna — misalnya
+, label dan ikon aktivitas. Nilai atribut ini
+harus dilokalkan dan karenanya ditetapkan dari sumber daya atau tema. Nilai sumber
+daya dinyatakan dalam format berikut,</p>
+
+<p style="margin-left: 2em">{@code @[<i>package</i>:]<i>type</i>:<i>name</i>}</p>
+
+<p>
+dalam hal ini nama <i>package</i> boleh dihilangkan jika sumber daya ada dalam paket yang sama dengan
+dengan aplikasi, <i>type</i> adalah tipe sumber daya — seperti "string" atau
+"drawable" — dan <i>name</i> adalah nama yang mengidentifikasi sumber daya tertentu.
+Misalnya:
+</p>
+
+<pre><activity android:icon="@drawable/smallPic" . . . ></pre>
+
+<p>
+Nilai tema diekspresikan dengan cara yang sama, namun dengan awal '{@code ?}'
+dan bukan '{@code @}':
+</p>
+
+<p style="margin-left: 2em">{@code ?[<i>package</i>:]<i>type</i>:<i>name</i>}
+</p></dd>
+
+<dt><b>Nilai-nilai string</b></dt>
+<dd>Bila nilai atribut adalah string, dua garis miring kiri ('{@code \\}')
+harus digunakan untuk meninggalkan karakter — misalnya, '{@code \\n}' untuk
+baris baru atau '{@code \\uxxxx}' untuk karakter Unicode.</dd>
+</dl>
+
+
+<h2 id="filef">Fitur File</h2>
+
+<p>
+Bagian berikut menjelaskan cara menerapkan sebagian fitur Android
+dalam file manifest.
+</p>
+
+
+<h3 id="ifs">Filter Intent</h3>
+
+<p>
+Komponen inti dari aplikasi (aktivitasnya, layanannya, dan penerima
+siaran) diaktifkan oleh <i>intent</i>. Intent adalah
+sekumpulan informasi (objek {@link android.content.Intent}) yang menjelaskan
+tindakan yang diinginkan — termasuk data yang akan ditindaklanjuti, kategori
+komponen yang harus melakukan tindakan, dan petunjuk terkait lainnya.
+Android mencari komponen yang sesuai untuk merespons intent, meluncurkan
+instance komponen baru jika diperlukan, dan meneruskannya ke
+objek Intent.
+</p>
+
+<p>
+Komponen mengiklankan kemampuannya — jenis intent yang bisa diresponsnya
+ — melalui <i>filter intent</i>. Karena sistem Android
+harus mempelajari intent yang dapat ditangani komponen sebelum meluncurkan komponen,
+filter intent ditetapkan dalam manifes sebagai elemen
+<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code>
+. Sebuah komponen dapat memiliki filter dalam jumlah berapa saja, masing-masing menjelaskan
+kemampuan yang berbeda.
+</p>
+
+<p>
+Intent yang secara eksplisit menamai komponen target akan mengaktifkan komponen itu;
+filter tidak berperan. Namun intent yang tidak menetapkan target
+dengan nama dapat mengaktifkan komponen hanya jika dapat melewati salah satu filter
+komponen.
+</p>
+
+<p>
+Untuk informasi tentang cara objek Intent diuji terhadap filter intent,
+lihat dokumen terpisah,
+<a href="{@docRoot}guide/components/intents-filters.html">Intent
+dan Filter Intent</a>.
+</p>
+
+
+<h3 id="iconlabel">Ikon dan Label</h3>
+
+<p>
+Sejumlah elemen memiliki atribut {@code icon} dan {@code label} untuk
+ikon kecil dan label teks yang bisa ditampilkan kepada pengguna. Sebagian ada juga yang memiliki atribut
+{@code description}untuk teks penjelasan yang lebih panjang yang juga bisa
+ditampilkan pada layar. Misalnya, elemen
+<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
+ memiliki ketiga atribut ini, jadi saat pengguna ditanya apakah akan
+memberi izin bagi aplikasi yang memintanya, ikon yang mewakili
+izin, nama izin, dan keterangan yang
+mengikutinya bisa ditampilkan kepada pengguna.
+</p>
+
+<p>
+Dalam setiap kasus, ikon dan label yang ditetapkan dalam elemen yang memuatnya menjadi
+{@code icon} default dan pengaturan {@code label} untuk semua subelemen kontainer ini.
+Karena itu, ikon dan label yang ditetapkan dalam elemen
+<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>
+adalah ikon dan label default untuk setiap komponen aplikasi.
+Demikian pula, ikon dan label yang ditetapkan untuk komponen — misalnya, elemen
+<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>
+— adalah pengaturan default untuk setiap elemen komponen
+<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code>
+. Jika elemen
+<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>
+menetapkan label, namun suatu aktivitas dan filter intent-nya tidak menetapkan label,
+maka label aplikasi akan dianggap sama-sama sebagai label aktvitas dan
+filter intent.
+</p>
+
+<p>
+Ikon dan label yang ditetapkan untuk filter intent digunakan untuk mewakili komponen
+kapan saja komponen ditampilkan kepada pengguna saat memenuhi fungsi yang
+diiklankan oleh filter. Misalnya, filter dengan pengaturan
+"{@code android.intent.action.MAIN}" dan
+"{@code android.intent.category.LAUNCHER}" mengiklankan aktivitas
+sebagai aktivitas yang memulai aplikasi—, yaitu
+sebagai salah satu aktivitas yang harus ditampilkan dalam launcher aplikasi. Ikon dan label yang
+diatur dalam filter karenanya adalah ikon dan label yang ditampilkan dalam launcher.
+</p>
+
+
+<h3 id="perms">Izin</h3>
+
+<p>
+Sebuah <i>izin</i> adalah pembatasan yang membatasi akses ke bagian
+kode atau ke data pada perangkat. Pembatasan diberlakukan untuk melindungi data dan kode
+penting yang bisa disalahgunakan untuk mengganggu atau merusak pengalaman pengguna.
+</p>
+
+<p>
+Setiap izin diidentifikasi melalui label yang unik. Sering kali, label menunjukkan
+tindakan yang dibatasi. Misalnya, berikut ini adalah beberapa izin yang didefinisikan
+oleh Android:
+</p>
+
+<p style="margin-left: 2em">{@code android.permission.CALL_EMERGENCY_NUMBERS}
+<br/>{@code android.permission.READ_OWNER_DATA}
+<br/>{@code android.permission.SET_WALLPAPER}
+<br/>{@code android.permission.DEVICE_POWER}</p>
+
+<p>
+Sebuah fitur bisa dilindungi paling banyak oleh satu izin.
+</p>
+
+<p>
+Jika aplikasi memerlukan akses ke fitur yang dilindungi oleh izin,
+aplikasi harus mendeklarasikan bahwa aplikasi memerlukan izin itu dengan elemen
+<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>
+ dalam manifes. Kemudian, bila aplikasi telah diinstal pada
+perangkat, installer akan menentukan apakah izin yang diminta akan diberikan atau tidak
+dengan memeriksa otoritas yang menandatangani
+sertifikat aplikasi dan, dalam beberapa kasus, bertanya pada pengguna.
+Jika izin diberikan, aplikasi tersebut bisa menggunakan
+fitur yang dilindungi. Jika tidak, upaya aplikasi untuk mengakses fitur tersebut akan gagal
+tanpa ada pemberitahuan apa pun kepada pengguna.
+</p>
+
+<p>
+Aplikasi juga bisa melindungi komponennya sendiri (aktivitas, layanan,
+penerima siaran, dan penyedia konten) dengan izin. Aplikasi bisa menerapkan
+izin mana pun yang didefinisikan oleh Android (tercantum dalam
+{@link android.Manifest.permission android.Manifest.permission}) atau dideklarasikan
+oleh aplikasi lain. Atau aplikasi bisa mendefinisikannya sendiri. Izin baru dideklarasikan
+dengan elemen
+<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
+. Misalnya, aktivitas dapat dilindungi sebagai berikut:
+</p>
+
+<pre>
+<manifest . . . >
+ <permission android:name="com.example.project.DEBIT_ACCT" . . . />
+ <uses-permission android:name="com.example.project.DEBIT_ACCT" />
+ . . .
+ <application . . .>
+ <activity android:name="com.example.project.FreneticActivity"
+ android:permission="com.example.project.DEBIT_ACCT"
+ . . . >
+ . . .
+ </activity>
+ </application>
+</manifest>
+</pre>
+
+<p>
+Perhatikan, dalam contoh ini izin {@code DEBIT_ACCT} tidak hanya
+dideklarasikan dengan elemen
+<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
+, penggunaannya juga diminta dengan elemen
+<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>
+. Penggunaannya harus diminta agar komponen
+aplikasi lainnya bisa menjalankan aktivitas yang dilindungi, meskipun perlindungan itu
+diberlakukan oleh aplikasi itu sendiri.
+</p>
+
+<p>
+Dalam contoh yang sama, jika atribut {@code permission} ditetapkan
+untuk izin yang dideklarasikan di tempat lain
+lain (seperti {@code android.permission.CALL_EMERGENCY_NUMBERS}, maka atribut
+tidak perlu mendeklarasikannya lagi dengan elemen
+<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
+. Akan tetapi, penggunaannya masih perlu dengan
+<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>.
+</p>
+
+<p>
+Elemen
+<code><a href="{@docRoot}guide/topics/manifest/permission-tree-element.html"><permission-tree></a></code>
+mendeklarasikan namespace untuk grup izin yang akan didefinisikan dalam
+kode. Dan
+<code><a href="{@docRoot}guide/topics/manifest/permission-group-element.html"><permission-group></a></code>
+mendefinisikan label untuk seperangkat izin (yang sama-sama dideklarasikan dalam manifes dengan elemen
+<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
+dan yang dideklarasikan di tempat lain). Ini hanya memengaruhi cara izin
+dikelompokkan saat ditampilkan kepada pengguna. Elemen
+<code><a href="{@docRoot}guide/topics/manifest/permission-group-element.html"><permission-group></a></code>
+ tidak menetapkan izin mana dimiliki grup;
+elemen hanya memberi nama grup. Izin ditempatkan dalam grup
+dengan memberikan nama grup ke elemen
+<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
+ melalui atribut
+<code><a href="{@docRoot}guide/topics/manifest/permission-element.html#pgroup">permissionGroup</a></code>
+.
+</p>
+
+
+<h3 id="libs">Pustaka</h3>
+
+<p>
+Setiap aplikasi ditautkan dengan pustaka default Android, yang
+menyertakan paket dasar untuk membangun aplikasi (dengan kelas umum
+seperti Activity, Service, Intent, View, Button, Application, ContentProvider,
+dan sebagainya).
+</p>
+
+<p>
+Akan tetapi, sebagian paket berada dalam pustakanya sendiri. Jika aplikasi Anda
+menggunakan kode salah satu paket ini, aplikasi secara eksplisit meminta untuk ditautkan dengan
+paket tersebut. Manifes harus berisi elemen
+<code><a href="{@docRoot}guide/topics/manifest/uses-library-element.html"><uses-library></a></code> yang
+terpisah untuk menamai setiap pustaka. (Nama pustaka bisa ditemukan
+dalam dokumentasi paket.)
+</p>
diff --git a/docs/html-intl/intl/id/guide/topics/providers/calendar-provider.jd b/docs/html-intl/intl/id/guide/topics/providers/calendar-provider.jd
new file mode 100644
index 0000000..3058815
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/topics/providers/calendar-provider.jd
@@ -0,0 +1,1184 @@
+page.title=Penyedia Kalender
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+ <h2>Dalam dokumen ini</h2>
+ <ol>
+ <li><a href="#overview">Dasar-Dasar</a></li>
+ <li><a href="#manifest">Izin Pengguna</a></li>
+ <li><a href="#calendar">Tabel kalender</a>
+<ol>
+ <li><a href="#query">Membuat query kalender</a></li>
+ <li><a href="#modify-calendar">Memodifikasi kalender</a></li>
+ <li><a href="#insert-calendar">Menyisipkan kalender</a></li>
+ </ol>
+ </li>
+ <li><a href="#events">Tabel Events</a>
+<ol>
+ <li><a href="#add-event">Menambahkan Kejadian</a></li>
+ <li><a href="#update-event">Memperbarui Kejadian</a></li>
+ <li><a href="#delete-event">Menghapus Kejadian</a></li>
+ </ol>
+ </li>
+ <li><a href="#attendees">Tabel peserta</a>
+<ol>
+ <li><a href="#add-attendees">Menambahkan Peserta</a></li>
+ </ol>
+ </li>
+ <li><a href="#reminders">Tabel pengingat</a>
+<ol>
+ <li><a href="#add-reminders">Menambahkan Pengingat</a></li>
+ </ol>
+ </li>
+ <li><a href="#instances">Tabel Instances</a>
+ <ol>
+ <li><a href="#query-instances">Membuat query tabel Instance</a></li>
+ </ol></li>
+ <li><a href="#intents">Intent Kalender</a>
+ <ol>
+ <li><a href="#intent-insert">Menggunakan intent untuk menyisipkan kejadian</a></li>
+ <li><a href="#intent-edit">Menggunakan intent untuk mengedit kejadian</a></li>
+ <li><a href="#intent-view">Menggunakan intent untuk menampilkan data kalender</a></li>
+ </ol>
+ </li>
+
+ <li><a href="#sync-adapter">Adaptor Sinkronisasi</a></li>
+</ol>
+
+ <h2>Kelas-kelas utama</h2>
+ <ol>
+ <li>{@link android.provider.CalendarContract.Calendars}</li>
+ <li>{@link android.provider.CalendarContract.Events}</li>
+ <li>{@link android.provider.CalendarContract.Attendees}</li>
+ <li>{@link android.provider.CalendarContract.Reminders}</li>
+ </ol>
+</div>
+</div>
+
+<p>Penyedia Kalender adalah repository untuk kejadian kalender seorang pengguna. API
+Penyedia Kalender memungkinkan Anda melakukan query, menyisipkan, memperbarui, dan menghapus
+pada kalender, kejadian, peserta, pengingat, dan seterusnya.</p>
+
+
+<p>API Penyedia Kalender bisa digunakan oleh aplikasi dan adaptor sinkronisasi. Aturannya
+bervariasi menurut tipe program yang membuat panggilan. Dokumen ini
+terutama berfokus pada penggunaan API Penyedia Kalender sebagai sebuah aplikasi. Untuk
+pembahasan ragam adaptor sinkronisasi, lihat
+<a href="#sync-adapter">Adaptor Sinkronisasi</a>.</p>
+
+
+<p>Biasanya, untuk membaca atau menulis data kalender, manifes aplikasi harus
+berisi izin yang sesuai, yang dijelaskan dalam <a href="#manifest">Izin
+Pengguna</a>. Untuk mempermudah dilakukannya operasi umum,
+Penyedia Kalender menyediakan satu set intent, seperti dijelaskan dalam <a href="#intents">Intent
+Kalender</a>. Semua intent ini membawa pengguna ke aplikasi Kalender untuk menyisipkan, menampilkan,
+dan mengedit kejadian. Pengguna berinteraksi dengan aplikasi Kalender kemudian
+kembali ke aplikasi semula. Jadi, aplikasi Anda tidak perlu meminta izin,
+juga tidak perlu menyediakan antarmuka pengguna untuk menampilkan atau membuat kejadian.</p>
+
+<h2 id="overview">Dasar-Dasar</h2>
+
+<p><a href="{@docRoot}guide/topics/providers/content-providers.html">Penyedia konten</a> menyimpan data dan menjadikannya bisa diakses oleh
+aplikasi. Penyedia konten yang ditawarkan oleh platform Android (termasuk Penyedia Kalender) biasanya mengekspos data sebagai satu set tabel berdasarkan
+model database relasional, dengan tiap baris berupa record dan tiap kolom berupa data
+yang memiliki tipe dan arti tertentu. Melalui API Penyedia Kalender, aplikasi
+dan adaptor sinkronisasi bisa mendapatkan akses baca/tulis ke tabel-tabel database yang menyimpan
+data kalender seorang pengguna.</p>
+
+<p>Setiap penyedia konten membuka sebuah URI publik (yang dibungkus sebagai objek
+{@link android.net.Uri}
+) yang mengidentifikasikan set datanya secara unik. Penyedia konten yang mengontrol
+ beberapa set data (beberapa tabel) mengekspos URI terpisah untuk tiap set. Semua
+URI untuk penyedia diawali dengan string "content://". String ini
+mengidentifikasi data sebagai dikontrol oleh penyedia konten. Penyedia Kalender
+mendefinisikan konstanta untuk URI masing-masing kelas (tabel). URI ini
+memiliki format <code><em><class></em>.CONTENT_URI</code>. Misalnya,
+{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}.</p>
+
+<p>Gambar 1 menampilkan representasi grafis model data Penyedia Kalender. Gambar ini menampilkan
+tabel dan bidang utama yang saling berkaitan.</p>
+
+<img src="{@docRoot}images/providers/datamodel.png" alt="Calendar Provider Data Model" />
+<p class="img-caption"><strong>Gambar 1.</strong> Model data Penyedia Kalender.</p>
+
+<p>Seorang pengguna bisa memiliki beberapa kalender, dan kalender yang berbeda bisa dikaitkan dengan tipe akun yang berbeda (Google Calendar, Exchange, dan seterusnya).</p>
+
+<p>{@link android.provider.CalendarContract} mendefinisikan model data dari informasi yang terkait dengan kalender dan kejadian. Data ini disimpan di sejumlah tabel, yang dicantumkan di bawah ini.</p>
+
+<table>
+ <tr>
+ <th>Tabel (Kelas)</th>
+ <th>Keterangan</th>
+ </tr>
+ <tr>
+ <td><p>{@link android.provider.CalendarContract.Calendars}</p></td>
+
+ <td>Tabel ini menyimpan
+informasi khusus kalender. Tiap baris dalam tabel ini berisi data untuk
+satu kalender, seperti nama, warna, informasi sinkronisasi, dan seterusnya.</td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.Events}</td>
+
+ <td>Tabel ini menyimpan
+informasi khusus kejadian. Tiap baris dalam tabel ini berisi informasi untuk satu
+kejadian—misalnya, judul kejadian, lokasi, waktu mulai, waktu
+selesai, dan seterusnya. Kejadian bisa terjadi satu kali atau bisa berulang beberapa kali. Peserta,
+pengingat, dan properti perluasan disimpan dalam tabel terpisah.
+Masing-masing memiliki sebuah {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID}
+yang mengacu {@link android.provider.BaseColumns#_ID} dalam tabel Events.</td>
+
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.Instances}</td>
+
+ <td>Tabel ini menyimpan
+waktu mulai dan waktu selesai setiap bentuk kejadian. Tiap baris dalam tabel ini
+mewakili satu bentuk kejadian. Untuk kejadian satu kali ada pemetaan 1:1
+antara instance dan kejadian. Untuk kejadian berulang, beberapa baris akan dibuat
+secara otomatis yang sesuai dengan beberapa kejadian itu.</td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.Attendees}</td>
+
+ <td>Tabel ini menyimpan
+informasi peserta (tamu) kejadian. Tiap baris mewakili satu tamu
+kejadian. Ini menetapkan tipe tamu dan respons kehadiran tamu
+untuk kejadian.</td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.Reminders}</td>
+
+ <td>Tabel ini menyimpan
+data peringatan/pemberitahuan. Tiap baris mewakili satu peringatan untuk sebuah kejadian. Sebuah
+kejadian bisa memiliki beberapa pengingat. Jumlah maksimum pengingat per kejadian
+ditetapkan dalam
+{@link android.provider.CalendarContract.CalendarColumns#MAX_REMINDERS},
+yang diatur oleh adaptor sinkronisasi yang
+memiliki kalender yang diberikan. Pengingat ditetapkan dalam menit sebelum kejadian
+dan memiliki metode yang menentukan cara pengguna akan diperingatkan.</td>
+ </tr>
+
+</table>
+
+<p>API Penyedia Kalender didesain agar luwes dan tangguh. Sementara itu
+, Anda perlu memberikan pengalaman pengguna akhir yang baik dan
+melindungi integritas kalender dan datanya. Untuk mencapainya, berikut ini adalah
+beberapa hal yang harus diingat saat menggunakan API ini:</p>
+
+<ul>
+
+<li><strong>Menyisipkan, memperbarui, dan menampilkan kejadian kalender.</strong> Untuk menyisipkan, mengubah, dan membaca kejadian secara langsung dari Penyedia Kalender, Anda memerlukan <a href="#manifest">izin</a> yang sesuai. Akan tetapi, jika Anda tidak sedang membuat aplikasi atau adaptor sinkronisasi kalender berfitur lengkap, maka tidak perlu meminta izin. Sebagai gantinya, Anda bisa menggunakan intent yang didukung oleh aplikasi Kalender Android untuk menyerahkan operasi baca dan tulis ke aplikasi itu. Bila menggunakan intent, aplikasi Anda akan mengirim pengguna ke aplikasi Kalender untuk melakukan operasi yang diinginkan
+dalam sebuah formulir yang sudah diisi. Setelah operasi selesai, formulir dikembalikan ke aplikasi Anda.
+Dengan mendesain aplikasi untuk melakukan operasi umum melalui Kalender,
+Anda akan memberi pengguna sebuah antarmuka pengguna yang konsisten dan tangguh. Inilah
+pendekatan yang disarankan. Untuk informasi selengkapnya, lihat <a href="#intents">Intent
+Kalender</a>.</p>
+
+
+<li><strong>Adaptor sinkronisasi.</strong> Adaptor sinkronisasi menyinkronkan data kalender
+pada perangkat pengguna dengan server atau sumber data lain. Dalam tabel
+{@link android.provider.CalendarContract.Calendars} dan
+{@link android.provider.CalendarContract.Events},
+ada kolom yang dicadangkan untuk digunakan adaptor sinkronisasi.
+Penyedia dan aplikasi tidak boleh memodifikasinya. Sebenarnya, tabel-tabel itu tidak
+terlihat kecuali jika diakses sebagai adaptor sinkronisasi. Untuk informasi selengkapnya tentang
+adaptor sinkronisasi, lihat <a href="#sync-adapter">Adaptor Sinkronisasi</a>.</li>
+
+</ul>
+
+
+<h2 id="manifest">Izin Pengguna</h2>
+
+<p>Untuk membaca data kalender, aplikasi harus menyertakan izin {@link
+android.Manifest.permission#READ_CALENDAR} dalam file manifesnya. File
+harus menyertakan izin {@link android.Manifest.permission#WRITE_CALENDAR}
+untuk menghapus, menyisipkan, atau memperbarui data kalender:</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"...>
+ <uses-sdk android:minSdkVersion="14" />
+ <uses-permission android:name="android.permission.READ_CALENDAR" />
+ <uses-permission android:name="android.permission.WRITE_CALENDAR" />
+ ...
+</manifest>
+</pre>
+
+
+<h2 id="calendar">Tabel Kalender</h2>
+
+<p>Tabel {@link android.provider.CalendarContract.Calendars} berisi data
+untuk tiap kalender. Kolom-kolom
+berikut ini bisa ditulisi oleh aplikasi maupun <a href="#sync-adapter">adaptor sinkronisasi</a>.
+Untuk mengetahui daftar lengkap bidang-bidang yang didukung, lihat
+acuan {@link android.provider.CalendarContract.Calendars}.</p>
+<table>
+ <tr>
+ <th>Konstanta</th>
+ <th>Keterangan</th>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.Calendars#NAME}</td>
+ <td>Nama kalender.</td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.Calendars#CALENDAR_DISPLAY_NAME}</td>
+ <td>Nama kalender ini yang ditampilkan kepada pengguna.</td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.Calendars#VISIBLE}</td>
+
+ <td>Sebuah boolean yang menunjukkan apakah kalender dipilih untuk ditampilkan. Nilai
+0 menunjukkan bahwa kejadian yang terkait dengan kalender ini tidak boleh
+ditampilkan. Nilai 1 menunjukkan bahwa kejadian yang terkait dengan kalender ini harus
+ditampilkan. Nilai ini memengaruhi pembuatan baris dalam tabel {@link
+android.provider.CalendarContract.Instances}.</td>
+
+
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.CalendarColumns#SYNC_EVENTS}</td>
+
+ <td>Sebuah boolean yang menunjukkan apakah kalender harus disinkronkan dan apakah
+kejadiannya harus disimpan pada perangkat. Nilai 0 berarti jangan menyinkronkan kalender ini atau
+simpan kejadiannya pada perangkat. Nilai 1 berarti menyinkronkan kejadian untuk kalender ini
+dan simpan kejadiannya pada perangkat.</td>
+ </tr>
+</table>
+
+<h3 id="query">Membuat query kalender</h3>
+
+<p>Berikut ini adalah contoh yang menampilkan cara mendapatkan kalender yang dimiliki oleh
+pengguna tertentu. Untuk memudahkan, dalam contoh ini, operasi query ditampilkan dalam
+thread antarmuka pengguna ("thread utama"). Dalam praktiknya, hal ini harus dilakukan dalam
+thread asinkron, sebagai ganti pada thread utama. Untuk diskusi selengkapnya, lihat
+<a href="{@docRoot}guide/components/loaders.html">Loader</a>. Jika Anda tidak sekadar
+membaca data melainkan memodifikasinya, lihat {@link android.content.AsyncQueryHandler}.
+</p>
+
+
+<pre>
+// Projection array. Creating indices for this array instead of doing
+// dynamic lookups improves performance.
+public static final String[] EVENT_PROJECTION = new String[] {
+ Calendars._ID, // 0
+ Calendars.ACCOUNT_NAME, // 1
+ Calendars.CALENDAR_DISPLAY_NAME, // 2
+ Calendars.OWNER_ACCOUNT // 3
+};
+
+// The indices for the projection array above.
+private static final int PROJECTION_ID_INDEX = 0;
+private static final int PROJECTION_ACCOUNT_NAME_INDEX = 1;
+private static final int PROJECTION_DISPLAY_NAME_INDEX = 2;
+private static final int PROJECTION_OWNER_ACCOUNT_INDEX = 3;</pre>
+
+
+<div class="sidebox-wrapper"> <div class="sidebox"> <h3>Mengapa Anda harus menyertakan
+ACCOUNT_TYPE?</h3> <p>Jika Anda membuat query pada {@link
+android.provider.CalendarContract.Calendars#ACCOUNT_NAME
+Calendars.ACCOUNT_NAME}, Anda juga harus menyertakan
+{@link android.provider.CalendarContract.Calendars#ACCOUNT_TYPE Calendars.ACCOUNT_TYPE}
+dalam pemilihan. Itu karena akun yang bersangkutan
+hanya dianggap unik mengingat <code>ACCOUNT_NAME</code> dan
+<code>ACCOUNT_TYPE</code>-nya. <code>ACCOUNT_TYPE</code> adalah string yang sesuai dengan
+autentikator akun yang digunakan bila akun didaftarkan dengan
+{@link android.accounts.AccountManager}. Ada juga sebuah tipe akun khusus yang disebut {@link
+android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL} untuk kalender
+yang tidak terkait dengan akun perangkat. Akun {@link
+android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL} tidak
+disinkronkan.</p> </div> </div>
+
+
+<p> Di bagian berikutnya pada contoh ini, Anda akan membuat query. Pemilihan
+akan menetapkan kriteria untuk query. Dalam contoh ini, query mencari
+kalender yang memiliki <code>ACCOUNT_NAME</code>
+"sampleuser@google.com", <code>ACCOUNT_TYPE</code>
+"com.google", dan <code>OWNER_ACCOUNT</code>
+"sampleuser@google.com". Jika Anda ingin melihat semua kalender yang
+telah ditampilkan pengguna, bukan hanya kalender yang dimiliki pengguna, hilangkan <code>OWNER_ACCOUNT</code>.
+Query tersebut akan menghasilkan objek {@link android.database.Cursor}
+yang bisa Anda gunakan untuk menyusuri set hasil yang dikembalikan oleh
+query database. Untuk diskusi selengkapnya tentang penggunaan query dalam penyedia konten,
+lihat <a href="{@docRoot}guide/topics/providers/content-providers.html">Penyedia Kalender</a>.</p>
+
+
+<pre>// Run query
+Cursor cur = null;
+ContentResolver cr = getContentResolver();
+Uri uri = Calendars.CONTENT_URI;
+String selection = "((" + Calendars.ACCOUNT_NAME + " = ?) AND ("
+ + Calendars.ACCOUNT_TYPE + " = ?) AND ("
+ + Calendars.OWNER_ACCOUNT + " = ?))";
+String[] selectionArgs = new String[] {"sampleuser@gmail.com", "com.google",
+ "sampleuser@gmail.com"};
+// Submit the query and get a Cursor object back.
+cur = cr.query(uri, EVENT_PROJECTION, selection, selectionArgs, null);</pre>
+
+<p>Bagian berikutnya ini menggunakan kursor untuk merunut set hasil. Bagian ini menggunakan
+konstanta yang disiapkan pada awal contoh ini untuk menghasilkan nilai-nilai
+bagi tiap bidang.</p>
+
+<pre>// Use the cursor to step through the returned records
+while (cur.moveToNext()) {
+ long calID = 0;
+ String displayName = null;
+ String accountName = null;
+ String ownerName = null;
+
+ // Get the field values
+ calID = cur.getLong(PROJECTION_ID_INDEX);
+ displayName = cur.getString(PROJECTION_DISPLAY_NAME_INDEX);
+ accountName = cur.getString(PROJECTION_ACCOUNT_NAME_INDEX);
+ ownerName = cur.getString(PROJECTION_OWNER_ACCOUNT_INDEX);
+
+ // Do something with the values...
+
+ ...
+}
+</pre>
+
+<h3 id="modify-calendar">Memodifikasi kalender</h3>
+
+<p>Untuk melakukan pembaruan kalender, Anda bisa menyediakan {@link
+android.provider.BaseColumns#_ID} kalender itu baik sebagai ID yang ditambahkan ke
+URI
+
+({@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()})
+atau sebagai item pemilihan pertama. Pemilihan
+harus diawali dengan <code>"_id=?"</code>, dan
+<code>selectionArg</code> pertama harus berupa {@link
+android.provider.BaseColumns#_ID} kalender.
+Anda juga bisa melakukan pembaruan dengan menuliskan kode ID dalam URI. Contoh ini mengubah
+nama tampilan kalender dengan pendekatan
+({@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()})
+:</p>
+
+<pre>private static final String DEBUG_TAG = "MyActivity";
+...
+long calID = 2;
+ContentValues values = new ContentValues();
+// The new display name for the calendar
+values.put(Calendars.CALENDAR_DISPLAY_NAME, "Trevor's Calendar");
+Uri updateUri = ContentUris.withAppendedId(Calendars.CONTENT_URI, calID);
+int rows = getContentResolver().update(updateUri, values, null, null);
+Log.i(DEBUG_TAG, "Rows updated: " + rows);</pre>
+
+<h3 id="insert-calendar">Menyisipkan kalender</h2>
+
+<p>Kalender didesain untuk dikelola terutama oleh sebuah adaptor sinkronisasi, sehingga Anda
+hanya boleh menyisipkan kalender baru sebagai adaptor sinkronisasi. Biasanya,
+aplikasi hanya bisa membuat perubahan semu pada kalender, misalnya mengubah nama tampilan. Jika
+perlu membuat sebuah kalender lokal, aplikasi bisa melakukannya dengan melakukan
+penyisipan kalender sebagai adaptor sinkronisasi, menggunakan {@link
+android.provider.CalendarContract.SyncColumns#ACCOUNT_TYPE} dari {@link
+android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL}.
+{@link android.provider.CalendarContract#ACCOUNT_TYPE_LOCAL}
+adalah sebuah tipe akun khusus untuk kalender yang tidak
+terkait dengan akun perangkat. Kalender tipe ini tidak disinkronkan dengan server. Untuk
+diskusi tentang adaptor sinkronisasi, lihat <a href="#sync-adapter">Adaptor Sinkronisasi</a>.</p>
+
+<h2 id="events">Tabel Events</h2>
+
+<p>Tabel {@link android.provider.CalendarContract.Events} berisi detail
+untuk tiap kejadian. Untuk menambah, memperbarui, atau menghapus kejadian, aplikasi harus
+menyertakan izin {@link android.Manifest.permission#WRITE_CALENDAR} dalam
+<a href="#manifest">file manifesnya</a>.</p>
+
+<p>Kolom-kolom Events berikut ini bisa ditulis oleh aplikasi maupun
+adaptor sinkronisasi. Untuk mengetahui daftar lengkap bidang-bidang yang didukung, lihat acuan {@link
+android.provider.CalendarContract.Events}.</p>
+
+<table>
+ <tr>
+ <th>Konstanta</th>
+ <th>Keterangan</th>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.EventsColumns#CALENDAR_ID}</td>
+ <td>{@link android.provider.BaseColumns#_ID} kalender yang dimiliki kejadian.</td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.EventsColumns#ORGANIZER}</td>
+ <td>Email pengatur (pemilik) kejadian.</td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.EventsColumns#TITLE}</td>
+ <td>Judul kejadian.</td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.EventsColumns#EVENT_LOCATION}</td>
+ <td>Tempat kejadian. </td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.EventsColumns#DESCRIPTION}</td>
+ <td>Keterangan kejadian.</td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.EventsColumns#DTSTART}</td>
+ <td>Waktu mulai kejadian dalam milidetik UTC sejak waktu patokan. </td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.EventsColumns#DTEND}</td>
+ <td>Waktu selesai kejadian dalam milidetik UTC sejak waktu patokan. </td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.EventsColumns#EVENT_TIMEZONE}</td>
+ <td>Zona waktu kejadian.</td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.EventsColumns#EVENT_END_TIMEZONE}</td>
+ <td>Zona waktu untuk waktu selesai kejadian.</td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.EventsColumns#DURATION}</td>
+
+ <td>Durasi kejadian dalam format <a href="http://tools.ietf.org/html/rfc5545#section-3.8.2.5">RFC5545</a>.
+Misalnya, nilai <code>"PT1H"</code> menyatakan bahwa kejadian
+akan berlangsung satu jam, dan nilai <code>"P2W"</code> menunjukkan
+durasi 2 minggu. </td>
+
+
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.EventsColumns#ALL_DAY}</td>
+
+ <td>Nilai 1 menunjukkan kejadian ini memakan waktu sehari penuh, seperti yang didefinisikan oleh
+zona waktu lokal. Nilai 0 menunjukkan kejadian adalah kejadian biasa yang mungkin dimulai
+dan selesai pada sembarang waktu selama suatu hari.</td>
+
+
+ </tr>
+
+
+ <tr>
+ <td>{@link android.provider.CalendarContract.EventsColumns#RRULE}</td>
+
+ <td>Aturan perulangan untuk format kejadian. Misalnya,
+<code>"FREQ=WEEKLY;COUNT=10;WKST=SU"</code>. Anda bisa menemukan
+contoh selengkapnya <a href="http://tools.ietf.org/html/rfc5545#section-3.8.5.3">di sini</a>.</td>
+
+ </tr>
+
+ <tr>
+ <td>{@link android.provider.CalendarContract.EventsColumns#RDATE}</td>
+ <td>Tanggal perulangan kejadian.
+ Anda biasanya menggunakan {@link android.provider.CalendarContract.EventsColumns#RDATE}
+ bersama dengan {@link android.provider.CalendarContract.EventsColumns#RRULE}
+ untuk mendefinisikan satu set agregat
+kejadian berulang. Untuk diskusi selengkapnya, lihat <a href="http://tools.ietf.org/html/rfc5545#section-3.8.5.2">Spesifikasi RFC5545</a>.</td>
+</tr>
+
+ <tr>
+ <td>{@link android.provider.CalendarContract.EventsColumns#AVAILABILITY}</td>
+
+ <td>Jika kejadian ini dihitung sebagai waktu sibuk atau waktu bebas yang bisa
+dijadwalkan. </td>
+
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.EventsColumns#GUESTS_CAN_MODIFY}</td>
+ <td>Apakah tamu bisa memodifikasi kejadian atau tidak. </td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.EventsColumns#GUESTS_CAN_INVITE_OTHERS}</td>
+ <td>Apakah tamu bisa mengundang tamu lain atau tidak. </td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.EventsColumns#GUESTS_CAN_SEE_GUESTS}</td>
+ <td>Apakah tamu bisa membaca daftar peserta atau tidak.</td>
+ </tr>
+</table>
+
+<h3 id="add-event">Menambahkan Kejadian</h3>
+
+<p>Bila aplikasi Anda menyisipkan kejadian baru, sebaiknya Anda menggunakan
+Intent {@link android.content.Intent#ACTION_INSERT INSERT}, seperti dijelaskan dalam <a href="#intent-insert">Menggunakan intent untuk menyisipkan kejadian</a>. Akan tetapi, jika
+perlu, Anda bisa menyisipkan kejadian secara langsung. Bagian ini menjelaskan
+caranya.</p>
+
+
+<p>Berikut ini adalah aturan untuk menyisipkan kejadian baru: </p>
+<ul>
+
+ <li>Anda harus menyertakan {@link
+android.provider.CalendarContract.EventsColumns#CALENDAR_ID} dan {@link
+android.provider.CalendarContract.EventsColumns#DTSTART}.</li>
+
+<li>Anda harus menyertakan {@link
+android.provider.CalendarContract.EventsColumns#EVENT_TIMEZONE}. Untuk mendapatkan daftar
+ID zona waktu yang diinstal pada sistem, gunakan {@link
+java.util.TimeZone#getAvailableIDs()}. Perhatikan bahwa aturan ini tidak berlaku jika
+Anda menyisipkan kejadian melalui Intent {@link
+android.content.Intent#ACTION_INSERT INSERT}, yang dijelaskan dalam <a href="#intent-insert">Menggunakan intent untuk menyisipkan kejadian</a>—dalam
+skenario itu, sebuah zona waktu default akan diberikan.</li>
+
+ <li>Untuk kejadian tidak-berulang, Anda harus menyertakan {@link
+android.provider.CalendarContract.EventsColumns#DTEND}. </li>
+
+
+ <li>Untuk kejadian berulang, Anda harus menyertakan sebuah {@link
+android.provider.CalendarContract.EventsColumns#DURATION} selain {@link
+android.provider.CalendarContract.EventsColumns#RRULE} atau {@link
+android.provider.CalendarContract.EventsColumns#RDATE}. Perhatikan bahwa aturan ini tidak berlaku jika
+Anda menyisipkan kejadian melalui Intent {@link
+android.content.Intent#ACTION_INSERT INSERT}, yang dijelaskan dalam <a href="#intent-insert">Menggunakan intent untuk menyisipkan kejadian</a>—dalam
+skenario itu, Anda bisa menggunakan {@link
+android.provider.CalendarContract.EventsColumns#RRULE} bersama {@link android.provider.CalendarContract.EventsColumns#DTSTART} dan {@link android.provider.CalendarContract.EventsColumns#DTEND}, dan aplikasi Calendar
+akan mengubahnya menjadi durasi secara otomatis.</li>
+
+</ul>
+
+<p>Berikut ini adalah contoh penyisipan kejadian. Penyisipan ini dilakukan dalam thread UI
+demi kemudahan. Dalam praktiknya, penyisipan dan pembaruan harus dilakukan di
+thread asinkron untuk memindahkan tindakan ke dalam thread latar belakang. Untuk
+informasi selengkapnya, lihat {@link android.content.AsyncQueryHandler}.</p>
+
+
+<pre>
+long calID = 3;
+long startMillis = 0;
+long endMillis = 0;
+Calendar beginTime = Calendar.getInstance();
+beginTime.set(2012, 9, 14, 7, 30);
+startMillis = beginTime.getTimeInMillis();
+Calendar endTime = Calendar.getInstance();
+endTime.set(2012, 9, 14, 8, 45);
+endMillis = endTime.getTimeInMillis();
+...
+
+ContentResolver cr = getContentResolver();
+ContentValues values = new ContentValues();
+values.put(Events.DTSTART, startMillis);
+values.put(Events.DTEND, endMillis);
+values.put(Events.TITLE, "Jazzercise");
+values.put(Events.DESCRIPTION, "Group workout");
+values.put(Events.CALENDAR_ID, calID);
+values.put(Events.EVENT_TIMEZONE, "America/Los_Angeles");
+Uri uri = cr.insert(Events.CONTENT_URI, values);
+
+// get the event ID that is the last element in the Uri
+long eventID = Long.parseLong(uri.getLastPathSegment());
+//
+// ... do something with event ID
+//
+//</pre>
+
+<p class="note"><strong>Catatan:</strong> Perhatikan cara contoh ini menangkap ID kejadian
+setelah kejadian dibuat. Inilah cara termudah untuk mendapatkan ID kejadian. Anda akan sering
+memerlukan ID kejadian untuk melakukan operasi kalender lainnya—misalnya, untuk menambahkan
+peserta atau pengingat ke kejadian.</p>
+
+
+<h3 id="update-event">Memperbarui Kejadian</h3>
+
+<p>Bila aplikasi Anda ingin memperbolehkan pengguna mengedit kejadian, sebaiknya
+gunakan Intent {@link android.content.Intent#ACTION_EDIT EDIT}, seperti
+dijelaskan dalam <a href="#intent-edit">Menggunakan intent untuk mengedit kejadian</a>.
+Akan tetapi, jika perlu, Anda bisa mengedit kejadian secara langsung. Untuk melakukan pembaruan
+suatu kejadian, Anda bisa memberikan <code>_ID</code>
+kejadian itu sebagai ID yang ditambahkan ke URI ({@link
+android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()})
+atau sebagai item pemilihan pertama.
+Pemilihan harus dimulai dengan <code>"_id=?"</code>, dan
+<code>selectionArg</code> yang pertama harus berupa <code>_ID</code> kejadian. Anda juga bisa
+melakukan pembaruan dengan menggunakan pemilihan tanpa ID. Berikut ini adalah contoh pembaruan
+kejadian. Contoh ini mengubah judul kejadian dengan pendekatan
+{@link android.content.ContentUris#withAppendedId(android.net.Uri,long) withAppendedId()}
+:</p>
+
+
+<pre>private static final String DEBUG_TAG = "MyActivity";
+...
+long eventID = 188;
+...
+ContentResolver cr = getContentResolver();
+ContentValues values = new ContentValues();
+Uri updateUri = null;
+// The new title for the event
+values.put(Events.TITLE, "Kickboxing");
+updateUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID);
+int rows = getContentResolver().update(updateUri, values, null, null);
+Log.i(DEBUG_TAG, "Rows updated: " + rows); </pre>
+
+<h3 id="delete-event">Menghapus Kejadian</h3>
+
+<p>Anda bisa menghapus kejadian dengan {@link
+android.provider.BaseColumns#_ID} sebagai ID yang ditambahkan pada URI, atau dengan
+pemilihan standar. Jika Anda menggunakan ID yang ditambahkan, Anda tidak bisa melakukan pemilihan.
+Ada dua versi penghapusan: sebagai aplikasi dan sebagai adaptor sinkronisasi. Penghapusan
+aplikasi mengatur kolom yang <em>dihapus</em> ke 1. Flag ini yang memberi tahu
+adaptor sinkronisasi bahwa baris telah dihapus dan bahwa penghapusan ini harus
+diberitahukan ke server. Penghapusan adaptor sinkronisasi menghapus kejadian dari
+database bersama semua data terkaitnya. Berikut ini adalah contoh aplikasi
+yang menghapus kejadian melalui {@link android.provider.BaseColumns#_ID}-nya:</p>
+
+
+<pre>private static final String DEBUG_TAG = "MyActivity";
+...
+long eventID = 201;
+...
+ContentResolver cr = getContentResolver();
+ContentValues values = new ContentValues();
+Uri deleteUri = null;
+deleteUri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID);
+int rows = getContentResolver().delete(deleteUri, null, null);
+Log.i(DEBUG_TAG, "Rows deleted: " + rows);
+</pre>
+
+<h2 id="attendees">Tabel Peserta</h2>
+
+<p>Tiap baris tabel {@link android.provider.CalendarContract.Attendees}
+mewakili satu peserta atau tamu dari sebuah kejadian. Memanggil
+{@link android.provider.CalendarContract.Reminders#query(android.content.ContentResolver, long, java.lang.String[]) query()}
+akan menghasilkan daftar peserta untuk
+kejadian dengan {@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} yang diberikan.
+{@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} ini
+harus cocok dengan {@link
+android.provider.BaseColumns#_ID} kejadian tertentu.</p>
+
+<p>Tabel berikut mencantumkan
+bidang-bidang yang bisa ditulis. Saat menyisipkan peserta baru, Anda harus menyertakan semuanya
+kecuali <code>ATTENDEE_NAME</code>.
+</p>
+
+
+<table>
+ <tr>
+ <th>Konstanta</th>
+ <th>Keterangan</th>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID}</td>
+ <td>ID kejadian.</td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.AttendeesColumns#ATTENDEE_NAME}</td>
+ <td>Nama peserta.</td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.AttendeesColumns#ATTENDEE_EMAIL}</td>
+ <td>Alamat email peserta.</td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.AttendeesColumns#ATTENDEE_RELATIONSHIP}</td>
+ <td><p>Hubungan peserta dengan kejadian. Salah satu dari:</p>
+ <ul>
+ <li>{@link android.provider.CalendarContract.AttendeesColumns#RELATIONSHIP_ATTENDEE}</li>
+ <li>{@link android.provider.CalendarContract.AttendeesColumns#RELATIONSHIP_NONE}</li>
+ <li>{@link android.provider.CalendarContract.AttendeesColumns#RELATIONSHIP_ORGANIZER}</li>
+ <li>{@link android.provider.CalendarContract.AttendeesColumns#RELATIONSHIP_PERFORMER}</li>
+ <li>{@link android.provider.CalendarContract.AttendeesColumns#RELATIONSHIP_SPEAKER}</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.AttendeesColumns#ATTENDEE_TYPE}</td>
+ <td><p>Tipe peserta. Salah satu dari: </p>
+ <ul>
+ <li>{@link android.provider.CalendarContract.AttendeesColumns#TYPE_REQUIRED}</li>
+ <li>{@link android.provider.CalendarContract.AttendeesColumns#TYPE_OPTIONAL}</li>
+ </ul></td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.AttendeesColumns#ATTENDEE_STATUS}</td>
+ <td><p>Status kehadiran peserta. Salah satu dari:</p>
+ <ul>
+ <li>{@link android.provider.CalendarContract.AttendeesColumns#ATTENDEE_STATUS_ACCEPTED}</li>
+ <li>{@link android.provider.CalendarContract.AttendeesColumns#ATTENDEE_STATUS_DECLINED}</li>
+ <li>{@link android.provider.CalendarContract.AttendeesColumns#ATTENDEE_STATUS_INVITED}</li>
+ <li>{@link android.provider.CalendarContract.AttendeesColumns#ATTENDEE_STATUS_NONE}</li>
+ <li>{@link android.provider.CalendarContract.AttendeesColumns#ATTENDEE_STATUS_TENTATIVE}</li>
+ </ul></td>
+ </tr>
+</table>
+
+<h3 id="add-attendees">Menambahkan Peserta</h3>
+
+<p>Berikut ini adalah contoh yang menambahkan satu peserta ke kejadian. Perhatikan bahwa
+{@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID}
+diperlukan:</p>
+
+<pre>
+long eventID = 202;
+...
+ContentResolver cr = getContentResolver();
+ContentValues values = new ContentValues();
+values.put(Attendees.ATTENDEE_NAME, "Trevor");
+values.put(Attendees.ATTENDEE_EMAIL, "trevor@example.com");
+values.put(Attendees.ATTENDEE_RELATIONSHIP, Attendees.RELATIONSHIP_ATTENDEE);
+values.put(Attendees.ATTENDEE_TYPE, Attendees.TYPE_OPTIONAL);
+values.put(Attendees.ATTENDEE_STATUS, Attendees.ATTENDEE_STATUS_INVITED);
+values.put(Attendees.EVENT_ID, eventID);
+Uri uri = cr.insert(Attendees.CONTENT_URI, values);
+</pre>
+
+<h2 id="reminders">Tabel Pengingat</h2>
+
+<p>Tiap baris tabel {@link android.provider.CalendarContract.Reminders}
+mewakili satu pengingat untuk sebuah kejadian. Memanggil
+{@link android.provider.CalendarContract.Reminders#query(android.content.ContentResolver, long, java.lang.String[]) query()} akan menghasilkan daftar pengingat untuk
+kejadian dengan
+{@link android.provider.CalendarContract.AttendeesColumns#EVENT_ID} yang diberikan.</p>
+
+
+<p>Tabel berikut mencantumkan bidang-bidang yang bisa ditulis untuk pengingat. Semua bidang harus
+disertakan saat menyisipkan pengingat baru. Perhatikan bahwa adaptor sinkronisasi menetapkan
+tipe pengingat yang didukungnya dalam tabel {@link
+android.provider.CalendarContract.Calendars}. Lihat
+{@link android.provider.CalendarContract.CalendarColumns#ALLOWED_REMINDERS}
+untuk detailnya.</p>
+
+
+<table>
+ <tr>
+ <th>Konstanta</th>
+ <th>Keterangan</th>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.RemindersColumns#EVENT_ID}</td>
+ <td>ID kejadian.</td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.RemindersColumns#MINUTES}</td>
+ <td>Menit yang ditunggu untuk memicu kejadian pengingat.</td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.RemindersColumns#METHOD}</td>
+ <td><p>Metode alarm, seperti yang diatur pada server. Salah satu dari:</p>
+ <ul>
+ <li>{@link android.provider.CalendarContract.RemindersColumns#METHOD_ALERT}</li>
+ <li>{@link android.provider.CalendarContract.RemindersColumns#METHOD_DEFAULT}</li>
+ <li>{@link android.provider.CalendarContract.RemindersColumns#METHOD_EMAIL}</li>
+ <li>{@link android.provider.CalendarContract.RemindersColumns#METHOD_SMS}</li>
+ </ul></td>
+ </tr>
+</table>
+
+<h3 id="add-reminders">Menambahkan Pengingat</h3>
+
+<p>Contoh ini menambahkan pengingat ke kejadian. Pengingat dipicu 15
+menit sebelum kejadian.</p>
+<pre>
+long eventID = 221;
+...
+ContentResolver cr = getContentResolver();
+ContentValues values = new ContentValues();
+values.put(Reminders.MINUTES, 15);
+values.put(Reminders.EVENT_ID, eventID);
+values.put(Reminders.METHOD, Reminders.METHOD_ALERT);
+Uri uri = cr.insert(Reminders.CONTENT_URI, values);</pre>
+
+<h2 id="instances">Tabel Instances</h2>
+
+<p>Tabel
+{@link android.provider.CalendarContract.Instances} menyimpan
+waktu mulai dan waktu selesai kejadian. Tiap baris dalam tabel ini
+mewakili satu bentuk kejadian. Tabel instance tidak bisa ditulis dan hanya
+menyediakan sebuah cara untuk membuat query kejadian. </p>
+
+<p>Tabel berikut mencantumkan beberapa bidang yang bisa Anda query untuk suatu instance. Perhatikan
+bahwa zona waktu didefinisikan oleh
+{@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_TYPE}
+dan
+{@link android.provider.CalendarContract.CalendarCache#KEY_TIMEZONE_INSTANCES}.</p>
+
+
+<table>
+ <tr>
+ <th>Konstanta</th>
+ <th>Keterangan</th>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.Instances#BEGIN}</td>
+ <td>Waktu mulai instance, dalam milidetik UTC.</td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.Instances#END}</td>
+ <td>Waktu selesai instance, dalam milidetik UTC.</td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.Instances#END_DAY}</td>
+
+ <td>Hari selesai Julian dari instance, relatif terhadap
+zona waktu Kalender.
+
+</td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.Instances#END_MINUTE}</td>
+
+ <td>Menit selesai dari instance yang diukur dari tengah malam di zona waktu
+Kalender.</td>
+
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.Instances#EVENT_ID}</td>
+ <td>Kejadian <code>_ID</code> untuk instance ini.</td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.Instances#START_DAY}</td>
+ <td>Hari mulai Julian dari instance, relatif terhadap zona waktu Kalender.
+ </td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.Instances#START_MINUTE}</td>
+
+ <td>Menit mulai dari instance yang diukur dari tengah malam, relatif terhadap
+zona waktu Kalender.
+</td>
+
+ </tr>
+
+</table>
+
+<h3 id="query-instances">Membuat query tabel Instance</h3>
+
+<p>Untuk membuat query tabel Instances, Anda perlu menetapkan rentang waktu query
+dalam URI. Dalam contoh ini, {@link android.provider.CalendarContract.Instances}
+mendapatkan akses ke bidang {@link
+android.provider.CalendarContract.EventsColumns#TITLE} melalui
+implementasi antarmuka {@link android.provider.CalendarContract.EventsColumns}-nya.
+Dengan kata lain, {@link
+android.provider.CalendarContract.EventsColumns#TITLE} dihasilkan melalui
+tampilan database, bukan melalui query terhadap tabel {@link
+android.provider.CalendarContract.Instances} mentah.</p>
+
+<pre>
+private static final String DEBUG_TAG = "MyActivity";
+public static final String[] INSTANCE_PROJECTION = new String[] {
+ Instances.EVENT_ID, // 0
+ Instances.BEGIN, // 1
+ Instances.TITLE // 2
+ };
+
+// The indices for the projection array above.
+private static final int PROJECTION_ID_INDEX = 0;
+private static final int PROJECTION_BEGIN_INDEX = 1;
+private static final int PROJECTION_TITLE_INDEX = 2;
+...
+
+// Specify the date range you want to search for recurring
+// event instances
+Calendar beginTime = Calendar.getInstance();
+beginTime.set(2011, 9, 23, 8, 0);
+long startMillis = beginTime.getTimeInMillis();
+Calendar endTime = Calendar.getInstance();
+endTime.set(2011, 10, 24, 8, 0);
+long endMillis = endTime.getTimeInMillis();
+
+Cursor cur = null;
+ContentResolver cr = getContentResolver();
+
+// The ID of the recurring event whose instances you are searching
+// for in the Instances table
+String selection = Instances.EVENT_ID + " = ?";
+String[] selectionArgs = new String[] {"207"};
+
+// Construct the query with the desired date range.
+Uri.Builder builder = Instances.CONTENT_URI.buildUpon();
+ContentUris.appendId(builder, startMillis);
+ContentUris.appendId(builder, endMillis);
+
+// Submit the query
+cur = cr.query(builder.build(),
+ INSTANCE_PROJECTION,
+ selection,
+ selectionArgs,
+ null);
+
+while (cur.moveToNext()) {
+ String title = null;
+ long eventID = 0;
+ long beginVal = 0;
+
+ // Get the field values
+ eventID = cur.getLong(PROJECTION_ID_INDEX);
+ beginVal = cur.getLong(PROJECTION_BEGIN_INDEX);
+ title = cur.getString(PROJECTION_TITLE_INDEX);
+
+ // Do something with the values.
+ Log.i(DEBUG_TAG, "Event: " + title);
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTimeInMillis(beginVal);
+ DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");
+ Log.i(DEBUG_TAG, "Date: " + formatter.format(calendar.getTime()));
+ }
+ }</pre>
+
+<h2 id="intents">Intent Kalender</h2>
+<p>Aplikasi Anda tidak memerlukan <a href="#manifest">izin</a> untuk membaca dan menulis data kalender. Sebagai gantinya, aplikasi bisa menggunakan intent yang didukung oleh aplikasi Kalender Android untuk menyerahkan operasi baca dan tulis ke aplikasi itu. Tabel berikut mencantumkan intent yang didukung oleh Penyedia Kalender:</p>
+<table>
+ <tr>
+ <th>Tindakan</th>
+ <th>URI</th>
+
+ <th>Keterangan</th>
+ <th>Ekstra</th>
+ </tr>
+ <tr>
+ <td><br>
+ {@link android.content.Intent#ACTION_VIEW VIEW} <br></td>
+ <td><p><code>content://com.android.calendar/time/<ms_since_epoch></code></p>
+ Anda juga bisa mengacu ke URI dengan
+{@link android.provider.CalendarContract#CONTENT_URI CalendarContract.CONTENT_URI}.
+Untuk contoh yang menggunakan intent ini, lihat <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-view">Menggunakan intent untuk menampilkan data kalender</a>.
+
+ </td>
+ <td>Membuka kalender pada waktu yang ditetapkan oleh <code><ms_since_epoch></code>.</td>
+ <td>Tidak ada.</td>
+ </tr>
+ <tr>
+ <td><p>{@link android.content.Intent#ACTION_VIEW VIEW} </p>
+
+ </td>
+ <td><p><code>content://com.android.calendar/events/<event_id></code></p>
+
+ Anda juga bisa mengacu ke URI dengan
+{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}.
+Untuk contoh yang menggunakan intent ini, lihat <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-view">Menggunakan intent untuk menampilkan data kalender</a>.
+
+ </td>
+ <td>Menampilkan kejadian yang ditetapkan oleh <code><event_id></code>.</td>
+
+ <td>{@link android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME CalendarContract.EXTRA_EVENT_BEGIN_TIME}<br>
+ <br>
+ <br>
+ {@link android.provider.CalendarContract#EXTRA_EVENT_END_TIME CalendarContract.EXTRA_EVENT_END_TIME}</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.content.Intent#ACTION_EDIT EDIT} </td>
+ <td><p><code>content://com.android.calendar/events/<event_id></code></p>
+
+ Anda juga bisa mengacu ke URI dengan
+{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}.
+Untuk contoh penggunaan intent ini, lihat <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-edit">Menggunakan intent untuk mengedit kejadian</a>.
+
+
+ </td>
+ <td>Mengedit kejadian yang ditetapkan oleh <code><event_id></code>.</td>
+
+ <td>{@link android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME CalendarContract.EXTRA_EVENT_BEGIN_TIME}<br>
+ <br>
+ <br>
+ {@link android.provider.CalendarContract#EXTRA_EVENT_END_TIME CalendarContract.EXTRA_EVENT_END_TIME}</td>
+ </tr>
+
+ <tr>
+ <td>{@link android.content.Intent#ACTION_EDIT EDIT} <br>
+ <br>
+ {@link android.content.Intent#ACTION_INSERT INSERT} </td>
+ <td><p><code>content://com.android.calendar/events</code></p>
+
+ Anda juga bisa mengacu ke URI dengan
+{@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}.
+Untuk contoh penggunaan intent ini, lihat <a href="{@docRoot}guide/topics/providers/calendar-provider.html#intent-insert">Menggunakan intent untuk menyisipkan kejadian</a>.
+
+ </td>
+
+ <td>Membuat sebuah kejadian.</td>
+ <td>Ekstra apa saja yang tercantum dalam tabel di bawah.</td>
+ </tr>
+</table>
+
+<p>Tabel berikut mencantumkan ekstra intent yang didukung oleh Penyedia Kalender:
+</p>
+<table>
+ <tr>
+ <th>Ekstra Intent</th>
+ <th>Keterangan</th>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.EventsColumns#TITLE Events.TITLE}</td>
+ <td>Nama kejadian.</td>
+ </tr>
+ <tr>
+
+ <td>{@link android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME
+CalendarContract.EXTRA_EVENT_BEGIN_TIME}</td>
+ <td>Waktu mulai kejadian dalam milidetik sejak waktu patokan.</td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract#EXTRA_EVENT_END_TIME
+CalendarContract.EXTRA_EVENT_END_TIME}</td>
+
+ <td>Waktu selesai kejadian dalam milidetik sejak waktu patokan.</td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract#EXTRA_EVENT_ALL_DAY
+CalendarContract.EXTRA_EVENT_ALL_DAY}</td>
+
+ <td>Sebuah boolean yang menunjukkan bahwa kejadian sehari penuh. Nilai bisa
+<code>true</code> atau <code>false</code>.</td> </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.EventsColumns#EVENT_LOCATION
+Events.EVENT_LOCATION}</td>
+
+ <td>Lokasi kejadian.</td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.EventsColumns#DESCRIPTION
+Events.DESCRIPTION}</td>
+
+ <td>Keterangan kejadian.</td>
+ </tr>
+ <tr>
+ <td>
+ {@link android.content.Intent#EXTRA_EMAIL Intent.EXTRA_EMAIL}</td>
+ <td>Alamat email mereka yang harus diundang berupa daftar yang dipisahkan koma.</td>
+ </tr>
+ <tr>
+ <td>
+ {@link android.provider.CalendarContract.EventsColumns#RRULE Events.RRULE}</td>
+ <td>Aturan perulangan kejadian.</td>
+ </tr>
+ <tr>
+ <td>
+ {@link android.provider.CalendarContract.EventsColumns#ACCESS_LEVEL
+Events.ACCESS_LEVEL}</td>
+
+ <td>Apakah kejadian bersifat privat atau publik.</td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.CalendarContract.EventsColumns#AVAILABILITY
+Events.AVAILABILITY}</td>
+
+ <td>Jika kejadian ini dihitung sebagai waktu sibuk atau waktu bebas yang bisa dijadwalkan.</td>
+
+</table>
+<p>Bagian berikut menjelaskan cara menggunakan semua intent ini.</p>
+
+
+<h3 id="intent-insert">Menggunakan intent untuk menyisipkan kejadian</h3>
+
+<p>Penggunaan Intent {@link android.content.Intent#ACTION_INSERT INSERT}
+akan memungkinkan aplikasi Anda menyerahkan tugas penyisipan kejadian ke Kalender itu sendiri.
+Dengan pendekatan ini, aplikasi Anda bahkan tidak perlu menyertakan izin {@link
+android.Manifest.permission#WRITE_CALENDAR} dalam <a href="#manifest">file manifesnya</a>.</p>
+
+
+<p>Bila pengguna menjalankan aplikasi yang menggunakan pendekatan ini, aplikasi akan mengirim
+izin ke Kalender untuk menyelesaikan penambahan kejadian. Intent {@link
+android.content.Intent#ACTION_INSERT INSERT} menggunakan bidang-bidang ekstra
+untuk mengisi formulir lebih dahulu dengan detail kejadian dalam Kalender. Pengguna nanti bisa
+membatalkan kejadian, mengedit formulir sebagaimana diperlukan, atau menyimpan kejadian ke
+kalender mereka.</p>
+
+
+
+<p>Berikut ini adalah cuplikan kode yang menjadwalkan kejadian pada tanggal 19 Januari 2012, yang berjalan
+dari 7:30 pagi hingga 8:30 pagi Perhatikan hal-hal berikut tentang cuplikan kode ini:</p>
+
+<ul>
+ <li>Cuplikan kode ini menetapkan {@link android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI}
+ sebagai URI-nya.</li>
+
+ <li>Cuplikan kode ini menggunakan bidang-bidang ekstra {@link
+android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME
+CalendarContract.EXTRA_EVENT_BEGIN_TIME} dan {@link
+android.provider.CalendarContract#EXTRA_EVENT_END_TIME
+CalendarContract.EXTRA_EVENT_END_TIME} untuk mengisi dahulu formulir
+dengan waktu kejadian. Nilai-nilai untuk waktu ini harus dalam milidetik UTC
+sejak waktu patokan.</li>
+
+ <li>Cuplikan kode ini menggunakan bidang ekstra {@link android.content.Intent#EXTRA_EMAIL Intent.EXTRA_EMAIL}
+untuk memberikan daftar undangan yang dipisah koma, yang ditetapkan melalui alamat email.</li>
+
+</ul>
+<pre>
+Calendar beginTime = Calendar.getInstance();
+beginTime.set(2012, 0, 19, 7, 30);
+Calendar endTime = Calendar.getInstance();
+endTime.set(2012, 0, 19, 8, 30);
+Intent intent = new Intent(Intent.ACTION_INSERT)
+ .setData(Events.CONTENT_URI)
+ .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis())
+ .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis())
+ .putExtra(Events.TITLE, "Yoga")
+ .putExtra(Events.DESCRIPTION, "Group class")
+ .putExtra(Events.EVENT_LOCATION, "The gym")
+ .putExtra(Events.AVAILABILITY, Events.AVAILABILITY_BUSY)
+ .putExtra(Intent.EXTRA_EMAIL, "rowan@example.com,trevor@example.com");
+startActivity(intent);
+</pre>
+
+<h3 id="intent-edit">Menggunakan intent untuk mengedit kejadian</h3>
+
+<p>Anda bisa memperbarui kejadian secara langsung, seperti dijelaskan dalam <a href="#update-event">Memperbarui kejadian</a>. Namun penggunaan Intent {@link
+android.content.Intent#ACTION_EDIT EDIT} memungkinkan aplikasi yang
+tidak memiliki izin untuk menyerahkan pengeditan kejadian ke aplikasi Kalender.
+Bila pengguna selesai mengedit kejadian dalam Kalender, pengguna akan dikembalikan ke
+aplikasi semula.</p> <p>Berikut ini adalah contoh intent yang mengatur
+judul baru bagi kejadian yang ditetapkan dan memungkinkan pengguna mengedit kejadian dalam Kalender.</p>
+
+
+<pre>long eventID = 208;
+Uri uri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID);
+Intent intent = new Intent(Intent.ACTION_EDIT)
+ .setData(uri)
+ .putExtra(Events.TITLE, "My New Title");
+startActivity(intent);</pre>
+
+<h3 id="intent-view">Menggunakan intent untuk menampilkan data kalender</h3>
+<p>Penyedia Kalender menyediakan dua cara menggunakan Intent {@link android.content.Intent#ACTION_VIEW VIEW}:</p>
+<ul>
+ <li>Untuk membuka Kalender pada tanggal tertentu.</li>
+ <li>Untuk menampilkan sebuah kejadian.</li>
+
+</ul>
+<p>Berikut ini adalah contoh yang menampilkan cara membuka Kalender pada tanggal tertentu:</p>
+<pre>// A date-time specified in milliseconds since the epoch.
+long startMillis;
+...
+Uri.Builder builder = CalendarContract.CONTENT_URI.buildUpon();
+builder.appendPath("time");
+ContentUris.appendId(builder, startMillis);
+Intent intent = new Intent(Intent.ACTION_VIEW)
+ .setData(builder.build());
+startActivity(intent);</pre>
+
+<p>Berikut ini adalah contoh yang menampilkan cara membuka kejadian untuk menampilkan:</p>
+<pre>long eventID = 208;
+...
+Uri uri = ContentUris.withAppendedId(Events.CONTENT_URI, eventID);
+Intent intent = new Intent(Intent.ACTION_VIEW)
+ .setData(uri);
+startActivity(intent);
+</pre>
+
+
+<h2 id="sync-adapter">Adaptor Sinkronisasi</h2>
+
+
+<p>Hanya ada perbedaan kecil dalam cara aplikasi dan adaptor sinkronisasi
+mengakses Penyedia Kalender:</p>
+
+<ul>
+ <li>Adaptor sinkronisasi perlu menetapkan bahwa dirinya sebuah adaptor sinkronisasi dengan mengatur {@link android.provider.CalendarContract#CALLER_IS_SYNCADAPTER} ke <code>true</code>.</li>
+
+
+ <li>Adaptor sinkronisasi perlu memberikan {@link
+android.provider.CalendarContract.SyncColumns#ACCOUNT_NAME} dan {@link
+android.provider.CalendarContract.SyncColumns#ACCOUNT_TYPE} sebagai parameter query dalam URI. </li>
+
+ <li>Adaptor sinkronisasi memiliki akses tulis ke lebih banyak kolom daripada aplikasi atau widget.
+ Misalnya, aplikasi hanya bisa mengubah sedikit karakteristik kalender,
+ misalnya nama, nama tampilan, pengaturan visibilitas, dan apakah kalender
+ disinkronkan atau tidak. Sebagai perbandingan, adaptor sinkronisasi bisa mengakses bukan hanya kolom-kolom itu, namun banyak kolom lainnya,
+ misalnya warna kalender, zona waktu, tingkat akses, lokasi, dan seterusnya.
+Akan tetapi, adaptor sinkronisasi dibatasi pada <code>ACCOUNT_NAME</code> dan
+<code>ACCOUNT_TYPE</code> yang ditetapkannya.</li> </ul>
+
+<p>Berikut ini adalah metode pembantu yang bisa Anda gunakan untuk menghasilkan URI bagi penggunaan dengan adaptor sinkronisasi:</p>
+<pre> static Uri asSyncAdapter(Uri uri, String account, String accountType) {
+ return uri.buildUpon()
+ .appendQueryParameter(android.provider.CalendarContract.CALLER_IS_SYNCADAPTER,"true")
+ .appendQueryParameter(Calendars.ACCOUNT_NAME, account)
+ .appendQueryParameter(Calendars.ACCOUNT_TYPE, accountType).build();
+ }
+</pre>
+<p>Untuk contoh implementasi adaptor sinkronisasi (yang tidak terkait secara khusus dengan Kalender), lihat
+<a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">SampleSyncAdapter</a>.
diff --git a/docs/html-intl/intl/id/guide/topics/providers/contacts-provider.jd b/docs/html-intl/intl/id/guide/topics/providers/contacts-provider.jd
new file mode 100644
index 0000000..994c56b
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/topics/providers/contacts-provider.jd
@@ -0,0 +1,2356 @@
+page.title=Penyedia Kontak
+@jd:body
+<div id="qv-wrapper">
+<div id="qv">
+<h2>Tampilan Cepat</h2>
+<ul>
+ <li>Repository informasi Android tentang orang.</li>
+ <li>
+ Sinkronisasi dengan web.
+ </li>
+ <li>
+ Mengintegrasikan data aliran sosial.
+ </li>
+</ul>
+<h2>Dalam dokumen ini</h2>
+<ol>
+ <li>
+ <a href="#InformationTypes">Organisasi Penyedia Kontak</a>
+ </li>
+ <li>
+ <a href="#RawContactBasics">Kontak mentah</a>
+ </li>
+ <li>
+ <a href="#DataBasics">Data</a>
+ </li>
+ <li>
+ <a href="#ContactBasics">Kontak</a>
+ </li>
+ <li>
+ <a href="#Sources">Data Dari Adaptor Sinkronisasi</a>
+ </li>
+ <li>
+ <a href="#Permissions">Izin yang Diperlukan</a>
+ </li>
+ <li>
+ <a href="#UserProfile">Profil Pengguna</a>
+ </li>
+ <li>
+ <a href="#ContactsProviderMetadata">Metadata Penyedia Kontak</a>
+ </li>
+ <li>
+ <a href="#Access">Akses Penyedia Kontak</a>
+ <li>
+ </li>
+ <li>
+ <a href="#SyncAdapters">Adaptor Sinkronisasi Penyedia Kontak</a>
+ </li>
+ <li>
+ <a href="#SocialStream">Data Aliran Sosial</a>
+ </li>
+ <li>
+ <a href="#AdditionalFeatures">Fitur Tambahan Penyedia Kontak</a>
+ </li>
+</ol>
+<h2>Kelas-kelas utama</h2>
+<ol>
+ <li>{@link android.provider.ContactsContract.Contacts}</li>
+ <li>{@link android.provider.ContactsContract.RawContacts}</li>
+ <li>{@link android.provider.ContactsContract.Data}</li>
+ <li>{@code android.provider.ContactsContract.StreamItems}</li>
+</ol>
+<h2>Contoh-Contoh Terkait</h2>
+<ol>
+ <li>
+ <a href="{@docRoot}resources/samples/ContactManager/index.html">
+ Contact Manager
+ </a>
+ </li>
+ <li>
+ <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">
+ Contoh Adaptor Sinkronisasi</a>
+ </li>
+</ol>
+<h2>Lihat Juga</h2>
+<ol>
+ <li>
+ <a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
+ Dasar-Dasar Penyedia Konten
+ </a>
+ </li>
+</ol>
+</div>
+</div>
+<p>
+ Penyedia Kontak adalah komponen Android yang tangguh dan fleksibel dalam mengelola
+ repository data pusat tentang orang di perangkat. Penyedia Kontak adalah sumber data
+ yang Anda lihat dalam aplikasi kontak perangkat, dan Anda juga bisa mengakses datanya dalam aplikasi
+ Anda sendiri serta mentransfer data antara perangkat dan layanan online. Penyedia mengakomodasi
+ berbagai sumber data dan mencoba mengelola data sebanyak mungkin untuk setiap orang, sehingga
+ organisasinya menjadi kompleks. Karena itu, API penyedia menyertakan
+ satu set kelas kontrak dan antarmuka ekstensif yang membantu pengambilan dan
+ modifikasi data.
+</p>
+<p>
+ Panduan ini menjelaskan hal-hal berikut:
+</p>
+ <ul>
+ <li>
+ Struktur penyedia dasar.
+ </li>
+ <li>
+ Cara mengambil data dari penyedia.
+ </li>
+ <li>
+ Cara memodifikasi data di penyedia.
+ </li>
+ <li>
+ Cara menulis adaptor sinkronisasi untuk menyinkronkan data dari server Anda ke
+ Penyedia Kontak.
+ </li>
+ </ul>
+<p>
+ Panduan ini beranggapan bahwa Anda mengetahui dasar-dasar penyedia konten Android. Untuk mengetahui selengkapnya
+ tentang penyedia konten Android, bacalah
+ panduan<a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
+ Dasar-Dasar Penyedia Konten</a>. Contoh aplikasi
+ <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">Sample Sync Adapter</a>
+ adalah contoh penggunaan adaptor sinkronisasi untuk mentransfer data antara Penyedia Kontak
+ dan contoh aplikasi yang memiliki host di Google Web Services.
+</p>
+<h2 id="InformationTypes">Organisasi Penyedia Kontak</h2>
+<p>
+ Penyedia Kontak adalah komponen penyedia konten Android. Komponen ini memelihara tiga tipe
+ data tentang seseorang, masing-masing disesuaikan dengan tabel yang ditawarkan oleh penyedia, seperti
+ yang terlihat dalam gambar 1:
+</p>
+<img src="{@docRoot}images/providers/contacts_structure.png" alt="" height="364" id="figure1" />
+<p class="img-caption">
+ <strong>Gambar 1.</strong> Struktur tabel Penyedia Kontak.
+</p>
+<p>
+ Ketiga tabel disebut secara umum menurut nama kelas kontrak. Kelas
+ mendefinisikan konstanta untuk URI konten, nama kolom, dan nilai kolom yang digunakan oleh tabel-tabel:
+</p>
+<dl>
+ <dt>
+ Tabel {@link android.provider.ContactsContract.Contacts}
+ </dt>
+ <dd>
+ Baris mewakili orang yang berbeda, berdasarkan agregrasi baris kontak mentah.
+ </dd>
+ <dt>
+ Tabel {@link android.provider.ContactsContract.RawContacts}
+ </dt>
+ <dd>
+ Baris berisi rangkuman data seseorang, untuk tipe dan akun pengguna tertentu.
+ </dd>
+ <dt>
+ Tabel {@link android.provider.ContactsContract.Data}
+ </dt>
+ <dd>
+ Baris berisi data untuk kontak mentah, seperti alamat email atau nomor telepon.
+ </dd>
+</dl>
+<p>
+ Tabel lain yang diwakili oleh kelas kontrak dalam {@link android.provider.ContactsContract}
+ adalah tabel tambahan yang digunakan Penyedia Kontak untuk mengelola operasinya atau mendukung
+ fungsi tertentu dalam kontak atau aplikasi telepon perangkat.
+</p>
+<h2 id="RawContactBasics">Kontak mentah</h2>
+<p>
+ Kontak mentah mewakili data seseorang yang berasal dari satu tipe akun dan nama
+ akun. Karena Penyedia Kontak memungkinkan lebih dari satu layanan online sebagai sumber
+ data untuk satu orang, Penyedia Kontak memungkinkan multikontak mentah untuk orang yang sama.
+ Multikontak mentah juga memungkinkan seorang pengguna mengombinasikan data seseorang dari lebih dari satu akun
+ bertipe akun yang sama.
+</p>
+<p>
+ Sebagian besar data untuk kontak mentah tidak disimpan dalam
+ tabel {@link android.provider.ContactsContract.RawContacts}. Sebagai gantinya, data tersebut disimpan dalam satu atau beberapa baris
+ dalam tabel {@link android.provider.ContactsContract.Data}. Setiap baris data memiliki kolom
+ {@link android.provider.ContactsContract.DataColumns#RAW_CONTACT_ID Data.RAW_CONTACT_ID} yang
+ berisi nilai {@code android.provider.BaseColumns#_ID RawContacts._ID} dari
+ baris {@link android.provider.ContactsContract.RawContacts} induknya.
+</p>
+<h3 id="RawContactsColumns">Kolom-kolom kontak mentah yang penting</h3>
+<p>
+ Kolom-kolom penting dalam tabel {@link android.provider.ContactsContract.RawContacts}
+ tercantum pada tabel 1. Bacalah catatan yang diberikan setelah tabel:
+</p>
+<p class="table-caption" id="table1">
+ <strong>Tabel 1.</strong> Kolom-kolom kontak mentah yang penting.
+</p>
+<table>
+ <tr>
+ <th scope="col">Nama kolom</th>
+ <th scope="col">Kegunaan</th>
+ <th scope="col">Catatan</th>
+ </tr>
+ <tr>
+ <td>
+ {@link android.provider.ContactsContract.SyncColumns#ACCOUNT_NAME}
+ </td>
+ <td>
+ Nama akun untuk tipe akun yang merupakan sumber kontak mentah ini.
+ Misalnya, nama akun dari akun Google adalah salah satu alamat Gmail
+ pemilik perangkat. Lihat entri berikutnya untuk
+ {@link android.provider.ContactsContract.SyncColumns#ACCOUNT_TYPE} untuk informasi
+ selengkapnya.
+ </td>
+ <td>
+ Format nama ini khusus untuk tipe akun ini. Format ini tidak
+ harus alamat email.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ {@link android.provider.ContactsContract.SyncColumns#ACCOUNT_TYPE}
+ </td>
+ <td>
+ Tipe akun yang merupakan sumber kontak mentah ini. Misalnya, tipe
+ akun dari akun Google adalah <code>com.google</code>. Selalu batasi tipe akun Anda
+ dengan identifier domain untuk domain yang Anda miliki atau kontrol. Hal ini akan memastikan bahwa tipe
+ akun Anda bersifat unik.
+ </td>
+ <td>
+ Tipe akun yang menawarkan data kontak biasanya memiliki adaptor sinkronisasi terkait yang
+ menyinkronkan dengan Penyedia Kontak.
+ </tr>
+ <tr>
+ <td>
+ {@link android.provider.ContactsContract.RawContactsColumns#DELETED}
+ </td>
+ <td>
+ Flag "deleted" untuk kontak mentah.
+ </td>
+ <td>
+ Flag ini memungkinkan Penyedia Kontak memelihara baris secara internal hingga adaptor
+ sinkronisasi bisa menghapus baris dari server mereka dan akhirnya menghapus baris
+ dari repository.
+ </td>
+ </tr>
+</table>
+<h4>Catatan</h4>
+<p>
+ Berikut ini adalah catatan penting tentang
+ tabel {@link android.provider.ContactsContract.RawContacts}:
+</p>
+<ul>
+ <li>
+ Nama kontak mentah tidak disimpan di barisnya dalam
+ {@link android.provider.ContactsContract.RawContacts}. Sebagai gantinya, nama tersebut disimpan dalam
+ tabel {@link android.provider.ContactsContract.Data}, pada
+ baris {@link android.provider.ContactsContract.CommonDataKinds.StructuredName}. Kontak mentah
+ hanya memiliki satu baris dari tipe ini dalam tabel {@link android.provider.ContactsContract.Data}.
+ </li>
+ <li>
+ <strong>Perhatian:</strong> Untuk menggunakan data akun sendiri dalam baris kontak mentah, akun harus
+ didaftarkan lebih dahulu dengan {@link android.accounts.AccountManager}. Caranya, mintalah
+ pengguna untuk menambahkan tipe akun dan nama akun ke dalam daftar akun. Jika Anda tidak
+ melakukannya, Penyedia Kontak secara otomatis akan menghapus baris kontak mentah Anda.
+ <p>
+ Misalnya, Anda menginginkan aplikasi memelihara data kontak untuk layanan berbasis web
+ dengan domain {@code com.example.dataservice}, dan akun pengguna untuk layanan Anda
+ adalah {@code becky.sharp@dataservice.example.com}, pengguna harus menambahkan lebih dahulu "type"
+ akun ({@code com.example.dataservice}) dan "name" akun
+ ({@code becky.smart@dataservice.example.com}) sebelum aplikasi Anda bisa menambahkan baris kontak mentah.
+ Anda bisa menjelaskan ketentuan ini kepada pengguna dalam dokumentasi, atau meminta
+ pengguna untuk menambahkan tipe dan nama, atau keduanya. Tipe akun dan nama akun
+ dijelaskan lebih detail di bagian berikutnya.
+ </li>
+</ul>
+<h3 id="RawContactsExample">Sumber data kontak mentah</h3>
+<p>
+ Untuk memahami cara kerja kontak mentah, perhatikan pengguna "Emily Dickinson" yang mendefinisikan
+ tiga akun pengguna berikut pada perangkatnya:
+</p>
+<ul>
+ <li><code>emily.dickinson@gmail.com</code></li>
+ <li><code>emilyd@gmail.com</code></li>
+ <li>Akun Twitter "belle_of_amherst"</li>
+</ul>
+<p>
+ Pengguna ini telah mengaktifkan <em>Sync Contacts</em> untuk ketiga akun dalam pengaturan
+ <em>Accounts</em>.
+</p>
+<p>
+ Anggaplah Emily Dickinson membuka jendela browser, masuk ke Gmail sebagai
+ <code>emily.dickinson@gmail.com</code>, membuka
+ Contacts, dan menambahkan "Thomas Higginson". Kemudian, ia masuk ke Gmail sebagai
+ <code>emilyd@gmail.com</code> dan mengirimkan email kepada "Thomas Higginson", yang
+ menambahkan Thomas secara otomatis sebagai kontak. Ia juga mengikuti "colonel_tom" (ID Twitter Thomas Higginson) di
+ Twitter.
+</p>
+<p>
+ Penyedia Kontak membuat tiga kontak mentah akibat pekerjaan ini:
+</p>
+<ol>
+ <li>
+ Kontak mentah untuk "Thomas Higginson" yang dikaitkan dengan <code>emily.dickinson@gmail.com</code>.
+ Tipe akun penggunanya adalah Google.
+ </li>
+ <li>
+ Kontak mentah kedua untuk "Thomas Higginson" yang dikaitkan dengan <code>emilyd@gmail.com</code>.
+ Tipe akun pengguna juga Google. Ada kontak mentah kedua
+ meskipun nama tersebut identik dengan nama sebelumnya karena orang bersangkutan ditambahkan untuk
+ akun pengguna yang berbeda.
+ </li>
+ <li>
+ Kontak mentah ketiga untuk "Thomas Higginson" yang dikaitkan dengan "belle_of_amherst". Tipe
+ akun penggunanya adalah Twitter.
+ </li>
+</ol>
+<h2 id="DataBasics">Data</h2>
+<p>
+ Seperti yang telah disebutkan, data untuk kontak mentah disimpan dalam
+ baris {@link android.provider.ContactsContract.Data} yang ditautkan dengan nilai
+ <code>_ID</code> kontak mentah. Cara ini memungkinkan satu kontak mentah memiliki beberapa instance tipe data
+ yang sama dengan alamat email atau nomor telepon. Misalnya, jika
+ "Thomas Higginson" untuk {@code emilyd@gmail.com} (baris kontak mentah untuk Thomas Higginson
+ yang dikaitkan dengan akun Google <code>emilyd@gmail.com</code>) memiliki alamat email rumah
+ <code>thigg@gmail.com</code> dan alamat email kerja
+ <code>thomas.higginson@gmail.com</code>, Penyedia Kontak akan menyimpan dua baris alamat
+ email dan menautkan keduanya ke kontak mentah.
+</p>
+<p>
+ Perhatikan bahwa tipe data yang berbeda disimpan dalam satu tabel ini. Baris-baris nama tampilan,
+ nomor telepon, email, alamat surat, foto, dan data situs web semuanya bisa ditemukan dalam
+ tabel {@link android.provider.ContactsContract.Data}. Untuk membantu mengelola ini,
+ tabel {@link android.provider.ContactsContract.Data} memiliki beberapa kolom dengan nama deskriptif,
+ dalam kolom lain dengan nama generik. Konten kolom bernama deskriptif memiliki arti yang sama
+ terlepas dari tipe data dalam barisnya, sedangkan konten kolom bernama generik memiliki
+ arti yang berbeda-beda sesuai dengan tipe data.
+</p>
+<h3 id="DescriptiveColumns">Nama kolom deskriptif</h3>
+<p>
+ Beberapa contoh nama kolom deskriptif adalah:
+</p>
+<dl>
+ <dt>
+ {@link android.provider.ContactsContract.Data#RAW_CONTACT_ID}
+ </dt>
+ <dd>
+ Nilai kolom <code>_ID</code> kontak mentah untuk data ini.
+ </dd>
+ <dt>
+ {@link android.provider.ContactsContract.Data#MIMETYPE}
+ </dt>
+ <dd>
+ Tipe data yang disimpan dalam baris ini, dinyatakan berupa tipe MIME custom. Penyedia Kontak
+ menggunakan tipe MIME yang didefinisikan dalam subkelas
+ {@link android.provider.ContactsContract.CommonDataKinds}. Tipe MIME ini adalah sumber terbuka,
+ dan bisa digunakan oleh setiap aplikasi atau adaptor sinkronisasi yang bisa digunakan bersama Penyedia Kontak.
+ </dd>
+ <dt>
+ {@link android.provider.ContactsContract.DataColumns#IS_PRIMARY}
+ </dt>
+ <dd>
+ Jika tipe baris data ini bisa terjadi lebih dari satu kali untuk suatu kontak mentah,
+ kolom {@link android.provider.ContactsContract.DataColumns#IS_PRIMARY}
+ menandai baris data yang berisi data utama untuk tipe itu. Misalnya, jika
+ pengguna menekan lama sebuah nomor telepon untuk kontak dan memilih <strong>Set default</strong>,
+ maka baris {@link android.provider.ContactsContract.Data} yang berisi angka itu
+ mengatur kolom {@link android.provider.ContactsContract.DataColumns#IS_PRIMARY}-nya ke suatu
+ nilai bukan nol.
+ </dd>
+</dl>
+<h3 id="GenericColumns">Nama kolom generik</h3>
+<p>
+ Ada 15 kolom generik bernama <code>DATA1</code> hingga
+ <code>DATA15</code> yang tersedia secara umum dan empat kolom generik
+ tambahan <code>SYNC1</code> hingga <code>SYNC4</code> yang harus digunakan hanya oleh adaptor
+ sinkronisasi. Konstanta nama kolom generik selalu berfungsi, terlepas dari tipe
+ data dalam baris .
+</p>
+<p>
+ Kolom <code>DATA1</code> diindeks. Penyedia Kontak selalu menggunakan kolom ini untuk
+ data yang diharapkan penyedia akan menjadi target yang paling sering dari suatu query. Misalnya,
+ dalam baris email, kolom ini berisi alamat email sebenarnya.
+</p>
+<p>
+ Sesuai konvensi, kolom <code>DATA15</code> dicadangkan untuk menyimpan data Binary Large Object
+ (BLOB) seperti thumbnail foto.
+</p>
+<h3 id="TypeSpecificNames">Nama kolom bertipe spesifik</h3>
+<p>
+ Guna memudahkan pekerjaan dengan kolom untuk tipe baris tertentu, Penyedia Kontak
+ juga menyediakan konstanta nama kolom bertipe spesifik, yang didefinisikan dalam subkelas
+ {@link android.provider.ContactsContract.CommonDataKinds}. Konstanta cuma memberikan nama
+ konstanta yang berbeda ke nama kolom yang sama, yang membantu Anda mengakses data dalam baris
+ bertipe spesifik.
+</p>
+<p>
+ Misalnya, kelas {@link android.provider.ContactsContract.CommonDataKinds.Email} mendefinisikan
+ konstanta nama kolom bertipe spesifik untuk baris {@link android.provider.ContactsContract.Data}
+ yang memiliki tipe MIME
+ {@link android.provider.ContactsContract.CommonDataKinds.Email#CONTENT_ITEM_TYPE
+ Email.CONTENT_ITEM_TYPE}. Kelas ini berisi konstanta
+ {@link android.provider.ContactsContract.CommonDataKinds.Email#ADDRESS} untuk kolom
+ alamat email. Nilai sesungguhnya dari
+ {@link android.provider.ContactsContract.CommonDataKinds.Email#ADDRESS} adalah "data1", yang
+ sama dengan nama generik kolom.
+</p>
+<p class="caution">
+ <strong>Perhatian:</strong> Jangan tambahkan data custom Anda sendiri ke
+ tabel {@link android.provider.ContactsContract.Data} dengan menggunakan baris yang memiliki salah satu
+ tipe MIME yang telah didefinisikan penyedia. Jika melakukannya, Anda bisa kehilangan data atau menyebabkan penyedia
+ gagal berfungsi. Misalnya, Anda seharusnya tidak menambahkan baris bertipe MIME
+ {@link android.provider.ContactsContract.CommonDataKinds.Email#CONTENT_ITEM_TYPE
+ Email.CONTENT_ITEM_TYPE} yang berisi nama pengguna sebagai ganti alamat email dalam
+ kolom <code>DATA1</code>. Jika Anda menggunakan tipe MIME custom sendiri untuk baris bersangkutan, maka Anda bebas
+ untuk mendefinisikan nama kolom bertipe spesifik dan menggunakan kolom sekehendak Anda.
+</p>
+<p>
+ Gambar 2 menampilkan cara kolom deskriptif dan kolom data muncul dalam
+ baris {@link android.provider.ContactsContract.Data}, dan cara nama kolom bertipe spesifik "melapisi"
+ nama kolom generik
+</p>
+<img src="{@docRoot}images/providers/data_columns.png" alt="How type-specific column names map to generic column names" height="311" id="figure2" />
+<p class="img-caption">
+ <strong>Gambar 2.</strong> Nama kolom bertipe spesifik dan nama kolom generik.
+</p>
+<h3 id="ColumnMaps">Kelas nama kolom bertipe spesifik</h3>
+<p>
+ Tabel 2 berisi daftar kelas nama kolom bertipe spesifik yang paling umum digunakan:
+</p>
+<p class="table-caption" id="table2">
+ <strong>Tabel 2.</strong> Kelas nama kolom bertipe spesifik</p>
+<table>
+ <tr>
+ <th scope="col">Kelas pemetaan</th>
+ <th scope="col">Tipe data</th>
+ <th scope="col">Catatan</th>
+ </tr>
+ <tr>
+ <td>{@link android.provider.ContactsContract.CommonDataKinds.StructuredName}</td>
+ <td>Data nama untuk kontak mentah yang dikaitkan dengan baris data ini.</td>
+ <td>Kontak mentah hanya memiliki salah satu baris ini.</td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.ContactsContract.CommonDataKinds.Photo}</td>
+ <td>Foto utama untuk kontak mentah yang dikaitkan dengan baris data ini.</td>
+ <td>Kontak mentah hanya memiliki salah satu baris ini.</td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.ContactsContract.CommonDataKinds.Email}</td>
+ <td>Alamat email untuk kontak mentah yang dikaitkan dengan baris data ini.</td>
+ <td>Kontak mentah bisa memiliki beberapa alamat email.</td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.ContactsContract.CommonDataKinds.StructuredPostal}</td>
+ <td>Alamat pos untuk kontak mentah yang dikaitkan dengan baris data ini.</td>
+ <td>Kontak mentah bisa memiliki beberapa alamat email.</td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.ContactsContract.CommonDataKinds.GroupMembership}</td>
+ <td>Identifier yang menautkan kontak mentah ke salah satu grup dalam Penyedia Kontak.</td>
+ <td>
+ Grup adalah fitur opsional pada tipe akun dan nama akun. Grup dijelaskan
+ lebih detail di bagian <a href="#Groups">Grup kontak</a>.
+ </td>
+ </tr>
+</table>
+<h3 id="ContactBasics">Kontak</h3>
+<p>
+ Penyedia Kontak mengombinasikan baris kontak mentah di semua tipe akun dan nama akun
+ untuk membentuk <strong>kontak</strong>. Hal ini memudahkan menampilkan dan memodifikasi semua data
+ yang telah dikumpulkan pengguna untuk seseorang. Penyedia Kontak mengelola pembuatan baris
+ kontak baru, dan agregasi kontak mentah dengan baris kontak yang ada. Baik aplikasi maupun adaptor sinkronisasi
+ tidak boleh menambahkan kontak dan sebagian kolom dalam baris kontak yang bersifat hanya baca.
+</p>
+<p class="note">
+ <strong>Catatan:</strong> Jika Anda mencoba menambahkan kontak ke Penyedia Kontak dengan
+ {@link android.content.ContentResolver#insert(Uri,ContentValues) insert()}, Anda akan mendapatkan
+ eksepsi {@link java.lang.UnsupportedOperationException}. Jika Anda mencoba memperbarui sebuah kolom
+ yang tercantum sebagai "hanya-baca", pembaruan akan diabaikan.
+</p>
+<p>
+ Penyedia Kontak membuat kontak baru untuk merespons penambahan kontak mentah baru
+ yang tidak cocok dengan kontak yang ada. Penyedia juga melakukan ini jika data
+ kontak mentah yang ada berubah sehingga tidak lagi cocok dengan kontak yang
+ sebelumnya dihubungkan. Jika aplikasi atau adaptor sinkronisasi membuat kontak mentah baru yang
+ <em>memang</em> cocok dengan kontak yang ada, kontak mentah baru akan diagregasikan ke kontak
+ yang ada.
+</p>
+<p>
+ Penyedia Kontak menautkan baris kontak ke baris kontak mentahnya dengan kolom
+ <code>_ID</code> dari baris kontak dalam tabel {@link android.provider.ContactsContract.Contacts Contacts}.
+ Kolom <code>CONTACT_ID</code> tabel kontak mentah
+ {@link android.provider.ContactsContract.RawContacts} berisi nilai <code>_ID</code> untuk
+ baris kontak yang dikaitkan dengan tiap baris kontak mentah.
+</p>
+<p>
+ Tabel {@link android.provider.ContactsContract.Contacts} juga memiliki kolom
+ {@code android.provider.ContactsContract.ContactsColumns#LOOKUP_KEY} yang merupakan
+ tautan "permanen" ke baris kontak. Karena memelihara kontak
+ secara otomatis, Penyedia Kontak bisa mengubah nilai {@code android.provider.BaseColumns#_ID} baris kontak
+ untuk merespons agregasi atau sinkronisasi. Sekalipun ini terjadi, URI konten
+ {@link android.provider.ContactsContract.Contacts#CONTENT_LOOKUP_URI} yang dikombinasikan dengan
+ {@code android.provider.ContactsContract.ContactsColumns#LOOKUP_KEY} kontak akan tetap
+ menunjuk ke baris kontak itu, sehingga Anda bisa menggunakan
+ {@code android.provider.ContactsContract.ContactsColumns#LOOKUP_KEY}
+ untuk memelihara tautan ke kontak "favorit", dan seterusnya. Kolom ini memiliki formatnya sendiri, yang
+ tidak terkait dengan format kolom {@code android.provider.BaseColumns#_ID}.
+</p>
+<p>
+ Gambar 3 menampilkan cara ketiga tabel utama terkait satu sama lain.
+</p>
+<img src="{@docRoot}images/providers/contacts_tables.png" alt="Contacts provider main tables" height="514" id="figure4" />
+<p class="img-caption">
+ <strong>Gambar 3.</strong> Hubungan tabel Contacts, Raw Contacts, dan Details.
+</p>
+<h2 id="Sources">Data Dari Adaptor Sinkronisasi</h2>
+<p>
+ Pengguna memasukkan data kontak secara langsung ke dalam perangkat, namun data juga mengalir masuk ke Penyedia Kontak
+ dari layanan web melalui <strong>adaptor sinkronisasi</strong>, yang mengotomatiskan
+ transfer data antara perangkat dan layanan. Adaptor sinkronisasi berjalan di latar belakang
+ di bawah kontrol sistem, dan memanggil metode {@link android.content.ContentResolver}
+ untuk mengelola data.
+</p>
+<p>
+ Di Android, layanan web yang digunakan adaptor sinkronisasi diidentifikasi melalui tipe akun.
+ Setiap adaptor sinkronisasi bekerja dengan satu tipe akun, tetapi bisa mendukung beberapa nama akun untuk
+ tipe itu. Tipe akun dan nama akun dijelaskan secara singkat di bagian
+ <a href="#RawContactsExample">Sumber data kontak mentah</a>. Definisi berikut menyediakan
+ detail selengkapnya, dan menjelaskan cara tipe dan nama akun berkaitan dengan adaptor sinkronisasi dan layanan.
+</p>
+<dl>
+ <dt>
+ Tipe akun
+ </dt>
+ <dd>
+ Mengidentifikasi layanan tempat pengguna menyimpan data. Sering kali, pengguna harus
+ mengautentikasi diri dengan layanan. Misalnya, Google Contacts adalah tipe akun, yang diidentifikasi
+ dengan kode <code>google.com</code>. Nilai ini sesuai dengan tipe akun yang digunakan oleh
+ {@link android.accounts.AccountManager}.
+ </dd>
+ <dt>
+ Nama akun
+ </dt>
+ <dd>
+ Mengidentifikasi akun atau login tertentu untuk suatu tipe akun. Akun Google Contacts
+ sama dengan akun Google, yang memiliki alamat email sebagai nama akun.
+ Layanan lain mungkin menggunakan nama pengguna satu-kata atau identitas berupa angka.
+ </dd>
+</dl>
+<p>
+ Tipe akun tidak harus unik. Pengguna boleh mengonfigurasi beberapa akun Google Contacts
+ dan mengunduh data ke Penyedia Kontak; ini mungkin terjadi jika pengguna memiliki satu set
+ kontak pribadi untuk satu nama akun pribadi, dan satu set lagi untuk pekerjaan. Nama akun
+ biasanya unik. Bersama-sama, keduanya mengidentifikasi aliran data tertentu antara Penyedia Kontak dan
+ layanan eksternal.
+</p>
+<p>
+ Jika Anda ingin mentransfer data layanan ke Penyedia Kontak, Anda perlu menulis
+ adaptor sinkronisasi sendiri. Hal ini dijelaskan lebih detail di bagian
+ <a href="#SyncAdapters">Adaptor Sinkronisasi Penyedia Kontak</a>.
+</p>
+<p>
+ Gambar 4 menampilkan cara Penyedia Kontak dimasukkan ke dalam aliran data
+ tentang orang. Dalam kotak bertanda "sync adapters", setiap adaptor diberi label menurut tipe akunnya.
+</p>
+<img src="{@docRoot}images/providers/ContactsDataFlow.png" alt="Flow of data about people" height="252" id="figure5" />
+<p class="img-caption">
+ <strong>Gambar 4.</strong> Aliran data Penyedia Kontak.
+</p>
+<h2 id="Permissions">Izin yang Diperlukan</h2>
+<p>
+ Aplikasi yang ingin mengakses Penyedia Kontak harus meminta izin
+ berikut:
+</p>
+<dl>
+ <dt>Akses baca ke satu atau beberapa tabel</dt>
+ <dd>
+ {@link android.Manifest.permission#READ_CONTACTS}, yang ditetapkan dalam
+ <code>AndroidManifest.xml</code> dengan elemen
+ <code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">
+ <uses-permission></a></code> sebagai
+ <code><uses-permission android:name="android.permission.READ_CONTACTS"></code>.
+ </dd>
+ <dt>Akses tulis ke satu atau beberapa tabel</dt>
+ <dd>
+ {@link android.Manifest.permission#WRITE_CONTACTS}, yang ditetapkan dalam
+ <code>AndroidManifest.xml</code> dengan elemen
+ <code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">
+ <uses-permission></a></code> sebagai
+ <code><uses-permission android:name="android.permission.WRITE_CONTACTS"></code>.
+ </dd>
+</dl>
+<p>
+ Izin ini tidak diperluas ke data profil pengguna. Profil pengguna dan izin
+ yang diperlukan dibahas di bagian berikut,
+ <a href="#UserProfile">Profil Pengguna</a>.
+</p>
+<p>
+ Ingatlah bahwa data kontak pengguna bersifat pribadi dan sensitif. Pengguna mempersoalkan
+ privasinya, sehingga tidak ingin aplikasi mengumpulkan data tentang diri atau kontak mereka.
+ Jika alasan Anda memerlukan izin untuk mengakses data kontak tidak jelas, pengguna mungkin memberi
+ aplikasi Anda peringkat rendah atau langsung menolak menginstalnya.
+</p>
+<h2 id="UserProfile">Profil Pengguna</h2>
+<p>
+ Tabel {@link android.provider.ContactsContract.Contacts} berisi satu baris yang berisi
+ data profil untuk pengguna perangkat. Data ini menjelaskan data perangkat <code>user</code> bukannya
+ salah satu kontak pengguna. Baris kontak profil ditautkan ke baris
+ kontak mentah untuk setiap sistem yang menggunakan profil.
+ Setiap baris kontak mentah profil bisa memiliki beberapa baris data. Konstanta untuk mengakses profil
+ pengguna tersedia dalam kelas {@link android.provider.ContactsContract.Profile}.
+</p>
+<p>
+ Akses ke profil pengguna memerlukan izin khusus. Selain itu, izin
+ {@link android.Manifest.permission#READ_CONTACTS} dan
+ {@link android.Manifest.permission#WRITE_CONTACTS} diperlukan untuk membaca dan menulis, akses
+ ke profil pengguna memerlukan masing-masing izin {@code android.Manifest.permission#READ_PROFILE} dan
+ {@code android.Manifest.permission#WRITE_PROFILE} untuk akses baca dan tulis.
+
+</p>
+<p>
+ Ingatlah bahwa Anda harus mempertimbangkan profil pengguna bersifat sensitif. Izin
+ {@code android.Manifest.permission#READ_PROFILE} memungkinkan Anda mengakses data yang mengidentifikasi secara pribadi
+ pengguna perangkat. Pastikan memberi tahu pengguna alasan
+ Anda memerlukan izin akses profil pengguna dalam keterangan aplikasi Anda.
+</p>
+<p>
+ Untuk mengambil baris kontak berisi profil pengguna,
+ panggil {@link android.content.ContentResolver#query(Uri,String[], String, String[], String)
+ ContentResolver.query()}. Atur URI konten ke
+ {@link android.provider.ContactsContract.Profile#CONTENT_URI} dan jangan sediakan
+ kriteria pemilihan apa pun. Anda juga bisa menggunakan URI konten ini sebagai URI dasar untuk mengambil kontak
+ mentah atau data untuk profil. Misalnya, cuplikan kode ini mengambil data untuk profil:
+</p>
+<pre>
+// Sets the columns to retrieve for the user profile
+mProjection = new String[]
+ {
+ Profile._ID,
+ Profile.DISPLAY_NAME_PRIMARY,
+ Profile.LOOKUP_KEY,
+ Profile.PHOTO_THUMBNAIL_URI
+ };
+
+// Retrieves the profile from the Contacts Provider
+mProfileCursor =
+ getContentResolver().query(
+ Profile.CONTENT_URI,
+ mProjection ,
+ null,
+ null,
+ null);
+</pre>
+<p class="note">
+ <strong>Catatan:</strong> Jika Anda mengambil beberapa baris kontak, dan ingin menentukan apakah salah satu baris
+ adalah profil pengguna, uji
+ kolom {@link android.provider.ContactsContract.ContactsColumns#IS_USER_PROFILE} pada baris tersebut. Kolom ini
+ diatur ke "1" jika kontak adalah profil pengguna.
+</p>
+<h2 id="ContactsProviderMetadata">Metadata Penyedia Kontak</h2>
+<p>
+ Penyedia Kontak mengelola data yang mencatat status data kontak dalam
+ repository. Metadata repository ini disimpan di berbagai tempat, termasuk baris-baris tabel
+ Raw Contacts, Data, dan Contacts,
+ tabel {@link android.provider.ContactsContract.Settings}, dan
+ tabel {@link android.provider.ContactsContract.SyncState}. Tabel berikut menampilkan
+ efek setiap potongan metadata ini:
+</p>
+<p class="table-caption" id="table3">
+ <strong>Tabel 3.</strong> Metadata di Penyedia Kontak</p>
+<table>
+ <tr>
+ <th scope="col">Tabel</th>
+ <th scope="col">Kolom</th>
+ <th scope="col">Nilai</th>
+ <th scope="col">Arti</th>
+ </tr>
+ <tr>
+ <td rowspan="2">{@link android.provider.ContactsContract.RawContacts}</td>
+ <td rowspan="2">{@link android.provider.ContactsContract.SyncColumns#DIRTY}</td>
+ <td>"0" - tidak berubah sejak sinkronisasi terakhir.</td>
+ <td rowspan="2">
+ Menandai kontak mentah yang berubah pada perangkat dan telah disinkronkan kembali ke
+ server. Nilai diatur secara otomatis oleh Penyedia Kontak bila aplikasi
+ Android memperbarui baris.
+ <p>
+ Adaptor sinkronisasi yang memodifikasi kontak mentah atau tabel data harus selalu menambahkan
+ string {@link android.provider.ContactsContract#CALLER_IS_SYNCADAPTER} ke
+ URI konten yang digunakannya. Ini mencegah penyedia menandai baris sebagai kotor.
+ Sebaliknya, modifikasi oleh adaptor sinkronisasi tampak seperti modifikasi lokal dan
+ dikirim ke server, meskipun server adalah sumber modifikasi.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td>"1" - berubah sejak sinkronisasi terakhir, harus disinkronkan kembali ke server.</td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.ContactsContract.RawContacts}</td>
+ <td>{@link android.provider.ContactsContract.SyncColumns#VERSION}</td>
+ <td>Nomor versi baris ini.</td>
+ <td>
+ Penyedia Kontak menambahkan nilai ini secara otomatis bila baris atau
+ data terkaitnya berubah.
+ </td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.ContactsContract.Data}</td>
+ <td>{@link android.provider.ContactsContract.DataColumns#DATA_VERSION}</td>
+ <td>Nomor versi baris ini.</td>
+ <td>
+ Penyedia Kontak menambahkan nilai ini secara otomatis bila baris data
+ berubah.
+ </td>
+ </tr>
+ <tr>
+ <td>{@link android.provider.ContactsContract.RawContacts}</td>
+ <td>{@link android.provider.ContactsContract.SyncColumns#SOURCE_ID}</td>
+ <td>
+ Nilai string yang mengidentifikasi secara unik kontak mentah ini ke akun tempat
+ kontak dibuat.
+ </td>
+ <td>
+ Bila adaptor sinkronisasi membuat kontak mentah baru, kolom ini harus diatur ke
+ ID unik server untuk kontak mentah itu. Bila aplikasi Android membuat kontak mentah
+ baru, aplikasi harus membiarkan kolom ini kosong. Ini mengisyaratkan pada adaptor
+ sinkronisasi bahwa adaptor harus membuat kontak mentah baru pada server, dan mendapatkan
+ nilai untuk {@link android.provider.ContactsContract.SyncColumns#SOURCE_ID}.
+ <p>
+ Khususnya, id sumber harus <strong>unik</strong> untuk setiap tipe
+ akun dan stabil di semua sinkronisasi:
+ </p>
+ <ul>
+ <li>
+ Unik: Setiap kontak mentah untuk satu akun harus memiliki id sumbernya sendiri. Jika Anda
+ tidak memberlakukan aturan ini, masalah akan timbul dalam aplikasi kontak.
+ Perhatikan bahwa dua kontak mentah untuk tipe akun yang <em>sama</em> boleh memiliki
+ id sumber yang sama. Misalnya, kontak mentah "Thomas Higginson" untuk
+ akun {@code emily.dickinson@gmail.com} boleh memiliki id sumber
+ yang sama dengan kontak mentah "Thomas Higginson" untuk akun
+ {@code emilyd@gmail.com}.
+ </li>
+ <li>
+ Stabil: Id sumber adalah bagian tetap dari data layanan online untuk
+ kontak mentah. Misalnya, jika pengguna membersihkan Contacts Storage dari
+ pengaturan aplikasi dan menyinkronkan ulang, kontak mentah yang dipulihkan akan memiliki id sumber
+ yang sama dengan sebelumnya. Jika Anda tidak memberlakukan hal ini, pintasan akan berhenti
+ berfungsi.
+ </li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td rowspan="2">{@link android.provider.ContactsContract.Groups}</td>
+ <td rowspan="2">{@link android.provider.ContactsContract.GroupsColumns#GROUP_VISIBLE}</td>
+ <td>"0" - Kontak dalam grup ini tidak boleh terlihat dalam UI aplikasi Android.</td>
+ <td>
+ Kolom ini digunakan untuk kompatibilitas dengan server yang memungkinkan pengguna menyembunyikan kontak dalam
+ grup tertentu.
+ </td>
+ </tr>
+ <tr>
+ <td>"1" - Kontak dalam grup ini boleh terlihat dalam UI aplikasi.</td>
+ </tr>
+ <tr>
+ <td rowspan="2">{@link android.provider.ContactsContract.Settings}</td>
+ <td rowspan="2">
+ {@link android.provider.ContactsContract.SettingsColumns#UNGROUPED_VISIBLE}</td>
+ <td>
+ "0" - Untuk akun dan tipe akun ini, kontak yang bukan milik grup
+ tidak akan terlihat pada UI aplikasi Android.
+ </td>
+ <td rowspan="2">
+ Secara default, kontak tidak terlihat jika tidak satu pun kontak mentahnya milik grup
+ (Keanggotaan grup untuk kontak mentah ditandai oleh satu atau beberapa baris
+ {@link android.provider.ContactsContract.CommonDataKinds.GroupMembership}
+ dalam tabel {@link android.provider.ContactsContract.Data}).
+ Dengan mengatur flag ini dalam baris tabel {@link android.provider.ContactsContract.Settings}
+ untuk tipe akun dan akun, Anda bisa memaksakan kontak tanpa grup agar terlihat.
+ Satu kegunaan flag ini adalah menampilkan kontak dari server yang tidak menggunakan grup.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ "1" - Untuk akun dan tipe akun ini, kontak yang bukan milik grup
+ akan terlihat pada UI aplikasi.
+ </td>
+
+ </tr>
+ <tr>
+ <td>{@link android.provider.ContactsContract.SyncState}</td>
+ <td>(semua)</td>
+ <td>
+ Gunakan tabel ini untuk menyimpan metadata bagi adaptor sinkronisasi Anda.
+ </td>
+ <td>
+ Dengan tabel ini, Anda bisa menyimpan status sinkronisasi dan data lain yang terkait dengan sinkronisasi secara persisten pada
+ perangkat.
+ </td>
+ </tr>
+</table>
+<h2 id="Access">Akses Penyedia Kontak</h2>
+<p>
+ Bagian ini menjelaskan panduan untuk mengakses data dari Penyedia Kontak, yang berfokus pada
+ hal-hal berikut:
+</p>
+<ul>
+ <li>
+ Query entitas.
+ </li>
+ <li>
+ Modifikasi batch.
+ </li>
+ <li>
+ Pengambilan dan modifikasi dengan intent.
+ </li>
+ <li>
+ Integritas data.
+ </li>
+</ul>
+<p>
+ Membuat modifikasi dari adaptor sinkronisasi juga secara lebih detail di bagian
+ <a href="#SyncAdapters">Adaptor Sinkronisasi Penyedia Kontak</a>.
+</p>
+<h3 id="Entities">Membuat query entitas</h3>
+<p>
+ Karena disusun secara hierarki, tabel-tabel Penyedia Kontak sering kali berguna untuk
+ mengambil baris dan semua baris "anak" yang ditautkan dengannya. Misalnya, untuk menampilkan
+ semua informasi untuk satu orang, Anda mungkin ingin mengambil semua
+ baris {@link android.provider.ContactsContract.RawContacts} untuk satu baris
+ {@link android.provider.ContactsContract.Contacts}, atau semua
+ baris {@link android.provider.ContactsContract.CommonDataKinds.Email} untuk satu baris
+ {@link android.provider.ContactsContract.RawContacts}. Untuk memudahkan hal ini, Penyedia Kontak
+ menawarkan konstruksi <strong>entitas</strong>, yang berfungsi seperti gabungan database di antara
+ tabel-tabel.
+</p>
+<p>
+ Entitas adalah seperti tabel yang terdiri atas kolom-kolom terpilih dari tabel induk dan tabel anaknya.
+ Bila membuat query sebuah entitas, Anda memberikan proyeksi dan kriteria pencarian berdasarkan kolom-kolom
+ yang tersedia dari entitas itu. Hasilnya adalah sebuah {@link android.database.Cursor} yang
+ berisi satu baris untuk setiap baris tabel anak yang diambil. Misalnya, jika Anda membuat query
+ {@link android.provider.ContactsContract.Contacts.Entity} untuk satu nama kontak
+ dan semua baris {@link android.provider.ContactsContract.CommonDataKinds.Email} untuk semua
+ kontak mentah bagi nama itu, Anda akan mendapatkan kembali {@link android.database.Cursor} berisi satu baris
+ untuk setiap baris {@link android.provider.ContactsContract.CommonDataKinds.Email}.
+</p>
+<p>
+ Entitas menyederhanakan query. Dengan entitas, Anda bisa mengambil semua data kontak untuk satu
+ kontak atau kontak mentah sekaligus, sebagai ganti harus membuat query tabel induk terlebih dahulu untuk mendapatkan
+ ID, lalu harus membuat query tabel anak dengan ID itu. Selain itu, Penyedia Kontak akan memproses
+ query terhadap entitas dalam satu transaksi, yang memastikan bahwa data yang diambil
+ konsisten secara internal.
+</p>
+<p class="note">
+ <strong>Catatan:</strong> Entitas biasanya tidak berisi semua kolom tabel induk dan
+ anak. Jika Anda mencoba menggunakan nama kolom yang tidak ada dalam daftar konstanta
+ nama kolom untuk entitas, Anda akan mendapatkan {@link java.lang.Exception}.
+</p>
+<p>
+ Cuplikan berikut menampilkan cara mengambil semua baris kontak mentah untuk sebuah kontak. Cuplikan ini
+ adalah bagian dari aplikasi lebih besar yang memiliki dua aktivitas, "main" dan "detail". Aktivitas utama
+ menampilkan daftar baris kontak; bila pengguna memilih satu baris, aktivitas akan mengirimkan ID-nya ke aktivitas
+ detail. Aktivitas detail menggunakan{@link android.provider.ContactsContract.Contacts.Entity}
+ untuk menampilkan semua baris data dari semua kontak mentah yang dikaitkan dengan kontak
+ terpilih.
+</p>
+<p>
+ Cuplikan ini diambil dari aktivitas "detail":
+</p>
+<pre>
+...
+ /*
+ * Appends the entity path to the URI. In the case of the Contacts Provider, the
+ * expected URI is content://com.google.contacts/#/entity (# is the ID value).
+ */
+ mContactUri = Uri.withAppendedPath(
+ mContactUri,
+ ContactsContract.Contacts.Entity.CONTENT_DIRECTORY);
+
+ // Initializes the loader identified by LOADER_ID.
+ getLoaderManager().initLoader(
+ LOADER_ID, // The identifier of the loader to initialize
+ null, // Arguments for the loader (in this case, none)
+ this); // The context of the activity
+
+ // Creates a new cursor adapter to attach to the list view
+ mCursorAdapter = new SimpleCursorAdapter(
+ this, // the context of the activity
+ R.layout.detail_list_item, // the view item containing the detail widgets
+ mCursor, // the backing cursor
+ mFromColumns, // the columns in the cursor that provide the data
+ mToViews, // the views in the view item that display the data
+ 0); // flags
+
+ // Sets the ListView's backing adapter.
+ mRawContactList.setAdapter(mCursorAdapter);
+...
+@Override
+public Loader<Cursor> onCreateLoader(int id, Bundle args) {
+
+ /*
+ * Sets the columns to retrieve.
+ * RAW_CONTACT_ID is included to identify the raw contact associated with the data row.
+ * DATA1 contains the first column in the data row (usually the most important one).
+ * MIMETYPE indicates the type of data in the data row.
+ */
+ String[] projection =
+ {
+ ContactsContract.Contacts.Entity.RAW_CONTACT_ID,
+ ContactsContract.Contacts.Entity.DATA1,
+ ContactsContract.Contacts.Entity.MIMETYPE
+ };
+
+ /*
+ * Sorts the retrieved cursor by raw contact id, to keep all data rows for a single raw
+ * contact collated together.
+ */
+ String sortOrder =
+ ContactsContract.Contacts.Entity.RAW_CONTACT_ID +
+ " ASC";
+
+ /*
+ * Returns a new CursorLoader. The arguments are similar to
+ * ContentResolver.query(), except for the Context argument, which supplies the location of
+ * the ContentResolver to use.
+ */
+ return new CursorLoader(
+ getApplicationContext(), // The activity's context
+ mContactUri, // The entity content URI for a single contact
+ projection, // The columns to retrieve
+ null, // Retrieve all the raw contacts and their data rows.
+ null, //
+ sortOrder); // Sort by the raw contact ID.
+}
+</pre>
+<p>
+ Bila selesai dimuat, {@link android.app.LoaderManager} akan memicu callback ke
+ {@link android.app.LoaderManager.LoaderCallbacks#onLoadFinished(Loader, D)
+ onLoadFinished()}. Salah satu argumen masuk pada metode ini adalah
+ {@link android.database.Cursor} bersama hasil query. Dalam aplikasi Anda sendiri, Anda bisa memperoleh
+ data dari {@link android.database.Cursor} ini untuk menampilkannya atau menggunakannya lebih jauh.
+</p>
+<h3 id="Transactions">Modifikasi batch</h3>
+<p>
+ Bila memungkinkan, Anda harus menyisipkan, memperbarui, dan menghapus data dalam Penyedia Kontak dengan
+ "batch mode", dengan membuat {@link java.util.ArrayList} dari
+ objek-objek {@link android.content.ContentProviderOperation} dan memanggil
+ {@link android.content.ContentResolver#applyBatch(String, ArrayList) applyBatch()}. Karena
+ Penyedia Kontak menjalankan semua operasi dalam satu
+ {@link android.content.ContentResolver#applyBatch(String, ArrayList) applyBatch()} transaksi,
+ modifikasi Anda tidak akan pernah meninggalkan repository kontak dalam keadaan
+ tidak konsisten. Modifikasi batch juga memudahkan penyisipan kontak mentah dan data detailnya
+ sekaligus.
+</p>
+<p class="note">
+ <strong>Catatan:</strong> Untuk memodifikasi <em>satu</em> kontak mentah, pertimbangkan untuk mengirim intent ke
+ aplikasi kontak perangkat daripada menangani modifikasi dalam aplikasi Anda.
+ Cara ini dijelaskan lebih detail di bagian
+ <a href="#Intents">Pengambilan dan modifikasi dengan intent</a>.
+</p>
+<h4>Yield point</h4>
+<p>
+ Modifikasi batch yang berisi operasi dalam jumlah besar bisa memblokir proses lain,
+ yang mengakibatkan pengalaman pengguna yang buruk secara keseluruhan. Untuk menata semua modifikasi yang ingin Anda
+ jalankan dalam sesedikit mungkin daftar terpisah, sambil mencegah modifikasi dari
+ memblokir sistem, Anda harus menetapkan <strong>yield point</strong> untuk satu atau beberapa operasi.
+ Yield point (titik hasil) adalah objek {@link android.content.ContentProviderOperation} yang mengatur
+ nilai {@link android.content.ContentProviderOperation#isYieldAllowed()}-nya ke
+ <code>true</code>. Bila menemui yield point, Penyedia Kontak akan menghentikan pekerjaannya untuk
+ membiarkan proses lain berjalan dan menutup transaksi saat ini. Bila dimulai lagi, penyedia akan
+ melanjutkan dengan operasi berikutnya di {@link java.util.ArrayList} dan memulai transaksi
+ baru.
+</p>
+<p>
+ Yield point memang menyebabkan lebih dari satu transaksi per panggilan ke
+ {@link android.content.ContentResolver#applyBatch(String, ArrayList) applyBatch()}. Karena
+ itu, Anda harus menetapkan yield point pada operasi terakhir untuk satu set baris terkait.
+ Misalnya, Anda harus menetapkan yield point pada operasi terakhir di satu set yang menambahkan
+ baris kontak mentah dan baris data terkait, atau operasi terakhir untuk satu set baris yang terkait
+ dengan satu kontak.
+</p>
+<p>
+ Yield point juga merupakan unit operasi atomis. Semua akses antara dua yield point bisa
+ saja berhasil atau gagal sebagai satu unit. Jika Anda mengatur yield point, operasi
+ atomis terkecil adalah seluruh batch operasi. Jika menggunakan yield point, Anda akan mencegah
+ operasi menurunkan kinerja sistem, sekaligus memastikan subset
+ operasi bersifat atomis.
+</p>
+<h4>Acuan balik modifikasi</h4>
+<p>
+ Saat Anda menyisipkan baris kontak mentah baru dan baris data terkaitnya sebagai satu set
+ objek {@link android.content.ContentProviderOperation}, Anda harus menautkan baris data ke
+ baris kontak mentah dengan memasukkan nilai
+ {@code android.provider.BaseColumns#_ID} kontak mentah sebagai
+ nilai {@link android.provider.ContactsContract.DataColumns#RAW_CONTACT_ID}. Akan tetapi, nilai
+ ini tidak tersedia saat Anda membuat {@link android.content.ContentProviderOperation}
+ untuk baris data, karena Anda belum menerapkan
+ {@link android.content.ContentProviderOperation} untuk baris kontak mentah. Solusinya,
+ kelas {@link android.content.ContentProviderOperation.Builder} memiliki metode
+ {@link android.content.ContentProviderOperation.Builder#withValueBackReference(String, int) withValueBackReference()}.
+ Metode ini memungkinkan Anda menyisipkan atau mengubah kolom dengan
+ hasil dari operasi sebelumnya.
+</p>
+<p>
+ Metode {@link android.content.ContentProviderOperation.Builder#withValueBackReference(String, int) withValueBackReference()}
+ memiliki dua argumen:
+</p>
+ <dl>
+ <dt>
+ <code>key</code>
+ </dt>
+ <dd>
+ Kunci dari pasangan kunci-nilai. Nilai argumen ini harus berupa nama kolom
+ dalam tabel yang Anda modifikasi.
+ </dd>
+ <dt>
+ <code>previousResult</code>
+ </dt>
+ <dd>
+ Indeks berbasis 0 dari nilai pada larik
+ objek {@link android.content.ContentProviderResult} dari
+ {@link android.content.ContentResolver#applyBatch(String, ArrayList) applyBatch()}. Saat
+ operasi batch diterapkan, hasil tiap operasi akan disimpan dalam
+ larik hasil antara. Nilai <code>previousResult</code> adalah indeks
+ dari salah satu hasil ini, yang diambil dan disimpan bersama nilai <code>key</code>.
+ Cara ini memungkinkan Anda menyisipkan record kontak mentah baru dan mendapatkan kembali nilai
+ {@code android.provider.BaseColumns#_ID}-nya, lalu membuat "acuan balik" ke
+ nilai itu saat Anda menambahkan baris {@link android.provider.ContactsContract.Data}.
+ <p>
+ Seluruh larik hasil dibuat saat Anda memanggil
+ {@link android.content.ContentResolver#applyBatch(String, ArrayList) applyBatch()} untuk pertama kali,
+ dengan ukuran setara dengan ukuran {@link java.util.ArrayList} dari
+ objek {@link android.content.ContentProviderOperation} yang Anda sediakan. Akan tetapi, semua
+ elemen dalam larik hasil diatur ke <code>null</code>, dan jika Anda mencoba
+ melakukan acuan balik ke hasil untuk operasi yang belum diterapkan,
+{@link android.content.ContentProviderOperation.Builder#withValueBackReference(String, int) withValueBackReference()}
+ akan mengeluarkan {@link java.lang.Exception}.
+
+ </p>
+ </dd>
+ </dl>
+<p>
+ Cuplikan kode berikut menampilkan cara menyisipkan kontak mentah baru dan data secara batch. Cuplikan kode ini
+ menyertakan kode yang menetapkan yield point dan menggunakan acuan balik. Cuplikan kode ini adalah
+ versi perluasan dari metode<code>createContacEntry()</code>, yang merupakan bagian dari kelas
+ <code>ContactAdder</code> dalam
+ aplikasi contoh <code><a href="{@docRoot}resources/samples/ContactManager/index.html">
+ Contact Manager</a></code>.
+</p>
+<p>
+ Cuplikan pertama mengambil data kontak dari UI. Pada saat ini, pengguna sudah
+ memilih akun tempat kontak mentah baru harus ditambahkan.
+</p>
+<pre>
+// Creates a contact entry from the current UI values, using the currently-selected account.
+protected void createContactEntry() {
+ /*
+ * Gets values from the UI
+ */
+ String name = mContactNameEditText.getText().toString();
+ String phone = mContactPhoneEditText.getText().toString();
+ String email = mContactEmailEditText.getText().toString();
+
+ int phoneType = mContactPhoneTypes.get(
+ mContactPhoneTypeSpinner.getSelectedItemPosition());
+
+ int emailType = mContactEmailTypes.get(
+ mContactEmailTypeSpinner.getSelectedItemPosition());
+</pre>
+<p>
+ Cuplikan berikutnya membuat operasi untuk menyisipkan baris kontak mentah ke dalam
+ tabel {@link android.provider.ContactsContract.RawContacts}:
+</p>
+<pre>
+ /*
+ * Prepares the batch operation for inserting a new raw contact and its data. Even if
+ * the Contacts Provider does not have any data for this person, you can't add a Contact,
+ * only a raw contact. The Contacts Provider will then add a Contact automatically.
+ */
+
+ // Creates a new array of ContentProviderOperation objects.
+ ArrayList<ContentProviderOperation> ops =
+ new ArrayList<ContentProviderOperation>();
+
+ /*
+ * Creates a new raw contact with its account type (server type) and account name
+ * (user's account). Remember that the display name is not stored in this row, but in a
+ * StructuredName data row. No other data is required.
+ */
+ ContentProviderOperation.Builder op =
+ ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
+ .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, mSelectedAccount.getType())
+ .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, mSelectedAccount.getName());
+
+ // Builds the operation and adds it to the array of operations
+ ops.add(op.build());
+</pre>
+<p>
+ Berikutnya, kode akan membuat baris data untuk baris-baris nama tampilan, telepon, dan email.
+</p>
+<p>
+ Setiap objek pembangun operasi menggunakan
+ {@link android.content.ContentProviderOperation.Builder#withValueBackReference(String, int) withValueBackReference()}
+ untuk mendapatkan
+ {@link android.provider.ContactsContract.DataColumns#RAW_CONTACT_ID}. Acuan menunjuk
+ balik ke objek {@link android.content.ContentProviderResult} dari operasi pertama,
+ yang menambahkan baris kontak mentah dan mengembalikan nilai {@code android.provider.BaseColumns#_ID}
+ barunya. Hasilnya, setiap data ditautkan secara otomatis oleh
+ {@link android.provider.ContactsContract.DataColumns#RAW_CONTACT_ID}-nya
+ ke baris {@link android.provider.ContactsContract.RawContacts} baru yang memilikinya.
+</p>
+<p>
+ Objek {@link android.content.ContentProviderOperation.Builder} yang menambahkan baris email
+ diberi flag {@link android.content.ContentProviderOperation.Builder#withYieldAllowed(boolean)
+ withYieldAllowed()}, yang mengatur yield point:
+</p>
+<pre>
+ // Creates the display name for the new raw contact, as a StructuredName data row.
+ op =
+ ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
+ /*
+ * withValueBackReference sets the value of the first argument to the value of
+ * the ContentProviderResult indexed by the second argument. In this particular
+ * call, the raw contact ID column of the StructuredName data row is set to the
+ * value of the result returned by the first operation, which is the one that
+ * actually adds the raw contact row.
+ */
+ .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
+
+ // Sets the data row's MIME type to StructuredName
+ .withValue(ContactsContract.Data.MIMETYPE,
+ ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
+
+ // Sets the data row's display name to the name in the UI.
+ .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name);
+
+ // Builds the operation and adds it to the array of operations
+ ops.add(op.build());
+
+ // Inserts the specified phone number and type as a Phone data row
+ op =
+ ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
+ /*
+ * Sets the value of the raw contact id column to the new raw contact ID returned
+ * by the first operation in the batch.
+ */
+ .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
+
+ // Sets the data row's MIME type to Phone
+ .withValue(ContactsContract.Data.MIMETYPE,
+ ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
+
+ // Sets the phone number and type
+ .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phone)
+ .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, phoneType);
+
+ // Builds the operation and adds it to the array of operations
+ ops.add(op.build());
+
+ // Inserts the specified email and type as a Phone data row
+ op =
+ ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
+ /*
+ * Sets the value of the raw contact id column to the new raw contact ID returned
+ * by the first operation in the batch.
+ */
+ .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
+
+ // Sets the data row's MIME type to Email
+ .withValue(ContactsContract.Data.MIMETYPE,
+ ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
+
+ // Sets the email address and type
+ .withValue(ContactsContract.CommonDataKinds.Email.ADDRESS, email)
+ .withValue(ContactsContract.CommonDataKinds.Email.TYPE, emailType);
+
+ /*
+ * Demonstrates a yield point. At the end of this insert, the batch operation's thread
+ * will yield priority to other threads. Use after every set of operations that affect a
+ * single contact, to avoid degrading performance.
+ */
+ op.withYieldAllowed(true);
+
+ // Builds the operation and adds it to the array of operations
+ ops.add(op.build());
+</pre>
+<p>
+ Cuplikan terakhir menampilkan panggilan ke
+ {@link android.content.ContentResolver#applyBatch(String, ArrayList) applyBatch()} yang
+ menyisipkan baris-baris kontak mentah dan data baru.
+</p>
+<pre>
+ // Ask the Contacts Provider to create a new contact
+ Log.d(TAG,"Selected account: " + mSelectedAccount.getName() + " (" +
+ mSelectedAccount.getType() + ")");
+ Log.d(TAG,"Creating contact: " + name);
+
+ /*
+ * Applies the array of ContentProviderOperation objects in batch. The results are
+ * discarded.
+ */
+ try {
+
+ getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
+ } catch (Exception e) {
+
+ // Display a warning
+ Context ctx = getApplicationContext();
+
+ CharSequence txt = getString(R.string.contactCreationFailure);
+ int duration = Toast.LENGTH_SHORT;
+ Toast toast = Toast.makeText(ctx, txt, duration);
+ toast.show();
+
+ // Log exception
+ Log.e(TAG, "Exception encountered while inserting contact: " + e);
+ }
+}
+</pre>
+<p>
+ Operasi batch juga memungkinkan Anda menerapkan <strong>kontrol konkurensi optimistis</strong>,
+ sebuah metode yang menerapkan transaksi modifikasi tanpa harus mengunci repository yang mendasari.
+ Untuk menggunakan metode ini, terapkan transaksi dan periksa modifikasi lain yang
+ mungkin telah dibuat bersamaan. Jika ternyata modifikasi tidak konsisten, Anda
+ mengembalikan transaksi ke kondisi semula dan mencobanya kembali.
+</p>
+<p>
+ Kontrol konkurensi optimistis berguna untuk perangkat seluler, apabila hanya ada satu pengguna setiap
+ kalinya, dan akses simultan ke repository data jarang terjadi. Karena penguncian tidak digunakan,
+ tidak ada waktu yang terbuang untuk memasang kunci atau menunggu transaksi lain untuk melepas kunci.
+</p>
+<p>
+ Untuk menggunakan kontrol konkurensi optimistis saat memperbarui satu baris
+ {@link android.provider.ContactsContract.RawContacts}, ikuti langkah-langkah ini:
+</p>
+<ol>
+ <li>
+ Ambil kolom {@link android.provider.ContactsContract.SyncColumns#VERSION}
+ kontak mentah bersama data lain yang Anda ambil.
+ </li>
+ <li>
+ Buat sebuah objek {@link android.content.ContentProviderOperation.Builder} yang cocok untuk
+ memberlakukan batasan, dengan menggunakan metode
+ {@link android.content.ContentProviderOperation#newAssertQuery(Uri)}. Untuk URI konten,
+ gunakan {@link android.provider.ContactsContract.RawContacts#CONTENT_URI
+ RawContacts.CONTENT_URI}
+ dengan {@code android.provider.BaseColumns#_ID} kontak mentah yang ditambahkan padanya.
+ </li>
+ <li>
+ Untuk objek {@link android.content.ContentProviderOperation.Builder}, panggil
+ {@link android.content.ContentProviderOperation.Builder#withValue(String, Object)
+ withValue()} untuk membandingkan kolom {@link android.provider.ContactsContract.SyncColumns#VERSION}
+ dengan nomor versi yang baru saja Anda ambil.
+ </li>
+ <li>
+ Untuk {@link android.content.ContentProviderOperation.Builder} yang sama, panggil
+ {@link android.content.ContentProviderOperation.Builder#withExpectedCount(int)
+ withExpectedCount()} untuk memastikan bahwa hanya satu baris yang diuji oleh pernyataan ini.
+ </li>
+ <li>
+ Panggil {@link android.content.ContentProviderOperation.Builder#build()} untuk membuat
+ objek {@link android.content.ContentProviderOperation}, kemudian tambahkan objek ini sebagai
+ objek pertama di {@link java.util.ArrayList} yang Anda teruskan ke
+ {@link android.content.ContentResolver#applyBatch(String, ArrayList) applyBatch()}.
+ </li>
+ <li>
+ Terapkan transaksi batch.
+ </li>
+</ol>
+<p>
+ Jika baris kontak mentah diperbarui oleh operasi lain antara waktu Anda membaca baris dan
+ waktu Anda mencoba memodifikasinya, "asert" {@link android.content.ContentProviderOperation}
+ akan gagal, dan seluruh batch operasi akan dibatalkan. Anda nanti bisa memilih untuk mencoba ulang
+ batch atau melakukan tindakan lain.
+</p>
+<p>
+ Cuplikan berikut memperagakan cara membuat "asert"
+ {@link android.content.ContentProviderOperation} setelah membuat query satu kontak mentah yang menggunakan
+ {@link android.content.CursorLoader}:
+</p>
+<pre>
+/*
+ * The application uses CursorLoader to query the raw contacts table. The system calls this method
+ * when the load is finished.
+ */
+public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
+
+ // Gets the raw contact's _ID and VERSION values
+ mRawContactID = cursor.getLong(cursor.getColumnIndex(BaseColumns._ID));
+ mVersion = cursor.getInt(cursor.getColumnIndex(SyncColumns.VERSION));
+}
+
+...
+
+// Sets up a Uri for the assert operation
+Uri rawContactUri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, mRawContactID);
+
+// Creates a builder for the assert operation
+ContentProviderOperation.Builder assertOp = ContentProviderOperation.netAssertQuery(rawContactUri);
+
+// Adds the assertions to the assert operation: checks the version and count of rows tested
+assertOp.withValue(SyncColumns.VERSION, mVersion);
+assertOp.withExpectedCount(1);
+
+// Creates an ArrayList to hold the ContentProviderOperation objects
+ArrayList ops = new ArrayList<ContentProviderOperationg>;
+
+ops.add(assertOp.build());
+
+// You would add the rest of your batch operations to "ops" here
+
+...
+
+// Applies the batch. If the assert fails, an Exception is thrown
+try
+ {
+ ContentProviderResult[] results =
+ getContentResolver().applyBatch(AUTHORITY, ops);
+
+ } catch (OperationApplicationException e) {
+
+ // Actions you want to take if the assert operation fails go here
+ }
+</pre>
+<h3 id="Intents">Pengambilan dan modifikasi dengan intent</h3>
+<p>
+ Mengirimkan intent ke aplikasi kontak perangkat memungkinkan Anda mengakses Penyedia Kontak
+ secara tidak langsung. Intent akan memulai UI aplikasi kontak perangkat, tempat pengguna bisa
+ melakukan pekerjaan yang terkait dengan kontak. Dengan tipe akses ini, pengguna bisa:
+ <ul>
+ <li>Memilih kontak dari daftar dan meneruskannya ke aplikasi untuk pekerjaan lebih jauh.</li>
+ <li>Mengedit data kontak yang ada.</li>
+ <li>Memasukkan kontak mentah baru untuk akun mereka.</li>
+ <li>Menghapus kontak atau data kontak.</li>
+ </ul>
+<p>
+ Jika pengguna menyisipkan atau memperbarui data, Anda bisa mengumpulkan data lebih dahulu dan mengirimkannya sebagai
+ bagian dari intent.
+</p>
+<p>
+ Bila Anda menggunakan intent untuk mengakses Penyedia Kontak melalui aplikasi kontak perangkat, Anda
+ tidak perlu menulis UI atau kode sendiri untuk mengakses penyedia. Anda juga tidak harus
+ meminta izin untuk membaca dari atau menulis ke penyedia. Aplikasi kontak perangkat bisa
+ mendelegasikan izin membaca untuk kontak kepada Anda, dan karena Anda membuat modifikasi pada
+ penyedia melalui aplikasi lain, Anda tidak perlu memiliki izin menulis.
+</p>
+<p>
+ Proses umum pengiriman intent untuk mengakses penyedia dijelaskan secara detail dalam panduan
+ <a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
+ Dasar-Dasar Penyedia Konten</a> di bagian "Akses data melalui intent". Tindakan,
+ tipe MIME, dan nilai data yang Anda gunakan untuk tugas yang tersedia dirangkum dalam Tabel 4, sedangkan
+ nilai ekstra yang bisa Anda gunakan bersama
+ {@link android.content.Intent#putExtra(String, String) putExtra()} tercantum dalam
+ dokumentasi acuan untuk {@link android.provider.ContactsContract.Intents.Insert}:
+</p>
+<p class="table-caption" id="table4">
+ <strong>Tabel 4.</strong> Intent Penyedia Kontak.
+</p>
+<table style="width:75%">
+ <tr>
+ <th scope="col" style="width:10%">Tugas</th>
+ <th scope="col" style="width:5%">Tindakan</th>
+ <th scope="col" style="width:10%">Data</th>
+ <th scope="col" style="width:10%">Tipe MIME</th>
+ <th scope="col" style="width:25%">Catatan</th>
+ </tr>
+ <tr>
+ <td><strong>Memilih kontak dari daftar</strong></td>
+ <td>{@link android.content.Intent#ACTION_PICK}</td>
+ <td>
+ Salah satu dari:
+ <ul>
+ <li>
+{@link android.provider.ContactsContract.Contacts#CONTENT_URI Contacts.CONTENT_URI},
+ yang menampilkan daftar kontak.
+ </li>
+ <li>
+{@link android.provider.ContactsContract.CommonDataKinds.Phone#CONTENT_URI Phone.CONTENT_URI},
+ yang menampilkan daftar nomor telepon untuk kontak mentah.
+ </li>
+ <li>
+{@link android.provider.ContactsContract.CommonDataKinds.StructuredPostal#CONTENT_URI
+StructuredPostal.CONTENT_URI},
+ yang menampilkan daftar alamat pos untuk kontak mentah.
+ </li>
+ <li>
+{@link android.provider.ContactsContract.CommonDataKinds.Email#CONTENT_URI Email.CONTENT_URI},
+ yang menampilkan daftar alamat email untuk kontak baru.
+ </li>
+ </ul>
+ </td>
+ <td>
+ Tidak digunakan
+ </td>
+ <td>
+ Menampilkan daftar kontak mentah atau daftar data dari kontak mentah, sesuai dengan tipe
+ URI konten yang Anda sediakan.
+ <p>
+ Panggil
+ {@link android.app.Activity#startActivityForResult(Intent, int) startActivityForResult()},
+ yang menghasilkan URI konten dari baris terpilih. Bentuk URI adalah
+ URI konten tabel dengan <code>LOOKUP_ID</code> baris yang ditambahkan padanya.
+ Aplikasi kontak perangkat mendelegasikan izin membaca dan menulis untuk URI konten ini
+ selama masa pakai aktivitas Anda. Lihat panduan
+ <a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
+ Dasar-Dasar Penyedia Konten</a> untuk detail selengkapnya.
+ </p>
+ </td>
+ </tr>
+ <tr>
+ <td><strong>Menyisipkan kontak mentah baru</strong></td>
+ <td>{@link android.provider.ContactsContract.Intents.Insert#ACTION Insert.ACTION}</td>
+ <td>N/A</td>
+ <td>
+ {@link android.provider.ContactsContract.RawContacts#CONTENT_TYPE
+ RawContacts.CONTENT_TYPE}, tipe MIME untuk satu set kontak mentah.
+ </td>
+ <td>
+ Menampilkan layar <strong>Add Contact</strong> aplikasi kontak perangkat. Nilai
+ ekstra yang Anda tambahkan ke intent akan ditampilkan. Jika dikirimkan bersama
+ {@link android.app.Activity#startActivityForResult(Intent, int) startActivityForResult()},
+ URI konten dari kontak mentah yang baru saja ditambahkan akan dikembalikan ke
+ {@link android.app.Activity#onActivityResult(int, int, Intent) onActivityResult()}
+ metode callback aktivitas Anda pada argumen {@link android.content.Intent}, di
+ bidang "data". Untuk mendapatkan nilainya, panggil {@link android.content.Intent#getData()}.
+ </td>
+ </tr>
+ <tr>
+ <td><strong>Mengedit kontak</strong></td>
+ <td>{@link android.content.Intent#ACTION_EDIT}</td>
+ <td>
+ {@link android.provider.ContactsContract.Contacts#CONTENT_LOOKUP_URI} untuk
+ kontak. Aktivitas editor memungkinkan pengguna mengedit setiap data yang dikaitkan
+ dengan kontak ini.
+ </td>
+ <td>
+ {@link android.provider.ContactsContract.Contacts#CONTENT_ITEM_TYPE
+ Contacts.CONTENT_ITEM_TYPE}, kontak tunggal.</td>
+ <td>
+ Menampilkan layar Edit Contact dalam aplikasi kontak. Nilai ekstra yang Anda tambahkan
+ ke intent akan ditampilkan. Bila pengguna mengklik <strong>Done</strong> untuk menyimpan
+ hasil edit, aktivitas Anda kembali ke latar depan.
+ </td>
+ </tr>
+ <tr>
+ <td><strong>Menampilkan picker yang juga bisa menambahkan data.</strong></td>
+ <td>{@link android.content.Intent#ACTION_INSERT_OR_EDIT}</td>
+ <td>
+ N/A
+ </td>
+ <td>
+ {@link android.provider.ContactsContract.Contacts#CONTENT_ITEM_TYPE}
+ </td>
+ <td>
+ Intent ini selalu menampilkan layar picker aplikasi kontak. Pengguna bisa memilih
+ kontak untuk diedit, atau menambahkan kontak baru. Layar edit atau layar tambah
+ akan muncul, sesuai dengan pilihan pengguna, dan data ekstra yang Anda kirimkan dalam intent
+ akan ditampilkan. Jika aplikasi Anda menampilkan data kontak seperti email atau nomor telepon, gunakan
+ intent ini untuk memungkinkan pengguna menambahkan data ke kontak yang ada.
+
+ <p class="note">
+ <strong>Catatan:</strong> Tidak perlu mengirimkan nilai nama dalam ekstra intent ini,
+ karena pengguna selalu mengambil nama yang ada atau menambahkan nama baru. Lebih-lebih,
+ jika Anda mengirimkan nama, dan pengguna memilih untuk melakukan edit, aplikasi kontak akan
+ menampilkan nama yang Anda kirimkan, yang menimpa nilai sebelumnya. Jika pengguna tidak
+ menyadari hal ini dan menyimpan hasil edit, nilai lama akan hilang.
+ </p>
+ </td>
+ </tr>
+</table>
+<p>
+ Aplikasi kontak perangkat tidak memperbolehkan Anda menghapus kontak mentah atau datanya dengan
+ intent. Sebagai gantinya, untuk menghapus kontak mentah, gunakan
+ {@link android.content.ContentResolver#delete(Uri, String, String[]) ContentResolver.delete()}
+ atau {@link android.content.ContentProviderOperation#newDelete(Uri)
+ ContentProviderOperation.newDelete()}.
+</p>
+<p>
+ Cuplikan berikut menampilkan cara menyusun dan mengirimkan intent yang menyisipkan kontak dan data
+ mentah baru:
+</p>
+<pre>
+// Gets values from the UI
+String name = mContactNameEditText.getText().toString();
+String phone = mContactPhoneEditText.getText().toString();
+String email = mContactEmailEditText.getText().toString();
+
+String company = mCompanyName.getText().toString();
+String jobtitle = mJobTitle.getText().toString();
+
+// Creates a new intent for sending to the device's contacts application
+Intent insertIntent = new Intent(ContactsContract.Intents.Insert.ACTION);
+
+// Sets the MIME type to the one expected by the insertion activity
+insertIntent.setType(ContactsContract.RawContacts.CONTENT_TYPE);
+
+// Sets the new contact name
+insertIntent.putExtra(ContactsContract.Intents.Insert.NAME, name);
+
+// Sets the new company and job title
+insertIntent.putExtra(ContactsContract.Intents.Insert.COMPANY, company);
+insertIntent.putExtra(ContactsContract.Intents.Insert.JOB_TITLE, jobtitle);
+
+/*
+ * Demonstrates adding data rows as an array list associated with the DATA key
+ */
+
+// Defines an array list to contain the ContentValues objects for each row
+ArrayList<ContentValues> contactData = new ArrayList<ContentValues>();
+
+
+/*
+ * Defines the raw contact row
+ */
+
+// Sets up the row as a ContentValues object
+ContentValues rawContactRow = new ContentValues();
+
+// Adds the account type and name to the row
+rawContactRow.put(ContactsContract.RawContacts.ACCOUNT_TYPE, mSelectedAccount.getType());
+rawContactRow.put(ContactsContract.RawContacts.ACCOUNT_NAME, mSelectedAccount.getName());
+
+// Adds the row to the array
+contactData.add(rawContactRow);
+
+/*
+ * Sets up the phone number data row
+ */
+
+// Sets up the row as a ContentValues object
+ContentValues phoneRow = new ContentValues();
+
+// Specifies the MIME type for this data row (all data rows must be marked by their type)
+phoneRow.put(
+ ContactsContract.Data.MIMETYPE,
+ ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE
+);
+
+// Adds the phone number and its type to the row
+phoneRow.put(ContactsContract.CommonDataKinds.Phone.NUMBER, phone);
+
+// Adds the row to the array
+contactData.add(phoneRow);
+
+/*
+ * Sets up the email data row
+ */
+
+// Sets up the row as a ContentValues object
+ContentValues emailRow = new ContentValues();
+
+// Specifies the MIME type for this data row (all data rows must be marked by their type)
+emailRow.put(
+ ContactsContract.Data.MIMETYPE,
+ ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE
+);
+
+// Adds the email address and its type to the row
+emailRow.put(ContactsContract.CommonDataKinds.Email.ADDRESS, email);
+
+// Adds the row to the array
+contactData.add(emailRow);
+
+/*
+ * Adds the array to the intent's extras. It must be a parcelable object in order to
+ * travel between processes. The device's contacts app expects its key to be
+ * Intents.Insert.DATA
+ */
+insertIntent.putParcelableArrayListExtra(ContactsContract.Intents.Insert.DATA, contactData);
+
+// Send out the intent to start the device's contacts app in its add contact activity.
+startActivity(insertIntent);
+</pre>
+<h3 id="DataIntegrity">Integritas data</h3>
+<p>
+ Karena repository kontak berisi data penting dan sensitif yang diharapkan pengguna agar
+ benar dan terbaru. Penyedia Kontak memiliki aturan yang didefinisikan dengan baik demi integritas data. Anda
+ bertanggung jawab untuk mematuhi aturan ini saat memodifikasi data kontak. Aturan-aturan penting itu
+ dicantumkan di sini:
+</p>
+<dl>
+ <dt>
+ Selalu tambahkan baris {@link android.provider.ContactsContract.CommonDataKinds.StructuredName}
+ untuk setiap baris {@link android.provider.ContactsContract.RawContacts} yang Anda tambahkan.
+ </dt>
+ <dd>
+ Baris {@link android.provider.ContactsContract.RawContacts} tanpa
+ baris {@link android.provider.ContactsContract.CommonDataKinds.StructuredName} dalam
+ tabel {@link android.provider.ContactsContract.Data} bisa menyebabkan masalah selama
+ agregasi.
+ </dd>
+ <dt>
+ Selalu tautkan baris {@link android.provider.ContactsContract.Data} baru ke baris
+ {@link android.provider.ContactsContract.RawContacts} induknya.
+ </dt>
+ <dd>
+ Baris {@link android.provider.ContactsContract.Data} yang tidak ditautkan ke
+ {@link android.provider.ContactsContract.RawContacts} tidak akan terlihat dalam aplikasi kontak
+ perangkat, dan itu bisa menimbulkan masalah dengan adaptor sinkronisasi.
+ </dd>
+ <dt>
+ Ubah data hanya untuk kontak mentah yang Anda miliki.
+ </dt>
+ <dd>
+ Ingatlah bahwa Penyedia Kontak biasanya mengelola data dari berbagai
+ tipe akun/layanan online. Anda harus memastikan bahwa aplikasi Anda hanya memodifikasi
+ atau menghapus data untuk baris milik Anda, dan bahwa aplikasi hanya menyisipkan data dengan
+ tipe akun dan nama yang Anda kontrol.
+ </dd>
+ <dt>
+ Selalu gunakan konstanta yang didefinisikan dalam {@link android.provider.ContactsContract} dan
+ subkelasnya untuk otoritas, URI konten, URI path, nama kolom, tipe MIME, dan
+ nilai {@link android.provider.ContactsContract.CommonDataKinds.CommonColumns#TYPE}.
+ </dt>
+ <dd>
+ Menggunakan konstanta ini membantu Anda menghindari kesalahan. Anda juga akan diberi tahu dengan peringatan
+ compiler jika salah satu konstanta sudah usang.
+ </dd>
+</dl>
+<h3 id="CustomData">Baris data custom</h3>
+<p>
+ Dengan membuat dan menggunakan tipe MIME custom sendiri, Anda bisa menyisipkan, mengedit, menghapus, dan mengambil
+ baris data sendiri dalam tabel {@link android.provider.ContactsContract.Data}. Baris Anda
+ dibatasi untuk menggunakan kolom yang didefinisikan dalam
+ {@link android.provider.ContactsContract.DataColumns}, meskipun Anda bisa memetakan nama kolom
+ bertipe spesifik sendiri ke nama kolom default. Dalam aplikasi kontak perangkat,
+ data untuk baris Anda ditampilkan, tetapi tidak bisa diedit atau dihapus, dan pengguna tidak bisa menambahkan
+ data lain. Untuk memudahkan pengguna mengubah baris data custom Anda, Anda harus menyediakan aktivitas
+ editor dalam aplikasi Anda sendiri.
+</p>
+<p>
+ Untuk menampilkan data custom, sediakan file <code>contacts.xml</code> berisi elemen
+ <code><ContactsAccountType></code> dan satu atau beberapa elemen anak
+ <code><ContactsDataKind></code>. Hal ini dijelaskan lebih detail di
+ bagian <a href="#SocialStreamDataKind"><code><ContactsDataKind> element</code></a>.
+</p>
+<p>
+ Untuk mengetahui selengkapnya tentang tipe MIME custom, bacalah panduan
+ <a href="{@docRoot}guide/topics/providers/content-provider-creating.html">
+ Membuat Penyedia Konten</a>.
+</p>
+<h2 id="SyncAdapters">Adaptor Sinkronisasi Penyedia Kontak</h2>
+<p>
+ Penyedia Kontak didesain khusus untuk menangani <strong>sinkronisasi</strong>
+ data kontak antara perangkat dan layanan online. Hal ini memungkinkan pengguna mengunduh
+ data yang ada dari perangkat baru dan mengunggah data yang ada ke akun baru.
+ Sinkronisasi juga memastikan bahwa pengguna memiliki data terbaru, apa pun
+ sumber penambahan dan perubahan itu. Keuntungan lain dari sinkronisasi adalah membuat
+ data kontak tersedia sekalipun perangkat tidak terhubung ke jaringan.
+</p>
+<p>
+ Walaupun Anda bisa menerapkan sinkronisasi dengan berbagai cara, sistem Android menyediakan
+ kerangka kerja sinkronisasi plug-in yang mengotomatiskan tugas-tugas berikut:
+ <ul>
+
+ <li>
+ Memeriksa ketersediaan jaringan.
+ </li>
+ <li>
+ Menjadwalkan dan menjalankan sinkronisasi, berdasarkan preferensi pengguna.
+ </li>
+ <li>
+ Memulai kembali sinkronisasi yang telah berhenti.
+ </li>
+ </ul>
+<p>
+ Untuk menggunakan kerangka kerja ini, Anda harus menyediakan plug-in adaptor sinkronisasi. Setiap adaptor sinkronisasi bersifat unik bagi
+ layanan dan penyedia konten, tetapi mampu menangani beberapa nama akun untuk layanan yang sama. Kerangka
+ kerja ini juga memungkinkan beberapa adaptor sinkronisasi untuk layanan dan penyedia yang sama.
+</p>
+<h3 id="SyncClassesFiles">Kelas dan file adaptor sinkronisasi</h3>
+<p>
+ Anda mengimplementasikan adaptor sinkronisasi sebagai subkelas
+ {@link android.content.AbstractThreadedSyncAdapter} dan menginstalnya sebagai bagian dari aplikasi
+ Android. Sistem akan mempelajari adaptor sinkronisasi dari elemen-elemen di manifes
+ aplikasi Anda dan dari file XML khusus yang ditunjuk oleh manifes. File XML mendefinisikan
+ tipe akun untuk layanan online dan otoritas untuk penyedia konten, yang bersama-sama
+ mengidentifikasi adaptor secara unik. Adaptor sinkronisasi tidak menjadi aktif hingga pengguna menambahkan
+ akun untuk tipe akun adaptor sinkronisasi dan memungkinkan sinkronisasi untuk penyedia
+ konten yang disinkronkan dengan adaptor sinkronisasi. Pada saat itu, sistem mulai mengelola adaptor,
+ memanggilnya seperlunya untuk menyinkronkan antara penyedia konten dan server.
+</p>
+<p class="note">
+ <strong>Catatan:</strong> Menggunakan tipe akun sebagai bagian dari identifikasi adaptor sinkronisasi memungkinkan
+ sistem mendeteksi dan menghimpun adaptor-adaptor sinkronisasi yang mengakses berbagai layanan dari
+ organisasi yang sama. Misalnya, adaptor sinkronisasi untuk semua layanan online Google semuanya memiliki tipe akun
+ yang sama <code>com.google</code>. Bila pengguna menambahkan akun Google ke perangkatnya, semua
+ adaptor sinkronisasi yang terinstal untuk layanan Google akan dicantumkan bersama; setiap adaptor sinkronisasi
+ yang tercantum akan menyinkronkan diri dengan berbagai penyedia konten pada perangkat.
+</p>
+<p>
+ Karena sebagian besar layanan mengharuskan pengguna untuk memeriksa identitas sebelum mengakses
+ data, sistem Android menawarkan kerangka kerja autentikasi yang serupa dengan, dan sering kali
+ digunakan bersama, kerangka kerja adaptor sinkronisasi. Kerangka kerja autentikasi menggunakan
+ autentikator plug-in yang merupakan subkelas
+ {@link android.accounts.AbstractAccountAuthenticator}. Autentikator memeriksa
+ identitas pengguna dalam langkah-langkah berikut:
+ <ol>
+ <li>
+ Mengumpulkan nama pengguna, kata sandi, atau informasi serupa (
+ <strong>kredensial</strong> pengguna).
+ </li>
+ <li>
+ Mengirimkan kredensial ke layanan
+ </li>
+ <li>
+ Memeriksa balasan layanan.
+ </li>
+ </ol>
+<p>
+ Jika layanan menerima kredensial, autentikator bisa
+ menyimpan kredensial itu untuk digunakan nanti. Karena kerangka kerja autentikator plug-in,
+ {@link android.accounts.AccountManager} bisa menyediakan akses ke setiap token autentikasi yang didukung suatu autentikator
+ dan dipilihnya untuk diekspos, seperti token autentikasi OAuth2.
+</p>
+<p>
+ Meskipun autentikasi tidak diharuskan, sebagian besar layanan kontak menggunakannya.
+ Akan tetapi, Anda tidak wajib menggunakan kerangka kerja autentikasi Android untuk melakukan autentikasi.
+</p>
+<h3 id="SyncAdapterImplementing">Implementasi adaptor sinkronisasi</h3>
+<p>
+ Untuk mengimplementasikan adaptor sinkronisasi bagi Penyedia Kontak, perlu Anda memulai dengan membuat
+ aplikasi Android yang berisi elemen-elemen berikut:
+</p>
+ <dl>
+ <dt>
+ Komponen {@link android.app.Service} yang merespons permintaan sistem untuk
+ mengikat ke adaptor sinkronisasi.
+ </dt>
+ <dd>
+ Bila sistem ingin menjalankan sinkronisasi, sistem akan memanggil metode
+ {@link android.app.Service#onBind(Intent) onBind()} layanan untuk mendapatkan
+ {@link android.os.IBinder} bagi adaptor sinkronisasi. Hal ini memungkinkan sistem melakukan
+ panggilan lintas proses ke metode adaptor.
+ <p>
+ Dalam contoh aplikasi <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">
+ Sample Sync Adapter</a>, nama kelas layanan ini adalah
+ <code>com.example.android.samplesync.syncadapter.SyncService</code>.
+ </p>
+ </dd>
+ <dt>
+ Adaptor sinkronisasi yang sesungguhnya, diimplementasikan sebagai subkelas konkret dari
+ {@link android.content.AbstractThreadedSyncAdapter}.
+ </dt>
+ <dd>
+ Kelas ini melakukan pekerjaan mengunduh data dari server, mengunggah data ke
+ perangkat, dan menyelesaikan konflik. Pekerjaan utama adaptor
+ diselesaikan dengan metode {@link android.content.AbstractThreadedSyncAdapter#onPerformSync(
+ Account, Bundle, String, ContentProviderClient, SyncResult)
+ onPerformSync()}. Instance kelas ini harus dibuat sebagai singleton.
+ <p>
+ Dalam contoh aplikasi <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">
+ Sample Sync Adapter</a>, adaptor sinkronisasi didefinisikan dalam kelas
+ <code>com.example.android.samplesync.syncadapter.SyncAdapter</code>.
+ </p>
+ </dd>
+ <dt>
+ Subkelas {@link android.app.Application}.
+ </dt>
+ <dd>
+ Kelas ini berfungsi sebagai pabrik untuk singleton adaptor sinkronisasi. Gunakan
+ metode {@link android.app.Application#onCreate()} untuk membuat instance adaptor sinkronisasi , dan
+ menyediakan metode "getter" statis untuk mengembalikan singleton ke
+ metode {@link android.app.Service#onBind(Intent) onBind()} dari layanan
+ adaptor sinkronisasi.
+ </dd>
+ <dt>
+ <strong>Opsional:</strong> Komponen {@link android.app.Service} yang merespons
+ permintaan dari sistem untuk autentikasi pengguna.
+ </dt>
+ <dd>
+ {@link android.accounts.AccountManager} memulai layanan ini untuk memulai proses
+ autentikasi. Metode {@link android.app.Service#onCreate()} layanan membuat instance
+ objek autentikator. Bila sistem ingin mengautentikasi akun pengguna untuk
+ adaptor sinkronisasi aplikasi, sistem akan memanggil metode
+{@link android.app.Service#onBind(Intent) onBind()} layanan guna mendapatkan
+ {@link android.os.IBinder} bagi autentikator. Hal ini memungkinkan sistem melakukan
+ panggilan lintas proses ke metode autentikator.
+ <p>
+ Dalam contoh aplikasi <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">
+ Sample Sync Adapter</a>, nama kelas layanan ini adalah
+ <code>com.example.android.samplesync.authenticator.AuthenticationService</code>.
+ </p>
+ </dd>
+ <dt>
+ <strong>Opsional:</strong> Subkelas konkret
+ {@link android.accounts.AbstractAccountAuthenticator} yang menangani permintaan
+ autentikasi.
+ </dt>
+ <dd>
+ Kelas ini menyediakan metode yang dipicu {@link android.accounts.AccountManager}
+ untuk mengautentikasi kredensial pengguna dengan layanan. Detail
+ proses autentikasi sangat bervariasi, berdasarkan teknologi server yang digunakan. Anda harus
+ mengacu ke dokumentasi bagi perangkat lunak server untuk mengetahui selengkapnya tentang autentikasi.
+ <p>
+ Dalam contoh aplikasi <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">
+ Sample Sync Adapter</a>, autentikator didefinisikan dalam kelas
+ <code>com.example.android.samplesync.authenticator.Authenticator</code>.
+ </p>
+ </dd>
+ <dt>
+ File XML yang mendefinisikan adaptor sinkronisasi dan autentikator bagi sistem.
+ </dt>
+ <dd>
+ Komponen-komponen layanan adaptor sinkronisasi dan autentikator
+ didefinisikan dalam elemen-elemen
+<code><<a href="{@docRoot}guide/topics/manifest/service-element.html">service</a>></code>
+ di manifes aplikasi. Elemen-elemen ini
+ berisi
+<code><<a href="{@docRoot}guide/topics/manifest/meta-data-element.html">meta-data</a>></code>
+elemen anak yang menyediakan data tertentu ke
+ sistem:
+ <ul>
+ <li>
+ Elemen
+<code><<a href="{@docRoot}guide/topics/manifest/meta-data-element.html">meta-data</a>></code>
+ untuk layanan adaptor sinkronisasi menunjuk ke
+ file XML <code>res/xml/syncadapter.xml</code>. Pada gilirannya, file ini mendefinisikan
+ URI untuk layanan web yang akan disinkronkan dengan Penyedia Kontak,
+ dan tipe akun untuk layanan web.
+ </li>
+ <li>
+ <strong>Opsional:</strong> Elemen
+<code><<a href="{@docRoot}guide/topics/manifest/meta-data-element.html">meta-data</a>></code>
+ untuk autentikator menunjuk ke file XML
+ <code>res/xml/authenticator.xml</code>. Pada gilirannya, file ini menetapkan
+ tipe akun yang didukung autentikator, serta sumber daya UI yang
+ muncul selama proses autentikasi. Tipe akun yang ditetapkan dalam elemen ini
+ harus sama dengan tipe akun yang ditetapkan untuk adaptor
+ sinkronisasi.
+ </li>
+ </ul>
+ </dd>
+ </dl>
+<h2 id="SocialStream">Data Aliran Sosial</h2>
+<p>
+ Tabel-tabel {@code android.provider.ContactsContract.StreamItems} dan
+ {@code android.provider.ContactsContract.StreamItemPhotos}
+ mengelola data yang masuk dari jaringan sosial. Anda bisa menulis adaptor sinkronisasi yang menambahkan data aliran
+ dari jaringan Anda sendiri ke tabel-tabel ini, atau Anda bisa membaca data aliran dari tabel-tabel ini dan
+ menampilkannya dalam aplikasi sendiri, atau keduanya. Dengan fitur-fitur ini, layanan dan aplikasi
+ jaringan sosial Anda bisa diintegrasikan ke dalam pengalaman jaringan sosial Android.
+</p>
+<h3 id="StreamText">Teks aliran sosial</h3>
+<p>
+ Item aliran selalu dikaitkan dengan kontak mentah.
+ {@code android.provider.ContactsContract.StreamItemsColumns#RAW_CONTACT_ID} menautkan ke
+ nilai <code>_ID</code> untuk kontak mentah. Tipe akun dan nama akun kontak
+ mentah juga disimpan dalam baris item aliran.
+</p>
+<p>
+ Simpanlah data dari aliran Anda dalam kolom-kolom berikut:
+</p>
+<dl>
+ <dt>
+ {@code android.provider.ContactsContract.StreamItemsColumns#ACCOUNT_TYPE}
+ </dt>
+ <dd>
+ <strong>Diperlukan.</strong> Tipe akun pengguna untuk kontak mentah yang dikaitkan dengan
+ item aliran ini. Ingatlah untuk mengatur nilai ini saat Anda menyisipkan item aliran.
+ </dd>
+ <dt>
+ {@code android.provider.ContactsContract.StreamItemsColumns#ACCOUNT_NAME}
+ </dt>
+ <dd>
+ <strong>Diperlukan.</strong> Nama akun pengguna untuk kontak mentah yang dikaitkan dengan
+ item aliran ini. Ingatlah untuk mengatur nilai ini saat Anda menyisipkan item aliran.
+ </dd>
+ <dt>
+ Kolom identifier
+ </dt>
+ <dd>
+ <strong>Diperlukan.</strong> Anda harus memasukkan kolom identifier berikut saat
+ menyisipkan item aliran:
+ <ul>
+ <li>
+ {@code android.provider.ContactsContract.StreamItemsColumns#CONTACT_ID}:
+ Nilai {@code android.provider.BaseColumns#_ID} kontak yang dikaitkan dengan item aliran
+ ini.
+ </li>
+ <li>
+ {@code android.provider.ContactsContract.StreamItemsColumns#CONTACT_LOOKUP_KEY}:
+ Nilai {@code android.provider.ContactsContract.ContactsColumns#LOOKUP_KEY}
+ kontak yang dikaitkan dengan item aliran ini.
+ </li>
+ <li>
+ {@code android.provider.ContactsContract.StreamItemsColumns#RAW_CONTACT_ID}:
+ Nilai {@code android.provider.BaseColumns#_ID} kontak mentah yang dikaitkan dengan item aliran
+ ini.
+ </li>
+ </ul>
+ </dd>
+ <dt>
+ {@code android.provider.ContactsContract.StreamItemsColumns#COMMENTS}
+ </dt>
+ <dd>
+ Opsional. Menyimpan informasi rangkuman yang bisa Anda tampilkan di awal item aliran.
+ </dd>
+ <dt>
+ {@code android.provider.ContactsContract.StreamItemsColumns#TEXT}
+ </dt>
+ <dd>
+ Teks item aliran, baik konten yang diposting oleh sumber item,
+ maupun keterangan beberapa tindakan yang menghasilkan item aliran. Kolom ini bisa berisi
+ sembarang gambar sumber daya pemformatan dan tertanam yang bisa dirender oleh
+ {@link android.text.Html#fromHtml(String) fromHtml()}. Penyedia bisa memotong atau
+ menghapus konten yang panjang, tetapi penyedia akan mencoba menghindari memutus tag.
+ </dd>
+ <dt>
+ {@code android.provider.ContactsContract.StreamItemsColumns#TIMESTAMP}
+ </dt>
+ <dd>
+ String teks berisi waktu item aliran yang disisipkan atau diperbarui, berupa
+ <em>milidetik</em> sejak waktu patokan. Aplikasi yang menyisipkan atau memperbarui item aliran
+ bertanggung jawab memelihara kolom ini; aplikasi tidak dipelihara secara otomatis oleh
+ Penyedia Kontak.
+ </dd>
+</dl>
+<p>
+ Untuk menampilkan informasi pengidentifikasi item aliran Anda, gunakan
+ {@code android.provider.ContactsContract.StreamItemsColumns#RES_ICON},
+ {@code android.provider.ContactsContract.StreamItemsColumns#RES_LABEL}, dan
+ {@code android.provider.ContactsContract.StreamItemsColumns#RES_PACKAGE} untuk menautkan ke sumber daya
+ dalam aplikasi Anda.
+</p>
+<p>
+ Tabel {@code android.provider.ContactsContract.StreamItems} juga berisi kolom-kolom
+ {@code android.provider.ContactsContract.StreamItemsColumns#SYNC1} hingga
+ {@code android.provider.ContactsContract.StreamItemsColumns#SYNC4} untuk penggunaan eksklusif oleh
+ adaptor sinkronisasi.
+</p>
+<h3 id="StreamPhotos">Foto aliran sosial</h3>
+<p>
+ Tabel {@code android.provider.ContactsContract.StreamItemPhotos} menyimpan foto-foto yang dikaitkan
+ dengan item aliran. Kolom
+{@code android.provider.ContactsContract.StreamItemPhotosColumns#STREAM_ITEM_ID} tabel ini
+ menautkan ke nilai dalam kolom {@code android.provider.BaseColumns#_ID}
+ tabel {@code android.provider.ContactsContract.StreamItems}. Acuan foto disimpan dalam
+ tabel pada kolom-kolom ini:
+</p>
+<dl>
+ <dt>
+ Kolom {@code android.provider.ContactsContract.StreamItemPhotos#PHOTO} (BLOB).
+ </dt>
+ <dd>
+ Representasi biner foto, yang diubah ukurannya oleh penyedia untuk penyimpanan dan tampilan.
+ Kolom ini tersedia untuk kompatibilitas ke belakang dengan versi Penyedia Kontak
+ sebelumnya yang menggunakannya untuk menyimpan foto. Akan tetapi, pada versi saat ini
+ Anda tidak boleh menggunakan kolom ini untuk menyimpan foto. Sebagai gantinya, gunakan
+ {@code android.provider.ContactsContract.StreamItemPhotosColumns#PHOTO_FILE_ID} atau
+ {@code android.provider.ContactsContract.StreamItemPhotosColumns#PHOTO_URI} (keduanya
+ dijelaskan dalam poin-poin berikut) untuk menyimpan foto di file. Kolom ini sekarang
+ berisi thumbnail foto, yang tersedia untuk dibaca.
+ </dd>
+ <dt>
+ {@code android.provider.ContactsContract.StreamItemPhotosColumns#PHOTO_FILE_ID}
+ </dt>
+ <dd>
+ Identifier numerik foto untuk kontak mentah. Tambahkan nilai ini ke konstanta
+ {@link android.provider.ContactsContract.DisplayPhoto#CONTENT_URI DisplayPhoto.CONTENT_URI}
+ untuk mendapatkan URI konten yang menunjuk ke satu file foto, kemudian panggil
+ {@link android.content.ContentResolver#openAssetFileDescriptor(Uri, String)
+ openAssetFileDescriptor()} untuk mendapatkan handle ke file foto.
+ </dd>
+ <dt>
+ {@code android.provider.ContactsContract.StreamItemPhotosColumns#PHOTO_URI}
+ </dt>
+ <dd>
+ URI konten menunjuk langsung ke file foto untuk foto yang diwakili oleh baris ini.
+ Panggillah {@link android.content.ContentResolver#openAssetFileDescriptor(Uri, String)
+ openAssetFileDescriptor()} dengan URI ini untuk mendapatkan handle ke file foto.
+ </dd>
+</dl>
+<h3 id="SocialStreamTables">Menggunakan tabel aliran sosial</h3>
+<p>
+ Tabel-tabel ini sama fungsinya dengan tabel-tabel utama lainnya dalam Penyedia Kontak, kecuali:
+</p>
+ <ul>
+ <li>
+ Tabel-tabel ini memerlukan izin akses tambahan. Untuk membaca dari tabel, aplikasi Anda
+ harus memiliki izin {@code android.Manifest.permission#READ_SOCIAL_STREAM}. Untuk memodifikasi
+ tabel, aplikasi Anda harus memiliki izin
+ {@code android.Manifest.permission#WRITE_SOCIAL_STREAM}.
+ </li>
+ <li>
+ Untuk tabel {@code android.provider.ContactsContract.StreamItems}, jumlah baris
+ yang disimpan bagi setiap kontak mentah adalah terbatas. Setelah batasnya tercapai,
+ Penyedia Kontak akan membuat ruang untuk baris item aliran baru dengan menghapus secara otomatis
+ baris yang memiliki
+ {@code android.provider.ContactsContract.StreamItemsColumns#TIMESTAMP} terlama. Untuk mendapatkan
+ batas, keluarkan query ke URI konten
+ {@code android.provider.ContactsContract.StreamItems#CONTENT_LIMIT_URI}. Anda bisa membiarkan
+ semua argumen selain URI konten diatur ke <code>null</code>. Query
+ menghasilkan sebuah Kursor yang berisi baris tunggal, dengan kolom tunggal
+ {@code android.provider.ContactsContract.StreamItems#MAX_ITEMS}.
+ </li>
+ </ul>
+
+<p>
+ Kelas {@code android.provider.ContactsContract.StreamItems.StreamItemPhotos} mendefinisikan
+ subtabel {@code android.provider.ContactsContract.StreamItemPhotos} yang berisi
+ baris foto untuk satu item aliran.
+</p>
+<h3 id="SocialStreamInteraction">Interaksi aliran sosial</h3>
+<p>
+ Data aliran sosial yang dikelola oleh Penyedia Kontak, bersama aplikasi kontak
+ perangkat, menawarkan cara andal untuk menghubungkan sistem jaringan sosial Anda
+ dengan kontak yang ada. Tersedia fitur-fitur berikut:
+</p>
+ <ul>
+ <li>
+ Dengan menyinkronkan layanan jaringan sosial ke Penyedia Kontak dengan adaptor
+ sinkronisasi, Anda bisa mengambil aktivitas terbaru untuk kontak pengguna dan menyimpannya dalam tabel-tabel
+ {@code android.provider.ContactsContract.StreamItems} dan
+ {@code android.provider.ContactsContract.StreamItemPhotos} untuk digunakan nanti.
+ </li>
+ <li>
+ Selain sinkronisasi rutin, Anda bisa memicu adaptor sinkronisasi agar mengambil
+ data tambahan bila pengguna memilih sebuah kontak untuk ditampilkan. Hal ini memungkinkan adaptor sinkronisasi Anda
+ mengambil foto resolusi tinggi dan item aliran terbaru untuk kontak.
+ </li>
+ <li>
+ Dengan mendaftarkan pemberitahuan pada aplikasi kontak perangkat dan Penyedia Kontak,
+ Anda bisa <em>menerima</em> intent saat kontak ditampilkan, dan pada saat itu
+ memperbarui status kontak dari layanan Anda. Pendekatan ini mungkin lebih cepat dan menggunakan
+ bandwidth lebih sedikit daripada melakukan sinkronisasi penuh dengan adaptor sinkronisasi.
+ </li>
+ <li>
+ Pengguna bisa menambahkan kontak ke layanan jaringan sosial Anda sambil melihat kontak
+ dalam aplikasi kontak perangkat. Anda mengaktifkannya dengan fitur "invite contact",
+ yang Anda aktifkan dengan kombinasi aktivitas yang menambahkan kontak yang ada ke jaringan
+ Anda, dan file XML yang menyediakan aplikasi kontak perangkat dan
+ Penyedia Kontak dengan detail aplikasi Anda.
+ </li>
+ </ul>
+<p>
+ Sinkronisasi rutin item aliran dengan Penyedia Kontak sama dengan
+ sinkronisasi lainnya. Untuk mengetahui selengkapnya tentang sinkronisasi, lihat bagian
+ <a href="#SyncAdapters">Adaptor Sinkronisasi Penyedia Kontak</a>. Mendaftarkan pemberitahuan dan
+ mengundang kontak dibahas dalam dua bagian berikutnya.
+</p>
+<h4>Pendaftaran untuk menangani tampilan jaringan sosial</h4>
+<p>
+ Untuk mendaftarkan adaptor sinkronisasi agar menerima pemberitahuan saat pengguna menampilkan kontak
+ yang dikelola oleh adaptor sinkronisasi Anda:
+</p>
+<ol>
+ <li>
+ Buat file yang bernama <code>contacts.xml</code> dalam direktori <code>res/xml/</code>
+ proyek Anda. Jika sudah memiliki file ini, langkah ini boleh dilewati.
+ </li>
+ <li>
+ Dalam file ini, tambahkan elemen
+<code><ContactsAccountType xmlns:android="http://schemas.android.com/apk/res/android"></code>.
+ Jika elemen ini sudah ada, langkah ini boleh dilewati.
+ </li>
+ <li>
+ Untuk mendaftarkan layanan yang diberitahukan saat pengguna membuka halaman detail kontak dalam
+ aplikasi kontak perangkat, tambahkan atribut
+ <code>viewContactNotifyService="<em>serviceclass</em>"</code> ke elemen, dengan
+ <code><em>serviceclass</em></code> sebagai nama kelas mutlak (fully qualified) dari layanan
+ yang seharusnya menerima intent dari aplikasi kontak perangkat. Untuk layanan
+ notifier, gunakan kelas yang memperluas {@link android.app.IntentService}, guna memudahkan layanan
+ untuk menerima intent. Data dalam intent yang masuk berisi URI konten dari kontak
+ mentah yang diklik pengguna. Untuk layanan notifier, Anda bisa mengikatnya ke kemudian memanggil
+ adaptor sinkronisasi Anda untuk memperbarui data bagi kontak mentah.
+ </li>
+</ol>
+<p>
+ Untuk mendaftarkan aktivitas agar dipanggil saat pengguna mengklik item aliran atau foto atau keduanya:
+</p>
+<ol>
+ <li>
+ Buat file yang bernama <code>contacts.xml</code> dalam direktori <code>res/xml/</code>
+ proyek Anda. Jika sudah memiliki file ini, langkah ini boleh dilewati.
+ </li>
+ <li>
+ Dalam file ini, tambahkan elemen
+<code><ContactsAccountType xmlns:android="http://schemas.android.com/apk/res/android"></code>.
+ Jika elemen ini sudah ada, langkah ini boleh dilewati.
+ </li>
+ <li>
+ Untuk mendaftarkan salah satu aktivitas Anda guna menangani klik oleh pengguna pada item aliran dalam
+ aplikasi kontak perangkat, tambahkan atribut
+ <code>viewStreamItemActivity="<em>activityclass</em>"</code> ke elemen, dengan
+ <code><em>activityclass</em></code> sebagai nama kelas mutlak (fully-qualified) dari aktivitas
+ yang harus menerima intent dari aplikasi kontak perangkat.
+ </li>
+ <li>
+ Untuk mendaftarkan salah satu aktivitas Anda guna menangani klik oleh pengguna pada foto aliran dalam
+ aplikasi kontak perangkat, tambahkan atribut
+ <code>viewStreamItemPhotoActivity="<em>activityclass</em>"</code> ke elemen, dengan
+ <code><em>activityclass</em></code> adalah kelas nama mutlak aktivitas
+ yang harus menerima intent dari aplikasi kontak perangkat.
+ </li>
+</ol>
+<p>
+ Elemen <code><ContactsAccountType></code> dijelaskan lebih detail di
+ bagian <a href="#SocialStreamAcctType">Elemen <ContactsAccountType></a>.
+</p>
+<p>
+ Intent yang masuk berisi URI konten dari materi atau foto yang diklik pengguna.
+ Untuk mendapatkan aktivitas terpisah bagi item teks dan foto, gunakan kedua atribut dalam file yang sama.
+</p>
+<h4>Berinteraksi dengan layanan jaringan sosial Anda</h4>
+<p>
+ Pengguna tidak harus meninggalkan aplikasi perangkat kontak untuk mengundang kontak ke situs
+ jaringan sosial Anda. Sebagai gantinya, Anda bisa meminta aplikasi kontak perangkat mengirimkan intent untuk mengundang
+ kontak ke salah satu aktivitas Anda. Untuk mempersiapkannya:
+</p>
+<ol>
+ <li>
+ Buat file yang bernama <code>contacts.xml</code> dalam direktori <code>res/xml/</code>
+ proyek Anda. Jika sudah memiliki file ini, langkah ini boleh dilewati.
+ </li>
+ <li>
+ Dalam file ini, tambahkan elemen
+<code><ContactsAccountType xmlns:android="http://schemas.android.com/apk/res/android"></code>.
+ Jika elemen ini sudah ada, langkah ini boleh dilewati.
+ </li>
+ <li>
+ Tambahkan atribut-atribut berikut:
+ <ul>
+ <li><code>inviteContactActivity="<em>activityclass</em>"</code></li>
+ <li>
+ <code>inviteContactActionLabel="@string/<em>invite_action_label</em>"</code>
+ </li>
+ </ul>
+ Nilai <code><em>activityclass</em></code> adalah nama kelas mutlak
+ aktivitas yang harus menerima intent ini. Nilai <code><em>invite_action_label</em></code>
+ adalah string teks yang ditampilkan dalam menu <strong>Add Connection</strong> dalam
+ aplikasi kontak perangkat.
+ </li>
+</ol>
+<p class="note">
+ <strong>Catatan:</strong> <code>ContactsSource</code> adalah nama tag yang sudah usang untuk
+ <code>ContactsAccountType</code>.
+</p>
+<h3 id="ContactsFile">Acuan contacts.xml</h3>
+<p>
+ File <code>contacts.xml</code> berisi elemen XML yang mengontrol interaksi adaptor sinkronisasi
+ Anda dan aplikasi dengan aplikasi kontak dan Penyedia Kontak. Elemen-elemen ini
+ dijelaskan di bagian-bagian selanjutnya.
+</p>
+<h4 id="SocialStreamAcctType">Elemen <ContactsAccountType></h4>
+<p>
+ Elemen <code><ContactsAccountType></code> mengontrol interaksi aplikasi
+ Anda dengan aplikasi kontak. Sintaksnya adalah sebagai berikut:
+</p>
+<pre>
+<ContactsAccountType
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ inviteContactActivity="<em>activity_name</em>"
+ inviteContactActionLabel="<em>invite_command_text</em>"
+ viewContactNotifyService="<em>view_notify_service</em>"
+ viewGroupActivity="<em>group_view_activity</em>"
+ viewGroupActionLabel="<em>group_action_text</em>"
+ viewStreamItemActivity="<em>viewstream_activity_name</em>"
+ viewStreamItemPhotoActivity="<em>viewphotostream_activity_name</em>">
+</pre>
+<p>
+ <strong>dimuat dalam:</strong>
+</p>
+<p>
+ <code>res/xml/contacts.xml</code>
+</p>
+<p>
+ <strong>bisa berisi:</strong>
+</p>
+<p>
+ <strong><code><ContactsDataKind></code></strong>
+</p>
+<p>
+ <strong>Keterangan:</strong>
+</p>
+<p>
+ Mendeklarasikan komponen Android dan label UI yang memungkinkan pengguna mengundang salah satu kontak ke
+ jaringan sosial, memberi tahu pengguna bila salah satu aliran jaringan sosial diperbarui, dan
+ seterusnya.
+</p>
+<p>
+ Perhatikan bahwa awalan atribut <code>android:</code> tidak perlu untuk atribut-atribut
+ <code><ContactsAccountType></code>.
+</p>
+<p>
+ <strong>Atribut:</strong>
+</p>
+<dl>
+ <dt>{@code inviteContactActivity}</dt>
+ <dd>
+ Nama kelas mutlak aktivitas dalam aplikasi yang Anda ingin
+ aktifkan bila pengguna memilih <strong>Add connection</strong> dari aplikasi kontak
+ perangkat.
+ </dd>
+ <dt>{@code inviteContactActionLabel}</dt>
+ <dd>
+ String teks yang ditampilkan untuk aktivitas yang ditetapkan dalam
+ {@code inviteContactActivity}, dalam menu <strong>Add connection</strong>.
+ Misalnya, Anda bisa menggunakan string "Ikuti di jaringan saya". Anda bisa menggunakan identifier sumber daya
+ string untuk tabel ini.
+ </dd>
+ <dt>{@code viewContactNotifyService}</dt>
+ <dd>
+ Nama kelas mutlak layanan dalam aplikasi Anda yang harus menerima
+ pemberitahuan saat pengguna menampilkan kontak. Pemberitahuan ini dikirimkan oleh aplikasi kontak
+ perangkat; hal ini memungkinkan aplikasi Anda menunda operasi yang banyak memproses data
+ hingga dibutuhkan. Misalnya, aplikasi Anda bisa merespons pemberitahuan ini
+ dengan membaca dalam dan menampilkan foto resolusi tinggi kontak dan item aliran sosial
+ terbaru. Fitur ini dijelaskan lebih detail di bagian
+ <a href="#SocialStreamInteraction">Interaksi aliran sosial</a>. Anda bisa melihat
+ contoh layanan pemberitahuan dalam file <code>NotifierService.java</code> dalam contoh aplikasi
+ <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">Sample Sync Adapter</a>.
+
+ </dd>
+ <dt>{@code viewGroupActivity}</dt>
+ <dd>
+ Nama kelas mutlak aktivitas dalam aplikasi yang bisa menampilkan
+ informasi grup. Bila pengguna mengklik label grup dalam aplikasi
+ kontak perangkat, UI aktivitas ini akan ditampilkan.
+ </dd>
+ <dt>{@code viewGroupActionLabel}</dt>
+ <dd>
+ Label yang ditampilkan aplikasi kontak untuk kontrol UI yang memungkinkan
+ pengguna melihat grup dalam aplikasi Anda.
+ <p>
+ Misalnya, jika Anda menginstal aplikasi Google+ di perangkat dan menyinkronkan
+ Google+ dengan aplikasi kontak, Anda akan melihat lingkaran Google+ tercantum sebagai grup
+ dalam tab <strong>Groups</strong> aplikasi kontak Anda. Jika Anda mengklik
+ lingkaran Google+, Anda akan melihat orang-orang di lingkaran itu tercantum sebagai satu "grup". Di atas
+ tampilan, Anda akan melihat ikon Google+; jika mengklik ikon itu, kontrol akan beralih ke
+ aplikasi Google+. Aplikasi kontak melakukan ini dengan
+ {@code viewGroupActivity}, yang menggunakan ikon Google+ sebagai nilai
+ {@code viewGroupActionLabel}.
+ </p>
+ <p>
+ Identifier sumber daya string diperbolehkan untuk atribut ini.
+ </p>
+ </dd>
+ <dt>{@code viewStreamItemActivity}</dt>
+ <dd>
+ Nama kelas mutlak aktivitas dalam aplikasi Anda
+ yang diluncurkan aplikasi kontak perangkat bila pengguna mengklik item aliran untuk kontak mentah.
+ </dd>
+ <dt>{@code viewStreamItemPhotoActivity}</dt>
+ <dd>
+ Nama kelas mutlak aktivitas yang diluncurkan
+ aplikasi kontak perangkat bila pengguna mengklik foto dalam item aliran
+ untuk kontak mentah.
+ </dd>
+</dl>
+<h4 id="SocialStreamDataKind">Elemen <ContactsDataKind></h4>
+<p>
+ Elemen <code><ContactsDataKind></code> mengontrol tampilan baris data custom
+ aplikasi Anda dalam UI aplikasi kontak. Sintaksnya adalah sebagai berikut:
+</p>
+<pre>
+<ContactsDataKind
+ android:mimeType="<em>MIMEtype</em>"
+ android:icon="<em>icon_resources</em>"
+ android:summaryColumn="<em>column_name</em>"
+ android:detailColumn="<em>column_name</em>">
+</pre>
+<p>
+ <strong>dimuat dalam:</strong>
+</p>
+<code><ContactsAccountType></code>
+<p>
+ <strong>Keterangan:</strong>
+</p>
+<p>
+ Gunakan elemen ini untuk memerintahkan aplikasi kontak agar menampilkan konten baris data custom sebagai
+ bagian dari detail kontak mentah. Setiap elemen anak <code><ContactsDataKind></code>
+ <code><ContactsAccountType></code> mewakili tipe baris data custom yang
+ ditambahkan adaptor sinkronisasi Anda ke tabel {@link android.provider.ContactsContract.Data}. Tambahkan satu
+ elemen <code><ContactsDataKind></code> untuk setiap tipe MIME custom yang Anda gunakan. Anda tidak harus
+ menambahkan elemen jika Anda memiliki baris data custom yang datanya tidak ingin ditampilkan.
+</p>
+<p>
+ <strong>Atribut:</strong>
+</p>
+<dl>
+ <dt>{@code android:mimeType}</dt>
+ <dd>
+ Tipe MIME custom yang telah Anda definisikan untuk salah satu tipe baris data custom dalam
+ tabel {@link android.provider.ContactsContract.Data}. Misalnya, nilai
+ <code>vnd.android.cursor.item/vnd.example.locationstatus</code> bisa berupa tipe MIME
+ custom untuk baris data yang mencatat lokasi kontak yang terakhir diketahui.
+ </dd>
+ <dt>{@code android:icon}</dt>
+ <dd>
+
+ <a href="{@docRoot}guide/topics/resources/drawable-resource.html">Sumber daya drawable</a>
+ Android yang ditampilkan aplikasi kontak di samping data Anda. Gunakan ini untuk menunjukkan kepada
+ pengguna bahwa data berasal dari layanan Anda.
+ </dd>
+ <dt>{@code android:summaryColumn}</dt>
+ <dd>
+ Nama kolom untuk yang pertama dari dua nilai yang diambil dari baris data. Nilai
+ ditampilkan sebagai baris pertama entri untuk baris data ini. Baris pertama
+ dimaksudkan untuk digunakan sebagai rangkuman data, tetapi itu bersifat opsional. Lihat juga
+ <a href="#detailColumn">android:detailColumn</a>.
+ </dd>
+ <dt>{@code android:detailColumn}</dt>
+ <dd>
+ Nama kolom untuk yang kedua dari dua nilai yang diambil dari baris data. Nilai
+ ditampilkan sebagai baris kedua entri untuk baris data ini. Lihat juga
+ {@code android:summaryColumn}.
+ </dd>
+</dl>
+<h2 id="AdditionalFeatures">Fitur Tambahan Penyedia Kontak</h2>
+<p>
+ Di samping fitur-fitur utama yang dijelaskan di bagian sebelumnya, Penyedia Kontak menawarkan
+ fitur-fitur berguna ini untuk digunakan bersama data kontak:
+</p>
+ <ul>
+ <li>Grup kontak</li>
+ <li>Fitur foto</li>
+ </ul>
+<h3 id="Groups">Grup kontak</h3>
+<p>
+ Penyedia Kontak secara opsional bisa melabeli kumpulan kontak terkait dengan data
+ <strong>grup</strong>. Jika server yang dikaitkan dengan akun pengguna
+ ingin mempertahankan grup, adaptor sinkronisasi untuk tipe akun dari akun itu harus mentransfer
+ data grup antara Penyedia Kontak dan server. Bila pengguna menambahkan kontak baru ke
+ server, kemudian memasukkan kontak ini dalam grup baru, adaptor sinkronisasi harus menambahkan grup baru
+ ke tabel {@link android.provider.ContactsContract.Groups}. Grup atau grup-grup yang memiliki kontak
+ disimpan dalam tabel {@link android.provider.ContactsContract.Data}, dengan menggunakan
+ tipe MIME {@link android.provider.ContactsContract.CommonDataKinds.GroupMembership}.
+</p>
+<p>
+ Jika Anda mendesain adaptor sinkronisasi yang akan menambahkan data kontak mentah dari
+ server ke Penyedia Kontak, dan Anda tidak menggunakan grup, maka Anda harus memberi tahu
+ penyedia itu agar membuat data Anda terlihat. Dalam kode yang dijalankan bila pengguna menambahkan akun
+ ke perangkat, perbarui baris {@link android.provider.ContactsContract.Settings}
+ yang ditambahkan Penyedia Kontak untuk akunnya. Dalam baris ini, atur nilai kolom
+ {@link android.provider.ContactsContract.SettingsColumns#UNGROUPED_VISIBLE
+ Settings.UNGROUPED_VISIBLE} ke 1. Bila melakukannya, Penyedia Kontak akan selalu
+ membuat data kontak Anda terlihat, meskipun Anda tidak menggunakan grup.
+</p>
+<h3 id="Photos">Foto kontak</h3>
+<p>
+ Tabel {@link android.provider.ContactsContract.Data} menyimpan foto sebagai baris dengan tipe MIME
+ {@link android.provider.ContactsContract.CommonDataKinds.Photo#CONTENT_ITEM_TYPE
+ Photo.CONTENT_ITEM_TYPE}. Kolom
+ {@link android.provider.ContactsContract.RawContactsColumns#CONTACT_ID} baris yang ditautkan ke
+ kolom {@code android.provider.BaseColumns#_ID} kontak mentah yang memiliki kolom itu.
+ Kelas {@link android.provider.ContactsContract.Contacts.Photo} mendefinisikan subtabel
+ {@link android.provider.ContactsContract.Contacts} yang berisi informasi foto untuk foto
+ utama kontak, yang merupakan foto utama dari kontak mentah utama kontak itu. Demikian pula,
+ kelas {@link android.provider.ContactsContract.RawContacts.DisplayPhoto} mendefinisikan subtabel
+ {@link android.provider.ContactsContract.RawContacts} yang berisi informasi foto untuk
+ foto utama kontak mentah.
+</p>
+<p>
+ Dokumentasi acuan untuk {@link android.provider.ContactsContract.Contacts.Photo} dan
+ {@link android.provider.ContactsContract.RawContacts.DisplayPhoto} berisi contoh-contoh
+ pengambilan informasi foto. Tidak ada kelas praktis untuk mengambil
+ thumbnail utama kontak mentah, tetapi Anda bisa mengirim query ke
+ tabel {@link android.provider.ContactsContract.Data}, dengan memilih
+ {@code android.provider.BaseColumns#_ID} kontak mentah,
+ {@link android.provider.ContactsContract.CommonDataKinds.Photo#CONTENT_ITEM_TYPE
+ Photo.CONTENT_ITEM_TYPE}, dan kolom {@link android.provider.ContactsContract.Data#IS_PRIMARY}
+ untuk menemukan baris foto utama kontak mentah.
+</p>
+<p>
+ Data aliran sosial untuk seseorang bisa juga disertai foto. Data ini disimpan dalam
+ tabel {@code android.provider.ContactsContract.StreamItemPhotos}, yang dijelaskan lebih detail
+ di bagian <a href="#StreamPhotos">Foto aliran sosial</a>.
+</p>
diff --git a/docs/html-intl/intl/id/guide/topics/providers/content-provider-basics.jd b/docs/html-intl/intl/id/guide/topics/providers/content-provider-basics.jd
new file mode 100644
index 0000000..4af9277
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/topics/providers/content-provider-basics.jd
@@ -0,0 +1,1196 @@
+page.title=Dasar-Dasar Penyedia Konten
+@jd:body
+<div id="qv-wrapper">
+<div id="qv">
+<!-- In this document -->
+<h2>Dalam dokumen ini</h2>
+<ol>
+ <li>
+ <a href="#Basics">Ikhtisar</a>
+ <ol>
+ <li>
+ <a href="#ClientProvider">Mengakses penyedia</a>
+ </li>
+ <li>
+ <a href="#ContentURIs">URI Konten</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#SimpleQuery">Mengambil Data dari Penyedia</a>
+ <ol>
+ <li>
+ <a href="#RequestPermissions">Meminta izin akses baca</a>
+ </li>
+ <li>
+ <a href="#Query">Membuat query</a>
+ </li>
+ <li>
+ <a href="#DisplayResults">Menampilkan hasil query</a>
+ </li>
+ <li>
+ <a href="#GettingResults">Mendapatkan data dari hasil query</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#Permissions">Izin Penyedia Konten</a>
+ </li>
+ <li>
+ <a href="#Modifications">Menyisipkan, Memperbarui, dan Menghapus Data</a>
+ <ol>
+ <li>
+ <a href="#Inserting">Menyisipkan data</a>
+ </li>
+ <li>
+ <a href="#Updating">Memperbarui data</a>
+ </li>
+ <li>
+ <a href="#Deleting">Menghapus data</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#DataTypes">Tipe Data Penyedia</a>
+ </li>
+ <li>
+ <a href="#AltForms">Bentuk-Bentuk Alternatif Akses Penyedia</a>
+ <ol>
+ <li>
+ <a href="#Batch">Akses batch</a>
+ </li>
+ <li>
+ <a href="#Intents">Akses data melalui intent</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#ContractClasses">Kelas-kelas Kontrak</a>
+ </li>
+ <li>
+ <a href="#MIMETypeReference">Acuan Tipe MIME</a>
+ </li>
+</ol>
+
+ <!-- Key Classes -->
+<h2>Kelas-kelas utama</h2>
+ <ol>
+ <li>
+ {@link android.content.ContentProvider}
+ </li>
+ <li>
+ {@link android.content.ContentResolver}
+ </li>
+ <li>
+ {@link android.database.Cursor}
+ </li>
+ <li>
+ {@link android.net.Uri}
+ </li>
+ </ol>
+
+ <!-- Related Samples -->
+<h2>Contoh-Contoh Terkait</h2>
+ <ol>
+ <li>
+ <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/List2.html">
+ Kursor (Orang)</a>
+ </li>
+ <li>
+ <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/List7.html">
+ Kursor (Telepon)</a>
+ </li>
+ </ol>
+
+ <!-- See also -->
+<h2>Lihat juga</h2>
+ <ol>
+ <li>
+ <a href="{@docRoot}guide/topics/providers/content-provider-creating.html">
+ Membuat Penyedia Konten</a>
+ </li>
+ <li>
+ <a href="{@docRoot}guide/topics/providers/calendar-provider.html">
+ Penyedia Kalender</a>
+ </li>
+ </ol>
+</div>
+</div>
+
+ <!-- Intro paragraphs -->
+<p>
+ Penyedia konten mengelola akses ke repository data pusat. Penyedia
+ adalah bagian dari aplikasi Android, yang sering menyediakan UI-nya sendiri untuk menggunakan
+ data. Akan tetapi, penyedia konten terutama dimaksudkan untuk digunakan oleh
+ aplikasi lain, yang mengakses penyedia itu melalui objek klien penyedia. Bersama-sama, penyedia
+ dan klien penyedia menawarkan antarmuka standar yang konsisten ke data yang juga menangani
+ komunikasi antar-proses dan akses data aman.
+</p>
+<p>
+ Topik ini menerangkan dasar-dasar dari hal-hal berikut:
+</p>
+ <ul>
+ <li>Cara kerja penyedia konten.</li>
+ <li>API yang Anda gunakan untuk mengambil data dari penyedia konten.</li>
+ <li>API yang Anda gunakan untuk menyisipkan, memperbarui, atau menghapus data dalam penyedia konten.</li>
+ <li>Fitur API lainnya yang memudahkan kita menggunakan penyedia.</li>
+ </ul>
+
+ <!-- Basics -->
+<h2 id="Basics">Ikhtisar</h2>
+<p>
+ Penyedia konten menyajikan data ke aplikasi eksternal sebagai satu atau beberapa tabel yang
+ serupa dengan tabel-tabel yang ditemukan dalam database relasional. Sebuah baris mewakili instance beberapa tipe
+ data yang dikumpulkan penyedia, dan tiap kolom dalam baris mewakili sepotong
+ data yang dikumpulkan untuk sebuah instance.
+</p>
+<p>
+ Misalnya, salah satu penyedia bawaan di platform Android adalah kamus pengguna, yang
+ menyimpan ejaan kata-kata tidak-standar yang ingin disimpan pengguna. Tabel 1 mengilustrasikan
+ wujud data yang mungkin ada dalam tabel penyedia ini:
+</p>
+<p class="table-caption">
+ <strong>Tabel 1:</strong> Contoh tabel kamus pengguna.
+</p>
+<table id="table1" style="width: 50%;">
+ <tr>
+ <th style="width:20%" align="center" scope="col">word</th>
+ <th style="width:20%" align="center" scope="col">app id</th>
+ <th style="width:20%" align="center" scope="col">frequency</th>
+ <th style="width:20%" align="center" scope="col">locale</th>
+ <th style="width:20%" align="center" scope="col">_ID</th>
+ </tr>
+ <tr>
+ <td align="center" scope="row">mapreduce</td>
+ <td align="center">user1</td>
+ <td align="center">100</td>
+ <td align="center">en_US</td>
+ <td align="center">1</td>
+ </tr>
+ <tr>
+ <td align="center" scope="row">precompiler</td>
+ <td align="center">user14</td>
+ <td align="center">200</td>
+ <td align="center">fr_FR</td>
+ <td align="center">2</td>
+ </tr>
+ <tr>
+ <td align="center" scope="row">applet</td>
+ <td align="center">user2</td>
+ <td align="center">225</td>
+ <td align="center">fr_CA</td>
+ <td align="center">3</td>
+ </tr>
+ <tr>
+ <td align="center" scope="row">const</td>
+ <td align="center">user1</td>
+ <td align="center">255</td>
+ <td align="center">pt_BR</td>
+ <td align="center">4</td>
+ </tr>
+ <tr>
+ <td align="center" scope="row">int</td>
+ <td align="center">user5</td>
+ <td align="center">100</td>
+ <td align="center">en_UK</td>
+ <td align="center">5</td>
+ </tr>
+</table>
+<p>
+ Dalam tabel 1, tiap baris mewakili instance sebuah kata yang mungkin tidak
+ ditemukan dalam kamus standar. Tiap kolom mewakili beberapa data untuk kata itu, misalnya
+ bahasa lokal tempat kata itu ditemukan kali pertama. Header kolom adalah nama kolom yang disimpan dalam
+ penyedia. Untuk mengacu ke bahasa lokal suatu baris, Anda mengacu ke kolom <code>locale</code>-nya. Untuk
+ penyedia ini, kolom <code>_ID</code> berfungsi sebagai "kunci utama" kolom yang
+ dipelihara oleh penyedia secara otomatis.
+</p>
+<p class="note">
+ <strong>Catatan:</strong> Penyedia tidak diharuskan memiliki kunci utama, dan tidak diharuskan
+ menggunakan <code>_ID</code> sebagai nama kolom kunci utama jika kunci itu ada. Akan tetapi,
+ jika Anda ingin mengikat data dari penyedia ke {@link android.widget.ListView}, salah satu
+ nama kolom harus <code>_ID</code>. Ketentuan ini dijelaskan secara lebih detail di bagian
+ <a href="#DisplayResults">Menampilkan hasil query</a>.
+</p>
+<h3 id="ClientProvider">Mengakses penyedia</h3>
+<p>
+ Aplikasi mengakses data dari penyedia konten dengan
+ sebuah objek klien {@link android.content.ContentResolver}. Objek ini memiliki metode yang memanggil
+ metode dengan nama identik dalam objek penyedia, instance salah satu
+ subkelas konkret dari {@link android.content.ContentProvider}. Metode-metode
+ {@link android.content.ContentResolver} menyediakan fungsi-fungsi dasar
+ "CRUD" (create, retrieve, update, dan delete) pada penyimpanan yang persisten.
+</p>
+<p>
+ Objek {@link android.content.ContentResolver} dalam
+ proses aplikasi klien dan objek {@link android.content.ContentProvider} dalam aplikasi yang memiliki
+ penyedia itu secara otomatis akan menangani komunikasi antar-proses.
+ {@link android.content.ContentProvider} juga berfungsi sebagai lapisan abstraksi antara
+ repository datanya dan penampilan eksternal data sebagai tabel.
+</p>
+<p class="note">
+ <strong>Catatan:</strong> Untuk mengakses penyedia, aplikasi Anda biasanya harus meminta
+ izin tertentu dalam file manifesnya. Hal ini dijelaskan lebih detail di bagian
+ <a href="#Permissions">Izin Penyedia Konten</a>
+</p>
+<p>
+ Misalnya, untuk mendapatkan daftar kata dan lokalnya dari Penyedia Kamus Pengguna,
+ Anda memanggil {@link android.content.ContentResolver#query ContentResolver.query()}.
+ Metode {@link android.content.ContentResolver#query query()} memanggil
+ metode {@link android.content.ContentProvider#query ContentProvider.query()} yang didefinisikan oleh
+ Penyedia Kamus Pengguna. Baris-baris kode berikut menunjukkan sebuah
+ panggilan {@link android.content.ContentResolver#query ContentResolver.query()}:
+<p>
+<pre>
+// Queries the user dictionary and returns results
+mCursor = getContentResolver().query(
+ UserDictionary.Words.CONTENT_URI, // The content URI of the words table
+ mProjection, // The columns to return for each row
+ mSelectionClause // Selection criteria
+ mSelectionArgs, // Selection criteria
+ mSortOrder); // The sort order for the returned rows
+</pre>
+<p>
+ Tabel 2 menampilkan cara argumen untuk
+ {@link android.content.ContentResolver#query
+ query(Uri,projection,selection,selectionArgs,sortOrder)} cocok dengan sebuah pernyataan SELECT di SQL:
+</p>
+<p class="table-caption">
+ <strong>Tabel 2:</strong> Query() dibandingkan dengan query SQL.
+</p>
+<table id="table2" style="width: 75%;">
+ <tr>
+ <th style="width:25%" align="center" scope="col">Argumen query()</th>
+ <th style="width:25%" align="center" scope="col">Kata kunci/parameter SELECT</th>
+ <th style="width:50%" align="center" scope="col">Catatan</th>
+ </tr>
+ <tr>
+ <td align="center"><code>Uri</code></td>
+ <td align="center"><code>FROM <em>table_name</em></code></td>
+ <td><code>Uri</code> memetakan ke tabel dalam penyedia yang bernama <em>table_name</em>.</td>
+ </tr>
+ <tr>
+ <td align="center"><code>projection</code></td>
+ <td align="center"><code><em>col,col,col,...</em></code></td>
+ <td>
+ <code>projection</code> adalah satu larik kolom yang harus disertakan untuk tiap baris
+ yang diambil.
+ </td>
+ </tr>
+ <tr>
+ <td align="center"><code>selection</code></td>
+ <td align="center"><code>WHERE <em>col</em> = <em>value</em></code></td>
+ <td><code>selection</code> menetapkan kriteria untuk memilih baris.</td>
+ </tr>
+ <tr>
+ <td align="center"><code>selectionArgs</code></td>
+ <td align="center">
+ (Tidak ada padanan persis. Argumen pemilihan mengganti <code>?</code> placeholder dalam
+ klausa pemilihan.)
+ </td>
+ </tr>
+ <tr>
+ <td align="center"><code>sortOrder</code></td>
+ <td align="center"><code>ORDER BY <em>col,col,...</em></code></td>
+ <td>
+ <code>sortOrder</code> menetapkan urutan munculnya baris dalam
+ {@link android.database.Cursor} yang dihasilkan.
+ </td>
+ </tr>
+</table>
+<h3 id="ContentURIs">URI Konten</h3>
+<p>
+ <strong>URI konten</strong> adalah URI yang mengidentifikasi data dalam penyedia. URI Konten
+ menyertakan nama simbolis seluruh penyedia (<strong>otoritas</strong>nya) dan sebuah
+ nama yang menunjuk ke tabel (<strong>path</strong>). Bila Anda memanggil
+ metode klien untuk mengakses tabel dalam penyedia, URI konten untuk tabel itu adalah salah satu
+ argumennya.
+</p>
+<p>
+ Dalam baris kode sebelumnya, konstanta
+ {@link android.provider.UserDictionary.Words#CONTENT_URI} mengandung URI konten dari
+ tabel "words" kamus pengguna. Objek {@link android.content.ContentResolver}
+ akan mengurai otoritas URI, dan menggunakannya untuk "mengetahui" penyedia dengan
+ membandingkan otoritas tersebut dengan sebuah tabel sistem berisi penyedia yang dikenal.
+{@link android.content.ContentResolver} kemudian bisa mengirim argumen query ke penyedia
+ yang benar.
+</p>
+<p>
+ {@link android.content.ContentProvider} menggunakan bagian path dari URI konten untuk memilih
+ tabel yang akan diakses. Penyedia biasanya memiliki <strong>path</strong> untuk tiap tabel yang dieksposnya.
+</p>
+<p>
+ Dalam baris kode sebelumnya, URI lengkap untuk tabel "words" adalah:
+</p>
+<pre>
+content://user_dictionary/words
+</pre>
+<p>
+ dalam hal ini string <code>user_dictionary</code> adalah otoritas penyedia, dan string
+ <code>words</code> adalah path tabel. String
+ <code>content://</code> (<strong>skema</strong>) selalu ada,
+ dan mengidentifikasinya sebagai URI konten.
+</p>
+<p>
+ Banyak penyedia yang memperbolehkan Anda mengakses satu baris dalam tabel dengan menambahkan sebuah ID nilai
+ ke akhir URI. Misalnya, untuk mengambil sebuah baris yang <code>_ID</code>-nya adalah
+ <code>4</code> dari kamus pengguna, Anda bisa menggunakan URI konten ini:
+</p>
+<pre>
+Uri singleUri = ContentUris.withAppendedId(UserDictionary.Words.CONTENT_URI,4);
+</pre>
+<p>
+ Anda akan sering menggunakan nilai-nilai ID bila telah mengambil satu set baris kemudian ingin memperbarui atau menghapus
+ salah satunya.
+</p>
+<p class="note">
+ <strong>Catatan:</strong> Kelas-kelas {@link android.net.Uri} dan {@link android.net.Uri.Builder}
+ berisi metode praktis untuk membangun objek dari string URI yang tersusun dengan baik.
+{@link android.content.ContentUris} berisi metode praktis untuk menambahkan nilai ID ke
+ URI. Cuplikan kode sebelumnya menggunakan {@link android.content.ContentUris#withAppendedId
+ withAppendedId()} untuk menambahkan id ke URI konten User Dictionary.
+</p>
+
+
+ <!-- Retrieving Data from the Provider -->
+<h2 id="SimpleQuery">Mengambil Data dari Penyedia</h2>
+<p>
+ Bagian ini menerangkan cara mengambil data dari penyedia, dengan menggunakan Penyedia Kamus Pengguna
+ sebagai contoh.
+</p>
+<p class="note">
+ Demi kejelasan, cuplikan kode di bagian ini memanggil
+ {@link android.content.ContentResolver#query ContentResolver.query()} pada "UI thread"". Akan tetapi, dalam
+ kode sesungguhnya, Anda harus melakukan query secara asinkron pada sebuah thread terpisah. Satu cara melakukannya
+ adalah menggunakan kelas {@link android.content.CursorLoader}, yang dijelaskan
+ lebih detail dalam panduan <a href="{@docRoot}guide/components/loaders.html">
+ Loader</a>. Juga, baris-baris kode tersebut hanyalah cuplikan; tidak menunjukkan sebuah aplikasi
+ lengkap.
+</p>
+<p>
+ Untuk mengambil data dari penyedia, ikutilah langkah-langkah dasar ini:
+</p>
+<ol>
+ <li>
+ Minta izin akses baca untuk penyedia itu.
+ </li>
+ <li>
+ Definisikan kode yang mengirim query ke penyedia.
+ </li>
+</ol>
+<h3 id="RequestPermissions">Meminta izin akses baca</h3>
+<p>
+ Untuk mengambil data dari penyedia, aplikasi Anda memerlukan "izin akses baca" untuk
+ penyedia itu. Anda tidak bisa meminta izin ini saat runtime; sebagai gantinya, Anda harus menetapkan bahwa
+ Anda memerlukan izin ini dalam manifes, dengan menggunakan elemen
+<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>
+ dan nama persis izin yang didefinisikan oleh
+ penyedia itu. Bila menetapkan elemen ini dalam manifes, Anda secara efektif "meminta"
+ izin ini untuk aplikasi Anda. Bila pengguna menginstal aplikasi Anda, mereka secara implisit akan memberikan
+ permintaan ini.
+</p>
+<p>
+ Untuk menemukan nama persis dari izin akses baca untuk penyedia yang sedang Anda gunakan, serta
+ nama-nama izin akses lain yang digunakan oleh penyedia, lihatlah dalam
+ dokumentasi penyedia.
+</p>
+<p>
+ Peran izin dalam yang mengakses penyedia dijelaskan lebih detail di bagian
+ <a href="#Permissions">Izin Penyedia Konten</a>.
+</p>
+<p>
+ Penyedia Kamus Pengguna mendefinisikan izin
+ <code>android.permission.READ_USER_DICTIONARY</code> dalam file manifesnya, sehingga
+ aplikasi yang ingin membaca dari penyedia itu harus meminta izin ini.
+</p>
+<!-- Constructing the query -->
+<h3 id="Query">Membuat query</h3>
+<p>
+ Langkah berikutnya dalam mengambil data penyedia adalah membuat query. Cuplikan kode pertama ini
+ mendefinisikan beberapa variabel untuk mengakses Penyedia Kamus Pengguna:
+</p>
+<pre class="prettyprint">
+
+// A "projection" defines the columns that will be returned for each row
+String[] mProjection =
+{
+ UserDictionary.Words._ID, // Contract class constant for the _ID column name
+ UserDictionary.Words.WORD, // Contract class constant for the word column name
+ UserDictionary.Words.LOCALE // Contract class constant for the locale column name
+};
+
+// Defines a string to contain the selection clause
+String mSelectionClause = null;
+
+// Initializes an array to contain selection arguments
+String[] mSelectionArgs = {""};
+
+</pre>
+<p>
+ Cuplikan berikutnya menampilkan cara menggunakan
+ {@link android.content.ContentResolver#query ContentResolver.query()}, dengan menggunakan Penyedia Kamus Pengguna
+ sebagai contoh. Query klien penyedia serupa dengan query SQL, dan berisi satu
+ set kolom yang akan dihasilkan, satu set kriteria pemilihan, dan urutan sortir.
+</p>
+<p>
+ Set kolom yang harus dikembalikan query disebut dengan <strong>proyeksi</strong>
+ (variabel <code>mProjection</code>).
+</p>
+<p>
+ Ekspresi yang menetapkan baris yang harus diambil dipecah menjadi klausa pemilihan dan
+ argumen pemilihan. Klausa pemilihan adalah kombinasi ekspresi logis dan boolean,
+ nama kolom, dan nilai (variabel <code>mSelectionClause</code>). Jika Anda menetapkan
+ parameter <code>?</code> yang bisa diganti, sebagai ganti nilai, metode query akan mengambil nilai
+ dari larik argumen pemilihan (variabel <code>mSelectionArgs</code>).
+</p>
+<p>
+ Dalam cuplikan berikutnya, jika pengguna tidak memasukkan sebuah kata, klausa pemilihan akan diatur ke
+ <code>null</code>, dan query menghasilkan semua kata dalam penyedia. Jika pengguna memasukkan
+ sebuah kata, klausa pemilihan akan diatur ke <code>UserDictionary.Words.WORD + " = ?"</code> dan
+ elemen pertama larik argumen pemilihan diatur ke kata yang dimasukkan pengguna.
+</p>
+<pre class="prettyprint">
+/*
+ * This defines a one-element String array to contain the selection argument.
+ */
+String[] mSelectionArgs = {""};
+
+// Gets a word from the UI
+mSearchString = mSearchWord.getText().toString();
+
+// Remember to insert code here to check for invalid or malicious input.
+
+// If the word is the empty string, gets everything
+if (TextUtils.isEmpty(mSearchString)) {
+ // Setting the selection clause to null will return all words
+ mSelectionClause = null;
+ mSelectionArgs[0] = "";
+
+} else {
+ // Constructs a selection clause that matches the word that the user entered.
+ mSelectionClause = UserDictionary.Words.WORD + " = ?";
+
+ // Moves the user's input string to the selection arguments.
+ mSelectionArgs[0] = mSearchString;
+
+}
+
+// Does a query against the table and returns a Cursor object
+mCursor = getContentResolver().query(
+ UserDictionary.Words.CONTENT_URI, // The content URI of the words table
+ mProjection, // The columns to return for each row
+ mSelectionClause // Either null, or the word the user entered
+ mSelectionArgs, // Either empty, or the string the user entered
+ mSortOrder); // The sort order for the returned rows
+
+// Some providers return null if an error occurs, others throw an exception
+if (null == mCursor) {
+ /*
+ * Insert code here to handle the error. Be sure not to use the cursor! You may want to
+ * call android.util.Log.e() to log this error.
+ *
+ */
+// If the Cursor is empty, the provider found no matches
+} else if (mCursor.getCount() < 1) {
+
+ /*
+ * Insert code here to notify the user that the search was unsuccessful. This isn't necessarily
+ * an error. You may want to offer the user the option to insert a new row, or re-type the
+ * search term.
+ */
+
+} else {
+ // Insert code here to do something with the results
+
+}
+</pre>
+<p>
+ Query ini analog dengan pernyataan SQL:
+</p>
+<pre>
+SELECT _ID, word, locale FROM words WHERE word = <userinput> ORDER BY word ASC;
+</pre>
+<p>
+ Dalam pernyataan SQL ini, nama kolom yang sesungguhnya digunakan sebagai ganti konstanta kelas kontrak.
+</p>
+<h4 id="Injection">Melindungi dari input merusak</h4>
+<p>
+ Jika data dikelola oleh penyedia konten berada dalam database SQL, memasukkan data tak dipercaya eksternal
+ ke dalam pernyataan SQL mentah bisa menyebabkan injeksi SQL.
+</p>
+<p>
+ Perhatikan klausa pemilihan ini:
+</p>
+<pre>
+// Constructs a selection clause by concatenating the user's input to the column name
+String mSelectionClause = "var = " + mUserInput;
+</pre>
+<p>
+ Jika melakukannya, Anda akan membuat pengguna menyambungkan SQL merusak ke pernyataan SQL Anda.
+ Misalnya, pengguna bisa memasukkan "nothing; DROP TABLE *;" untuk <code>mUserInput</code>, yang
+ akan menghasilkan klausa pemilihan <code>var = nothing; DROP TABLE *;</code>. Karena
+ klausa pemilihan diperlakukan sebagai pernyataan SQL, hal ini bisa menyebabkan penyedia itu menghapus semua
+ tabel dalam database SQLite yang mendasarinya (kecuali penyedia disiapkan untuk menangkap upaya
+ <a href="http://en.wikipedia.org/wiki/SQL_injection">injeksi SQL</a>).
+</p>
+<p>
+ Untuk menghindari masalah ini, gunakan klausa pemilihan yang menggunakan <code>?</code> sebagai
+ parameter yang bisa diganti dan larik argumen pemilihan yang terpisah. Bila Anda melakukannya, input pengguna
+ akan dibatasi secara langsung pada query agar tidak ditafsirkan sebagai bagian dari pernyataan SQL.
+ Karena tidak diperlakukan sebagai SQL, input pengguna tidak bisa menyuntikkan SQL merusak. Sebagai ganti menggunakan
+ penyambungan untuk menyertakan input pengguna, gunakan klausa pemilihan ini:
+</p>
+<pre>
+// Constructs a selection clause with a replaceable parameter
+String mSelectionClause = "var = ?";
+</pre>
+<p>
+ Buat larik argumen pemilihan seperti ini:
+</p>
+<pre>
+// Defines an array to contain the selection arguments
+String[] selectionArgs = {""};
+</pre>
+<p>
+ Masukkan nilai dalam larik argumen pemilihan seperti ini:
+</p>
+<pre>
+// Sets the selection argument to the user's input
+selectionArgs[0] = mUserInput;
+</pre>
+<p>
+ Sebuah klausa pemilihan yang menggunakan <code>?</code> sebagai parameter yang bisa diganti dan sebuah larik
+ argumen pemilihan adalah cara yang lebih disukai untuk menyebutkan pemilihan, sekalipun penyedia tidak
+ dibuat berdasarkan database SQL.
+</p>
+<!-- Displaying the results -->
+<h3 id="DisplayResults">Menampilkan hasil query</h3>
+<p>
+ Metode klien {@link android.content.ContentResolver#query ContentResolver.query()} selalu
+ menghasilkan {@link android.database.Cursor} berisi kolom-kolom yang ditetapkan oleh
+ proyeksi query untuk baris yang cocok dengan kriteria pemilihan query. Objek
+ {@link android.database.Cursor} menyediakan akses baca acak ke baris dan kolom yang
+ dimuatnya. Dengan metode {@link android.database.Cursor}, Anda bisa mengulang baris-baris dalam
+ hasil, menentukan tipe data tiap kolom, mengambil data dari kolom, dan memeriksa
+ properti lain dari hasil. Beberapa implementasi {@link android.database.Cursor}
+ akan memperbarui objek secara otomatis bila data penyedia berubah, atau memicu metode dalam objek pengamat
+ bila {@link android.database.Cursor} berubah, atau keduanya.
+</p>
+<p class="note">
+ <strong>Catatan:</strong> Penyedia bisa membatasi akses ke kolom berdasarkan sifat
+ objek yang membuat query. Misalnya, Penyedia Kontak membatasi akses untuk beberapa kolom pada
+ adaptor sinkronisasi, sehingga tidak akan mengembalikannya ke aktivitas atau layanan.
+</p>
+<p>
+ Jika tidak ada baris yang cocok dengan kriteria pemilihan, penyedia
+ akan mengembalikan objek {@link android.database.Cursor} dengan
+ {@link android.database.Cursor#getCount Cursor.getCount()} adalah 0 (kursor kosong).
+</p>
+<p>
+ Jika terjadi kesalahan internal, hasil query akan bergantung pada penyedia tertentu. Penyedia bisa
+ memilih untuk menghasilkan <code>null</code>, atau melontarkan {@link java.lang.Exception}.
+</p>
+<p>
+ Karena {@link android.database.Cursor} adalah "daftar" baris, cara yang cocok untuk menampilkan
+ konten {@link android.database.Cursor} adalah mengaitkannya dengan {@link android.widget.ListView}
+ melalui {@link android.widget.SimpleCursorAdapter}.
+</p>
+<p>
+ Cuplikan berikut melanjutkan kode dari cuplikan sebelumnya. Cuplikan ini membuat
+ objek {@link android.widget.SimpleCursorAdapter} berisi {@link android.database.Cursor}
+ yang diambil oleh query, dan mengatur objek ini menjadi adaptor bagi
+ {@link android.widget.ListView}:
+</p>
+<pre class="prettyprint">
+// Defines a list of columns to retrieve from the Cursor and load into an output row
+String[] mWordListColumns =
+{
+ UserDictionary.Words.WORD, // Contract class constant containing the word column name
+ UserDictionary.Words.LOCALE // Contract class constant containing the locale column name
+};
+
+// Defines a list of View IDs that will receive the Cursor columns for each row
+int[] mWordListItems = { R.id.dictWord, R.id.locale};
+
+// Creates a new SimpleCursorAdapter
+mCursorAdapter = new SimpleCursorAdapter(
+ getApplicationContext(), // The application's Context object
+ R.layout.wordlistrow, // A layout in XML for one row in the ListView
+ mCursor, // The result from the query
+ mWordListColumns, // A string array of column names in the cursor
+ mWordListItems, // An integer array of view IDs in the row layout
+ 0); // Flags (usually none are needed)
+
+// Sets the adapter for the ListView
+mWordList.setAdapter(mCursorAdapter);
+</pre>
+<p class="note">
+ <strong>Catatan:</strong> Untuk mendukung {@link android.widget.ListView} dengan
+ {@link android.database.Cursor}, kursor harus berisi kolom bernama <code>_ID</code>.
+ Karena itu, query yang ditampilkan sebelumnya mengambil kolom <code>_ID</code> untuk
+ tabel "words", walaupun {@link android.widget.ListView} tidak menampilkannya.
+ Pembatasan ini juga menjelaskan mengapa sebagian besar penyedia memiliki kolom <code>_ID</code> untuk masing-masing
+ tabelnya.
+</p>
+
+ <!-- Getting data from query results -->
+<h3 id="GettingResults">Mendapatkan data dari hasil query</h3>
+<p>
+ Daripada sekadar menampilkan hasil query, Anda bisa menggunakannya untuk tugas-tugas lain. Misalnya,
+ Anda bisa mengambil ejaan dari kamus pengguna kemudian mencarinya dalam
+ penyedia lain. Caranya, ulangi baris-baris dalam {@link android.database.Cursor}:
+</p>
+<pre class="prettyprint">
+
+// Determine the column index of the column named "word"
+int index = mCursor.getColumnIndex(UserDictionary.Words.WORD);
+
+/*
+ * Only executes if the cursor is valid. The User Dictionary Provider returns null if
+ * an internal error occurs. Other providers may throw an Exception instead of returning null.
+ */
+
+if (mCursor != null) {
+ /*
+ * Moves to the next row in the cursor. Before the first movement in the cursor, the
+ * "row pointer" is -1, and if you try to retrieve data at that position you will get an
+ * exception.
+ */
+ while (mCursor.moveToNext()) {
+
+ // Gets the value from the column.
+ newWord = mCursor.getString(index);
+
+ // Insert code here to process the retrieved word.
+
+ ...
+
+ // end of while loop
+ }
+} else {
+
+ // Insert code here to report an error if the cursor is null or the provider threw an exception.
+}
+</pre>
+<p>
+ Implementasi {@link android.database.Cursor} berisi beberapa metode "get" untuk
+ mengambil berbagai tipe data dari objek. Misalnya, cuplikan sebelumnya
+ menggunakan {@link android.database.Cursor#getString getString()}. Implementasi juga memiliki
+ metode {@link android.database.Cursor#getType getType()} yang menghasilkan nilai yang menunjukkan
+ tipe data kolom.
+</p>
+
+
+ <!-- Requesting permissions -->
+<h2 id="Permissions">Izin Penyedia Konten</h2>
+<p>
+ Aplikasi penyedia bisa menetapkan izin yang harus dimiliki aplikasi lain untuk
+ mengakses data penyedia. Izin ini akan memastikan bahwa pengguna mengetahui data
+ yang coba diakses oleh aplikasi. Berdasarkan ketentuan penyedia, aplikasi lain
+ meminta izin yang diperlukannya untuk mengakses penyedia. Pengguna akhir akan melihat
+ izin yang diminta saat menginstal aplikasi.
+</p>
+<p>
+ Jika aplikasi penyedia tidak menetapkan izin apa pun, maka aplikasi lain tidak memiliki
+ akses ke data penyedia. Akan tetapi, komponen-komponen dalam aplikasi penyedia selalu memiliki
+ akses penuh untuk baca dan tulis, izin apa pun yang ditetapkan.
+</p>
+<p>
+ Seperti disebutkan sebelumnya, Penyedia Kamus Pengguna mensyaratkan izin
+ <code>android.permission.READ_USER_DICTIONARY</code> untuk mengambil data darinya.
+ Penyedia memiliki izin <code>android.permission.WRITE_USER_DICTIONARY</code>
+ yang terpisah untuk menyisipkan, memperbarui, atau menghapus data.
+</p>
+<p>
+ Untuk mendapatkan izin yang diperlukan untuk mengakses penyedia, aplikasi memintanya dengan elemen
+<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>
+ dalam file manifesnya. Bila Android Package Manager memasang aplikasi, pengguna
+ harus menyetujui semua izin yang diminta aplikasi. Jika pengguna menyetujui semuanya,
+ Package Manager akan melanjutkan instalasi; jika pengguna tidak menyetujui, Package Manager
+ akan membatalkan instalasi.
+</p>
+<p>
+ Elemen
+<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>
+ berikut meminta akses baca ke Penyedia Kamus Pengguna:
+</p>
+<pre>
+ <uses-permission android:name="android.permission.READ_USER_DICTIONARY">
+</pre>
+<p>
+ Dampak izin pada akses penyedia dijelaskan secara lebih detail dalam panduan
+ <a href="{@docRoot}guide/topics/security/security.html">Keamanan dan Izin</a>.
+</p>
+
+
+<!-- Inserting, Updating, and Deleting Data -->
+<h2 id="Modifications">Menyisipkan, Memperbarui, dan Menghapus Data</h2>
+<p>
+ Lewat cara yang sama dengan cara mengambil data dari penyedia, Anda juga menggunakan interaksi antara
+ klien penyedia dan {@link android.content.ContentProvider} penyedia untuk memodifikasi data.
+ Anda memanggil metode {@link android.content.ContentResolver} dengan argumen yang diteruskan ke
+ metode {@link android.content.ContentProvider} yang sesuai. Penyedia dan klien penyedia
+ menangani secara otomatis keamanan dan komunikasi antar-proses.
+</p>
+<h3 id="Inserting">Menyisipkan data</h3>
+<p>
+ Untuk menyisipkan data ke penyedia, Anda memanggil metode
+ {@link android.content.ContentResolver#insert ContentResolver.insert()}.
+ Metode ini menyisipkan sebuah baris baru ke penyedia itu dan menghasilkan URI konten untuk baris itu.
+ Cuplikan ini menampilkan cara menyisipkan sebuah kata baru ke Penyedia Kamus Pengguna:
+</p>
+<pre class="prettyprint">
+// Defines a new Uri object that receives the result of the insertion
+Uri mNewUri;
+
+...
+
+// Defines an object to contain the new values to insert
+ContentValues mNewValues = new ContentValues();
+
+/*
+ * Sets the values of each column and inserts the word. The arguments to the "put"
+ * method are "column name" and "value"
+ */
+mNewValues.put(UserDictionary.Words.APP_ID, "example.user");
+mNewValues.put(UserDictionary.Words.LOCALE, "en_US");
+mNewValues.put(UserDictionary.Words.WORD, "insert");
+mNewValues.put(UserDictionary.Words.FREQUENCY, "100");
+
+mNewUri = getContentResolver().insert(
+ UserDictionary.Word.CONTENT_URI, // the user dictionary content URI
+ mNewValues // the values to insert
+);
+</pre>
+<p>
+ Data untuk baris baru masuk ke dalam satu objek {@link android.content.ContentValues}, yang
+ serupa bentuknya dengan kursor satu-baris. Kolom dalam objek ini tidak perlu memiliki
+ tipe data yang sama, dan jika Anda tidak ingin menetapkan nilai sama sekali, Anda bisa mengatur kolom
+ ke <code>null</code> dengan menggunakan {@link android.content.ContentValues#putNull ContentValues.putNull()}.
+</p>
+<p>
+ Cuplikan ini tidak menambahkan kolom <code>_ID</code>, karena kolom ini dipelihara
+ secara otomatis. Penyedia menetapkan sebuah nilai unik <code>_ID</code> ke setiap baris yang
+ ditambahkan. Penyedia biasanya menggunakan nilai ini sebagai kunci utama tabel.
+</p>
+<p>
+ URI konten yang dihasilkan dalam <code>newUri</code> akan mengidentifikasi baris yang baru ditambahkan, dengan
+ format berikut:
+</p>
+<pre>
+content://user_dictionary/words/<id_value>
+</pre>
+<p>
+ <code><id_value></code> adalah konten <code>_ID</code> untuk baris baru.
+ Kebanyakan penyedia bisa mendeteksi bentuk URI konten ini secara otomatis kemudian melakukan
+ operasi yang diminta pada baris tersebut.
+</p>
+<p>
+ Untuk mendapatkan nilai <code>_ID</code> dari {@link android.net.Uri} yang dihasilkan, panggil
+ {@link android.content.ContentUris#parseId ContentUris.parseId()}.
+</p>
+<h3 id="Updating">Memperbarui data</h3>
+<p>
+ Untuk memperbarui sebuah baris, gunakan objek {@link android.content.ContentValues} dengan
+ nilai-nilai yang diperbarui, persis seperti yang Anda lakukan pada penyisipan, dan kriteria pemilihan persis seperti yang Anda lakukan pada query.
+ Metode klien yang Anda gunakan adalah
+ {@link android.content.ContentResolver#update ContentResolver.update()}. Anda hanya perlu menambahkan
+ nilai-nilai ke objek {@link android.content.ContentValues} untuk kolom yang sedang Anda perbarui. Jika Anda
+ ingin membersihkan konten kolom, aturlah nilai ke <code>null</code>.
+</p>
+<p>
+ Cuplikan berikut mengubah semua baris yang kolom lokalnya memiliki bahasa "en" ke
+ lokal <code>null</code>. Nilai hasil adalah jumlah baris yang diperbarui:
+</p>
+<pre>
+// Defines an object to contain the updated values
+ContentValues mUpdateValues = new ContentValues();
+
+// Defines selection criteria for the rows you want to update
+String mSelectionClause = UserDictionary.Words.LOCALE + "LIKE ?";
+String[] mSelectionArgs = {"en_%"};
+
+// Defines a variable to contain the number of updated rows
+int mRowsUpdated = 0;
+
+...
+
+/*
+ * Sets the updated value and updates the selected words.
+ */
+mUpdateValues.putNull(UserDictionary.Words.LOCALE);
+
+mRowsUpdated = getContentResolver().update(
+ UserDictionary.Words.CONTENT_URI, // the user dictionary content URI
+ mUpdateValues // the columns to update
+ mSelectionClause // the column to select on
+ mSelectionArgs // the value to compare to
+);
+</pre>
+<p>
+ Anda juga harus membersihkan input pengguna bila memanggil
+ {@link android.content.ContentResolver#update ContentResolver.update()}. Untuk mengetahui selengkapnya tentang
+ hal ini, bacalah bagian <a href="#Injection">Melindungi dari input merusak</a>.
+</p>
+<h3 id="Deleting">Menghapus data</h3>
+<p>
+ Menghapus baris serupa dengan mengambil baris data: Anda menetapkan kriteria pemilihan untuk baris
+ yang ingin Anda hapus dan metode klien akan menghasilkan jumlah baris yang dihapus.
+ Cuplikan berikut menghapus baris yang appid-nya sama dengan "user". Metode menghasilkan
+ jumlah baris yang dihapus.
+</p>
+<pre>
+
+// Defines selection criteria for the rows you want to delete
+String mSelectionClause = UserDictionary.Words.APP_ID + " LIKE ?";
+String[] mSelectionArgs = {"user"};
+
+// Defines a variable to contain the number of rows deleted
+int mRowsDeleted = 0;
+
+...
+
+// Deletes the words that match the selection criteria
+mRowsDeleted = getContentResolver().delete(
+ UserDictionary.Words.CONTENT_URI, // the user dictionary content URI
+ mSelectionClause // the column to select on
+ mSelectionArgs // the value to compare to
+);
+</pre>
+<p>
+ Anda juga harus membersihkan input pengguna bila memanggil
+ {@link android.content.ContentResolver#delete ContentResolver.delete()}. Untuk mengetahui selengkapnya tentang
+ hal ini, bacalah bagian <a href="#Injection">Melindungi dari input merusak</a>.
+</p>
+<!-- Provider Data Types -->
+<h2 id="DataTypes">Tipe Data Penyedia</h2>
+<p>
+ Penyedia konten bisa menawarkan berbagai tipe data. Penyedia Kamus Pengguna hanya menawarkan
+ teks, namun penyedia juga bisa menawarkan format berikut:
+</p>
+ <ul>
+ <li>
+ integer
+ </li>
+ <li>
+ long integer (long)
+ </li>
+ <li>
+ floating point
+ </li>
+ <li>
+ long floating point (double)
+ </li>
+ </ul>
+<p>
+ Tipe data lain yang sering digunakan penyedia adalah Binary Large OBject (BLOB) yang diimplementasikan sebagai
+ larik byte 64 KB. Anda bisa melihat tipe data yang tersedia dengan memperhatikan metode "get"
+ kelas {@link android.database.Cursor}.
+</p>
+<p>
+ Tipe data tiap kolom dalam penyedia biasanya tercantum dalam dokumentasinya.
+ Tipe data untuk Penyedia Kamus Pengguna tercantum dalam dokumentasi acuan
+ untuk kelas kontraknya {@link android.provider.UserDictionary.Words} (kelas kontrak
+ dijelaskan di bagian <a href="#ContractClasses">Kelas-kelas Kontrak</a>).
+ Anda juga bisa menentukan tipe data dengan memanggil {@link android.database.Cursor#getType
+ Cursor.getType()}.
+</p>
+<p>
+ Penyedia juga memelihara informasi tipe data MIME untuk tiap URI konten yang didefinisikannya. Anda bisa
+ menggunakan informasi tipe MIME untuk mengetahui apakah aplikasi Anda bisa menangani data yang
+ disediakan penyedia, atau memilih tipe penanganan berdasarkan tipe MIME. Anda biasanya memerlukan
+ tipe MIME saat menggunakan penyedia yang berisi
+ struktur atau file data yang kompleks. Misalnya, tabel {@link android.provider.ContactsContract.Data}
+ dalam Penyedia Kontak menggunakan tipe MIME untuk memberi label tipe data kontak yang disimpan di tiap
+ baris. Untuk mendapatkan tipe MIME yang sesuai dengan URI konten, panggil
+ {@link android.content.ContentResolver#getType ContentResolver.getType()}.
+</p>
+<p>
+ Bagian <a href="#MIMETypeReference">Acuan Tipe MIME</a> menerangkan
+ sintaks tipe MIME baik yang standar maupun custom.
+</p>
+
+
+<!-- Alternative Forms of Provider Access -->
+<h2 id="AltForms">Bentuk-Bentuk Alternatif Akses Penyedia</h2>
+<p>
+ Tiga bentuk alternatif akses penyedia adalah penting dalam pengembangan aplikasi:
+</p>
+<ul>
+ <li>
+ <a href="#Batch">Akses batch</a>: Anda bisa membuat sebuah batch panggilan akses dengan metode-metode dalam
+ kelas {@link android.content.ContentProviderOperation}, kemudian menerapkannya dengan
+ {@link android.content.ContentResolver#applyBatch ContentResolver.applyBatch()}.
+ </li>
+ <li>
+ Query asinkron: Anda harus melakukan query dalam thread terpisah. Satu cara melakukannya adalah
+ menggunakan objek {@link android.content.CursorLoader}. Contoh-contoh dalam panduan
+ <a href="{@docRoot}guide/components/loaders.html">Loader</a> memperagakan
+ cara melakukannya.
+ </li>
+ <li>
+ <a href="#Intents">Akses data melalui intent</a>: Walaupun tidak bisa mengirim intent
+ ke penyedia secara langsung, Anda bisa mengirim intent ke aplikasi penyedia, yang
+ biasanya paling lengkap dibekali untuk memodifikasi data penyedia.
+ </li>
+</ul>
+<p>
+ Akses batch dan modifikasi melalui intent dijelaskan dalam bagian-bagian berikut.
+</p>
+<h3 id="Batch">Akses batch</h3>
+<p>
+ Akses batch ke penyedia berguna untuk menyisipkan baris dalam jumlah besar, atau menyisipkan
+ baris ke dalam beberapa tabel dalam panggilan metode yang sama, atau biasanya melakukan satu set
+ operasi lintas batas proses sebagai transaksi (operasi atomik).
+</p>
+<p>
+ Untuk mengakses penyedia dalam "mode batch",
+ buat satu larik objek {@link android.content.ContentProviderOperation}, kemudian
+ kirim larik itu ke penyedia konten dengan
+ {@link android.content.ContentResolver#applyBatch ContentResolver.applyBatch()}. Anda meneruskan
+ <em>otoritas</em> penyedia konten ke metode ini, daripada URI konten tertentu.
+ Ini memungkinkan tiap objek {@link android.content.ContentProviderOperation} dalam larik untuk bekerja
+ terhadap tabel yang berbeda. Panggilan ke {@link android.content.ContentResolver#applyBatch
+ ContentResolver.applyBatch()} menghasilkan satu larik hasil.
+</p>
+<p>
+ Keterangan kelas kontrak {@link android.provider.ContactsContract.RawContacts}
+ menyertakan cuplikan kode yang memperagakan penyisipan batch. Contoh aplikasi
+ <a href="{@docRoot}resources/samples/ContactManager/index.html">Contacts Manager</a>
+ berisi contoh akses batch dalam file sumber <code>ContactAdder.java</code>-nya
+.
+</p>
+<div class="sidebox-wrapper">
+<div class="sidebox">
+<h2>Menampilkan data dengan aplikasi pembantu</h2>
+<p>
+ Jika aplikasi Anda <em>memang</em> memiliki izin akses, Anda masih mungkin perlu menggunakan
+ intent untuk menampilkan data dalam aplikasi lain. Misalnya, aplikasi Kalender menerima
+ intent {@link android.content.Intent#ACTION_VIEW}, yang menampilkan tanggal atau kejadian tertentu.
+ Hal ini memungkinkan Anda menampilkan informasi kalender tanpa harus membuat UI sendiri.
+ Untuk mengetahui selengkapnya tentang fitur ini, lihat panduan
+ <a href="{@docRoot}guide/topics/providers/calendar-provider.html">Penyedia Kalender</a>.
+</p>
+<p>
+ Aplikasi yang Anda kirimi intent tidak harus aplikasi
+ yang terkait dengan penyedia. Misalnya, Anda bisa mengambil satu kontak dari
+ Penyedia Kontak, kemudian mengirim intent {@link android.content.Intent#ACTION_VIEW}
+ berisi URI konten untuk gambar kontak itu ke penampil gambar.
+</p>
+</div>
+</div>
+<h3 id="Intents">Akses data melalui intent</h3>
+<p>
+ Intent bisa menyediakan akses tidak langsung ke penyedia konten. Anda memperbolehkan pengguna mengakses
+ data dalam penyedia sekalipun aplikasi Anda tidak memiliki izin akses, baik dengan
+ mendapatkan intent yang dihasilkan aplikasi yang memiliki izin, atau dengan mengaktifkan
+ aplikasi yang memiliki izin dan membiarkan pengguna melakukan pekerjaan di dalamnya.
+</p>
+<h4>Mendapatkan akses dengan izin sementara</h4>
+<p>
+ Anda bisa mengakses data dalam penyedia konten, sekalipun tidak memiliki
+ izin akses yang sesuai, dengan mengirimkan intent ke aplikasi yang memang memiliki izin dan
+ menerima hasil berupa intent berisi izin "URI".
+ Inilah izin untuk URI konten tertentu yang berlaku hingga aktivitas yang menerima
+ izin selesai. Aplikasi yang memiliki izin tetap akan memberikan
+ izin sementara dengan mengatur flag dalam intent yang dihasilkan:
+</p>
+<ul>
+ <li>
+ <strong>Izin baca:</strong>
+ {@link android.content.Intent#FLAG_GRANT_READ_URI_PERMISSION}
+ </li>
+ <li>
+ <strong>Izin tulis:</strong>
+ {@link android.content.Intent#FLAG_GRANT_WRITE_URI_PERMISSION}
+ </li>
+</ul>
+<p class="note">
+ <strong>Catatan:</strong> Flag ini tidak memberikan akses baca atau tulis umum ke penyedia
+ yang otoritasnya dimuat dalam URI konten. Aksesnya hanya untuk URI itu sendiri.
+</p>
+<p>
+ Penyedia mendefinisikan izin URI untuk URI konten dalam manifesnya, dengan menggunakan atribut
+<code><a href="{@docRoot}guide/topics/manifest/provider-element.html#gprmsn">android:grantUriPermission</a></code>
+ dari elemen
+<code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code>
+, serta elemen anak
+<code><a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html"><grant-uri-permission></a></code>
+ dari elemen
+<code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code>.
+ Mekanisme izin URI dijelaskan secara lebih detail dalam panduan
+ <a href="{@docRoot}guide/topics/security/security.html">Keamanan dan Izin</a>,
+ di bagian "Izin URI".
+</p>
+<p>
+ Misalnya, Anda bisa mengambil data untuk satu kontak di Penyedia Kontak, sekalipun tidak
+ memiliki izin {@link android.Manifest.permission#READ_CONTACTS}. Anda mungkin ingin melakukan
+ ini dalam aplikasi yang mengirim kartu ucapan elektronik ke seorang kenalan pada hari ulang tahunnya. Sebagai ganti
+ meminta {@link android.Manifest.permission#READ_CONTACTS}, yang memberi Anda akses ke semua
+ kontak pengguna dan semua informasinya, Anda lebih baik membiarkan pengguna mengontrol
+ kontak-kontak yang akan digunakan oleh aplikasi Anda. Caranya, gunakan proses berikut:
+</p>
+<ol>
+ <li>
+ Aplikasi Anda akan mengirim intent berisi tindakan
+ {@link android.content.Intent#ACTION_PICK} dan tipe MIME "contacts"
+ {@link android.provider.ContactsContract.RawContacts#CONTENT_ITEM_TYPE}, dengan menggunakan
+ metode {@link android.app.Activity#startActivityForResult
+ startActivityForResult()}.
+ </li>
+ <li>
+ Karena intent ini cocok dengan filter intent untuk
+ aktivitas "pemilihan" aplikasi People, aktivitas akan muncul ke latar depan.
+ </li>
+ <li>
+ Dalam aktivitas pemilihan, pengguna memilih sebuah
+ kontak untuk diperbarui. Bila ini terjadi, aktivitas pemilihan akan memanggil
+ {@link android.app.Activity#setResult setResult(resultcode, intent)}
+ untuk membuat intent yang akan diberikan kembali ke aplikasi Anda. Intent itu berisi URI konten
+ kontak yang dipilih pengguna, dan flag "extras"
+ {@link android.content.Intent#FLAG_GRANT_READ_URI_PERMISSION}. Semua flag ini memberikan
+ izin URI ke aplikasi Anda untuk membaca data kontak yang ditunjuk oleh
+ URI konten. Aktivitas pemilihan kemudian memanggil {@link android.app.Activity#finish()} untuk
+ mengembalikan kontrol ke aplikasi Anda.
+ </li>
+ <li>
+ Aktivitas Anda akan kembali ke latar depan, dan sistem memanggil metode
+ {@link android.app.Activity#onActivityResult onActivityResult()}
+ aktivitas Anda. Metode ini menerima intent yang dihasilkan oleh aktivitas pemilihan dalam
+ aplikasi People.
+ </li>
+ <li>
+ Dengan URI konten dari intent yang dihasilkan, Anda bisa membaca data kontak
+ dari Penyedia Kontak, sekalipun Anda tidak meminta izin akses baca tetap
+ ke penyedia dalam manifes Anda. Anda kemudian bisa mendapatkan informasi hari ulang tahun si kontak
+ atau alamat emailnya, kemudian mengirim kartu ucapan elektronik.
+ </li>
+</ol>
+<h4>Menggunakan aplikasi lain</h4>
+<p>
+ Satu cara mudah agar pengguna bisa memodifikasi data yang izin aksesnya tidak Anda miliki adalah
+ mengaktifkan aplikasi yang memiliki izin dan membiarkan pengguna melakukan pekerjaannya di sana.
+</p>
+<p>
+ Misalnya, aplikasi Kalender menerima
+ intent {@link android.content.Intent#ACTION_INSERT}, yang memungkinkan Anda mengaktifkan
+ UI penyisipan aplikasi itu. Anda bisa meneruskan data "extras" dalam intent ini, yang
+ digunakan aplikasi untuk mengisi dahulu UI-nya. Karena kejadian berulang memiliki sintaks yang rumit,
+ cara yang lebih disukai untuk menyisipkan kejadian ke dalam Penyedia Kalender adalah mengaktifkan aplikasi Kalender dengan
+ {@link android.content.Intent#ACTION_INSERT}, kemudian membiarkan pengguna menyisipkan kejadian di sana.
+</p>
+<!-- Contract Classes -->
+<h2 id="ContractClasses">Kelas-kelas Kontrak</h2>
+<p>
+ Kelas kontrak mendefinisikan konstanta yang membantu aplikasi menggunakan URI konten, nama
+ kolom, tindakan intent, dan fitur lain pada penyedia konten. Kelas kontrak tidak
+ disertakan secara otomatis bersama penyedia; pengembang penyedia harus mendefinisikannya kemudian
+ membuatnya tersedia bagi pengembang lain. Banyak penyedia yang disertakan pada platform Android
+ memiliki kelas kontrak yang sesuai dalam {@link android.provider} paketnya.
+</p>
+<p>
+ Misalnya, Penyedia Kamus Pengguna memiliki kelas kontrak
+ {@link android.provider.UserDictionary} yang berisi URI konten dan konstanta nama kolom. URI
+ konten untuk tabel "words" didefinisikan dalam konstanta
+ {@link android.provider.UserDictionary.Words#CONTENT_URI UserDictionary.Words.CONTENT_URI}.
+ Kelas {@link android.provider.UserDictionary.Words} juga berisi konstanta nama kolom,
+ yang digunakan dalam cuplikan contoh pada panduan ini. Misalnya, sebuah proyeksi query bisa
+ didefinisikan sebagai:
+</p>
+<pre>
+String[] mProjection =
+{
+ UserDictionary.Words._ID,
+ UserDictionary.Words.WORD,
+ UserDictionary.Words.LOCALE
+};
+</pre>
+<p>
+ Kelas kontrak lain adalah {@link android.provider.ContactsContract} untuk Penyedia Kontak.
+ Dokumentasi acuan untuk kelas ini menyertakan contoh cuplikan kode. Salah satu
+ subkelasnya, {@link android.provider.ContactsContract.Intents.Insert}, adalah
+ kelas kontrak yang berisi konstanta untuk intent dan data intent.
+</p>
+
+
+<!-- MIME Type Reference -->
+<h2 id="MIMETypeReference">Acuan Tipe MIME</h2>
+<p>
+ Penyedia konten bisa menghasilkan tipe media MIME standar, atau string tipe MIME custom, atau keduanya.
+</p>
+<p>
+ Tipe MIME memiliki format
+</p>
+<pre>
+<em>type</em>/<em>subtype</em>
+</pre>
+<p>
+ Misalnya, tipe MIME <code>text/html</code> yang dikenal luas memiliki tipe <code>text</code> dan
+ subtipe <code>html</code>. Jika penyedia menghasilkan tipe ini untuk sebuah URI, artinya
+ query dengan URI itu akan menghasilkan teks berisi tag HTML.
+</p>
+<p>
+ String tipe MIME custom, yang juga disebut dengan tipe MIME "khusus vendor", memiliki nilai-nilai
+ <em>tipe</em> dan <em>subtipe</em> yang lebih kompleks. Nilai <em>tipe</em> selalu
+</p>
+<pre>
+vnd.android.cursor.<strong>dir</strong>
+</pre>
+<p>
+ untuk beberapa baris, atau
+</p>
+<pre>
+vnd.android.cursor.<strong>item</strong>
+</pre>
+<p>
+ untuk satu baris.
+</p>
+<p>
+ <em>Subtipe</em> adalah khusus penyedia. Penyedia bawaan Android biasanya memiliki subtipe
+ sederhana. Misalnya, bila aplikasi Contacts membuat satu baris untuk nomor telepon,
+ aplikasi akan mengatur tipe MIME berikut di baris itu:
+</p>
+<pre>
+vnd.android.cursor.item/phone_v2
+</pre>
+<p>
+ Perhatikan bahwa nilai subtipe adalah sekadar <code>phone_v2</code>.
+</p>
+<p>
+ Pengembang penyedia lain bisa membuat pola subtipe sendiri berdasarkan
+ otoritas dan nama-nama tabel penyedia. Misalnya, perhatikan penyedia yang berisi jadwal kereta api.
+ Otoritas penyedia adalah <code>com.example.trains</code>, dan berisi tabel-tabel
+ Line1, Line2, dan Line3. Untuk merespons URI konten
+</p>
+<p>
+<pre>
+content://com.example.trains/Line1
+</pre>
+<p>
+ untuk tabel Line1, penyedia menghasilkan tipe MIME
+</p>
+<pre>
+vnd.android.cursor.<strong>dir</strong>/vnd.example.line1
+</pre>
+<p>
+ Untuk merespons URI konten
+</p>
+<pre>
+content://com.example.trains/Line2/5
+</pre>
+<p>
+ untuk baris 5 di tabel Line2, penyedia menghasilkan tipe MIME
+</p>
+<pre>
+vnd.android.cursor.<strong>item</strong>/vnd.example.line2
+</pre>
+<p>
+ Kebanyakan penyedia konten mendefinisikan konstanta kelas kontrak untuk tipe MIME yang digunakannya. Kelas kontrak
+ {@link android.provider.ContactsContract.RawContacts} pada Penyedia Kontak
+ misalnya, mendefinisikan konstanta
+ {@link android.provider.ContactsContract.RawContacts#CONTENT_ITEM_TYPE} untuk tipe MIME
+ baris kontak mentah tunggal.
+</p>
+<p>
+ URI konten untuk baris-baris tunggal dijelaskan di bagian
+ <a href="#ContentURIs">URI Konten</a>.
+</p>
diff --git a/docs/html-intl/intl/id/guide/topics/providers/content-provider-creating.jd b/docs/html-intl/intl/id/guide/topics/providers/content-provider-creating.jd
new file mode 100644
index 0000000..7fbc613
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/topics/providers/content-provider-creating.jd
@@ -0,0 +1,1214 @@
+page.title=Membuat Penyedia Konten
+@jd:body
+<div id="qv-wrapper">
+<div id="qv">
+
+
+<h2>Dalam dokumen ini</h2>
+<ol>
+ <li>
+ <a href="#DataStorage">Mendesain Penyimpanan Data</a>
+ </li>
+ <li>
+ <a href="#ContentURI">Mendesain URI Konten</a>
+ </li>
+ <li>
+ <a href="#ContentProvider">Mengimplementasikan Kelas ContentProvider</a>
+ <ol>
+ <li>
+ <a href="#RequiredAccess">Metode-Metode yang Diperlukan</a>
+ </li>
+ <li>
+ <a href="#Query">Mengimplementasikan metode query()</a>
+ </li>
+ <li>
+ <a href="#Insert">Mengimplementasikan metode insert()</a>
+ </li>
+ <li>
+ <a href="#Delete">Mengimplementasikan metode delete()</a>
+ </li>
+ <li>
+ <a href="#Update">Mengimplementasikan metode update()</a>
+ </li>
+ <li>
+ <a href="#OnCreate">Mengimplementasikan metode onCreate()</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#MIMETypes">Mengimplementasikan Tipe MIME Penyedia Konten</a>
+ <ol>
+ <li>
+ <a href="#TableMIMETypes">Tipe MIME untuk tabel</a>
+ </li>
+ <li>
+ <a href="#FileMIMETypes">Tipe MIME untuk file</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#ContractClass">Mengimplementasikan Kelas Kontrak</a>
+ </li>
+ <li>
+ <a href="#Permissions">Mengimplementasikan Izin Penyedia Konten</a>
+ </li>
+ <li>
+ <a href="#ProviderElement">Elemen <provider></a>
+ </li>
+ <li>
+ <a href="#Intents">Intent dan Akses Data</a>
+ </li>
+</ol>
+<h2>Kelas-kelas utama</h2>
+ <ol>
+ <li>
+ {@link android.content.ContentProvider}
+ </li>
+ <li>
+ {@link android.database.Cursor}
+ </li>
+ <li>
+ {@link android.net.Uri}
+ </li>
+ </ol>
+<h2>Contoh-Contoh Terkait</h2>
+ <ol>
+ <li>
+ <a href="{@docRoot}resources/samples/NotePad/index.html">
+ Aplikasi contoh Note Pad
+ </a>
+ </li>
+ </ol>
+<h2>Lihat juga</h2>
+ <ol>
+ <li>
+ <a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
+ Dasar-Dasar Penyedia Konten</a>
+ </li>
+ <li>
+ <a href="{@docRoot}guide/topics/providers/calendar-provider.html">
+ Penyedia Kalender</a>
+ </li>
+ </ol>
+</div>
+</div>
+
+
+<p>
+ Penyedia konten mengelola akses ke repository data pusat. Anda mengimplementasikan
+ penyedia sebagai satu atau beberapa kelas dalam aplikasi Android, bersama elemen-elemen dalam
+ file manifes. Salah satu kelas Anda mengimplementasikan subkelas
+ {@link android.content.ContentProvider}, yang merupakan antarmuka antara penyedia Anda dan
+ aplikasi lain. Walaupun penyedia konten dimaksudkan untuk menyediakan data bagi
+ aplikasi lain, Anda tentu saja bisa memiliki aktivitas dalam aplikasi yang memungkinkan pengguna
+ melakukan query dan memodifikasi data yang dikelola oleh penyedia Anda.
+</p>
+<p>
+ Bagian selebihnya dalam topik ini adalah daftar langkah-langkah dasar untuk membangun penyedia konten dan daftar
+ API yang akan digunakan.
+</p>
+
+
+<!-- Before You Start Building -->
+<h2 id="BeforeYouStart">Sebelum Anda Mulai Membangun</h2>
+<p>
+ Sebelum Anda mulai membangun penyedia, lakukanlah hal-hal berikut:
+</p>
+<ol>
+ <li>
+ <strong>Putuskan apakah Anda memerlukan penyedia konten</strong>. Anda perlu membangun sebuah
+ penyedia konten jika ingin menyediakan salah satu atau beberapa dari fitur berikut:
+ <ul>
+ <li>Anda ingin menawarkan data atau file yang kompleks ke aplikasi lain.</li>
+ <li>Anda ingin memungkinkan pengguna menyalin data yang kompleks dari aplikasi Anda ke dalam aplikasi lain.</li>
+ <li>Anda ingin menyediakan saran pencarian custom dengan menggunakan kerangka kerja pencarian.</li>
+ </ul>
+ <p>
+ Anda <em>tidak</em> mengharuskan penyedia untuk menggunakan database SQLite jika hanya digunakan dalam
+ aplikasi sendiri.
+ </p>
+ </li>
+ <li>
+ Jika Anda belum siap melakukannya, bacalah topik
+ <a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
+ Dasar-Dasar Penyedia Konten</a> untuk mengetahui selengkapnya tentang penyedia.
+ </li>
+</ol>
+<p>
+ Berikutnya, ikuti langkah-langkah ini untuk membangun penyedia:
+</p>
+<ol>
+ <li>
+ Desain penyimpanan mentah untuk data Anda. Penyedia konten menawarkan data dengan dua cara:
+ <dl>
+ <dt>
+ Data file
+ </dt>
+ <dd>
+ Data yang biasanya masuk ke dalam file, misalnya
+ foto, audio, atau video. Simpan file dalam ruang privat
+ aplikasi Anda. Untuk merespons permintaan file dari aplikasi lain,
+ penyedia Anda bisa menawarkan handle ke file tersebut.
+ </dd>
+ <dt>
+ Data "terstruktur"
+ </dt>
+ <dd>
+ Data yang biasanya masuk ke dalam database, larik, atau struktur serupa.
+ Simpan data dalam bentuk yang kompatibel dengan tabel berisi baris dan kolom. Baris
+ mewakili entitas, misalnya satu orang atau satu barang inventori. Kolom mewakili
+ beberapa data untuk entitas itu, misalnya nama orang atau harga barang. Cara umum untuk
+ menyimpan tipe data ini adalah dalam database SQLite, namun Anda bisa menggunakan tipe
+ penyimpanan apa saja yang persisten. Untuk mengetahui selengkapnya tentang tipe penyimpanan yang tersedia di
+ sistem Android, lihat bagian <a href="#DataStorage">
+ Mendesain Penyimpanan Data</a>.
+ </dd>
+ </dl>
+ </li>
+ <li>
+ Definisikan sebuah implementasi konkret kelas {@link android.content.ContentProvider} dan
+ metode yang diperlukannya. Kelas ini adalah antarmuka antara data Anda dan bagian selebihnya pada
+ sistem Android. Untuk informasi selengkapnya tentang kelas ini, lihat bagian
+ <a href="#ContentProvider">Mengimplementasikan Kelas ContentProvider</a>.
+ </li>
+ <li>
+ Definisikan string otoritas, semua URI isinya, dan nama-nama kolom penyedia. Jika Anda ingin
+ penyedia aplikasi menangani intent, definisikan juga semua tindakan intent, data ekstra,
+ dan flag. Definisikan juga izin yang akan Anda syaratkan terhadap aplikasi yang ingin
+ mengakses data Anda. Anda harus mempertimbangkan pendefinisian semua nilai ini sebagai konstanta di
+ kelas kontrak terpisah; nantinya, Anda bisa mengekspos kelas ini kepada pengembang lain. Untuk
+ informasi selengkapnya tentang URI konten, lihat
+ bagian <a href="#ContentURI">Mendesain URI Konten</a>.
+ Untuk informasi selengkapnya tentang intent, lihat
+ bagian <a href="#Intents">Intent dan Akses Data</a>.
+ </li>
+ <li>
+ Tambahkan bagian opsional lainnya, seperti data contoh atau implementasi
+ {@link android.content.AbstractThreadedSyncAdapter} yang bisa menyinkronkan data antara
+ penyedia dan data berbasis cloud.
+ </li>
+</ol>
+
+
+<!-- Designing Data Storage -->
+<h2 id="DataStorage">Mendesain Penyimpanan Data</h2>
+<p>
+ Penyedia konten adalah antarmuka ke data yang disimpan dalam format terstruktur. Sebelum membuat
+ antarmuka, Anda harus memutuskan cara menyimpan data. Anda bisa menyimpan data dalam bentuk apa saja yang Anda
+ sukai, kemudian mendesain antarmuka untuk membaca dan menulis data yang diperlukan.
+</p>
+<p>
+ Berikut ini adalah beberapa teknologi penyimpanan data yang tersedia di Android:
+</p>
+<ul>
+ <li>
+ Sistem Android menyertakan API database SQLite yang digunakan penyedia Android sendiri
+ untuk menyimpan data berorientasi tabel. Kelas
+ {@link android.database.sqlite.SQLiteOpenHelper} membantu Anda membuat database, dan kelas
+ {@link android.database.sqlite.SQLiteDatabase} adalah kelas dasar untuk mengakses
+ database.
+ <p>
+ Ingatlah bahwa Anda tidak harus menggunakan database untuk mengimplementasikan repository. Penyedia
+ muncul secara eksternal sebagai satu set tabel, yang serupa dengan sebuah database relasional, namun ini
+ bukan persyaratan untuk implementasi internal penyedia.
+ </p>
+ </li>
+ <li>
+ Untuk menyimpan file data, Android memiliki beragam API berorientasi file.
+ Untuk mengetahui selengkapnya tentang penyimpanan file, bacalah topik
+ <a href="{@docRoot}guide/topics/data/data-storage.html">Penyimpanan Data</a>. Jika Anda sedang
+ mendesain penyedia yang menawarkan data yang terkait dengan media seperti musik atau video, Anda bisa
+ memiliki penyedia yang mengombinasikan data tabel dan file.
+ </li>
+ <li>
+ Untuk bekerja dengan data berbasis jaringan, gunakan kelas-kelas dalam {@link java.net} dan
+ {@link android.net}. Anda juga bisa menyinkronkan data berbasis jaringan dengan penyimpanan data lokal
+ seperti database, kemudian menawarkan data sebagai tabel atau file.
+ Aplikasi contoh <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">
+ Sample Sync Adapter</a> memperagakan tipe sinkronisasi ini.
+ </li>
+</ul>
+<h3 id="DataDesign">
+ Pertimbangan desain data
+</h3>
+<p>
+ Berikut ini adalah beberapa tip untuk mendesain struktur data penyedia:
+</p>
+<ul>
+ <li>
+ Data tabel harus selalu memiliki kolom "kunci utama" yang dipelihara oleh penyedia
+ sebagai nilai numerik unik untuk setiap baris. Anda bisa menggunakan nilai ini untuk menautkan baris ke
+ baris yang terkait dalam tabel lain (dengan menggunakannya sebagai "kunci asing"). Walaupun Anda bisa menggunakan nama
+ apa saja untuk kolom ini, menggunakan {@link android.provider.BaseColumns#_ID BaseColumns._ID} adalah
+ pilihan terbaik, karena menautkan hasil query penyedia dengan
+ {@link android.widget.ListView} mensyaratkan bahwa salah satu kolom yang diambil memiliki nama
+ <code>_ID</code>.
+ </li>
+ <li>
+ Jika Anda ingin untuk menyediakan gambar bitmap atau potongan data berorientasi file lainnya yang berukuran sangat besar, simpanlah
+ data dalam sebuah file kemudian sediakan secara tidak langsung sebagai ganti menyimpannya secara langsung dalam
+ tabel. Jika melakukannya, Anda perlu memberi tahu pengguna penyedia Anda bahwa mereka perlu menggunakan metode file
+ {@link android.content.ContentResolver} untuk mengakses data.
+ </li>
+ <li>
+ Gunakan tipe data Binary Large OBject (BLOB) untuk menyimpan data yang bervariasi ukurannya atau memiliki
+ struktur yang beragam. Misalnya, Anda bisa menggunakan sebuah kolom BLOB untuk menyimpan
+ <a href="http://code.google.com/p/protobuf">buffer protokol</a> atau
+ <a href="http://www.json.org">struktur JSON</a>.
+ <p>
+ Anda juga bisa menggunakan BLOB untuk mengimplementasikan tabel yang <em>tidak bergantung skema</em>. Dalam
+ tipe tabel ini, Anda mendefinisikan kolom kunci utama, kolom tipe MIME, dan satu atau beberapa
+ kolom generik sebagai BLOB. Arti dari data dalam kolom-kolom BLOB ditunjukkan
+ oleh nilai dalam kolom tipe MIME. Cara ini memungkinkan Anda menyimpan berbagai tipe baris dalam
+ tabel yang sama. Tabel "data"
+ {@link android.provider.ContactsContract.Data} Penyedia Kontak adalah contoh tabel yang tidak bergantung skema
+ tersebut.
+ </p>
+ </li>
+</ul>
+<!-- Designing Content URIs -->
+<h2 id="ContentURI">Mendesain URI Konten</h2>
+<p>
+ <strong>URI konten</strong> adalah URI yang mengidentifikasi data dalam penyedia. URI Konten
+ berisi nama simbolis seluruh penyedia (<strong>otoritas</strong>nya) dan sebuah
+ nama yang menunjuk ke tabel atau file (<strong>path</strong>). Bagian id opsional menunjuk ke
+ satu baris dalam tabel. Setiap metode akses data
+ {@link android.content.ContentProvider} memiliki sebuah URI konten sebagai argumen; hal ini memungkinkan Anda
+ menentukan tabel, baris, atau file yang akan diakses.
+</p>
+<p>
+ Dasar-dasar URI konten dijelaskan dalam topik
+ <a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
+ Dasar-Dasar Penyedia Konten</a>.
+</p>
+<h3>Mendesain otoritas</h3>
+<p>
+ Penyedia biasanya memiliki otoritas tunggal, yang berfungsi sebagai nama internal Android-nya. Untuk
+ menghindari konflik dengan penyedia lain, Anda harus menggunakan kepemilikan domain internet (secara terbalik)
+ sebagai basis otoritas penyedia Anda. Karena saran ini juga berlaku untuk
+ nama-nama paket Android, Anda bisa mendefinisikan otoritas penyedia sebagai perluasan dari nama
+ paket yang berisi penyedia. Misalnya, jika nama paket Android Anda adalah
+ <code>com.example.<appname></code>, Anda harus memberikan penyedia Anda
+ otoritas <code>com.example.<appname>.provider</code>.
+</p>
+<h3>Mendesain struktur path</h3>
+<p>
+ Pengembang biasanya membuat URI konten dari otoritas dengan menambahkan path yang menunjuk ke
+ masing-masing tabel. Misalnya, jika Anda memiliki dua tabel <em>table1</em> dan
+ <em>table2</em>, Anda mengombinasikan otoritas dari contoh sebelumnya untuk menghasilkan
+ URI konten
+ <code>com.example.<appname>.provider/table1</code> dan
+ <code>com.example.<appname>.provider/table2</code>. Path tidak
+ dibatasi pada segmen tunggal, dan tidak harus berupa tabel untuk masing-masing tingkat path.
+</p>
+<h3>Menangani ID URI konten</h3>
+<p>
+ Berdasarkan standar, penyedia menawarkan akses ke satu baris dalam tabel dengan menerima URI konten
+ dengan sebuah nilai ID untuk baris itu di akhir URI. Juga berdasarkan standar, penyedia mencocokkan
+ nilai ID dengan kolom <code>_ID</code> tabel, dan melakukan akses yang diminta terhadap baris
+ yang cocok.
+</p>
+<p>
+ Standar ini memudahkan pola desain umum untuk aplikasi yang mengakses penyedia. Aplikasi
+ melakukan query terhadap penyedia dan menampilkan {@link android.database.Cursor} yang dihasilkan
+ dalam {@link android.widget.ListView} dengan menggunakan {@link android.widget.CursorAdapter}.
+ Definisi {@link android.widget.CursorAdapter} mengharuskan salah satu kolom dalam
+ {@link android.database.Cursor} berupa <code>_ID</code>
+</p>
+<p>
+ Pengguna kemudian mengambil salah satu baris yang ditampilkan dari UI untuk menemukan atau memodifikasi
+ data. Aplikasi mengambil baris yang sesuai dari {@link android.database.Cursor} yang mendukung
+ {@link android.widget.ListView}, mengambil nilai <code>_ID</code> untuk baris ini, menambahkannya ke
+ URI konten, dan mengirim permintaan akses ke penyedia. Penyedia nanti bisa melakukan
+ query atau modifikasi terhadap baris yang persis diambil pengguna.
+</p>
+<h3>Pola URI konten</h3>
+<p>
+ Untuk membantu Anda memilih tindakan yang diambil bagi URI konten yang masuk, API penyedia menyertakan
+ kelas praktis {@link android.content.UriMatcher}, yang memetakan "pola-pola" URI konten ke
+ nilai-nilai integer. Anda bisa menggunakan nilai-nilai integer dalam pernyataan <code>switch</code> yang
+ memilih tindakan yang diinginkan untuk URI konten atau URI yang cocok dengan pola tertentu.
+</p>
+<p>
+ Pola URI konten mencocokkan dengan URI konten menggunakan karakter wildcard:
+</p>
+ <ul>
+ <li>
+ <strong><code>*</code>:</strong> Mencocokkan string yang memiliki karakter yang sah dengan panjang berapa saja.
+ </li>
+ <li>
+ <strong><code>#</code>:</strong> Mencocokkan string karakter numerik dengan panjang berapa saja.
+ </li>
+ </ul>
+<p>
+ Sebagai contoh desain dan pemrograman penanganan URI konten, perhatikan penyedia dengan
+ otoritas <code>com.example.app.provider</code> yang mengenali URI konten berikut
+ yang menunjuk ke tabel-tabel:
+</p>
+<ul>
+ <li>
+ <code>content://com.example.app.provider/table1</code>: Tabel bernama <code>table1</code>.
+ </li>
+ <li>
+ <code>content://com.example.app.provider/table2/dataset1</code>: Tabel bernama
+ <code>dataset1</code>.
+ </li>
+ <li>
+ <code>content://com.example.app.provider/table2/dataset2</code>: Tabel bernama
+ <code>dataset2</code>.
+ </li>
+ <li>
+ <code>content://com.example.app.provider/table3</code>: Tabel bernama <code>table3</code>.
+ </li>
+</ul>
+<p>
+ Penyedia juga mengenali URI konten ini jika baris ID ditambahkan ke URI,
+ misalnya <code>content://com.example.app.provider/table3/1</code> untuk baris yang diidentifikasi oleh
+ <code>1</code> dalam <code>table3</code>.
+</p>
+<p>
+ Pola-pola URI konten berikut akan menjadi mungkin:
+</p>
+<dl>
+ <dt>
+ <code>content://com.example.app.provider/*</code>
+ </dt>
+ <dd>
+ Mencocokkan URI konten di penyedia.
+ </dd>
+ <dt>
+ <code>content://com.example.app.provider/table2/*</code>:
+ </dt>
+ <dd>
+ Mencocokkan URI konten untuk tabel-tabel <code>dataset1</code>
+ dan <code>dataset2</code>, namun tidak mencocokkan URI konten untuk <code>table1</code> atau
+ <code>table3</code>.
+ </dd>
+ <dt>
+ <code>content://com.example.app.provider/table3/#</code>: Mencocokkan URI konten
+ untuk satu baris di <code>table3</code>, misalnya
+ <code>content://com.example.app.provider/table3/6</code> untuk baris yang diidentifikasi oleh
+ <code>6</code>.
+ </dt>
+</dl>
+<p>
+ Cuplikan kode berikut menunjukkan cara kerja metode di {@link android.content.UriMatcher}.
+ Kode ini menangani URI seluruh tabel secara berbeda dengan URI untuk
+ satu baris, menggunakan pola URI konten
+ <code>content://<authority>/<path></code> untuk tabel, dan
+ <code>content://<authority>/<path>/<id></code> untuk satu baris.
+</p>
+<p>
+ Metode {@link android.content.UriMatcher#addURI(String, String, int) addURI()} memetakan
+ otoritas dan path ke nilai integer. Metode {@link android.content.UriMatcher#match(Uri)
+ match()} menghasilkan nilai integer URI. Pernyataan <code>switch</code>
+ memilih antara melakukan query seluruh tabel dan melakukan query satu record:
+</p>
+<pre class="prettyprint">
+public class ExampleProvider extends ContentProvider {
+...
+ // Creates a UriMatcher object.
+ private static final UriMatcher sUriMatcher;
+...
+ /*
+ * The calls to addURI() go here, for all of the content URI patterns that the provider
+ * should recognize. For this snippet, only the calls for table 3 are shown.
+ */
+...
+ /*
+ * Sets the integer value for multiple rows in table 3 to 1. Notice that no wildcard is used
+ * in the path
+ */
+ sUriMatcher.addURI("com.example.app.provider", "table3", 1);
+
+ /*
+ * Sets the code for a single row to 2. In this case, the "#" wildcard is
+ * used. "content://com.example.app.provider/table3/3" matches, but
+ * "content://com.example.app.provider/table3 doesn't.
+ */
+ sUriMatcher.addURI("com.example.app.provider", "table3/#", 2);
+...
+ // Implements ContentProvider.query()
+ public Cursor query(
+ Uri uri,
+ String[] projection,
+ String selection,
+ String[] selectionArgs,
+ String sortOrder) {
+...
+ /*
+ * Choose the table to query and a sort order based on the code returned for the incoming
+ * URI. Here, too, only the statements for table 3 are shown.
+ */
+ switch (sUriMatcher.match(uri)) {
+
+
+ // If the incoming URI was for all of table3
+ case 1:
+
+ if (TextUtils.isEmpty(sortOrder)) sortOrder = "_ID ASC";
+ break;
+
+ // If the incoming URI was for a single row
+ case 2:
+
+ /*
+ * Because this URI was for a single row, the _ID value part is
+ * present. Get the last path segment from the URI; this is the _ID value.
+ * Then, append the value to the WHERE clause for the query
+ */
+ selection = selection + "_ID = " uri.getLastPathSegment();
+ break;
+
+ default:
+ ...
+ // If the URI is not recognized, you should do some error handling here.
+ }
+ // call the code to actually do the query
+ }
+</pre>
+<p>
+ Kelas lainnya, {@link android.content.ContentUris}, menyediakan metode praktis untuk menggunakan
+ bagian <code>id</code> URI konten. Kelas-kelas {@link android.net.Uri} dan
+ {@link android.net.Uri.Builder} menyertakan metode praktis untuk mengurai
+ objek {@link android.net.Uri} yang ada dan membuat objek baru.
+</p>
+
+<!-- Implementing the ContentProvider class -->
+<h2 id="ContentProvider">Mengimplementasikan Kelas ContentProvider</h2>
+<p>
+ Instance {@link android.content.ContentProvider} mengelola akses
+ ke satu set data terstruktur dengan menangani permintaan dari aplikasi lain. Semua bentuk
+ akses pada akhirnya akan memanggil {@link android.content.ContentResolver}, yang kemudian memanggil
+ metode konkret {@link android.content.ContentProvider} untuk mendapatkan akses.
+</p>
+<h3 id="RequiredAccess">Metode-metode yang diperlukan</h3>
+<p>
+ Kelas abstrak {@link android.content.ContentProvider} mendefinisikan enam metode abstrak yang
+ harus Anda implementasikan sebagai bagian dari subkelas konkret Anda sendiri. Semua metode ini kecuali
+ {@link android.content.ContentProvider#onCreate() onCreate()} dipanggil oleh aplikasi klien
+ yang berupaya mengakses penyedia konten Anda:
+</p>
+<dl>
+ <dt>
+ {@link android.content.ContentProvider#query(Uri, String[], String, String[], String)
+ query()}
+ </dt>
+ <dd>
+ Mengambil data dari penyedia Anda. Menggunakan argumen untuk memilih tabel yang akan
+ di-query, baris dan kolom yang akan dihasilkan, dan urutan sortir hasilnya.
+ Menghasilkan data berupa objek {@link android.database.Cursor}.
+ </dd>
+ <dt>
+ {@link android.content.ContentProvider#insert(Uri, ContentValues) insert()}
+ </dt>
+ <dd>
+ Menyisipkan baris baru ke dalam penyedia Anda. Menggunakan argumen untuk memilih
+ tabel tujuan dan mendapatkan nilai-nilai kolom yang akan digunakan. Menghasilkan URI konten untuk
+ baris yang baru disisipkan.
+ </dd>
+ <dt>
+ {@link android.content.ContentProvider#update(Uri, ContentValues, String, String[])
+ update()}
+ </dt>
+ <dd>
+ Memperbarui baris yang ada di penyedia Anda. Menggunakan argumen untuk memilih tabel dan baris
+ yang akan diperbarui dan mendapatkan nilai-nilai kolom yang diperbarui. Menghasilkan jumlah baris yang diperbarui.
+ </dd>
+ <dt>
+ {@link android.content.ContentProvider#delete(Uri, String, String[]) delete()}
+ </dt>
+ <dd>
+ Menghapus baris dari penyedia Anda. Menggunakan argumen untuk memilih tabel dan baris yang akan
+ dihapus. Menghasilkan jumlah baris yang dihapus.
+ </dd>
+ <dt>
+ {@link android.content.ContentProvider#getType(Uri) getType()}
+ </dt>
+ <dd>
+ Menghasilkan tipe MIME yang sesuai dengan URI konten. Metode ini dijelaskan lebih detail
+ di bagian <a href="#MIMETypes">Mengimplementasikan Tipe MIME Penyedia Konten</a>.
+ </dd>
+ <dt>
+ {@link android.content.ContentProvider#onCreate() onCreate()}
+ </dt>
+ <dd>
+ Inisialisasi penyedia Anda. Sistem Android memanggil metode ini segera setelah
+ membuat penyedia Anda. Perhatikan bahwa penyedia Anda tidak dibuat hingga
+ objek {@link android.content.ContentResolver} mencoba mengaksesnya.
+ </dd>
+</dl>
+<p>
+ Perhatikan bahwa metode-metode ini memiliki signature yang sama dengan
+ metode-metode {@link android.content.ContentResolver} yang sama namanya.
+</p>
+<p>
+ Implementasi metode-metode ini harus memperhitungkan hal-hal berikut:
+</p>
+<ul>
+ <li>
+ Semua metode ini kecuali {@link android.content.ContentProvider#onCreate() onCreate()}
+ bisa dipanggil oleh beberapa thread sekaligus, jadi harus thread-safe (aman untuk thread). Untuk mengetahui
+ selengkapnya tentang multi-thread, lihat topik
+ <a href="{@docRoot}guide/components/processes-and-threads.html">
+ Proses dan Thread</a>.
+ </li>
+ <li>
+ Hindari melakukan operasi yang lama dalam {@link android.content.ContentProvider#onCreate()
+ onCreate()}. Tunda inisialisasi tugas hingga benar-benar diperlukan.
+ Bagian <a href="#OnCreate">Mengimplementasikan metode onCreate()</a>
+ membahas hal ini secara lebih detail.
+ </li>
+ <li>
+ Walaupun harus mengimplementasikan metode-metode ini, kode Anda tidak harus melakukan apa pun selain
+ tipe data yang diharapkan. Misalnya, Anda mungkin ingin mencegah aplikasi lain
+ menyisipkan data ke dalam beberapa tabel. Caranya, Anda bisa mengabaikan panggilan ke
+ {@link android.content.ContentProvider#insert(Uri, ContentValues) insert()} dan menghasilkan
+ 0.
+ </li>
+</ul>
+<h3 id="Query">Mengimplementasikan metode query()</h3>
+<p>
+ Metode
+ {@link android.content.ContentProvider#query(Uri, String[], String, String[], String)
+ ContentProvider.query()} harus menghasilkan objek {@link android.database.Cursor}, atau jika
+ gagal, melontarkan {@link java.lang.Exception}. Jika menggunakan database SQLite sebagai
+ penyimpanan data, Anda bisa mengembalikan{@link android.database.Cursor} yang dikembalikan oleh salah satu metode
+ <code>query()</code> dari kelas {@link android.database.sqlite.SQLiteDatabase}.
+ Jika query tidak mencocokkan baris apa pun, Anda harus mengembalikan instance {@link android.database.Cursor}
+ yang metode {@link android.database.Cursor#getCount()}-nya mengembalikan 0.
+ Anda harus mengembalikan <code>null</code> hanya jika terjadi kesalahan internal selama proses query.
+</p>
+<p>
+ Jika Anda tidak menggunakan database SQLite sebagai penyimpanan data, gunakan salah satu subkelas konkret
+ {@link android.database.Cursor}. Misalnya, kelas {@link android.database.MatrixCursor}
+ mengimplementasikan kursor dengan masing-masing baris berupa larik {@link java.lang.Object}. Dengan kelas ini,
+ gunakan {@link android.database.MatrixCursor#addRow(Object[]) addRow()} untuk menambahkan baris baru.
+</p>
+<p>
+ Ingatlah bahwa sistem Android harus mampu mengomunikasikan {@link java.lang.Exception}
+ lintas batas proses. Android bisa melakukannya untuk eksepsi berikut yang mungkin berguna
+ dalam menangani kesalahan query:
+</p>
+<ul>
+ <li>
+ {@link java.lang.IllegalArgumentException} (Anda bisa saja melontarkannya jika penyedia Anda
+ menerima URI konten yang tidak sah)
+ </li>
+ <li>
+ {@link java.lang.NullPointerException}
+ </li>
+</ul>
+<h3 id="Insert">Mengimplementasikan metode insert()</h3>
+<p>
+ Metode {@link android.content.ContentProvider#insert(Uri, ContentValues) insert()} menambahkan satu
+ baris baru ke tabel yang sesuai, dengan menggunakan nilai-nilai dalam argumen {@link android.content.ContentValues}.
+ Jika kolom nama tidak ada dalam argumen {@link android.content.ContentValues}, Anda
+ mungkin perlu menyediakan nilai default untuknya, baik dalam kode penyedia atau dalam skema database
+ Anda.
+</p>
+<p>
+ Metode ini harus mengembalikan URI konten untuk baris baru. Untuk membuatnya, tambahkan nilai
+ <code>_ID</code> baris baru (atau kunci utama lainnya) ke tabel URI konten, dengan menggunakan
+ {@link android.content.ContentUris#withAppendedId(Uri, long) withAppendedId()}.
+</p>
+<h3 id="Delete">Mengimplementasikan metode delete()</h3>
+<p>
+ Metode {@link android.content.ContentProvider#delete(Uri, String, String[]) delete()}
+ tidak harus menghapus baris-baris dari penyimpanan data Anda secara fisik. Jika menggunakan adaptor sinkronisasi
+ bersama penyedia, Anda harus mempertimbangkan penandaan baris yang dihapus
+ dengan flag "delete"; bukan menghilangkan baris itu sepenuhnya. Adaptor sinkronisasi bisa
+ memeriksa baris yang dihapus dan menghilangkannya dari server sebelum menghapusnya dari penyedia.
+</p>
+<h3 id="Update">Mengimplementasikan metode update()</h3>
+<p>
+ Metode {@link android.content.ContentProvider#update(Uri, ContentValues, String, String[])
+ update()} mengambil argumen {@link android.content.ContentValues} yang sama dengan yang digunakan oleh
+ {@link android.content.ContentProvider#insert(Uri, ContentValues) insert()}, dan
+ argumen-argumen <code>selection</code> dan <code>selectionArgs</code> yang sama dengan yang digunakan oleh
+ {@link android.content.ContentProvider#delete(Uri, String, String[]) delete()} dan
+ {@link android.content.ContentProvider#query(Uri, String[], String, String[], String)
+ ContentProvider.query()}. Hal ini bisa memungkinkan Anda menggunakan kembali kode di antara metode-metode ini.
+</p>
+<h3 id="OnCreate">Mengimplementasikan metode onCreate()</h3>
+<p>
+ Sistem Android memanggil {@link android.content.ContentProvider#onCreate()
+ onCreate()} saat memulai penyedia. Anda harus melakukan tugas-tugas inisialisasi yang berjalan cepat saja
+ dalam metode ini, serta menunda pembuatan database dan pemuatan data hingga penyedia benar-benar
+ menerima permintaan terhadap data. Jika Anda melakukan tugas yang memakan waktu dalam
+ {@link android.content.ContentProvider#onCreate() onCreate()}, Anda akan memperlambat
+ startup penyedia. Pada gilirannya, hal ini akan memperlambat respons dari penyedia terhadap
+ aplikasi lain.
+</p>
+<p>
+ Misalnya, jika menggunakan database SQLite, Anda bisa membuat
+ sebuah objek {@link android.database.sqlite.SQLiteOpenHelper} baru di
+ {@link android.content.ContentProvider#onCreate() ContentProvider.onCreate()},
+ kemudian membuat tabel-tabel SQL saat pertama kali membuka database itu. Untuk memperlancar hal ini,
+ saat pertama Anda memanggil {@link android.database.sqlite.SQLiteOpenHelper#getWritableDatabase
+ getWritableDatabase()}, metode ini memanggil metode
+ {@link android.database.sqlite.SQLiteOpenHelper#onCreate(SQLiteDatabase)
+ SQLiteOpenHelper.onCreate()} secara otomatis.
+</p>
+<p>
+ Dua cuplikan berikut memperagakan interaksi antara
+ {@link android.content.ContentProvider#onCreate() ContentProvider.onCreate()} dan
+ {@link android.database.sqlite.SQLiteOpenHelper#onCreate(SQLiteDatabase)
+ SQLiteOpenHelper.onCreate()}. Cuplikan pertama adalah implementasi
+ {@link android.content.ContentProvider#onCreate() ContentProvider.onCreate()}:
+</p>
+<pre class="prettyprint">
+public class ExampleProvider extends ContentProvider
+
+ /*
+ * Defines a handle to the database helper object. The MainDatabaseHelper class is defined
+ * in a following snippet.
+ */
+ private MainDatabaseHelper mOpenHelper;
+
+ // Defines the database name
+ private static final String DBNAME = "mydb";
+
+ // Holds the database object
+ private SQLiteDatabase db;
+
+ public boolean onCreate() {
+
+ /*
+ * Creates a new helper object. This method always returns quickly.
+ * Notice that the database itself isn't created or opened
+ * until SQLiteOpenHelper.getWritableDatabase is called
+ */
+ mOpenHelper = new MainDatabaseHelper(
+ getContext(), // the application context
+ DBNAME, // the name of the database)
+ null, // uses the default SQLite cursor
+ 1 // the version number
+ );
+
+ return true;
+ }
+
+ ...
+
+ // Implements the provider's insert method
+ public Cursor insert(Uri uri, ContentValues values) {
+ // Insert code here to determine which table to open, handle error-checking, and so forth
+
+ ...
+
+ /*
+ * Gets a writeable database. This will trigger its creation if it doesn't already exist.
+ *
+ */
+ db = mOpenHelper.getWritableDatabase();
+ }
+}
+</pre>
+<p>
+ Cuplikan berikutnya adalah implementasi
+ {@link android.database.sqlite.SQLiteOpenHelper#onCreate(SQLiteDatabase)
+ SQLiteOpenHelper.onCreate()}, yang menyertakan kelas helper:
+</p>
+<pre class="prettyprint">
+...
+// A string that defines the SQL statement for creating a table
+private static final String SQL_CREATE_MAIN = "CREATE TABLE " +
+ "main " + // Table's name
+ "(" + // The columns in the table
+ " _ID INTEGER PRIMARY KEY, " +
+ " WORD TEXT"
+ " FREQUENCY INTEGER " +
+ " LOCALE TEXT )";
+...
+/**
+ * Helper class that actually creates and manages the provider's underlying data repository.
+ */
+protected static final class MainDatabaseHelper extends SQLiteOpenHelper {
+
+ /*
+ * Instantiates an open helper for the provider's SQLite data repository
+ * Do not do database creation and upgrade here.
+ */
+ MainDatabaseHelper(Context context) {
+ super(context, DBNAME, null, 1);
+ }
+
+ /*
+ * Creates the data repository. This is called when the provider attempts to open the
+ * repository and SQLite reports that it doesn't exist.
+ */
+ public void onCreate(SQLiteDatabase db) {
+
+ // Creates the main table
+ db.execSQL(SQL_CREATE_MAIN);
+ }
+}
+</pre>
+
+
+<!-- Implementing ContentProvider MIME Types -->
+<h2 id="MIMETypes">Mengimplementasikan Tipe MIME Penyedia Konten</h2>
+<p>
+ Kelas {@link android.content.ContentProvider} memiliki dua metode untuk menghasilkan tipe-tipe MIME:
+</p>
+<dl>
+ <dt>
+ {@link android.content.ContentProvider#getType(Uri) getType()}
+ </dt>
+ <dd>
+ Salah satu metode wajib yang harus Anda implementasikan untuk setiap penyedia.
+ </dd>
+ <dt>
+ {@link android.content.ContentProvider#getStreamTypes(Uri, String) getStreamTypes()}
+ </dt>
+ <dd>
+ Sebuah metode yang diharapkan untuk Anda implementasikan jika penyedia Anda menawarkan file.
+ </dd>
+</dl>
+<h3 id="TableMIMETypes">Tipe MIME untuk tabel</h3>
+<p>
+ Metode {@link android.content.ContentProvider#getType(Uri) getType()} mengembalikan
+ {@link java.lang.String} dengan format MIME yang menjelaskan tipe data yang dikembalikan oleh
+ argumen URI konten. Argumen {@link android.net.Uri} bisa berupa pola, bukannya URI tertentu;
+ dalam hal ini, Anda harus mengembalikan tipe data terkait URI konten yang cocok dengan
+ polanya.
+</p>
+<p>
+ Untuk tipe data umum misalnya teks, HTML, atau JPEG,
+ {@link android.content.ContentProvider#getType(Uri) getType()} harus mengembalikan
+ tipe MIME standar untuk data itu. Daftar lengkap tipe standar ini tersedia di situs web
+ <a href="http://www.iana.org/assignments/media-types/index.htm">IANA MIME Media Types</a>.
+
+</p>
+<p>
+ Untuk URI konten yang menunjuk ke baris atau baris-baris data tabel,
+ {@link android.content.ContentProvider#getType(Uri) getType()} harus mengembalikan
+ tipe MIME dalam format MIME khusus vendor Android:
+</p>
+<ul>
+ <li>
+ Bagian tipe: <code>vnd</code>
+ </li>
+ <li>
+ Bagian subtipe:
+ <ul>
+ <li>
+ Jika pola URI adalah untuk satu baris: <code>android.cursor.<strong>item</strong>/</code>
+ </li>
+ <li>
+ Jika pola URI adalah untuk lebih dari satu baris: <code>android.cursor.<strong>dir</strong>/</code>
+ </li>
+ </ul>
+ </li>
+ <li>
+ Bagian khusus penyedia: <code>vnd.<name></code>.<code><type></code>
+ <p>
+ Anda menyediakan <code><name></code> dan <code><type></code>.
+ Nilai <code><name></code> harus unik secara global,
+ dan nilai <code><type></code> harus unik bagi pola URI
+ yang sesuai. Pilihan tepat untuk <code><name></code> adalah nama perusahaan Anda atau
+ sebagian dari nama paket Android aplikasi Anda. Pilihan tepat untuk
+ <code><type></code> adalah string yang mengidentifikasi tabel yang terkait dengan
+ URI.
+ </p>
+
+ </li>
+</ul>
+<p>
+ Misalnya, jika otoritas penyedia adalah
+ <code>com.example.app.provider</code>, dan penyedia mengekspos tabel bernama
+ <code>table1</code>, tipe MIME untuk beberapa baris dalam <code>table1</code> adalah:
+</p>
+<pre>
+vnd.android.cursor.<strong>dir</strong>/vnd.com.example.provider.table1
+</pre>
+<p>
+ Untuk satu baris <code>table1</code>, tipe MIME adalah:
+</p>
+<pre>
+vnd.android.cursor.<strong>item</strong>/vnd.com.example.provider.table1
+</pre>
+<h3 id="FileMIMETypes">Tipe MIME untuk file</h3>
+<p>
+ Jika penyedia Anda menawarkan file, implementasikan
+ {@link android.content.ContentProvider#getStreamTypes(Uri, String) getStreamTypes()}.
+ Metode ini menghasilkan larik {@link java.lang.String} tipe MIME untuk file
+ yang bisa dikembalikan penyedia Anda untuk URI konten bersangkutan. Anda harus memfilter tipe MIME yang Anda tawarkan dengan argumen filter
+ tipe MIME, sehingga Anda hanya mengembalikan tipe MIME yang ingin ditangani klien.
+</p>
+<p>
+ Misalnya, perhatikan penyedia yang menawarkan gambar foto sebagai file dalam format <code>.jpg</code>,
+ <code>.png</code>, dan <code>.gif</code>.
+ Jika aplikasi memanggil {@link android.content.ContentResolver#getStreamTypes(Uri, String)
+ ContentResolver.getStreamTypes()} dengan string filter <code>image/*</code> (sesuatu yang
+ merupakan "gambar"),
+ maka metode {@link android.content.ContentProvider#getStreamTypes(Uri, String)
+ ContentProvider.getStreamTypes()} harus mengembalikan larik:
+</p>
+<pre>
+{ "image/jpeg", "image/png", "image/gif"}
+</pre>
+<p>
+ Jika aplikasi tertarik pada file <code>.jpg</code>, maka aplikasi bisa memanggil
+ {@link android.content.ContentResolver#getStreamTypes(Uri, String)
+ ContentResolver.getStreamTypes()} dengan string filter <code>*\/jpeg</code>, dan
+ {@link android.content.ContentProvider#getStreamTypes(Uri, String)
+ ContentProvider.getStreamTypes()} harus mengembalikan:
+<pre>
+{"image/jpeg"}
+</pre>
+<p>
+ Jika penyedia Anda tidak menawarkan tipe MIME apa pun yang diminta dalam string filter,
+ {@link android.content.ContentProvider#getStreamTypes(Uri, String) getStreamTypes()}
+ harus mengembalikan <code>null</code>.
+</p>
+
+
+<!-- Implementing a Contract Class -->
+<h2 id="ContractClass">Mengimplementasikan Kelas Kontrak</h2>
+<p>
+ Kelas kontrak adalah kelas <code>public final</code> yang berisi definisi konstanta untuk URI, nama kolom, tipe MIME, dan
+metadata lain yang melekat ke penyedia. Kelas
+ membentuk sebuah kontrak antara penyedia dan aplikasi lain dengan memastikan bahwa penyedia
+ bisa diakses dengan benar sekalipun ada perubahan pada nilai URI sesungguhnya, nama kolom,
+ dan seterusnya.
+</p>
+<p>
+ Kelas kontrak juga membantu pengembang karena kelas ini biasanya memiliki nama-nama simbolik untuk konstantanya,
+ sehingga memperkecil kemungkinan pengembang menggunakan nilai yang salah untuk nama kolom atau URI. Karena berupa
+ kelas, kelas ini bisa berisi dokumentasi Javadoc. Lingkungan pengembangan terpadu (IDE) seperti
+ Eclipse secara otomatis bisa melengkapi nama-nama konstanta dari kelas kontrak dan menampilkan Javadoc untuk
+ konstanta.
+</p>
+<p>
+ Pengembang tidak bisa mengakses file kelas milik kelas kontrak dari aplikasi Anda, namun bisa
+ mengompilasinya secara statis ke dalam aplikasi mereka dari file <code>.jar</code> yang Anda sediakan.
+</p>
+<p>
+ Kelas {@link android.provider.ContactsContract} dan kelas-kelas tersarangnya adalah contoh
+ kelas kontrak.
+</p>
+<h2 id="Permissions">Mengimplementasikan Izin Penyedia Konten</h2>
+<p>
+ Izin dan akses untuk semua aspek sistem Android dijelaskan secara detail dalam
+ topik <a href="{@docRoot}guide/topics/security/security.html">Keamanan dan Izin</a>.
+ Topik <a href="{@docRoot}guide/topics/data/data-storage.html">Penyimpanan Data</a> juga
+ menjelaskan keamanan dan izin terkait dengan berbagai tipe penyimpanan.
+ Singkatnya, poin-poin pentingnya adalah:
+</p>
+<ul>
+ <li>
+ Secara default, file data yang disimpan pada penyimpanan internal perangkat bersifat privat bagi
+ aplikasi dan penyedia Anda.
+ </li>
+ <li>
+ Database {@link android.database.sqlite.SQLiteDatabase} yang Anda buat bersifat privat bagi
+ aplikasi dan penyedia Anda.
+ </li>
+ <li>
+ Secara default, file data yang Anda simpan ke penyimpanan eksternal bersifat <em>publik</em> dan
+ <em>bisa dibaca secara global</em>. Anda tidak bisa menggunakan penyedia konten untuk membatasi akses ke file dalam
+ penyimpanan eksternal, karena aplikasi lain bisa menggunakan panggilan API untuk membaca dan menulis ke file tersebut.
+ </li>
+ <li>
+ Panggilan metode untuk membuka atau membuat file atau database SQLite pada
+ penyimpanan internal perangkat Anda berpotensi memberikan akses baca maupun tulis ke semua aplikasi lain. Jika Anda
+ menggunakan file atau database internal sebagai repository penyedia, dan Anda memberinya
+ akses "world-readable" (bisa dibaca secara global) atau "world-writeable" (bisa ditulis secara global), izin yang Anda atur untuk penyedia dalam
+ manifesnya tidak akan melindungi data Anda. Akses default untuk file dan database dalam
+ penyimpanan internal adalah "privat", dan untuk repository penyedia, tidak boleh Anda ubah.
+ </li>
+</ul>
+<p>
+ Jika Anda ingin menggunakan izin penyedia konten untuk mengontrol akses ke data Anda, maka Anda harus
+ menyimpan data Anda dalam file internal, database SQLite, atau "cloud" (misalnya,
+ di server jauh), dan Anda harus membuat file dan database tetap privat bagi aplikasi Anda.
+</p>
+<h3>Mengimplementasikan izin</h3>
+<p>
+ Semua aplikasi bisa membaca dari atau menulis ke penyedia Anda, sekalipun data yang mendasari adalah
+ privat, karena secara default penyedia Anda tidak mengatur izin. Untuk mengubahnya,
+ atur izin untuk penyedia dalam file manifes, dengan menggunakan atribut atau elemen anak
+ dari elemen <code><a href="{@docRoot}guide/topics/manifest/provider-element.html">
+ <provider></a></code>. Anda bisa mengatur izin yang berlaku pada seluruh penyedia,
+ atau pada tabel tertentu, atau bahkan pada record tertentu, atau ketiganya.
+</p>
+<p>
+ Anda mendefinisikan izin untuk penyedia dengan satu atau beberapa elemen
+ <code><a href="{@docRoot}guide/topics/manifest/permission-element.html">
+ <permission></a></code> dalam file manifes. Untuk membuat
+ izin unik bagi penyedia, gunakan scoping (pengaturan lingkup) bergaya Java untuk
+ atribut <code><a href="{@docRoot}guide/topics/manifest/permission-element.html#nm">
+ android:name</a></code>. Misalnya, beri nama izin membaca dengan
+ <code>com.example.app.provider.permission.READ_PROVIDER</code>.
+
+</p>
+<p>
+ Daftar berikut menjelaskan lingkup penyedia izin, mulai dengan
+ izin yang berlaku pada seluruh penyedia kemudian menjadi semakin sempit.
+ Izin yang lebih sempit akan didahulukan daripada izin yang berlingkup lebih luas:
+</p>
+<dl>
+ <dt>
+ Izin baca-tulis tunggal tingkat penyedia
+ </dt>
+ <dd>
+ Suatu izin yang mengontrol akses baca-tulis bagi seluruh penyedia, ditetapkan
+ dengan atribut <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#prmsn">
+ android:permission</a></code> dari
+ elemen <code><a href="{@docRoot}guide/topics/manifest/provider-element.html">
+ <provider></a></code>.
+ </dd>
+ <dt>
+ Izin baca-tulis terpisah tingkat penyedia
+ </dt>
+ <dd>
+ Satu izin baca dan satu izin tulis untuk seluruh penyedia. Anda menetapkan keduanya
+ dengan atribut <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#rprmsn">
+ android:readPermission</a></code> dan
+ <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#wprmsn">
+ android:writePermission</a></code> dari elemen
+ <code><a href="{@docRoot}guide/topics/manifest/provider-element.html">
+ <provider></a></code>. Kedua izin akan didahulukan daripada izin yang diharuskan oleh
+ <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#prmsn">
+ android:permission</a></code>.
+ </dd>
+ <dt>
+ Izin tingkat path
+ </dt>
+ <dd>
+ Izin baca, tulis, atau baca/tulis untuk URI konten dalam penyedia Anda. Anda menetapkan
+ tiap URI yang ingin dikontrol dengan elemen anak
+ <code><a href="{@docRoot}guide/topics/manifest/path-permission-element.html">
+ <path-permission></a></code> dari
+ elemen <code><a href="{@docRoot}guide/topics/manifest/provider-element.html">
+ <provider></a></code>. Untuk setiap URI konten yang ditetapkan, Anda bisa menetapkan
+ satu izin baca/tulis, satu izin baca, atau satu izin tulis, atau ketiganya. Izin baca dan
+ tulis akan didahulukan daripada izin baca/tulis. Juga,
+ izin tingkat path akan didahulukan daripada izin tingkat penyedia.
+ </dd>
+ <dt>
+ Izin sementara
+ </dt>
+ <dd>
+ Tingkat izin yang memberikan akses sementara ke aplikasi, sekalipun aplikasi itu
+ tidak memiliki izin yang biasanya diminta. Fitur akses
+ sementara mengurangi jumlah izin yang harus diminta aplikasi dalam
+ manifesnya. Bila Anda mengaktifkan izin sementara, satu-satunya aplikasi yang memerlukan
+ izin "permanen" untuk penyedia adalah aplikasi yang mengakses terus-menerus semua
+ data Anda.
+ <p>
+ Perhatikan izin yang Anda perlukan untuk mengimplementasikan penyedia dan aplikasi email, bila Anda
+ ingin memperbolehkan aplikasi penampil gambar dari luar menampilkan lampiran foto dari
+ penyedia Anda. Untuk memberikan akses yang diperlukan kepada penampil gambar tanpa mengharuskan izin,
+ siapkan izin sementara untuk URI konten bagi foto. Desainlah aplikasi email Anda agar
+ bila pengguna ingin menampilkan foto, aplikasi itu akan mengirim intent berisi
+ URI konten foto dan flag izin ke penampil gambar. Penampil gambar nanti bisa
+ melakukan query penyedia email untuk mengambil foto, sekalipun penampil itu tidak
+ memiliki izin baca normal untuk penyedia Anda.
+ </p>
+ <p>
+ Untuk mengaktifkan izin sementara, atur atribut
+ <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#gprmsn">
+ android:grantUriPermissions</a></code> dari
+ elemen <code><a href="{@docRoot}guide/topics/manifest/provider-element.html">
+ <provider></a></code>, atau tambahkan satu atau beberapa elemen anak
+ <code><a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html">
+ <grant-uri-permission></a></code> ke
+ elemen <code><a href="{@docRoot}guide/topics/manifest/provider-element.html">
+ <provider></a></code> Anda. Jika menggunakan izin sementara, Anda harus memanggil
+ {@link android.content.Context#revokeUriPermission(Uri, int)
+ Context.revokeUriPermission()} kapan saja Anda menghilangkan dukungan untuk URI konten dari
+ penyedia, dan URI konten dikaitkan dengan izin sementara.
+ </p>
+ <p>
+ Nilai atribut menentukan seberapa banyak penyedia Anda yang dijadikan bisa diakses.
+ Jika atribut diatur ke <code>true</code>, maka sistem akan memberikan
+ izin sementara kepada seluruh penyedia, dengan mengesampingkan izin lain yang diharuskan
+ oleh izin tingkat penyedia atau tingkat path.
+ </p>
+ <p>
+ Jika flag ini diatur ke <code>false</code>, maka Anda harus menambahkan elemen-elemen anak
+ <code><a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html">
+ <grant-uri-permission></a></code> ke
+ elemen <code><a href="{@docRoot}guide/topics/manifest/provider-element.html">
+ <provider></a></code> Anda. Tiap elemen anak menetapkan URI konten atau
+ URI yang telah diberi akses sementara.
+ </p>
+ <p>
+ Untuk mendelegasikan akses sementara ke sebuah aplikasi, intent harus berisi
+ {@link android.content.Intent#FLAG_GRANT_READ_URI_PERMISSION} atau flag
+ {@link android.content.Intent#FLAG_GRANT_WRITE_URI_PERMISSION}, atau keduanya. Keduanya
+ diatur dengan metode {@link android.content.Intent#setFlags(int) setFlags()}.
+ </p>
+ <p>
+ Jika atribut <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#gprmsn">
+ android:grantUriPermissions</a></code> tidak ada, atribut ini diasumsikan sebagai
+ <code>false</code>.
+ </p>
+ </dd>
+</dl>
+
+
+
+<!-- The Provider Element -->
+<h2 id="ProviderElement">Elemen <provider></h2>
+<p>
+ Seperti halnya komponen {@link android.app.Activity} dan {@link android.app.Service},
+ subkelas {@link android.content.ContentProvider}
+ harus didefinisikan dalam file manifes untuk aplikasinya, dengan menggunakan elemen
+ <code><a href="{@docRoot}guide/topics/manifest/provider-element.html">
+ <provider></a></code>. Sistem Android mendapatkan informasi berikut dari
+ elemen:
+<dl>
+ <dt>
+ Otoritas
+ (<a href="{@docRoot}guide/topics/manifest/provider-element.html#auth">{@code
+ android:authorities}</a>)
+ </dt>
+ <dd>
+ Nama-nama simbolik yang mengidentifikasi seluruh penyedia dalam sistem. Atribut
+ ini dijelaskan lebih detail di bagian
+ <a href="#ContentURI">Mendesain URI Konten</a>.
+ </dd>
+ <dt>
+ Nama kelas penyedia
+ (<code>
+<a href="{@docRoot}guide/topics/manifest/provider-element.html#nm">android:name</a>
+ </code>)
+ </dt>
+ <dd>
+ Kelas yang mengimplementasikan {@link android.content.ContentProvider}. Kelas ini
+ dijelaskan lebih detail di bagian
+ <a href="#ContentProvider">Mengimplementasikan Kelas ContentProvider</a>.
+ </dd>
+ <dt>
+ Izin
+ </dt>
+ <dd>
+ Atribut-atribut yang menetapkan izin yang harus dimiliki aplikasi lain untuk mengakses
+ data penyedia:
+ <ul>
+ <li>
+ <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#gprmsn">
+ android:grantUriPermssions</a></code>: Flag izin sementara.
+ </li>
+ <li>
+ <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#prmsn">
+ android:permission</a></code>: Izin baca/tulis tunggal untuk tingkat penyedia.
+ </li>
+ <li>
+ <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#rprmsn">
+ android:readPermission</a></code>: Izin baca untuk tingkat penyedia.
+ </li>
+ <li>
+ <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#wprmsn">
+ android:writePermission</a></code>: Izin tulis untuk tingkat penyedia.
+ </li>
+ </ul>
+ <p>
+ Izin dan atribut-atribut yang sesuai dijelaskan lebih detail
+ di bagian
+ <a href="#Permissions">Mengimplementasikan Izin Penyedia Konten</a>.
+ </p>
+ </dd>
+ <dt>
+ Atribut-atribut startup dan kontrol
+ </dt>
+ <dd>
+ Atribut-atribut ini menentukan cara dan waktu sistem Android memulai penyedia,
+ karakteristik proses penyedia, dan pengaturan runtime lainnya:
+ <ul>
+ <li>
+ <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#enabled">
+ android:enabled</a></code>: Flag yang memperbolehkan sistem untuk memulai penyedia.
+ </li>
+ <li>
+ <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#exported">
+ android:exported</a></code>: Flag yang memperbolehkan aplikasi lain untuk menggunakan penyedia ini.
+ </li>
+ <li>
+ <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#init">
+ android:initOrder</a></code>: Urutan yang digunakan untuk memulai penyedia ini,
+ relatif terhadap penyedia lain dalam proses yang sama.
+ </li>
+ <li>
+ <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#multi">
+ android:multiProcess</a></code>: Flag yang memperbolehkan sistem untuk memulai penyedia
+ dalam proses yang sama dengan proses klien pemanggil.
+ </li>
+ <li>
+ <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#proc">
+ android:process</a></code>: Nama proses tempat penyedia harus
+ berjalan.
+ </li>
+ <li>
+ <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#sync">
+ android:syncable</a></code>: Flag yang menunjukkan bahwa data penyedia harus
+ disinkronkan dengan data di server.
+ </li>
+ </ul>
+ <p>
+ Atribut-atribut ini didokumentasikan dengan lengkap dalam topik panduan pengembang untuk elemen
+ <code><a href="{@docRoot}guide/topics/manifest/provider-element.html">
+ <provider></a></code>.
+
+ </p>
+ </dd>
+ <dt>
+ Atribut-atribut informatif
+ </dt>
+ <dd>
+ Ikon dan label opsional untuk penyedia:
+ <ul>
+ <li>
+ <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#icon">
+ android:icon</a></code>: Sumber daya drawable, berisi ikon untuk penyedia.
+ Ikon ini muncul di sebelah label penyedia dalam daftar aplikasi dalam menu
+ <em>Settings</em> > <em>Apps</em> > <em>All</em>.
+ </li>
+ <li>
+ <code><a href="{@docRoot}guide/topics/manifest/provider-element.html#label">
+ android:label</a></code>: Label informatif yang menjelaskan penyedia atau
+ datanya, atau keduanya. Label ini muncul dalam daftar aplikasi di
+ <em>Settings</em> > <em>Apps</em> > <em>All</em>.
+ </li>
+ </ul>
+ <p>
+ Atribut-atribut ini didokumentasikan dengan lengkap dalam topik panduan pengembang untuk elemen
+ <code><a href="{@docRoot}guide/topics/manifest/provider-element.html">
+ <provider></a></code>.
+ </p>
+ </dd>
+</dl>
+
+<!-- Intent Access -->
+<h2 id="Intents">Intent dan Akses Data</h2>
+<p>
+ Aplikasi bisa mengakses penyedia konten secara tidak langsung dengan sebuah {@link android.content.Intent}.
+ Aplikasi tidak memanggil satu pun dari metode-metode {@link android.content.ContentResolver} atau
+ {@link android.content.ContentProvider}. Sebagai gantinya, aplikasi mengirim intent yang memulai aktivitas,
+ yang sering kali merupakan bagian dari aplikasi penyedia sendiri. Aktivitas tujuan bertugas
+ mengambil dan menampilkan data dalam UI-nya. Bergantung pada tindakan dalam intent,
+ aktivitas tujuan juga bisa meminta pengguna untuk membuat modifikasi pada data penyedia.
+ Intent juga bisa berisi data "ekstra" yang menampilkan aktivitas tujuan
+ dalam UI; pengguna nanti memiliki pilihan untuk mengubah data ini sebelum menggunakannya untuk mengubah
+ data di penyedia.
+</p>
+<p>
+
+</p>
+<p>
+ Anda mungkin perlu menggunakan akses intent guna membantu memastikan integritas data. Penyedia Anda mungkin bergantung
+ pada data yang disisipkan, diperbarui, dan dihapusnya sesuai dengan logika bisnis yang didefinisikan dengan ketat. Jika
+ demikian halnya, memperbolehkan aplikasi lain mengubah data Anda secara langsung bisa menyebabkan
+ data yang tidak sah. Jika Anda ingin pengembang menggunakan akses intent, pastikan untuk mendokumentasikannya secara saksama.
+ Jelaskan kepada mereka alasan akses intent yang menggunakan UI aplikasi Anda sendiri adalah lebih baik daripada mencoba
+ memodifikasi data dengan kode mereka.
+</p>
+<p>
+ Menangani sebuah intent masuk yang ingin memodifikasi data penyedia Anda tidak berbeda dengan
+ menangani intent lainnya. Anda bisa mengetahui selengkapnya tentang penggunaan intent dengan membaca topik
+ <a href="{@docRoot}guide/components/intents-filters.html">Intent dan Filter Intent</a>.
+</p>
diff --git a/docs/html-intl/intl/id/guide/topics/providers/content-providers.jd b/docs/html-intl/intl/id/guide/topics/providers/content-providers.jd
new file mode 100644
index 0000000..2dcd55e
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/topics/providers/content-providers.jd
@@ -0,0 +1,108 @@
+page.title=Penyedia konten
+@jd:body
+<div id="qv-wrapper">
+<div id="qv">
+
+
+<!-- In this document -->
+<h2>Topik</h2>
+<ol>
+ <li>
+ <a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
+ Dasar-Dasar Penyedia Konten</a>
+ </li>
+ <li>
+ <a href="{@docRoot}guide/topics/providers/content-provider-creating.html">
+ Membuat Penyedia Konten</a>
+ </li>
+ <li>
+ <a href="{@docRoot}guide/topics/providers/calendar-provider.html">Penyedia Kalender</a>
+ </li>
+ <li>
+ <a href="{@docRoot}guide/topics/providers/contacts-provider.html">Penyedia Kontak</a>
+ </li>
+</ol>
+
+ <!-- Related Samples -->
+<h2>Contoh-Contoh Terkait</h2>
+ <ol>
+ <li>
+ <a href="{@docRoot}resources/samples/ContactManager/index.html">
+ Aplikasi Contact Manager</a>
+ </li>
+ <li>
+ <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/List2.html">
+ "Kursor (Orang)"
+ </a>
+ </li>
+ <li>
+ <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/List7.html">
+ "Kursor (Telepon)"</a>
+ </li>
+ <li>
+ <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">
+ Contoh Adaptor Sinkronisasi</a>
+ </li>
+ </ol>
+</div>
+</div>
+<p>
+ Penyedia konten mengelola akses ke set data terstruktur. Penyedia ini membungkus
+ data, dan menyediakan mekanisme untuk mendefinisikan keamanan data. Penyedia konten adalah antarmuka
+ standar yang menghubungkan data dalam satu proses dengan kode yang berjalan dalam proses lain.
+</p>
+<p>
+ Bila Anda ingin mengakses data di penyedia konten, Anda menggunakan
+ {@link android.content.ContentResolver} objek dalam
+ {@link android.content.Context} aplikasi untuk berkomunikasi dengan penyedia sebagai klien.
+ Objek {@link android.content.ContentResolver} berkomunikasi dengan objek penyedia, yakni
+ instance kelas yang mengimplementasikan {@link android.content.ContentProvider}. Objek penyedia
+ menerima permintaan data dari klien, melakukan tindakan yang diminta, dan
+ mengembalikan hasilnya.
+</p>
+<p>
+ Anda tidak perlu mengembangkan penyedia sendiri jika tidak bermaksud untuk berbagi data dengan
+ aplikasi lain. Akan tetapi, Anda memerlukan penyedia buatan sendiri untuk menyediakan saran pencarian custom
+ dalam aplikasi Anda sendiri. Anda juga memerlukan penyedia sendiri jika ingin menyalin dan
+menempelkan data atau file yang kompleks dari aplikasi Anda ke aplikasi lain.
+</p>
+<p>
+ Android sendiri berisi penyedia konten yang mengelola data seperti informasi audio, video, gambar, dan
+ kontak pribadi. Anda bisa melihat sebagian informasi ini tercantum dalam dokumentasi
+ acuan untuk paket
+ <code><a href="{@docRoot}reference/android/provider/package-summary.html">android.provider</a>
+ </code>. Dengan beberapa batasan, semua penyedia ini bisa diakses oleh aplikasi Android
+ apa saja.
+</p><p>
+ Topik-topik berikut menjelaskan penyedia konten secara lebih detail:
+</p>
+<dl>
+ <dt>
+ <strong><a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
+ Dasar-Dasar Penyedia Konten</a></strong>
+ </dt>
+ <dd>
+ Cara mengakses data di penyedia konten bila data disusun dalam tabel.
+ </dd>
+ <dt>
+ <strong><a href="{@docRoot}guide/topics/providers/content-provider-creating.html">
+ Membuat Penyedia Konten</a></strong>
+ </dt>
+ <dd>
+ Cara membuat penyedia konten sendiri.
+ </dd>
+ <dt>
+ <strong><a href="{@docRoot}guide/topics/providers/calendar-provider.html">
+ Penyedia Kalender</a></strong>
+ </dt>
+ <dd>
+ Cara mengakses Penyedia Kalender yang merupakan bagian dari platform Android.
+ </dd>
+ <dt>
+ <strong><a href="{@docRoot}guide/topics/providers/contacts-provider.html">
+ Penyedia Kontak</a></strong>
+ </dt>
+ <dd>
+ Cara mengakses Penyedia Kontak yang merupakan bagian dari platform Android.
+ </dd>
+</dl>
diff --git a/docs/html-intl/intl/id/guide/topics/providers/document-provider.jd b/docs/html-intl/intl/id/guide/topics/providers/document-provider.jd
new file mode 100644
index 0000000..f857467
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/topics/providers/document-provider.jd
@@ -0,0 +1,916 @@
+page.title=Storage Access Framework
+@jd:body
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>Dalam dokumen ini
+ <a href="#" onclick="hideNestedItems('#toc44',this);return false;" class="header-toggle">
+ <span class="more">tampilkan maksimal</span>
+ <span class="less" style="display:none">tampilkan minimal</span></a></h2>
+<ol id="toc44" class="hide-nested">
+ <li>
+ <a href="#overview">Ikhtisar</a>
+ </li>
+ <li>
+ <a href="#flow">Arus Kontrol</a>
+ </li>
+ <li>
+ <a href="#client">Menulis Aplikasi Klien</a>
+ <ol>
+ <li><a href="#search">Mencari dokumen</a></li>
+ <li><a href="#process">Memproses hasil</a></li>
+ <li><a href="#metadata">Memeriksa metadata dokumen</a></li>
+ <li><a href="#open">Membuka dokumen</a></li>
+ <li><a href="#create">Membuat dokumen baru</a></li>
+ <li><a href="#delete">Menghapus dokumen</a></li>
+ <li><a href="#edit">Mengedit dokumen</a></li>
+ <li><a href="#permissions">Mempertahankan izin</a></li>
+ </ol>
+ </li>
+ <li><a href="#custom">Menulis Penyedia Dokumen Custom</a>
+ <ol>
+ <li><a href="#manifest">Manifes</a></li>
+ <li><a href="#contract">Kontrak</a></li>
+ <li><a href="#subclass">Subkelas DocumentsProvider</a></li>
+ <li><a href="#security">Keamanan</a></li>
+ </ol>
+ </li>
+
+</ol>
+<h2>Kelas-kelas utama</h2>
+<ol>
+ <li>{@link android.provider.DocumentsProvider}</li>
+ <li>{@link android.provider.DocumentsContract}</li>
+</ol>
+
+<h2>Video</h2>
+
+<ol>
+ <li><a href="http://www.youtube.com/watch?v=zxHVeXbK1P4">
+DevBytes: Android 4.4 Storage Access Framework: Penyedia</a></li>
+ <li><a href="http://www.youtube.com/watch?v=UFj9AEz0DHQ">
+DevBytes: Android 4.4 Storage Access Framework: Klien</a></li>
+</ol>
+
+
+<h2>Contoh Kode</h2>
+
+<ol>
+ <li><a href="{@docRoot}samples/StorageProvider/index.html">
+Penyedia Penyimpanan</a></li>
+ <li><a href="{@docRoot}samples/StorageClient/index.html">
+Klien Penyimpanan</a></li>
+</ol>
+
+<h2>Lihat Juga</h2>
+<ol>
+ <li>
+ <a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
+ Dasar-Dasar Penyedia Konten
+ </a>
+ </li>
+</ol>
+
+</div>
+</div>
+
+
+<p>Android 4.4 (API level 19) memperkenalkan Storage Access Framework (SAF, Kerangka Kerja Akses Penyimpanan). SAF
+ memudahkan pengguna menyusuri dan membuka dokumen, gambar, dan file lainnya
+di semua penyedia penyimpanan dokumen pilihannya. UI standar yang mudah digunakan
+memungkinkan pengguna menyusuri file dan mengakses yang terbaru dengan cara konsisten di antara berbagai aplikasi dan penyedia.</p>
+
+<p>Layanan penyimpanan cloud atau lokal bisa dilibatkan dalam ekosistem ini dengan mengimplementasikan sebuah
+{@link android.provider.DocumentsProvider} yang membungkus layanannya. Aplikasi klien
+yang memerlukan akses ke dokumen sebuah penyedia bisa berintegrasi dengan SAF cukup dengan beberapa
+baris kode.</p>
+
+<p>SAF terdiri dari berikut ini:</p>
+
+<ul>
+<li><strong>Penyedia dokumen</strong>—Penyedia konten yang memungkinkan
+layanan penyimpanan (seperti Google Drive) untuk menampilkan file yang dikelolanya. Penyedia dokumen
+diimplementasikan sebagai subkelas dari kelas {@link android.provider.DocumentsProvider}.
+Skema penyedia dokumen berdasarkan hierarki file biasa,
+walaupun cara penyedia dokumen Anda secara fisik menyimpan data adalah terserah Anda.
+Platform Android terdiri dari beberapa penyedia dokumen bawaan, seperti
+Downloads, Images, dan Videos.</li>
+
+<li><strong>Aplikasi klien</strong>—Aplikasi custom yang memanggil intent
+{@link android.content.Intent#ACTION_OPEN_DOCUMENT} dan/atau
+{@link android.content.Intent#ACTION_CREATE_DOCUMENT} dan menerima
+file yang dihasilkan penyedia dokumen.</li>
+
+<li><strong>Picker</strong>—UI sistem yang memungkinkan pengguna mengakses dokumen dari semua
+penyedia dokumen yang memenuhi kriteria pencarian aplikasi klien.</li>
+</ul>
+
+<p>Beberapa fitur yang disediakan oleh SAF adalah sebagai berikut:</p>
+<ul>
+<li>Memungkinkan pengguna menyusuri konten dari semua penyedia dokumen, bukan hanya satu aplikasi.</li>
+<li>Memungkinkan aplikasi Anda memiliki akses jangka panjang dan tetap ke
+ dokumen yang dimiliki oleh penyedia dokumen. Melalui akses ini pengguna bisa menambah, mengedit,
+ menyimpan, dan menghapus file pada penyedia.</li>
+<li>Mendukung banyak akun pengguna dan akar jangka pendek seperti penyedia penyimpanan
+USB, yang hanya muncul jika drive itu dipasang. </li>
+</ul>
+
+<h2 id ="overview">Ikhtisar</h2>
+
+<p>SAF berpusat di seputar penyedia konten yang merupakan
+subkelas dari kelas {@link android.provider.DocumentsProvider}. Dalam <em>penyedia dokumen</em>, data
+distrukturkan sebagai hierarki file biasa:</p>
+<p><img src="{@docRoot}images/providers/storage_datamodel.png" alt="data model" /></p>
+<p class="img-caption"><strong>Gambar 1.</strong> Model data penyedia dokumen. Root menunjuk ke satu Document,
+yang nanti memulai pemekaran seluruh pohon.</p>
+
+<p>Perhatikan yang berikut ini:</p>
+<ul>
+
+<li>Setiap penyedia dokumen melaporkan satu atau beberapa
+"akar" yang merupakan titik awal penyusuran pohon dokumen.
+Masing-masing akar memiliki sebuah {@link android.provider.DocumentsContract.Root#COLUMN_ROOT_ID} yang unik,
+dan menunjuk ke satu dokumen (satu direktori)
+yang mewakili konten di bawah akar itu.
+Akar sengaja dibuat dinamis untuk mendukung kasus penggunaan seperti multiakun,
+perangkat penyimpanan USB jangka pendek, atau masuk/keluar pengguna.</li>
+
+<li>Di bawah tiap akar terdapat satu dokumen. Dokumen itu menunjuk ke dokumen-dokumen 1-ke-<em>N</em>,
+yang nanti masing-masing bisa menunjuk ke dokumen 1-ke-<em>N</em>. </li>
+
+<li>Tiap backend penyimpanan memunculkan
+masing-masing file dan direktori dengan mengacunya lewat sebuah
+{@link android.provider.DocumentsContract.Document#COLUMN_DOCUMENT_ID} yang unik.
+ID dokumen harus unik dan tidak berubah setelah dibuat, karena ID ini digunakan untuk
+URI persisten yang diberikan pada saat reboot perangkat.</li>
+
+
+<li>Dokumen bisa berupa file yang bisa dibuka (dengan tipe MIME tertentu), atau
+direktori yang berisi dokumen tambahan (dengan tipe MIME
+{@link android.provider.DocumentsContract.Document#MIME_TYPE_DIR}).</li>
+
+<li>Tiap dokumen bisa mempunyai kemampuan berbeda, sebagaimana yang dijelaskan oleh
+{@link android.provider.DocumentsContract.Document#COLUMN_FLAGS COLUMN_FLAGS}.
+Misalnya, {@link android.provider.DocumentsContract.Document#FLAG_SUPPORTS_WRITE},
+{@link android.provider.DocumentsContract.Document#FLAG_SUPPORTS_DELETE}, dan
+{@link android.provider.DocumentsContract.Document#FLAG_SUPPORTS_THUMBNAIL}.
+{@link android.provider.DocumentsContract.Document#COLUMN_DOCUMENT_ID} yang sama bisa
+dimasukkan dalam beberapa direktori.</li>
+</ul>
+
+<h2 id="flow">Arus Kontrol</h2>
+<p>Seperti dinyatakan di atas, model data penyedia dokumen dibuat berdasarkan hierarki file
+biasa. Akan tetapi, Anda bisa menyimpan secara fisik data dengan cara apa pun yang disukai,
+selama data bisa diakses melalui API {@link android.provider.DocumentsProvider}. Misalnya, Anda
+bisa menggunakan penyimpanan cloud berbasis tag untuk data Anda.</p>
+
+<p>Gambar 2 menampilkan contoh cara aplikasi foto bisa menggunakan SAF
+untuk mengakses data tersimpan:</p>
+<p><img src="{@docRoot}images/providers/storage_dataflow.png" alt="app" /></p>
+
+<p class="img-caption"><strong>Gambar 2.</strong> Arus Storage Access Framework</p>
+
+<p>Perhatikan yang berikut ini:</p>
+<ul>
+
+<li>Di SAF, penyedia dan klien tidak berinteraksi
+secara langsung. Klien meminta izin untuk berinteraksi
+dengan file (yakni, membaca, mengedit, membuat, atau menghapus file).</li>
+
+<li>Interaksi dimulai bila sebuah aplikasi (dalam contoh ini adalah aplikasi foto) mengeluarkan intent
+{@link android.content.Intent#ACTION_OPEN_DOCUMENT} atau {@link android.content.Intent#ACTION_CREATE_DOCUMENT}. Intent bisa berisi filter
+untuk mempersempit kriteria—misalnya, "beri saya semua file yang bisa dibuka
+yang memiliki tipe MIME 'gambar'".</li>
+
+<li>Setelah intent dibuat, picker sistem akan pergi ke setiap penyedia yang terdaftar
+dan menunjukkan kepada pengguna akar konten yang cocok.</li>
+
+<li>Picker memberi pengguna antarmuka standar untuk mengakses dokumen,
+walaupun penyedia dokumen dasar bisa sangat berbeda. Misalnya, gambar 2
+menunjukkan penyedia Google Drive, penyedia USB, dan penyedia cloud.</li>
+</ul>
+
+<p>Gambar 3 menunjukkan picker yang di digunakan pengguna mencari gambar telah memilih
+akun Google Drive:</p>
+
+<p><img src="{@docRoot}images/providers/storage_picker.png" width="340" alt="picker" style="border:2px solid #ddd" /></p>
+
+<p class="img-caption"><strong>Gambar 3.</strong> Picker</p>
+
+<p>Bila pengguna memilih Google Drive, gambar-gambar akan ditampilkan, seperti yang ditampilkan dalam
+gambar 4. Dari titik itu, pengguna bisa berinteraksi dengan gambar dengan cara apa pun
+yang didukung oleh penyedia dan aplikasi klien.
+
+<p><img src="{@docRoot}images/providers/storage_photos.png" width="340" alt="picker" style="border:2px solid #ddd" /></p>
+
+<p class="img-caption"><strong>Gambar 4.</strong> Gambar</p>
+
+<h2 id="client">Menulis Aplikasi Klien</h2>
+
+<p>Pada Android 4.3 dan yang lebih rendah, jika Anda ingin aplikasi mengambil file dari
+aplikasi lain, aplikasi Anda harus memanggil intent seperti {@link android.content.Intent#ACTION_PICK}
+atau {@link android.content.Intent#ACTION_GET_CONTENT}. Pengguna nanti harus memilih
+satu aplikasi yang akan digunakan untuk mengambil file dan aplikasi yang dipilih harus menyediakan antarmuka pengguna
+bagi untuk menyusuri dan mengambil dari file yang tersedia. </p>
+
+<p>Pada Android 4.4 dan yang lebih tinggi, Anda mempunyai opsi tambahan dalam menggunakan intent
+{@link android.content.Intent#ACTION_OPEN_DOCUMENT},
+yang menampilkan UI picker yang dikontrol oleh sistem yang memungkinkan pengguna
+menyusuri semua file yang disediakan aplikasi lain. Dari satu UI ini, pengguna
+bisa mengambil file dari aplikasi apa saja yang didukung.</p>
+
+<p>{@link android.content.Intent#ACTION_OPEN_DOCUMENT}
+tidak dimaksudkan untuk menjadi pengganti {@link android.content.Intent#ACTION_GET_CONTENT}.
+Yang harus Anda gunakan bergantung pada kebutuhan aplikasi:</p>
+
+<ul>
+<li>Gunakan {@link android.content.Intent#ACTION_GET_CONTENT} jika Anda ingin aplikasi
+cuma membaca/mengimpor data. Dengan pendekatan ini, aplikasi akan mengimpor salinan data,
+misalnya file gambar.</li>
+
+<li>Gunakan {@link android.content.Intent#ACTION_OPEN_DOCUMENT} jika Anda ingin aplikasi
+memiliki akses jangka panjang dan jangka pendek ke dokumen yang dimiliki oleh penyedia
+dokumen. Contohnya adalah aplikasi pengeditan foto yang memungkinkan pengguna mengedit
+gambar yang tersimpan dalam penyedia dokumen. </li>
+
+</ul>
+
+
+<p>Bagian ini menjelaskan cara menulis aplikasi klien berdasarkan
+{@link android.content.Intent#ACTION_OPEN_DOCUMENT} dan
+intent {@link android.content.Intent#ACTION_CREATE_DOCUMENT}.</p>
+
+
+<h3 id="search">Mencari dokumen</h3>
+
+<p>
+Cuplikan berikut menggunakan {@link android.content.Intent#ACTION_OPEN_DOCUMENT}
+untuk mencari penyedia dokumen yang
+berisi file gambar:</p>
+
+<pre>private static final int READ_REQUEST_CODE = 42;
+...
+/**
+ * Fires an intent to spin up the "file chooser" UI and select an image.
+ */
+public void performFileSearch() {
+
+ // ACTION_OPEN_DOCUMENT is the intent to choose a file via the system's file
+ // browser.
+ Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
+
+ // Filter to only show results that can be "opened", such as a
+ // file (as opposed to a list of contacts or timezones)
+ intent.addCategory(Intent.CATEGORY_OPENABLE);
+
+ // Filter to show only images, using the image MIME data type.
+ // If one wanted to search for ogg vorbis files, the type would be "audio/ogg".
+ // To search for all documents available via installed storage providers,
+ // it would be "*/*".
+ intent.setType("image/*");
+
+ startActivityForResult(intent, READ_REQUEST_CODE);
+}</pre>
+
+<p>Perhatikan yang berikut ini:</p>
+<ul>
+<li>Saat aplikasi mengeluarkan intent {@link android.content.Intent#ACTION_OPEN_DOCUMENT}
+, aplikasi akan menjalankan picker yang menampilkan semua penyedia dokumen yang cocok.</li>
+
+<li>Menambahkan kategori {@link android.content.Intent#CATEGORY_OPENABLE} ke
+intent akan menyaring hasil agar hanya menampilkan dokumen yang bisa dibuka, seperti file gambar.</li>
+
+<li>Pernyataan {@code intent.setType("image/*")} menyaring lebih jauh agar hanya
+menampilkan dokumen yang memiliki tipe data MIME gambar.</li>
+</ul>
+
+<h3 id="results">Memproses Hasil</h3>
+
+<p>Setelah pengguna memilih dokumen di picker,
+{@link android.app.Activity#onActivityResult onActivityResult()} akan dipanggil.
+URI yang menunjuk ke dokumen yang dipilih dimasukkan dalam parameter {@code resultData}
+. Ekstrak URI dengan {@link android.content.Intent#getData getData()}.
+Setelah mendapatkannya, Anda bisa menggunakannya untuk mengambil dokumen yang diinginkan pengguna. Misalnya
+:</p>
+
+<pre>@Override
+public void onActivityResult(int requestCode, int resultCode,
+ Intent resultData) {
+
+ // The ACTION_OPEN_DOCUMENT intent was sent with the request code
+ // READ_REQUEST_CODE. If the request code seen here doesn't match, it's the
+ // response to some other intent, and the code below shouldn't run at all.
+
+ if (requestCode == READ_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
+ // The document selected by the user won't be returned in the intent.
+ // Instead, a URI to that document will be contained in the return intent
+ // provided to this method as a parameter.
+ // Pull that URI using resultData.getData().
+ Uri uri = null;
+ if (resultData != null) {
+ uri = resultData.getData();
+ Log.i(TAG, "Uri: " + uri.toString());
+ showImage(uri);
+ }
+ }
+}
+</pre>
+
+<h3 id="metadata">Memeriksa metadata dokumen</h3>
+
+<p>Setelah Anda memiliki URI untuk dokumen, Anda akan mendapatkan akses ke metadatanya. Cuplikan
+ini memegang metadata sebuah dokumen yang disebutkan oleh URI, dan mencatatnya:</p>
+
+<pre>public void dumpImageMetaData(Uri uri) {
+
+ // The query, since it only applies to a single document, will only return
+ // one row. There's no need to filter, sort, or select fields, since we want
+ // all fields for one document.
+ Cursor cursor = getActivity().getContentResolver()
+ .query(uri, null, null, null, null, null);
+
+ try {
+ // moveToFirst() returns false if the cursor has 0 rows. Very handy for
+ // "if there's anything to look at, look at it" conditionals.
+ if (cursor != null && cursor.moveToFirst()) {
+
+ // Note it's called "Display Name". This is
+ // provider-specific, and might not necessarily be the file name.
+ String displayName = cursor.getString(
+ cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
+ Log.i(TAG, "Display Name: " + displayName);
+
+ int sizeIndex = cursor.getColumnIndex(OpenableColumns.SIZE);
+ // If the size is unknown, the value stored is null. But since an
+ // int can't be null in Java, the behavior is implementation-specific,
+ // which is just a fancy term for "unpredictable". So as
+ // a rule, check if it's null before assigning to an int. This will
+ // happen often: The storage API allows for remote files, whose
+ // size might not be locally known.
+ String size = null;
+ if (!cursor.isNull(sizeIndex)) {
+ // Technically the column stores an int, but cursor.getString()
+ // will do the conversion automatically.
+ size = cursor.getString(sizeIndex);
+ } else {
+ size = "Unknown";
+ }
+ Log.i(TAG, "Size: " + size);
+ }
+ } finally {
+ cursor.close();
+ }
+}
+</pre>
+
+<h3 id="open-client">Membuka dokumen</h3>
+
+<p>Setelah mendapatkan URI dokumen, Anda bisa membuka dokumen atau melakukan apa saja
+yang diinginkan padanya.</p>
+
+<h4>Bitmap</h4>
+
+<p>Berikut ini adalah contoh cara membuka {@link android.graphics.Bitmap}:</p>
+
+<pre>private Bitmap getBitmapFromUri(Uri uri) throws IOException {
+ ParcelFileDescriptor parcelFileDescriptor =
+ getContentResolver().openFileDescriptor(uri, "r");
+ FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
+ Bitmap image = BitmapFactory.decodeFileDescriptor(fileDescriptor);
+ parcelFileDescriptor.close();
+ return image;
+}
+</pre>
+
+<p>Perhatikan bahwa Anda tidak boleh melakukan operasi ini pada thread UI. Lakukan hal ini di latar belakang
+, dengan menggunakan {@link android.os.AsyncTask}. Setelah membuka bitmap, Anda
+bisa menampilkannya dalam {@link android.widget.ImageView}.
+</p>
+
+<h4>Mendapatkan InputStream</h4>
+
+<p>Berikut ini adalah contoh cara mendapatkan {@link java.io.InputStream} dari URI. Dalam cuplikan ini
+, baris-baris file dibaca ke dalam sebuah string:</p>
+
+<pre>private String readTextFromUri(Uri uri) throws IOException {
+ InputStream inputStream = getContentResolver().openInputStream(uri);
+ BufferedReader reader = new BufferedReader(new InputStreamReader(
+ inputStream));
+ StringBuilder stringBuilder = new StringBuilder();
+ String line;
+ while ((line = reader.readLine()) != null) {
+ stringBuilder.append(line);
+ }
+ fileInputStream.close();
+ parcelFileDescriptor.close();
+ return stringBuilder.toString();
+}
+</pre>
+
+<h3 id="create">Membuat dokumen baru</h3>
+
+<p>Aplikasi Anda bisa membuat dokumen baru dalam penyedia dokumen dengan menggunakan intent
+{@link android.content.Intent#ACTION_CREATE_DOCUMENT}
+. Untuk membuat file, Anda memberikan satu tipe MIME dan satu nama file pada intent, dan
+menjalankannya dengan kode permintaan yang unik. Selebihnya akan diurus untuk Anda:</p>
+
+
+<pre>
+// Here are some examples of how you might call this method.
+// The first parameter is the MIME type, and the second parameter is the name
+// of the file you are creating:
+//
+// createFile("text/plain", "foobar.txt");
+// createFile("image/png", "mypicture.png");
+
+// Unique request code.
+private static final int WRITE_REQUEST_CODE = 43;
+...
+private void createFile(String mimeType, String fileName) {
+ Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
+
+ // Filter to only show results that can be "opened", such as
+ // a file (as opposed to a list of contacts or timezones).
+ intent.addCategory(Intent.CATEGORY_OPENABLE);
+
+ // Create a file with the requested MIME type.
+ intent.setType(mimeType);
+ intent.putExtra(Intent.EXTRA_TITLE, fileName);
+ startActivityForResult(intent, WRITE_REQUEST_CODE);
+}
+</pre>
+
+<p>Setelah membuat dokumen baru, Anda bisa mendapatkan URI-nya dalam
+{@link android.app.Activity#onActivityResult onActivityResult()}, sehingga Anda
+bisa terus menulis ke dokumen itu.</p>
+
+<h3 id="delete">Menghapus dokumen</h3>
+
+<p>Jika Anda memiliki URI dokumen dan
+{@link android.provider.DocumentsContract.Document#COLUMN_FLAGS Document.COLUMN_FLAGS}
+ dokumen berisi
+{@link android.provider.DocumentsContract.Document#FLAG_SUPPORTS_DELETE SUPPORTS_DELETE},
+Anda bisa menghapus dokumen tersebut. Misalnya:</p>
+
+<pre>
+DocumentsContract.deleteDocument(getContentResolver(), uri);
+</pre>
+
+<h3 id="edit">Mengedit dokumen</h3>
+
+<p>Anda bisa menggunakan SAF untuk mengedit dokumen teks langsung di tempatnya.
+Cuplikan ini memicu
+intent {@link android.content.Intent#ACTION_OPEN_DOCUMENT} dan menggunakan
+kategori {@link android.content.Intent#CATEGORY_OPENABLE} untuk menampilkan
+dokumen yang bisa dibuka saja. Ini akan menyaring lebih jauh untuk menampilkan file teks saja:</p>
+
+<pre>
+private static final int EDIT_REQUEST_CODE = 44;
+/**
+ * Open a file for writing and append some text to it.
+ */
+ private void editDocument() {
+ // ACTION_OPEN_DOCUMENT is the intent to choose a file via the system's
+ // file browser.
+ Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
+
+ // Filter to only show results that can be "opened", such as a
+ // file (as opposed to a list of contacts or timezones).
+ intent.addCategory(Intent.CATEGORY_OPENABLE);
+
+ // Filter to show only text files.
+ intent.setType("text/plain");
+
+ startActivityForResult(intent, EDIT_REQUEST_CODE);
+}
+</pre>
+
+<p>Berikutnya, dari {@link android.app.Activity#onActivityResult onActivityResult()}
+(lihat <a href="#results">Memproses hasil</a>) Anda bisa memanggil kode untuk mengedit.
+Cuplikan berikut mendapatkan {@link java.io.FileOutputStream}
+dari {@link android.content.ContentResolver}. Secara default, snipet menggunakan mode “tulis”.
+Inilah praktik terbaik untuk meminta jumlah akses minimum yang Anda perlukan, jadi jangan meminta
+baca/tulis jika yang Anda perlukan hanyalah tulis:</p>
+
+<pre>private void alterDocument(Uri uri) {
+ try {
+ ParcelFileDescriptor pfd = getActivity().getContentResolver().
+ openFileDescriptor(uri, "w");
+ FileOutputStream fileOutputStream =
+ new FileOutputStream(pfd.getFileDescriptor());
+ fileOutputStream.write(("Overwritten by MyCloud at " +
+ System.currentTimeMillis() + "\n").getBytes());
+ // Let the document provider know you're done by closing the stream.
+ fileOutputStream.close();
+ pfd.close();
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+}</pre>
+
+<h3 id="permissions">Mempertahankan izin</h3>
+
+<p>Bila aplikasi Anda membuka file untuk membaca atau menulis, sistem akan memberi
+aplikasi Anda izin URI untuk file itu. Pemberian ini berlaku hingga perangkat pengguna di-restart.
+Namun anggaplah aplikasi Anda adalah aplikasi pengeditan gambar, dan Anda ingin pengguna bisa
+mengakses 5 gambar terakhir yang dieditnya, langsung dari aplikasi Anda. Jika perangkat pengguna telah
+di-restart, maka Anda harus mengirim pengguna kembali ke picker sistem untuk menemukan
+file, hal ini jelas tidak ideal.</p>
+
+<p>Untuk mencegah terjadinya hal ini, Anda bisa mempertahankan izin yang diberikan
+sistem ke aplikasi Anda. Secara efektif, aplikasi Anda akan "mengambil" pemberian izin URI yang bisa dipertahankan
+yang ditawarkan oleh sistem. Hal ini memberi pengguna akses kontinu ke file
+melalui aplikasi Anda, sekalipun perangkat telah di-restart:</p>
+
+
+<pre>final int takeFlags = intent.getFlags()
+ & (Intent.FLAG_GRANT_READ_URI_PERMISSION
+ | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
+// Check for the freshest data.
+getContentResolver().takePersistableUriPermission(uri, takeFlags);</pre>
+
+<p>Ada satu langkah akhir. Anda mungkin telah menyimpan
+URI terbaru yang diakses aplikasi, namun URI itu mungkin tidak lagi valid,—aplikasi lain
+mungkin telah menghapus atau memodifikasi dokumen. Karena itu, Anda harus selalu memanggil
+{@code getContentResolver().takePersistableUriPermission()} untuk memeriksa
+data terbaru.</p>
+
+<h2 id="custom">Menulis Penyedia Dokumen Custom</h2>
+
+<p>
+Jika Anda sedang mengembangkan aplikasi yang menyediakan layanan penyimpanan untuk file (misalnya
+layanan penyimpanan cloud), Anda bisa menyediakan file melalui
+SAF dengan menulis penyedia dokumen custom. Bagian ini menjelaskan
+caranya.</p>
+
+
+<h3 id="manifest">Manifes</h3>
+
+<p>Untuk mengimplementasikan penyedia dokumen custom, tambahkan yang berikut ini ke manifes aplikasi
+Anda:</p>
+<ul>
+
+<li>Target berupa API level 19 atau yang lebih tinggi.</li>
+
+<li>Elemen <code><provider></code> yang mendeklarasikan penyedia penyimpanan custom
+Anda. </li>
+
+<li>Nama penyedia Anda, yaitu nama kelasnya, termasuk nama paket.
+Misalnya: <code>com.example.android.storageprovider.MyCloudProvider</code>.</li>
+
+<li>Nama otoritas Anda, yaitu nama paket Anda (dalam contoh ini,
+<code>com.example.android.storageprovider</code>) plus tipe penyedia konten
+(<code>documents</code>). Misalnya, {@code com.example.android.storageprovider.documents}.</li>
+
+<li>Atribut <code>android:exported</code> yang diatur ke <code>"true"</code>.
+Anda harus mengekspor penyedia sehingga aplikasi lain bisa membacanya.</li>
+
+<li>Atribut <code>android:grantUriPermissions</code> yang diatur ke
+<code>"true"</code>. Pengaturan ini memungkinkan sistem memberi aplikasi lain akses
+ke konten dalam penyedia Anda. Untuk pembahasan cara mempertahankan pemberian bagi
+dokumen tertentu, lihat <a href="#permissions">Mempertahankan izin</a>.</li>
+
+<li>Izin {@code MANAGE_DOCUMENTS}. Secara default, penyedia tersedia
+bagi siapa saja. Menambahkan izin ini akan membatasi penyedia Anda pada sistem.
+Pembatasan ini penting untuk keamanan.</li>
+
+<li>Atribut {@code android:enabled} yang diatur ke nilai boolean didefinisikan dalam file
+sumber daya. Tujuan atribut ini adalah menonaktifkan penyedia pada perangkat yang menjalankan Android 4.3 atau yang lebih rendah.
+Misalnya, {@code android:enabled="@bool/atLeastKitKat"}. Selain
+memasukkan atribut ini dalam manifes, Anda perlu melakukan hal-hal berikut:
+<ul>
+<li>Dalam file sumber daya {@code bool.xml} Anda di bawah {@code res/values/}, tambahkan
+baris ini: <pre><bool name="atLeastKitKat">false</bool></pre></li>
+
+<li>Dalam file sumber daya {@code bool.xml} Anda di bawah {@code res/values-v19/}, tambahkan
+baris ini: <pre><bool name="atLeastKitKat">true</bool></pre></li>
+</ul></li>
+
+<li>Sebuah filter intent berisi tindakan
+{@code android.content.action.DOCUMENTS_PROVIDER}, agar penyedia Anda
+muncul dalam picker saat sistem mencari penyedia.</li>
+
+</ul>
+<p>Berikut ini adalah kutipan contoh manifes berisi penyedia yang:</p>
+
+<pre><manifest... >
+ ...
+ <uses-sdk
+ android:minSdkVersion="19"
+ android:targetSdkVersion="19" />
+ ....
+ <provider
+ android:name="com.example.android.storageprovider.MyCloudProvider"
+ android:authorities="com.example.android.storageprovider.documents"
+ android:grantUriPermissions="true"
+ android:exported="true"
+ android:permission="android.permission.MANAGE_DOCUMENTS"
+ android:enabled="@bool/atLeastKitKat">
+ <intent-filter>
+ <action android:name="android.content.action.DOCUMENTS_PROVIDER" />
+ </intent-filter>
+ </provider>
+ </application>
+
+</manifest></pre>
+
+<h4 id="43">Mendukung perangkat yang menjalankan Android 4.3 dan yang lebih rendah</h4>
+
+<p>Intent
+{@link android.content.Intent#ACTION_OPEN_DOCUMENT} hanya tersedia
+pada perangkat yang menjalankan Android 4.4 dan yang lebih tinggi.
+Jika ingin aplikasi Anda mendukung {@link android.content.Intent#ACTION_GET_CONTENT}
+untuk mengakomodasi perangkat yang menjalankan Android 4.3 dan yang lebih rendah, Anda harus
+menonaktifkan filter inten {@link android.content.Intent#ACTION_GET_CONTENT} dalam
+manifes untuk perangkat yang menjalankan Android 4.4 atau yang lebih tinggi. Penyedia
+dokumen dan {@link android.content.Intent#ACTION_GET_CONTENT} harus dianggap
+saling eksklusif. Jika Anda mendukung keduanya sekaligus, aplikasi Anda akan
+muncul dua kali dalam UI picker sistem, yang menawarkan dua cara mengakses
+data tersimpan Anda. Hal ini akan membingungkan pengguna.</p>
+
+<p>Berikut ini adalah cara yang disarankan untuk menonaktifkan
+filter intent {@link android.content.Intent#ACTION_GET_CONTENT} untuk perangkat
+yang menjalankan Android versi 4.4 atau yang lebih tinggi:</p>
+
+<ol>
+<li>Dalam file sumber daya {@code bool.xml} Anda di bawah {@code res/values/}, tambahkan
+baris ini: <pre><bool name="atMostJellyBeanMR2">true</bool></pre></li>
+
+<li>Dalam file sumber daya {@code bool.xml} Anda di bawah {@code res/values-v19/}, tambahkan
+baris ini: <pre><bool name="atMostJellyBeanMR2">false</bool></pre></li>
+
+<li>Tambahkan
+<a href="{@docRoot}guide/topics/manifest/activity-alias-element.html">alias
+aktivitas</a> untuk menonaktifkan filter intent {@link android.content.Intent#ACTION_GET_CONTENT}
+bagi versi 4.4 (API level 19) dan yang lebih tinggi. Misalnya:
+
+<pre>
+<!-- This activity alias is added so that GET_CONTENT intent-filter
+ can be disabled for builds on API level 19 and higher. -->
+<activity-alias android:name="com.android.example.app.MyPicker"
+ android:targetActivity="com.android.example.app.MyActivity"
+ ...
+ android:enabled="@bool/atMostJellyBeanMR2">
+ <intent-filter>
+ <action android:name="android.intent.action.GET_CONTENT" />
+ <category android:name="android.intent.category.OPENABLE" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <data android:mimeType="image/*" />
+ <data android:mimeType="video/*" />
+ </intent-filter>
+</activity-alias>
+</pre>
+</li>
+</ol>
+<h3 id="contract">Kontrak</h3>
+
+<p>Biasanya bila Anda menulis penyedia konten custom, salah satu tugas adalah
+mengimplementasikan kelas kontrak, seperti dijelaskan dalam panduan pengembang
+<a href="{@docRoot}guide/topics/providers/content-provider-creating.html#ContractClass">
+Penyedia Konten</a>. Kelas kontrak adalah kelas {@code public final}
+yang berisi definisi konstanta untuk URI, nama kolom, tipe MIME, dan
+metadata lain yang berkenaan dengan penyedia. SAF
+menyediakan kelas-kelas kontrak ini untuk Anda, jadi Anda tidak perlu menulisnya
+sendiri:</p>
+
+<ul>
+ <li>{@link android.provider.DocumentsContract.Document}</li>
+ <li>{@link android.provider.DocumentsContract.Root}</li>
+</ul>
+
+<p>Misalnya, berikut ini adalah kolom-kolom yang bisa Anda hasilkan di kursor bila
+penyedia dokumen Anda membuat query dokumen atau akar:</p>
+
+<pre>private static final String[] DEFAULT_ROOT_PROJECTION =
+ new String[]{Root.COLUMN_ROOT_ID, Root.COLUMN_MIME_TYPES,
+ Root.COLUMN_FLAGS, Root.COLUMN_ICON, Root.COLUMN_TITLE,
+ Root.COLUMN_SUMMARY, Root.COLUMN_DOCUMENT_ID,
+ Root.COLUMN_AVAILABLE_BYTES,};
+private static final String[] DEFAULT_DOCUMENT_PROJECTION = new
+ String[]{Document.COLUMN_DOCUMENT_ID, Document.COLUMN_MIME_TYPE,
+ Document.COLUMN_DISPLAY_NAME, Document.COLUMN_LAST_MODIFIED,
+ Document.COLUMN_FLAGS, Document.COLUMN_SIZE,};
+</pre>
+
+<h3 id="subclass">Subkelas DocumentsProvider</h3>
+
+<p>Langkah berikutnya dalam menulis penyedia dokumen custom adalah menjadikan
+kelas abstrak sebagai subkelas {@link android.provider.DocumentsProvider}. Setidaknya, Anda perlu
+ mengimplementasikan metode berikut:</p>
+
+<ul>
+<li>{@link android.provider.DocumentsProvider#queryRoots queryRoots()}</li>
+
+<li>{@link android.provider.DocumentsProvider#queryChildDocuments queryChildDocuments()}</li>
+
+<li>{@link android.provider.DocumentsProvider#queryDocument queryDocument()}</li>
+
+<li>{@link android.provider.DocumentsProvider#openDocument openDocument()}</li>
+</ul>
+
+<p>Hanya inilah metode yang diwajibkan kepada Anda secara ketat untuk diimplementasikan, namun ada
+banyak lagi yang mungkin Anda inginkan. Lihat {@link android.provider.DocumentsProvider}
+untuk detailnya.</p>
+
+<h4 id="queryRoots">Mengimplementasikan queryRoots</h4>
+
+<p>Implementasi {@link android.provider.DocumentsProvider#queryRoots
+queryRoots()} oleh Anda harus menghasilkan {@link android.database.Cursor} yang menunjuk ke semua
+direktori akar penyedia dokumen, dengan menggunakan kolom-kolom yang didefinisikan dalam
+{@link android.provider.DocumentsContract.Root}.</p>
+
+<p>Dalam cuplikan berikut, parameter {@code projection} mewakili bidang-bidang
+tertentu yang ingin didapatkan kembali oleh pemanggil. Cuplikan ini membuat kursor baru
+dan menambahkan satu baris ke satu akar— kursor, satu direktori level atas, seperti
+Downloads atau Images. Kebanyakan penyedia hanya mempunyai satu akar. Anda bisa mempunyai lebih dari satu,
+misalnya, jika ada banyak akun pengguna. Dalam hal itu, cukup tambahkan sebuah
+baris kedua ke kursor.</p>
+
+<pre>
+@Override
+public Cursor queryRoots(String[] projection) throws FileNotFoundException {
+
+ // Create a cursor with either the requested fields, or the default
+ // projection if "projection" is null.
+ final MatrixCursor result =
+ new MatrixCursor(resolveRootProjection(projection));
+
+ // If user is not logged in, return an empty root cursor. This removes our
+ // provider from the list entirely.
+ if (!isUserLoggedIn()) {
+ return result;
+ }
+
+ // It's possible to have multiple roots (e.g. for multiple accounts in the
+ // same app) -- just add multiple cursor rows.
+ // Construct one row for a root called "MyCloud".
+ final MatrixCursor.RowBuilder row = result.newRow();
+ row.add(Root.COLUMN_ROOT_ID, ROOT);
+ row.add(Root.COLUMN_SUMMARY, getContext().getString(R.string.root_summary));
+
+ // FLAG_SUPPORTS_CREATE means at least one directory under the root supports
+ // creating documents. FLAG_SUPPORTS_RECENTS means your application's most
+ // recently used documents will show up in the "Recents" category.
+ // FLAG_SUPPORTS_SEARCH allows users to search all documents the application
+ // shares.
+ row.add(Root.COLUMN_FLAGS, Root.FLAG_SUPPORTS_CREATE |
+ Root.FLAG_SUPPORTS_RECENTS |
+ Root.FLAG_SUPPORTS_SEARCH);
+
+ // COLUMN_TITLE is the root title (e.g. Gallery, Drive).
+ row.add(Root.COLUMN_TITLE, getContext().getString(R.string.title));
+
+ // This document id cannot change once it's shared.
+ row.add(Root.COLUMN_DOCUMENT_ID, getDocIdForFile(mBaseDir));
+
+ // The child MIME types are used to filter the roots and only present to the
+ // user roots that contain the desired type somewhere in their file hierarchy.
+ row.add(Root.COLUMN_MIME_TYPES, getChildMimeTypes(mBaseDir));
+ row.add(Root.COLUMN_AVAILABLE_BYTES, mBaseDir.getFreeSpace());
+ row.add(Root.COLUMN_ICON, R.drawable.ic_launcher);
+
+ return result;
+}</pre>
+
+<h4 id="queryChildDocuments">Mengimplementasikan queryChildDocuments</h4>
+
+<p>Implementasi
+{@link android.provider.DocumentsProvider#queryChildDocuments queryChildDocuments()}
+oleh Anda harus menghasilkan {@link android.database.Cursor} yang menunjuk ke semua file dalam
+direktori yang ditentukan, dengan menggunakan kolom-kolom yang didefinisikan dalam
+{@link android.provider.DocumentsContract.Document}.</p>
+
+<p>Metode ini akan dipanggil bila Anda memilih akar aplikasi dalam picker UI.
+Metode mengambil dokumen anak dari direktori di bawah akar. Metode ini bisa dipanggil pada level apa saja dalam
+hierarki file, bukan hanya akar. Cuplikan ini
+membuat kursor baru dengan kolom-kolom yang diminta, lalu menambahkan informasi tentang
+setiap anak langsung dalam direktori induk ke kursor.
+Satu anak bisa berupa gambar, direktori lain—file apa saja:</p>
+
+<pre>@Override
+public Cursor queryChildDocuments(String parentDocumentId, String[] projection,
+ String sortOrder) throws FileNotFoundException {
+
+ final MatrixCursor result = new
+ MatrixCursor(resolveDocumentProjection(projection));
+ final File parent = getFileForDocId(parentDocumentId);
+ for (File file : parent.listFiles()) {
+ // Adds the file's display name, MIME type, size, and so on.
+ includeFile(result, null, file);
+ }
+ return result;
+}
+</pre>
+
+<h4 id="queryDocument">Mengimplementasikan queryDocument</h4>
+
+<p>Implementasi
+{@link android.provider.DocumentsProvider#queryDocument queryDocument()}
+oleh Anda harus menghasilkan {@link android.database.Cursor} yang menunjuk ke file yang disebutkan,
+dengan menggunakan kolom-kolom yang didefinisikan dalam {@link android.provider.DocumentsContract.Document}.
+</p>
+
+<p>Metode {@link android.provider.DocumentsProvider#queryDocument queryDocument()}
+menghasilkan informasi yang sama yang diteruskan dalam
+{@link android.provider.DocumentsProvider#queryChildDocuments queryChildDocuments()},
+namun untuk file tertentu:</p>
+
+
+<pre>@Override
+public Cursor queryDocument(String documentId, String[] projection) throws
+ FileNotFoundException {
+
+ // Create a cursor with the requested projection, or the default projection.
+ final MatrixCursor result = new
+ MatrixCursor(resolveDocumentProjection(projection));
+ includeFile(result, documentId, null);
+ return result;
+}
+</pre>
+
+<h4 id="openDocument">Mengimplementasikan openDocument</h4>
+
+<p>Anda harus mengimplementasikan {@link android.provider.DocumentsProvider#openDocument
+openDocument()} untuk menghasilkan {@link android.os.ParcelFileDescriptor} yang mewakili
+file yang disebutkan. Aplikasi lain bisa menggunakan {@link android.os.ParcelFileDescriptor}
+yang dihasilkan untuk mengalirkan data. Sistem memanggil metode ini setelah pengguna memilih file
+dan aplikasi klien meminta akses ke file itu dengan memanggil
+{@link android.content.ContentResolver#openFileDescriptor openFileDescriptor()}.
+Misalnya:</p>
+
+<pre>@Override
+public ParcelFileDescriptor openDocument(final String documentId,
+ final String mode,
+ CancellationSignal signal) throws
+ FileNotFoundException {
+ Log.v(TAG, "openDocument, mode: " + mode);
+ // It's OK to do network operations in this method to download the document,
+ // as long as you periodically check the CancellationSignal. If you have an
+ // extremely large file to transfer from the network, a better solution may
+ // be pipes or sockets (see ParcelFileDescriptor for helper methods).
+
+ final File file = getFileForDocId(documentId);
+
+ final boolean isWrite = (mode.indexOf('w') != -1);
+ if(isWrite) {
+ // Attach a close listener if the document is opened in write mode.
+ try {
+ Handler handler = new Handler(getContext().getMainLooper());
+ return ParcelFileDescriptor.open(file, accessMode, handler,
+ new ParcelFileDescriptor.OnCloseListener() {
+ @Override
+ public void onClose(IOException e) {
+
+ // Update the file with the cloud server. The client is done
+ // writing.
+ Log.i(TAG, "A file with id " +
+ documentId + " has been closed!
+ Time to " +
+ "update the server.");
+ }
+
+ });
+ } catch (IOException e) {
+ throw new FileNotFoundException("Failed to open document with id "
+ + documentId + " and mode " + mode);
+ }
+ } else {
+ return ParcelFileDescriptor.open(file, accessMode);
+ }
+}
+</pre>
+
+<h3 id="security">Keamanan</h3>
+
+<p>Anggaplah penyedia dokumen Anda sebuah layanan penyimpanan cloud yang dilindungi kata sandi
+dan Anda ingin memastikan bahwa pengguna sudah login sebelum Anda mulai berbagi file mereka.
+Apakah yang harus dilakukan aplikasi Anda jika pengguna tidak login? Solusinya adalah menghasilkan
+akar nol dalam implementasi {@link android.provider.DocumentsProvider#queryRoots
+queryRoots()} Anda. Yakni, sebuah kursor akar kosong:</p>
+
+<pre>
+public Cursor queryRoots(String[] projection) throws FileNotFoundException {
+...
+ // If user is not logged in, return an empty root cursor. This removes our
+ // provider from the list entirely.
+ if (!isUserLoggedIn()) {
+ return result;
+}
+</pre>
+
+<p>Langkah lainnya adalah memanggil {@code getContentResolver().notifyChange()}.
+Ingat {@link android.provider.DocumentsContract}? Kita menggunakannya untuk membuat
+URI ini. Cuplikan berikut memberi tahu sistem untuk membuat query akar penyedia dokumen Anda
+kapan saja status login pengguna berubah. Jika pengguna tidak
+login, panggilan ke {@link android.provider.DocumentsProvider#queryRoots queryRoots()} akan menghasilkan
+kursor kosong, seperti yang ditampilkan di atas. Cara ini akan memastikan bahwa dokumen penyedia hanya
+tersedia jika pengguna login ke penyedia itu.</p>
+
+<pre>private void onLoginButtonClick() {
+ loginOrLogout();
+ getContentResolver().notifyChange(DocumentsContract
+ .buildRootsUri(AUTHORITY), null);
+}
+</pre>
\ No newline at end of file
diff --git a/docs/html-intl/intl/id/guide/topics/resources/accessing-resources.jd b/docs/html-intl/intl/id/guide/topics/resources/accessing-resources.jd
new file mode 100644
index 0000000..6774557
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/topics/resources/accessing-resources.jd
@@ -0,0 +1,337 @@
+page.title=Mengakses Sumber Daya
+parent.title=Sumber Daya Aplikasi
+parent.link=index.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+ <h2>Tampilan Cepat</h2>
+ <ul>
+ <li>Sumber daya bisa diacu dari kode dengan menggunakan integer dari {@code R.java}, seperti
+{@code R.drawable.myimage}</li>
+ <li>Sumber daya bisa diacu dari sumber daya dengan menggunakan sintaks XML khusus, seperti {@code
+@drawable/myimage}</li>
+ <li>Anda juga bisa mengakses sumber daya aplikasi Anda dengan berbagai metode di
+{@link android.content.res.Resources}</li>
+ </ul>
+
+ <h2>Kelas-Kelas Utama</h2>
+ <ol>
+ <li>{@link android.content.res.Resources}</li>
+ </ol>
+
+ <h2>Dalam dokumen ini</h2>
+ <ol>
+ <li><a href="#ResourcesFromCode">Mengakses Sumber Daya dari Kode</a></li>
+ <li><a href="#ResourcesFromXml">Mengakses Sumber Daya dari XML</a>
+ <ol>
+ <li><a href="#ReferencesToThemeAttributes">Mengacu atribut gaya</a></li>
+ </ol>
+ </li>
+ <li><a href="#PlatformResources">Mengakses Sumber Daya Platform</a></li>
+ </ol>
+
+ <h2>Lihat juga</h2>
+ <ol>
+ <li><a href="providing-resources.html">Menyediakan Sumber Daya</a></li>
+ <li><a href="available-resources.html">Tipe Sumber Daya</a></li>
+ </ol>
+</div>
+</div>
+
+
+
+
+<p>Setelah Anda menyediakan sumber daya dalam aplikasi Anda (yang dibicarakan di <a href="providing-resources.html">Menyediakan Sumber Daya</a>), Anda bisa menerapkannya dengan
+mengacu ID sumber dayanya. Semua ID sumber daya didefinisikan di kelas {@code R} proyek Anda, yang
+dihasilkan oleh alat {@code aapt} secara otomatis.</p>
+
+<p>Bila aplikasi Anda dikompilasi, {@code aapt} akan membuat kelas {@code R}, yang berisi
+ID sumber daya untuk semua sumber daya dalam direktori {@code
+res/} Anda. Untuk masing-masing tipe sumber daya, ada subkelas {@code R} (misalnya,
+{@code R.drawable} untuk semua sumber daya yang bisa ditarik), dan untuk masing-masing sumber daya dari tipe itu, ada satu integer statis
+ (misalnya, {@code R.drawable.icon}). Integer ini adalah ID sumber daya yang bisa Anda gunakan
+untuk mengambil sumber daya Anda.</p>
+
+<p>Walaupun kelas {@code R} adalah tempat menyebutkan ID sumber daya, Anda tidak perlu
+melihat ke sana untuk menemukan ID sumber daya. ID sumber daya selalu terdiri dari:</p>
+<ul>
+ <li><em>Tipe sumber daya</em>: Masing-masing sumber daya dikelompokkan menjadi "tipe", misalnya {@code
+string}, {@code drawable}, dan {@code layout}. Untuk mengetahui selengkapnya tentang berbagai tipe, lihat <a href="available-resources.html">Tipe Sumber Daya</a>.
+ </li>
+ <li><em>Nama sumber daya</em>, bisa berupa: nama file,
+tidak termasuk ekstensi; atau nilai dalam atribut {@code android:name} XML, jika
+sumber daya itu sebuah nilai sederhana (misalnya sebuah string).</li>
+</ul>
+
+<p>Ada dua cara untuk mengakses sumber daya:</p>
+<ul>
+ <li><strong>Dalam kode:</strong> Menggunakan integer statis dari subkelas dari kelas {@code R}
+, misalnya:
+ <pre class="classic no-pretty-print">R.string.hello</pre>
+ <p>{@code string} adalah tipe sumber daya dan {@code hello} adalah nama sumber daya. Ada banyak
+API Android yang bisa mengakses sumber daya Anda bila Anda menyediakan ID sumber daya dengan format ini. Lihat
+<a href="#ResourcesFromCode">Mengakses Sumber Daya dalam Kode</a>.</p>
+ </li>
+ <li><strong>Dalam XML:</strong> Menggunakan sebuah sintaks XML khusus yang juga berkaitan dengan
+ID sumber daya yang didefinisikan dalam kelas {@code R}, misalnya:
+ <pre class="classic no-pretty-print">@string/hello</pre>
+ <p>{@code string} adalah tipe sumber daya dan {@code hello} adalah nama sumber daya. Anda bisa menggunakan
+sintaks ini dalam sumber daya XML di mana saja Anda ingin menyediakan sebuah nilai dalam sebuah sumber daya. Lihat <a href="#ResourcesFromXml">Mengakses Sumber Daya dari XML</a>.</p>
+ </li>
+</ul>
+
+
+
+<h2 id="ResourcesFromCode">Mengakses Sumber Daya dalam Kode </h2>
+
+<p>Anda bisa menggunakan sumber daya dalam kode dengan menyalurkan ID sumber daya sebagai sebuah parameter metode. Misalnya,
+ Anda bisa mengatur sebuah {@link android.widget.ImageView} agar menggunakan sumber daya{@code res/drawable/myimage.png}
+dengan menggunakan {@link android.widget.ImageView#setImageResource(int) setImageResource()}:</p>
+<pre>
+ImageView imageView = (ImageView) findViewById(R.id.myimageview);
+imageView.setImageResource(<strong>R.drawable.myimage</strong>);
+</pre>
+
+<p>Anda juga bisa mengambil tiap sumber daya dengan menggunakan berbagai metode di {@link
+android.content.res.Resources}, di mana Anda bisa mendapatkan instance
+ {@link android.content.Context#getResources()}.</p>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+<h2>Akses ke File Asli</h2>
+
+<p>Walaupun tidak lazim, Anda mungkin perlu mengakses file dan direktori asli Anda. Jika demikian, maka
+menyimpan file Anda di {@code res/} tidak akan berhasil, karena satu-satunya cara untuk membaca sebuah sumber daya dari
+{@code res/} adalah dengan ID sumber daya. Sebagai gantinya, Anda bisa menyimpan sumber daya dalam direktori
+{@code assets/}.</p>
+<p>File yang tersimpan di direktori {@code assets/} <em>tidak</em> diberi ID
+sumber daya, sehingga Anda tidak bisa mengacunya melalui kelas {@code R} atau dari sumber daya XML. Sebagai gantinya, Anda bisa melakukan
+query file di direktori {@code assets/} seperti sebuah sistem file biasa dan membaca data mentah dengan menggunakan
+{@link android.content.res.AssetManager}.</p>
+<p>Akan tetapi, jika yang Anda butuhkan hanya kemampuan membaca data mentah (misalnya sebuah file video atau audio),
+maka simpanlah file itu di direktori {@code res/raw/} dan baca aliran byte dengan menggunakan {@link
+android.content.res.Resources#openRawResource(int) openRawResource()}.</p>
+
+</div>
+</div>
+
+
+<h3>Sintaks</h3>
+
+<p>Inilah sintaks untuk mengacu sumber daya dalam kode:</p>
+
+<pre class="classic no-pretty-print">
+[<em><package_name></em>.]R.<em><resource_type></em>.<em><resource_name></em>
+</pre>
+
+<ul>
+ <li><em> {@code <package_name>}</em>adalah nama paket yang di dalamnya terdapat sumber daya (tidak
+dibutuhkan bila mengacu sumber daya dari paket Anda sendiri).</li>
+ <li><em>{@code <resource_type>}</em> adalah subkelas {@code R} untuk tipe sumber daya.</li>
+ <li><em>{@code <resource_name>}</em> bisa berupa nama file sumber daya
+tanpa ekstensi atau nilai atribut {@code android:name} dalam elemen XML (untuk nilai
+sederhana).</li>
+</ul>
+<p>Lihat <a href="available-resources.html">Tipe Sumber Daya</a> untuk
+informasi selengkapnya tentang masing-masing tipe sumber daya dan cara mengacunya.</p>
+
+
+<h3>Kasus penggunaan</h3>
+
+<p>Ada banyak metode yang menerima parameter ID sumber daya dan Anda bisa mengambil sumber daya dengan menggunakan
+metode di {@link android.content.res.Resources}. Anda bisa mengambil instance {@link
+android.content.res.Resources} dengan {@link android.content.Context#getResources
+Context.getResources()}.</p>
+
+
+<p>Berikut adalah beberapa contoh cara mengakses sumber daya dalam kode:</p>
+
+<pre>
+// Load a background for the current screen from a drawable resource
+{@link android.app.Activity#getWindow()}.{@link
+android.view.Window#setBackgroundDrawableResource(int)
+setBackgroundDrawableResource}(<strong>R.drawable.my_background_image</strong>) ;
+
+// Set the Activity title by getting a string from the Resources object, because
+// this method requires a CharSequence rather than a resource ID
+{@link android.app.Activity#getWindow()}.{@link android.view.Window#setTitle(CharSequence)
+setTitle}(getResources().{@link android.content.res.Resources#getText(int)
+getText}(<strong>R.string.main_title</strong>));
+
+// Load a custom layout for the current screen
+{@link android.app.Activity#setContentView(int)
+setContentView}(<strong>R.layout.main_screen</strong>);
+
+// Set a slide in animation by getting an Animation from the Resources object
+mFlipper.{@link android.widget.ViewAnimator#setInAnimation(Animation)
+setInAnimation}(AnimationUtils.loadAnimation(this,
+ <strong>R.anim.hyperspace_in</strong>));
+
+// Set the text on a TextView object using a resource ID
+TextView msgTextView = (TextView) findViewById(<strong>R.id.msg</strong>);
+msgTextView.{@link android.widget.TextView#setText(int)
+setText}(<strong>R.string.hello_message</strong>);
+</pre>
+
+
+<p class="caution"><strong>Perhatian:</strong> Anda tidak boleh memodifikasi file {@code
+R.java} secara manual—, ini dihasilkan oleh alat {@code aapt} bila proyek Anda telah
+dikompilasi. Perubahan apa pun akan ditimpa bila nanti Anda mengompilasi.</p>
+
+
+
+<h2 id="ResourcesFromXml">Mengakses Sumber Daya dari XML</h2>
+
+<p>Anda bisa mendefinisikan nilai untuk beberapa atribut dan elemen XML dengan menggunakan
+acuan ke sumber daya yang ada. Anda akan sering melakukannya saat membuat file layout, untuk
+memasok string dan gambar bagi widget Anda.</p>
+
+<p>Misalnya, jika Anda menambahkan sebuah {@link android.widget.Button} ke layout, Anda harus menggunakan
+sebuah <a href="string-resource.html">sumber daya string</a> bagi teks tombolnya:</p>
+
+<pre>
+<Button
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:text="<strong>@string/submit</strong>" />
+</pre>
+
+
+<h3>Sintaks</h3>
+
+<p>Berikut adalah sintaks untuk mengacu sumber daya di sumber daya XML:</p>
+
+<pre class="classic no-pretty-print">
+@[<em><package_name></em>:]<em><resource_type></em>/<em><resource_name></em>
+</pre>
+
+<ul>
+ <li>{@code <package_name>} adalah nama paket yang di dalamnya terdapat sumber daya (tidak
+dibutuhkan bila mengacu sumber daya dari paket yang sama)</li>
+ <li>{@code <resource_type>} adalah subkelas
+{@code R} untuk tipe sumber daya</li>
+ <li>{@code <resource_name>} bisa berupa nama file sumber daya
+tanpa ekstensi atau nilai atribut {@code android:name} dalam elemen XML (untuk nilai
+sederhana).</li>
+</ul>
+
+<p>Lihat <a href="available-resources.html">Tipe Sumber Daya</a> untuk
+informasi selengkapnya tentang masing-masing tipe sumber daya dan cara mengacunya.</p>
+
+
+<h3>Kasus penggunaan</h3>
+
+<p>Dalam beberapa kasus, Anda harus menggunakan sumber daya untuk suatu nilai dalam XML (misalnya, untuk menerapkan gambar yang bisa ditarik
+pada widget), namun Anda juga bisa menggunakan sumber daya di XML mana saja yang menerima nilai sederhana. Misalnya, jika
+Anda mempunyai file sumber daya berikut yang berisi <a href="more-resources.html#Color">sumber daya warna</a> dan <a href="string-resource.html">sumber daya string</a>:</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <color name="opaque_red">#f00</color>
+ <string name="hello">Hello!</string>
+</resources>
+</pre>
+
+<p>Anda bisa menggunakan sumber daya ini dalam file layout berikut untuk mengatur warna teks dan
+string teks:</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<EditText xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:textColor="<strong>@color/opaque_red</strong>"
+ android:text="<strong>@string/hello</strong>" />
+</pre>
+
+<p>Dalam hal ini, Anda tidak perlu menyebutkan nama paket dalam sumber daya acuan karena
+sumber daya berasal dari paket Anda sendiri. Untuk
+mengacu sumber daya sistem, Anda perlu memasukkan nama paketnya. Misalnya:</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<EditText xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:textColor="<strong>@android:color/secondary_text_dark</strong>"
+ android:text="@string/hello" />
+</pre>
+
+<p class="note"><strong>Catatan:</strong> Anda harus menggunakan sumber daya string sepanjang
+waktu, sehingga aplikasi Anda bisa dilokalkan untuk bahasa lain.
+Untuk informasi tentang cara menciptakan
+sumber daya alternatif (seperti string lokal), lihat <a href="providing-resources.html#AlternativeResources">Menyediakan Sumber Daya Alternatif
+</a>. Untuk panduan lengkap melokalkan aplikasi Anda ke bahasa lain,
+lihat <a href="localization.html">Pelokalan</a>.</p>
+
+<p>Anda bahkan bisa menggunakan sumber daya dalam XML untuk membuat alias. Misalnya, Anda bisa membuat
+sumber daya yang bisa ditarik yang merupakan alias bagi sumber daya yang bisa ditarik lainnya:</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/other_drawable" />
+</pre>
+
+<p>Hal ini terdengar berlebihan, namun bisa sangat berguna saat menggunakan sumber daya alternatif. Baca selengkapnya tentang
+<a href="providing-resources.html#AliasResources">Membuat sumber daya alias</a>.</p>
+
+
+
+<h3 id="ReferencesToThemeAttributes">Mengacu atribut gaya</h3>
+
+<p>Sumber daya atribut gaya memungkinkan Anda mengacu nilai
+suatu atribut dalam tema yang diterapkan saat ini. Dengan mengacu sebuah atribut gaya memungkinkan Anda
+menyesuaikan tampilan elemen UI dengan mengatur gayanya agar cocok dengan beragam variasi standar yang dipasok oleh
+tema saat ini, sebagai ganti memasok nilai yang ditanamkan (hard-coded). Mengacu sebuah atribut gaya
+pada dasarnya adalah "gunakan gaya yang didefinisikan oleh atribut ini, dalam tema saat ini".</p>
+
+<p>Untuk mengacu sebuah atribut gaya, sintaks namanya hampir sama dengan format sumber daya normal
+, namun sebagai ganti simbol @ ({@code @}), gunakan sebuah tanda tanya ({@code ?}), dan
+porsi tipe sumber daya bersifat opsional. Sebagai contoh:</p>
+
+<pre class="classic">
+?[<em><package_name></em>:][<em><resource_type></em>/]<em><resource_name></em>
+</pre>
+
+<p>Misalnya, begini cara Anda mengacu suatu atribut untuk mengatur warna teks agar cocok dengan
+warna teks "utama" tema sistem:</p>
+
+<pre>
+<EditText id="text"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:textColor="<strong>?android:textColorSecondary</strong>"
+ android:text="@string/hello_world" />
+</pre>
+
+<p>Di sini, atribut {@code android:textColor} menyebutkan nama atribut gaya
+dalam tema saat ini. Android kini menggunakan nilai yang diterapkan pada atribut gaya {@code android:textColorSecondary}
+sebagai nilai untuk {@code android:textColor} dalam widget ini. Karena alat sumber daya
+mengetahui bahwa atribut sumber daya diharapkan dalam konteks ini,
+maka Anda tidak perlu menyatakan tipenyanya secara eksplisit (yang akan berupa
+<code>?android:attr/textColorSecondary</code>)—Anda bisa mengecualikan tipe {@code attr}.</p>
+
+
+
+
+<h2 id="PlatformResources">Mengakses Sumber Daya Platform</h2>
+
+<p>Android berisi sejumlah sumber daya standar, seperti gaya, tema, dan layout. Untuk
+mengakses semua sumber daya ini, tetapkan acuan sumber daya Anda dengan nama paket
+<code>android</code>. Misalnya, Android menyediakan sumber daya layout yang bisa Anda gunakan untuk
+item daftar dalam{@link android.widget.ListAdapter}:</p>
+
+<pre>
+{@link android.app.ListActivity#setListAdapter(ListAdapter)
+setListAdapter}(new {@link
+android.widget.ArrayAdapter}<String>(this, <strong>android.R.layout.simple_list_item_1</strong>, myarray));
+</pre>
+
+<p>Dalam contoh ini, {@link android.R.layout#simple_list_item_1} adalah sumber daya layout yang didefinisikan oleh
+platform untuk item di {@link android.widget.ListView}. Anda bisa menggunakannya sebagai ganti menciptakan
+layout sendiri untuk item daftar. Untuk informasi selengkapnya, lihat panduan pengembang
+<a href="{@docRoot}guide/topics/ui/layout/listview.html">List View</a>.</p>
+
diff --git a/docs/html-intl/intl/id/guide/topics/resources/overview.jd b/docs/html-intl/intl/id/guide/topics/resources/overview.jd
new file mode 100644
index 0000000..def4932
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/topics/resources/overview.jd
@@ -0,0 +1,103 @@
+page.title=Ikhtisar Sumber Daya
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+ <h2>Topik</h2>
+ <ol>
+ <li><a href="providing-resources.html">Menyediakan Sumber Daya</a></li>
+ <li><a href="accessing-resources.html">Mengakses Sumber Daya</a></li>
+ <li><a href="runtime-changes.html">Menangani Perubahan Runtime</a></li>
+ <li><a href="localization.html">Pelokalan</a></li>
+ </ol>
+
+ <h2>Acuan</h2>
+ <ol>
+ <li><a href="available-resources.html">Tipe Sumber Daya</a></li>
+ </ol>
+</div>
+</div>
+
+
+<p>Anda harus selalu mengeksternalkan sumber daya seperti gambar dan string dari kode
+aplikasi, agar Anda bisa memeliharanya secara independen. Mengeksternalkan
+sumber daya juga membuat Anda dapat menyediakan sumber daya alternatif yang mendukung konfigurasi
+perangkat tertentu seperti bahasa atau ukuran layar yang berbeda, yang semakin penting
+seiring semakin banyak tersedianya perangkat berbasis Android dengan konfigurasi berbeda. Untuk
+memberikan kompatibilitas dengan konfigurasi berbeda, Anda harus menata sumber daya dalam
+direktori {@code res/} proyek Anda, menggunakan berbagai subdirektori yang mengelompokkan sumber daya menurut tipe
+dan konfigurasinya.</p>
+
+<div class="figure" style="width:429px">
+<img src="{@docRoot}images/resources/resource_devices_diagram1.png" height="167" alt="" />
+<p class="img-caption">
+<strong>Gambar 1.</strong> Dua perangkat berbeda, masing-masing menggunakan layout default
+(aplikasi tidak menyediakan layout alternatif).</p>
+</div>
+
+<div class="figure" style="width:429px">
+<img src="{@docRoot}images/resources/resource_devices_diagram2.png" height="167" alt="" />
+<p class="img-caption">
+<strong>Gambar 2.</strong> Dua perangkat berbeda, masing-masing menggunakan layout berbeda yang tersedia untuk
+ukuran layar berbeda.</p>
+</div>
+
+<p>Bagi setiap tipe sumber daya, Anda bisa menetapkan sumber daya <em>default</em> dan sumber daya
+<em>alternatif</em> untuk aplikasi Anda:</p>
+<ul>
+ <li>Sumber daya default adalah sumber daya yang harus digunakan apa pun
+konfigurasi perangkatnya atau jika tidak ada sumber daya alternatif yang sesuai
+dengan konfigurasi saat ini.</li>
+ <li>Sumber daya alternatif adalah sumber daya yang Anda desain untuk digunakan dengan
+konfigurasi tertentu. Untuk menetapkan bahwa satu kelompok sumber daya ditujukan bagi konfigurasi tertentu,
+tambahkan qualifier konfigurasi yang sesuai ke nama direktori.</li>
+</ul>
+
+<p>Misalnya, walaupun layout
+UI default Anda disimpan dalam direktori {@code res/layout/}, Anda dapat menetapkan layout berbeda
+untuk digunakan saat layar dalam orientasi lanskap, dengan menyimpannya dalam direktori {@code res/layout-land/}
+. Android secara otomatis memberlakukan sumber daya yang sesuai dengan mencocokkan konfigurasi perangkat
+saat ini dengan nama direktori sumber daya.</p>
+
+<p>Gambar 1 mengilustrasikan cara sistem memberlakukan layout yang sama untuk
+dua perangkat berbeda saat sumber daya alternatif tidak tersedia. Gambar 2 menunjukkan
+aplikasi yang sama saat menambahkan sumber daya layout alternatif untuk layar yang lebih besar.</p>
+
+<p>Dokumen-dokumen berikut berisi panduan lengkap mengenai cara menata sumber daya aplikasi,
+menetapkan sumber daya alternatif, mengaksesnya dalam aplikasi, dan banyak lagi:</p>
+
+<dl>
+ <dt><strong><a href="providing-resources.html">Menyediakan Sumber Daya</a></strong></dt>
+ <dd>Jenis sumber daya yang dapat Anda sediakan dalam aplikasi, tempat menyimpannya, dan cara membuat sumber daya
+alternatif untuk konfigurasi perangkat tertentu.</dd>
+ <dt><strong><a href="accessing-resources.html">Mengakses Sumber Daya</a></strong></dt>
+ <dd>Cara menggunakan sumber daya yang telah Anda sediakan, baik dengan mengacunya dari kode
+aplikasi Anda atau dari sumber daya XML lainnya.</dd>
+ <dt><strong><a href="runtime-changes.html">Menangani Perubahan Runtime</a></strong></dt>
+ <dd>Cara mengelola perubahan konfigurasi yang terjadi saat Aktivitas Anda berjalan.</dd>
+ <dt><strong><a href="localization.html">Pelokalan</a></strong></dt>
+ <dd>Panduan dari pengalaman untuk melokalkan aplikasi menggunakan sumber daya alternatif. Walaupun ini
+hanya satu penggunaan tertentu dari sumber daya alternatif, hal ini sangat penting dalam meraih pengguna lebih
+banyak.</dd>
+ <dt><strong><a href="available-resources.html">Tipe Sumber Daya</a></strong></dt>
+ <dd>Acuan dari berbagai tipe sumber daya yang dapat Anda sediakan, menjelaskan elemen-elemen XML,
+atribut, dan sintaksnya. Misalnya, acuan ini menunjukkan kepada Anda cara membuat sumber daya untuk
+menu aplikasi, drawable, animasi, dan lainnya.</dd>
+</dl>
+
+<!--
+<h2>Raw Assets</h2>
+
+<p>An alternative to saving files in {@code res/} is to save files in the {@code
+assets/} directory. This should only be necessary if you need direct access to original files and
+directories by name. Files saved in the {@code assets/} directory will not be given a resource
+ID, so you can't reference them through the {@code R} class or from XML resources. Instead, you can
+query data in the {@code assets/} directory like an ordinary file system, search through the
+directory and
+read raw data using {@link android.content.res.AssetManager}. For example, this can be more useful
+when dealing with textures for a game. However, if you only need to read raw data from a file
+(such as a video or audio file), then you should save files into the {@code res/raw/} directory and
+then read a stream of bytes using {@link android.content.res.Resources#openRawResource(int)}. This
+is uncommon, but if you need direct access to original files in {@code assets/}, refer to the {@link
+android.content.res.AssetManager} documentation.</p>
+-->
diff --git a/docs/html-intl/intl/id/guide/topics/resources/providing-resources.jd b/docs/html-intl/intl/id/guide/topics/resources/providing-resources.jd
new file mode 100644
index 0000000..9bccd24
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/topics/resources/providing-resources.jd
@@ -0,0 +1,1094 @@
+page.title=Menyediakan Sumber Daya
+parent.title=Sumber Daya Aplikasi
+parent.link=index.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+ <h2>Tampilan Cepat</h2>
+ <ul>
+ <li>Berbagai tipe sumber daya termasuk dalam subdirektori {@code res/}</li>
+ <li>Sumber daya alternatif menyediakan file sumber daya dengan konfigurasi tertentu</li>
+ <li>Sertakan selalu sumber daya default agar aplikasi Anda tidak bergantung pada
+konfigurasi perangkat tertentu</li>
+ </ul>
+ <h2>Dalam dokumen ini</h2>
+ <ol>
+ <li><a href="#ResourceTypes">Mengelompokkan Tipe Sumber Daya</a></li>
+ <li><a href="#AlternativeResources">Menyediakan Sumber Daya Alternatif</a>
+ <ol>
+ <li><a href="#QualifierRules">Aturan penamaan qualifier</a></li>
+ <li><a href="#AliasResources">Membuat sumber daya alias</a></li>
+ </ol>
+ </li>
+ <li><a href="#Compatibility">Menyediakan Kompatibilitas Perangkat Terbaik dengan Sumber Daya</a></li>
+ <li><a href="#BestMatch">Cara Android Menemukan Sumber Daya yang Paling Cocok</a></li>
+ </ol>
+
+ <h2>Lihat juga</h2>
+ <ol>
+ <li><a href="accessing-resources.html">Mengakses Sumber Daya</a></li>
+ <li><a href="available-resources.html">Tipe Sumber Daya</a></li>
+ <li><a href="{@docRoot}guide/practices/screens_support.html">Mendukung Beberapa
+Layar</a></li>
+ </ol>
+</div>
+</div>
+
+<p>Anda harus selalu mengeksternalkan sumber daya aplikasi seperti gambar dan string dari kode
+, agar Anda bisa memeliharanya secara independen. Anda juga harus menyediakan sumber daya alternatif untuk
+konfigurasi perangkat tertentu, dengan mengelompokkannya dalam direktori sumber daya bernama khusus. Saat
+runtime, Android menggunakan sumber daya yang sesuai berdasarkan konfigurasi saat ini. Misalnya, Anda mungkin
+ingin menyediakan layout UI berbeda bergantung pada ukuran layar atau string berbeda bergantung pada
+pengaturan bahasa.</p>
+
+<p>Setelah mengeksternalkan sumber daya aplikasi, Anda dapat mengaksesnya menggunakan
+ID sumber daya yang dibuat dalam kelas {@code R} proyek Anda. Cara menggunakan
+sumber daya dalam aplikasi dibahas dalam <a href="accessing-resources.html">Mengakses
+Sumber Daya</a>. Dokumen ini menampilkan cara mengelompokkan sumber daya
+dalam proyek Android Anda dan menyediakan sumber daya alternatif untuk konfigurasi perangkat tertentu.</p>
+
+
+<h2 id="ResourceTypes">Mengelompokkan Tipe Sumber Daya</h2>
+
+<p>Anda harus menempatkan setiap tipe sumber daya dalam subdirektori spesifik pada direktori
+{@code res/} proyek. Misalnya, inilah hierarki file untuk proyek sederhana:</p>
+
+<pre class="classic no-pretty-print">
+MyProject/
+ src/ <span style="color:black">
+ MyActivity.java </span>
+ res/
+ drawable/ <span style="color:black">
+ graphic.png </span>
+ layout/ <span style="color:black">
+ main.xml
+ info.xml</span>
+ mipmap/ <span style="color:black">
+ icon.png </span>
+ values/ <span style="color:black">
+ strings.xml </span>
+</pre>
+
+<p>Seperti yang Anda lihat dalam contoh ini, direktori {@code res/} berisi semua sumber daya (dalam
+subdirektori): sumber daya gambar, dua sumber daya layout, direktori {@code mipmap/} untuk ikon
+launcher, dan satu file sumber daya string. Nama direktori
+sumber daya penting dan dijelaskan dalam tabel 1.</p>
+
+<p class="note"><strong>Catatan:</strong> Untuk informasi selengkapnya tentang menggunakan folder mipmap, lihat
+<a href="{@docRoot}tools/projects/index.html#mipmap">Mengelola Ikhtisar Proyek</a>.</p>
+
+<p class="table-caption" id="table1"><strong>Tabel 1.</strong> Direktori sumber daya
+didukung dalam direktori proyek {@code res/}.</p>
+
+<table>
+ <tr>
+ <th scope="col">Direktori</th>
+ <th scope="col">Tipe Sumber Daya</th>
+ </tr>
+
+ <tr>
+ <td><code>animator/</code></td>
+ <td>File XML yang mendefinisikan <a href="{@docRoot}guide/topics/graphics/prop-animation.html">animasi
+properti</a>.</td>
+ </tr>
+
+ <tr>
+ <td><code>anim/</code></td>
+ <td>File XML yang mendefinisikan <a href="{@docRoot}guide/topics/graphics/view-animation.html#tween-animation">animasi
+tween</a>. (Animasi properti juga dapat disimpan dalam direktori ini, namun
+direktori {@code animator/} lebih disukai bagi animasi properti agar kedua tipe
+ini dapat dibedakan.)</td>
+ </tr>
+
+ <tr>
+ <td><code>color/</code></td>
+ <td>File XML yang mendefinisikan daftar status warna. Lihat <a href="color-list-resource.html">Sumber Daya
+Daftar Status Warna</a></td>
+ </tr>
+
+ <tr>
+ <td><code>drawable/</code></td>
+
+ <td><p>File bitmap ({@code .png}, {@code .9.png}, {@code .jpg}, {@code .gif}) atau file XML yang
+dikompilasi menjadi subtipe sumber daya drawable berikut:</p>
+ <ul>
+ <li>File bitmap</li>
+ <li>Nine-Patches (bitmap yang dapat diubah ukurannya)</li>
+ <li>Daftar status</li>
+ <li>Bentuk</li>
+ <li>Drawable animasi</li>
+ <li>Drawable lainnya</li>
+ </ul>
+ <p>Lihat <a href="drawable-resource.html">Sumber Daya Drawable</a>.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td><code>mipmap/</code></td>
+ <td>File drawable untuk densitas ikon launcher yang berbeda. Untuk informasi selengkapnya tentang
+ mengelola ikon launcher dengan folder {@code mipmap/}, lihat
+<a href="{@docRoot}tools/project/index.html#mipmap">Mengelola Ikhtisar Proyek</a>.</td>
+ </tr>
+
+ <tr>
+ <td><code>layout/</code></td>
+ <td>File XML yang mendefinisikan layout antarmuka pengguna.
+ Lihat <a href="layout-resource.html">Sumber Daya Layout</a>.</td>
+ </tr>
+
+ <tr>
+ <td><code>menu/</code></td>
+ <td>File XML yang mendefinisikan menu aplikasi, seperti Menu Opsi, Menu Konteks, atau Sub
+Menu. Lihat <a href="menu-resource.html">Sumber Daya Menu</a>.</td>
+ </tr>
+
+ <tr>
+ <td><code>raw/</code></td>
+ <td><p>File tak didukung yang akan disimpan dalam bentuk mentah. Untuk membuka sumber daya ini dengan
+{@link java.io.InputStream} mentah, panggil {@link android.content.res.Resources#openRawResource(int)
+Resources.openRawResource()} dengan ID sumber daya, yaitu {@code R.raw.<em>filename</em>}.</p>
+ <p>Akan tetapi, jika Anda butuh akses ke nama file asli dan hierarki file, Anda bisa mempertimbangkan
+untuk menyimpan beberapa sumber daya dalam direktori {@code
+assets/} (sebagai ganti {@code res/raw/}). File dalam {@code assets/} tidak diberi
+ID sumber daya, jadi Anda bisa membacanya hanya dengan menggunakan {@link android.content.res.AssetManager}.</p></td>
+ </tr>
+
+ <tr>
+ <td><code>values/</code></td>
+ <td><p>File XML yang berisi nilai-nilai sederhana, seperti string, integer, dan warna.</p>
+ <p>Walaupun file sumber daya XML dalam subdirektori {@code res/} lainnya mendefinisikan satu sumber daya
+berdasarkan nama file XML, file dalam direktori {@code values/} menggambarkan beberapa sumber daya.
+Untuk file dalam direktori ini, setiap anak elemen {@code <resources>} mendefinisikan satu sumber
+daya. Misalnya, elemen {@code <string>} membuat sumber daya
+{@code R.string} dan elemen {@code <color>} membuat sumber daya {@code R.color}
+.</p>
+ <p>Karena setiap sumber daya didefinisikan dengan elemen XML-nya sendiri, Anda bisa bebas menamai file
+ini dan menempatkan tipe sumber daya berbeda dalam satu file. Akan tetapi, agar jelas, Anda mungkin
+perlu menempatkan tipe sumber daya unik dalam file berbeda. Misalnya, berikut ini adalah beberapa ketentuan
+penamaan file untuk sumber daya yang dapat Anda buat dalam direktori ini:</p>
+ <ul>
+ <li>arrays.xml untuk larik sumber daya tipe (<a href="more-resources.html#TypedArray">larik bertipe</a>).</li>
+ <li>colors.xml untuk <a href="more-resources.html#Color">nilai warna</a></li>
+ <li>dimens.xml untuk <a href="more-resources.html#Dimension">nilai dimensi</a>.</li>
+ <li>strings.xml untuk <a href="string-resource.html">nilai
+string</a>.</li>
+ <li>styles.xml untuk <a href="style-resource.html">gaya</a>.</li>
+ </ul>
+ <p>Lihat <a href="string-resource.html">Sumber Daya String</a>,
+ <a href="style-resource.html">Sumber Daya Gaya</a>, dan
+ <a href="more-resources.html">Tipe Sumber Daya Lainnya</a>.</p>
+ </td>
+ </tr>
+
+ <tr>
+ <td><code>xml/</code></td>
+ <td>File XML tak didukung yang bisa dibaca saat runtime dengan memanggil {@link
+android.content.res.Resources#getXml(int) Resources.getXML()}. Berbagai file konfigurasi XML
+harus disimpan di sini, seperti <a href="{@docRoot}guide/topics/search/searchable-config.html">konfigurasi yang dapat dicari</a>.
+<!-- or preferences configuration. --></td>
+ </tr>
+</table>
+
+<p class="caution"><strong>Perhatian:</strong> Jangan menyimpan file sumber daya secara langsung dalam
+direktori {@code res/}— karena akan menyebabkan kesalahan compiler.</p>
+
+<p>Untuk informasi selengkapnya tentang tipe sumber daya tertentu, lihat dokumentasi <a href="available-resources.html">Tipe Sumber Daya</a>.</p>
+
+<p>Sumber daya yang disimpan dalam subdirektori yang didefinisikan dalam tabel 1 adalah sumber daya
+"default" Anda. Berarti sumber daya ini mendefinisikan desain default dan konten untuk aplikasi Anda.
+Akan tetapi, beberapa tipe perangkat berbasis Android mungkin memanggil tipe sumber daya yang berbeda.
+Misalnya, jika perangkat memiliki layar yang lebih besar daripada layar normal, maka Anda harus
+menyediakan sumber daya layout berbeda yang memanfaatkan ruang layar yang lebih besar. Atau, jika perangkat
+memiliki pengaturan bahasa berbeda, maka Anda harus menyediakan sumber daya string berbeda yang menerjemahkan teks dalam
+antarmuka pengguna Anda. Untuk menyediakan sumber daya berbeda ini bagi
+konfigurasi perangkat yang berbeda, Anda harus menyediakan sumber daya alternatif, selain sumber
+daya default.</p>
+
+
+<h2 id="AlternativeResources">Menyediakan Sumber Daya Alternatif</h2>
+
+
+<div class="figure" style="width:429px">
+<img src="{@docRoot}images/resources/resource_devices_diagram2.png" height="167" alt="" />
+<p class="img-caption">
+<strong>Gambar 1.</strong> Dua perangkat berbeda, masing-masing menggunakan sumber daya layout berbeda.</p>
+</div>
+
+<p>Hampir setiap aplikasi harus menyediakan sumber daya alternatif untuk mendukung konfigurasi
+perangkat tertentu. Misalnya, Anda harus menyertakan sumber daya drawable alternatif untuk densitas layar
+berbeda dan sumber daya string alternatif untuk bahasa yang berbeda. Saat runtime, Android
+akan mendeteksi konfigurasi perangkat aktif dan memuat
+sumber daya yang sesuai untuk aplikasi Anda.</p>
+
+<p>Untuk menyebutkan alternatif konfigurasi tertentu untuk satu set sumber daya:</p>
+<ol>
+ <li>Buat direktori baru dalam {@code res/} yang dinamai dalam bentuk {@code
+<em><resources_name></em>-<em><config_qualifier></em>}.
+ <ul>
+ <li><em>{@code <resources_name>}</em> adalah nama direktori dari sumber daya default
+terkait (didefinisikan dalam tabel 1).</li>
+ <li><em>{@code <qualifier>}</em> adalah nama yang menetapkan konfigurasi individu
+yang akan digunakan sumber daya ini (didefinisikan dalam tabel 2).</li>
+ </ul>
+ <p>Anda bisa menambahkan lebih dari satu <em>{@code <qualifier>}</em>. Pisahkan masing-masing
+dengan tanda hubung.</p>
+ <p class="caution"><strong>Perhatian:</strong> Saat menambahkan beberapa qualifier, Anda
+harus menempatkannya dalam urutan yang sama dengan yang tercantum dalam tabel 2. Jika urutan qualifier
+salah, sumber daya akan diabaikan.</p>
+ </li>
+ <li>Simpan masing-masing sumber daya alternatif dalam direktori baru ini. File sumber daya harus dinamai
+sama persis dengan file sumber daya default.</li>
+</ol>
+
+<p>Misalnya, berikut ini beberapa sumber daya default dan sumber daya alternatif:</p>
+
+<pre class="classic no-pretty-print">
+res/
+ drawable/ <span style="color:black">
+ icon.png
+ background.png </span>
+ drawable-hdpi/ <span style="color:black">
+ icon.png
+ background.png </span>
+</pre>
+
+<p>Qualifier {@code hdpi} menunjukkan bahwa sumber daya dalam direktori itu diperuntukkan bagi perangkat dengan
+layar densitas tinggi. Gambar di masing-masing direktori drawable memiliki ukuran untuk densitas layar
+tertentu, namun nama filenya persis
+sama. Dengan demikian, ID sumber daya yang Anda gunakan untuk mengacu gambar {@code icon.png} atau @code
+background.png} selalu sama, namun Android memilih
+versi masing-masing sumber daya yang paling cocok dengan perangkat saat ini, dengan membandingkan informasi konfigurasi
+perangkat dengan qualifier dalam nama direktori sumber daya.</p>
+
+<p>Android mendukung beberapa qualifier konfigurasi dan Anda dapat
+menambahkan beberapa qualifier ke satu nama direktori, dengan memisahkan setiap qualifier dengan tanda hubung. Tabel 2
+berisi daftar qualifier konfigurasi yang valid, dalam urutan prioritas—jika Anda menggunakan beberapa
+qualifier sebagai direktori sumber daya, Anda harus menambahkannya ke nama direktori sesuai urutan
+yang tercantum dalam tabel.</p>
+
+
+<p class="table-caption" id="table2"><strong>Tabel 2.</strong> Nama-nama
+qualifier konfigurasi.</p>
+<table>
+ <tr>
+ <th>Konfigurasi</th>
+ <th>Nilai-nilai Qualifier</th>
+ <th>Keterangan</th>
+ </tr>
+ <tr id="MccQualifier">
+ <td>MCC dan MNC</td>
+ <td>Contoh:<br/>
+ <code>mcc310</code><br/>
+ <code><nobr>mcc310-mnc004</nobr></code><br/>
+ <code>mcc208-mnc00</code><br/>
+ dll.
+ </td>
+ <td>
+ <p>Kode negara seluler (MCC), bisa diikuti dengan kode jaringan seluler (MNC)
+ dari kartu SIM dalam perangkat. Misalnya, <code>mcc310</code> adalah AS untuk operator mana saja,
+ <code>mcc310-mnc004</code> adalah AS untuk Verizon, dan <code>mcc208-mnc00</code> Prancis untuk
+Orange.</p>
+ <p>Jika perangkat menggunakan koneksi radio (ponsel GSM), nilai-nilai MCC dan MNC berasal
+dari kartu SIM.</p>
+ <p>Anda juga dapat menggunakan MNC saja (misalnya, untuk menyertakan sumber daya legal
+spesifik untuk negara itu di aplikasi Anda). Jika Anda perlu menetapkan hanya berdasarkan bahasa, maka gunakan qualifier
+<em>bahasa dan wilayah</em> sebagai gantinya (akan dibahas nanti). Jika Anda memutuskan untuk menggunakan qualifier MCC dan
+MNC, Anda harus melakukannya dengan hati-hati dan menguji apakah qualifier itu berjalan sesuai harapan.</p>
+ <p>Lihat juga bidang konfigurasi {@link
+android.content.res.Configuration#mcc}, dan {@link
+android.content.res.Configuration#mnc}, yang masing-masing menunjukkan kode negara seluler saat ini
+dan kode jaringan seluler.</p>
+ </td>
+ </tr>
+ <tr id="LocaleQualifier">
+ <td>Bahasa dan wilayah</td>
+ <td>Contoh:<br/>
+ <code>en</code><br/>
+ <code>fr</code><br/>
+ <code>en-rUS</code><br/>
+ <code>fr-rFR</code><br/>
+ <code>fr-rCA</code><br/>
+ dll.
+ </td>
+ <td><p>Bahasa didefinisikan oleh kode bahasa dua huruf <a href="http://www.loc.gov/standards/iso639-2/php/code_list.php">ISO
+639-1</a>, bisa juga diikuti dengan kode wilayah
+dua huruf <a href="http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html">ISO
+3166-1-alpha-2</a> (diawali dengan huruf kecil "{@code r}").
+ </p><p>
+ Kode <em>tidak</em> membedakan huruf besar atau kecil; awalan {@code r} akan digunakan untuk
+membedakan bagian wilayah.
+ Anda tidak bisa menetapkan wilayah saja.</p>
+ <p>Ini bisa berubah selama masa pakai
+aplikasi Anda jika pengguna mengubah bahasanya dalam pengaturan sistem. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk informasi tentang
+bagaimana hal ini dapat memengaruhi aplikasi Anda selama runtime.</p>
+ <p>Lihat <a href="localization.html">Pelokalan</a> untuk panduan lengkap melokalkan
+aplikasi Anda ke bahasa lain.</p>
+ <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#locale} yang menunjukkan
+bahasa setempat yang digunakan saat ini.</p>
+ </td>
+ </tr>
+ <tr id="LayoutDirectionQualifier">
+ <td>Arah Layout</td>
+ <td><code>ldrtl</code><br/>
+ <code>ldltr</code><br/>
+ </td>
+ <td><p>Arah layout aplikasi Anda. {@code ldrtl} berarti "arah layout dari kanan ke kiri".
+ {@code ldltr} berarti "arah layout dari kiri ke kanan" dan merupakan nilai implisit default.
+ </p>
+ <p>Ini bisa berlaku untuk sumber daya mana pun seperti layout, drawable, atau nilai-nilai.
+ </p>
+ <p>Misalnya, jika Anda ingin memberikan beberapa layout khusus untuk bahasa Arab dan beberapa
+layout umum untuk setiap bahasa lainnya yang menggunakan "kanan-ke-kiri" lainnya (seperti bahasa Persia atau Ibrani) maka Anda akan memiliki:
+ </p>
+<pre class="classic no-pretty-print">
+res/
+ layout/ <span style="color:black">
+ main.xml </span>(Default layout)
+ layout-ar/ <span style="color:black">
+ main.xml </span>(Specific layout for Arabic)
+ layout-ldrtl/ <span style="color:black">
+ main.xml </span>(Any "right-to-left" language, except
+ for Arabic, because the "ar" language qualifier
+ has a higher precedence.)
+</pre>
+ <p class="note"><strong>Catatan:</strong> Untuk mengaktifkan fitur
+layout kanan-ke-kiri untuk aplikasi, Anda harus mengatur <a href="{@docRoot}guide/topics/manifest/application-element.html#supportsrtl">{@code
+ supportsRtl}</a> ke {@code "true"} dan mengatur <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> ke 17 atau yang lebih tinggi.</p>
+ <p><em>Ditambahkan dalam API level 17.</em></p>
+ </td>
+ </tr>
+ <tr id="SmallestScreenWidthQualifier">
+ <td>smallestWidth</td>
+ <td><code>sw<N>dp</code><br/><br/>
+ Contoh:<br/>
+ <code>sw320dp</code><br/>
+ <code>sw600dp</code><br/>
+ <code>sw720dp</code><br/>
+ dll.
+ </td>
+ <td>
+ <p>Ukuran dasar layar, sebagaimana yang ditunjukkan oleh dimensi terpendek dari area layar
+yang tersedia. Secara spesifik, smallestWidth perangkat adalah yang terpendek dari
+tinggi dan lebar layar yang tersedia (Anda dapat menganggapnya sebagai "lebar terkecil yang memungkinkan" untuk layar). Anda bisa
+menggunakan qualifier ini untuk memastikan bahwa, apa pun orientasi layar saat ini, aplikasi
+Anda memiliki paling tidak {@code <N>} dps dari lebar yang tersedia untuk UI-nya.</p>
+ <p>Misalnya, jika layout mengharuskan dimensi layar terkecilnya setiap saat paling tidak
+600 dp, maka Anda dapat menggunakan qualifer ini untuk membuat sumber daya layout, {@code
+res/layout-sw600dp/}. Sistem akan menggunakan sumber daya ini hanya bila dimensi layar terkecil yang
+tersedia paling tidak 600 dp, tanpa mempertimbangkan apakah sisi 600 dp adalah tinggi atau
+lebar yang dipersepsikan pengguna. SmallestWidth adalah karakteristik ukuran layar tetap dari perangkat; <strong>smallestWidth
+perangkat tidak berubah saat orientasi layar berubah</strong>.</p>
+ <p>SmallestWidth perangkat memperhitungkan dekorasi layar dan UI sistem. Misalnya
+, jika perangkat memiliki beberapa elemen UI persisten pada layar yang menghitung ruang di sepanjang
+sumbu smallestWidth, sistem akan mendeklarasikan smallestWidth lebih kecil daripada ukuran layar sebenarnya,
+karena itu adalah piksel layar yang tidak tersedia untuk UI Anda. Sehingga nilai yang Anda
+gunakan haruslah merupakan dimensi terkecil sebenarnya yang <em>dibutuhkan oleh layout Anda</em> (biasanya, nilai ini adalah
+"lebar terkecil" yang didukung layout Anda, apa pun orientasi layar saat ini).</p>
+ <p>Sebagian nilai yang mungkin Anda gunakan untuk ukuran layar umum:</p>
+ <ul>
+ <li>320, untuk perangkat berkonfigurasi layar seperti:
+ <ul>
+ <li>240x320 ldpi (handset QVGA)</li>
+ <li>320x480 mdpi (handset)</li>
+ <li>480x800 hdpi (handset densitas tinggi)</li>
+ </ul>
+ </li>
+ <li>480, untuk layar seperti 480x800 mdpi (tablet/handset).</li>
+ <li>600, untuk layar seperti 600x1024 mdpi (tablet 7").</li>
+ <li>720, untuk layar seperti 720x1280 mdpi (tablet 10").</li>
+ </ul>
+ <p>Bila aplikasi Anda menyediakan beberapa direktori sumber daya dengan nilai yang berbeda untuk
+qualifier smallestWidth terkecil, sistem akan menggunakan nilai terdekat dengan (tanpa melebihi)
+smallestWidth perangkat. </p>
+ <p><em>Ditambahkan dalam API level 13.</em></p>
+ <p>Lihat juga atribut <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html#requiresSmallest">{@code
+android:requiresSmallestWidthDp}</a>, yang mendeklarasikan smallestWidth minimum yang
+kompatibel dengan aplikasi Anda, dan bidang konfigurasi {@link
+android.content.res.Configuration#smallestScreenWidthDp}, yang menyimpan nilai
+smallestWidth perangkat.</p>
+ <p>Untuk informasi selengkapnya tentang mendesain untuk layar berbeda dan menggunakan
+qualifier ini, lihat panduan pengembang <a href="{@docRoot}guide/practices/screens_support.html">Mendukung
+Multi Layar</a>.</p>
+ </td>
+ </tr>
+ <tr id="ScreenWidthQualifier">
+ <td>Lebar yang tersedia</td>
+ <td><code>w<N>dp</code><br/><br/>
+ Contoh:<br/>
+ <code>w720dp</code><br/>
+ <code>w1024dp</code><br/>
+ dll.
+ </td>
+ <td>
+ <p>Menetapkan lebar layar minimum yang tersedia, di unit {@code dp} yang
+menggunakan sumber daya—yang didefinisikan oleh nilai <code><N></code>. Nilai konfigurasi ini
+ akan berubah bila orientasi
+berubah antara lanskap dan potret agar cocok dengan lebar sebenarnya saat ini.</p>
+ <p>Bila aplikasi Anda menyediakan beberapa direktori sumber daya dengan nilai yang berbeda
+ untuk konfigurasi ini, sistem akan menggunakan nilai terdekat dengan (tanpa melebihi)
+ lebar layar perangkat saat ini. Nilai
+di sini memperhitungkan dekorasi layar akun, jadi jika perangkat memiliki beberapa
+elemen UI persisten di tepi kiri atau kanan, layar
+menggunakan nilai lebar yang lebih kecil daripada ukuran layar sebenarnya, yang memperhitungkan
+elemen UI ini dan mengurangi ruang aplikasi yang tersedia.</p>
+ <p><em>Ditambahkan dalam API level 13.</em></p>
+ <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#screenWidthDp}
+ yang menyimpan lebar layar saat ini.</p>
+ <p>Untuk informasi selengkapnya tentang mendesain untuk layar berbeda dan menggunakan
+qualifier ini, lihat panduan pengembang <a href="{@docRoot}guide/practices/screens_support.html">Mendukung
+Multi Layar</a>.</p>
+ </td>
+ </tr>
+ <tr id="ScreenHeightQualifier">
+ <td>Tinggi yang tersedia</td>
+ <td><code>h<N>dp</code><br/><br/>
+ Contoh:<br/>
+ <code>h720dp</code><br/>
+ <code>h1024dp</code><br/>
+ dll.
+ </td>
+ <td>
+ <p>Menetapkan tinggi layar minimum yang tersedia, dalam satuan "dp" yang harus digunakan
+sumber daya —bersama nilai yang didefinisikan oleh <code><N></code>. Nilai konfigurasi ini
+ akan berubah saat orientasi
+berubah antara lanskap dan potret agar cocok dengan tinggi sebenarnya saat ini.</p>
+ <p>Bila aplikasi menyediakan beberapa direktori sumber daya dengan nilai yang berbeda
+ untuk konfigurasi ini, sistem akan menggunakan nilai yang terdekat dengan (tanpa melebihi)
+ tinggi layar perangkat saat ini. Nilai
+di sini memperhitungkan dekorasi layar akun, jadi jika perangkat memiliki beberapa
+elemen UI persisten di tepi atas atau bawah, layar akan
+menggunakan nilai tinggi yang lebih kecil daripada ukuran layar sebenarnya, memperhitungkan
+elemen UI ini dan mengurangi ruang aplikasi yang tersedia. Dekorasi
+layar yang tidak tetap (misalnya baris status (status-bar) telepon yang bisa
+disembunyikan saat layar penuh) di sini <em>tidak</em> diperhitungkan, demikian pula
+dekorasi jendela seperti baris judul (title-bar)atau baris tindakan (action-bar), jadi aplikasi harus disiapkan
+untuk menangani ruang yang agak lebih kecil daripada yang ditetapkan.
+ <p><em>Ditambahkan dalam API level 13.</em></p>
+ <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#screenHeightDp}
+ yang menyimpan lebar layar saat ini.</p>
+ <p>Untuk informasi selengkapnya tentang mendesain untuk layar berbeda dan menggunakan
+qualifier ini, lihat panduan pengembang <a href="{@docRoot}guide/practices/screens_support.html">Mendukung
+Multi Layar</a>.</p>
+ </td>
+ </tr>
+ <tr id="ScreenSizeQualifier">
+ <td>Ukuran layar</td>
+ <td>
+ <code>small</code><br/>
+ <code>normal</code><br/>
+ <code>large</code><br/>
+ <code>xlarge</code>
+ </td>
+ <td>
+ <ul class="nolist">
+ <li>{@code small}: Layar yang berukuran serupa dengan
+layar QVGA densitas rendah. Ukuran layout minimum untuk layar kecil
+adalah sekitar 320x426 satuan dp. Misalnya QVGA densitas rendah
+dan VGA densitas tinggi.</li>
+ <li>{@code normal}: Layar yang berukuran serupa dengan
+layar HVGA densitas sedang. Ukuran layout minimum untuk
+layar normal adalah sekitar 320x470 satuan dp. Contoh layar seperti itu adalah
+WQVGA densitas rendah, HVGA densitas sedang, WVGA
+ densitas tinggi.</li>
+ <li>{@code large}: Layar yang berukuran serupa dengan
+layar VGA densitas sedang.
+ Ukuran layout minimum untuk layar besar adalah sekitar 480x640 satuan dp.
+ Misalnya layar VGA dan WVGA densitas sedang.</li>
+ <li>{@code xlarge}: Layar yang jauh lebih besar dari layar HVGA
+densitas sedang tradisional. Ukuran layout minimum untuk
+layar ekstra besar adalah sekitar 720x960 satuan dp. Perangkat dengan layar ekstra besar
+seringkali terlalu besar untuk dibawa dalam saku dan kemungkinan besar
+ berupa perangkat bergaya tablet. <em>Ditambahkan dalam API level 9.</em></li>
+ </ul>
+ <p class="note"><strong>Catatan:</strong> Menggunakan qualifier ukuran tidak berarti bahwa
+sumber daya <em>hanya</em> untuk layar ukuran itu saja. Jika Anda tidak menyediakan sumber
+daya alternatif dengan qualifier yang lebih cocok dengan konfigurasi perangkat saat ini, sistem dapat menggunakan sumber daya
+mana saja yang <a href="#BestMatch">paling cocok</a>.</p>
+ <p class="caution"><strong>Perhatian:</strong> Jika semua sumber daya Anda menggunakan
+qualifier yang berukuran <em>lebih besar</em> daripada layar saat ini, sistem <strong>tidak</strong> akan menggunakannya dan aplikasi
+Anda akan crash saat runtime (misalnya, jika semua sumber daya layout ditandai dengan qualifier {@code
+xlarge}, namun perangkat memiliki ukuran layar normal).</p>
+ <p><em>Ditambahkan dalam API level 4.</em></p>
+
+ <p>Lihat <a href="{@docRoot}guide/practices/screens_support.html">Mendukung Beberapa
+Layar</a> untuk informasi selengkapnya.</p>
+ <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#screenLayout},
+ yang menunjukkan apakah layar berukuran kecil, normal, atau
+besar.</p>
+ </td>
+ </tr>
+ <tr id="ScreenAspectQualifier">
+ <td>Aspek layar</td>
+ <td>
+ <code>long</code><br/>
+ <code>notlong</code>
+ </td>
+ <td>
+ <ul class="nolist">
+ <li>{@code long}: Layar panjang, seperti WQVGA, WVGA, FWVGA</li>
+ <li>{@code notlong}: Layar tidak panjang, seperti QVGA, HVGA, dan VGA</li>
+ </ul>
+ <p><em>Ditambahkan dalam API level 4.</em></p>
+ <p>Ini berdasarkan sepenuhnya pada rasio aspek layar (layar "panjang" lebih lebar). Ini
+tidak ada kaitannya dengan orientasi layar.</p>
+ <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#screenLayout},
+ yang menunjukkan apakah layar panjang.</p>
+ </td>
+ </tr>
+ <tr id="OrientationQualifier">
+ <td>Orientasi layar</td>
+ <td>
+ <code>port</code><br/>
+ <code>land</code> <!-- <br/>
+ <code>square</code> -->
+ </td>
+ <td>
+ <ul class="nolist">
+ <li>{@code port}: Perangkat dalam orientasi potret (vertikal)</li>
+ <li>{@code land}: Perangkat dalam orientasi lanskap (horizontal)</li>
+ <!-- Square mode is currently not used. -->
+ </ul>
+ <p>Ini bisa berubah selama masa pakai aplikasi Anda jika pengguna memutar
+layar. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk
+ informasi tentang bagaimana hal ini memengaruhi aplikasi Anda selama runtime.</p>
+ <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#orientation},
+yang menunjukkan orientasi perangkat saat ini.</p>
+ </td>
+ </tr>
+ <tr id="UiModeQualifier">
+ <td>Mode UI</td>
+ <td>
+ <code>car</code><br/>
+ <code>desk</code><br/>
+ <code>television</code><br/>
+ <code>appliance</code>
+ <code>watch</code>
+ </td>
+ <td>
+ <ul class="nolist">
+ <li>{@code car}: Perangkat sedang menampilkan di dudukan perangkat di mobil</li>
+ <li>{@code desk}: Perangkat sedang menampilkan di dudukan perangkat di meja</li>
+ <li>{@code television}: Perangkat sedang menampilkan di televisi, yang menyediakan
+pengalaman "sepuluh kaki" dengan UI-nya pada layar besar yang berada jauh dari pengguna,
+terutama diorientasikan seputar DPAD atau
+interaksi non-pointer lainnya</li>
+ <li>{@code appliance}: Perangkat berlaku sebagai
+alat, tanpa tampilan</li>
+ <li>{@code watch}: Perangkat memiliki tampilan dan dikenakan di pergelangan tangan</li>
+ </ul>
+ <p><em>Ditambahkan dalam API level 8, televisi ditambahkan dalam API 13, jam ditambahkan dalam API 20.</em></p>
+ <p>Untuk informasi tentang cara aplikasi merespons saat perangkat dimasukkan
+ke dalam atau dilepaskan dari dudukannya, bacalah <a href="{@docRoot}training/monitoring-device-state/docking-monitoring.html">Menentukan
+dan Memantau Kondisi dan Tipe Dudukan</a>.</p>
+ <p>Ini bisa berubah selama masa pakai aplikasi jika pengguna menempatkan perangkat di
+dudukannya. Anda dapat mengaktifkan atau menonaktifkan sebagian mode ini menggunakan {@link
+android.app.UiModeManager}. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk
+informasi tentang bagaimana hal ini memengaruhi aplikasi Anda selama runtime.</p>
+ </td>
+ </tr>
+ <tr id="NightQualifier">
+ <td>Mode malam</td>
+ <td>
+ <code>night</code><br/>
+ <code>notnight</code>
+ </td>
+ <td>
+ <ul class="nolist">
+ <li>{@code night}: Waktu malam</li>
+ <li>{@code notnight}: Waktu siang</li>
+ </ul>
+ <p><em>Ditambahkan dalam API level 8.</em></p>
+ <p>Ini bisa berubah selama masa pakai aplikasi jika mode malam dibiarkan dalam
+mode otomatis (default), dalam hal ini perubahan mode berdasarkan pada waktu hari. Anda dapat mengaktifkan
+atau menonaktifkan mode ini menggunakan {@link android.app.UiModeManager}. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk informasi tentang bagaimana hal ini memengaruhi
+aplikasi Anda selama runtime.</p>
+ </td>
+ </tr>
+ <tr id="DensityQualifier">
+ <td>Densitas piksel layar (dpi)</td>
+ <td>
+ <code>ldpi</code><br/>
+ <code>mdpi</code><br/>
+ <code>hdpi</code><br/>
+ <code>xhdpi</code><br/>
+ <code>xxhdpi</code><br/>
+ <code>xxxhdpi</code><br/>
+ <code>nodpi</code><br/>
+ <code>tvdpi</code>
+ </td>
+ <td>
+ <ul class="nolist">
+ <li>{@code ldpi}: Layar densitas rendah; sekitar 120 dpi.</li>
+ <li>{@code mdpi}: Layar densitas sedang (pada HVGA tradisional); sekitar 160 dpi.
+</li>
+ <li>{@code hdpi}: Layar densitas tinggi; sekitar 240 dpi.</li>
+ <li>{@code xhdpi}: Layar densitas ekstra tinggi; sekitar 320 dpi. <em>Ditambahkan dalam API
+Level 8.</em></li>
+ <li>{@code xxhdpi}: Layar densitas ekstra-ekstra-tinggi; sekitar 480 dpi. <em>Ditambahkan dalam API
+Level 16.</em></li>
+ <li>{@code xxxhdpi}: Densitas ekstra-ekstra-ekstra-tinggi (hanya ikon launcher,
+lihat <a href="{@docRoot}guide/practices/screens_support.html#xxxhdpi-note">catatan</a>
+ dalam <em>Mendukung Beberapa Layar</em>); sekitar 640 dpi. <em>Ditambahkan dalam API
+Level 18.</em></li>
+ <li>{@code nodpi}: Ini bisa digunakan untuk sumber daya bitmap yang tidak ingin Anda
+skalakan agar sama dengan densitas perangkat.</li>
+ <li>{@code tvdpi}: Layar antara mdpi dan hdpi; sekitar 213 dpi. Ini
+tidak dianggap sebagai kelompok densitas "utama". Sebagian besar ditujukan untuk televisi dan kebanyakan
+aplikasi tidak memerlukannya —asalkan sumber daya mdpi dan hdpi cukup untuk sebagian besar aplikasi dan
+sistem akan menskalakan sebagaimana mestinya. Qualifier ini diperkenalkan pada API level 13.</li>
+ </ul>
+ <p>Terdapat rasio skala 3:4:6:8:12:16 antara enam densitas utama (dengan mengabaikan densitas
+tvdpi). Jadi bitmap 9x9 di ldpi adalah 12x12 di mdpi, 18x18 di hdpi, 24x24 di xhdpi dan seterusnya.
+</p>
+ <p>Jika Anda memutuskan bahwa sumber daya gambar tidak terlihat cukup baik di televisi
+atau perangkat tertentu lainnya dan ingin mencoba sumber daya tvdpi, faktor skalanya adalah 1,33*mdpi. Misalnya,
+gambar 100px x 100px untuk layar mdpi harus 133px x 133px untuk tvdpi.</p>
+ <p class="note"><strong>Catatan:</strong> Menggunakan qualifier densitas tidak berarti bahwa
+sumber daya <em>hanya</em> untuk layar dengan ukuran itu saja. Jika Anda tidak menyediakan sumber
+daya alternatif dengan qualifier yang lebih cocok dengan konfigurasi perangkat saat ini, sistem dapat menggunakan sumber daya
+mana saja yang <a href="#BestMatch">paling cocok</a>.</p>
+ <p>Lihat <a href="{@docRoot}guide/practices/screens_support.html">Mendukung Beberapa
+Layar</a> untuk informasi selengkapnya tentang cara menangani densitas layar yang berbeda dan cara Android
+menurunkan skala bitmap Anda agar sesuai dengan densitas saat ini.</p>
+ </td>
+ </tr>
+ <tr id="TouchscreenQualifier">
+ <td>Tipe layar sentuh</td>
+ <td>
+ <code>notouch</code><br/>
+ <code>finger</code>
+ </td>
+ <td>
+ <ul class="nolist">
+ <li>{@code notouch}: Perangkat tidak memiliki layar sentuh.</li>
+ <li>{@code finger}: Perangkat memiliki layar sentuh yang dimaksudkan untuk
+digunakan melalui interaksi dengan jari pengguna.</li>
+ </ul>
+ <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#touchscreen}, yang
+menunjukkan tipe layar sentuh pada perangkat.</p>
+ </td>
+ </tr>
+ <tr id="KeyboardAvailQualifier">
+ <td>Ketersediaan keyboard</td>
+ <td>
+ <code>keysexposed</code><br/>
+ <code>keyshidden</code><br/>
+ <code>keyssoft</code>
+ </td>
+ <td>
+ <ul class="nolist">
+ <li>{@code keysexposed}: Perangkat menyediakan keyboard. Jika perangkat mengaktifkan
+keyboard perangkat lunak (kemungkinan), ini dapat digunakan bahkan saat keyboard fisik
+<em>tidak</em> diekspos kepada pengguna, meskipun perangkat tidak memiliki keyboard fisik. Jika keyboard
+perangkat lunak tidak disediakan atau dinonaktifkan, maka ini hanya digunakan bila
+keyboard fisik diekspos.</li>
+ <li>{@code keyshidden}: Perangkat memiliki keyboard fisik yang tersedia
+tetapi tersembunyi <em>dan</em> perangkat <em>tidak</em> mengaktifkan keyboard perangkat lunak.</li>
+ <li>{@code keyssoft}: Perangkat mengaktifkan keyboard perangkat lunak,
+baik itu terlihat maupun tidak.</li>
+ </ul>
+ <p>Jika Anda menyediakan sumber daya <code>keysexposed</code>, namun bukan sumber daya <code>keyssoft</code>
+, sistem akan menggunakan sumber daya <code>keysexposed</code> baik keyboard
+terlihat atau tidak, asalkan sistem telah mengaktifkan keyboard perangkat lunak.</p>
+ <p>Ini bisa berubah selama masa pakai aplikasi jika pengguna membuka keyboard
+fisik. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk informasi tentang bagaimana
+hal ini memengaruhi aplikasi Anda selama runtime.</p>
+ <p>Lihat juga bidang konfigurasi {@link
+android.content.res.Configuration#hardKeyboardHidden} dan {@link
+android.content.res.Configuration#keyboardHidden}, yang menunjukkan visibilitas
+keyboard fisik dan visibilitas segala jenis keyboard (termasuk keyboard perangkat lunak), masing-masing.</p>
+ </td>
+ </tr>
+ <tr id="ImeQualifier">
+ <td>Metode input teks utama</td>
+ <td>
+ <code>nokeys</code><br/>
+ <code>qwerty</code><br/>
+ <code>12key</code>
+ </td>
+ <td>
+ <ul class="nolist">
+ <li>{@code nokeys}: Perangkat tidak memiliki tombol fisik untuk input teks.</li>
+ <li>{@code qwerty}: Perangkat memiliki keyboard fisik qwerty, baik terlihat maupun tidak pada
+pengguna
+.</li>
+ <li>{@code 12key}: Perangkat memiliki keyboard fisik 12 tombol, baik terlihat maupun tidak
+pada pengguna.</li>
+ </ul>
+ <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#keyboard},
+yang menunjukkan metode utama input teks yang tersedia.</p>
+ </td>
+ </tr>
+ <tr id="NavAvailQualifier">
+ <td>Ketersediaan tombol navigasi</td>
+ <td>
+ <code>navexposed</code><br/>
+ <code>navhidden</code>
+ </td>
+ <td>
+ <ul class="nolist">
+ <li>{@code navexposed}: Tombol navigasi tersedia bagi pengguna.</li>
+ <li>{@code navhidden}: Tombol navigasi tidak tersedia (misalnya di balik penutup yang
+ditutup).</li>
+ </ul>
+ <p>Ini bisa berubah selama masa pakai aplikasi jika pengguna menyingkap tombol
+navigasi. Lihat <a href="runtime-changes.html">Menangani Perubahan Runtime</a> untuk
+informasi tentang bagaimana hal ini memengaruhi aplikasi Anda selama runtime.</p>
+ <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#navigationHidden}, yang menunjukkan
+apakah tombol navigasi disembunyikan.</p>
+ </td>
+ </tr>
+ <tr id="NavigationQualifier">
+ <td>Metode navigasi non-sentuh utama</td>
+ <td>
+ <code>nonav</code><br/>
+ <code>dpad</code><br/>
+ <code>trackball</code><br/>
+ <code>wheel</code>
+ </td>
+ <td>
+ <ul class="nolist">
+ <li>{@code nonav}: Perangkat tidak memiliki fasilitas navigasi selain menggunakan
+layar sentuh.</li>
+ <li>{@code dpad}: Perangkat memiliki pad pengarah (directional pad / d-pad) untuk navigasi.</li>
+ <li>{@code trackball}: Perangkat memiliki trackball untuk navigasi.</li>
+ <li>{@code wheel}: Perangkat memiliki roda pengarah (directional wheel) untuk navigasi (tidak umum).</li>
+ </ul>
+ <p>Lihat juga bidang konfigurasi {@link android.content.res.Configuration#navigation},
+yang menunjukkan tipe metode navigasi yang tersedia.</p>
+ </td>
+ </tr>
+<!-- DEPRECATED
+ <tr>
+ <td>Screen dimensions</td>
+ <td>Examples:<br/>
+ <code>320x240</code><br/>
+ <code>640x480</code><br/>
+ etc.
+ </td>
+ <td>
+ <p>The larger dimension must be specified first. <strong>This configuration is deprecated
+and should not be used</strong>. Instead use "screen size," "wider/taller screens," and "screen
+orientation" described above.</p>
+ </td>
+ </tr>
+-->
+ <tr id="VersionQualifier">
+ <td>Versi Platform (level API)</td>
+ <td>Contoh:<br/>
+ <code>v3</code><br/>
+ <code>v4</code><br/>
+ <code>v7</code><br/>
+ dll.</td>
+ <td>
+ <p>Level API yang didukung perangkat. Misalnya, <code>v1</code> untuk API level
+1 (perangkat dengan Android 1.0 atau yang lebih tinggi) dan <code>v4</code> untuk API level 4 (perangkat dengan Android
+1.6 atau yang lebih tinggi). Lihat dokumen <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">Level API Android</a> untuk informasi selengkapnya
+tentang nilai-nilai ini.</p>
+ </td>
+ </tr>
+</table>
+
+
+<p class="note"><strong>Catatan:</strong> Sebagian qualifier konfigurasi telah ditambahkan sejak Android
+1.0, jadi tidak semua versi Android mendukung semua qualifier. Menggunakan qualifier baru secara implisit
+akan menambahkan qualifier versi platform sehingga perangkat yang lebih lama pasti mengabaikannya. Misalnya, menggunakan qualifier
+<code>w600dp</code> secara otomatis akan menyertakan qualifier <code>v13</code>, karena
+qualifier lebar yang tersedia baru di API level 13. Untuk menghindari masalah, selalu sertakan satu set
+sumber daya default (satu set sumber daya <em>tanpa qualifier</em>). Untuk informasi selengkapnya, lihat
+bagian tentang <a href="#Compatibility">Menyediakan Kompatibilitas Perangkat Terbaik dengan
+Sumber Daya</a>.</p>
+
+
+
+<h3 id="QualifierRules">Aturan penamaan qualifier</h3>
+
+<p>Inilah beberapa aturan tentang penggunaan nama qualifier konfigurasi:</p>
+
+<ul>
+ <li>Anda bisa menetapkan beberapa qualifier untuk satu set sumber daya, yang dipisahkan dengan tanda hubung. Misalnya,
+<code>drawable-en-rUS-land</code> berlaku untuk perangkat bahasa Inggris-AS dalam orientasi
+lanskap.</li>
+ <li>Qualifier harus dalam urutan seperti yang tercantum dalam <a href="#table2">tabel 2</a>.
+Misalnya:
+ <ul>
+ <li>Salah: <code>drawable-hdpi-port/</code></li>
+ <li>Benar: <code>drawable-port-hdpi/</code></li>
+ </ul>
+ </li>
+ <li>Direktori sumber daya alternatif tidak bisa digunakan. Misalnya, Anda tidak bisa memiliki
+<code>res/drawable/drawable-en/</code>.</li>
+ <li>Nilai tidak membedakan huruf besar maupun kecil. Compiler sumber daya mengubah nama direktori
+menjadi huruf kecil sebelum pemrosesan untuk menghindari masalah pada sistem file yang membedakan
+huruf kecil dan besar. Setiap penggunaan huruf besar dalam nama hanyalah demi keterbacaan.</li>
+ <li>Hanya didukung satu nilai untuk setiap tipe qualifier. Misalnya, jika Anda ingin menggunakan
+file drawable yang sama untuk Spanyol dan Prancis, Anda <em>tidak bisa</em> memiliki direktori bernama
+<code>drawable-rES-rFR/</code>. Sebagai gantinya, Anda perlu dua direktori sumber daya, seperti
+<code>drawable-rES/</code> dan <code>drawable-rFR/</code>, berisi file yang sesuai.
+Akan tetapi, Anda tidak harus benar-benar menggandakan file yang sama di kedua lokasi. Sebagai gantinya, Anda
+bisa membuat alias ke satu sumber daya. Lihat <a href="#AliasResources">Membuat
+sumber daya alias</a> di bawah ini.</li>
+</ul>
+
+<p>Setelah Anda menyimpan sumber daya alternatif ke dalam direktori yang diberi nama dengan
+qualifier ini, Android secara otomatis menerapkan sumber daya dalam
+aplikasi Anda berdasarkan pada konfigurasi perangkat saat ini. Setiap kali sumber daya diminta, Android akan memeriksa direktori sumber daya
+alternatif berisi file sumber daya yang diminta, lalu <a href="#BestMatch">mencari sumber daya yang
+paling cocok</a>(dibahas di bawah). Jika tidak ada sumber daya alternatif yang cocok
+dengan konfigurasi perangkat tertentu, Android akan menggunakan sumber daya default terkait (set
+sumber daya untuk tipe sumber daya tertentu yang tidak termasuk qualifier
+konfigurasi).</p>
+
+
+
+<h3 id="AliasResources">Membuat sumber daya alias</h3>
+
+<p>Bila memiliki sumber daya yang ingin Anda gunakan untuk lebih dari satu konfigurasi
+perangkat (namun tidak ingin menyediakannya sebagai sumber daya default), Anda tidak perlu menempatkan sumber daya
+yang sama di lebih dari satu direktori sumber daya alternatif. Sebagai gantinya, (dalam beberapa kasus) Anda bisa membuat
+sumber daya alternatif
+yang berfungsi sebagai alias untuk sumber daya yang disimpan dalam direktori sumber daya default.</p>
+
+<p class="note"><strong>Catatan:</strong> Tidak semua sumber daya menawarkan mekanisme yang memungkinkan Anda
+membuat alias ke sumber daya lain. Khususnya, animasi, menu, raw, dan
+sumber daya lain yang tidak ditetapkan dalam direktori {@code xml/} tidak menawarkan fitur ini.</p>
+
+<p>Misalnya, bayangkan Anda memiliki ikon aplikasi {@code icon.png}, dan membutuhkan versi uniknya
+untuk lokal berbeda. Akan tetapi, dua lokal, bahasa Inggris-Kanada dan bahasa Prancis-Kanada, harus menggunakan
+versi yang sama. Anda mungkin berasumsi bahwa Anda perlu menyalin gambar
+yang sama ke dalam direktori sumber daya baik untuk bahasa Inggris-Kanada maupun bahasa Prancis-Kanada, namun
+bukan demikian. Sebagai gantinya, Anda bisa menyimpan gambar yang sama-sama digunakan sebagai {@code icon_ca.png} (nama
+apa saja selain {@code icon.png}) dan memasukkannya
+dalam direktori default {@code res/drawable/}. Lalu buat file {@code icon.xml} dalam {@code
+res/drawable-en-rCA/} dan {@code res/drawable-fr-rCA/} yang mengacu ke sumber daya {@code icon_ca.png}
+yang menggunakan elemen {@code <bitmap>}. Hal ini memungkinkan Anda menyimpan satu versi saja dari
+file PNG dan dua file XML kecil yang menunjuk ke sana. (Contoh file XML ditampilkan di bawah.)</p>
+
+
+<h4>Drawable</h4>
+
+<p>Untuk membuat alias ke drawable yang ada, gunakan elemen {@code <bitmap>}.
+Misalnya:</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/icon_ca" />
+</pre>
+
+<p>Jika Anda menyimpan file ini sebagai {@code icon.xml} (dalam direktori sumber daya alternatif, seperti
+{@code res/drawable-en-rCA/}), maka file akan dikompilasi menjadi sumber daya yang dapat Anda acu
+sebagai {@code R.drawable.icon}, namun sebenarnya merupakan alias untuk sumber daya {@code
+R.drawable.icon_ca} (yang disimpan dalam {@code res/drawable/}).</p>
+
+
+<h4>Layout</h4>
+
+<p>Untuk membuat alias ke layout yang ada, gunakan elemen {@code <include>},
+yang dibungkus dalam {@code <merge>}. Misalnya:</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<merge>
+ <include layout="@layout/main_ltr"/>
+</merge>
+</pre>
+
+<p>Jika Anda menyimpan file ini sebagai {@code main.xml}, file akan dikompilasi menjadi sumber daya yang dapat Anda acu
+sebagai {@code R.layout.main}, namun sebenarnya merupakan alias untuk sumber daya {@code R.layout.main_ltr}
+.</p>
+
+
+<h4>String dan nilai-nilai sederhana lainnya</h4>
+
+<p>Untuk membuat alias ke string yang ada, cukup gunakan ID sumber daya
+dari string yang diinginkan sebagai nilai untuk string baru. Misalnya:</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <string name="hello">Hello</string>
+ <string name="hi">@string/hello</string>
+</resources>
+</pre>
+
+<p>Sumber daya {@code R.string.hi} sekarang merupakan alias untuk {@code R.string.hello}.</p>
+
+<p> <a href="{@docRoot}guide/topics/resources/more-resources.html">Nilai sederhana lainnya</a> sama
+cara kerjanya. Misalnya, sebuah warna:</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <color name="yellow">#f00</color>
+ <color name="highlight">@color/red</color>
+</resources>
+</pre>
+
+
+
+
+<h2 id="Compatibility">Menyediakan Kompatibilitas Perangkat Terbaik dengan Sumber Daya</h2>
+
+<p>Agar aplikasi Anda mendukung beberapa konfigurasi perangkat,
+Anda harus selalu menyediakan sumber daya default untuk setiap tipe sumber daya yang menggunakan aplikasi Anda.</p>
+
+<p>Misalnya, jika aplikasi Anda mendukung beberapa bahasa, sertakan selalu direktori {@code
+values/} (tempat string Anda disimpan) <em>tanpa</em> <a href="#LocaleQualifier">qualifier bahasa dan wilayah</a>. Jika sebaliknya Anda menempatkan semua file
+string dalam direktori yang memiliki qualifier bahasa dan wilayah, maka aplikasi Anda akan crash saat berjalan
+pada perangkat yang telah diatur ke bahasa yang tidak didukung string Anda. Namun asalkan Anda menyediakan sumber daya default
+{@code values/}, aplikasi akan berjalan lancar (meskipun pengguna
+tidak memahami bahasa itu—, ini lebih baik daripada crash).</p>
+
+<p>Demikian pula, jika Anda menyediakan sumber daya layout berbeda berdasarkan orientasi layar, Anda harus
+memilih satu orientasi sebagai default. Misalnya, sebagai ganti menyediakan sumber daya dalam {@code
+layout-land/} untuk lanskap dan {@code layout-port/} untuk potret, biarkan salah satu sebagai default, seperti
+{@code layout/} untuk lanskap dan {@code layout-port/} untuk potret.</p>
+
+<p>Sumber daya default perlu disediakan bukan hanya karena aplikasi mungkin berjalan pada
+konfigurasi yang belum Anda antisipasi, namun juga karena versi baru Android terkadang menambahkan
+qualifier konfigurasi yang tidak didukung oleh versi lama. Jika Anda menggunakan qualifier sumber daya baru,
+namun mempertahankan kompatibilitas kode dengan versi Android yang lebih lama, maka saat versi lama
+Android menjalankan aplikasi, aplikasi itu akan crash jika Anda tidak menyediakan sumber daya default, aplikasi
+tidak bisa menggunakan sumber daya yang dinamai dengan qualifier baru. Misalnya, jika <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
+minSdkVersion}</a> Anda diatur ke 4, dan Anda memenuhi syarat semua sumber daya drawable dengan menggunakan <a href="#NightQualifier">mode malam</a> ({@code night} atau {@code notnight}, yang ditambahkan di API
+Level 8), maka perangkat API level 4 tidak bisa mengakses sumber daya drawable dan akan crash. Dalam hal
+ini, Anda mungkin ingin {@code notnight} menjadi sumber daya default, jadi Anda harus mengecualikan
+qualifier itu agar sumber daya drawable Anda ada dalam {@code drawable/} atau {@code drawable-night/}.</p>
+
+<p>Jadi, agar bisa menyediakan kompatibilitas perangkat terbaik, sediakan selalu sumber daya
+default untuk sumber daya yang diperlukan aplikasi Anda untuk berjalan dengan benar. Selanjutnya buatlah sumber daya
+alternatif untuk konfigurasi perangkat tertentu dengan menggunakan qualifier konfigurasi.</p>
+
+<p>Ada satu eksepsi untuk aturan ini: Jika <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> aplikasi Anda adalah 4 atau
+lebih, Anda <em>tidak</em> memerlukan sumber daya drawable default saat menyediakan sumber daya
+drawable alternatif dengan qualifier <a href="#DensityQualifier">densitas layar</a>. Tanpa sumber daya
+drawable default sekali pun, Android bisa menemukan yang paling cocok di antara densitas layar alternatif dan menskalakan
+bitmap sesuai kebutuhan. Akan tetapi, demi pengalaman terbaik pada semua jenis perangkat, Anda harus
+menyediakan drawable alternatif untuk ketiga tipe densitas.</p>
+
+
+
+<h2 id="BestMatch">Cara Android Menemukan Sumber Daya yang Paling Cocok</h2>
+
+<p>Saat Anda meminta sumber daya yang Anda berikan alternatifnya, Android akan memilih
+sumber daya alternatif yang akan digunakan saat runtime, bergantung pada konfigurasi perangkat saat ini. Untuk
+mendemonstrasikan cara Android memilih sumber daya alternatif, anggaplah direktori drawable berikut
+masing-masing berisi versi berbeda dari gambar yang sama:</p>
+
+<pre class="classic no-pretty-print">
+drawable/
+drawable-en/
+drawable-fr-rCA/
+drawable-en-port/
+drawable-en-notouch-12key/
+drawable-port-ldpi/
+drawable-port-notouch-12key/
+</pre>
+
+<p>Dan anggaplah yang berikut ini merupakan konfigurasi perangkatnya:</p>
+
+<p style="margin-left:1em;">
+Lokal = <code>en-GB</code> <br/>
+Orientasi layar = <code>port</code> <br/>
+Densitas piksel layar = <code>hdpi</code> <br/>
+Tipe layar sentuh = <code>notouch</code> <br/>
+Metode input teks utama = <code>12key</code>
+</p>
+
+<p>Dengan membandingkan konfigurasi perangkat dengan sumber daya alternatif yang tersedia, Android akan memilih
+drawable dari {@code drawable-en-port}.</p>
+
+<p>Sistem akan menentukan keputusannya mengenai sumber daya yang akan digunakan dengan logika
+berikut:</p>
+
+
+<div class="figure" style="width:371px">
+<img src="{@docRoot}images/resources/res-selection-flowchart.png" alt="" height="471" />
+<p class="img-caption"><strong>Gambar 2.</strong> Bagan alur cara Android menemukan
+sumber daya yang paling cocok.</p>
+</div>
+
+
+<ol>
+ <li>Menghapus file sumber daya yang bertentangan dengan konfigurasi perangkat.
+ <p>Direktori <code>drawable-fr-rCA/</code> dihapus karena bertentangan
+dengan lokal <code>en-GB</code>.</p>
+<pre class="classic no-pretty-print">
+drawable/
+drawable-en/
+<strike>drawable-fr-rCA/</strike>
+drawable-en-port/
+drawable-en-notouch-12key/
+drawable-port-ldpi/
+drawable-port-notouch-12key/
+</pre>
+<p class="note"><strong>Eksepsi:</strong> Densitas piksel layar adalah satu qualifier yang
+tidak dihapus karena bertentangan. Meskipun densitas layar perangkat adalah hdpi,
+<code>drawable-port-ldpi/</code> tidak dihapus karena setiap densitas layar
+dianggap cocok untuk saat ini. Informasi selengkapnya tersedia dalam dokumen <a href="{@docRoot}guide/practices/screens_support.html">Mendukung Beberapa
+Layar</a>.</p></li>
+
+ <li>Pilih qualifier berkedudukan tertinggi (berikutnya) dalam daftar (<a href="#table2">tabel 2</a>).
+(Mulai dengan MCC, lalu pindah ke bawah.) </li>
+ <li>Apakah salah satu direktori sumber daya menyertakan qualifier ini? </li>
+ <ul>
+ <li>Jika Tidak, kembali ke langkah 2 dan lihat qualifier berikutnya. (Dalam contoh,
+jawabannya adalah "tidak" hingga qualifier bahasa tercapai.)</li>
+ <li>Jika Ya, lanjutkan ke langkah 4.</li>
+ </ul>
+ </li>
+
+ <li>Hapus direktori sumber daya yang tidak menyertakan qualifier ini. Dalam contoh, sistem
+menghapus semua direktori yang tidak menyertakan qualifier bahasa:</li>
+<pre class="classic no-pretty-print">
+<strike>drawable/</strike>
+drawable-en/
+drawable-en-port/
+drawable-en-notouch-12key/
+<strike>drawable-port-ldpi/</strike>
+<strike>drawable-port-notouch-12key/</strike>
+</pre>
+<p class="note"><strong>Eksepsi:</strong> Jika qualifier yang dimaksud adalah densitas piksel layar,
+Android akan memilih opsi yang paling cocok dengan densitas layar perangkat.
+Secara umum, Android lebih suka menurunkan skala gambar asli yang lebih besar daripada menaikkan skala
+atas gambar asli yang lebih kecil. Lihat <a href="{@docRoot}guide/practices/screens_support.html">Mendukung Beberapa
+Layar</a>.</p>
+ </li>
+
+ <li>Kembali dan ulangi langkah 2, 3, dan 4 hingga tersisa satu direktori. Dalam contoh ini, orientasi
+layar adalah qualifier berikutnya yang memiliki kecocokan.
+Jadi, sumber daya yang tidak menetapkan orientasi layar akan dihapus:
+<pre class="classic no-pretty-print">
+<strike>drawable-en/</strike>
+drawable-en-port/
+<strike>drawable-en-notouch-12key/</strike>
+</pre>
+<p>Direktori yang tersisa adalah {@code drawable-en-port}.</p>
+ </li>
+</ol>
+
+<p>Meskipun prosedur dijalankan untuk setiap sumber daya yang diminta, sistem akan mengoptimalkan beberapa aspek
+lebih lanjut. Satu optimalisasi tersebut adalah bahwa setelah konfigurasi perangkat diketahui, sistem mungkin
+akan menghapus sumber daya alternatif yang sama sekali tidak cocok. Misalnya, jika bahasa konfigurasi
+adalah bahasa Inggris ("en"), maka setiap direktori sumber daya yang memiliki qualifier bahasa akan diatur ke
+selain bahasa Inggris tidak akan pernah disertakan dalam pool sumber daya yang diperiksa (meskipun
+direktori sumber daya <em>tanpa</em> qualifier bahasa masih disertakan).</p>
+
+<p>Saat memilih sumber daya berdasarkan qualifier ukuran layar, sistem akan menggunakan
+sumber daya yang didesain untuk layar yang lebih kecil daripada layar saat ini jika tidak ada sumber daya yang lebih cocok
+(misalnya, layar ukuran besar akan menggunakan sumber daya layar ukuran normal jika diperlukan). Akan tetapi,
+jika satu-satunya sumber daya yang tersedia <em>lebih besar</em> daripada layar saat ini, sistem
+<strong>tidak</strong> akan menggunakannya dan aplikasi Anda akan crash jika tidak ada sumber daya lain yang cocok dengan konfigurasi
+perangkat (misalnya, jika semua sumber daya layout ditandai dengan qualifier {@code xlarge},
+namun perangkat memiliki ukuran layar normal).</p>
+
+<p class="note"><strong>Catatan:</strong> <em>Kedudukan</em> qualifier (dalam <a href="#table2">tabel 2</a>) lebih penting
+daripada jumlah qualifier yang benar-benar pas dengan perangkat. Misalnya, dalam langkah 4 di atas, pilihan
+terakhir pada daftar berisi tiga qualifier yang bebar-benar cocok dengan perangkat (orientasi, tipe
+layar sentuh, dan metode input), sementara <code>drawable-en</code> hanya memiliki satu parameter yang cocok
+(bahasa). Akan tetapi, bahasa memiliki kedudukan lebih tinggi dari pada qualifier lainnya, sehingga
+<code>drawable-port-notouch-12key</code> tidak masuk.</p>
+
+<p>Untuk mengetahui selengkapnya tentang cara menggunakan sumber daya dalam aplikasi, lanjutkan ke <a href="accessing-resources.html">Mengakses Sumber Daya</a>.</p>
diff --git a/docs/html-intl/intl/id/guide/topics/resources/runtime-changes.jd b/docs/html-intl/intl/id/guide/topics/resources/runtime-changes.jd
new file mode 100644
index 0000000..09ad60c
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/topics/resources/runtime-changes.jd
@@ -0,0 +1,281 @@
+page.title=Menangani Perubahan Runtime
+page.tags=aktivitas,daur hidup
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+ <h2>Dalam dokumen ini</h2>
+ <ol>
+ <li><a href="#RetainingAnObject">Mempertahankan Objek Selama Perubahan Konfigurasi</a></li>
+ <li><a href="#HandlingTheChange">Menangani Sendiri Perubahan Konfigurasi</a>
+ </ol>
+
+ <h2>Lihat juga</h2>
+ <ol>
+ <li><a href="providing-resources.html">Menyediakan Sumber Daya</a></li>
+ <li><a href="accessing-resources.html">Mengakses Sumber Daya</a></li>
+ <li><a href="http://android-developers.blogspot.com/2009/02/faster-screen-orientation-change.html">Perubahan
+ Orientasi Layar yang Lebih Cepat</a></li>
+ </ol>
+</div>
+</div>
+
+<p>Sebagian konfigurasi perangkat bisa berubah selama runtime
+(seperti orientasi layar, ketersediaan keyboard, dan bahasa). Saat perubahan demikian terjadi,
+Android akan me-restart
+{@link android.app.Activity} yang berjalan ({@link android.app.Activity#onDestroy()} dipanggil, diikuti oleh {@link
+android.app.Activity#onCreate(Bundle) onCreate()}). Perilaku restart didesain untuk membantu
+aplikasi Anda beradaptasi dengan konfigurasi baru melalui pemuatan kembali aplikasi Anda secara otomatis dengan
+sumber daya alternatif sumber yang sesuai dengan konfigurasi perangkat baru.</p>
+
+<p>Untuk menangani restart dengan benar, aktivitas Anda harus mengembalikan
+statusnya seperti semula melalui <a href="{@docRoot}guide/components/activities.html#Lifecycle">Daur hidup
+aktivitas</a> normal, dalam hal ini Android akan memanggil
+{@link android.app.Activity#onSaveInstanceState(Bundle) onSaveInstanceState()} sebelum menghentikan
+aktivitas Anda sehingga Anda dapat menyimpan data mengenai status aplikasi. Selanjutnya Anda bisa mengembalikan status
+selama {@link android.app.Activity#onCreate(Bundle) onCreate()} atau {@link
+android.app.Activity#onRestoreInstanceState(Bundle) onRestoreInstanceState()}.</p>
+
+<p>Untuk menguji bahwa aplikasi me-restart sendiri dengan status tak berubah, Anda harus
+memanggil perubahan konfigurasi (seperti mengubah orientasi layar) saat melakukan berbagai
+tugas dalam aplikasi. Aplikasi Anda harus dapat me-restart setiap saat tanpa kehilangan
+data pengguna atau status untuk menangani kejadian seperti perubahan konfigurasi atau bila pengguna menerima panggilan telepon
+masuk lalu kembali ke aplikasi setelah proses
+aplikasi Anda dimusnahkan. Untuk mengetahui cara mengembalikan status aktivitas, bacalah tentang <a href="{@docRoot}guide/components/activities.html#Lifecycle">Daur hidup aktivitas</a>.</p>
+
+<p>Akan tetapi, Anda mungkin menemui situasi ketika me-restart aplikasi dan
+mengembalikan data dalam jumlah besar malah menjadi mahal dan menghasilkan pengalaman pengguna yang buruk. Dalam situasi
+demikian, Anda memiliki dua opsi lain:</p>
+
+<ol type="a">
+ <li><a href="#RetainingAnObject">Mempertahankan objek selama perubahan konfigurasi</a>
+ <p>Izinkan aktivitas Anda me-restart saat konfigurasi berubah, namun bawa objek
+berstatus (stateful) ke instance baru aktivitas Anda.</p>
+
+ </li>
+ <li><a href="#HandlingTheChange">Menangani sendiri perubahan konfigurasi</a>
+ <p>Cegah sistem me-restart aktivitas selama perubahan konfigurasi
+tertentu, namun terima callback saat konfigurasi benar-benar berubah, agar Anda bisa memperbarui
+aktivitas secara manual bila diperlukan.</p>
+ </li>
+</ol>
+
+
+<h2 id="RetainingAnObject">Mempertahankan Objek Selama Perubahan Konfigurasi</h2>
+
+<p>Jika me-restart aktivitas mengharuskan pemulihan seperangkat data dalam jumlah besar, menghubungkan kembali koneksi
+jaringan, atau melakukan operasi intensif lainnya, maka restart penuh karena perubahan konfigurasi mungkin
+menjadi pengalaman pengguna yang lambat. Selain itu, Anda mungkin tidak bisa sepenuhnya mengembalikan status
+aktivitas dengan {@link android.os.Bundle} yang disimpan sistem untuk Anda dengan callback {@link
+android.app.Activity#onSaveInstanceState(Bundle) onSaveInstanceState()}—itu tidaklah
+didesain untuk membawa objek besar (seperti bitmap) dan data di dalamnya harus diserialkan kemudian
+dinon-serialkan, yang bisa menghabiskan banyak memori dan membuat perubahan konfigurasi menjadi lambat. Dalam situasi
+demikian, Anda bisa meringankan beban memulai kembali aktivitas Anda dengan mempertahankan {@link
+android.app.Fragment} saat aktivitas Anda di-restart karena perubahan konfigurasi. Fragmen ini
+bisa berisi acuan ke objek stateful yang ingin Anda pertahankan.</p>
+
+<p>Bila sistem Android menghentikan aktivitas Anda karena perubahan konfigurasi, fragmen
+aktivitas yang telah ditandai untuk dipertahankan tidak akan dimusnahkan. Anda dapat menambahkan fragmen tersebut ke
+aktivitas untuk mempertahankan objek stateful.</p>
+
+<p>Untuk mempertahankan objek stateful dalam fragmen selama perubahan konfigurasi runtime:</p>
+
+<ol>
+ <li>Perluas kelas {@link android.app.Fragment} dan deklarasikan referensi ke objek stateful
+Anda.</li>
+ <li>Panggil {@link android.app.Fragment#setRetainInstance(boolean)} saat fragmen dibuat.
+ </li>
+ <li>Tambahkan fragmen ke aktivitas.</li>
+ <li>Gunakan {@link android.app.FragmentManager} untuk mengambil fragmen saat aktivitas
+di-restart.</li>
+</ol>
+
+<p>Misalnya, definisikan fragmen sebagai berikut:</p>
+
+<pre>
+public class RetainedFragment extends Fragment {
+
+ // data object we want to retain
+ private MyDataObject data;
+
+ // this method is only called once for this fragment
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ // retain this fragment
+ setRetainInstance(true);
+ }
+
+ public void setData(MyDataObject data) {
+ this.data = data;
+ }
+
+ public MyDataObject getData() {
+ return data;
+ }
+}
+</pre>
+
+<p class="caution"><strong>Perhatian:</strong> Meskipun bisa menyimpan objek apa saja, Anda
+sama sekali tidak boleh meneruskan objek yang terkait dengan {@link android.app.Activity}, seperti {@link
+android.graphics.drawable.Drawable}, {@link android.widget.Adapter}, {@link android.view.View}
+atau objek lainnya mana pun yang terkait dengan {@link android.content.Context}. Jika Anda melakukannya, hal tersebut akan
+membocorkan semua tampilan dan sumber daya instance aktivitas semula. (Sumber daya yang bocor
+berarti bahwa aplikasi Anda tetap menyimpannya dan tidak bisa dijadikan kumpulan sampah, sehingga bisa banyak
+memori yang hilang.)</p>
+
+<p>Selanjutnya gunakan {@link android.app.FragmentManager} untuk menambahkan fragmen ke aktivitas.
+Anda bisa memperoleh objek data dari fragmen saat aktivitas memulai kembali selama perubahan
+konfigurasi runtime. Misalnya, definisikan aktivitas Anda sebagai berikut:</p>
+
+<pre>
+public class MyActivity extends Activity {
+
+ private RetainedFragment dataFragment;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.main);
+
+ // find the retained fragment on activity restarts
+ FragmentManager fm = getFragmentManager();
+ dataFragment = (DataFragment) fm.findFragmentByTag(“data”);
+
+ // create the fragment and data the first time
+ if (dataFragment == null) {
+ // add the fragment
+ dataFragment = new DataFragment();
+ fm.beginTransaction().add(dataFragment, “data”).commit();
+ // load the data from the web
+ dataFragment.setData(loadMyData());
+ }
+
+ // the data is available in dataFragment.getData()
+ ...
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ // store the data in the fragment
+ dataFragment.setData(collectMyLoadedData());
+ }
+}
+</pre>
+
+<p>Dalam contoh ini, {@link android.app.Activity#onCreate(Bundle) onCreate()} menambahkan fragmen
+atau mengembalikan referensinya. {@link android.app.Activity#onCreate(Bundle) onCreate()} juga
+menyimpan objek stateful dalam instance fragmen.
+{@link android.app.Activity#onDestroy() onDestroy()} akan memperbarui objek stateful dalam
+instance fragmen yang dipertahankan.</p>
+
+
+
+
+
+<h2 id="HandlingTheChange">Menangani Sendiri Perubahan Konfigurasi</h2>
+
+<p>Jika aplikasi Anda tidak memerlukan pembaruan sumber daya selama perubahan konfigurasi
+tertentu <em>dan</em> Anda memiliki keterbatasan kinerja yang mengharuskan Anda untuk
+menghindari restart aktivitas, maka Anda bisa mendeklarasikan agar aktivitas Anda menangani sendiri perubahan
+konfigurasinya, sehingga mencegah sistem me-restart aktivitas.</p>
+
+<p class="note"><strong>Catatan:</strong> Menangani sendiri perubahan konfigurasi bisa jauh lebih
+mempersulit penggunaan sumber daya alternatif, karena sistem tidak menerapkannya secara otomatis
+untuk Anda. Teknik ini harus dianggap sebagai usaha terakhir bila Anda harus menghindari restart
+karena perubahan konfigurasi dan tidak disarankan untuk sebagian besar aplikasi.</p>
+
+<p>Untuk mendeklarasikan agar aktivitas Anda menangani perubahan konfigurasi, edit elemen <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code <activity>}</a> yang sesuai
+dalam file manifes Anda agar menyertakan atribut <a href="{@docRoot}guide/topics/manifest/activity-element.html#config">{@code
+android:configChanges}</a> dengan nilai yang mewakili konfigurasi yang ingin
+ditangani. Nilai yang memungkinkan tercantum dalam dokumentasi untuk atribut <a href="{@docRoot}guide/topics/manifest/activity-element.html#config">{@code
+android:configChanges}</a> (nilai paling sering digunakan adalah {@code "orientation"} untuk
+mencegah restart saat orientasi layar berubah dan {@code "keyboardHidden"} untuk mencegah
+restart saat ketersediaan keyboard berubah). Anda dapat mendeklarasikan beberapa nilai konfigurasi
+dalam atribut dengan memisahkannya menggunakan karakter pipa {@code |}.</p>
+
+<p>Misalnya, kode manifes berikut menyatakan aktivitas yang menangani
+perubahan orientasi layar maupun perubahan ketersediaan keyboard:</p>
+
+<pre>
+<activity android:name=".MyActivity"
+ android:configChanges="orientation|keyboardHidden"
+ android:label="@string/app_name">
+</pre>
+
+<p>Sekarang, bila salah satu konfigurasi ini berubah, {@code MyActivity} tidak akan me-restart.
+Sebagai gantinya, {@code MyActivity} akan menerima panggilan ke {@link
+android.app.Activity#onConfigurationChanged(Configuration) onConfigurationChanged()}. Metode ini
+meneruskan objek {@link android.content.res.Configuration} yang menetapkan
+konfigurasi perangkat baru. Dengan membaca bidang-bidang dalam {@link android.content.res.Configuration},
+Anda dapat menentukan konfigurasi baru dan membuat perubahan yang sesuai dengan memperbarui
+sumber daya yang digunakan dalam antarmuka. Pada saat
+metode ini dipanggil, objek {@link android.content.res.Resources} aktivitas Anda akan diperbarui untuk
+mengembalikan sumber daya berdasarkan konfigurasi baru, jadi Anda bisa dengan mudah
+me-reset elemen UI tanpa membuat sistem me-restart aktivitas Anda.</p>
+
+<p class="caution"><strong>Perhatian:</strong> Mulai Android 3.2 (API level 13), <strong>
+"ukuran layar" juga berubah</strong> bila perangkat beralih orientasi antara potret
+dan lanskap. Jadi jika Anda tidak ingin runtime di-restart karena perubahan orientasi saat mengembangkan
+API level 13 atau yang lebih tinggi (sebagaimana dideklarasikan oleh atribut <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> dan <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a>
+), Anda harus menyertakan nilai {@code "screenSize"} selain nilai {@code
+"orientation"}. Yaitu Anda harus mendeklarasikan {@code
+android:configChanges="orientation|screenSize"}. Akan tetapi, jika aplikasi Anda menargetkan API level
+12 atau yang lebih rendah, maka aktivitas Anda akan selalu menangani sendiri perubahan konfigurasi ini (perubahan
+konfigurasi ini tidak me-restart aktivitas Anda, bahkan saat berjalan pada perangkat Android 3.2 atau yang lebih tinggi).</p>
+
+<p>Misalnya, implementasi {@link
+android.app.Activity#onConfigurationChanged(Configuration) onConfigurationChanged()} berikut akan
+memeriksa orientasi perangkat saat ini:</p>
+
+<pre>
+@Override
+public void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+
+ // Checks the orientation of the screen
+ if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
+ Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
+ } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
+ Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
+ }
+}
+</pre>
+
+<p>Objek {@link android.content.res.Configuration} mewakili semua konfigurasi
+saat ini, tidak hanya konfigurasi yang telah berubah. Seringkali Anda tidak perlu memperhatikan dengan persis bagaimana
+konfigurasi berubah dan cukup menetapkan kembali semua sumber daya yang memberikan alternatif untuk
+konfigurasi sedang ditangani. Misalnya, karena objek {@link
+android.content.res.Resources} sekarang diperbarui, Anda dapat me-reset
+setiap {@link android.widget.ImageView} dengan {@link android.widget.ImageView#setImageResource(int)
+setImageResource()}
+dan sumber daya yang sesuai untuk konfigurasi baru yang digunakan (seperti dijelaskan dalam <a href="providing-resources.html#AlternateResources">Menyediakan Sumber Daya</a>).</p>
+
+<p>Perhatikan bahwa nilai-nilai dari bidang {@link
+android.content.res.Configuration} adalah integer yang sesuai dengan konstanta spesifik
+dari kelas {@link android.content.res.Configuration}. Untuk dokumentasi tentang konstanta
+yang harus digunakan di setiap bidang, lihat bidang yang sesuai dalam referensi {@link
+android.content.res.Configuration}.</p>
+
+<p class="note"><strong>Ingatlah:</strong> Saat mendeklarasikan aktivitas untuk menangani perubahan
+konfigurasi, Anda bertanggung jawab untuk me-reset setiap elemen yang alternatifnya Anda berikan. Jika Anda
+mendeklarasikan aktivitas untuk menangani perubahan orientasi dan memiliki gambar yang harus berubah
+antara lanskap dan potret, Anda harus menetapkan kembali setiap sumber daya elemen selama {@link
+android.app.Activity#onConfigurationChanged(Configuration) onConfigurationChanged()}.</p>
+
+<p>Jika Anda tidak perlu memperbarui aplikasi berdasarkan perubahan
+konfigurasi ini, sebagai gantinya Anda bisa saja <em>tidak</em> mengimplementasikan {@link
+android.app.Activity#onConfigurationChanged(Configuration) onConfigurationChanged()}. Dalam
+hal ini, semua sumber daya yang digunakan sebelum perubahan konfigurasi akan tetap digunakan
+dan Anda hanya menghindari restart aktivitas. Akan tetapi, aplikasi Anda harus selalu
+bisa dimatikan dan di-restart dengan status sebelumnya tetap utuh, sehingga Anda jangan menganggap teknik
+ini sebagai jalan keluar untuk mempertahankan status selama daur hidup aktivitas normal. Tidak hanya
+karena ada perubahan konfigurasi lainnya yang tidak bisa Anda cegah untuk me-restart aplikasi, namun
+juga karena Anda harus menangani kejadian seperti saat pengguna meninggalkan aplikasi dan
+dimusnahkan sebelum pengguna kembali ke aplikasi.</p>
+
+<p>Untuk informasi selengkapnya tentang perubahan konfigurasi yang bisa Anda tangani dalam aktivitas, lihat dokumentasi <a href="{@docRoot}guide/topics/manifest/activity-element.html#config">{@code
+android:configChanges}</a> dan kelas {@link android.content.res.Configuration}
+.</p>
diff --git a/docs/html-intl/intl/id/guide/topics/ui/controls.jd b/docs/html-intl/intl/id/guide/topics/ui/controls.jd
new file mode 100644
index 0000000..3ebf48b
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/topics/ui/controls.jd
@@ -0,0 +1,90 @@
+page.title=Kontrol Input
+parent.title=Antarmuka Pengguna
+parent.link=index.html
+@jd:body
+
+<div class="figure" style="margin:0">
+ <img src="{@docRoot}images/ui/ui-controls.png" alt="" style="margin:0" />
+</div>
+
+<p>Kontrol input adalah komponen interaktif dalam antarmuka pengguna aplikasi Anda. Android menyediakan
+aneka ragam kontrol yang bisa Anda gunakan dalam UI, seperti tombol, bidang teks, bilah pencarian,
+kotak cek, tombol zoom, tombol toggle, dan masih banyak lagi.</p>
+
+<p>Menambahkan sebuah kontrol input ke UI adalah semudah menambahkan satu elemen XML ke <a href="{@docRoot}guide/topics/ui/declaring-layout.html">layout XML</a>. Misalnya, inilah sebuah
+layout dengan satu bidang teks dan satu tombol:</p>
+
+<pre style="clear:right">
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:orientation="horizontal">
+ <EditText android:id="@+id/edit_message"
+ android:layout_weight="1"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:hint="@string/edit_message" />
+ <Button android:id="@+id/button_send"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/button_send"
+ android:onClick="sendMessage" />
+</LinearLayout>
+</pre>
+
+<p>Tiap kontrol input mendukung satu set kejadian input sehingga Anda bisa menangani berbagai kejadian seperti saat
+pengguna memasukkan teks atau menyentuh tombol.</p>
+
+
+<h2 id="CommonControls">Kontrol Umum</h2>
+<p>Berikut adalah daftar beberapa kontrol umum yang bisa Anda gunakan dalam aplikasi. Ikuti tautan ini untuk mengetahui
+selengkapnya tentang penggunaannya masing-masing.</p>
+
+<p class="note"><strong>Catatan:</strong> Android menyediakan beberapa kontrol lain yang tidak tercantum
+di sini. Telusuri paket {@link android.widget} untuk mengetahui selengkapnya. Jika aplikasi Anda memerlukan
+semacam kontrol input tertentu, Anda bisa membangun <a href="{@docRoot}guide/topics/ui/custom-components.html">komponen custom</a> sendiri.</p>
+
+<table>
+ <tr>
+ <th scope="col">Tipe Kontrol</th>
+ <th scope="col">Keterangan</th>
+ <th scope="col">Kelas Terkait</th>
+ </tr>
+ <tr>
+ <td><a href="controls/button.html">Tombol</a></td>
+ <td>Tombol tekan yang bisa ditekan, atau diklik, oleh pengguna untuk melakukan suatu tindakan.</td>
+ <td>{@link android.widget.Button Button} </td>
+ </tr>
+ <tr>
+ <td><a href="controls/text.html">Bidang teks</a></td>
+ <td>Bidang teks yang bisa diedit. Anda bisa menggunakan widget <code>AutoCompleteTextView</code> untuk membuat widget entri teks yang menyediakan saran pelengkapan otomatis</td>
+ <td>{@link android.widget.EditText EditText}, {@link android.widget.AutoCompleteTextView}</td>
+ </tr>
+ <tr>
+ <td><a href="controls/checkbox.html">Kotak cek</a></td>
+ <td>Switch aktif/nonaktif yang bisa diubah oleh pengguna. Anda harus menggunakan kotak cek saat menampilkan sekumpulan opsi yang bisa dipilih pengguna dan bila keduanya mungkin terjadi bersamaan.</td>
+ <td>{@link android.widget.CheckBox CheckBox} </td>
+ </tr>
+ <tr>
+ <td><a href="controls/radiobutton.html">Tombol radio</a></td>
+ <td>Mirip dengan kotak cek, hanya saja cuma satu opsi yang bisa dipilih dalam kumpulan tersebut.</td>
+ <td>{@link android.widget.RadioGroup RadioGroup}
+ <br>{@link android.widget.RadioButton RadioButton} </td>
+ </tr>
+ <tr>
+ <td><a href="controls/togglebutton.html" style="white-space:nowrap">Tombol toggle</a></td>
+ <td>Tombol aktif/nonaktif dengan indikator cahaya.</td>
+ <td>{@link android.widget.ToggleButton ToggleButton} </td>
+ </tr>
+ <tr>
+ <td><a href="controls/spinner.html">Spinner</a></td>
+ <td>Daftar tarik-turun yang memungkinkan pengguna memilih salah satu dari serangkaian nilai.</td>
+ <td>{@link android.widget.Spinner Spinner} </td>
+ </tr>
+ <tr>
+ <td><a href="controls/pickers.html">Picker</a></td>
+ <td>Dialog bagi pengguna untuk memilih satu nilai dari satu kumpulan dengan menggunakan tombol naik/turun atau dengan gerakan mengusap. Gunakan widget <code>DatePicker</code>code> untuk memasukkan nilai tanggal (bulan, hari, tahun) atau widget <code>TimePicker</code> untuk memasukkan nilai waktu (jam, menit, AM/PM), yang akan diformat secara otomatis untuk lokasi pengguna tersebut.</td>
+ <td>{@link android.widget.DatePicker}, {@link android.widget.TimePicker}</td>
+ </tr>
+</table>
diff --git a/docs/html-intl/intl/id/guide/topics/ui/declaring-layout.jd b/docs/html-intl/intl/id/guide/topics/ui/declaring-layout.jd
new file mode 100644
index 0000000..1c8a0d6
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/topics/ui/declaring-layout.jd
@@ -0,0 +1,492 @@
+page.title=Layout
+page.tags=view,viewgroup
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+ <h2>Dalam dokumen ini</h2>
+<ol>
+ <li><a href="#write">Tulis XML</a></li>
+ <li><a href="#load">Muat Sumber Daya XML</a></li>
+ <li><a href="#attributes">Atribut</a>
+ <ol>
+ <li><a href="#id">ID</a></li>
+ <li><a href="#layout-params">Parameter Layout</a></li>
+ </ol>
+ </li>
+ <li><a href="#Position">Posisi Layout</a></li>
+ <li><a href="#SizePaddingMargins">Ukuran, Pengisi, dan Margin</a></li>
+ <li><a href="#CommonLayouts">Layout Umum</a></li>
+ <li><a href="#AdapterViews">Membangun Layout dengan Adaptor</a>
+ <ol>
+ <li><a href="#FillingTheLayout">Mengisi tampilan adaptor dengan data</a></li>
+ <li><a href="#HandlingUserSelections">Menangani kejadian klik</a></li>
+ </ol>
+ </li>
+</ol>
+
+ <h2>Kelas-kelas utama</h2>
+ <ol>
+ <li>{@link android.view.View}</li>
+ <li>{@link android.view.ViewGroup}</li>
+ <li>{@link android.view.ViewGroup.LayoutParams}</li>
+ </ol>
+
+ <h2>Lihat juga</h2>
+ <ol>
+ <li><a href="{@docRoot}training/basics/firstapp/building-ui.html">Membangun Antarmuka Pengguna
+Sederhana</a></li> </div>
+</div>
+
+<p>Layout mendefinisikan struktur visual untuk antarmuka pengguna, seperti UI sebuah <a href="{@docRoot}guide/components/activities.html">aktivitas</a> atau <a href="{@docRoot}guide/topics/appwidgets/index.html">widget aplikasi</a>.
+Anda dapat mendeklarasikan layout dengan dua cara:</p>
+<ul>
+<li><strong>Deklarasikan elemen UI dalam XML</strong>. Android menyediakan sebuah kosakata XML
+sederhana yang sesuai dengan kelas dan subkelas View, seperti halnya untuk widget dan layout.</li>
+<li><strong>Buat instance elemen layout saat runtime</strong>. Aplikasi Anda
+bisa membuat objek View dan ViewGroup (dan memanipulasi propertinya) lewat program. </li>
+</ul>
+
+<p>Kerangka kerja Android memberi Anda fleksibilitas untuk menggunakan salah satu atau kedua metode ini guna mendeklarasikan dan mengelola UI aplikasi Anda. Misalnya, Anda bisa mendeklarasikan layout default aplikasi Anda dalam XML, termasuk elemen-elemen layar yang akan muncul di dalamnya dan di propertinya. Anda nanti bisa menambahkan kode dalam aplikasi yang akan memodifikasi status objek layar, termasuk yang dideklarasikan dalam XML, saat runtime. </p>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+ <ul>
+ <li><a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT
+ Plugin for Eclipse</a> menawarkan preview layout XML —
+ Anda dengan file XML yang dibuka, pilih tab <strong>Layout</strong>.</li>
+ <li>Anda juga harus mencoba alat
+ <a href="{@docRoot}tools/debugging/debugging-ui.html#hierarchyViewer">Hierarchy Viewer</a>,
+ untuk merunut layout — alat ini akan menampilkan nilai-nilai properti layout,
+ menggambar bentuk kerangka dengan indikator pengisi/margin, dan tampilan yang dirender penuh selagi
+ Anda merunut pada emulator atau perangkat.</li>
+ <li>Alat <a href="{@docRoot}tools/debugging/debugging-ui.html#layoutopt">layoutopt</a> memungkinkan
+ Anda menganalisis layout dan hierarki dengan untuk mengetahui ketidakefisienan atau masalah lainnya.</li>
+</div>
+</div>
+
+<p>Keuntungan mendeklarasikan UI dalam XML adalah karena hal ini memungkinkan Anda memisahkan penampilan aplikasi dari kode yang mengontrol perilakunya dengan lebih baik. Keterangan UI Anda bersifat eksternal bagi kode aplikasi Anda, yang berarti bahwa Anda bisa memodifikasi atau menyesuaikannya tanpa harus memodifikasi dan mengompilasi ulang kode sumber. Misalnya, Anda bisa membuat layout XML untuk berbagai orientasi layar, berbagai ukuran layar perangkat, dan berbagai bahasa. Selain itu, mendeklarasikan layout dalam XML akan mempermudah Anda memvisualisasikan struktur UI, sehingga lebih mudah merunut masalahnya. Karena itu, dokumen ini berfokus pada upaya mengajari Anda cara mendeklarasikan layout dalam XML. Jika Anda
+tertarik dalam membuat instance objek View saat runtime, lihat referensi kelas {@link android.view.ViewGroup} dan
+{@link android.view.View}.</p>
+
+<p>Secara umum, kosakata XML untuk mendeklarasikan elemen UI mengikuti dengan sangat mirip struktur serta penamaan kelas dan metode, dengan nama elemen dipadankan dengan nama kelas dan nama atribut dipadankan dengan metode. Sebenarnya, pemadanan ini kerap kali begitu jelas sehingga Anda bisa menebak atribut XML yang berpadanan dengan sebuah metode kelas, atau menebak kelas yang berpadanan dengan sebuah elemen XML. Akan tetapi, perhatikan bahwa tidak semua kosakata identik. Dalam beberapa kasus, ada sedikit perbedaan penamaan. Misalnya
+, elemen EditText memiliki atribut <code>text</code> yang berpadanan dengan
+<code>EditText.setText()</code>. </p>
+
+<p class="note"><strong>Tip:</strong> Ketahui selengkapnya berbagai tipe layout dalam <a href="{@docRoot}guide/topics/ui/layout-objects.html">Objek
+Layout Umum</a>. Ada juga sekumpulan tutorial tentang cara membangun berbagai layout dalam panduan tutorial
+<a href="{@docRoot}resources/tutorials/views/index.html">Hello Views</a>.</p>
+
+<h2 id="write">Tulis XML</h2>
+
+<p>Dengan menggunakan kosakata XML Android, Anda bisa mendesain secara cepat layout UI dan elemen layar yang dimuatnya, sama dengan cara membuat halaman web dalam HTML — dengan serangkaian elemen tersarang. </p>
+
+<p>Tiap file layout harus berisi persis satu elemen akar, yang harus berupa sebuah objek View atau ViewGroup. Setelah mendefinisikan elemen akar, Anda bisa menambahkan objek atau widget layout tambahan sebagai elemen anak untuk membangun hierarki View yang mendefinisikan layout Anda secara bertahap. Misalnya, inilah layout XML yang menggunakan {@link android.widget.LinearLayout}
+vertikal untuk menyimpan {@link android.widget.TextView} dan {@link android.widget.Button}:</p>
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical" >
+ <TextView android:id="@+id/text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Hello, I am a TextView" />
+ <Button android:id="@+id/button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Hello, I am a Button" />
+</LinearLayout>
+</pre>
+
+<p>Setelah Anda mendeklarasikan layout dalam XML, simpanlah file dengan ekstensi <code>.xml</code>,
+dalam direktori <code>res/layout/</code> proyek Android, sehingga nanti bisa dikompilasi dengan benar. </p>
+
+<p>Informasi selengkapnya tentang sintaks untuk file XML layout tersedia dalam dokumen <a href="{@docRoot}guide/topics/resources/layout-resource.html">Sumber Daya Layout</a>.</p>
+
+<h2 id="load">Muat Sumber Daya XML</h2>
+
+<p>Saat mengompilasi aplikasi, masing-masing file layout XML akan dikompilasi dalam sebuah sumber daya
+{@link android.view.View}. Anda harus memuat sumber daya layout dari kode aplikasi, dalam implementasi
+callback {@link android.app.Activity#onCreate(android.os.Bundle) Activity.onCreate()}.
+Lakukan dengan memanggil <code>{@link android.app.Activity#setContentView(int) setContentView()}</code>,
+dengan meneruskan acuan ke sumber daya layout berupa:
+<code>R.layout.<em>layout_file_name</em></code>.
+Misalnya, jika XML layout Anda disimpan sebagai <code>main_layout.xml</code>, Anda akan memuatnya
+untuk Activity seperti ini:</p>
+<pre>
+public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.main_layout);
+}
+</pre>
+
+<p>Metode callback <code>onCreate()</code> dalam Activity dipanggil oleh kerangka kerja Android saat
+Activity Anda dijalankan (lihat diskusi tentang daur hidup, dalam dokumen
+<a href="{@docRoot}guide/components/activities.html#Lifecycle">Aktivitas</a>
+).</p>
+
+
+<h2 id="attributes">Atribut</h2>
+
+<p>Setiap objek View dan ViewGroup mendukung variasi atribut XML-nya sendiri.
+Sebagian atribut bersifat spesifik untuk objek View (misalnya, TextView mendukung atribut <code>textSize</code>
+), namun atribut ini juga diwarisi oleh sembarang objek View yang dapat memperluas kelas ini.
+Sebagian atribut bersifat umum untuk semua objek View, karena diwarisi dari kelas View akar (seperti
+atribut <code>id</code>). Dan, atribut lain dianggap sebagai "parameter layout" yaitu
+atribut yang menjelaskan orientasi layout tertentu dari objek View, seperti yang didefinisikan oleh objek ViewGroup induk
+dari objek itu.</p>
+
+<h3 id="id">ID</h3>
+
+<p>Objek View apa saja dapat memiliki ID integer yang dikaitkan dengannya, untuk mengidentifikasi secara unik View dalam pohon.
+Bila aplikasi dikompilasi, ID ini akan diacu sebagai integer, namun ID biasanya
+ditetapkan dalam file XML layout sebagai string, dalam atribut <code>id</code>.
+Ini atribut XML yang umum untuk semua objek View
+(yang didefinisikan oleh kelas {@link android.view.View}) dan Anda akan sering sekali menggunakannya.
+Sintaks untuk ID dalam tag XML adalah:</p>
+<pre>android:id="@+id/my_button"</pre>
+
+<p>Simbol "at" (@) pada awal string menunjukkan parser XML harus mengurai dan memperluas
+ID string selebihnya dan mengenalinya sebagai ID sumber daya. Simbol tanda tambah (+) berarti ini nama sumber daya baru yang harus
+dibuat dan ditambahkan ke sumber daya kita (dalam file <code>R.java</code>). Ada sejumlah sumber daya ID lain yang
+ditawarkan oleh kerangka kerja Android. Saat mengacu sebuah ID sumber daya Android, Anda tidak memerlukan simbol tanda tambah,
+namun harus menambahkan namespace paket <code>android</code>, sehingga:</p>
+<pre>android:id="@android:id/empty"</pre>
+<p>Dengan namespace paket <code>android</code> yang tersedia, kita sekarang mengacu ID dari kelas sumber daya <code>android.R</code>
+, daripada kelas sumber daya lokal.</p>
+
+<p>Untuk membuat tampilan dan mengacunya dari aplikasi, pola yang umum adalah:</p>
+<ol>
+ <li>Mendefinisikan tampilan/widget dalam file layout dan memberinya ID unik:
+<pre>
+<Button android:id="@+id/my_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/my_button_text"/>
+</pre>
+ </li>
+ <li>Kemudian buat instance objek tampilan dan tangkap instance itu dari layout
+(biasanya dalam metode <code>{@link android.app.Activity#onCreate(Bundle) onCreate()}</code>):
+<pre>
+Button myButton = (Button) findViewById(R.id.my_button);
+</pre>
+ </li>
+</ol>
+<p>Mendefinisikan ID untuk objek tampilan adalah penting saat membuat {@link android.widget.RelativeLayout}.
+Dalam layout relatif, tampilan saudara bisa mendefinisikan layout secara relatif terhadap tampilan saudara lainnya,
+yang diacu melalui ID unik.</p>
+<p>ID tidak perlu unik di seluruh pohon, namun harus
+unik di bagian pohon yang Anda cari (yang mungkin sering kali seluruh pohon, jadi lebih baik
+benar-benar unik bila memungkinkan).</p>
+
+
+<h3 id="layout-params">Parameter Layout</h3>
+
+<p>Atribut layout XML bernama <code>layout_<em>something</em></code> mendefinisikan
+parameter layout View yang cocok untuk ViewGroup tempatnya berada.</p>
+
+<p>Setiap kelas ViewGroup mengimplementasikan kelas tersarang yang memperluas {@link
+android.view.ViewGroup.LayoutParams}. Subkelas ini
+berisi tipe properti yang mendefinisikan ukuran dan posisi masing-masing tampilan anak, sebagaimana
+mestinya untuk grup tampilan. Seperti yang bisa Anda lihat dalam gambar 1,
+grup tampilan induk mendefinisikan parameter layout untuk masing-masing tampilan anak (termasuk grup tampilan anak).</p>
+
+<img src="{@docRoot}images/layoutparams.png" alt="" />
+<p class="img-caption"><strong>Gambar 1.</strong> Visualisasi hierarki tampilan dengan parameter layout
+yang dikaitkan dengan tiap tampilan.</p>
+
+<p>Perhatikan bahwa setiap subkelas LayoutParams memiliki sintaksnya sendiri untuk menetapkan
+nilai-nilai. Tiap elemen anak harus mendefinisikan LayoutParams yang semestinya bagi induknya,
+meskipun elemen itu bisa juga mendefinisikan LayoutParams untuk anak-anaknya sendiri. </p>
+
+<p>Semua grup tampilan berisi lebar dan tinggi (<code>layout_width</code> dan
+<code>layout_height</code>), dan masing-masing tampilan harus mendefinisikannya. Banyak
+LayoutParams yang juga menyertakan margin dan border opsional. <p>
+
+<p>Anda bisa menetapkan lebar dan tinggi dengan ukuran persis, meskipun Anda mungkin
+tidak ingin sering-sering melakukannya. Lebih sering, Anda akan menggunakan salah satu konstanta ini untuk
+mengatur lebar atau tinggi: </p>
+
+<ul>
+ <li><var>wrap_content</var> memberi tahu tampilan Anda agar menyesuaikan sendiri ukurannya dengan dimensi
+yang dibutuhkan oleh isinya.</li>
+ <li><var>match_parent</var> (bernama <var>fill_parent</var> sebelum API Level 8)
+memberi tahu tampilan Anda agar menjadi sebesar yang diperbolehkan oleh grup tampilan induknya.</li>
+</ul>
+
+<p>Secara umum, menetapkan lebar dan tinggi layout dengan satuan mutlak seperti
+piksel tidaklah disarankan. Melainkan dengan menggunakan ukuran relatif seperti
+satuan piksel yang tidak bergantung pada kerapatan (<var>dp</var>), <var>wrap_content</var>, atau
+<var>match_parent</var>, adalah sebuah pendekatan yang lebih baik, karena membantu memastikan bahwa
+aplikasi Anda akan ditampilkan dengan benar pada berbagai ukuran layar perangkat.
+Tipe ukuran yang diterima didefinisikan dalam dokumen
+<a href="{@docRoot}guide/topics/resources/available-resources.html#dimension">
+Sumber Daya yang Tersedia</a>.</p>
+
+
+<h2 id="Position">Posisi Layout</h2>
+ <p>
+ Geometri tampilan adalah persegi panjang. Sebuah tampilan memiliki lokasi,
+ yang dinyatakan berupa sepasang koordinat <em>kiri</em> dan <em>atas</em>, dan
+ dua dimensi, yang dinyatakan berupa lebar dan tinggi. Satuan untuk lokasi
+ dan dimensi adalah piksel.
+ </p>
+
+ <p>
+ Lokasi tampilan dapat diambil dengan memanggil metode
+ {@link android.view.View#getLeft()} dan {@link android.view.View#getTop()}. Metode terdahulu menghasilkan koordinat kiri, atau X,
+ persegi panjang yang mewakili tampilan. Metode selanjutnya menghasilkan koordinat
+ atas, atau Y, persegi panjang yang mewakili tampilan. Kedua metode ini
+ menghasilkan lokasi tampilan relatif terhadap induknya. Misalnya,
+ bila <code>getLeft()</code> menghasilkan 20, berarti tampilan berlokasi 20 piksel ke
+ kanan dari tepi kiri induk langsungnya.
+ </p>
+
+ <p>
+ Selain itu, beberapa metode praktis ditawarkan untuk menghindari komputasi yang tidak perlu,
+ yakni {@link android.view.View#getRight()} dan {@link android.view.View#getBottom()}.
+ Kedua metode ini menghasilkan koordinat tepi kanan dan bawah
+ persegi panjang yang mewakili tampilan. Misalnya, memanggil {@link android.view.View#getRight()}
+ serupa dengan komputasi berikut: <code>getLeft() + getWidth()</code>.
+ </p>
+
+
+<h2 id="SizePaddingMargins">Ukuran, Pengisi, dan Margin</h2>
+ <p>
+ Ukuran tampilan dinyatakan dengan lebar dan tinggi. Tampilan sebenarnya
+ memiliki dua pasang nilai lebar dan tinggi.
+ </p>
+
+ <p>
+ Sepasang pertama disebut <em>lebar terukur</em> dan
+ <em>tinggi terukur</em>. Dimensi ini mendefinisikan seberapa besar tampilan yang diinginkan
+ dalam induknya. Dimensi
+ terukur bisa diperoleh dengan memanggil {@link android.view.View#getMeasuredWidth()}
+ dan {@link android.view.View#getMeasuredHeight()}.
+ </p>
+
+ <p>
+ Sepasang kedua cukup disebut dengan <em>lebar</em> dan <em>tinggi</em>, atau
+ kadang-kadang <em>lebar penggambaran</em> dan <em>tinggi penggambaran</em>. Dimensi-dimensi ini
+ mendefinisikan ukuran tampilan sebenarnya pada layar, saat digambar dan
+ setelah layout. Nilai-nilai ini mungkin, namun tidak harus, berbeda dengan
+ lebar dan tinggi terukur. Lebar dan tinggi bisa diperoleh dengan memanggil
+ {@link android.view.View#getWidth()} dan {@link android.view.View#getHeight()}.
+ </p>
+
+ <p>
+ Untuk mengukur dimensinya, tampilan akan memperhitungkan pengisinya (padding). Pengisi
+ dinyatakan dalam piksel untuk bagian kiri, atas, kanan, dan bawah tampilan.
+ Pengisi bisa digunakan untuk meng-offset isi tampilan dengan
+ piksel dalam jumlah tertentu. Misalnya, pengisi kiri sebesar 2 akan mendorong isi tampilan sebanyak
+ 2 piksel ke kanan dari tepi kiri. Pengisi bisa diatur menggunakan
+ metode {@link android.view.View#setPadding(int, int, int, int)} dan diketahui dengan memanggil
+ {@link android.view.View#getPaddingLeft()}, {@link android.view.View#getPaddingTop()},
+ {@link android.view.View#getPaddingRight()}, dan {@link android.view.View#getPaddingBottom()}.
+ </p>
+
+ <p>
+ Meskipun bisa mendefinisikan pengisi, tampilan tidak menyediakan dukungan untuk
+ margin. Akan tetapi, grup tampilan menyediakan dukungan tersebut. Lihat
+ {@link android.view.ViewGroup} dan
+ {@link android.view.ViewGroup.MarginLayoutParams} untuk informasi lebih jauh.
+ </p>
+
+ <p>Untuk informasi selengkapnya tentang dimensi, lihat
+ <a href="{@docRoot}guide/topics/resources/more-resources.html#Dimension">Nilai-Nilai Dimensi</a>.
+ </p>
+
+
+
+
+
+
+<style type="text/css">
+div.layout {
+ float:left;
+ width:200px;
+ margin:0 0 20px 20px;
+}
+div.layout.first {
+ margin-left:0;
+ clear:left;
+}
+</style>
+
+
+
+
+<h2 id="CommonLayouts">Layout Umum</h2>
+
+<p>Tiap subkelas dari kelas {@link android.view.ViewGroup} menyediakan cara unik untuk menampilkan
+tampilan yang Anda sarangkan di dalamnya. Di bawah ini adalah beberapa tipe layout lebih umum yang dibuat
+ke dalam platform Android.</p>
+
+<p class="note"><strong>Catatan:</strong> Walaupun Anda bisa menyarangkan satu atau beberapa layout dalam
+layout lain untuk mendapatkan desain UI, Anda harus berusaha menjaga hierarki layout sedangkal
+mungkin. Layout Anda akan digambar lebih cepat jika memiliki layout tersarang yang lebih sedikit (hierarki tampilan yang melebar
+lebih baik daripada hierarki tampilan yang dalam).</p>
+
+<!--
+<h2 id="framelayout">FrameLayout</h2>
+<p>{@link android.widget.FrameLayout FrameLayout} is the simplest type of layout
+object. It's basically a blank space on your screen that you can
+later fill with a single object — for example, a picture that you'll swap in and out.
+All child elements of the FrameLayout are pinned to the top left corner of the screen; you cannot
+specify a different location for a child view. Subsequent child views will simply be drawn over
+previous ones,
+partially or totally obscuring them (unless the newer object is transparent).
+</p>
+-->
+
+
+<div class="layout first">
+ <h4><a href="layout/linear.html">Layout Linier</a></h4>
+ <a href="layout/linear.html"><img src="{@docRoot}images/ui/linearlayout-small.png" alt="" /></a>
+ <p>Layout yang mengatur anak-anaknya menjadi satu baris horizontal atau vertikal. Layout ini
+ akan membuat scrollbar jika panjang jendela melebihi panjang layar.</p>
+</div>
+
+<div class="layout">
+ <h4><a href="layout/relative.html">Layout Relatif</a></h4>
+ <a href="layout/relative.html"><img src="{@docRoot}images/ui/relativelayout-small.png" alt="" /></a>
+ <p>Memungkinkan Anda menentukan lokasi objek anak relatif terhadap satu sama lain (anak A di
+kiri anak B) atau terhadap induk (disejajarkan dengan atas induknya).</p>
+</div>
+
+<div class="layout">
+ <h4><a href="{@docRoot}guide/webapps/webview.html">Tampilan Web</a></h4>
+ <a href="{@docRoot}guide/webapps/webview.html"><img src="{@docRoot}images/ui/webview-small.png" alt="" /></a>
+ <p>Menampilkan halaman web.</p>
+</div>
+
+
+
+
+<h2 id="AdapterViews" style="clear:left">Membangun Layout dengan Adaptor</h2>
+
+<p>Bila isi layout bersifat dinamis atau tidak dipastikan sebelumnya, Anda bisa menggunakan layout yang menjadi
+subkelas {@link android.widget.AdapterView} untuk mengisi layout dengan tampilan saat runtime.
+Subkelas dari kelas {@link android.widget.AdapterView} menggunakan {@link android.widget.Adapter} untuk
+mengikat data ke layoutnya. {@link android.widget.Adapter} berfungsi sebagai penghubung antara sumber data
+dan layout{@link android.widget.AdapterView}—{@link android.widget.Adapter}
+menarik data (dari suatu sumber seperti larik (array) atau query database) dan mengubah setiap entri
+menjadi tampilan yang bisa ditambahkan ke dalam layout {@link android.widget.AdapterView}.</p>
+
+<p>Layout umum yang didukung oleh adaptor meliputi:</p>
+
+<div class="layout first">
+ <h4><a href="layout/listview.html">Tampilan Daftar</a></h4>
+ <a href="layout/listview.html"><img src="{@docRoot}images/ui/listview-small.png" alt="" /></a>
+ <p>Menampilkan daftar kolom tunggal yang bergulir.</p>
+</div>
+
+<div class="layout">
+ <h4><a href="layout/gridview.html">Tampilan Petak</a></h4>
+ <a href="layout/gridview.html"><img src="{@docRoot}images/ui/gridview-small.png" alt="" /></a>
+ <p>Menampilkan petak bergulir yang terdiri atas kolom dan baris.</p>
+</div>
+
+
+
+<h3 id="FillingTheLayout" style="clear:left">Mengisi tampilan adaptor dengan data</h3>
+
+<p>Anda bisa mengisi {@link android.widget.AdapterView} seperti {@link android.widget.ListView} atau
+{@link android.widget.GridView} dengan mengikat instance {@link android.widget.AdapterView} ke
+{@link android.widget.Adapter}, yang akan mengambil data dari sumber eksternal dan membuat {@link
+android.view.View} yang mewakili tiap entri data.</p>
+
+<p>Android menyediakan beberapa subkelas {@link android.widget.Adapter} yang berguna untuk
+menarik berbagai jenis data dan membangun tampilan untuk {@link android.widget.AdapterView}. Dua
+ adaptor yang paling umum adalah:</p>
+
+<dl>
+ <dt>{@link android.widget.ArrayAdapter}</dt>
+ <dd>Gunakan adaptor ini bila sumber data Anda berupa larik. Secara default, {@link
+android.widget.ArrayAdapter} akan membuat tampilan untuk tiap elemen larik dengan memanggil {@link
+java.lang.Object#toString()} pada tiap elemen dan menempatkan isinya dalam {@link
+android.widget.TextView}.
+ <p>Misalnya, jika Anda memiliki satu larik string yang ingin ditampilkan dalam {@link
+android.widget.ListView}, buatlah {@link android.widget.ArrayAdapter} baru dengan konstruktor
+untuk menentukan layout setiap string dan larik string:</p>
+<pre>
+ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
+ android.R.layout.simple_list_item_1, myStringArray);
+</pre>
+<p>Argumen-argumen untuk konstruktor ini adalah:</p>
+<ul>
+ <li>{@link android.content.Context} aplikasi Anda</li>
+ <li>Layout yang berisi {@link android.widget.TextView} untuk tiap string dalam larik</li>
+ <li>Larik string</li>
+</ul>
+<p>Kemudian tinggal panggil
+{@link android.widget.ListView#setAdapter setAdapter()} pada {@link android.widget.ListView} Anda:</p>
+<pre>
+ListView listView = (ListView) findViewById(R.id.listview);
+listView.setAdapter(adapter);
+</pre>
+
+ <p>Untuk menyesuaikan penampilan setiap item, Anda bisa mengesampingkan metode {@link
+java.lang.Object#toString()} bagi objek dalam larik Anda. Atau, untuk membuat tampilan tiap
+elemen selain {@link android.widget.TextView} (misalnya, jika Anda menginginkan
+{@link android.widget.ImageView} bagi setiap item larik), perluas kelas {@link
+android.widget.ArrayAdapter} dan kesampingkan {@link android.widget.ArrayAdapter#getView
+getView()} agar memberikan tipe tampilan yang Anda inginkan bagi tiap item.</p>
+
+</dd>
+
+ <dt>{@link android.widget.SimpleCursorAdapter}</dt>
+ <dd>Gunakan adaptor ini bila data Anda berasal dari {@link android.database.Cursor}. Saat
+menggunakan {@link android.widget.SimpleCursorAdapter}, Anda harus menentukan layout yang akan digunakan untuk tiap
+baris dalam {@link android.database.Cursor} dan di kolom mana di {@link android.database.Cursor}
+harus memasukkan tampilan layout. Misalnya, jika Anda ingin untuk membuat daftar
+nama orang dan nomor telepon, Anda bisa melakukan query yang menghasilkan {@link
+android.database.Cursor} yang berisi satu baris untuk tiap orang dan kolom-kolom untuk nama dan
+nomor. Selanjutnya Anda membuat larik string yang menentukan kolom dari {@link
+android.database.Cursor} yang Anda inginkan dalam layout untuk setiap hasil dan larik integer yang menentukan
+tampilan yang sesuai untuk menempatkan masing-masing kolom:</p>
+<pre>
+String[] fromColumns = {ContactsContract.Data.DISPLAY_NAME,
+ ContactsContract.CommonDataKinds.Phone.NUMBER};
+int[] toViews = {R.id.display_name, R.id.phone_number};
+</pre>
+<p>Bila Anda membuat instance {@link android.widget.SimpleCursorAdapter}, teruskan layout yang akan digunakan untuk
+setiap hasil, {@link android.database.Cursor} yang berisi hasil tersebut, dan dua larik ini:</p>
+<pre>
+SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
+ R.layout.person_name_and_number, cursor, fromColumns, toViews, 0);
+ListView listView = getListView();
+listView.setAdapter(adapter);
+</pre>
+<p>{@link android.widget.SimpleCursorAdapter} kemudian membuat tampilan untuk tiap baris dalam
+{@link android.database.Cursor} dengan layout yang disediakan dengan memasukkan setiap item {@code
+fromColumns} ke dalam tampilan {@code toViews} yang sesuai.</p></dd>
+</dl>
+
+
+<p>Jika, selama aplikasi berjalan, Anda mengubah data sumber yang dibaca oleh
+adaptor, maka Anda harus memanggil {@link android.widget.ArrayAdapter#notifyDataSetChanged()}. Hal ini akan
+memberi tahu tampilan yang bersangkutan bahwa data telah berubah dan tampilan harus memperbarui dirinya sendiri.</p>
+
+
+
+<h3 id="HandlingUserSelections">Menangani kejadian klik</h3>
+
+<p>Anda bisa merespons kejadian klik pada setiap item dalam {@link android.widget.AdapterView} dengan
+menerapkan antarmuka {@link android.widget.AdapterView.OnItemClickListener}. Misalnya:</p>
+
+<pre>
+// Create a message handling object as an anonymous class.
+private OnItemClickListener mMessageClickedHandler = new OnItemClickListener() {
+ public void onItemClick(AdapterView parent, View v, int position, long id) {
+ // Do something in response to the click
+ }
+};
+
+listView.setOnItemClickListener(mMessageClickedHandler);
+</pre>
+
+
+
diff --git a/docs/html-intl/intl/id/guide/topics/ui/dialogs.jd b/docs/html-intl/intl/id/guide/topics/ui/dialogs.jd
new file mode 100644
index 0000000..06a25ac
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/topics/ui/dialogs.jd
@@ -0,0 +1,798 @@
+page.title=Dialog
+page.tags=alertdialog,dialogfragment
+
+@jd:body
+
+
+
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>Dalam dokumen ini</h2>
+<ol>
+ <li><a href="#DialogFragment">Membuat Fragmen Dialog</a></li>
+ <li><a href="#AlertDialog">Membuat Dialog Peringatan</a>
+ <ol>
+ <li><a href="#AddingButtons">Menambahkan tombol</a></li>
+ <li><a href="#AddingAList">Menambahkan daftar</a></li>
+ <li><a href="#CustomLayout">Membuat Layout Custom</a></li>
+ </ol>
+ </li>
+ <li><a href="#PassingEvents">Meneruskan Kejadian Kembali ke Host Dialog</a></li>
+ <li><a href="#ShowingADialog">Menampilkan Dialog</a></li>
+ <li><a href="#FullscreenDialog">Menampilkan Dialog sebagai Layar Penuh atau Fragmen Tertanam</a>
+ <ol>
+ <li><a href="#ActivityAsDialog">Menampilkan aktivitas sebagai dialog pada layar besar</a></li>
+ </ol>
+ </li>
+ <li><a href="#DismissingADialog">Menutup Dialog</a></li>
+</ol>
+
+ <h2>Kelas-kelas utama</h2>
+ <ol>
+ <li>{@link android.app.DialogFragment}</li>
+ <li>{@link android.app.AlertDialog}</li>
+ </ol>
+
+ <h2>Lihat juga</h2>
+ <ol>
+ <li><a href="{@docRoot}design/building-blocks/dialogs.html">Panduan desain dialog</a></li>
+ <li><a href="{@docRoot}guide/topics/ui/controls/pickers.html">Picker</a> (dialog Tanggal/Waktu)</li>
+ </ol>
+ </div>
+</div>
+
+<p>Dialog adalah jendela kecil yang meminta pengguna untuk
+membuat keputusan atau memasukkan informasi tambahan. Dialog tidak mengisi layar dan
+biasanya digunakan untuk kejadian modal yang mengharuskan pengguna untuk melakukan tindakan sebelum bisa melanjutkan.</p>
+
+<div class="note design">
+<p><strong>Desain Dialog</strong></p>
+ <p>Untuk informasi tentang cara mendesain dialog, termasuk saran
+ untuk bahasa, bacalah panduan Desain <a href="{@docRoot}design/building-blocks/dialogs.html">dialog</a>.</p>
+</div>
+
+<img src="{@docRoot}images/ui/dialogs.png" />
+
+<p>Kelas {@link android.app.Dialog} adalah kelas basis untuk dialog, namun Anda
+harus menghindari pembuatan instance {@link android.app.Dialog} secara langsung.
+Sebagai gantinya, gunakan salah satu subkelas berikut:</p>
+<dl>
+ <dt>{@link android.app.AlertDialog}</dt>
+ <dd>Dialog yang bisa menampilkan judul, hingga tiga tombol, daftar
+ item yang dapat dipilih, atau layout custom.</dd>
+ <dt>{@link android.app.DatePickerDialog} atau {@link android.app.TimePickerDialog}</dt>
+ <dd>Dialog berisi UI yang sudah didefinisikan dan memungkinkan pengguna memilih tanggal atau waktu.</dd>
+</dl>
+
+<div class="sidebox">
+<h2>Hindari ProgressDialog</h2>
+<p>Android menyertakan kelas dialog lain yang disebut
+{@link android.app.ProgressDialog} yang menampilkan dialog berisi progress-bar. Akan tetapi, jika Anda
+perlu menunjukkan kemajuan pemuatan ataupun kemajuan yang tidak pasti, maka Anda harus mengikuti
+panduan desain untuk <a href="{@docRoot}design/building-blocks/progress.html">Kemajuan &
+Aktivitas</a> dan menggunakan {@link android.widget.ProgressBar} dalam layout Anda.</p>
+</div>
+
+<p>Kelas-kelas ini mendefinisikan gaya dan struktur dialog Anda, namun Anda harus
+menggunakan {@link android.support.v4.app.DialogFragment} sebagai kontainer dialog Anda.
+Kelas {@link android.support.v4.app.DialogFragment} menyediakan semua kontrol yang Anda
+perlukan untuk membuat dialog dan mengelola penampilannya, sebagai ganti memanggil metode
+pada objek {@link android.app.Dialog}.</p>
+
+<p>Menggunakan {@link android.support.v4.app.DialogFragment} untuk mengelola dialog
+akan memastikan bahwa kelas itu menangani kejadian daur hidup
+dengan benar seperti ketika pengguna menekan tombol <em>Back</em> atau memutar layar. Kelas {@link
+android.support.v4.app.DialogFragment} juga memungkinkan Anda menggunakan ulang dialog UI sebagai
+komponen yang bisa ditanamkan dalam UI yang lebih besar, persis seperti {@link
+android.support.v4.app.Fragment} tradisional (seperti saat Anda ingin dialog UI muncul berbeda
+pada layar besar dan kecil).</p>
+
+<p>Bagian-bagian berikutnya dalam panduan ini akan menjelaskan cara menggunakan {@link
+android.support.v4.app.DialogFragment} yang dikombinasikan dengan objek {@link android.app.AlertDialog}
+. Jika Anda ingin membuat picker tanggal atau waktu, Anda harus membaca panduan
+<a href="{@docRoot}guide/topics/ui/controls/pickers.html">Picker</a>.</p>
+
+<p class="note"><strong>Catatan:</strong>
+Karena kelas {@link android.app.DialogFragment} mulanya ditambahkan pada
+Android 3.0 (API level 11), dokumen ini menjelaskan cara menggunakan kelas {@link
+android.support.v4.app.DialogFragment} yang disediakan bersama <a href="{@docRoot}tools/support-library/index.html">Pustaka Dukungan</a>. Dengan menambahkan pustaka ini
+ke aplikasi, Anda bisa menggunakan {@link android.support.v4.app.DialogFragment} dan berbagai
+API lain pada perangkat yang menjalankan Android 1.6 atau yang lebih tinggi. Jika versi minimum yang didukung aplikasi Anda
+adalah API level 11 atau yang lebih tinggi, maka Anda bisa menggunakan versi kerangka kerja {@link
+android.app.DialogFragment}, namun ketahuilah bahwa tautan dalam dokumen ini adalah untuk API
+pustaka dukungan. Saat menggunakan pustaka dukungan,
+pastikan Anda mengimpor kelas <code>android.support.v4.app.DialogFragment</code>
+dan <em>bukan</em> <code>android.app.DialogFragment</code>.</p>
+
+
+<h2 id="DialogFragment">Membuat Fragmen Dialog</h2>
+
+<p>Anda bisa menghasilkan beragam rancangan dialog—termasuk
+layout custom dan desain yang dijelaskan dalam panduan desain <a href="{@docRoot}design/building-blocks/dialogs.html">Dialog</a>
+—dengan memperluas
+{@link android.support.v4.app.DialogFragment} dan membuat {@link android.app.AlertDialog}
+dalam metode callback {@link android.support.v4.app.DialogFragment#onCreateDialog
+onCreateDialog()}.</p>
+
+<p>Misalnya, berikut ini sebuah {@link android.app.AlertDialog} dasar yang dikelola dalam
+{@link android.support.v4.app.DialogFragment}:</p>
+
+<pre>
+public class FireMissilesDialogFragment extends DialogFragment {
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ // Use the Builder class for convenient dialog construction
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ builder.setMessage(R.string.dialog_fire_missiles)
+ .setPositiveButton(R.string.fire, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ // FIRE ZE MISSILES!
+ }
+ })
+ .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ // User cancelled the dialog
+ }
+ });
+ // Create the AlertDialog object and return it
+ return builder.create();
+ }
+}
+</pre>
+
+<div class="figure" style="width:290px;margin:0 0 0 20px">
+<img src="{@docRoot}images/ui/dialog_buttons.png" alt="" />
+<p class="img-caption"><strong>Gambar 1.</strong>
+Dialog dengan satu pesan dan dua tombol tindakan.</p>
+</div>
+
+<p>Sekarang, bila Anda membuat instance kelas ini dan memanggil {@link
+android.support.v4.app.DialogFragment#show show()} pada objek itu, dialog akan muncul seperti
+yang ditampilkan dalam gambar 1.</p>
+
+<p>Bagian berikutnya menjelaskan lebih jauh tentang penggunaan API {@link android.app.AlertDialog.Builder}
+untuk membuat dialog.</p>
+
+<p>Bergantung pada seberapa rumit dialog tersebut, Anda bisa menerapkan berbagai metode callback lain
+dalam {@link android.support.v4.app.DialogFragment}, termasuk semua
+<a href="{@docRoot}guide/components/fragments.html#Lifecycle">metode daur hidup fragmen</a> dasar.
+
+
+
+
+
+<h2 id="AlertDialog">Membuat Dialog Peringatan</h2>
+
+
+<p>Kelas {@link android.app.AlertDialog} memungkinkan Anda membuat berbagai desain dialog dan
+seringkali satu-satunya kelas dialog yang akan Anda perlukan.
+Seperti yang ditampilkan dalam gambar 2, ada tiga area pada dialog peringatan:</p>
+
+<div class="figure" style="width:311px;margin-top:0">
+<img src="{@docRoot}images/ui/dialogs_regions.png" alt="" style="margin-bottom:0" />
+<p class="img-caption"><strong>Gambar 2.</strong> Layout dialog.</p>
+</div>
+
+<ol>
+<li><b>Judul</b>
+ <p>Area ini opsional dan hanya boleh digunakan bila area konten
+ ditempati oleh pesan terperinci, daftar, atau layout custom. Jika Anda perlu menyatakan
+ pesan atau pertanyaan sederhana (seperti dialog dalam gambar 1), Anda tidak memerlukan judul.</li>
+<li><b>Area konten</b>
+ <p>Area ini bisa menampilkan pesan, daftar, atau layout custom lainnya.</p></li>
+<li><b>Tombol tindakan</b>
+ <p>Tidak boleh ada lebih dari tiga tombol tindakan dalam sebuah dialog.</p></li>
+</ol>
+
+<p>Kelas {@link android.app.AlertDialog.Builder}
+ menyediakan API yang memungkinkan Anda membuat {@link android.app.AlertDialog}
+dengan jenis konten ini, termasuk layout custom.</p>
+
+<p>Untuk membuat {@link android.app.AlertDialog}:</p>
+
+<pre>
+<b>// 1. Instantiate an {@link android.app.AlertDialog.Builder} with its constructor</b>
+AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+
+<b>// 2. Chain together various setter methods to set the dialog characteristics</b>
+builder.setMessage(R.string.dialog_message)
+ .setTitle(R.string.dialog_title);
+
+<b>// 3. Get the {@link android.app.AlertDialog} from {@link android.app.AlertDialog.Builder#create()}</b>
+AlertDialog dialog = builder.create();
+</pre>
+
+<p>Topik-topik selanjutnya menampilkan cara mendefinisikan berbagai atribut dialog dengan menggunakan
+kelas {@link android.app.AlertDialog.Builder}.</p>
+
+
+
+
+<h3 id="AddingButtons">Menambahkan tombol</h3>
+
+<p>Untuk menambahkan tombol tindakan seperti dalam gambar 2,
+panggil metode {@link android.app.AlertDialog.Builder#setPositiveButton setPositiveButton()} dan
+{@link android.app.AlertDialog.Builder#setNegativeButton setNegativeButton()}:</p>
+
+<pre style="clear:right">
+AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+// Add the buttons
+builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ // User clicked OK button
+ }
+ });
+builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ // User cancelled the dialog
+ }
+ });
+// Set other dialog properties
+...
+
+// Create the AlertDialog
+AlertDialog dialog = builder.create();
+</pre>
+
+<p>Metode <code>set...Button()</code> mengharuskan adanya judul bagi tombol (disediakan
+oleh suatu <a href="{@docRoot}guide/topics/resources/string-resource.html">sumber daya string</a>) dan
+{@link android.content.DialogInterface.OnClickListener} yang mendefinisikan tindakan yang diambil
+bila pengguna menekan tombol.</p>
+
+<p>Ada tiga macam tombol tindakan yang Anda bisa tambahkan:</p>
+<dl>
+ <dt>Positif</dt>
+ <dd>Anda harus menggunakan tipe ini untuk menerima dan melanjutkan tindakan (tindakan "OK").</dd>
+ <dt>Negatif</dt>
+ <dd>Anda harus menggunakan tipe ini untuk membatalkan tindakan.</dd>
+ <dt>Netral</dt>
+ <dd>Anda harus menggunakan tipe ini bila pengguna mungkin tidak ingin melanjutkan tindakan,
+ namun tidak ingin membatalkan. Tipe ini muncul antara tombol positif dan
+tombol negatif. Misalnya, tindakan bisa berupa "Ingatkan saya nanti".</dd>
+</dl>
+
+<p>Anda hanya bisa menambahkan salah satu tipe tombol ke {@link
+android.app.AlertDialog}. Artinya, Anda tidak bisa memiliki lebih dari satu tombol "positif".</p>
+
+
+
+<div class="figure" style="width:290px;margin:0 0 0 40px">
+<img src="{@docRoot}images/ui/dialog_list.png" alt="" />
+<p class="img-caption"><strong>Gambar 3.</strong>
+Dialog dengan satu judul dan daftar.</p>
+</div>
+
+<h3 id="AddingAList">Menambahkan daftar</h3>
+
+<p>Ada tiga macam daftar yang tersedia pada API {@link android.app.AlertDialog}:</p>
+<ul>
+<li>Daftar pilihan tunggal biasa</li>
+<li>Daftar pilihan tunggal persisten (tombol radio)</li>
+<li>Daftar pilihan ganda persisten (kotak cek)</li>
+</ul>
+
+<p>Untuk membuat daftar pilihan tunggal seperti dalam gambar 3,
+gunakan metode {@link android.app.AlertDialog.Builder#setItems setItems()}:</p>
+
+<pre style="clear:right">
+@Override
+public Dialog onCreateDialog(Bundle savedInstanceState) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ builder.setTitle(R.string.pick_color)
+ .setItems(R.array.colors_array, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ // The 'which' argument contains the index position
+ // of the selected item
+ }
+ });
+ return builder.create();
+}
+</pre>
+
+<p>Karena daftar muncul dalam area konten dialog,
+dialog tidak bisa menampilkan pesan dan daftar sekaligus dan Anda harus menetapkan judul untuk
+dialog dengan {@link android.app.AlertDialog.Builder#setTitle setTitle()}.
+Untuk menentukan item daftar, panggil {@link
+android.app.AlertDialog.Builder#setItems setItems()}, dengan meneruskan larik.
+Atau, Anda bisa menetapkan daftar menggunakan {@link
+android.app.AlertDialog.Builder#setAdapter setAdapter()}. Hal ini memungkinkan Anda mendukung daftar
+dengan data dinamis (seperti dari database) dengan menggunakan {@link android.widget.ListAdapter}.</p>
+
+<p>Jika Anda memilih untuk mendukung daftar dengan {@link android.widget.ListAdapter},
+selalu gunakan sebuah {@link android.support.v4.content.Loader} agar konten dimuat
+secara asinkron. Hal ini dijelaskan lebih jauh dalam panduan
+<a href="{@docRoot}guide/topics/ui/declaring-layout.html#AdapterViews">Membuat Layout
+dengan Adaptor</a> dan <a href="{@docRoot}guide/components/loaders.html">Loader</a>
+.</p>
+
+<p class="note"><strong>Catatan:</strong> Secara default, menyentuh sebuah item daftar akan menutup dialog,
+kecuali Anda menggunakan salah satu daftar pilihan persisten berikut ini.</p>
+
+<div class="figure" style="width:290px;margin:-30px 0 0 40px">
+<img src="{@docRoot}images/ui/dialog_checkboxes.png" />
+<p class="img-caption"><strong>Gambar 4.</strong>
+Daftar item pilihan ganda.</p>
+</div>
+
+
+<h4 id="Checkboxes">Menambahkan daftar pilihan ganda atau pilihan tunggal persisten</h4>
+
+<p>Untuk menambahkan daftar item pilihan ganda (kotak cek) atau
+item pilihan tunggal (tombol radio), gunakan masing-masing metode
+{@link android.app.AlertDialog.Builder#setMultiChoiceItems(Cursor,String,String,
+DialogInterface.OnMultiChoiceClickListener) setMultiChoiceItems()}, atau
+{@link android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener)
+setSingleChoiceItems()}.</p>
+
+<p>Misalnya, berikut ini cara membuat daftar pilihan ganda seperti
+yang ditampilkan dalam gambar 4 yang menyimpan item
+yang dipilih dalam {@link java.util.ArrayList}:</p>
+
+<pre style="clear:right">
+@Override
+public Dialog onCreateDialog(Bundle savedInstanceState) {
+ mSelectedItems = new ArrayList(); // Where we track the selected items
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ // Set the dialog title
+ builder.setTitle(R.string.pick_toppings)
+ // Specify the list array, the items to be selected by default (null for none),
+ // and the listener through which to receive callbacks when items are selected
+ .setMultiChoiceItems(R.array.toppings, null,
+ new DialogInterface.OnMultiChoiceClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which,
+ boolean isChecked) {
+ if (isChecked) {
+ // If the user checked the item, add it to the selected items
+ mSelectedItems.add(which);
+ } else if (mSelectedItems.contains(which)) {
+ // Else, if the item is already in the array, remove it
+ mSelectedItems.remove(Integer.valueOf(which));
+ }
+ }
+ })
+ // Set the action buttons
+ .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int id) {
+ // User clicked OK, so save the mSelectedItems results somewhere
+ // or return them to the component that opened the dialog
+ ...
+ }
+ })
+ .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int id) {
+ ...
+ }
+ });
+
+ return builder.create();
+}
+</pre>
+
+<p>Walaupun daftar tradisional maupun daftar dengan tombol radio
+menyediakan tindakan "pilihan tunggal", Anda harus menggunakan {@link
+android.app.AlertDialog.Builder#setSingleChoiceItems(int,int,DialogInterface.OnClickListener)
+setSingleChoiceItems()} jika ingin mempertahankan pilihan pengguna.
+Yakni, jika nanti membuka dialog lagi untuk menunjukkan pilihan pengguna,
+maka Anda perlu membuat daftar dengan tombol radio.</p>
+
+
+
+
+
+<h3 id="CustomLayout">Membuat Layout Custom</h3>
+
+<div class="figure" style="width:290px;margin:-30px 0 0 40px">
+<img src="{@docRoot}images/ui/dialog_custom.png" alt="" />
+<p class="img-caption"><strong>Gambar 5.</strong> Layout dialog custom.</p>
+</div>
+
+<p>Jika Anda menginginkan layout custom dalam dialog, buatlah layout dan tambahkan ke
+{@link android.app.AlertDialog} dengan memanggil {@link
+android.app.AlertDialog.Builder#setView setView()} pada objek {@link
+android.app.AlertDialog.Builder} Anda.</p>
+
+<p>Secara default, layout custom akan mengisi jendela dialog, namun Anda masih bisa
+menggunakan metode {@link android.app.AlertDialog.Builder} untuk menambahkan tombol dan judul.</p>
+
+<p>Misalnya, berikut ini adalah file layout untuk dialog dalam Gambar 5:</p>
+
+<p style="clear:right" class="code-caption">res/layout/dialog_signin.xml</p>
+<pre>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content">
+ <ImageView
+ android:src="@drawable/header_logo"
+ android:layout_width="match_parent"
+ android:layout_height="64dp"
+ android:scaleType="center"
+ android:background="#FFFFBB33"
+ android:contentDescription="@string/app_name" />
+ <EditText
+ android:id="@+id/username"
+ android:inputType="textEmailAddress"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="16dp"
+ android:layout_marginLeft="4dp"
+ android:layout_marginRight="4dp"
+ android:layout_marginBottom="4dp"
+ android:hint="@string/username" />
+ <EditText
+ android:id="@+id/password"
+ android:inputType="textPassword"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="4dp"
+ android:layout_marginLeft="4dp"
+ android:layout_marginRight="4dp"
+ android:layout_marginBottom="16dp"
+ android:fontFamily="sans-serif"
+ android:hint="@string/password"/>
+</LinearLayout>
+</pre>
+
+<p class="note"><strong>Tip:</strong> Secara default, bila Anda telah mengatur sebuah elemen {@link android.widget.EditText}
+agar menggunakan tipe input {@code "textPassword"}, keluarga font akan diatur ke spasi tunggal, sehingga
+Anda harus mengubah keluarga font ke {@code "sans-serif"} sehingga kedua bidang teks menggunakan
+gaya font yang cocok.</p>
+
+<p>Untuk memekarkan layout dalam {@link android.support.v4.app.DialogFragment} Anda,
+ambillah {@link android.view.LayoutInflater} dengan
+{@link android.app.Activity#getLayoutInflater()} dan panggil
+{@link android.view.LayoutInflater#inflate inflate()}, dengan parameter pertama
+adalah ID sumber daya layout dan parameter kedua adalah tampilan induk untuk layout.
+Selanjutnya Anda bisa memanggil {@link android.app.AlertDialog#setView setView()}
+untuk menempatkan layout dalam dialog.</p>
+
+<pre>
+@Override
+public Dialog onCreateDialog(Bundle savedInstanceState) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ // Get the layout inflater
+ LayoutInflater inflater = getActivity().getLayoutInflater();
+
+ // Inflate and set the layout for the dialog
+ // Pass null as the parent view because its going in the dialog layout
+ builder.setView(inflater.inflate(R.layout.dialog_signin, null))
+ // Add action buttons
+ .setPositiveButton(R.string.signin, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int id) {
+ // sign in the user ...
+ }
+ })
+ .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ LoginDialogFragment.this.getDialog().cancel();
+ }
+ });
+ return builder.create();
+}
+</pre>
+
+<div class="note">
+<p><strong>Tip:</strong> Jika Anda menginginkan dialog custom,
+Anda bisa menampilkan {@link android.app.Activity} sebagai dialog
+daripada menggunakan API {@link android.app.Dialog}. Cukup buat satu aktivitas dan mengatur temanya ke
+{@link android.R.style#Theme_Holo_Dialog Theme.Holo.Dialog}
+di elemen manifes <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
+<activity>}</a>:</p>
+
+<pre>
+<activity android:theme="@android:style/Theme.Holo.Dialog" >
+</pre>
+<p>Demikian saja. Aktivitas sekarang ditampilkan dalam jendela dialog, sebagai ganti layar penuh.</p>
+</div>
+
+
+
+<h2 id="PassingEvents">Meneruskan Kejadian Kembali ke Host Dialog</h2>
+
+<p>Bila pengguna menyentuh salah satu tombol tindakan dialog atau memilih satu item dari daftarnya,
+{@link android.support.v4.app.DialogFragment} Anda bisa melakukan sendiri tindakan yang diperlukan
+, namun sering kali Anda perlu mengirim kejadian itu ke aktivitas atau fragmen yang
+membuka dialog. Caranya, definisikan antarmuka dengan sebuah metode untuk masing-masing tipe kejadian klik.
+Lalu implementasikan antarmuka itu dalam komponen host yang akan
+menerima kejadian tindakan dari dialog.</p>
+
+<p>Misalnya, berikut ini adalah {@link android.support.v4.app.DialogFragment} yang mendefinisikan
+antarmuka yang akan digunakan untuk mengirim kembali suatu kejadian ke aktivitas host:</p>
+
+<pre>
+public class NoticeDialogFragment extends DialogFragment {
+
+ /* The activity that creates an instance of this dialog fragment must
+ * implement this interface in order to receive event callbacks.
+ * Each method passes the DialogFragment in case the host needs to query it. */
+ public interface NoticeDialogListener {
+ public void onDialogPositiveClick(DialogFragment dialog);
+ public void onDialogNegativeClick(DialogFragment dialog);
+ }
+
+ // Use this instance of the interface to deliver action events
+ NoticeDialogListener mListener;
+
+ // Override the Fragment.onAttach() method to instantiate the NoticeDialogListener
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ // Verify that the host activity implements the callback interface
+ try {
+ // Instantiate the NoticeDialogListener so we can send events to the host
+ mListener = (NoticeDialogListener) activity;
+ } catch (ClassCastException e) {
+ // The activity doesn't implement the interface, throw exception
+ throw new ClassCastException(activity.toString()
+ + " must implement NoticeDialogListener");
+ }
+ }
+ ...
+}
+</pre>
+
+<p>Aktivitas yang menjadi host dialog tersebut akan membuat instance dialog
+dengan konstruktor fragmen dialog dan menerima kejadian dialog
+melalui implementasi antarmuka {@code NoticeDialogListener}:</p>
+
+<pre>
+public class MainActivity extends FragmentActivity
+ implements NoticeDialogFragment.NoticeDialogListener{
+ ...
+
+ public void showNoticeDialog() {
+ // Create an instance of the dialog fragment and show it
+ DialogFragment dialog = new NoticeDialogFragment();
+ dialog.show(getSupportFragmentManager(), "NoticeDialogFragment");
+ }
+
+ // The dialog fragment receives a reference to this Activity through the
+ // Fragment.onAttach() callback, which it uses to call the following methods
+ // defined by the NoticeDialogFragment.NoticeDialogListener interface
+ @Override
+ public void onDialogPositiveClick(DialogFragment dialog) {
+ // User touched the dialog's positive button
+ ...
+ }
+
+ @Override
+ public void onDialogNegativeClick(DialogFragment dialog) {
+ // User touched the dialog's negative button
+ ...
+ }
+}
+</pre>
+
+<p>Karena aktivitas host mengimplementasikan {@code NoticeDialogListener}—yang
+diberlakukan oleh metode callback {@link android.support.v4.app.Fragment#onAttach onAttach()}
+di atas,—fragmen dialog bisa menggunakan
+metode callback antarmuka untuk mengirimkan kejadian klik ke aktivitas:</p>
+
+<pre>
+public class NoticeDialogFragment extends DialogFragment {
+ ...
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ // Build the dialog and set up the button click handlers
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ builder.setMessage(R.string.dialog_fire_missiles)
+ .setPositiveButton(R.string.fire, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ // Send the positive button event back to the host activity
+ mListener.onDialogPositiveClick(NoticeDialogFragment.this);
+ }
+ })
+ .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ // Send the negative button event back to the host activity
+ mListener.onDialogNegativeClick(NoticeDialogFragment.this);
+ }
+ });
+ return builder.create();
+ }
+}
+</pre>
+
+
+
+<h2 id="ShowingADialog">Menampilkan Dialog</h2>
+
+<p>Bila Anda ingin menampilkan dialog, buatlah instance {@link
+android.support.v4.app.DialogFragment} dan panggil {@link android.support.v4.app.DialogFragment#show
+show()}, dengan meneruskan {@link android.support.v4.app.FragmentManager} dan nama tag
+untuk fragmen dialognya.</p>
+
+<p>Anda bisa mendapatkan {@link android.support.v4.app.FragmentManager} dengan memanggil
+{@link android.support.v4.app.FragmentActivity#getSupportFragmentManager()} dari
+ {@link android.support.v4.app.FragmentActivity} atau {@link
+android.support.v4.app.Fragment#getFragmentManager()} dari {@link
+android.support.v4.app.Fragment}. Misalnya:</p>
+
+<pre>
+public void confirmFireMissiles() {
+ DialogFragment newFragment = new FireMissilesDialogFragment();
+ newFragment.show(getSupportFragmentManager(), "missiles");
+}
+</pre>
+
+<p>Argumen kedua, {@code "missiles"}, adalah nama tag unik yang digunakan sistem untuk menyimpan
+dan memulihkan status fragmen bila diperlukan. Tag ini juga memungkinkan Anda mendapatkan handle ke
+fragmen dengan memanggil {@link android.support.v4.app.FragmentManager#findFragmentByTag
+findFragmentByTag()}.</p>
+
+
+
+
+<h2 id="FullscreenDialog">Menampilkan Dialog sebagai Layar Penuh atau Fragmen Tertanam</h2>
+
+<p>Anda mungkin memiliki desain UI yang di dalamnya Anda ingin UI muncul sebagai dialog dalam beberapa
+situasi, namun sebagai layar penuh atau fragmen tertanam dalam situasi lain (mungkin bergantung pada apakah
+perangkat memiliki layar besar atau layar kecil). Kelas {@link android.support.v4.app.DialogFragment}
+menawarkan fleksibilitas ini karena masih bisa berperilaku sebagai {@link
+android.support.v4.app.Fragment} yang bisa ditanamkan.</p>
+
+<p>Akan tetapi, dalam hal ini Anda tidak bisa menggunakan {@link android.app.AlertDialog.Builder AlertDialog.Builder}
+atau objek {@link android.app.Dialog} lain untuk membangun dialog. Jika
+Anda ingin {@link android.support.v4.app.DialogFragment}
+bisa ditanamkan, Anda harus mendefinisikan dialog UI dalam layout, lalu memuat layout itu dalam metode callback
+{@link android.support.v4.app.DialogFragment#onCreateView
+onCreateView()}.</p>
+
+<p>Berikut ini adalah contoh {@link android.support.v4.app.DialogFragment} yang bisa muncul sebagai
+dialog maupun fragmen yang bisa ditanamkan (menggunakan layout bernama <code>purchase_items.xml</code>):</p>
+
+<pre>
+public class CustomDialogFragment extends DialogFragment {
+ /** The system calls this to get the DialogFragment's layout, regardless
+ of whether it's being displayed as a dialog or an embedded fragment. */
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout to use as dialog or embedded fragment
+ return inflater.inflate(R.layout.purchase_items, container, false);
+ }
+
+ /** The system calls this only when creating the layout in a dialog. */
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ // The only reason you might override this method when using onCreateView() is
+ // to modify any dialog characteristics. For example, the dialog includes a
+ // title by default, but your custom layout might not need it. So here you can
+ // remove the dialog title, but you must call the superclass to get the Dialog.
+ Dialog dialog = super.onCreateDialog(savedInstanceState);
+ dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
+ return dialog;
+ }
+}
+</pre>
+
+<p>Dan berikut ini adalah beberapa kode yang memutuskan apakah akan menampilkan fragmen sebagai dialog
+atau UI layar penuh, berdasarkan ukuran layar:</p>
+
+<pre>
+public void showDialog() {
+ FragmentManager fragmentManager = getSupportFragmentManager();
+ CustomDialogFragment newFragment = new CustomDialogFragment();
+
+ if (mIsLargeLayout) {
+ // The device is using a large layout, so show the fragment as a dialog
+ newFragment.show(fragmentManager, "dialog");
+ } else {
+ // The device is smaller, so show the fragment fullscreen
+ FragmentTransaction transaction = fragmentManager.beginTransaction();
+ // For a little polish, specify a transition animation
+ transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
+ // To make it fullscreen, use the 'content' root view as the container
+ // for the fragment, which is always the root view for the activity
+ transaction.add(android.R.id.content, newFragment)
+ .addToBackStack(null).commit();
+ }
+}
+</pre>
+
+<p>Untuk informasi selengkapnya tentang melakukan transaksi fragmen, lihat panduan
+<a href="{@docRoot}guide/components/fragments.html">Fragmen</a>.</p>
+
+<p>Dalam contoh ini, nilai boolean <code>mIsLargeLayout</code> menentukan apakah perangkat saat ini
+harus menggunakan desain layout besar aplikasi (dan dengan demikian menampilkan fragmen ini sebagai dialog, bukan
+layar penuh). Cara terbaik untuk mengatur jenis boolean ini adalah mendeklarasikan
+<a href="{@docRoot}guide/topics/resources/more-resources.html#Bool">nilai sumber daya boolean</a>
+dengan nilai <a href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">sumber daya alternatif</a> untuk berbagai ukuran layar. Misalnya, berikut ini adalah dua
+versi sumber daya boolean untuk berbagai ukuran layar:</p>
+
+<p class="code-caption">res/values/bools.xml</p>
+<pre>
+<!-- Default boolean values -->
+<resources>
+ <bool name="large_layout">false</bool>
+</resources>
+</pre>
+
+<p class="code-caption">res/values-large/bools.xml</p>
+<pre>
+<!-- Large screen boolean values -->
+<resources>
+ <bool name="large_layout">true</bool>
+</resources>
+</pre>
+
+<p>Selanjutnya Anda bisa menetapkan nilai {@code mIsLargeLayout} selama
+metode {@link android.app.Activity#onCreate onCreate()} aktivitas:</p>
+
+<pre>
+boolean mIsLargeLayout;
+
+@Override
+public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+
+ mIsLargeLayout = getResources().getBoolean(R.bool.large_layout);
+}
+</pre>
+
+
+
+<h3 id="ActivityAsDialog">Menampilkan aktivitas sebagai dialog pada layar besar</h3>
+
+<p>Sebagai ganti menampilkan dialog berupa UI layar penuh saat di layar kecil, Anda bisa memperoleh
+hasil yang sama dengan menampilkan {@link android.app.Activity} sebagai dialog saat di
+layar besar. Pendekatan yang Anda pilih bergantung pada desain aplikasi, namun
+menampilkan aktivitas sebagai dialog sering kali berguna bila aplikasi Anda sudah didesain untuk
+layar kecil dan Anda ingin meningkatkan pengalaman pada tablet dengan menampilkan aktivitas berjangka pendek
+sebagai dialog.</p>
+
+<p>Untuk menampilkan aktivitas sebagai dialog hanya saat di layar besar,
+terapkan tema {@link android.R.style#Theme_Holo_DialogWhenLarge Theme.Holo.DialogWhenLarge}
+ pada elemen manifes <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
+<activity>}</a>:</p>
+
+<pre>
+<activity android:theme="@android:style/Theme.Holo.DialogWhenLarge" >
+</pre>
+
+<p>Untuk informasi selengkapnya tentang mengatur gaya aktivitas Anda dengan tema, lihat panduan <a href="{@docRoot}guide/topics/ui/themes.html">Gaya dan Tema</a>.</p>
+
+
+
+<h2 id="DismissingADialog">Menutup Dialog</h2>
+
+<p>Bila pengguna menyentuh salah satu tombol tindakan yang dibuat dengan
+{@link android.app.AlertDialog.Builder}, sistem akan menutup dialog untuk Anda.</p>
+
+<p>Sistem juga menutup dialog bila pengguna menyentuh sebuah item dalam daftar dialog, kecuali
+bila daftar itu menggunakan tombol radio atau kotak cek. Jika tidak, Anda bisa menutup dialog secara manual
+dengan memanggil {@link android.support.v4.app.DialogFragment#dismiss()} pada {@link
+android.support.v4.app.DialogFragment} Anda.</p>
+
+<p>Jika Anda perlu melakukan
+tindakan tertentu saat dialog menghilang, Anda bisa menerapkan metode {@link
+android.support.v4.app.DialogFragment#onDismiss onDismiss()} dalam {@link
+android.support.v4.app.DialogFragment} Anda.</p>
+
+<p>Anda juga bisa <em>membatalkan</em> dialog. Ini merupakan kejadian khusus yang menunjukkan bahwa pengguna
+secara eksplisit meninggalkan dialog tanpa menyelesaikan tugas. Hal ini terjadi jika pengguna menekan tombol
+<em>Back</em>, menyentuh layar di luar area dialog,
+atau jika Anda secara eksplisit memanggil {@link android.app.Dialog#cancel()} pada {@link
+android.app.Dialog} (seperti saat merespons tombol "Cancel" dalam dialog).</p>
+
+<p>Seperti yang ditampilkan dalam contoh di atas, Anda bisa merespons kejadian batal dengan menerapkan
+{@link android.support.v4.app.DialogFragment#onCancel onCancel()} dalam kelas {@link
+android.support.v4.app.DialogFragment} Anda.</p>
+
+<p class="note"><strong>Catatan:</strong> Sistem akan memanggil
+{@link android.support.v4.app.DialogFragment#onDismiss onDismiss()} pada tiap kejadian yang
+memanggil callback {@link android.support.v4.app.DialogFragment#onCancel onCancel()}. Akan tetapi,
+jika Anda memanggil {@link android.app.Dialog#dismiss Dialog.dismiss()} atau {@link
+android.support.v4.app.DialogFragment#dismiss DialogFragment.dismiss()},
+sistem akan memanggil {@link android.support.v4.app.DialogFragment#onDismiss onDismiss()} <em>namun
+bukan</em> {@link android.support.v4.app.DialogFragment#onCancel onCancel()}. Jadi biasanya Anda harus
+memanggil {@link android.support.v4.app.DialogFragment#dismiss dismiss()} bila pengguna menekan tombol
+<em>positif</em> dalam dialog untuk menghilangkan tampilan dialog.</p>
+
+
diff --git a/docs/html-intl/intl/id/guide/topics/ui/menus.jd b/docs/html-intl/intl/id/guide/topics/ui/menus.jd
new file mode 100644
index 0000000..1ee0244
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/topics/ui/menus.jd
@@ -0,0 +1,1031 @@
+page.title=Menu
+parent.title=Antarmuka Pengguna
+parent.link=index.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+ <h2>Dalam dokumen ini</h2>
+<ol>
+ <li><a href="#xml">Mendefinisikan Menu dalam XML</a></li>
+ <li><a href="#options-menu">Membuat Menu Opsi</a>
+ <ol>
+ <li><a href="#RespondingOptionsMenu">Menangani kejadian klik</a></li>
+ <li><a href="#ChangingTheMenu">Mengubah item menu saat runtime</a></li>
+ </ol>
+ </li>
+ <li><a href="#context-menu">Membuat Menu Kontekstual</a>
+ <ol>
+ <li><a href="#FloatingContextMenu">Membuat menu konteks mengambang</a></li>
+ <li><a href="#CAB">Menggunakan mode tindakan kontekstual</a></li>
+ </ol>
+ </li>
+ <li><a href="#PopupMenu">Membuat Menu Popup</a>
+ <ol>
+ <li><a href="#PopupEvents">Menangani kejadian klik</a></li>
+ </ol>
+ </li>
+ <li><a href="#groups">Membuat Grup Menu</a>
+ <ol>
+ <li><a href="#checkable">Menggunakan item menu yang bisa diberi tanda cek</a></li>
+ </ol>
+ </li>
+ <li><a href="#intents">Menambahkan Item Menu Berdasarkan Intent</a>
+ <ol>
+ <li><a href="#AllowingToAdd">Memungkinkan aktivitas Anda ditambahkan ke menu lain</a></li>
+ </ol>
+ </li>
+</ol>
+
+ <h2>Kelas-kelas utama</h2>
+ <ol>
+ <li>{@link android.view.Menu}</li>
+ <li>{@link android.view.MenuItem}</li>
+ <li>{@link android.view.ContextMenu}</li>
+ <li>{@link android.view.ActionMode}</li>
+ </ol>
+
+ <h2>Lihat juga</h2>
+ <ol>
+ <li><a href="{@docRoot}guide/topics/ui/actionbar.html">Action-Bar</a></li>
+ <li><a href="{@docRoot}guide/topics/resources/menu-resource.html">Sumber Daya Menu</a></li>
+ <li><a href="http://android-developers.blogspot.com/2012/01/say-goodbye-to-menu-button.html">Ucapkan
+Selamat Tinggal pada Tombol Menu</a></li>
+ </ol>
+</div>
+</div>
+
+<p>Menu adalah komponen antarmuka pengguna yang lazim dalam banyak tipe aplikasi. Untuk menyediakan pengalaman pengguna yang sudah akrab
+dan konsisten, Anda harus menggunakan API {@link android.view.Menu} untuk menyajikan
+tindakan dan opsi lain dalam aktivitas kepada pengguna.</p>
+
+<p>Mulai dengan Android 3.0 (API level 11), perangkat berbasis Android tidak perlu lagi
+menyediakan tombol <em>Menu</em> tersendiri. Dengan perubahan ini, aplikasi Android harus bermigrasi dari
+dependensi pada panel menu 6 item biasa, dan sebagai ganti menyediakan action-bar untuk menyajikan
+berbagai tindakan pengguna yang lazim.</p>
+
+<p>Walaupun desain dan pengalaman pengguna untuk sebagian item menu telah berubah, semantik untuk mendefinisikan
+serangkaian tindakan dan opsi masih berdasarkan pada API {@link android.view.Menu}. Panduan ini
+menampilkan cara membuat tiga tipe dasar penyajian menu atau tindakan pada semua
+versi Android:</p>
+
+<dl>
+ <dt><strong>Menu opsi dan action-bar</strong></dt>
+ <dd><a href="#options-menu">Menu opsi</a> adalah kumpulan item menu utama untuk suatu
+aktivitas. Inilah tempat Anda harus menempatkan tindakan yang berdampak global pada aplikasi, seperti
+"Cari", "Tulis email", dan "Pengaturan".
+ <p>Jika Anda mengembangkan aplikasi untuk Android 2.3 atau yang lebih rendah, pengguna bisa
+menampilkan panel menu opsi dengan menekan tombol <em>Menu</em>.</p>
+ <p>Pada Android 3.0 dan yang lebih tinggi, item menu opsi disajikan melalui <a href="{@docRoot}guide/topics/ui/actionbar.html">action-bar</a> sebagai kombinasi item tindakan
+di layar dan opsi overflow. Mulai dengan Android 3.0, tombol <em>Menu</em> dihilangkan (sebagian
+perangkat
+tidak memilikinya), sehingga Anda harus bermigrasi ke penggunaan action-bar untuk menyediakan akses ke tindakan dan
+opsi lainnya.</p>
+ <p>Lihat bagian tentang <a href="#options-menu">Membuat Menu Opsi</a>.</p>
+ </dd>
+
+ <dt><strong>Menu konteks dan mode tindakan kontekstual</strong></dt>
+
+ <dd>Menu konteks adalah <a href="#FloatingContextMenu">menu mengambang</a> yang muncul saat
+pengguna mengklik lama pada suatu elemen. Menu ini menyediakan tindakan yang memengaruhi konten atau
+bingkai konteks yang dipilih.
+ <p>Saat mengembangkan aplikasi untuk Android 3.0 dan yang lebih tinggi, sebagai gantinya Anda harus menggunakan <a href="#CAB">mode tindakan kontekstual</a> untuk memungkinkan tindakan pada konten yang dipilih. Mode ini menampilkan
+item tindakan yang memengaruhi konten yang dipilih dalam baris di bagian atas layar dan memungkinkan pengguna
+memilih beberapa item sekaligus.</p>
+ <p>Lihat bagian tentang <a href="#context-menu">Membuat Menu Kontekstual</a>.</p>
+</dd>
+
+ <dt><strong>Menu popup</strong></dt>
+ <dd>Menu popup menampilkan daftar item secara vertikal yang dipasang pada tampilan yang
+memanggil menu. Ini cocok untuk menyediakan kelebihan tindakan yang terkait dengan konten tertentu atau
+untuk menyediakan opsi bagi bagian kedua dari suatu perintah. Tindakan di menu popup
+<strong>tidak</strong> boleh memengaruhi secara langsung konten yang bersangkutan—yang diperuntukkan bagi
+tindakan kontekstual. Melainkan, menu popup adalah untuk tindakan tambahan yang terkait dengan wilayah konten dalam
+aktivitas Anda.
+ <p>Lihat bagian tentang <a href="#PopupMenu">Membuat Menu Popup</a>.</p>
+</dd>
+</dl>
+
+
+
+<h2 id="xml">Mendefinisikan Menu dalam XML</h2>
+
+<p>Untuk semua tipe menu, Android menyediakan sebuah format XML standar untuk mendefinisikan item menu.
+Sebagai ganti membuat menu dalam kode aktivitas, Anda harus mendefinisikan menu dan semua itemnya dalam
+<a href="{@docRoot}guide/topics/resources/menu-resource.html">sumber daya menu</a> XML. Anda kemudian bisa
+memekarkan sumber daya menu (memuatnya sebagai objek {@link android.view.Menu}) dalam aktivitas atau
+fragmen.</p>
+
+<p>Menggunakan sumber daya menu adalah praktik yang baik karena beberapa alasan:</p>
+<ul>
+ <li>Memvisualisasikan struktur menu dalam XML menjadi lebih mudah.</li>
+ <li>Cara ini memisahkan konten untuk menu dari kode perilaku aplikasi Anda.</li>
+ <li>Cara ini memungkinkan Anda membuat konfigurasi menu alternatif untuk berbagai versi platform,
+ukuran layar, dan konfigurasi lainnya dengan memanfaatkan kerangka kerja <a href="{@docRoot}guide/topics/resources/index.html">sumber daya aplikasi</a>.</li>
+</ul>
+
+<p>Untuk mendefinisikan menu, buatlah sebuah file XML dalam direktori <code>res/menu/</code>
+proyek dan buat menu dengan elemen-elemen berikut:</p>
+<dl>
+ <dt><code><menu></code></dt>
+ <dd>Mendefinisikan {@link android.view.Menu}, yang merupakan sebuah kontainer untuk item menu. Elemen
+<code><menu></code> harus menjadi simpul akar untuk file dan bisa menampung salah satu atau beberapa dari elemen
+<code><item></code> dan <code><group></code>.</dd>
+
+ <dt><code><item></code></dt>
+ <dd>Membuat {@link android.view.MenuItem}, yang mewakili satu item menu. Elemen ini
+bisa berisi elemen <code><menu></code> tersarang guna untuk membuat submenu.</dd>
+
+ <dt><code><group></code></dt>
+ <dd>Kontainer opsional tak terlihat untuk elemen-elemen {@code <item>}. Kontainer ini memungkinkan Anda
+mengelompokkan item menu untuk berbagi properti seperti status aktif dan visibilitas. Untuk informasi
+selengkapnya, lihat bagian tentang <a href="#groups">Membuat Grup Menu</a>.</dd>
+</dl>
+
+
+<p>Berikut ini adalah contoh menu bernama <code>game_menu.xml</code>:</p>
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:id="@+id/new_game"
+ android:icon="@drawable/ic_new_game"
+ android:title="@string/new_game"
+ android:showAsAction="ifRoom"/>
+ <item android:id="@+id/help"
+ android:icon="@drawable/ic_help"
+ android:title="@string/help" />
+</menu>
+</pre>
+
+<p>Elemen <code><item></code> mendukung beberapa atribut yang bisa Anda gunakan untuk mendefinisikan penampilan dan perilaku
+item. Item menu di atas mencakup atribut berikut:</p>
+
+<dl>
+ <dt>{@code android:id}</dt>
+ <dd>ID sumber daya unik bagi item, yang memungkinkan aplikasi mengenali item
+bila pengguna memilihnya.</dd>
+ <dt>{@code android:icon}</dt>
+ <dd>Acuan ke drawable untuk digunakan sebagai ikon item.</dd>
+ <dt>{@code android:title}</dt>
+ <dd>Acuan ke string untuk digunakan sebagai judul item.</dd>
+ <dt>{@code android:showAsAction}</dt>
+ <dd>Menetapkan waktu dan cara item ini muncul sebagai item tindakan di <a href="{@docRoot}guide/topics/ui/actionbar.html">action-bar</a>.</dd>
+</dl>
+
+<p>Ini adalah atribut-atribut terpenting yang harus Anda gunakan, namun banyak lagi yang tersedia.
+Untuk informasi tentang semua atribut yang didukung, lihat dokumen <a href="{@docRoot}guide/topics/resources/menu-resource.html">Sumber Daya Menu</a>.</p>
+
+<p>Anda bisa menambahkan submenu ke sebuah item di menu (kecuali submenu) apa saja dengan menambahkan elemen {@code <menu>}
+sebagai anak {@code <item>}. Submenu berguna saat aplikasi Anda memiliki banyak
+fungsi yang bisa ditata ke dalam topik-topik, seperti item dalam sebuah baris menu aplikasi PC (File,
+Edit, Lihat, dsb.). Misalnya:</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:id="@+id/file"
+ android:title="@string/file" >
+ <!-- "file" submenu -->
+ <menu>
+ <item android:id="@+id/create_new"
+ android:title="@string/create_new" />
+ <item android:id="@+id/open"
+ android:title="@string/open" />
+ </menu>
+ </item>
+</menu>
+</pre>
+
+<p>Untuk menggunakan menu dalam aktivitas, Anda perlu memekarkan sumber daya menu (mengonversi sumber daya XML
+menjadi objek yang bisa diprogram) dengan menggunakan {@link android.view.MenuInflater#inflate(int,Menu)
+MenuInflater.inflate()}. Di bagian berikut, Anda akan melihat cara memekarkan menu untuk tiap
+tipe menu.</p>
+
+
+
+<h2 id="options-menu">Membuat Menu Opsi</h2>
+
+<div class="figure" style="width:200px;margin:0">
+ <img src="{@docRoot}images/options_menu.png" height="333" alt="" />
+ <p class="img-caption"><strong>Gambar 1.</strong> Menu opsi di
+Browser, pada Android 2.3.</p>
+</div>
+
+<p>Menu opsi adalah tempat Anda harus menyertakan tindakan dan opsi lain yang relevan dengan
+konteks aktivitas saat ini, seperti "Cari", "Tulis email", dan "Pengaturan".</p>
+
+<p>Tempat item dalam menu opsi muncul di layar bergantung pada versi aplikasi yang Anda
+kembangkan:</p>
+
+<ul>
+ <li>Jika Anda mengembangkan aplikasi untuk <strong>Android 2.3.x (API level 10) atau
+yang lebih rendah</strong>, konten menu opsi muncul pada bagian bawah layar bila pengguna
+menekan tombol <em>Menu</em>, seperti yang ditampilkan dalam gambar 1. Bila dibuka, bagian yang terlihat pertama adalah
+menu
+ikon, yang menampung hingga enam item menu. Jika menu Anda menyertakan lebih dari enam item, Android akan meletakkan
+item keenam dan sisanya ke dalam menu kelebihan, yang bisa dibuka pengguna dengan memilih
+<em>More</em>.</li>
+
+ <li>Jika Anda mengembangkan aplikasi untuk <strong>Android 3.0 (API level 11) dan
+yang lebih tinggi</strong>, item menu opsi tersedia dalam <a href="{@docRoot}guide/topics/ui/actionbar.html">action-bar</a>. Secara default, sistem
+meletakkan semua item dalam kelebihan tindakan, yang bisa ditampilkan pengguna dengan ikon kelebihan tindakan di
+sisi kanan action-bar (atau dengan menekan tombol <em>Menu</em> perangkat, jika tersedia). Untuk
+mengaktifkan
+akses cepat ke tindakan penting, Anda bisa mempromosikan beberapa item agar muncul pada action-bar dengan menambahkan
+{@code android:showAsAction="ifRoom"} ke elemen-elemen {@code <item>} yang bersangkutan (lihat gambar
+2). <p>Untuk informasi selengkapnya tentang item tindakan dan perilaku action-bar lainnya, lihat panduan <a href="{@docRoot}guide/topics/ui/actionbar.html">Action-Bar</a>. </p>
+<p class="note"><strong>Catatan:</strong> Sekalipun Anda <em>tidak</em> mengembangkan aplikasi untuk Android 3.0 atau
+yang lebih tinggi, Anda bisa membuat layout action-bar sendiri untuk mendapatkan efek serupa. Untuk contoh cara
+mendukung versi Android yang lebih lama dengan action-bar, lihat contoh <a href="{@docRoot}resources/samples/ActionBarCompat/index.html">Kompatibilitas Action-Bar</a>
+.</p>
+</li>
+</ul>
+
+<img src="{@docRoot}images/ui/actionbar.png" alt="" />
+<p class="img-caption"><strong>Gambar 2.</strong> Action-bar dari aplikasi <a href="{@docRoot}resources/samples/HoneycombGallery/index.html">Honeycomb Gallery</a>, yang menampilkan
+tab-tab navigasi dan item tindakan kamera (plus tombol kelebihan tindakan).</p>
+
+<p>Anda bisa mendeklarasikan item untuk menu opsi dari subkelas {@link android.app.Activity}
+atau subkelas {@link android.app.Fragment}. Jika aktivitas maupun fragmen Anda
+mendeklarasikan item menu opsi, keduanya akan dikombinasikan dalam UI. Item aktivitas akan muncul
+lebih dahulu, diikuti oleh item tiap fragmen sesuai dengan urutan penambahan fragmen ke
+aktivitas. Jika perlu, Anda bisa menyusun ulang item menu dengan atribut {@code android:orderInCategory}
+dalam setiap {@code <item>} yang perlu Anda pindahkan.</p>
+
+<p>Untuk menetapkan menu opsi suatu aktivitas, kesampingkan {@link
+android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} (fragmen-fragmen menyediakan
+callback {@link android.app.Fragment#onCreateOptionsMenu onCreateOptionsMenu()} sendiri). Dalam metode ini
+, Anda bisa memekarkan sumber daya menu (<a href="#xml">yang didefinisikan dalam XML</a>) menjadi {@link
+android.view.Menu} yang disediakan dalam callback. Misalnya:</p>
+
+<pre>
+@Override
+public boolean onCreateOptionsMenu(Menu menu) {
+ MenuInflater inflater = {@link android.app.Activity#getMenuInflater()};
+ inflater.inflate(R.menu.game_menu, menu);
+ return true;
+}
+</pre>
+
+<p>Anda juga bisa menambahkan item menu dengan menggunakan {@link android.view.Menu#add(int,int,int,int)
+add()} dan mengambil item dengan {@link android.view.Menu#findItem findItem()} untuk merevisi propertinya
+dengan API {@link android.view.MenuItem}.</p>
+
+<p>Jika Anda mengembangkan aplikasi untuk Android 2.3.x dan yang lebih rendah, sistem akan memanggil {@link
+android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} untuk membuat menu opsi
+bila pengguna membuka menu untuk pertama kali. Jika Anda mengembangkan aplikasi untuk Android 3.0 dan yang lebih tinggi,
+sistem akan memanggil {@link android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} saat
+memulai aktivitas, untuk menampilkan item menu pada action-bar.</p>
+
+
+
+<h3 id="RespondingOptionsMenu">Menangani kejadian klik</h3>
+
+<p>Bila pengguna memilih item dari menu opsi (termasuk item tindakan dalam action-bar),
+sistem akan memanggil metode {@link android.app.Activity#onOptionsItemSelected(MenuItem)
+onOptionsItemSelected()} aktivitas Anda. Metode ini meneruskan {@link android.view.MenuItem} yang dipilih. Anda
+bisa mengidentifikasi item dengan memanggil {@link android.view.MenuItem#getItemId()}, yang menghasilkan
+ID unik untuk item menu itu (yang didefinisikan oleh atribut {@code android:id} dalam sumber daya menu atau dengan
+integer yang diberikan ke metode {@link android.view.Menu#add(int,int,int,int) add()}). Anda bisa mencocokkan
+ID ini dengan item menu yang diketahui untuk melakukan tindakan yang sesuai. Misalnya:</p>
+
+<pre>
+@Override
+public boolean onOptionsItemSelected(MenuItem item) {
+ // Handle item selection
+ switch (item.getItemId()) {
+ case R.id.new_game:
+ newGame();
+ return true;
+ case R.id.help:
+ showHelp();
+ return true;
+ default:
+ return super.onOptionsItemSelected(item);
+ }
+}
+</pre>
+
+<p>Bila Anda berhasil menangani sebuah item menu, kembalikan {@code true}. Jika tidak menangani item menu
+, Anda harus memanggil implementasi superkelas {@link
+android.app.Activity#onOptionsItemSelected(MenuItem) onOptionsItemSelected()} (implementasi default
+menghasilkan false).</p>
+
+<p>Jika aktivitas Anda menyertakan fragmen, sistem akan memanggil lebih dahulu {@link
+android.app.Activity#onOptionsItemSelected(MenuItem) onOptionsItemSelected()} untuk aktivitas, kemudian
+untuk setiap fragmen (sesuai dengan urutan penambahan fragmen) hingga satu fragmen mengembalikan
+{@code true} atau semua fragmen telah dipanggil.</p>
+
+<p class="note"><strong>Tip:</strong> Android 3.0 menambahkan kemampuan mendefinisikan perilaku on-click
+untuk item menu dalam XML, dengan menggunakan atribut {@code android:onClick}. Nilai atribut
+harus berupa nama metode yang didefinisikan aktivitas dengan menggunakan menu. Metode
+harus bersifat publik dan menerima satu parameter {@link android.view.MenuItem}—bila sistem
+memanggilnya, metode ini akan meneruskan item menu yang dipilih. Untuk informasi selengkapnya dan contoh, lihat dokumen <a href="{@docRoot}guide/topics/resources/menu-resource.html">Sumber Daya Menu</a>.</p>
+
+<p class="note"><strong>Tip:</strong> Jika aplikasi Anda berisi banyak aktivitas dan
+sebagian menyediakan menu opsi yang sama, pertimbangkan untuk membuat
+aktivitas yang tidak mengimplementasikan apa-apa kecuali metode {@link android.app.Activity#onCreateOptionsMenu(Menu)
+onCreateOptionsMenu()} dan {@link android.app.Activity#onOptionsItemSelected(MenuItem)
+onOptionsItemSelected()}. Kemudian perluas kelas ini untuk setiap aktivitas yang harus menggunakan
+menu opsi yang sama. Dengan begini, Anda bisa mengelola satu set kode untuk menangani tindakan menu
+dan setiap kelas turunan mewarisi perilaku menu.
+Jika ingin menambahkan item menu ke salah satu aktivitas turunan,
+kesampingkan {@link android.app.Activity#onCreateOptionsMenu(Menu)
+onCreateOptionsMenu()} dalam aktivitas itu. Panggil {@code super.onCreateOptionsMenu(menu)} agar
+item menu asli dibuat, kemudian tambahkan item menu yang baru dengan {@link
+android.view.Menu#add(int,int,int,int) menu.add()}. Anda juga bisa mengesampingkan
+perilaku superkelas untuk setiap item menu.</p>
+
+
+<h3 id="ChangingTheMenu">Mengubah item menu saat runtime</h3>
+
+<p>Setelah sistem memanggil {@link android.app.Activity#onCreateOptionsMenu(Menu)
+onCreateOptionsMenu()}, sistem akan mempertahankan instance {@link android.view.Menu} yang Anda tempatkan dan
+tidak akan memanggil {@link android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()}
+lagi kecuali menu diinvalidkan karena suatu alasan. Akan tetapi, Anda harus menggunakan {@link
+android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} hanya untuk membuat
+status menu awal dan tidak untuk membuat perubahan selama daur hidup aktivitas.</p>
+
+<p>Jika Anda ingin mengubah menu opsi berdasarkan
+kejadian yang terjadi selama daur hidup aktivitas, Anda bisa melakukannya dalam metode
+{@link android.app.Activity#onPrepareOptionsMenu(Menu) onPrepareOptionsMenu()}. Metode ini
+meneruskan objek {@link android.view.Menu} sebagaimana adanya saat ini sehingga Anda bisa mengubahnya,
+seperti menambah, menghapus, atau menonaktifkan item. (Fragmen juga menyediakan callback {@link
+android.app.Fragment#onPrepareOptionsMenu onPrepareOptionsMenu()}.)</p>
+
+<p>Pada Android 2.3.x dan yang lebih rendah, sistem akan memanggil {@link
+android.app.Activity#onPrepareOptionsMenu(Menu)
+onPrepareOptionsMenu()} setiap kali pengguna membuka menu opsi (menekan tombol <em>Menu</em>
+).</p>
+
+<p>Pada Android 3.0 dan yang lebih tinggi, menu opsi dianggap sebagai selalu terbuka saat item menu
+ditampilkan pada action-bar. Bila ada kejadian dan Anda ingin melakukan pembaruan menu, Anda harus
+memanggil {@link android.app.Activity#invalidateOptionsMenu invalidateOptionsMenu()} untuk meminta
+sistem memanggil {@link android.app.Activity#onPrepareOptionsMenu(Menu) onPrepareOptionsMenu()}.</p>
+
+<p class="note"><strong>Catatan:</strong>
+Anda tidak boleh mengubah item dalam menu opsi berdasarkan {@link android.view.View} yang saat ini
+difokus. Saat dalam mode sentuh (bila pengguna tidak sedang menggunakan trackball atau d-pad), tampilan
+tidak bisa mengambil fokus, sehingga Anda tidak boleh menggunakan fokus sebagai dasar untuk mengubah
+item dalam menu opsi. Jika Anda ingin menyediakan item menu yang peka konteks pada {@link
+android.view.View}, gunakan <a href="#context-menu">Menu Konteks</a>.</p>
+
+
+
+
+<h2 id="context-menu">Membuat Menu Kontekstual</h2>
+
+<div class="figure" style="width:420px;margin-top:-1em">
+ <img src="{@docRoot}images/ui/menu-context.png" alt="" />
+ <p class="img-caption"><strong>Gambar 3.</strong> Cuplikan layar menu konteks mengambang (kiri)
+dan action-bar kontekstual (kanan).</p>
+</div>
+
+<p>Menu kontekstual menawarkan tindakan yang memengaruhi item atau bingkai konteks tertentu dalam UI. Anda
+bisa menyediakan menu konteks untuk setiap tampilan, tetapi menu ini paling sering digunakan untuk item pada {@link
+android.widget.ListView}, {@link android.widget.GridView}, atau kumpulan tampilan lainnya yang bisa digunakan
+pengguna untuk melakukan tindakan langsung pada setiap item.</p>
+
+<p>Ada dua cara menyediakan tindakan kontekstual:</p>
+<ul>
+ <li>Dalam <a href="#FloatingContextMenu">menu konteks mengambang</a>. Menu muncul sebagai
+daftar item menu mengambang (serupa dengan dialog) bila pengguna mengklik lama (menekan dan
+menahan) pada tampilan yang mendeklarasikan dukungan bagi menu konteks. Pengguna bisa melakukan
+tindakan kontekstual pada satu item untuk setiap kalinya.</li>
+
+ <li>Dalam <a href="#CAB">mode tindakan kontekstual</a>. Mode ini adalah implementasi sistem
+{@link android.view.ActionMode} yang menampilkan <em>action-bar kontekstual</em> di bagian atas
+layar dengan item tindakan yang memengaruhi item(-item) yang dipilih. Bila mode ini aktif, pengguna
+bisa melakukan tindakan pada beberapa item sekaligus (jika aplikasi Anda mengizinkannya).</li>
+</ul>
+
+<p class="note"><strong>Catatan:</strong> Mode tindakan kontekstual tersedia pada Android 3.0 (API
+level 11) dan yang lebih tinggi dan merupakan teknik yang lebih disukai untuk menampilkan tindakan kontekstual bila
+tersedia. Jika aplikasi Anda mendukung versi yang lebih rendah daripada 3.0, maka Anda harus mundur ke
+menu konteks mengambang pada perangkat-perangkat itu.</p>
+
+
+<h3 id="FloatingContextMenu">Membuat menu konteks mengambang</h3>
+
+<p>Untuk menyediakan menu konteks mengambang:</p>
+<ol>
+ <li>Daftarkan {@link android.view.View} ke menu konteks yang harus dikaitkan dengan
+memanggil {@link android.app.Activity#registerForContextMenu(View) registerForContextMenu()} dan teruskan
+{@link android.view.View} ke menu itu.
+ <p>Jika aktivitas Anda menggunakan {@link android.widget.ListView} atau {@link android.widget.GridView} dan
+Anda ingin setiap item untuk menyediakan menu konteks yang sama, daftarkan semua item ke menu konteks dengan
+meneruskan {@link android.widget.ListView} atau {@link android.widget.GridView} ke {@link
+android.app.Activity#registerForContextMenu(View) registerForContextMenu()}.</p>
+</li>
+
+ <li>Implementasikan metode {@link
+android.view.View.OnCreateContextMenuListener#onCreateContextMenu onCreateContextMenu()}
+dalam {@link android.app.Activity} atau {@link android.app.Fragment} Anda.
+ <p>Bila tampilan yang terdaftar menerima kejadian klik-lama, sistem akan memanggil metode {@link
+android.view.View.OnCreateContextMenuListener#onCreateContextMenu onCreateContextMenu()}
+Anda. Inilah tempat Anda mendefinisikan item menu, biasanya dengan memekarkan sumber daya menu. Misalnya:
+</p>
+<pre>
+@Override
+public void onCreateContextMenu(ContextMenu menu, View v,
+ ContextMenuInfo menuInfo) {
+ super.onCreateContextMenu(menu, v, menuInfo);
+ MenuInflater inflater = getMenuInflater();
+ inflater.inflate(R.menu.context_menu, menu);
+}
+</pre>
+
+<p>{@link android.view.MenuInflater} memungkinkan Anda untuk memekarkan menu konteks <a href="{@docRoot}guide/topics/resources/menu-resource.html">sumber daya menu</a>. Parameter metode callback
+menyertakan {@link android.view.View}
+yang dipilih pengguna dan objek {@link android.view.ContextMenu.ContextMenuInfo} yang menyediakan
+informasi tambahan tentang item yang dipilih. Jika aktivitas Anda memiliki beberapa tampilan yang masing-masingnya menyediakan
+menu konteks berbeda, Anda bisa menggunakan parameter ini untuk menentukan menu konteks yang harus
+dimekarkan.</p>
+</li>
+
+<li>Implementasikan {@link android.app.Activity#onContextItemSelected(MenuItem)
+onContextItemSelected()}.
+ <p>Bila pengguna memilih item menu, sistem akan memanggil metode ini sehingga Anda bisa melakukan
+tindakan yang sesuai. Misalnya:</p>
+
+<pre>
+@Override
+public boolean onContextItemSelected(MenuItem item) {
+ AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
+ switch (item.getItemId()) {
+ case R.id.edit:
+ editNote(info.id);
+ return true;
+ case R.id.delete:
+ deleteNote(info.id);
+ return true;
+ default:
+ return super.onContextItemSelected(item);
+ }
+}
+</pre>
+
+<p>Metode {@link android.view.MenuItem#getItemId()} melakukan query ID untuk
+item menu yang dipilih, yang harus Anda tetapkan ke setiap item menu dalam XML dengan menggunakan atribut {@code
+android:id}, seperti yang ditampilkan di bagian tentang <a href="#xml">Mendefinisikan Menu dalam
+XML</a>.</p>
+
+<p>Bila Anda berhasil menangani sebuah item menu, kembalikan {@code true}. Jika tidak menangani item menu,
+Anda harus meneruskan item menu ke implementasi superkelas. Jika aktivitas Anda menyertakan fragmen,
+aktivitas akan menerima callback ini lebih dahulu. Dengan memanggil superkelas bila tidak ditangani, sistem
+meneruskan kejadian ke metode callback di setiap fragmen, satu per satu (sesuai dengan urutan
+penambahan fragmen) hingga {@code true} atau {@code false} dikembalikan. (Implementasi default
+untuk {@link android.app.Activity} dan {@code android.app.Fragment} mengembalikan {@code
+false}, sehingga Anda harus selalu memanggil superkelas bila tidak ditangani.)</p>
+</li>
+</ol>
+
+
+<h3 id="CAB">Menggunakan mode tindakan kontekstual</h3>
+
+<p>Mode tindakan kontekstual adalah implementasi sistem {@link android.view.ActionMode} yang
+memfokuskan interaksi pengguna pada upaya melakukan tindakan kontekstual. Bila seorang
+pengguna mengaktifkan mode ini dengan memilih item, <em>action-bar kontekstual</em> akan muncul di bagian atas
+layar untuk menampilkan tindakan yang bisa dilakukan pengguna pada item yang dipilih saat ini. Selagi mode ini
+diaktifkan, pengguna bisa memilih beberapa item (jika Anda mengizinkan), membatalkan pilihan item, dan melanjutkan
+penelusuran dalam aktivitas (sebanyak yang ingin Anda izinkan). Mode tindakan dinonaktifkan
+dan action-bar kontekstual menghilang bila pengguna membatalkan pilihan semua item, menekan tombol BACK,
+atau memilih tindakan <em>Done</em> di sisi kiri action-bar.</p>
+
+<p class="note"><strong>Catatan:</strong> Action-bar kontekstual tidak harus
+terkait dengan <a href="{@docRoot}guide/topics/ui/actionbar.html">action-bar</a>. Action-bar ini beroperasi
+secara independen, walaupun action-bar kontekstual secara visual mengambil alih
+posisi action-bar.</p>
+
+<p>Jika Anda mengembangkan aplikasi untuk Android 3.0 (API level 11) atau yang lebih tinggi, Anda
+biasanya harus menggunakan mode tindakan kontekstual untuk menampilkan tindakan kontekstual, sebagai ganti <a href="#FloatingContextMenu">menu konteks mengambang</a>.</p>
+
+<p>Untuk tampilan yang menyediakan tindakan kontekstual, Anda biasanya harus memanggil mode tindakan kontekstual
+pada salah satu dari dua kejadian (atau keduanya):</p>
+<ul>
+ <li>Pengguna mengklik-lama pada tampilan.</li>
+ <li>Pengguna memilih kotak cek atau komponen UI yang serupa dalam tampilan.</li>
+</ul>
+
+<p>Cara aplikasi memanggil mode tindakan kontekstual dan mendefinisikan perilaku setiap
+tindakan bergantung pada desain Anda. Pada dasarnya ada dua desain:</p>
+<ul>
+ <li>Untuk tindakan kontekstual pada tampilan individual dan tak didukung.</li>
+ <li>Untuk tindakan kontekstual batch pada grup item dalam {@link
+android.widget.ListView} atau {@link android.widget.GridView} (memungkinkan pengguna memilih beberapa
+item dan melakukan tindakan pada semua item itu).</li>
+</ul>
+
+<p>Bagian berikut ini menjelaskan penyiapan yang diperlukan untuk setiap skenario.</p>
+
+
+<h4 id="CABforViews">Mengaktifkan mode tindakan kontekstual untuk tampilan individual</h4>
+
+<p>Jika Anda ingin memanggil mode tindakan kontekstual hanya bila pengguna memilih
+tampilan tertentu, Anda harus:</p>
+<ol>
+ <li>Mengimplementasikan antarmuka {@link android.view.ActionMode.Callback}. Dalam metode callback-nya, Anda
+bisa menetapkan tindakan untuk action-bar kontekstual, merespons kejadian klik pada item tindakan, dan
+menangani kejadian daur hidup lainnya untuk mode tindakan itu.</li>
+ <li>Memanggil {@link android.app.Activity#startActionMode startActionMode()} bila Anda ingin menampilkan
+action-bar (seperti saat pengguna mengklik-lama pada tampilan).</li>
+</ol>
+
+<p>Misalnya:</p>
+
+<ol>
+ <li>Implementasikan antarmuka {@link android.view.ActionMode.Callback ActionMode.Callback}:
+<pre>
+private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {
+
+ // Called when the action mode is created; startActionMode() was called
+ @Override
+ public boolean onCreateActionMode(ActionMode mode, Menu menu) {
+ // Inflate a menu resource providing context menu items
+ MenuInflater inflater = mode.getMenuInflater();
+ inflater.inflate(R.menu.context_menu, menu);
+ return true;
+ }
+
+ // Called each time the action mode is shown. Always called after onCreateActionMode, but
+ // may be called multiple times if the mode is invalidated.
+ @Override
+ public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
+ return false; // Return false if nothing is done
+ }
+
+ // Called when the user selects a contextual menu item
+ @Override
+ public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.menu_share:
+ shareCurrentItem();
+ mode.finish(); // Action picked, so close the CAB
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ // Called when the user exits the action mode
+ @Override
+ public void onDestroyActionMode(ActionMode mode) {
+ mActionMode = null;
+ }
+};
+</pre>
+
+<p>Perhatikan bahwa kejadian callback ini hampir persis sama dengan callback untuk <a href="#options-menu">menu opsi</a>, hanya saja setiap callback ini juga meneruskan objek {@link
+android.view.ActionMode} yang terkait dengan kejadian. Anda bisa menggunakan API {@link
+android.view.ActionMode} untuk membuat berbagai perubahan pada CAB, seperti merevisi judul dan
+subjudul dengan {@link android.view.ActionMode#setTitle setTitle()} dan {@link
+android.view.ActionMode#setSubtitle setSubtitle()} (berguna untuk menunjukkan jumlah item
+yang dipilih).</p>
+
+<p>Juga perhatikan bahwa contoh di atas mengatur variabel {@code mActionMode} ke nol bila
+mode tindakan dimusnahkan. Dalam langkah berikutnya, Anda akan melihat cara variabel diinisialisasi dan kegunaan menyimpan
+variabel anggota dalam aktivitas atau fragmen.</p>
+</li>
+
+ <li>Panggil {@link android.app.Activity#startActionMode startActionMode()} untuk mengaktifkan
+mode tindakan kontekstual bila sesuai, seperti saat merespons klik-lama pada {@link
+android.view.View}:</p>
+
+<pre>
+someView.setOnLongClickListener(new View.OnLongClickListener() {
+ // Called when the user long-clicks on someView
+ public boolean onLongClick(View view) {
+ if (mActionMode != null) {
+ return false;
+ }
+
+ // Start the CAB using the ActionMode.Callback defined above
+ mActionMode = getActivity().startActionMode(mActionModeCallback);
+ view.setSelected(true);
+ return true;
+ }
+});
+</pre>
+
+<p>Bila Anda memanggil {@link android.app.Activity#startActionMode startActionMode()}, sistem akan mengembalikan
+{@link android.view.ActionMode} yang dibuat. Dengan menyimpannya dalam variabel anggota, Anda bisa
+membuat perubahan ke action-bar kontekstual sebagai respons terhadap kejadian lainnya. Dalam contoh di atas,
+{@link android.view.ActionMode} digunakan untuk memastikan bahwa instance {@link android.view.ActionMode}
+tidak dibuat kembali jika sudah aktif, dengan memeriksa apakah anggota bernilai nol sebelum memulai
+mode tindakan.</p>
+</li>
+</ol>
+
+
+
+<h4 id="CABforListView">Mengaktifkan tindakan kontekstual batch dalam ListView atau GridView</h4>
+
+<p>Jika Anda memiliki sekumpulan item dalam {@link android.widget.ListView} atau {@link
+android.widget.GridView} (atau ekstensi {@link android.widget.AbsListView} lainnya) dan ingin
+mengizinkan pengguna melakukan tindakan batch, Anda harus:</p>
+
+<ul>
+ <li>Mengimplementasikan antarmuka {@link android.widget.AbsListView.MultiChoiceModeListener} dan mengaturnya
+untuk grup tampilan dengan {@link android.widget.AbsListView#setMultiChoiceModeListener
+setMultiChoiceModeListener()}. Dalam metode callback listener, Anda bisa menetapkan tindakan
+untuk action-bar kontekstual, merespons kejadian klik pada item tindakan, dan menangani callback lainnya
+yang diwarisi dari antarmuka {@link android.view.ActionMode.Callback}.</li>
+
+ <li>Panggil {@link android.widget.AbsListView#setChoiceMode setChoiceMode()} dengan argumen {@link
+android.widget.AbsListView#CHOICE_MODE_MULTIPLE_MODAL}.</li>
+</ul>
+
+<p>Misalnya:</p>
+
+<pre>
+ListView listView = getListView();
+listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
+listView.setMultiChoiceModeListener(new MultiChoiceModeListener() {
+
+ @Override
+ public void onItemCheckedStateChanged(ActionMode mode, int position,
+ long id, boolean checked) {
+ // Here you can do something when items are selected/de-selected,
+ // such as update the title in the CAB
+ }
+
+ @Override
+ public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
+ // Respond to clicks on the actions in the CAB
+ switch (item.getItemId()) {
+ case R.id.menu_delete:
+ deleteSelectedItems();
+ mode.finish(); // Action picked, so close the CAB
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ @Override
+ public boolean onCreateActionMode(ActionMode mode, Menu menu) {
+ // Inflate the menu for the CAB
+ MenuInflater inflater = mode.getMenuInflater();
+ inflater.inflate(R.menu.context, menu);
+ return true;
+ }
+
+ @Override
+ public void onDestroyActionMode(ActionMode mode) {
+ // Here you can make any necessary updates to the activity when
+ // the CAB is removed. By default, selected items are deselected/unchecked.
+ }
+
+ @Override
+ public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
+ // Here you can perform updates to the CAB due to
+ // an {@link android.view.ActionMode#invalidate} request
+ return false;
+ }
+});
+</pre>
+
+<p>Demikian saja. Kini bila pengguna memilih item dengan klik-lama, sistem akan memanggil metode {@link
+android.widget.AbsListView.MultiChoiceModeListener#onCreateActionMode onCreateActionMode()}
+dan menampilkan action-bar kontekstual bersama tindakan yang ditetapkan. Saat
+action-bar kontekstual terlihat, pengguna bisa memilih item tambahan.</p>
+
+<p>Dalam beberapa kasus di mana tindakan kontekstual menyediakan item tindakan umum, Anda mungkin
+ingin menambahkan kotak cek atau elemen UI serupa yang memungkinkan pengguna memilih item, karena pengguna
+mungkin tidak menemukan perilaku klik-lama. Bila pengguna memilih kotak cek itu, Anda
+bisa memanggil mode tindakan kontekstual dengan mengatur item daftar yang bersangkutan ke
+status diberi tanda cek dengan {@link android.widget.AbsListView#setItemChecked setItemChecked()}.</p>
+
+
+
+
+<h2 id="PopupMenu">Membuat Menu Popup</h2>
+
+<div class="figure" style="width:220px">
+<img src="{@docRoot}images/ui/popupmenu.png" alt="" />
+<p><strong>Gambar 4.</strong> Menu popup dalam aplikasi Gmail, dikaitkan pada
+tombol kelebihan di sudut kanan atas.</p>
+</div>
+
+<p>{@link android.widget.PopupMenu} adalah menu modal yang dikaitkan pada {@link android.view.View}.
+Menu ini muncul di bawah tampilan jangkar jika ada ruang, atau di atas tampilan jika tidak ada. Menu ini berguna untuk:</p>
+<ul>
+ <li>Menyediakan menu bergaya kelebihan (overflow) untuk tindakan yang <em>berkaitan dengan</em> konten tertentu (seperti
+header email Gmail, yang ditampilkan dalam gambar 4).
+ <p class="note"><strong>Catatan:</strong> Ini tidak sama dengan menu konteks, yang umumnya
+untuk tindakan yang <em>memengaruhi</em> konten yang dipilih. Untuk tindakan yang memengaruhi
+konten yang dipilih, gunakan <a href="#CAB">mode tindakan kontekstual</a> atau <a href="#FloatingContextMenu">menu konteks mengambang</a>.</p></li>
+ <li>Menyediakan bagian kedua dari kalimat perintah (seperti tombol bertanda "Tambah"
+yang menghasilkan menu popup dengan berbagai opsi "Tambah").</li>
+ <li>Menyediakan daftar menurun yang serupa dengan {@link android.widget.Spinner} yang tidak mempertahankan
+pilihan persisten.</li>
+</ul>
+
+
+<p class="note"><strong>Catatan:</strong> {@link android.widget.PopupMenu} tersedia dengan API
+level 11 dan yang lebih tinggi.</p>
+
+<p>Jika Anda <a href="#xml">mendefinisikan menu dalam XML</a>, berikut ini adalah cara Anda menampilkan menu popup:</p>
+<ol>
+ <li>Buat instance {@link android.widget.PopupMenu} bersama konstruktornya, yang mengambil
+aplikasi saat ini {@link android.content.Context} dan {@link android.view.View} yang akan menjadi tempat mengaitkan
+menu.</li>
+ <li>Gunakan {@link android.view.MenuInflater} untuk memekarkan sumber daya menu Anda ke dalam objek {@link
+android.view.Menu} yang dikembalikan oleh {@link
+android.widget.PopupMenu#getMenu() PopupMenu.getMenu()}. Pada API level 14 ke atas, Anda bisa menggunakan
+{@link android.widget.PopupMenu#inflate PopupMenu.inflate()} sebagai gantinya.</li>
+ <li>Panggil {@link android.widget.PopupMenu#show() PopupMenu.show()}.</li>
+</ol>
+
+<p>Misalnya, berikut ini adalah tombol dengan atribut {@link android.R.attr#onClick android:onClick}
+yang menampilkan menu popup:</p>
+
+<pre>
+<ImageButton
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:src="@drawable/ic_overflow_holo_dark"
+ android:contentDescription="@string/descr_overflow_button"
+ android:onClick="showPopup" />
+</pre>
+
+<p>Aktivitas nanti bisa menampilkan menu popup seperti ini:</p>
+
+<pre>
+public void showPopup(View v) {
+ PopupMenu popup = new PopupMenu(this, v);
+ MenuInflater inflater = popup.getMenuInflater();
+ inflater.inflate(R.menu.actions, popup.getMenu());
+ popup.show();
+}
+</pre>
+
+<p>Dalam API level 14 dan yang lebih tinggi, Anda bisa menggabungkan dua baris yang memekarkan menu dengan {@link
+android.widget.PopupMenu#inflate PopupMenu.inflate()}.</p>
+
+<p>Menu akan menghilang bila pengguna memilih item atau menyentuh di luar
+area menu. Anda bisa mendengarkan kejadian menghilangkan dengan menggunakan {@link
+android.widget.PopupMenu.OnDismissListener}.</p>
+
+<h3 id="PopupEvents">Menangani kejadian klik</h3>
+
+<p>Untuk melakukan suatu
+tindakan bila pengguna memilih item menu, Anda harus mengimplementasikan antarmuka {@link
+android.widget.PopupMenu.OnMenuItemClickListener} dan mendaftarkannya pada {@link
+android.widget.PopupMenu} dengan memanggil {@link android.widget.PopupMenu#setOnMenuItemClickListener
+setOnMenuItemclickListener()}. Bila pengguna memilih item, sistem akan memanggil callback {@link
+android.widget.PopupMenu.OnMenuItemClickListener#onMenuItemClick onMenuItemClick()} dalam
+antarmuka Anda.</p>
+
+<p>Misalnya:</p>
+
+<pre>
+public void showMenu(View v) {
+ PopupMenu popup = new PopupMenu(this, v);
+
+ // This activity implements OnMenuItemClickListener
+ popup.setOnMenuItemClickListener(this);
+ popup.inflate(R.menu.actions);
+ popup.show();
+}
+
+@Override
+public boolean onMenuItemClick(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.archive:
+ archive(item);
+ return true;
+ case R.id.delete:
+ delete(item);
+ return true;
+ default:
+ return false;
+ }
+}
+</pre>
+
+
+<h2 id="groups">Membuat Grup Menu</h2>
+
+<p>Grup menu adalah sekumpulan item menu yang sama-sama memiliki ciri (trait) tertentu. Dengan grup, Anda
+bisa:</p>
+<ul>
+ <li>Menampilkan atau menyembunyikan semua item dengan {@link android.view.Menu#setGroupVisible(int,boolean)
+setGroupVisible()}</li>
+ <li>Mengaktifkan atau mennonaktifkan semua item dengan {@link android.view.Menu#setGroupEnabled(int,boolean)
+setGroupEnabled()}</li>
+ <li>Menetapkan apakah semua item bisa diberi tanda cek dengan {@link
+android.view.Menu#setGroupCheckable(int,boolean,boolean) setGroupCheckable()}</li>
+</ul>
+
+<p>Anda bisa membuat grup dengan menyarangkan elemen-elemen {@code <item>} dalam elemen {@code <group>}
+dalam sumber daya menu atau dengan menetapkan ID grup dengan metode {@link
+android.view.Menu#add(int,int,int,int) add()}.</p>
+
+<p>Berikut ini adalah contoh sumber daya menu yang berisi sebuah grup:</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:id="@+id/menu_save"
+ android:icon="@drawable/menu_save"
+ android:title="@string/menu_save" />
+ <!-- menu group -->
+ <group android:id="@+id/group_delete">
+ <item android:id="@+id/menu_archive"
+ android:title="@string/menu_archive" />
+ <item android:id="@+id/menu_delete"
+ android:title="@string/menu_delete" />
+ </group>
+</menu>
+</pre>
+
+<p>Item yang berada dalam grup akan muncul pada level yang sama dengan item pertama—ketiga item
+dalam menu adalah bersaudara. Akan tetapi, Anda bisa memodifikasi ciri kedua
+item dalam grup dengan mengacu ID grup dan menggunakan metode yang tercantum di atas. Sistem
+juga tidak akan memisahkan item yang telah dikelompokkan. Misalnya, jika Anda mendeklarasikan {@code
+android:showAsAction="ifRoom"} untuk tiap item, item tersebut akan muncul dalam
+action-bar atau dalam kelebihan tindakan.</p>
+
+
+<h3 id="checkable">Menggunakan item menu yang bisa diberi tanda cek</h3>
+
+<div class="figure" style="width:200px">
+ <img src="{@docRoot}images/radio_buttons.png" height="333" alt="" />
+ <p class="img-caption"><strong>Gambar 5.</strong> Cuplikan layar submenu dengan
+item yang bisa diberi tanda cek.</p>
+</div>
+
+<p>Menu bisa digunakan sebagai antarmuka untuk mengaktifkan dan menonaktifkan opsi, menggunakan kotak cek untuk
+opsi mandiri, atau tombol radio untuk grup
+opsi yang saling eksklusif. Gambar 5 menampilkan submenu dengan item yang bisa diberi tanda cek dengan
+tombol radio.</p>
+
+<p class="note"><strong>Catatan:</strong> Item menu dalam Icon Menu (dari menu opsi) tidak bisa
+menampilkan kotak cek atau tombol radio. Jika Anda memilih untuk membuat item dalam Icon Menu yang bisa diberi tanda cek,
+Anda harus menandai status diberi tanda cek secara manual dengan menukar ikon dan/atau teks
+tiap kali statusnya berubah.</p>
+
+<p>Anda bisa mendefinisikan perilaku yang bisa diberi tanda cek untuk tiap item menu dengan menggunakan atribut {@code
+android:checkable} dalam elemen {@code <item>}, atau untuk seluruh grup dengan
+atribut {@code android:checkableBehavior} dalam elemen {@code <group>}. Misalnya
+, semua item dalam grup menu ini bisa diberi tanda cek dengan tombol radio:</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+ <group android:checkableBehavior="single">
+ <item android:id="@+id/red"
+ android:title="@string/red" />
+ <item android:id="@+id/blue"
+ android:title="@string/blue" />
+ </group>
+</menu>
+</pre>
+
+<p>Atribut {@code android:checkableBehavior} menerima:
+<dl>
+ <dt>{@code single}</dt>
+ <dd>Hanya satu item dari grup ini yang bisa diberi tanda cek (tombol radio)</dd>
+ <dt>{@code all}</dt>
+ <dd>Semua item bisa diberi tanda cek (kotak cek)</dd>
+ <dt>{@code none}</dt>
+ <dd>Tidak ada item yang bisa diberi tanda cek</dd>
+</dl>
+
+<p>Anda bisa menerapkan status diberi tanda cek default pada suatu item dengan menggunakan atribut {@code android:checked} dalam
+elemen {@code <item>} dan mengubahnya dalam kode dengan metode {@link
+android.view.MenuItem#setChecked(boolean) setChecked()}.</p>
+
+<p>Bila item yang bisa diberi tanda cek dipilih, sistem akan memanggil metode callback setiap item yang dipilih
+(seperti {@link android.app.Activity#onOptionsItemSelected(MenuItem) onOptionsItemSelected()}). Di sinilah
+Anda harus mengatur status kotak cek itu, karena kotak cek atau tombol radio tidak
+mengubah statusnya secara otomatis. Anda bisa melakukan query status saat ini suatu item (seperti sebelum
+pengguna memilihnya) dengan {@link android.view.MenuItem#isChecked()} kemudian mengatur status diberi tanda cek dengan
+{@link android.view.MenuItem#setChecked(boolean) setChecked()}. Misalnya:</p>
+
+<pre>
+@Override
+public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.vibrate:
+ case R.id.dont_vibrate:
+ if (item.isChecked()) item.setChecked(false);
+ else item.setChecked(true);
+ return true;
+ default:
+ return super.onOptionsItemSelected(item);
+ }
+}
+</pre>
+
+<p>Jika Anda tidak mengatur status diberi tanda cek dengan cara ini, maka status item (kotak cek atau
+tombol radio) yang terlihat tidak akan
+berubah bila pengguna memilihnya. Bila Anda telah mengatur status, aktivitas akan menjaga status diberi tanda cek
+suatu item sehingga bila nanti pengguna membuka menu, status diberi tanda cek yang Anda
+atur akan terlihat.</p>
+
+<p class="note"><strong>Catatan:</strong>
+Item menu yang bisa diberi tanda cek dimaksudkan untuk digunakan hanya atas dasar per sesi dan tidak disimpan setelah
+aplikasi dimusnahkan. Jika Anda memiliki pengaturan aplikasi yang ingin disimpan untuk pengguna,
+Anda harus menyimpan data dengan menggunakan <a href="{@docRoot}guide/topics/data/data-storage.html#pref">Shared Preferences</a>.</p>
+
+
+
+<h2 id="intents">Menambahkan Item Menu Berdasarkan Intent</h2>
+
+<p>Kadang-kadang Anda ingin supaya item menu menjalankan aktivitas dengan menggunakan {@link android.content.Intent}
+(baik aktivitas berada dalam aplikasi Anda maupun di aplikasi lain). Bila Anda mengetahui intent
+yang ingin digunakan dan memiliki item menu tertentu yang harus memulai intent, Anda bisa mengeksekusi
+intent dengan {@link android.app.Activity#startActivity(Intent) startActivity()} selama
+metode callback bila-item-dipilih yang sesuai (seperti callback {@link
+android.app.Activity#onOptionsItemSelected(MenuItem) onOptionsItemSelected()}).</p>
+
+<p>Akan tetapi, jika Anda tidak yakin apakah perangkat pengguna
+berisi aplikasi yang menangani intent, maka menambahkan item menu yang memanggilnya bisa mengakibatkan
+item menu tidak berfungsi, karena intent tidak bisa diterjemahkan menjadi
+aktivitas. Untuk mengatasi hal ini, Android memungkinkan Anda menambahkan item menu secara dinamis ke menu
+bila Android menemukan aktivitas pada perangkat yang menangani intent Anda.</p>
+
+<p>Untuk menambahkan item menu berdasarkan aktivitas tersedia yang menerima intent:</p>
+<ol>
+ <li>Definisikan
+intent dengan kategori {@link android.content.Intent#CATEGORY_ALTERNATIVE} dan/atau
+{@link android.content.Intent#CATEGORY_SELECTED_ALTERNATIVE}, plus kebutuhan lainnya.</li>
+ <li>Panggil {@link
+android.view.Menu#addIntentOptions(int,int,int,ComponentName,Intent[],Intent,int,MenuItem[])
+Menu.addIntentOptions()}. Android kemudian akan mencari setiap aplikasi yang bisa melakukan intent
+dan menambahkannya ke menu Anda.</li>
+</ol>
+
+<p>Jika tidak ada aplikasi terinstal
+yang memenuhi intent, maka tidak ada item menu yang ditambahkan.</p>
+
+<p class="note"><strong>Catatan:</strong>
+{@link android.content.Intent#CATEGORY_SELECTED_ALTERNATIVE} digunakan untuk menangani
+elemen yang saat ini dipilih pada layar. Jadi, metode hanya digunakan saat membuat Menu dalam {@link
+android.app.Activity#onCreateContextMenu(ContextMenu,View,ContextMenuInfo)
+onCreateContextMenu()}.</p>
+
+<p>Misalnya:</p>
+
+<pre>
+@Override
+public boolean onCreateOptionsMenu(Menu menu){
+ super.onCreateOptionsMenu(menu);
+
+ // Create an Intent that describes the requirements to fulfill, to be included
+ // in our menu. The offering app must include a category value of Intent.CATEGORY_ALTERNATIVE.
+ Intent intent = new Intent(null, dataUri);
+ intent.addCategory(Intent.CATEGORY_ALTERNATIVE);
+
+ // Search and populate the menu with acceptable offering applications.
+ menu.addIntentOptions(
+ R.id.intent_group, // Menu group to which new items will be added
+ 0, // Unique item ID (none)
+ 0, // Order for the items (none)
+ this.getComponentName(), // The current activity name
+ null, // Specific items to place first (none)
+ intent, // Intent created above that describes our requirements
+ 0, // Additional flags to control items (none)
+ null); // Array of MenuItems that correlate to specific items (none)
+
+ return true;
+}</pre>
+
+<p>Untuk setiap aktivitas yang diketahui menyediakan filter intent yang cocok dengan intent yang didefinisikan, item menu
+akan ditambahkan, menggunakan nilai dalam filter intent <code>android:label</code> sebagai
+judul item menu dan ikon aplikasi sebagai ikon item menu. Metode
+{@link android.view.Menu#addIntentOptions(int,int,int,ComponentName,Intent[],Intent,int,MenuItem[])
+addIntentOptions()} mengembalikan jumlah item menu yang ditambahkan.</p>
+
+<p class="note"><strong>Catatan:</strong> Bila Anda memanggil {@link
+android.view.Menu#addIntentOptions(int,int,int,ComponentName,Intent[],Intent,int,MenuItem[])
+addIntentOptions()}, metode ini akan mengesampingkan setiap dan semua item menu menurut grup menu yang ditetapkan dalam argumen
+pertama.</p>
+
+
+<h3 id="AllowingToAdd">Memungkinkan aktivitas Anda ditambahkan ke menu lain</h3>
+
+<p>Anda juga bisa menawarkan layanan aktivitas Anda pada aplikasi lainnya, sehingga
+aplikasi Anda bisa disertakan dalam menu aplikasi lain (membalik peran yang dijelaskan di atas).</p>
+
+<p>Agar bisa dimasukkan dalam menu aplikasi lain, Anda perlu mendefinisikan
+filter intent seperti biasa, tetapi pastikan menyertakan nilai-nilai {@link android.content.Intent#CATEGORY_ALTERNATIVE}
+dan/atau {@link android.content.Intent#CATEGORY_SELECTED_ALTERNATIVE} untuk
+kategori filter intent. Misalnya:</p>
+<pre>
+<intent-filter label="@string/resize_image">
+ ...
+ <category android:name="android.intent.category.ALTERNATIVE" />
+ <category android:name="android.intent.category.SELECTED_ALTERNATIVE" />
+ ...
+</intent-filter>
+</pre>
+
+<p>Baca selengkapnya tentang penulisan filter intent dalam dokumen
+<a href="/guide/components/intents-filters.html">Intent dan Filter Intent</a>.</p>
+
+<p>Untuk contoh aplikasi yang menggunakan teknik ini, lihat contoh kode
+<a href="{@docRoot}resources/samples/NotePad/src/com/example/android/notepad/NoteEditor.html">Note
+Pad</a>.</p>
diff --git a/docs/html-intl/intl/id/guide/topics/ui/multi-window.jd b/docs/html-intl/intl/id/guide/topics/ui/multi-window.jd
new file mode 100644
index 0000000..5e7b3d9
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/topics/ui/multi-window.jd
@@ -0,0 +1,589 @@
+page.title=Dukungan Multi-Jendela
+page.metaDescription=Dukungan baru di Android N untuk menampilkan lebih dari satu aplikasi sekaligus.
+page.keywords="multi-window", "android N", "split screen", "free-form"
+
+@jd:body
+
+<div id="tb-wrapper">
+ <div id="tb">
+ <h2>Dalam dokumen ini</h2>
+ <ol>
+ <li><a href="#overview">Ringkasan</a></li>
+ <li><a href="#lifecycle">Daur Hidup Multi-Jendela</a></li>
+ <li><a href="#configuring">Mengonfigurasi Aplikasi Anda untuk Mode
+ Multi-Jendela</a></li>
+ <li><a href="#running">Menjalankan Aplikasi Anda dalam Mode Multi-Jendela</a></li>
+ <li><a href="#testing">Menguji Dukungan Multi-Jendela Aplikasi Anda</a></li>
+ </ol>
+ <h2>Lihat Juga</h2>
+ <ol>
+ <li><a class="external-link" href="https://github.com/googlesamples/android-MultiWindowPlayground">Aplikasi contoh Playground
+ Multi-Jendela</a></li>
+ <li><a class="external-link" href="https://medium.com/google-developers/5-tips-for-preparing-for-multi-window-in-android-n-7bed803dda64">Lima Tip untuk Mempersiapkan Multi-Jendela di Android N</a></li>
+ </ol>
+ </div>
+</div>
+
+<p>
+ Android N menambahkan dukungan untuk menampilkan lebih dari satu aplikasi
+ sekaligus. Pada perangkat genggam, dua aplikasi bisa berjalan berdampingan atau
+ atas-bawah dalam mode <em>layar terbagi</em>. Pada perangkat TV, aplikasi bisa
+ menggunakan mode <em>gambar-dalam-gambar</em> untuk melanjutkan pemutaran video selagi pengguna
+ berinteraksi dengan aplikasi lain.
+</p>
+
+<p>
+ Jika Anda membangun aplikasi Anda dengan N Preview SDK, Anda bisa mengonfigurasi cara aplikasi
+ menangani tampilan multi-jendela. Misalnya, Anda bisa menetapkan dimensi
+ minimum yang diizinkan aktivitas Anda. Anda juga bisa menonaktifkan tampilan multi-jendela untuk
+ aplikasi, sehingga memastikan sistem hanya menampilkan aplikasi Anda dalam mode
+ layar penuh.
+</p>
+
+<h2 id="overview">Ringkasan</h2>
+
+<p>
+ Android N memungkinkan beberapa aplikasi berbagi layar sekaligus. Misalnya,
+ pengguna bisa membagi layar, melihat halaman web di sisi kiri
+ sambil menulis email di sisi kanan. Pengalaman pengguna bergantung pada
+ perangkat:
+</p>
+
+<ul>
+ <li>Perangkat genggam yang menjalankan Android N menawarkan mode
+ layar terbagi. Di mode ini, sistem mengisi layar dengan dua aplikasi, menampilkannya secara
+ berdampingan atau atas-bawah. Pengguna bisa menyeret garis pembagi
+ yang memisahkan keduanya untuk membuat satu aplikasi lebih besar dan yang lainnya lebih kecil.
+ </li>
+
+ <li>Pada Nexus Player yang menjalankan Android N, aplikasi bisa menempatkan diri
+ dalam <a href="picture-in-picture.html">mode gambar-dalam-gambar</a>, yang memungkinkannya
+ untuk terus menampilkan materi selagi pengguna menjelajahi atau berinteraksi dengan
+ aplikasi lain.
+ </li>
+
+ <li>Produsen perangkat berukuran lebih besar bisa memilih untuk mengaktifkan mode
+ bentuk bebas, di mana pengguna bisa bebas mengubah ukuran setiap aktivitas. Jika
+ produsen mengaktifkan fitur ini, perangkat akan menawarkan mode bentuk bebas sebagai tambahan
+ untuk mode layar terbagi.
+ </li>
+</ul>
+
+<img src="{@docRoot}images/android-7.0/mw-splitscreen.png" alt="" width="650" srcset="{@docRoot}images/android-7.0/mw-splitscreen.png 1x,
+ {@docRoot}images/android-7.0/mw-splitscreen_2x.png 2x," id="img-split-screen" />
+<p class="img-caption">
+ <strong>Gambar 1.</strong> Dua aplikasi berjalan berdampingan dalam mode layar terbagi.
+</p>
+
+<p>
+ Pengguna bisa beralih ke mode multi-jendela dengan cara berikut:
+</p>
+
+<ul>
+ <li>Jika pengguna membuka <a href="{@docRoot}guide/components/recents.html">layar
+ Ringkasan</a> dan menekan lama pada
+ judul aktivitas, mereka bisa menyeret aktivitas itu ke bagian yang disorot pada layar
+ untuk menempatkan aktivitas dalam mode multi-jendela.
+ </li>
+
+ <li>Jika pengguna menekan lama pada tombol Ringkasan, perangkat akan menempatkan
+ aktivitas saat ini dalam mode multi-jendela, dan membuka layar Ringkasan guna
+ memungkinkan pengguna memilih aktivitas lain untuk berbagi layar.
+ </li>
+</ul>
+
+<p>
+ Pengguna bisa <a href="{@docRoot}guide/topics/ui/drag-drop.html">seret dan
+ lepas</a> data dari aktivitas satu ke aktivitas lain sewaktu aktivitas berbagi
+ layar. (Sebelumnya, pengguna hanya bisa menyeret dan melepas data dalam aktivitas
+ tunggal.)
+</p>
+
+<h2 id="lifecycle">Daur Hidup Multi-Jendela</h2>
+
+<p>
+ Mode multi-jendela tidak mengubah <a href="{@docRoot}training/basics/activity-lifecycle/index.html">daur hidup
+ aktivitas</a>.
+</p>
+
+<p>
+ Dalam mode multi-jendela, hanya aktivitas yang paling sering digunakan pengguna
+ yang akan aktif pada waktu tertentu. Aktivitas ini dianggap <em>teratas</em>.
+ Semua aktivitas lainnya dalam keadaan berhenti sementara, sekalipun terlihat.
+ Akan tetapi, sistem memberikan aktivitas, yang berhenti-sementara-namun-terlihat ini, prioritas lebih tinggi
+ daripada aktivitas yang tidak terlihat. Jika pengguna berinteraksi dengan salah satu
+ aktivitas yang berhenti sementara, aktivitas tersebut akan dilanjutkan kembali, dan aktivitas
+ teratas sebelumnya akan dihentikan sementara.
+</p>
+
+<p class="note">
+ <strong>Catatan:</strong> Dalam mode multi-jendela, aplikasi bisa berada dalam keadaan berhenti sementara
+ dan masih terlihat oleh pengguna. Sebuah aplikasi mungkin perlu melanjutkan aktivitasnya
+ bahkan saat berhenti sementara. Misalnya, aplikasi pemutar video yang ada dalam
+ mode berhenti sementara namun terlihat harus tetap menampilkan videonya. Karena alasan
+ ini, kami menyarankan aktivitas yang memutar video <em>tidak</em> menghentikan sementara video
+ dalam handler {@link android.app.Activity#onPause onPause()} mereka.
+ Sebagai gantinya, aktivitas itu harus menghentikan sementara video di {@link android.app.Activity#onStop
+ onStop()}, dan melanjutkan pemutaran di {@link android.app.Activity#onStart
+ onStart()}.
+</p>
+
+<p>
+ Bila pengguna menempatkan aplikasi dalam mode multi-jendela, sistem akan memberi tahu
+ aktivitas tersebut mengenai perubahan konfigurasi, sebagaimana ditetapkan dalam <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Menangani Perubahan
+ Waktu Proses</a>. Hal ini juga terjadi ketika pengguna mengubah skala aplikasi, atau menempatkan kembali aplikasi
+ ke mode layar penuh.
+ Pada dasarnya, perubahan ini memiliki implikasi daur hidup aktivitas yang sama
+ seperti saat sistem memberi tahu aplikasi bahwa perangkat telah beralih
+ dari mode potret ke mode lanskap, kecuali dimensi perangkat
+ telah berubah sebagai ganti bertukar posisi. Seperti yang dibahas di <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Menangani Perubahan
+ Waktu Proses</a>, aktivitas Anda bisa menangani perubahan konfigurasi itu sendiri, atau
+ mengizinkan sistem memusnahkan aktivitas dan membuatnya kembali dengan dimensi
+ baru.
+</p>
+
+<p>
+ Jika pengguna mengubah ukuran jendela dan membuat dimensinya lebih besar, sistem
+ akan mengubah ukuran aktivitas untuk menyesuaikan dengan tindakan pengguna dan mengeluarkan <a href="{@docRoot}guide/topics/resources/runtime-changes.html">perubahan waktu proses</a>
+ bila diperlukan. Jika aplikasi tertinggal dibandingkan gambar di area yang baru diekspos,
+ sistem untuk sementara mengisi area tersebut dengan warna yang ditetapkan oleh atribut {@link
+ android.R.attr#windowBackground windowBackground} atau dengan atribut gaya
+ <code>windowBackgroundFallback</code> secara default.
+</p>
+
+<h2 id="configuring">Mengonfigurasi Aplikasi Anda untuk Mode Multi-Jendela</h2>
+
+<p>
+ Jika aplikasi Anda menargetkan Android N, Anda bisa mengonfigurasi bagaimana dan
+ apakah aktivitas aplikasi Anda mendukung tampilan multi-jendela. Anda bisa menyetel
+ atribut dalam manifes untuk mengontrol ukuran dan layoutnya.
+ Setelan atribut aktivitas root berlaku pada semua aktivitas
+ dalam tumpukan tugasnya. Misalnya, jika aktivitas root memiliki
+ <code>android:resizeableActivity</code> yang disetel ke true, maka semua aktivitas
+ dalam tumpukan tugas bisa diubah ukurannya.
+</p>
+
+<p class="note">
+ <strong>Catatan:</strong> Jika Anda membangun aplikasi multi-orientasi dengan versi
+ SDK lebih rendah dari Android N, dan pengguna menggunakan aplikasi
+ dalam mode multi-jendela, sistem akan mengubah ukuran aplikasi secara paksa. Sistem akan menampilkan kotak
+ dialog yang memperingatkan pengguna bahwa aplikasi mungkin berperilaku tidak terduga. Sistem
+ <em>tidak</em> mengubah ukuran aplikasi yang berorientasi tetap; jika
+ pengguna berusaha membuka aplikasi berorientasi tetap saat mode multi-jendela,
+ aplikasi akan menggunakan seluruh layar.
+</p>
+
+<h4 id="resizeableActivity">android:resizeableActivity</h4>
+<p>
+ Setel atribut ini dalam manifes <code><activity></code> Anda atau simpul
+ <code><application></code> untuk mengaktifkan atau menonaktifkan tampilan
+ multi-jendela:
+</p>
+
+<pre>
+android:resizeableActivity=["true" | "false"]
+</pre>
+
+<p>
+ Jika atribut ini disetel ke true, aktivitas bisa dijalankan di
+ mode layar terbagi dan mode bentuk bebas. Jika atribut ini disetel ke false, aktivitas
+ tidak akan mendukung mode multi-jendela. Jika nilai ini false, dan pengguna
+ berusaha memulai aktivitas dalam mode multi-jendela, aktivitas akan menggunakan
+ layar penuh.
+</p>
+
+<p>
+ Jika aplikasi Anda menargetkan Android N, namun Anda tidak menetapkan nilai
+ untuk atribut ini, nilai atribut default adalah true.
+</p>
+
+<h4 id="supportsPictureInPicture">android:supportsPictureInPicture</h4>
+
+<p>
+ Setel atribut ini dalam simpul <code><activity></code> manifes Anda untuk
+ menunjukkan apakah aktivitas mendukung tampilan gambar-dalam-gambar. Atribut ini
+ diabaikan jika <code>android:resizeableActivity</code> bernilai false.
+</p>
+
+<pre>
+android:supportsPictureInPicture=["true" | "false"]
+</pre>
+
+<h3 id="layout">Atribut layout</h3>
+
+<p>
+ Dengan Android N, elemen manifes <code><layout></code>
+ mendukung beberapa atribut yang memengaruhi cara aktivitas berperilaku dalam
+ mode multi-jendela:
+</p>
+
+<dl>
+ <dt>
+ <code>android:defaultWidth</code>
+ </dt>
+
+ <dd>
+ Lebar default aktivitas saat dijalankan dalam mode bentuk bebas.
+ </dd>
+
+ <dt>
+ <code>android:defaultHeight</code>
+ </dt>
+
+ <dd>
+ Tinggi default aktivitas saat dijalankan dalam mode bentuk bebas.
+ </dd>
+
+ <dt>
+ <code>android:gravity</code>
+ </dt>
+
+ <dd>
+ Penempatan awal dari aktivitas saat dibuka dalam mode bentuk bebas. Lihat referensi
+ {@link android.view.Gravity} untuk mengetahui nilai yang cocok.
+ </dd>
+
+ <dt>
+ <code>android:minimalHeight</code>, <code>android:minimalWidth</code>
+ </dt>
+
+ <dd>
+ Tinggi dan lebar minimum untuk aktivitas dalam mode layar terbagi
+ dan mode bentuk bebas. Jika pengguna memindahkan pembagi dalam mode layar terbagi
+ untuk membuat aktivitas lebih kecil dari minimum yang ditetapkan, sistem akan memangkas
+ aktivitas sesuai dengan ukuran yang diminta pengguna.
+ </dd>
+</dl>
+
+<p>
+ Misalnya, kode berikut menampilkan cara menetapkan ukuran dan lokasi default
+ aktivitas, dan ukuran minimumnya, bila aktivitas ditampilkan dalam
+ mode bentuk bebas:
+</p>
+
+<pre>
+<activity android:name=".MyActivity">
+ <layout android:defaultHeight="500dp"
+ android:defaultWidth="600dp"
+ android:gravity="top|end"
+ android:minimalHeight="450dp"
+ android:minimalWidth="300dp" />
+</activity>
+</pre>
+
+<h2 id="running">Menjalankan Aplikasi Anda dalam Mode Multi-Jendela</h2>
+
+<p>
+ Android N menawarkan fungsionalitas baru untuk mendukung aplikasi yang bisa berjalan
+ dalam mode multi-jendela.
+</p>
+
+<h3 id="disabled-features">Fitur yang dinonaktifkan dalam mode multi-jendela</h3>
+
+<p>
+ Fitur tertentu akan dinonaktifkan atau diabaikan bila perangkat berada dalam mode
+ multi-jendela, karena dianggap tidak logis bagi suatu aktivitas yang mungkin berbagi
+ layar perangkat dengan aktivitas atau aplikasi lainnya. Fitur tersebut meliputi:
+
+<ul>
+ <li>Beberapa opsi penyesuaian di <a href="{@docRoot}training/system-ui/index.html">System UI</a>
+ dinonaktifkan; misalnya, aplikasi tidak bisa menyembunyikan bilah status
+ jika tidak berjalan dalam mode layar penuh.
+ </li>
+
+ <li>Sistem akan mengabaikan perubahan pada atribut <code><a href=
+ "{@docRoot}guide/topics/manifest/activity-element.html#screen"
+ >android:screenOrientation</a></code>.
+ </li>
+</ul>
+
+<h3 id="change-notification">Pemberitahuan perubahan multi-jendela dan melakukan kueri</h3>
+
+<p>
+ Metode baru berikut telah ditambahkan ke kelas {@link android.app.Activity}
+ untuk mendukung tampilan multi-jendela. Untuk mengetahui detail tentang setiap
+ metode, lihat <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi N
+ Preview SDK</a>.
+</p>
+
+<dl>
+ <dt>
+ <code>Activity.isInMultiWindowMode()</code>
+ </dt>
+
+ <dd>
+ Panggil untuk mengetahui apakah aktivitas berada dalam mode multi-jendela.
+ </dd>
+
+ <dt>
+ <code>Activity.isInPictureInPictureMode()</code>
+ </dt>
+
+ <dd>
+ Panggil untuk mengetahui apakah aktivitas berada dalam mode gambar-dalam-gambar.
+
+ <p class="note">
+ <strong>Catatan:</strong> Mode gambar-dalam-gambar adalah kasus khusus pada
+ mode multi-jendela. Jika <code>myActivity.isInPictureInPictureMode()</code>
+ mengembalikan nilai true, maka <code>myActivity.isInMultiWindowMode()</code> juga
+ mengembalikan nilai true.
+ </p>
+ </dd>
+
+ <dt>
+ <code>Activity.onMultiWindowModeChanged()</code>
+ </dt>
+
+ <dd>
+ Sistem akan memanggil metode ini bila aktivitas masuk atau keluar dari
+ mode multi-jendela. Sistem akan meneruskan ke metode sebuah nilai true jika
+ aktivitas tersebut memasuki mode multi-jendela, dan nilai false jika aktivitas
+ tersebut meninggalkan mode multi-jendela.
+ </dd>
+
+ <dt>
+ <code>Activity.onPictureInPictureModeChanged()</code>
+ </dt>
+
+ <dd>
+ Sistem akan memanggil metode ini bila aktivitas masuk atau keluar dari
+ mode gambar-dalam-gambar. Sistem akan meneruskan ke metode sebuah nilai true jika
+ aktivitas tersebut memasuki mode gambar-dalam-gambar, dan nilai false jika aktivitas
+ tersebut meninggalkan mode gambar-dalam-gambar.
+ </dd>
+</dl>
+
+<p>
+ Ada juga versi {@link android.app.Fragment} untuk setiap
+ metode ini, misalnya <code>Fragment.isInMultiWindowMode()</code>.
+</p>
+
+<h3 id="entering-pip">Memasuki mode gambar-dalam-gambar</h3>
+
+<p>
+ Untuk menempatkan aktivitas dalam mode gambar-dalam-gambar, panggil metode baru
+ <code>Activity.enterPictureInPictureMode()</code>. Metode ini tidak berpengaruh jika
+ perangkat tidak mendukung mode gambar-dalam-gambar. Untuk informasi selengkapnya,
+ lihat dokumentasi <a href="picture-in-picture.html">Gambar-dalam-Gambar</a>.
+</p>
+
+<h3 id="launch">Meluncurkan Aktivitas Baru dalam Mode Multi-Jendela</h3>
+
+<p>
+ Bila meluncurkan aktivitas baru, Anda bisa memberi petunjuk pada sistem bahwa aktivitas
+ baru harus ditampilkan bersebelahan dengan aktivitas yang sedang aktif, jika memungkinkan. Caranya,
+ gunakan flag
+ <code>Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT</code>. Meneruskan
+ flag ini akan meminta perilaku berikut:
+</p>
+
+<ul>
+ <li>Jika perangkat berada dalam mode layar terbagi, sistem akan berupaya membuat
+ aktivitas baru di sebelah aktivitas yang meluncurkannya, sehingga kedua aktivitas tersebut
+ berbagi layar. Tidak ada jaminan sistem mampu melakukannya, namun sistem akan
+ membuat aktivitas bersebelahan jika memungkinkan.
+ </li>
+
+ <li>Jika perangkat tidak berada dalam mode layar terbagi, flag ini tidak akan berpengaruh.
+ </li>
+</ul>
+
+<p>
+ Jika perangkat dalam mode bentuk bebas dan Anda menjalankan aktivitas baru, Anda bisa
+ menetapkan dimensi aktivitas baru dan lokasi layar dengan memanggil
+ <code>ActivityOptions.setLaunchBounds()</code>. Metode ini tidak berpengaruh jika
+ perangkat tidak berada dalam mode multi-jendela.
+</p>
+
+<p class="note">
+ <strong>Catatan:</strong> Jika Anda meluncurkan aktivitas dalam tumpukan tugas, aktivitas
+ tersebut akan menggantikan aktivitas pada layar, dengan mewarisi semua
+ properti multi-jendelanya. Jika Anda ingin meluncurkan aktivitas baru sebagai jendela
+ terpisah dalam mode multi-jendela, Anda harus meluncurkannya dalam tumpukan tugas baru.
+</p>
+
+<h3 id="dnd">Mendukung seret dan lepas</h3>
+
+<p>
+ Pengguna bisa <a href="{@docRoot}guide/topics/ui/drag-drop.html">menyeret dan
+ melepas</a> data dari satu aktivitas ke aktivitas yang lain selagi kedua aktivitas
+ berbagi layar. (Sebelumnya, pengguna hanya bisa menyeret dan melepas data dalam
+ aktivitas tunggal.) Karena alasan ini, Anda mungkin perlu menambahkan fungsionalitas
+ seret dan lepas ke aplikasi jika aplikasi saat ini belum mendukungnya.
+</p>
+
+<p>
+ N Preview SDK menambahkan paket <a href="{@docRoot}reference/android/view/package-summary.html"><code>android.view</code></a>
+ untuk mendukung seret dan lepas lintas-aplikasi. Untuk mengetahui detail tentang kelas dan metode
+ berikut, lihat <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi N
+ Preview SDK</a>.
+</p>
+
+<dl>
+ <dt>
+ <code>android.view.DropPermissions</code>
+ </dt>
+
+ <dd>
+ Objek token bertanggung jawab menetapkan izin yang diberikan kepada aplikasi
+ yang menerima pelepasan tersebut.
+ </dd>
+
+ <dt>
+ <code>View.startDragAndDrop()</code>
+ </dt>
+
+ <dd>
+ Alias baru untuk {@link android.view.View#startDrag View.startDrag()}. Untuk
+ mengaktifkan seret dan lepas lintas-aktivitas, teruskan flag baru
+ <code>View.DRAG_FLAG_GLOBAL</code>. Jika Anda perlu memberikan izin URI ke
+ aktivitas penerima, teruskan flag baru,
+ <code>View.DRAG_FLAG_GLOBAL_URI_READ</code> atau
+ <code>View.DRAG_FLAG_GLOBAL_URI_WRITE</code>, sebagaimana mestinya.
+ </dd>
+
+ <dt>
+ <code>View.cancelDragAndDrop()</code>
+ </dt>
+
+ <dd>
+ Membatalkan operasi seret yang sedang berlangsung. Hanya bisa dipanggil oleh
+ aplikasi yang menghasilkan operasi seret.
+ </dd>
+
+ <dt>
+ <code>View.updateDragShadow()</code>
+ </dt>
+
+ <dd>
+ Menggantikan bayangan penyeretan untuk operasi seret yang sedang berlangsung. Hanya
+ bisa dipanggil oleh aplikasi yang menghasilkan operasi seret.
+ </dd>
+
+ <dt>
+ <code>Activity.requestDropPermissions()</code>
+ </dt>
+
+ <dd>
+ Meminta izin untuk URI materi yang diteruskan dengan {@link
+ android.content.ClipData} yang terdapat dalam {@link android.view.DragEvent}.
+ </dd>
+</dl>
+
+<h2 id="testing">Menguji Dukungan Multi-Jendela Aplikasi Anda</h2>
+
+<p>
+ Apakah Anda memperbarui aplikasi untuk Android N atau tidak, Anda harus
+ verifikasi bagaimana perilakunya di mode multi-jendela saat pengguna mencoba untuk menjalankannya
+ dalam mode multi-jendela pada perangkat yang menjalankan Android N.
+</p>
+
+<h3 id="configuring">Mengonfigurasi Perangkat Pengujian</h3>
+
+<p>
+ Jika Anda pasang Android N pada perangkat, mode
+ layar terbagi secara otomatis didukung.
+</p>
+
+<h3 id="test-non-n">Jika aplikasi Anda tidak dibangun dengan N Preview SDK</h3>
+
+<p>
+ Jika Anda tidak membangun aplikasi dengan N Preview SDK dan pengguna berupaya menggunakan
+ aplikasi dalam mode multi-jendela, sistem secara paksa akan mengubah ukuran aplikasi kecuali jika aplikasi
+ mendeklarasikan orientasi tetap.
+</p>
+
+<p>
+ Jika aplikasi Anda tidak mendeklarasikan orientasi tetap, Anda harus meluncurkan aplikasi
+ pada perangkat yang menjalankan Android N dan berupaya menempatkan aplikasi tersebut dalam
+ mode layar terbagi. Verifikasi pengalaman pengguna
+ bisa diterima bila aplikasi secara paksa diubah ukurannya.
+</p>
+
+<p>
+ Jika aplikasi mendeklarasikan orientasi tetap, Anda harus berupaya menempatkan aplikasi dalam
+ mode multi-jendela. Verifikasi apakah saat Anda melakukannya, aplikasi tetap berada dalam
+ mode layar penuh.
+</p>
+
+<h3 id="test-mw">Jika Anda mendukung mode multi-jendela</h3>
+
+<p>
+ Jika Anda membuat aplikasi Anda dengan N Preview SDK dan belum menonaktifkan
+ dukungan multi-jendela, verifikasi perilaku berikut dalam mode layar terbagi
+ dan mode bentuk bebas.
+</p>
+
+<ul>
+ <li>Luncurkan aplikasi dalam mode layar penuh, kemudian beralih ke mode multi-jendela dengan
+ menekan lama pada tombol Ringkasan. Verifikasi apakah aplikasi beralih dengan benar.
+ </li>
+
+ <li>Jalankan aplikasi secara langsung dalam mode multi-jendela, dan verifikasi aplikasi
+ diluncurkan dengan benar. Anda bisa meluncurkan aplikasi dalam mode multi-jendela dengan menekan
+ tombol Ringkasan, kemudian menekan lama baris judul pada aplikasi Anda dan menyeretnya
+ ke salah satu area yang disorot di layar.
+ </li>
+
+ <li>Ubah ukuran aplikasi Anda dalam mode layar terbagi dengan menyeret garis pembagi.
+ Verifikasi apakah aplikasi mengubah ukuran tanpa mogok, dan apakah elemen UI yang diperlukan
+ terlihat.
+ </li>
+
+ <li>Jika Anda telah menetapkan dimensi minimum aplikasi, cobalah untuk mengubah ukuran
+ aplikasi di bawah dimensi tersebut. Verifikasi apakah Anda tidak bisa mengubah ukuran aplikasi menjadi
+ lebih kecil dari minimum yang ditetapkan.
+ </li>
+
+ <li>Melalui semua pengujian, verifikasi apakah kinerja aplikasi Anda bisa diterima. Misalnya,
+ verifikasi apakah tidak ada jeda yang terlalu lama untuk memperbarui UI setelah
+ aplikasi diubah ukurannya.
+ </li>
+</ul>
+
+<h4 id="test-checklist">Daftar periksa pengujian</h4>
+
+<p>
+ Untuk verifikasi kinerja aplikasi Anda dalam mode multi-jendela, cobalah operasi
+ berikut. Anda harus mencoba semua operasi ini dalam mode layar terbagi dan
+ dan mode multi-jendela, kecuali jika dinyatakan berbeda.
+</p>
+
+<ul>
+ <li>Masuki dan tinggalkan mode multi-jendela.
+ </li>
+
+ <li>Beralih dari aplikasi Anda ke aplikasi lain, dan verifikasi apakah aplikasi berperilaku
+ sebagaimana mestinya saat terlihat namun tidak aktif. Misalnya, jika aplikasi Anda
+ sedang memutar video, verifikasi apakah video terus diputar selagi pengguna
+ berinteraksi dengan aplikasi lain.
+ </li>
+
+ <li>Dalam mode layar terbagi, cobalah menggeser garis pembagi untuk membuat aplikasi
+ Anda menjadi lebih besar dan lebih kecil. Coba operasi ini dalam konfigurasi berdampingan dan
+ atas-bawah. Verifikasi apakah aplikasi tidak mogok,
+ fungsionalitas penting bisa terlihat, dan operasi mengubah ukuran tidak memakan waktu terlalu
+ lama.
+ </li>
+
+ <li>Lakukan beberapa operasi ubah ukuran berturut-turut dalam waktu cepat. Verifikasi apakah
+ aplikasi Anda tidak mogok atau mengalami kebocoran memori. Untuk informasi tentang memeriksa penggunaan memori
+ aplikasi Anda, lihat <a href="{@docRoot}tools/debugging/debugging-memory.html">
+ Menyelidiki Penggunaan RAM Anda</a>.
+ </li>
+
+ <li>Gunakan aplikasi secara normal di sejumlah konfigurasi jendela yang berbeda, dan
+ verifikasi apakah aplikasi berperilaku sebagaimana mestinya. Verifikasi apakah teks terbaca, dan apakah
+ elemen UI tidak terlalu kecil untuk interaksi.
+ </li>
+</ul>
+
+<h3 id="test-disabled-mw">Jika Anda telah menonaktifkan dukungan multi-jendela</h3>
+
+<p>
+ Jika Anda menonaktifkan dukungan multi-jendela dengan menyetel
+ <code>android:resizableActivity="false"</code>, Anda harus menjalankan aplikasi pada
+ perangkat yang menjalankan Android N dan berusaha menempatkan aplikasi dalam
+ mode bentuk bebas dan mode layar terbagi. Verifikasi apakah saat Anda melakukannya, aplikasi tetap berada dalam
+ mode layar penuh.
+</p>
diff --git a/docs/html-intl/intl/id/guide/topics/ui/notifiers/notifications.jd b/docs/html-intl/intl/id/guide/topics/ui/notifiers/notifications.jd
new file mode 100644
index 0000000..bb48b80
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/topics/ui/notifiers/notifications.jd
@@ -0,0 +1,979 @@
+page.title=Pemberitahuan
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+<h2>Dalam dokumen ini</h2>
+<ol>
+ <li><a href="#Design">Pertimbangan Desain</a></li>
+ <li><a href="#CreateNotification">Membuat Pemberitahuan</a>
+ <ol>
+ <li><a href="#Required">Isi pemberitahuan yang diperlukan</a></li>
+ <li><a href="#Optional">Isi dan pengaturan pemberitahuan opsional</a></li>
+ <li><a href="#Actions">Tindakan pemberitahuan</a></li>
+ <li><a href="#Priority">Prioritas pemberitahuan</a></li>
+ <li><a href="#SimpleNotification">Membuat pemberitahuan sederhana</a></li>
+ <li><a href="#ApplyStyle">Menerapkan layout yang diperluas pada pemberitahuan</a></li>
+ <li><a href="#Compatibility">Menangani kompatibilitas</a></li>
+ </ol>
+ </li>
+ <li><a href="#Managing">Mengelola Pemberitahuan</a>
+ <ol>
+ <li><a href="#Updating">Memperbarui pemberitahuan</a></li>
+ <li><a href="#Removing">Menghapus pemberitahuan</a></li>
+ </ol>
+ </li>
+ <li><a href="#NotificationResponse">Mempertahankan Navigasi saat Memulai Aktivitas</a>
+ <ol>
+ <li><a href="#DirectEntry">Menyiapkan PendingIntent aktivitas biasa</a></li>
+ <li><a href="#ExtendedNotification">Menyiapkan PendingIntent aktivitas khusus</a></li>
+ </ol>
+ </li>
+ <li><a href="#Progress">Menampilkan Kemajuan dalam Pemberitahuan</a>
+ <ol>
+ <li><a href="#FixedProgress">Menampilkan indikator kemajuan berdurasi tetap</a></li>
+ <li><a href="#ActivityIndicator">Menampilkan indikator aktivitas berlanjut</a></li>
+ </ol>
+ </li>
+ <li><a href="#metadata">Metadata Pemberitahuan</a></li>
+ <li><a href="#Heads-up">Pemberitahuan Pendahuluan</a></li>
+ <li><a href="#lockscreenNotification">Pemberitahuan Layar Kunci</a></li>
+ <ol>
+ <li><a href="#visibility">Mengatur Visibilitas</a></li>
+ <li><a href="#controllingMedia">Mengontrol Pemutaran Media pada Layar Kunci</a></li>
+ </ol>
+ <li><a href="#CustomNotification">Layout Pemberitahuan Custom</a></li>
+</ol>
+
+ <h2>Kelas-kelas utama</h2>
+ <ol>
+ <li>{@link android.app.NotificationManager}</li>
+ <li>{@link android.support.v4.app.NotificationCompat}</li>
+ </ol>
+ <h2>Video</h2>
+ <ol>
+ <li>
+ <a href="http://www.youtube.com/watch?v=Yc8YrVc47TI&feature=player_detailpage#t=1672s">
+ Pemberitahuan di 4.1</a>
+ </li>
+ </ol>
+<h2>Lihat juga</h2>
+<ol>
+ <li>
+ <a href="{@docRoot}design/patterns/notifications.html">Desain Android: Pemberitahuan</a>
+ </li>
+</ol>
+</div>
+</div>
+<p>
+ Pemberitahuan adalah pesan yang bisa Anda tampilkan kepada pengguna di luar
+ UI normal aplikasi. Bila Anda memberi tahu sistem untuk mengeluarkan pemberitahuan, pemberitahuan akan muncul lebih dahulu sebagai ikon dalam
+ <strong>area pemberitahuan</strong>. Untuk melihat detail pemberitahuan, pengguna membuka
+ <strong>laci pemberitahuan</strong>. Baik area pemberitahuan maupun laci pemberitahuan
+ adalah area-area yang dikontrol sistem yang bisa dilihat pengguna kapan saja.
+</p>
+<img id="figure1" src="{@docRoot}images/ui/notifications/notification_area.png" height="" alt="" />
+<p class="img-caption">
+ <strong>Gambar 1.</strong> Pemberitahuan di area pemberitahuan.
+</p>
+<img id="figure2" src="{@docRoot}images/ui/notifications/notification_drawer.png" width="280px" alt="" />
+<p class="img-caption">
+ <strong>Gambar 2.</strong> Pemberitahuan di laci pemberitahuan.
+</p>
+
+<p class="note"><strong>Catatan:</strong> Kecuali disebutkan, panduan ini mengacu pada
+kelas {@link android.support.v4.app.NotificationCompat.Builder NotificationCompat.Builder}
+dalam <a href="{@docRoot}tools/support-library/index.html">Support Library</a> versi 4.
+Kelas {@link android.app.Notification.Builder Notification.Builder} telah ditambahkan pada Android
+3.0 (API level 11).</p>
+
+<h2 id="Design">Pertimbangan Desain</h2>
+
+<p>Pemberitahuan, sebagai bagian penting dari antarmuka pengguna Android, memiliki panduan desainnya sendiri.
+Perubahan desain materi yang diperkenalkan dalam Android 5.0 (API level 21) adalah sangat
+penting, dan Anda harus meninjau pelatihan <a href="{@docRoot}training/material/index.html">Desain Bahan</a>
+untuk informasi selengkapnya. Untuk mengetahui cara mendesain pemberitahuan dan interaksinya, bacalah panduan desain
+<a href="{@docRoot}design/patterns/notifications.html">Pemberitahuan</a>.</p>
+
+<h2 id="CreateNotification">Membuat Pemberitahuan</h2>
+
+<p>Anda menetapkan informasi dan tindakan UI bagi pemberitahuan dalam
+objek {@link android.support.v4.app.NotificationCompat.Builder NotificationCompat.Builder}.
+Untuk membuat pemberitahuan itu sendiri, panggil
+{@link android.support.v4.app.NotificationCompat.Builder#build NotificationCompat.Builder.build()},
+yang akan mengembalikan objek {@link android.app.Notification} berisi spesifikasi Anda. Untuk mengeluarkan
+pemberitahuan, Anda meneruskan objek {@link android.app.Notification} ke sistem dengan memanggil
+{@link android.app.NotificationManager#notify NotificationManager.notify()}.</p>
+
+<h3 id="Required">Isi pemberitahuan yang diperlukan</h3>
+<p>
+ Objek {@link android.app.Notification} <em>harus</em> berisi yang berikut ini:
+</p>
+<ul>
+ <li>
+ Ikon kecil, yang diatur dengan
+ {@link android.support.v4.app.NotificationCompat.Builder#setSmallIcon setSmallIcon()}
+ </li>
+ <li>
+ Judul, yang diatur dengan
+ {@link android.support.v4.app.NotificationCompat.Builder#setContentTitle setContentTitle()}
+ </li>
+ <li>
+ Teks detail, yang diatur dengan
+ {@link android.support.v4.app.NotificationCompat.Builder#setContentText setContentText()}
+ </li>
+</ul>
+<h3 id="Optional">Isi dan pengaturan pemberitahuan opsional</h3>
+<p>
+ Semua isi dan pengaturan pemberitahuan lainnya bersifat opsional. Untuk mengetahui selengkapnya tentang semua itu,
+ lihat dokumentasi acuan untuk {@link android.support.v4.app.NotificationCompat.Builder}.
+</p>
+<!-- ------------------------------------------------------------------------------------------ -->
+<h3 id="Actions">Tindakan pemberitahuan</h3>
+<p>
+ Walaupun bersifat opsional, Anda harus menambahkan setidaknya satu tindakan pada pemberitahuan.
+ Tindakan memungkinkan pengguna beralih langsung dari pemberitahuan ke
+ {@link android.app.Activity} dalam aplikasi Anda, tempat pengguna bisa melihat satu atau beberapa kejadian
+ atau melakukan pekerjaan lebih jauh.
+</p>
+<p>
+ Pemberitahuan bisa menyediakan beberapa tindakan sekaligus. Anda harus selalu mendefinisikan tindakan yang
+ akan diaktifkan bila pengguna mengklik pemberitahuan; biasanya tindakan ini akan membuka
+ {@link android.app.Activity} dalam aplikasi Anda. Anda juga bisa menambahkan tombol pada pemberitahuan
+ yang melakukan tindakan tambahan seperti mendiamkan alarm atau segera merespons
+ pesan teks; fitur ini tersedia mulai Android 4.1. Jika menggunakan tombol tindakan tambahan, Anda
+ juga harus membuat fungsionalitasnya tersedia dalam {@link android.app.Activity} di aplikasi Anda; lihat
+ bagian <a href="#Compatibility">Menangani kompatibilitas</a> untuk detail selengkapnya.
+</p>
+<p>
+ Dalam {@link android.app.Notification}, tindakan itu sendiri didefinisikan oleh
+ {@link android.app.PendingIntent} berisi
+ {@link android.content.Intent} yang memulai
+ {@link android.app.Activity} dalam aplikasi Anda. Untuk mengaitkan
+ {@link android.app.PendingIntent} dengan gestur, panggil metode
+ {@link android.support.v4.app.NotificationCompat.Builder} yang sesuai. Misalnya, jika ingin memulai
+ {@link android.app.Activity} bila pengguna mengklik teks pemberitahuan pada
+ laci pemberitahuan, tambahkan {@link android.app.PendingIntent} dengan memanggil
+ {@link android.support.v4.app.NotificationCompat.Builder#setContentIntent setContentIntent()}.
+</p>
+<p>
+ Memulai {@link android.app.Activity} bila pengguna mengklik pemberitahuan adalah
+ skenario tindakan yang paling umum. Anda juga bisa memulai {@link android.app.Activity} bila pengguna
+ menghilangkan pemberitahuan. Dalam Android 4.1 dan yang lebih baru, Anda bisa memulai
+ {@link android.app.Activity} dari tombol tindakan. Untuk mengetahui selengkapnya, bacalah panduan acuan untuk
+ {@link android.support.v4.app.NotificationCompat.Builder}.
+</p>
+<!-- ------------------------------------------------------------------------------------------ -->
+<h3 id="Priority">Prioritas pemberitahuan</h3>
+<p>
+ Jika diinginkan, Anda bisa mengatur prioritas pemberitahuan. Prioritas berfungsi
+ sebagai petunjuk bagi UI perangkat tentang cara menampilkan pemberitahuan.
+ Untuk mengatur prioritas pemberitahuan, panggil {@link
+ android.support.v4.app.NotificationCompat.Builder#setPriority(int)
+ NotificationCompat.Builder.setPriority()} dan teruskan salah satu konstanta prioritas {@link
+ android.support.v4.app.NotificationCompat}. Ada
+ lima level prioritas, mulai dari {@link
+ android.support.v4.app.NotificationCompat#PRIORITY_MIN} (-2) hingga {@link
+ android.support.v4.app.NotificationCompat#PRIORITY_MAX} (2); jika tidak diatur,
+ prioritas default akan ditetapkan {@link
+ android.support.v4.app.NotificationCompat#PRIORITY_DEFAULT} (0).
+</p>
+<p> Untuk informasi tentang mengatur level prioritas, lihat "Mengatur
+ dan mengelola prioritas pemberitahuan dengan benar" dalam panduan
+Desain <a href="{@docRoot}design/patterns/notifications.html">Pemberitahuan</a>.
+</p>
+<!-- ------------------------------------------------------------------------------------------ -->
+<h3 id="SimpleNotification">Membuat pemberitahuan sederhana</h3>
+<p>
+ Cuplikan berikut mengilustrasikan pemberitahuan sederhana yang menetapkan aktivitas untuk dibuka bila
+ pengguna mengklik pemberitahuan. Perhatikan bahwa kode ini membuat
+ objek {@link android.support.v4.app.TaskStackBuilder} dan menggunakannya untuk membuat
+ {@link android.app.PendingIntent} untuk tindakan. Pola ini dijelaskan secara lebih detail
+ di bagian <a href="#NotificationResponse">
+ Mempertahankan Navigasi saat Memulai Aktivitas</a>:
+</p>
+<pre>
+NotificationCompat.Builder mBuilder =
+ new NotificationCompat.Builder(this)
+ .setSmallIcon(R.drawable.notification_icon)
+ .setContentTitle("My notification")
+ .setContentText("Hello World!");
+// Creates an explicit intent for an Activity in your app
+Intent resultIntent = new Intent(this, ResultActivity.class);
+
+// The stack builder object will contain an artificial back stack for the
+// started Activity.
+// This ensures that navigating backward from the Activity leads out of
+// your application to the Home screen.
+TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
+// Adds the back stack for the Intent (but not the Intent itself)
+stackBuilder.addParentStack(ResultActivity.class);
+// Adds the Intent that starts the Activity to the top of the stack
+stackBuilder.addNextIntent(resultIntent);
+PendingIntent resultPendingIntent =
+ stackBuilder.getPendingIntent(
+ 0,
+ PendingIntent.FLAG_UPDATE_CURRENT
+ );
+mBuilder.setContentIntent(resultPendingIntent);
+NotificationManager mNotificationManager =
+ (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+// mId allows you to update the notification later on.
+mNotificationManager.notify(mId, mBuilder.build());
+</pre>
+<p>Demikian saja. Pengguna Anda kini telah diberi tahu.</p>
+<!-- ------------------------------------------------------------------------------------------ -->
+<h3 id="ApplyStyle">Menerapkan layout yang diperluas pada pemberitahuan</h3>
+<p>
+ Agar pemberitahuan muncul dalam tampilan yang diperluas, buat dahulu
+ objek {@link android.support.v4.app.NotificationCompat.Builder} dengan opsi tampilan normal
+ yang Anda inginkan. Berikutnya, panggil {@link android.support.v4.app.NotificationCompat.Builder#setStyle
+ Builder.setStyle()} dengan objek layout yang diperluas sebagai argumennya.
+</p>
+<p>
+ Ingatlah bahwa pemberitahuan yang diperluas tidak tersedia pada platform-platform sebelum Android 4.1. Untuk
+ mengetahui cara menangani pemberitahuan untuk Android 4.1 dan untuk platform-platform sebelumnya, bacalah
+ bagian <a href="#Compatibility">Menangani kompatibilitas</a>.
+</p>
+<p>
+ Misalnya, cuplikan kode berikut memperagakan cara mengubah pemberitahuan yang dibuat
+ dalam cuplikan sebelumnya untuk menggunakan layout yang diperluas:
+</p>
+<pre>
+NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
+ .setSmallIcon(R.drawable.notification_icon)
+ .setContentTitle("Event tracker")
+ .setContentText("Events received")
+NotificationCompat.InboxStyle inboxStyle =
+ new NotificationCompat.InboxStyle();
+String[] events = new String[6];
+// Sets a title for the Inbox in expanded layout
+inboxStyle.setBigContentTitle("Event tracker details:");
+...
+// Moves events into the expanded layout
+for (int i=0; i < events.length; i++) {
+
+ inboxStyle.addLine(events[i]);
+}
+// Moves the expanded layout object into the notification object.
+mBuilder.setStyle(inBoxStyle);
+...
+// Issue the notification here.
+</pre>
+
+<h3 id="Compatibility">Menangani kompatibilitas</h3>
+
+<p>
+ Tidak semua fitur pemberitahuan tersedia untuk versi tertentu, walaupun
+ metode untuk mengaturnya ada dalam kelas pustaka dukungan
+ {@link android.support.v4.app.NotificationCompat.Builder NotificationCompat.Builder}.
+ Misalnya, tombol tindakan, yang bergantung pada pemberitahuan yang diperluas, hanya muncul pada Android
+ 4.1 dan lebih tinggi, karena pemberitahuan yang diperluas itu sendiri hanya tersedia pada
+ Android 4.1 dan yang lebih tinggi.
+</p>
+<p>
+ Untuk memastikan kompatibilitas terbaik, buatlah pemberitahuan dengan
+ {@link android.support.v4.app.NotificationCompat NotificationCompat} dan subkelasnya,
+ khususnya {@link android.support.v4.app.NotificationCompat.Builder
+ NotificationCompat.Builder}. Selain itu, ikutilah proses ini bila Anda mengimplementasikan pemberitahuan:
+</p>
+<ol>
+ <li>
+ Sediakan semua fungsionalitas pemberitahuan kepada semua pengguna, terlepas dari versi
+ yang mereka gunakan. Caranya, pastikan semua fungsionalitas tersedia dari
+ {@link android.app.Activity} dalam aplikasi Anda. Anda mungkin perlu menambahkan sebuah
+ {@link android.app.Activity} baru untuk melakukannya.
+ <p>
+ Misalnya, jika Anda ingin menggunakan
+ {@link android.support.v4.app.NotificationCompat.Builder#addAction addAction()} untuk
+ menyediakan kontrol yang menghentikan dan memulai pemutaran media, implementasikan dahulu
+ kontrol ini pada {@link android.app.Activity} dalam aplikasi Anda.
+ </p>
+ </li>
+ <li>
+ Pastikan semua pengguna bisa memperoleh fungsionalitas dalam {@link android.app.Activity},
+ dengan memulainya bila pengguna mengklik pemberitahuan. Caranya,
+ buatlah {@link android.app.PendingIntent}
+ untuk {@link android.app.Activity}. Panggil
+ {@link android.support.v4.app.NotificationCompat.Builder#setContentIntent
+ setContentIntent()} untuk menambahkan {@link android.app.PendingIntent} pada pemberitahuan.
+ </li>
+ <li>
+ Kini tambahkan fitur pemberitahuan diperluas yang ingin Anda gunakan pada pemberitahuan. Ingatlah
+ bahwa setiap fungsionalitas yang Anda tambahkan juga harus tersedia dalam {@link android.app.Activity}
+ yang akan dimulai bila pengguna mengklik pemberitahuan.
+ </li>
+</ol>
+
+
+<!-- ------------------------------------------------------------------------------------------ -->
+<!-- ------------------------------------------------------------------------------------------ -->
+<h2 id="Managing">Mengelola Pemberitahuan</h2>
+<p>
+ Bila perlu mengeluarkan pemberitahuan beberapa kali untuk tipe kejadian yang sama,
+hindari membuat pemberitahuan yang sama sekali baru. Sebagai gantinya, Anda harus mempertimbangkan untuk memperbarui
+ pemberitahuan sebelumnya, baik dengan mengubah sebagian nilainya atau dengan menambahkan nilai, atau keduanya.
+</p>
+<p>
+ Misalnya, Gmail akan memberi tahu pengguna bila ada email baru dengan menambah hitungan
+ pesan tidak terbaca dan dengan menambahkan rangkuman tiap email ke pemberitahuan. Ini disebut dengan
+ "stacking" (menumpuk) pemberitahuan; hal ini dijelaskan lebih detail dalam panduan
+ Desain <a href="{@docRoot}design/patterns/notifications.html">Pemberitahuan</a>.
+</p>
+<p class="note">
+ <strong>Catatan:</strong> Fitur Gmail ini mensyaratkan layout "kotak masuk" diperluas, yang merupakan
+ bagian dari fitur pemberitahuan diperluas yang tersedia mulai Android 4.1.
+</p>
+<p>
+ Bagian berikut menjelaskan cara memperbarui pemberitahuan dan cara menghapusnya.
+</p>
+<h3 id="Updating">Memperbarui pemberitahuan</h3>
+<p>
+ Untuk menyiapkan pemberitahuan agar bisa diperbarui, keluarkan pemberitahuan bersama ID pemberitahuan dengan
+ memanggil {@link android.app.NotificationManager#notify(int, android.app.Notification) NotificationManager.notify()}.
+ Untuk memperbarui pemberitahuan ini setelah Anda
+ mengeluarkan, memperbarui, atau membuat objek {@link android.support.v4.app.NotificationCompat.Builder},
+ buat objek {@link android.app.Notification} darinya, dan keluarkan
+ {@link android.app.Notification} bersama ID yang sama dengan yang Anda gunakan sebelumnya. Jika
+ pemberitahuan sebelumnya tetap terlihat, sistem akan memperbaruinya dari konten
+ objek {@link android.app.Notification}. Jika pemberitahuan sebelumnya telah dihilangkan, sebuah
+ pemberitahuan baru akan dibuat.
+</p>
+<p>
+ Cuplikan berikut memperagakan pemberitahuan yang diperbarui untuk mencerminkan
+ jumlah kejadian yang telah terjadi. Cuplikan ini menumpuk pemberitahuan, yang menampilkan rangkuman:
+</p>
+<pre>
+mNotificationManager =
+ (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+// Sets an ID for the notification, so it can be updated
+int notifyID = 1;
+mNotifyBuilder = new NotificationCompat.Builder(this)
+ .setContentTitle("New Message")
+ .setContentText("You've received new messages.")
+ .setSmallIcon(R.drawable.ic_notify_status)
+numMessages = 0;
+// Start of a loop that processes data and then notifies the user
+...
+ mNotifyBuilder.setContentText(currentText)
+ .setNumber(++numMessages);
+ // Because the ID remains unchanged, the existing notification is
+ // updated.
+ mNotificationManager.notify(
+ notifyID,
+ mNotifyBuilder.build());
+...
+</pre>
+
+<!-- ------------------------------------------------------------------------------------------ -->
+<h3 id="Removing">Menghapus pemberitahuan</h3>
+<p>
+ Pemberitahuan tetap terlihat hingga salah satu kejadian berikut terjadi:
+</p>
+<ul>
+ <li>
+ Pengguna menghilangkan pemberitahuan satu per satu atau dengan menggunakan "Clear All" (jika
+ pemberitahuan bisa dihapus).
+ </li>
+ <li>
+ Pengguna mengklik pemberitahuan, dan Anda memanggil
+ {@link android.support.v4.app.NotificationCompat.Builder#setAutoCancel setAutoCancel()} bila
+ Anda telah membuat pemberitahuan.
+ </li>
+ <li>
+ Anda memanggil {@link android.app.NotificationManager#cancel(int) cancel()} untuk
+ ID pemberitahuan tertentu. Metode ini juga menghapus pemberitahuan yang berjalan.
+ </li>
+ <li>
+ Anda memanggil {@link android.app.NotificationManager#cancelAll() cancelAll()}, yang menghapus
+ semua pemberitahuan yang dikeluarkan sebelumnya.
+ </li>
+</ul>
+<!-- ------------------------------------------------------------------------------------------ -->
+<!-- ------------------------------------------------------------------------------------------ -->
+<h2 id="NotificationResponse">Mempertahankan Navigasi saat Memulai Aktivitas</h2>
+<p>
+ Bila memulai {@link android.app.Activity} dari pemberitahuan, Anda harus mempertahankan
+ pengalaman navigasi yang diharapkan pengguna. Mengklik <i>Back</i> harus membawa pengguna kembali melalui
+ aliran pekerjaan normal aplikasi ke layar Home, dan mengklik <i>Recents</i> harus menampilkan
+ {@link android.app.Activity} sebagai tugas terpisah. Untuk mempertahankan pengalaman navigasi, Anda
+ harus memulai {@link android.app.Activity} dalam tugas baru. Cara menyiapkan
+ {@link android.app.PendingIntent} untuk memberi Anda tugas baru bergantung pada sifat
+ {@link android.app.Activity} yang Anda mulai. Ada dua situasi umum:
+</p>
+<dl>
+ <dt>
+ Aktivitas rutin
+ </dt>
+ <dd>
+ Anda memulai {@link android.app.Activity} yang merupakan bagian dari aliran pekerjaan normal
+ aplikasi. Dalam situasi ini, siapkan {@link android.app.PendingIntent} untuk
+ memulai tugas baru, dan sediakan {@link android.app.PendingIntent} bersama back-stack
+ yang meniru perilaku <i>Back</i> biasa.
+ <p>
+ Pemberitahuan dari aplikasi Gmail memperagakan hal ini. Bila Anda mengklik pemberitahuan untuk
+ satu pesan email, Anda akan melihat pesan itu sendiri. Menyentuh <b>Back</b> akan membawa Anda
+ kembali melalui Gmail ke layar Home, persis seperti jika memasuki Gmail dari
+ layar Home bukannya memasukinya dari pemberitahuan.
+ </p>
+ <p>
+ Hal ini terjadi terlepas dari aplikasi tempat Anda berada saat menyentuh
+ pemberitahuan. Misalnya, jika Anda dalam Gmail sedang menulis pesan, dan Anda mengklik
+ pemberitahuan untuk satu email, Anda akan segera dibawa ke email itu. Menyentuh <i>Back</i>
+ akan membawa Anda ke kotak masuk kemudian layar Home, bukannya membawa Anda ke
+ pesan yang sedang ditulis.
+ </p>
+ </dd>
+ <dt>
+ Aktivitas khusus
+ </dt>
+ <dd>
+ Pengguna hanya melihat {@link android.app.Activity} ini jika dimulai dari pemberitahuan.
+ Dalam beberapa hal, {@link android.app.Activity} akan memperluas pemberitahuan dengan menyediakan
+ informasi yang akan sulit untuk ditampilkan dalam pemberitahuan itu sendiri. Untuk situasi ini,
+ siapkan {@link android.app.PendingIntent} untuk dimulai dalam tugas baru. Tidak perlu
+ membuat back-stack, karena {@link android.app.Activity} yang dimulai bukan bagian dari
+ aliran aktivitas aplikasi. Mengklik <i>Back</i> tetap akan membawa pengguna ke
+ layar Home.
+ </dd>
+</dl>
+<!-- ------------------------------------------------------------------------------------------ -->
+<h3 id="DirectEntry">Menyiapkan PendingIntent aktivitas biasa</h3>
+<p>
+ Untuk menyiapkan {@link android.app.PendingIntent} yang memulai entri langsung
+ {@link android.app.Activity}, ikuti langkah-langkah ini:
+</p>
+<ol>
+ <li>
+ Definisikan hierarki {@link android.app.Activity} aplikasi Anda dalam manifes.
+ <ol style="list-style-type: lower-alpha;">
+ <li>
+ Tambahkan dukungan untuk Android 4.0.3 dan yang terdahulu. Caranya, tetapkan induk
+ {@link android.app.Activity} yang Anda mulai dengan menambahkan elemen
+<code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html"><meta-data></a></code>
+ sebagai anak
+<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>.
+ <p>
+ Untuk elemen ini, atur
+<code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html#nm">android:name</a>="android.support.PARENT_ACTIVITY"</code>.
+ Atur
+<code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html#val">android:value</a>="<parent_activity_name>"</code>
+ dengan <code><parent_activity_name></code> sebagai nilai
+<code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html#nm">android:name</a></code>
+ untuk elemen induk
+<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>
+. Lihat XML berikut sebagai contoh.
+ </p>
+ </li>
+ <li>
+ Juga tambahkan dukungan untuk Android 4.1 dan yang lebih baru. Caranya, tambahkan atribut
+<code><a href="{@docRoot}guide/topics/manifest/activity-element.html#parent">android:parentActivityName</a></code>
+ pada elemen
+<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>
+ dari {@link android.app.Activity} yang Anda mulai.
+ </li>
+ </ol>
+ <p>
+ XML akhir akan terlihat seperti ini:
+ </p>
+<pre>
+<activity
+ android:name=".MainActivity"
+ android:label="@string/app_name" >
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+</activity>
+<activity
+ android:name=".ResultActivity"
+ android:parentActivityName=".MainActivity">
+ <meta-data
+ android:name="android.support.PARENT_ACTIVITY"
+ android:value=".MainActivity"/>
+</activity>
+</pre>
+ </li>
+ <li>
+ Buat back-stack berdasarkan {@link android.content.Intent} yang memulai
+ {@link android.app.Activity}:
+ <ol style="list-style-type: lower-alpha;">
+ <li>
+ Buat {@link android.content.Intent} untuk memulai {@link android.app.Activity}.
+ </li>
+ <li>
+ Buat stack-builder (pembangun tumpukan) dengan memanggil {@link android.app.TaskStackBuilder#create
+ TaskStackBuilder.create()}.
+ </li>
+ <li>
+ Tambahkan back-stack ke stack-builder dengan memanggil
+ {@link android.support.v4.app.TaskStackBuilder#addParentStack addParentStack()}.
+ Untuk setiap {@link android.app.Activity} dalam hierarki yang telah Anda definisikan dalam
+ manifes, back-stack berisi objek {@link android.content.Intent} yang
+ memulai {@link android.app.Activity}. Metode ini juga menambahkan flag yang memulai
+ back-stack dalam tugas baru.
+ <p class="note">
+ <strong>Catatan:</strong> Walaupun argumen untuk
+ {@link android.support.v4.app.TaskStackBuilder#addParentStack addParentStack()}
+ adalah acuan ke {@link android.app.Activity} yang dimulai, panggilan metode
+ tidak akan menambahkan {@link android.content.Intent} yang memulai
+ {@link android.app.Activity}. Sebagai gantinya, hal itu ditangani dalam langkah berikutnya.
+ </p>
+ </li>
+ <li>
+ Tambahkan {@link android.content.Intent} yang memulai {@link android.app.Activity}
+ dari pemberitahuan, dengan memanggil
+ {@link android.support.v4.app.TaskStackBuilder#addNextIntent addNextIntent()}.
+ Teruskan {@link android.content.Intent} yang Anda buat dalam langkah pertama sebagai
+ argumen ke
+ {@link android.support.v4.app.TaskStackBuilder#addNextIntent addNextIntent()}.
+ </li>
+ <li>
+ Jika perlu, tambahkan argumen ke objek {@link android.content.Intent} pada
+ back-stack dengan memanggil {@link android.support.v4.app.TaskStackBuilder#editIntentAt
+ TaskStackBuilder.editIntentAt()}. Kadang-kadang perlu memastikan apakah
+ {@link android.app.Activity} target menampilkan data bermakna saat pengguna menelusurinya
+ dengan menggunakan <i>Back</i>.
+ </li>
+ <li>
+ Dapatkan {@link android.app.PendingIntent} untuk back-stack ini dengan memanggil
+ {@link android.support.v4.app.TaskStackBuilder#getPendingIntent getPendingIntent()}.
+ Anda nanti bisa menggunakan {@link android.app.PendingIntent} ini sebagai argumen untuk
+ {@link android.support.v4.app.NotificationCompat.Builder#setContentIntent
+ setContentIntent()}.
+ </li>
+ </ol>
+ </li>
+</ol>
+<p>
+ Cuplikan kode berikut memperagakan prosesnya:
+</p>
+<pre>
+...
+Intent resultIntent = new Intent(this, ResultActivity.class);
+TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
+// Adds the back stack
+stackBuilder.addParentStack(ResultActivity.class);
+// Adds the Intent to the top of the stack
+stackBuilder.addNextIntent(resultIntent);
+// Gets a PendingIntent containing the entire back stack
+PendingIntent resultPendingIntent =
+ stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
+...
+NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
+builder.setContentIntent(resultPendingIntent);
+NotificationManager mNotificationManager =
+ (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+mNotificationManager.notify(id, builder.build());
+</pre>
+<!-- ------------------------------------------------------------------------------------------ -->
+<h3 id="ExtendedNotification">Menyiapkan PendingIntent aktivitas khusus</h3>
+<p>
+ Bagian berikut menjelaskan cara menyiapkan aktivitas khusus
+ {@link android.app.PendingIntent}.
+</p>
+<p>
+ {@link android.app.Activity} khusus tidak memerlukan back-stack, sehingga Anda tidak perlu
+ mendefinisikan hierarki {@link android.app.Activity}-nya dalam manifes, dan Anda tidak perlu
+ memanggil
+ {@link android.support.v4.app.TaskStackBuilder#addParentStack addParentStack()} untuk membuat
+ back-stack. Sebagai gantinya, gunakan manifes untuk menyiapkan opsi tugas {@link android.app.Activity},
+ dan buat {@link android.app.PendingIntent} dengan memanggil
+ {@link android.app.PendingIntent#getActivity getActivity()}:
+</p>
+<ol>
+ <li>
+ Dalam manifes, tambahkan atribut berikut pada elemen
+<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>
+ untuk {@link android.app.Activity}
+ <dl>
+ <dt>
+<code><a href="{@docRoot}guide/topics/manifest/activity-element.html#nm">android:name</a>="<i>activityclass</i>"</code>
+ </dt>
+ <dd>
+ Nama kelas mutlak (fully qualified) aktivitas.
+ </dd>
+ <dt>
+<code><a href="{@docRoot}guide/topics/manifest/activity-element.html#aff">android:taskAffinity</a>=""</code>
+ </dt>
+ <dd>
+ Dikombinasikan dengan flag
+ {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK FLAG_ACTIVITY_NEW_TASK}
+ yang Anda atur dalam kode, ini memastikan bahwa {@link android.app.Activity} ini tidak
+ masuk ke dalam tugas default aplikasi. Setiap tugas yang ada yang memiliki
+ afinitas default aplikasi tidak terpengaruh.
+ </dd>
+ <dt>
+<code><a href="{@docRoot}guide/topics/manifest/activity-element.html#exclude">android:excludeFromRecents</a>="true"</code>
+ </dt>
+ <dd>
+ Mengecualikan tugas baru dari <i>Recents</i>, sehingga pengguna tidak bisa tanpa sengaja
+ mengarahkan kembali.
+ </dd>
+ </dl>
+ <p>
+ Cuplikan ini menampilkan elemen:
+ </p>
+<pre>
+<activity
+ android:name=".ResultActivity"
+...
+ android:launchMode="singleTask"
+ android:taskAffinity=""
+ android:excludeFromRecents="true">
+</activity>
+...
+</pre>
+ </li>
+ <li>
+ Buat dan keluarkan pemberitahuan:
+ <ol style="list-style-type: lower-alpha;">
+ <li>
+ Buat {@link android.content.Intent} yang memulai
+ {@link android.app.Activity}.
+ </li>
+ <li>
+ Atur {@link android.app.Activity} untuk dimulai dalam tugas kosong yang baru dengan memanggil
+ {@link android.content.Intent#setFlags setFlags()} dengan flag
+ {@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK FLAG_ACTIVITY_NEW_TASK}
+ dan
+ {@link android.content.Intent#FLAG_ACTIVITY_CLEAR_TASK FLAG_ACTIVITY_CLEAR_TASK}.
+ </li>
+ <li>
+ Atur setiap opsi lain yang Anda perlukan untuk {@link android.content.Intent}.
+ </li>
+ <li>
+ Buat {@link android.app.PendingIntent} dari {@link android.content.Intent}
+ dengan memanggil {@link android.app.PendingIntent#getActivity getActivity()}.
+ Anda nanti bisa menggunakan {@link android.app.PendingIntent} ini sebagai argumen untuk
+ {@link android.support.v4.app.NotificationCompat.Builder#setContentIntent
+ setContentIntent()}.
+ </li>
+ </ol>
+ <p>
+ Cuplikan kode berikut memperagakan prosesnya:
+ </p>
+<pre>
+// Instantiate a Builder object.
+NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
+// Creates an Intent for the Activity
+Intent notifyIntent =
+ new Intent(this, ResultActivity.class);
+// Sets the Activity to start in a new, empty task
+notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
+ | Intent.FLAG_ACTIVITY_CLEAR_TASK);
+// Creates the PendingIntent
+PendingIntent notifyPendingIntent =
+ PendingIntent.getActivity(
+ this,
+ 0,
+ notifyIntent,
+ PendingIntent.FLAG_UPDATE_CURRENT
+);
+
+// Puts the PendingIntent into the notification builder
+builder.setContentIntent(notifyPendingIntent);
+// Notifications are issued by sending them to the
+// NotificationManager system service.
+NotificationManager mNotificationManager =
+ (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+// Builds an anonymous Notification object from the builder, and
+// passes it to the NotificationManager
+mNotificationManager.notify(id, builder.build());
+</pre>
+ </li>
+</ol>
+<!-- ------------------------------------------------------------------------------------------ -->
+<!-- ------------------------------------------------------------------------------------------ -->
+<h2 id="Progress">Menampilkan Kemajuan dalam Pemberitahuan</h2>
+<p>
+ Pemberitahuan bisa menyertakan indikator kemajuan beranimasi yang menampilkan status
+operasi yang berjalan kepada pengguna. Jika Anda bisa memperkirakan lamanya operasi berlangsung dan berapa banyak
+ yang sudah selesai pada suatu waktu, gunakan bentuk indikator yang "pasti"
+ (baris kemajuan). Jika Anda tidak bisa memperkirakan lamanya operasi, gunakan
+ bentuk indikator "tidak pasti" (indikator aktivitas).
+</p>
+<p>
+ Indikator kemajuan ditampilkan bersama implementasi platform
+ kelas {@link android.widget.ProgressBar}.
+</p>
+<p>
+ Untuk menggunakan indikator kemajuan pada platform mulai dari Android 4.0, panggil
+ {@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress()}. Untuk
+ versi sebelumnya, Anda harus membuat layout pemberitahuan custom sendiri yang
+menyertakan tampilan {@link android.widget.ProgressBar}.
+</p>
+<p>
+ Bagian berikut ini menjelaskan cara menampilkan kemajuan dalam pemberitahuan dengan menggunakan
+ {@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress()}.
+</p>
+<!-- ------------------------------------------------------------------------------------------ -->
+<h3 id="FixedProgress">Menampilkan indikator kemajuan berdurasi tetap</h3>
+<p>
+ Untuk menampilkan baris kemajuan pasti, tambahkan baris itu ke pemberitahuan dengan memanggil
+ {@link android.support.v4.app.NotificationCompat.Builder#setProgress
+ setProgress(max, progress, false)}, kemudian keluarkan pemberitahuan. Selagi operasi berlangsung,
+ tambah <code>progress</code>, dan perbarui pemberitahuan. Di akhir operasi,
+ <code>progress</code> harus sama dengan <code>max</code>. Satu cara umum memanggil
+ {@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress()}
+ adalah mengatur <code>max</code> ke 100, kemudian tambah <code>progress</code> sebagai
+ nilai "persen selesai"untuk operasi itu.
+</p>
+<p>
+ Anda bisa membiarkan baris kemajuan ditampilkan saat operasi selesai, atau menghilangkannya. Dalam
+ hal apa pun, ingatlah memperbarui teks pemberitahuan untuk menampilkan bahwa operasi telah selesai.
+ Untuk menghapus baris kemajuan, panggil
+ {@link android.support.v4.app.NotificationCompat.Builder#setProgress
+ setProgress(0, 0, false)}. Misalnya:
+</p>
+<pre>
+...
+mNotifyManager =
+ (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+mBuilder = new NotificationCompat.Builder(this);
+mBuilder.setContentTitle("Picture Download")
+ .setContentText("Download in progress")
+ .setSmallIcon(R.drawable.ic_notification);
+// Start a lengthy operation in a background thread
+new Thread(
+ new Runnable() {
+ @Override
+ public void run() {
+ int incr;
+ // Do the "lengthy" operation 20 times
+ for (incr = 0; incr <= 100; incr+=5) {
+ // Sets the progress indicator to a max value, the
+ // current completion percentage, and "determinate"
+ // state
+ mBuilder.setProgress(100, incr, false);
+ // Displays the progress bar for the first time.
+ mNotifyManager.notify(0, mBuilder.build());
+ // Sleeps the thread, simulating an operation
+ // that takes time
+ try {
+ // Sleep for 5 seconds
+ Thread.sleep(5*1000);
+ } catch (InterruptedException e) {
+ Log.d(TAG, "sleep failure");
+ }
+ }
+ // When the loop is finished, updates the notification
+ mBuilder.setContentText("Download complete")
+ // Removes the progress bar
+ .setProgress(0,0,false);
+ mNotifyManager.notify(ID, mBuilder.build());
+ }
+ }
+// Starts the thread by calling the run() method in its Runnable
+).start();
+</pre>
+
+<!-- ------------------------------------------------------------------------------------------ -->
+<h3 id="ActivityIndicator">Menampilkan indikator aktivitas berlanjut</h3>
+<p>
+ Untuk menampilkan indikator aktivitas tidak pasti, tambahkan aktivitas ke pemberitahuan dengan
+ {@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress(0, 0, true)}
+ (dua argumen pertama akan diabaikan), dan keluarkan pemberitahuan. Hasilnya adalah indikator
+ yang memiliki gaya yang sama dengan baris kemajuan, hanya saja animasinya terus berjalan.
+</p>
+<p>
+ Keluarkan pemberitahuan di awal operasi. Animasi akan berjalan hingga Anda
+ memodifikasi pemberitahuan. Bila operasi selesai, panggil
+ {@link android.support.v4.app.NotificationCompat.Builder#setProgress setProgress(0, 0, false)}
+ kemudian perbarui pemberitahuan untuk menghapus indikator aktivitas.
+ Selalu lakukan ini; jika makan animasi akan terus berjalan sekalipun operasi telah selesai. Juga
+ ingatlah mengubah teks pemberitahuan untuk menunjukkan bahwa operasi telah selesai.
+</p>
+<p>
+ Untuk melihat cara kerja indikator aktivitas, lihat cuplikan terdahulu. Cari lokasi baris-baris berikut:
+</p>
+<pre>
+// Sets the progress indicator to a max value, the current completion
+// percentage, and "determinate" state
+mBuilder.setProgress(100, incr, false);
+// Issues the notification
+mNotifyManager.notify(0, mBuilder.build());
+</pre>
+<p>
+ Ganti baris yang telah Anda temukan dengan baris berikut:
+</p>
+<pre>
+ // Sets an activity indicator for an operation of indeterminate length
+mBuilder.setProgress(0, 0, true);
+// Issues the notification
+mNotifyManager.notify(0, mBuilder.build());
+</pre>
+
+<h2 id="metadata">Metadata Pemberitahuan</h2>
+
+<p>Pemberitahuan dapat disortir sesuai metadata yang Anda tetapkan dengan
+metode {@link android.support.v4.app.NotificationCompat.Builder} berikut:</p>
+
+<ul>
+ <li>{@link android.support.v4.app.NotificationCompat.Builder#setCategory(java.lang.String) setCategory()}
+ memberi tahu sistem cara menangani pemberitahuan aplikasi Anda bila perangkat berada dalam mode Priority
+ (misalnya, jika pemberitahuan menyatakan suatu panggilan masuk, pesan instan, atau alarm).</li>
+ <li>{@link android.support.v4.app.NotificationCompat.Builder#setPriority(int) setPriority()} menyebabkan
+ pemberitahuan dengan bidang prioritas diatur ke {@code PRIORITY_MAX} atau {@code PRIORITY_HIGH}
+ muncul dalam jendela kecil mengambang jika pemberitahuan juga memiliki suara atau getaran.</li>
+ <li>{@link android.support.v4.app.NotificationCompat.Builder#addPerson(java.lang.String) addPerson()}
+ memungkinkan Anda menambahkan daftar orang ke pemberitahuan. Aplikasi Anda bisa menggunakannya untuk memberi isyarat pada
+ sistem bahwa sistem harus mengelompokkan bersama pemberitahuan dari orang-orang yang ditetapkan, atau memberi peringkat lebih penting pada pemberitahuan
+ untuk orang-orang ini.</li>
+</ul>
+
+<div class="figure" style="width:230px">
+ <img src="{@docRoot}images/ui/notifications/heads-up.png" alt="" width="" height="" id="figure3" />
+ <p class="img-caption">
+ <strong>Gambar 3.</strong> Aktivitas layar penuh yang menampilkan pemberitahuan pendahuluan
+ </p>
+</div>
+
+<h2 id="Heads-up">Pemberitahuan Pendahuluan</h2>
+
+<p>Dengan Android 5.0 (API level 21), pemberitahuan bisa muncul dalam jendela kecil mengambang
+(yang disebut juga dengan <em>pemberitahuan pendahuluan</em>) saat perangkat aktif
+(yakni, perangkat dibuka kuncinya dan layarnya menyala). Pemberitahuan ini
+muncul seperti bentuk ringkas pemberitahuan Anda, hanya saja
+pemberitahuan pendahuluan juga menampilkan tombol tindakan. Pengguna bisa menindaklanjuti atau mengabaikan,
+pemberitahuan pendahuluan tanpa meninggalkan aplikasi saat ini.</p>
+
+<p>Contoh-contoh kondisi yang dapat memicu pemberitahuan pendahuluan antara lain:</p>
+
+<ul>
+ <li>Aktivitas pengguna berada dalam mode layar penuh (aplikasi menggunakan
+{@link android.app.Notification#fullScreenIntent}), atau</li>
+ <li>Pemberitahuan memiliki prioritas tinggi dan menggunakan nada dering atau
+ getaran</li>
+</ul>
+
+<h2 id="lockscreenNotification">Pemberitahuan Layar Kunci</h2>
+
+<p>Dengan rilis Android 5.0 (API level 21), pemberitahuan kini dapat muncul pada
+layar kunci. Aplikasi Anda bisa menggunakan fungsionalitas ini untuk menyediakan kontrol pemutaran media dan
+tindakan umum lainnya. Pengguna bisa memilih lewat Settings apakah akan menampilkan pemberitahuan pada layar kunci, dan
+Anda bisa mendesain apakah pemberitahuan aplikasi akan terlihat pada layar kunci.</p>
+
+<h3 id="visibility">Mengatur Visibilitas</h3>
+
+<p>Aplikasi Anda bisa mengatur level detail terlihat pada pemberitahuan yang ditampilkan di
+layar kunci aman. Anda memanggil {@link android.support.v4.app.NotificationCompat.Builder#setVisibility(int) setVisibility()}
+dan menetapkan salah satu nilai berikut:</p>
+
+<ul>
+ <li>{@link android.support.v4.app.NotificationCompat#VISIBILITY_PUBLIC} menampilkan isi lengkap
+ pemberitahuan.</li>
+ <li>{@link android.support.v4.app.NotificationCompat#VISIBILITY_SECRET} tidak menampilkan bagian apa pun dari
+ pemberitahuan ini pada layar kunci.</li>
+ <li>{@link android.support.v4.app.NotificationCompat#VISIBILITY_PRIVATE} menampilkan informasi dasar,
+ misalnya ikon dan judul isi pemberitahuan, namun menyembunyikan isi lengkap pemberitahuan.</li>
+</ul>
+
+<p>Bila {@link android.support.v4.app.NotificationCompat#VISIBILITY_PRIVATE} telah diatur, Anda juga bisa
+menyediakan versi alternatif isi pemberitahuan yang menyembunyikan detail tertentu. Misalnya,
+aplikasi SMS dapat menampilkan pemberitahuan yang menampilkan <em>Anda memiliki 3 pesan teks baru</em>, namun menyembunyikan
+isi dan pengirim pesan. Untuk menyediakan pemberitahuan alternatif ini, buat dahulu pemberitahuan
+pengganti menggunakan {@link android.support.v4.app.NotificationCompat.Builder}. Bila Anda membuat
+objek pemberitahuan privat, lampirkan pemberitahuan pengganti melalui metode
+{@link android.support.v4.app.NotificationCompat.Builder#setPublicVersion(android.app.Notification) setPublicVersion()}
+.</p>
+
+<h3 id="controllingMedia">Mengontrol Pemutaran Media pada Layar Kunci</h3>
+
+<p>Dalam Android 5.0 (API level 21) layar kunci tidak lagi menampilkan kontrol media
+berdasarkan {@link android.media.RemoteControlClient}, yang sekarang telah dihilangkan. Sebagai gantinya, gunakan
+template {@link android.app.Notification.MediaStyle} dengan metode
+{@link android.app.Notification.Builder#addAction(android.app.Notification.Action) addAction()}
+, yang mengubah tindakan menjadi ikon yang bisa diklik.</p>
+
+<p class="note"><strong>Catatan:</strong> Template dan metode {@link android.app.Notification.Builder#addAction(android.app.Notification.Action) addAction()}
+tidak disertakan dalam pustaka dukungan, sehingga fitur-fitur ini berjalan pada Android 5.0 dan yang lebih tinggi
+saja.</p>
+
+<p>Untuk menampilkan kontrol pemutaran media di layar kunci dalam Android 5.0, atur visibilitas
+ke {@link android.support.v4.app.NotificationCompat#VISIBILITY_PUBLIC}, seperti dijelaskan di atas. Kemudian tambahkan
+tindakan dan atur template {@link android.app.Notification.MediaStyle}, seperti dijelaskan dalam contoh kode
+berikut:</p>
+
+<pre>
+Notification notification = new Notification.Builder(context)
+ // Show controls on lock screen even when user hides sensitive content.
+ .setVisibility(Notification.VISIBILITY_PUBLIC)
+ .setSmallIcon(R.drawable.ic_stat_player)
+ // Add media control buttons that invoke intents in your media service
+ .addAction(R.drawable.ic_prev, "Previous", prevPendingIntent) // #0
+ .addAction(R.drawable.ic_pause, "Pause", pausePendingIntent) // #1
+ .addAction(R.drawable.ic_next, "Next", nextPendingIntent) // #2
+ // Apply the media style template
+ .setStyle(new Notification.MediaStyle()
+ .setShowActionsInCompactView(1 /* #1: pause button */)
+ .setMediaSession(mMediaSession.getSessionToken())
+ .setContentTitle("Wonderful music")
+ .setContentText("My Awesome Band")
+ .setLargeIcon(albumArtBitmap)
+ .build();
+</pre>
+
+<p class="note"><strong>Catatan:</strong> Dihilangkannya {@link android.media.RemoteControlClient}
+memiliki implikasi lebih jauh untuk mengontrol media. Lihat
+<a href="{@docRoot}about/versions/android-5.0.html#MediaPlaybackControl">Kontrol Pemutaran Media</a>
+untuk informasi selengkapnya tentang API baru untuk mengelola sesi media dan mengontrol pemutaran.</p>
+
+
+<!-- ------------------------------------------------------------------------------------------ -->
+<h2 id="CustomNotification">Layout Pemberitahuan Custom</h2>
+<p>
+ Kerangka kerja pemberitahuan memungkinkan Anda mendefinisikan layout pemberitahuan custom, yang
+ mendefinisikan penampilan pemberitahuan dalam objek {@link android.widget.RemoteViews}.
+ Pemberitahuan dengan layout custom serupa pemberitahuan normal, namun dibuat berdasarkan
+ {@link android.widget.RemoteViews} yang didefinisikan dalam file layout XML.
+</p>
+<p>
+ Tinggi yang tersedia untuk layout pemberitahuan custom bergantung pada tampilan pemberitahuan. Layout
+ tampilan normal dibatasi hingga 64 dp, dan layout tampilan yang diperluas dibatasi hingga 256 dp.
+</p>
+<p>
+ Untuk mendefinisikan layout pemberitahuan custom, mulailah dengan membuat instance
+ objek {@link android.widget.RemoteViews} yang memekarkan file layout XML. Kemudian,
+ sebagai ganti memanggil metode seperti
+ {@link android.support.v4.app.NotificationCompat.Builder#setContentTitle setContentTitle()},
+ panggil {@link android.support.v4.app.NotificationCompat.Builder#setContent setContent()}. Untuk mengatur
+ detail isi pemberitahuan custom, gunakan metode dalam
+ {@link android.widget.RemoteViews} untuk mengatur nilai anak tampilan:
+</p>
+<ol>
+ <li>
+ Buat layout XML untuk pemberitahuan di file terpisah. Anda bisa menggunakan nama file
+apa saja yang diinginkan, namun Anda harus menggunakan ekstensi <code>.xml</code>
+ </li>
+ <li>
+ Dalam aplikasi Anda, gunakan metode {@link android.widget.RemoteViews} untuk mendefinisikan
+ ikon dan teks pemberitahuan. Masukkan objek {@link android.widget.RemoteViews} ini ke dalam
+ {@link android.support.v4.app.NotificationCompat.Builder} Anda dengan memanggil
+ {@link android.support.v4.app.NotificationCompat.Builder#setContent setContent()}. Hindari
+ mengatur {@link android.graphics.drawable.Drawable} latar belakang pada
+ objek {@link android.widget.RemoteViews} Anda, karena warna teks bisa menjadi tidak terbaca.
+ </li>
+</ol>
+<p>
+ Kelas {@link android.widget.RemoteViews} juga menyertakan metode yang bisa Anda gunakan untuk
+ menambahkan {@link android.widget.Chronometer} atau {@link android.widget.ProgressBar}
+dengan mudah ke layout pemberitahuan Anda. Untuk informasi selengkapnya tentang cara membuat layout custom
+ pemberitahuan Anda, lihat dokumentasi acuan {@link android.widget.RemoteViews}.
+</p>
+<p class="caution">
+ <strong>Perhatian:</strong> Bila Anda menggunakan layout pemberitahuan custom, berhati-hatilah
+ untuk memastikan bahwa layout custom itu bekerja pada berbagai orientasi dan resolusi perangkat. Walaupun
+ berlaku bagi semua layout View, nasihat ini khususnya penting untuk pemberitahuan karena
+ ruang di laci pemberitahuan sangat terbatas. Jangan buat layout custom terlalu
+ kompleks, dan pastikan mengujinya di berbagai konfigurasi.
+</p>
+<!-- ------------------------------------------------------------------------------------------ -->
+<h4>Menggunakan sumber daya gaya untuk teks pemberitahuan custom</h4>
+<p>
+ Selalu gunakan sumber daya gaya untuk teks pemberitahuan custom. Warna latar belakang
+ pemberitahuan bisa bervariasi di berbagai perangkat dan versi, dan menggunakan sumber daya gaya
+ membantu Anda menangani hal ini. Mulai Android 2.3, sistem mendefinisikan sebuah gaya untuk
+ teks layout pemberitahuan standar. Jika Anda menggunakan gaya yang sama dalam aplikasi yang menargetkan Android
+ 2.3 atau yang lebih tinggi, Anda akan memastikan bahwa teks terlihat pada latar belakang tampilan.
+</p>
diff --git a/docs/html-intl/intl/id/guide/topics/ui/overview.jd b/docs/html-intl/intl/id/guide/topics/ui/overview.jd
new file mode 100644
index 0000000..ca8b420
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/topics/ui/overview.jd
@@ -0,0 +1,71 @@
+page.title=Ikhtisar UI
+@jd:body
+
+
+<p>Semua elemen antarmuka pengguna dalam aplikasi Android dibangun menggunakan objek {@link android.view.View} dan
+{@link android.view.ViewGroup}. {@link android.view.View} adalah objek yang menarik
+sesuatu di layar dan dapat berinteraksi dengan pengguna. {@link android.view.ViewGroup} merupakan sebuah
+objek yang menyimpan objek {@link android.view.View} lainnya (dan {@link android.view.ViewGroup}) untuk
+mendefinisikan layout antarmuka.</p>
+
+<p>Android menyediakan sekumpulan subkelas {@link android.view.View} dan {@link
+android.view.ViewGroup} yang menawarkan kontrol input umum (seperti tombol dan bidang
+teks) serta berbagai model layout (seperti layout linear atau relatif).</p>
+
+
+<h2 id="Layout">Layout Antarmuka Pengguna</h2>
+
+<p>Antarmuka pengguna untuk setiap komponen aplikasi Anda didefinisikan menggunakan hierarki objek {link
+android.view.View} dan {@link android.view.ViewGroup}, seperti yang ditampilkan dalam gambar 1. Setiap kelompok tampilan
+merupakan kontainer tak terlihat yang mengelola tampilan anak, sementara tampilan anak ini dapat menjadi kontrol
+input atau widget lain yang
+menarik sebagian dari UI. Pohon hierarki ini bisa sederhana atau bisa juga kompleks bergantung kebutuhan
+(namun yang sederhana paling baik untuk kinerja).</p>
+
+<img src="{@docRoot}images/viewgroup.png" alt="" />
+<p class="img-caption"><strong>Gambar 1.</strong> Ilustrasi dari hierarki tampilan, yang mendefinisikan layout
+UI.</p>
+
+<p>Untuk mendeklarasikan layout, Anda dapat menyediakan objek {@link android.view.View} dalam kode dan mulai
+membangun pohon, namun cara termudah dan terefektif untuk mendefinisikan layout adalah dengan file XML.
+XML menawarkan struktur layout yang dapat dibaca manusia, serupa dengan HTML.</p>
+
+<p>Nama elemen XML untuk tampilan sesuai dengan kelas Android yang diwakilinya. Dengan demikian elemen
+<code><TextView></code> membuat widget {@link android.widget.TextView} dalam UI Anda,
+dan elemen <code><LinearLayout></code> membuat kelompok tampilan {@link android.widget.LinearLayout}
+. </p>
+
+<p>Misalnya, layout vertikal sederhana dengan tampilan teks dan tombol akan tampak seperti ini:</p>
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:orientation="vertical" >
+ <TextView android:id="@+id/text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="I am a TextView" />
+ <Button android:id="@+id/button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="I am a Button" />
+</LinearLayout>
+</pre>
+
+<p>Saat Anda memuat sumber daya layout di aplikasi, Android akan menginisialisasi setiap simpul layout menjadi
+objek runtime yang bisa Anda gunakan untuk mendefinisikan perilaku tambahan, query status objek, atau memodifikasi
+layout.</p>
+
+<p>Untuk mendapatkan panduan lengkap mengenai pembuatan layout UI, lihat <a href="declaring-layout.html">Layout
+XML</a>.
+
+
+<h2 id="UIComponents">Komponen Antarmuka Pengguna</h2>
+
+<p>Anda tidak harus membuat semua UI menggunakan objek {@link android.view.View} dan {link
+android.view.ViewGroup}. Android menyediakan beberapa komponen aplikasi yang menawarkan
+layout UI standar yang tinggal Anda definisikan kontennya. Komponen UI ini masing-masing
+memiliki set API unik yang dijelaskan dalam masing-masing dokumennya, seperti <a href="{@docRoot}guide/topics/ui/actionbar.html">Action-Bar</a>, <a href="{@docRoot}guide/topics/ui/dialogs.html">Dialog</a>, dan <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">Pemberitahuan Status</a>.</p>
+
+
diff --git a/docs/html-intl/intl/id/guide/topics/ui/settings.jd b/docs/html-intl/intl/id/guide/topics/ui/settings.jd
new file mode 100644
index 0000000..89be52f
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/topics/ui/settings.jd
@@ -0,0 +1,1202 @@
+page.title=Pengaturan
+page.tags=preference,preferenceactivity,preferencefragment
+
+@jd:body
+
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>Dalam dokumen ini</h2>
+<ol>
+ <li><a href="#Overview">Ikhtisar</a>
+ <ol>
+ <li><a href="#SettingTypes">Preferensi</a></li>
+ </ol>
+ </li>
+ <li><a href="#DefiningPrefs">Mendefinisikan Preferensi dalam XML</a>
+ <ol>
+ <li><a href="#Groups">Membuat grup pengaturan</a></li>
+ <li><a href="#Intents">Menggunakan intent</a></li>
+ </ol>
+ </li>
+ <li><a href="#Activity">Membuat Aktivitas Preferensi</a></li>
+ <li><a href="#Fragment">Menggunakan Fragmen Preferensi</a></li>
+ <li><a href="#Defaults">Mengatur Nilai Default</a></li>
+ <li><a href="#PreferenceHeaders">Menggunakan Header Preferensi</a>
+ <ol>
+ <li><a href="#CreateHeaders">Membuat file header</a></li>
+ <li><a href="#DisplayHeaders">Menampilkan header</a></li>
+ <li><a href="#BackCompatHeaders">Mendukung versi yang lebih lama dengan header preferensi</a></li>
+ </ol>
+ </li>
+ <li><a href="#ReadingPrefs">Preferensi Membaca</a>
+ <ol>
+ <li><a href="#Listening">Mendengarkan perubahan preferensi</a></li>
+ </ol>
+ </li>
+ <li><a href="#NetworkUsage">Mengelola Penggunaan Jaringan</a></li>
+ <li><a href="#Custom">Membangun Preferensi Custom</a>
+ <ol>
+ <li><a href="#CustomSelected">Menetapkan antarmuka pengguna</a></li>
+ <li><a href="#CustomSave">Menyimpan nilai pengaturan</a></li>
+ <li><a href="#CustomInitialize">Menginisialisasi nilai saat ini</a></li>
+ <li><a href="#CustomDefault">Menyediakan nilai default</a></li>
+ <li><a href="#CustomSaveState">Menyimpan dan memulihkan status Preferensi</a></li>
+ </ol>
+ </li>
+</ol>
+
+<h2>Kelas-kelas utama</h2>
+<ol>
+ <li>{@link android.preference.Preference}</li>
+ <li>{@link android.preference.PreferenceActivity}</li>
+ <li>{@link android.preference.PreferenceFragment}</li>
+</ol>
+
+
+<h2>Lihat juga</h2>
+<ol>
+ <li><a href="{@docRoot}design/patterns/settings.html">Panduan desain pengaturan</a></li>
+</ol>
+</div>
+</div>
+
+
+
+
+<p>Aplikasi sering kali menyertakan pengaturan yang memungkinkan pengguna memodifikasi fitur dan perilaku aplikasi. Misalnya,
+beberapa aplikasi memungkinkan pengguna untuk menetapkan apakah pemberitahuan diaktifkan atau menetapkan seberapa sering
+aplikasi menyinkronkan data dengan cloud.</p>
+
+<p>Jika ingin menyediakan pengaturan untuk aplikasi, Anda harus menggunakan
+API Android {@link android.preference.Preference} untuk membangun antarmuka yang konsisten dengan
+pengalaman pengguna di aplikasi Android yang lain (termasuk pengaturan sistem). Dokumen ini menjelaskan
+cara membangun pengaturan aplikasi Anda menggunakan API {@link android.preference.Preference}.</p>
+
+<div class="note design">
+<p><strong>Desain Pengaturan</strong></p>
+ <p>Untuk informasi tentang cara mendesain pengaturan Anda, bacalah panduan desain <a href="{@docRoot}design/patterns/settings.html">Pengaturan</a>.</p>
+</div>
+
+
+<img src="{@docRoot}images/ui/settings/settings.png" alt="" width="435" />
+<p class="img-caption"><strong>Gambar 1.</strong> Cuplikan layar dari pengaturan
+aplikasi Messaging Android. Memilih item yang didefinisikan oleh {@link android.preference.Preference}
+akan membuka antarmuka untuk mengubah pengaturan.</p>
+
+
+
+
+<h2 id="Overview">Ikhtisar</h2>
+
+<p>Sebagai ganti menggunakan objek {@link android.view.View} untuk membangun antarmuka pengguna, pengaturan
+dibangun menggunakan berbagai subkelas dari kelas {@link android.preference.Preference} yang Anda
+deklarasikan dalam file XML.</p>
+
+<p>Objek {@link android.preference.Preference} adalah blok pembangun untuk pengaturan
+tunggal. Setiap {@link android.preference.Preference} muncul sebagai item dalam daftar dan menyediakan UI
+yang sesuai bagi pengguna untuk memodifikasi pengaturan. Misalnya, {@link
+android.preference.CheckBoxPreference} membuat item daftar yang menampilkan kotak cek, dan {@link
+android.preference.ListPreference} membuat item yang membuka dialog berisi daftar pilihan.</p>
+
+<p>Setiap {@link android.preference.Preference} yang Anda tambahkan memiliki pasangan nilai-kunci yang sesuai yang
+digunakan sistem untuk menyimpan pengaturan dalam file {@link android.content.SharedPreferences}
+default untuk pengaturan aplikasi Anda. Bila pengguna mengubah pengaturan, sistem akan memperbarui nilai
+yang bersangkutan dalam file {@link android.content.SharedPreferences} untuk Anda. Satu-satunya saat di mana Anda harus
+berinteraksi langsung dengan file {@link android.content.SharedPreferences} yang terkait adalah bila Anda
+perlu membaca nilai untuk menentukan perilaku aplikasi berdasarkan pengaturan pengguna.</p>
+
+<p>Nilai yang tersimpan di {@link android.content.SharedPreferences} untuk setiap pengaturan bisa berupa
+tipe data berikut:</p>
+
+<ul>
+ <li>Boolean</li>
+ <li>Float</li>
+ <li>Int</li>
+ <li>Long</li>
+ <li>String</li>
+ <li>String {@link java.util.Set}</li>
+</ul>
+
+<p>Oleh karena UI pengaturan aplikasi Anda dibangun menggunakan objek {@link android.preference.Preference}
+sebagai ganti
+objek {@link android.view.View}, Anda perlu menggunakan {@link android.app.Activity} khusus atau
+subkelas {@link android.app.Fragment} untuk menampilkan pengaturan daftar:</p>
+
+<ul>
+ <li>Jika aplikasi Anda mendukung versi Android yang lebih lama dari 3.0 (API level 10 dan yang lebih rendah), Anda harus
+membangun aktivitas sebagai ekstensi dari kelas {@link android.preference.PreferenceActivity}.</li>
+ <li>Pada Android 3.0 dan yang lebih baru, sebaiknya Anda menggunakan {@link android.app.Activity} biasa
+yang menjadi host {@link android.preference.PreferenceFragment} yang menampilkan pengaturan aplikasi Anda.
+Akan tetapi, Anda juga bisa menggunakan {@link android.preference.PreferenceActivity} untuk membuat layout dua panel
+bagi layar besar bila Anda memiliki beberapa grup pengaturan.</li>
+</ul>
+
+<p>Cara mengatur {@link android.preference.PreferenceActivity} Anda dan instance {@link
+android.preference.PreferenceFragment} dibahas di bagian tentang <a href="#Activity">Membuat Aktivitas Preferensi</a> dan <a href="#Fragment">Menggunakan
+Fragmen Preferensi</a>.</p>
+
+
+<h3 id="SettingTypes">Preferensi</h3>
+
+<p>Setiap pengaturan untuk aplikasi Anda diwakili oleh subkelas khusus dari kelas {@link
+android.preference.Preference}. Setiap subkelas menyertakan seperangkat properti utama yang memungkinkan Anda
+untuk menetapkan berbagai hal seperti judul pengaturan dan nilai default. Setiap subkelas juga menyediakan
+antarmuka pengguna dan properti khusus miliknya sendiri. Misalnya, gambar 1 menampilkan cuplikan layar dari
+ pengaturan aplikasi Messaging. Setiap item daftar dalam layar pengaturan didukung oleh objek {@link
+android.preference.Preference} berbeda.</p>
+
+<p>Beberapa preferensi yang paling umum adalah:</p>
+
+<dl>
+ <dt>{@link android.preference.CheckBoxPreference}</dt>
+ <dd>Menampilkan item dengan kotak cek untuk pengaturan yang diaktifkan atau dinonaktifkan. Nilai
+tersimpan adalah boolean (<code>true</code> jika diberi tanda cek).</dd>
+
+ <dt>{@link android.preference.ListPreference}</dt>
+ <dd>Membuka dialog berisi daftar tombol radio. Nilai
+tersimpan bisa berupa tipe nilai apa pun yang didukung (tercantum di atas).</dd>
+
+ <dt>{@link android.preference.EditTextPreference}</dt>
+ <dd>Membuka dialog berisi widget {@link android.widget.EditText}. Nilai tersimpan adalah {@link
+java.lang.String}.</dd>
+</dl>
+
+<p>Lihat kelas {@link android.preference.Preference} untuk mengetahui daftar subkelas lain dan
+propertinya.</p>
+
+<p>Tentu saja, kelas bawaan tidak mengakomodasi setiap kebutuhan dan aplikasi Anda mungkin memerlukan
+sesuatu yang lebih khusus. Misalnya, platform saat ini tidak menyediakan kelas {@link
+android.preference.Preference} untuk mengambil nomor atau tanggal. Anda mungkin perlu mendefinisikan
+subkelas {@link android.preference.Preference} sendiri. Untuk bantuan melakukannya, lihat bagian tentang <a href="#Custom">Membangun Preferensi Custom</a>.</p>
+
+
+
+<h2 id="DefiningPrefs">Mendefinisikan Preferensi dalam XML</h2>
+
+<p>Meskipun bisa membuat instance objek {@link android.preference.Preference} baru saat runtime, Anda
+harus mendefinisikan daftar pengaturan dalam XML dengan hierarki objek
+{@link android.preference.Preference}. Menggunakan file XML untuk mendefinisikan sekumpulan pengaturan lebih disukai karena file
+menyediakan struktur yang mudah dibaca dan diperbarui. Selain itu, pengaturan aplikasi Anda
+umumnya telah ditetapkan sebelumnya, meskipun Anda masih bisa memodifikasi kumpulan tersebut saat runtime.</p>
+
+<p>Setiap subkelas {@link android.preference.Preference} bisa dideklarasikan dengan elemen XML yang
+cocok dengan nama kelas, seperti {@code <CheckBoxPreference>}.</p>
+
+<p>Anda harus menyimpan file XML dalam direktori {@code res/xml/}. Meskipun bisa memberi nama file
+sesuka Anda, biasanya file diberi nama {@code preferences.xml}. Biasanya Anda hanya memerlukan satu file,
+karena cabang di hierarki (yang membuka daftar pengaturanny sendiri) dideklarasikan menggunakan instance
+tersarang {@link android.preference.PreferenceScreen}.</p>
+
+<p class="note"><strong>Catatan:</strong> Jika ingin membuat layout multipanel untuk
+pengaturan, Anda memerlukan file XML terpisah untuk setiap fragmen.</p>
+
+<p>Simpul akar untuk file XML harus merupakan elemen {@link android.preference.PreferenceScreen
+<PreferenceScreen>}. Dalam elemen inilah tempat Anda menambahkan setiap {@link
+android.preference.Preference}. Setiap anak yang Anda tambahkan dalam elemen
+{@link android.preference.PreferenceScreen <PreferenceScreen>} akan tampak sebagai item
+tunggal dalam daftar pengaturan.</p>
+
+<p>Misalnya:</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
+ <CheckBoxPreference
+ android:key="pref_sync"
+ android:title="@string/pref_sync"
+ android:summary="@string/pref_sync_summ"
+ android:defaultValue="true" />
+ <ListPreference
+ android:dependency="pref_sync"
+ android:key="pref_syncConnectionType"
+ android:title="@string/pref_syncConnectionType"
+ android:dialogTitle="@string/pref_syncConnectionType"
+ android:entries="@array/pref_syncConnectionTypes_entries"
+ android:entryValues="@array/pref_syncConnectionTypes_values"
+ android:defaultValue="@string/pref_syncConnectionTypes_default" />
+</PreferenceScreen>
+</pre>
+
+<p>Dalam contoh ini, terdapat {@link android.preference.CheckBoxPreference} dan {@link
+android.preference.ListPreference}. Kedua item tersebut menyertakan tiga atribut berikut:</p>
+
+<dl>
+ <dt>{@code android:key}</dt>
+ <dd>Atribut ini diperlukan untuk preferensi yang mempertahankan nilai data. Ini menetapkan kunci
+unik (string) yang digunakan sistem saat menyimpan nilai pengaturan ini dalam {@link
+android.content.SharedPreferences}.
+ <p>Instance satu-satunya di mana atribut ini <em>tidak diperlukan</em> adalah bila preferensi berupa
+{@link android.preference.PreferenceCategory} atau {@link android.preference.PreferenceScreen}, atau
+preferensi menetapkan {@link android.content.Intent} untuk dipanggil (dengan elemen <a href="#Intents">{@code <intent>}</a>) atau {@link android.app.Fragment} untuk ditampilkan (dengan atribut <a href="{@docRoot}reference/android/preference/Preference.html#attr_android:fragment">{@code
+android:fragment}</a>).</p>
+ </dd>
+ <dt>{@code android:title}</dt>
+ <dd>Ini menyediakan nama pengaturan yang bisa dilihat oleh pengguna.</dd>
+ <dt>{@code android:defaultValue}</dt>
+ <dd>Ini menetapkan nilai awal yang harus diatur sistem dalam file {@link
+android.content.SharedPreferences}. Anda harus memberikan nilai default untuk semua
+pengaturan.</dd>
+</dl>
+
+<p>Untuk informasi tentang semua atribut lain yang didukung, lihat dokumentasi {@link
+android.preference.Preference} (dan subkelas masing-masing).</p>
+
+
+<div class="figure" style="width:300px">
+ <img src="{@docRoot}images/ui/settings/settings-titles.png" alt="" />
+ <p class="img-caption"><strong>Gambar 2.</strong> Mengatur kategori
+ dengan judul. <br/><b>1.</b> Kategori ditetapkan oleh elemen {@link
+android.preference.PreferenceCategory <PreferenceCategory>}. <br/><b>2.</b> Judul
+ditetapkan dengan atribut {@code android:title}.</p>
+</div>
+
+
+<p>Bila daftar pengaturan Anda melebihi sekitar 10 item, Anda mungkin perlu menambahkan judul untuk
+mendefinisikan grup pengaturan atau menampilkan grup tersebut di
+layar terpisah. Opsi ini dijelaskan di bagian berikut.</p>
+
+
+<h3 id="Groups">Membuat grup pengaturan</h3>
+
+<p>Jika Anda menampilkan daftar 10 pengaturan atau lebih, pengguna
+mungkin akan kesulitan dalam memindai, memahami dan memprosesnya. Anda bisa mengatasinya dengan
+membagi sebagian atau semua pengaturan ke dalam beberapa grup, yang secara efektif akan mengubah satu daftar panjang menjadi beberapa daftar
+yang lebih pendek. Suatu grup pengaturan terkait bisa ditampilkan dalam salah satu dari dua cara:</p>
+
+<ul>
+ <li><a href="#Titles">Menggunakan judul</a></li>
+ <li><a href="#Subscreens">Menggunakan sublayar</a></li>
+</ul>
+
+<p>Anda bisa menggunakan salah satu atau keduanya untuk mengelola pengaturan aplikasi Anda. Saat
+memutuskan mana yang akan digunakan dan cara membagi pengaturan, Anda harus mengikuti pedoman dalam
+Panduan <a href="{@docRoot}design/patterns/settings.html">Pengaturan</a> Desain Android.</p>
+
+
+<h4 id="Titles">Menggunakan judul</h4>
+
+<p>Jika ingin menyediakan divider dengan heading di antara grup pengaturan (seperti yang ditampilkan dalam gambar 2),
+tempatkan setiap grup objek {@link android.preference.Preference} di dalam {@link
+android.preference.PreferenceCategory}.</p>
+
+<p>Misalnya:</p>
+
+<pre>
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
+ <PreferenceCategory
+ android:title="@string/pref_sms_storage_title"
+ android:key="pref_key_storage_settings">
+ <CheckBoxPreference
+ android:key="pref_key_auto_delete"
+ android:summary="@string/pref_summary_auto_delete"
+ android:title="@string/pref_title_auto_delete"
+ android:defaultValue="false"... />
+ <Preference
+ android:key="pref_key_sms_delete_limit"
+ android:dependency="pref_key_auto_delete"
+ android:summary="@string/pref_summary_delete_limit"
+ android:title="@string/pref_title_sms_delete"... />
+ <Preference
+ android:key="pref_key_mms_delete_limit"
+ android:dependency="pref_key_auto_delete"
+ android:summary="@string/pref_summary_delete_limit"
+ android:title="@string/pref_title_mms_delete" ... />
+ </PreferenceCategory>
+ ...
+</PreferenceScreen>
+</pre>
+
+
+<h4 id="Subscreens">Menggunakan sublayar</h4>
+
+<p>Jika ingin menempatkan grup pengaturan ke dalam sublayar (seperti yang ditampilkan dalam gambar 3), tempatkan grup
+objek {@link android.preference.Preference} di dalam {@link
+android.preference.PreferenceScreen}.</p>
+
+<img src="{@docRoot}images/ui/settings/settings-subscreen.png" alt="" />
+<p class="img-caption"><strong>Gambar 3.</strong> Mengatur sublayar. Elemen {@code
+<PreferenceScreen>}
+membuat item yang, bila dipilih, akan membuka daftar terpisah untuk menampilkan pengaturan tersarang.</p>
+
+<p>Misalnya:</p>
+
+<pre>
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
+ <!-- opens a subscreen of settings -->
+ <PreferenceScreen
+ android:key="button_voicemail_category_key"
+ android:title="@string/voicemail"
+ android:persistent="false">
+ <ListPreference
+ android:key="button_voicemail_provider_key"
+ android:title="@string/voicemail_provider" ... />
+ <!-- opens another nested subscreen -->
+ <PreferenceScreen
+ android:key="button_voicemail_setting_key"
+ android:title="@string/voicemail_settings"
+ android:persistent="false">
+ ...
+ </PreferenceScreen>
+ <RingtonePreference
+ android:key="button_voicemail_ringtone_key"
+ android:title="@string/voicemail_ringtone_title"
+ android:ringtoneType="notification" ... />
+ ...
+ </PreferenceScreen>
+ ...
+</PreferenceScreen>
+</pre>
+
+
+<h3 id="Intents">Menggunakan intent</h3>
+
+<p>Dalam beberapa kasus, Anda mungkin ingin item preferensi untuk membuka beberapa aktivitas sebagai ganti
+layar pengaturan, seperti browser web untuk melihat halaman web. Untuk memanggil {@link
+android.content.Intent} saat pengguna memilih item preferensi, tambahkan elemen {@code <intent>}
+sebagai anak dari elemen {@code <Preference>} yang bersangkutan.</p>
+
+<p>Misalnya, berikut ini cara menggunakan item preferensi untuk membuka halaman web:</p>
+
+<pre>
+<Preference android:title="@string/prefs_web_page" >
+ <intent android:action="android.intent.action.VIEW"
+ android:data="http://www.example.com" />
+</Preference>
+</pre>
+
+<p>Anda bisa membuat intent implisit maupun eksplisit menggunakan atribut berikut:</p>
+
+<dl>
+ <dt>{@code android:action}</dt>
+ <dd>Tindakan yang akan ditetapkan, sesuai metode
+{@link android.content.Intent#setAction setAction()}.</dd>
+ <dt>{@code android:data}</dt>
+ <dd>Data yang akan ditetapkan, sesuai metode {@link android.content.Intent#setData setData()}.</dd>
+ <dt>{@code android:mimeType}</dt>
+ <dd>Tipe MIME yang akan ditetapkan, sesuai metode
+{@link android.content.Intent#setType setType()}.</dd>
+ <dt>{@code android:targetClass}</dt>
+ <dd>Bagian kelas dari nama komponen, sesuai metode {@link android.content.Intent#setComponent
+setComponent()}.</dd>
+ <dt>{@code android:targetPackage}</dt>
+ <dd>Bagian paket dari nama komponen, sesuai metode {@link
+android.content.Intent#setComponent setComponent()}.</dd>
+</dl>
+
+
+
+<h2 id="Activity">Membuat Aktivitas Preferensi</h2>
+
+<p>Untuk menampilkan pengaturan Anda dalam suatu aktivitas, perluas kelas {@link
+android.preference.PreferenceActivity}. Ini adalah ekstensi dari kelas {@link
+android.app.Activity} biasa yang menampilkan daftar pengaturan berdasarkan hierarki objek {@link
+android.preference.Preference}. {@link android.preference.PreferenceActivity}
+secara otomatis mempertahankan pengaturan yang dikaitkan dengan setiap {@link
+android.preference.Preference} bila pengguna membuat perubahan.</p>
+
+<p class="note"><strong>Catatan:</strong> Jika Anda mengembangkan aplikasi untuk Android 3.0 dan
+yang lebih tinggi, sebaiknya gunakan {@link android.preference.PreferenceFragment}. Pindah ke bagian
+berikutnya tentang <a href="#Fragment">Menggunakan Fragmen Preferensi</a>.</p>
+
+<p>Hal paling penting untuk diingat adalah jangan memuat layout tampilan selama callback {@link
+android.preference.PreferenceActivity#onCreate onCreate()}. Sebagai gantinya, panggil {@link
+android.preference.PreferenceActivity#addPreferencesFromResource addPreferencesFromResource()} untuk
+menambahkan preferensi yang telah Anda deklarasikan dalam file XML ke aktivitas. Misalnya, berikut ini adalah kode minimum
+polos yang diperlukan untuk {@link android.preference.PreferenceActivity} fungsional:</p>
+
+<pre>
+public class SettingsActivity extends PreferenceActivity {
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ addPreferencesFromResource(R.xml.preferences);
+ }
+}
+</pre>
+
+<p>Ini sebenarnya kode yang cukup untuk beberapa aplikasi, karena segera setelah pengguna memodifikasi preferensi,
+sistem akan menyimpan perubahan tersebut ke file {@link android.content.SharedPreferences} default yang
+bisa dibaca oleh komponen aplikasi Anda lainnya bila Anda perlu memeriksa pengaturan pengguna. Akan tetapi,
+banyak aplikasi, yang memerlukan kode lebih sedikit untuk mendengarkan perubahan yang terjadi pada preferensi.
+Untuk informasi tentang mendengarkan perubahan di file {@link android.content.SharedPreferences},
+lihat bagian tentang <a href="#ReadingPrefs">Preferensi Membaca</a>.</p>
+
+
+
+
+<h2 id="Fragment">Menggunakan Fragmen Preferensi</h2>
+
+<p>Jika Anda mengembangkan Android 3.0 (API level 11) dan yang lebih tinggi, Anda harus menggunakan {@link
+android.preference.PreferenceFragment} untuk menampilkan daftar objek {@link android.preference.Preference}
+Anda. Anda bisa menambahkan {@link android.preference.PreferenceFragment} ke aktivitas apa pun,—Anda tidak
+perlu menggunakan {@link android.preference.PreferenceActivity}.</p>
+
+<p><a href="{@docRoot}guide/components/fragments.html">Fragmen</a> menyediakan arsitektur yang lebih
+fleksibel untuk aplikasi Anda, dibandingkan hanya menggunakan aktivitas, apa pun jenis
+aktivitas yang Anda bangun. Dengan sendirinya, kami menyarankan Anda menggunakan {@link
+android.preference.PreferenceFragment} untuk mengontrol tampilan pengaturan Anda sebagai ganti {@link
+android.preference.PreferenceActivity} bila memungkinkan.</p>
+
+<p>Implementasi {@link android.preference.PreferenceFragment} Anda bisa semudah
+mendefinisikan metode {@link android.preference.PreferenceFragment#onCreate onCreate()} untuk memuat
+file preferensi dengan {@link android.preference.PreferenceFragment#addPreferencesFromResource
+addPreferencesFromResource()}. Misalnya:</p>
+
+<pre>
+public static class SettingsFragment extends PreferenceFragment {
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ // Load the preferences from an XML resource
+ addPreferencesFromResource(R.xml.preferences);
+ }
+ ...
+}
+</pre>
+
+<p>Anda nanti bisa menambahkan fragmen ini ke {@link android.app.Activity} seperti yang Anda lakukan untuk
+{@link android.app.Fragment} lainnya. Misalnya:</p>
+
+<pre>
+public class SettingsActivity extends Activity {
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ // Display the fragment as the main content.
+ getFragmentManager().beginTransaction()
+ .replace(android.R.id.content, new SettingsFragment())
+ .commit();
+ }
+}
+</pre>
+
+<p class="note"><strong>Catatan:</strong> {@link android.preference.PreferenceFragment} tidak memiliki
+objek {@link android.content.Context} sendiri. Jika memerlukan objek {@link android.content.Context}
+, Anda bisa memanggil {@link android.app.Fragment#getActivity()}. Akan tetapi, berhati-hatilah untuk memanggil
+{@link android.app.Fragment#getActivity()} hanya bila fragmen telah dikaitkan dengan aktivitas. Bila
+fragmen belum dikaitkan, atau terlepas saat akhir daur hidupnya, {@link
+android.app.Fragment#getActivity()} akan mengembalikan nol.</p>
+
+
+<h2 id="Defaults">Mengatur Nilai Default</h2>
+
+<p>Preferensi yang Anda buat mungkin mendefinisikan beberapa perilaku penting untuk aplikasi, jadi Anda
+perlu menginisialisasi file {@link android.content.SharedPreferences} yang terkait dengan
+nilai default untuk setiap {@link android.preference.Preference} bila pengguna menggunakan aplikasi
+Anda untuk pertama kali.</p>
+
+<p>Hal pertama yang harus Anda lakukan adalah menetapkan nilai default untuk setiap objek {@link
+android.preference.Preference}
+di file XML Anda menggunakan atribut {@code android:defaultValue}. Nilainya bisa berupa tipe data
+apa saja yang sesuai untuk objek {@link android.preference.Preference} bersangkutan. Misalnya:
+</p>
+
+<pre>
+<!-- default value is a boolean -->
+<CheckBoxPreference
+ android:defaultValue="true"
+ ... />
+
+<!-- default value is a string -->
+<ListPreference
+ android:defaultValue="@string/pref_syncConnectionTypes_default"
+ ... />
+</pre>
+
+<p>Kemudian, dari metode {@link android.app.Activity#onCreate onCreate()} dalam aktivitas utama aplikasi
+Anda—dan dalam aktivitas lainnya yang digunakan pengguna untuk masuk ke aplikasi Anda untuk pertama kali
+—panggil {@link android.preference.PreferenceManager#setDefaultValues
+setDefaultValues()}:</p>
+
+<pre>
+PreferenceManager.setDefaultValues(this, R.xml.advanced_preferences, false);
+</pre>
+
+<p>Memanggil ini selama {@link android.app.Activity#onCreate onCreate()} akan memastikan aplikasi
+Anda diinisialisasi dengan pengaturan default, yang mungkin perlu
+dibaca oleh aplikasi Anda untuk menentukan beberapa perilaku (seperti apakah akan mengunduh data pada
+jaringan seluler).</p>
+
+<p>Metode ini membutuhkan tiga argumen:</p>
+<ul>
+ <li>{@link android.content.Context} aplikasi Anda.</li>
+ <li>ID sumber daya untuk file XML preferensi yang ingin Anda atur nilai defaultnya.</li>
+ <li>Boolean menunjukkan apakah nilai default harus diatur lebih dari satu kali.
+<p>Bila <code>false</code>, sistem akan mengatur nilai default hanya jika metode ini belum pernah
+dipanggil sebelumnya (atau {@link android.preference.PreferenceManager#KEY_HAS_SET_DEFAULT_VALUES}
+dalam file preferensi berbagi nilai default salah).</p></li>
+</ul>
+
+<p>Selama Anda mengatur argumen ketiga ke <code>false</code>, Anda bisa dengan aman memanggil metode ini
+setiap kali aktivitas Anda memulai tanpa mengesampingkan preferensi tersimpan pengguna dengan mengatur ulang preferensi tersebut ke
+default. Akan tetapi, jika mengatur ke <code>true</code>, Anda akan mengesampingkan nilai
+sebelumnya dengan default.</p>
+
+
+
+<h2 id="PreferenceHeaders">Menggunakan Header Preferensi</h2>
+
+<p>Dalam kasus yang jarang terjadi, Anda mungkin perlu mendesain pengaturan agar layar pertama
+hanya menampilkan daftar <a href="#Subscreens">sublayar</a> (seperti dalam aplikasi Setting pada sistem,
+seperti yang ditampilkan dalam gambar 4 dan 5). Bila mengembangkan desain seperti itu untuk Android 3.0 dan yang lebih tinggi, Anda
+harus menggunakan fitur "header" yang baru di Android 3.0, sebagai ganti membangun sublayar dengan elemen
+{@link android.preference.PreferenceScreen} tersarang.</p>
+
+<p>Untuk membangun pengaturan dengan header, Anda perlu:</p>
+<ol>
+ <li>Memisahkan setiap grup pengaturan ke dalam instance {@link
+android.preference.PreferenceFragment} terpisah. Ini berarti, setiap grup pengaturan memerlukan file XML
+terpisah.</li>
+ <li>Membuat file header XML yang mencantumkan daftar setiap grup pengaturan dan mendeklarasikan fragmen mana
+yang berisi daftar pengaturan yang sesuai.</li>
+ <li>Memperluas kelas {@link android.preference.PreferenceActivity} untuk menjadi host pengaturan Anda.</li>
+ <li>Mengimplementasikan callback {@link
+android.preference.PreferenceActivity#onBuildHeaders onBuildHeaders()} untuk menetapkan file
+header.</li>
+</ol>
+
+<p>Manfaat besar dalam menggunakan desain ini adalah karena {@link android.preference.PreferenceActivity}
+secara otomatis akan menampilkan layout dua panel yang ditampilkan dalam gambar 4 bila dijalankan pada layar besar.</p>
+
+<p>Bahkan jika aplikasi Anda mendukung versi Android yang lebih lama dari 3.0, Anda bisa membangun
+aplikasi untuk menggunakan {@link android.preference.PreferenceFragment} bagi presentasi dua panel pada perangkat
+yang lebih baru sementara tetap mendukung hierarki multilayar biasa pada perangkat
+yang lebih lama (lihat bagian tentang <a href="#BackCompatHeaders">Mendukung versi yang lebih lama dengan
+header preferensi</a>).</p>
+
+<img src="{@docRoot}images/ui/settings/settings-headers-tablet.png" alt="" />
+<p class="img-caption"><strong>Gambar 4.</strong> Layout dua panel dengan header. <br/><b>1.</b> Header
+didefinisikan dengan file header XML. <br/><b>2.</b> Setiap grup pengaturan didefinisikan dengan
+{@link android.preference.PreferenceFragment} yang ditetapkan oleh elemen {@code <header>} dalam
+file header.</p>
+
+<img src="{@docRoot}images/ui/settings/settings-headers-handset.png" alt="" />
+<p class="img-caption"><strong>Gambar 5.</strong> Perangkat handset dengan header pengaturan. Bila sebuah
+item dipilih, {@link android.preference.PreferenceFragment} terkait akan menggantikan
+header.</p>
+
+
+<h3 id="CreateHeaders" style="clear:left">Membuat file header</h3>
+
+<p>Setiap grup pengaturan dalam daftar header Anda akan ditetapkan oleh elemen {@code <header>}
+tunggal dalam elemen {@code <preference-headers>} akar. Misalnya:</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
+ <header
+ android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentOne"
+ android:title="@string/prefs_category_one"
+ android:summary="@string/prefs_summ_category_one" />
+ <header
+ android:fragment="com.example.prefs.SettingsActivity$SettingsFragmentTwo"
+ android:title="@string/prefs_category_two"
+ android:summary="@string/prefs_summ_category_two" >
+ <!-- key/value pairs can be included as arguments for the fragment. -->
+ <extra android:name="someKey" android:value="someHeaderValue" />
+ </header>
+</preference-headers>
+</pre>
+
+<p>Dengan atribut {@code android:fragment}, setiap header mendeklarasikan instance {@link
+android.preference.PreferenceFragment} yang harus terbuka saat pengguna memilih header.</p>
+
+<p>Elemen {@code <extras>} memungkinkan Anda meneruskan pasangan nilai-kunci ke fragmen di {@link
+android.os.Bundle}. Fragmen bisa mengambil argumen dengan memanggil {@link
+android.app.Fragment#getArguments()}. Anda bisa meneruskan argumen ke fragmen dengan berbagai
+alasan, namun satu alasan yang baik adalah untuk menggunakan kembali subkelas yang sama dari {@link
+android.preference.PreferenceFragment} untuk setiap grup dan menggunakan argumen untuk menetapkan file
+XML preferensi mana yang harus dimuat fragmen.</p>
+
+<p>Misalnya, ada fragmen yang bisa digunakan ulang untuk berbagai grup pengaturan, bila setiap
+header mendefinisikan argumen {@code <extra>} dengan kunci {@code "settings"}:</p>
+
+<pre>
+public static class SettingsFragment extends PreferenceFragment {
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ String settings = getArguments().getString("settings");
+ if ("notifications".equals(settings)) {
+ addPreferencesFromResource(R.xml.settings_wifi);
+ } else if ("sync".equals(settings)) {
+ addPreferencesFromResource(R.xml.settings_sync);
+ }
+ }
+}
+</pre>
+
+
+
+<h3 id="DisplayHeaders">Menampilkan header</h3>
+
+<p>Untuk menampilkan header preferensi, Anda harus mengimplementasikan metode callback {@link
+android.preference.PreferenceActivity#onBuildHeaders onBuildHeaders()} dan memanggil
+{@link android.preference.PreferenceActivity#loadHeadersFromResource
+loadHeadersFromResource()}. Misalnya:</p>
+
+<pre>
+public class SettingsActivity extends PreferenceActivity {
+ @Override
+ public void onBuildHeaders(List<Header> target) {
+ loadHeadersFromResource(R.xml.preference_headers, target);
+ }
+}
+</pre>
+
+<p>Bila pengguna memilih item dari daftar header, sistem akan membuka {@link
+android.preference.PreferenceFragment} terkait.</p>
+
+<p class="note"><strong>Catatan:</strong> Saat menggunakan header preferensi, subkelas {@link
+android.preference.PreferenceActivity} Anda tidak perlu mengimplementasikan metode {@link
+android.preference.PreferenceActivity#onCreate onCreate()}, karena tugas
+yang diperlukan untuk aktivitas hanyalah memuat header.</p>
+
+
+<h3 id="BackCompatHeaders">Mendukung versi yang lebih lama dengan header preferensi</h3>
+
+<p>Jika aplikasi Anda mendukung versi Android yang lebih lama dari 3.0, Anda tetap bisa menggunakan header untuk
+menyediakan layout dua panel saat berjalan pada Android 3.0 dan yang lebih tinggi. Anda hanya perlu membuat
+file XML preferensi tambahan yang menggunakan elemen {@link android.preference.Preference
+<Preference>} dasar yang berperilaku seperti item header (untuk digunakan oleh Android
+versi yang lebih lama).</p>
+
+<p>Akan tetapi, sebagai ganti membuka {@link android.preference.PreferenceScreen} baru, setiap elemen {@link
+android.preference.Preference <Preference>} mengirimkan {@link android.content.Intent} ke
+{@link android.preference.PreferenceActivity} yang menetapkan file XML preferensi mana yang
+akan dimuat.</p>
+
+<p>Misalnya, ini adalah file XML untuk header preferensi yang menggunakan Android 3.0
+dan yang lebih tinggi ({@code res/xml/preference_headers.xml}):</p>
+
+<pre>
+<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
+ <header
+ android:fragment="com.example.prefs.SettingsFragmentOne"
+ android:title="@string/prefs_category_one"
+ android:summary="@string/prefs_summ_category_one" />
+ <header
+ android:fragment="com.example.prefs.SettingsFragmentTwo"
+ android:title="@string/prefs_category_two"
+ android:summary="@string/prefs_summ_category_two" />
+</preference-headers>
+</pre>
+
+<p>Dan ini adalah file preferensi yang menyediakan header yang sama untuk versi yang lebih lama dari
+Android 3.0 ({@code res/xml/preference_headers_legacy.xml}):</p>
+
+<pre>
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
+ <Preference
+ android:title="@string/prefs_category_one"
+ android:summary="@string/prefs_summ_category_one" >
+ <intent
+ android:targetPackage="com.example.prefs"
+ android:targetClass="com.example.prefs.SettingsActivity"
+ android:action="com.example.prefs.PREFS_ONE" />
+ </Preference>
+ <Preference
+ android:title="@string/prefs_category_two"
+ android:summary="@string/prefs_summ_category_two" >
+ <intent
+ android:targetPackage="com.example.prefs"
+ android:targetClass="com.example.prefs.SettingsActivity"
+ android:action="com.example.prefs.PREFS_TWO" />
+ </Preference>
+</PreferenceScreen>
+</pre>
+
+<p>Karena dukungan untuk {@code <preference-headers>} telah ditambahkan di Android 3.0, sistem akan memanggil
+{@link android.preference.PreferenceActivity#onBuildHeaders onBuildHeaders()} di {@link
+android.preference.PreferenceActivity} hanya saat berjalan pada Android 3.0 atau yang lebih tinggi. Untuk memuat
+file header "lama" ({@code preference_headers_legacy.xml}), Anda harus memeriksa versi Android
+dan, jika versi tersebut lebih lama dari Android 3.0 ({@link
+android.os.Build.VERSION_CODES#HONEYCOMB}), panggil {@link
+android.preference.PreferenceActivity#addPreferencesFromResource addPreferencesFromResource()} untuk
+memuat file header lama. Misalnya:</p>
+
+<pre>
+@Override
+public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ ...
+
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
+ // Load the legacy preferences headers
+ addPreferencesFromResource(R.xml.preference_headers_legacy);
+ }
+}
+
+// Called only on Honeycomb and later
+@Override
+public void onBuildHeaders(List<Header> target) {
+ loadHeadersFromResource(R.xml.preference_headers, target);
+}
+</pre>
+
+<p>Satu-satunya hal yang perlu dilakukan adalah menangani {@link android.content.Intent} yang diteruskan ke
+aktivitas untuk mengidentifikasi file preferensi yang akan dimuat. Jadi ambillah tindakan intent dan bandingkan dengan
+string tindakan yang diketahui yang telah Anda gunakan dalam tag {@code <intent>} XML preferensi:</p>
+
+<pre>
+final static String ACTION_PREFS_ONE = "com.example.prefs.PREFS_ONE";
+...
+
+@Override
+public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ String action = getIntent().getAction();
+ if (action != null && action.equals(ACTION_PREFS_ONE)) {
+ addPreferencesFromResource(R.xml.preferences);
+ }
+ ...
+
+ else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
+ // Load the legacy preferences headers
+ addPreferencesFromResource(R.xml.preference_headers_legacy);
+ }
+}
+</pre>
+
+<p>Ketahuilah bahwa panggilan berturut-turut ke {@link
+android.preference.PreferenceActivity#addPreferencesFromResource addPreferencesFromResource()} akan
+menumpuk semua preferensi ke dalam satu daftar, jadi pastikan bahwa ini hanya dipanggil sekali dengan mengikatkan syarat
+ke pernyataan else-if.</p>
+
+
+
+
+
+<h2 id="ReadingPrefs">Preferensi Membaca</h2>
+
+<p>Secara default, semua preferensi aplikasi Anda disimpan ke file yang bisa diakses dari mana saja
+di dalam aplikasi dengan memanggil metode statis {@link
+android.preference.PreferenceManager#getDefaultSharedPreferences
+PreferenceManager.getDefaultSharedPreferences()}. Ini akan mengembalikan objek {@link
+android.content.SharedPreferences} berisi semua pasangan nilai-kunci yang terkait
+dengan objek {@link android.preference.Preference} yang digunakan di {@link
+android.preference.PreferenceActivity} Anda.</p>
+
+<p>Misalnya, inilah cara membaca salah satu nilai preferensi dari aktivitas lain dalam aplikasi
+Anda:</p>
+
+<pre>
+SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
+String syncConnPref = sharedPref.getString(SettingsActivity.KEY_PREF_SYNC_CONN, "");
+</pre>
+
+
+
+<h3 id="Listening">Mendengarkan perubahan preferensi</h3>
+
+<p>Ada beberapa alasan yang membuat Anda perlu mendapatkan pemberitahuan segera setelah pengguna mengubah salah satu
+preferensi. Untuk menerima callback saat perubahan terjadi pada salah satu preferensi,
+implementasikan antarmuka {@link android.content.SharedPreferences.OnSharedPreferenceChangeListener
+SharedPreference.OnSharedPreferenceChangeListener} dan daftarkan listener untuk objek
+{@link android.content.SharedPreferences} dengan memanggil {@link
+android.content.SharedPreferences#registerOnSharedPreferenceChangeListener
+registerOnSharedPreferenceChangeListener()}.</p>
+
+<p>Antarmuka hanya memiliki satu metode callback, {@link
+android.content.SharedPreferences.OnSharedPreferenceChangeListener#onSharedPreferenceChanged
+onSharedPreferenceChanged()}, dan mungkin lebih mudah mengimplementasikan antarmuka sebagai bagian dari
+aktivitas Anda. Misalnya:</p>
+
+<pre>
+public class SettingsActivity extends PreferenceActivity
+ implements OnSharedPreferenceChangeListener {
+ public static final String KEY_PREF_SYNC_CONN = "pref_syncConnectionType";
+ ...
+
+ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
+ String key) {
+ if (key.equals(KEY_PREF_SYNC_CONN)) {
+ Preference connectionPref = findPreference(key);
+ // Set summary to be the user-description for the selected value
+ connectionPref.setSummary(sharedPreferences.getString(key, ""));
+ }
+ }
+}
+</pre>
+
+<p>Dalam contoh ini, metode akan memeriksa apakah pengaturan yang diubah adalah untuk kunci preferensi yang diketahui. Ini akan
+memanggil {@link android.preference.PreferenceActivity#findPreference findPreference()} untuk mendapatkan objek
+{@link android.preference.Preference} yang diubah agar bisa memodifikasi rangkuman item
+menjadi keterangan pada pilihan pengguna. Ini berarti, bila pengaturan adalah {@link
+android.preference.ListPreference} atau pengaturan multipilihan, Anda harus memanggil {@link
+android.preference.Preference#setSummary setSummary()} bila pengaturan berubah ke tampilkan
+status saat ini (seperti pengaturan Sleep yang ditampilkan dalam gambar 5).</p>
+
+<p class="note"><strong>Catatan:</strong> Seperti dijelaskan dalam dokumen Desain Android tentang <a href="{@docRoot}design/patterns/settings.html">Pengaturan</a>, kami merekomendasikan Anda untuk memperbarui
+rangkuman {@link android.preference.ListPreference} setiap kali pengguna mengubah preferensi untuk
+menjelaskan pengaturan saat ini.</p>
+
+<p>Untuk manajemen daur hidup yang baik di aktivitas, kami merekomendasikan Anda untuk mendaftarkan dan mencabut pendaftaran
+{@link android.content.SharedPreferences.OnSharedPreferenceChangeListener} selama callback {@link
+android.app.Activity#onResume} dan {@link android.app.Activity#onPause}:</p>
+
+<pre>
+@Override
+protected void onResume() {
+ super.onResume();
+ getPreferenceScreen().getSharedPreferences()
+ .registerOnSharedPreferenceChangeListener(this);
+}
+
+@Override
+protected void onPause() {
+ super.onPause();
+ getPreferenceScreen().getSharedPreferences()
+ .unregisterOnSharedPreferenceChangeListener(this);
+}
+</pre>
+
+<p class="caution"><strong>Perhatian:</strong> Bila Anda memanggil {@link
+android.content.SharedPreferences#registerOnSharedPreferenceChangeListener
+registerOnSharedPreferenceChangeListener()}, pengelola preferensi saat ini tidak akan
+menyimpan referensi kuat ke listener. Anda harus menyimpan referensi
+kuat bagi listener, atau referensi akan rentan terhadap pengumpulan sampah. Kami
+merekomendasikan Anda untuk mempertahankan referensi bagi listener dalam data instance objek
+yang akan ada selama Anda memerlukan listener tersebut.</p>
+
+<p>Misalnya, dalam kode berikut, caller tidak menyimpan referensi ke
+listener. Akibatnya, listener akan dikenakan pengumpulan sampah,
+dan suatu saat nanti akan gagal:</p>
+
+<pre>
+prefs.registerOnSharedPreferenceChangeListener(
+ // Bad! The listener is subject to garbage collection!
+ new SharedPreferences.OnSharedPreferenceChangeListener() {
+ public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
+ // listener implementation
+ }
+});
+</pre>
+
+<p>Sebagai gantinya, simpan referensi ke listener dalam bidang data instance
+objek yang akan ada selama listener dibutuhkan:</p>
+
+<pre>
+SharedPreferences.OnSharedPreferenceChangeListener listener =
+ new SharedPreferences.OnSharedPreferenceChangeListener() {
+ public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
+ // listener implementation
+ }
+};
+prefs.registerOnSharedPreferenceChangeListener(listener);
+</pre>
+
+<h2 id="NetworkUsage">Mengelola Penggunaan Jaringan</h2>
+
+
+<p>Mulai Android 4.0, aplikasi Settings untuk sistem memungkinkan pengguna melihat seberapa besar
+data jaringan yang digunakan aplikasi mereka saat berada di latar depan dan latar belakang. Kemudian pengguna bisa
+menonaktifkan penggunaan data latar belakang untuk aplikasi individual. Agar pengguna tidak menonaktifkan akses
+aplikasi ke data dari latar belakang, Anda harus menggunakan koneksi data secara efisien dan mengizinkan
+pengguna untuk menyaring penggunaan data aplikasi melalui pengaturan aplikasi Anda.<p>
+
+<p>Misalnya, Anda bisa mengizinkan pengguna untuk mengontrol seberapa sering aplikasi menyinkronkan data, apakah aplikasi
+hanya melakukan pengunggahan/pengunduhan bila ada Wi-Fi, apakah aplikasi menggunakan data saat roaming, dll. Dengan
+tersedianya kontrol ini bagi pengguna, mereka kemungkinan besar tidak akan menonaktifkan akses aplikasi ke data
+saat mendekati batas yang mereka tetapkan dalam Settings pada sistem, karena mereka bisa mengontrol secara tepat
+seberapa besar data yang digunakan aplikasi Anda.</p>
+
+<p>Setelah menambahkan preferensi yang diperlukan dalam {@link android.preference.PreferenceActivity} Anda
+untuk mengontrol kebiasaan data aplikasi, Anda harus menambahkan filter intent untuk {@link
+android.content.Intent#ACTION_MANAGE_NETWORK_USAGE} dalam file manifes Anda. Misalnya:</p>
+
+<pre>
+<activity android:name="SettingsActivity" ... >
+ <intent-filter>
+ <action android:name="android.intent.action.MANAGE_NETWORK_USAGE" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+</activity>
+</pre>
+
+<p>Filter intent ini menunjukkan pada sistem bahwa ini adalah aktivitas yang mengontrol penggunaan
+data aplikasi Anda. Jadi, saat pengguna memeriksa seberapa banyak data yang digunakan oleh aplikasi dari
+aplikasi Settings pada sistem, tombol <em>View application settings</em> akan tersedia dan menjalankan
+{@link android.preference.PreferenceActivity} sehingga pengguna bisa menyaring seberapa besar data yang digunakan
+aplikasi Anda.</p>
+
+
+
+
+
+
+
+<h2 id="Custom">Membangun Preferensi Custom</h2>
+
+<p>Kerangka kerja Android menyertakan berbagai subkelas {@link android.preference.Preference} yang
+memungkinkan Anda membangun UI untuk beberapa macam tipe pengaturan.
+Akan tetapi, Anda mungkin menemukan pengaturan yang diperlukan bila tidak ada solusi bawaan, seperti
+picker nomor atau picker tanggal. Dalam hal demikian, Anda akan perlu membuat preferensi custom dengan memperluas
+kelas {@link android.preference.Preference} atau salah satu subkelas lainnya.</p>
+
+<p>Bila memperluas kelas {@link android.preference.Preference}, ada beberapa hal
+penting yang perlu Anda lakukan:</p>
+
+<ul>
+ <li>Menetapkan antarmuka pengguna yang akan muncul saat pengguna memilih pengaturan.</li>
+ <li>Menyimpan nilai pengaturan bila perlu.</li>
+ <li>Menginisialisasi {@link android.preference.Preference} dengan nilai saat ini (atau default)
+bila muncul di tampilan.</li>
+ <li>Menyediakan nilai default bila diminta oleh sistem.</li>
+ <li>Jika {@link android.preference.Preference} menyediakan UI sendiri (seperti dialog), simpan
+dan pulihkan status untuk menangani perubahan daur hidup (seperti saat pengguna memutar layar).</li>
+</ul>
+
+<p>Bagian berikut menjelaskan cara melakukan setiap tugas ini.</p>
+
+
+
+<h3 id="CustomSelected">Menetapkan antarmuka pengguna</h3>
+
+ <p>Jika secara langsung memperluas kelas {@link android.preference.Preference}, Anda perlu mengimplementasikan
+{@link android.preference.Preference#onClick()} untuk mendefinisikan tindakan yang terjadi bila pengguna
+memilih item tersebut. Akan tetapi, sebagian besar pengaturan custom memperluas {@link android.preference.DialogPreference} untuk
+menampilkan dialog, sehingga menyederhanakan prosedur. Bila memperluas {@link
+android.preference.DialogPreference}, Anda harus memanggil {@link
+android.preference.DialogPreference#setDialogLayoutResource setDialogLayoutResourcs()} selama di
+konstruktor kelas untuk menetapkan layout dialog.</p>
+
+ <p>Misalnya, beri ini konstruktor untuk {@link
+android.preference.DialogPreference} custom yang mendeklarasikan layout dan menetapkan teks untuk tombol dialog
+negatif dan positif default:</p>
+
+<pre>
+public class NumberPickerPreference extends DialogPreference {
+ public NumberPickerPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+
+ setDialogLayoutResource(R.layout.numberpicker_dialog);
+ setPositiveButtonText(android.R.string.ok);
+ setNegativeButtonText(android.R.string.cancel);
+
+ setDialogIcon(null);
+ }
+ ...
+}
+</pre>
+
+
+
+<h3 id="CustomSave">Menyimpan nilai pengaturan</h3>
+
+<p>Anda bisa menyimpan nilai pengaturan kapan saja dengan memanggil salah satu metode {@code persist*()} kelas {@link
+android.preference.Preference}, seperti {@link
+android.preference.Preference#persistInt persistInt()} jika nilai pengaturan adalah integer atau
+{@link android.preference.Preference#persistBoolean persistBoolean()} untuk menyimpan boolean.</p>
+
+<p class="note"><strong>Catatan:</strong> Setiap {@link android.preference.Preference} hanya bisa menyimpan satu
+tipe data, jadi Anda harus menggunakan metode {@code persist*()} yang tepat untuk tipe data yang digunakan
+oleh {@link android.preference.Preference} custom Anda.</p>
+
+<p>Bila Anda memilih untuk mempertahankannya, pengaturan bisa bergantung pada kelas {@link
+android.preference.Preference} yang Anda perluas. Jika Anda memperluas {@link
+android.preference.DialogPreference}, maka Anda harus mempertahankan nilai hanya jika dialog
+tertutup karena hasil positif (pengguna memilih tombol "OK").</p>
+
+<p>Bila {@link android.preference.DialogPreference} tertutup, sistem akan memanggil metode {@link
+android.preference.DialogPreference#onDialogClosed onDialogClosed()}. Metode mencakup argumen
+boolean yang menetapkan apakah hasil pengguna "positif"—jika nilainya
+<code>true</code>, maka pengguna memilih tombol positif dan Anda harus menyimpan nilai baru. Misalnya:
+</p>
+
+<pre>
+@Override
+protected void onDialogClosed(boolean positiveResult) {
+ // When the user selects "OK", persist the new value
+ if (positiveResult) {
+ persistInt(mNewValue);
+ }
+}
+</pre>
+
+<p>Dalam contoh ini, <code>mNewValue</code> adalah anggota kelas yang menampung nilai
+pengaturan saat ini. Memanggil {@link android.preference.Preference#persistInt persistInt()} akan menyimpan nilai
+ke file {@link android.content.SharedPreferences} (secara otomatis menggunakan kunci yang
+ditetapkan dalam file XML untuk {@link android.preference.Preference} ini).</p>
+
+
+<h3 id="CustomInitialize">Menginisialisasi nilai saat ini</h3>
+
+<p>Bila sistem menambahkan {@link android.preference.Preference} Anda ke layar, ia
+akan memanggil {@link android.preference.Preference#onSetInitialValue onSetInitialValue()} untuk memberi tahu
+Anda apakah pengaturan memiliki nilai yang dipertahankan. Jika tidak ada nilai yang dipertahankan, panggilan ini
+akan menyediakan nilai default bagi Anda.</p>
+
+<p>Metode {@link android.preference.Preference#onSetInitialValue onSetInitialValue()} akan meneruskan
+boolean, <code>restorePersistedValue</code>, untuk menunjukkan apakah nilai dipertahankan
+untuk pengaturan. Jika <code>true</code>, maka Anda harus mengambil nilai yang dipertahankan dengan memanggil
+salah satu metode {@code getPersisted*()} kelas {@link
+android.preference.Preference}, seperti {@link
+android.preference.Preference#getPersistedInt getPersistedInt()} untuk nilai integer. Anda biasanya
+perlu mengambil nilai yang dipertahankan agar bisa memperbarui UI dengan benar untuk merefleksikan
+nilai yang tersimpan sebelumnya.</p>
+
+<p>Jika <code>restorePersistedValue</code> adalah <code>false</code>, maka Anda
+harus menggunakan nilai default yang diteruskan dalam argumen kedua.</p>
+
+<pre>
+@Override
+protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValue) {
+ if (restorePersistedValue) {
+ // Restore existing state
+ mCurrentValue = this.getPersistedInt(DEFAULT_VALUE);
+ } else {
+ // Set default state from the XML attribute
+ mCurrentValue = (Integer) defaultValue;
+ persistInt(mCurrentValue);
+ }
+}
+</pre>
+
+<p>Setiap metode {@code getPersisted*()} memerlukan argumen yang menetapkan
+nilai default untuk digunakan jika tidak ada nilai yang dipertahankan atau kunci tidak ada. Dalam contoh
+di atas, konstanta lokal yang digunakan untuk menetapkan nilai default dalam kasus {@link
+android.preference.Preference#getPersistedInt getPersistedInt()} tidak bisa mengembalikan nilai yang dipertahankan.</p>
+
+<p class="caution"><strong>Perhatian:</strong> Anda <strong>tidak bisa</strong> menggunakan
+<code>defaultValue</code> sebagai nilai default dalam metode {@code getPersisted*()}, karena
+nilainya selalu nol bila <code>restorePersistedValue</code> adalah <code>true</code>.</p>
+
+
+<h3 id="CustomDefault">Menyediakan nilai default</h3>
+
+<p>Jika instance kelas {@link android.preference.Preference} Anda menetapkan nilai default
+(dengan atribut {@code android:defaultValue}), maka
+sistem akan memanggil {@link android.preference.Preference#onGetDefaultValue
+onGetDefaultValue()} bila membuat instance objek untuk mengambil nilai. Anda harus mengimplementasikan
+metode ini agar sistem bisa menyimpan nilai default dalam {@link
+android.content.SharedPreferences}. Misalnya:</p>
+
+<pre>
+@Override
+protected Object onGetDefaultValue(TypedArray a, int index) {
+ return a.getInteger(index, DEFAULT_VALUE);
+}
+</pre>
+
+<p>Argumen metode menyediakan semua hal yang Anda perlukan: larik atribut dan posisi
+indeks dari {@code android:defaultValue}, yang harus Anda ambil. Alasan Anda harus
+mengimplementasikan metode ini untuk mengekstrak nilai default dari atribut adalah karena Anda harus menetapkan
+nilai default lokal untuk atribut jika nilai tidak didefinisikan.</p>
+
+
+
+<h3 id="CustomSaveState">Menyimpan dan memulihkan status Preferensi</h3>
+
+<p>Seperti halnya {@link android.view.View} di layout, subkelas {@link android.preference.Preference}
+Anda bertanggung jawab menyimpan dan memulihkan statusnya jika aktivitas atau fragmen
+di-restart (seperti saat pengguna memutar layar). Untuk menyimpan
+dan memulihkan status kelas {@link android.preference.Preference} dengan benar, Anda harus mengimplementasikan
+metode callback daur hidup {@link android.preference.Preference#onSaveInstanceState
+onSaveInstanceState()} dan {@link
+android.preference.Preference#onRestoreInstanceState onRestoreInstanceState()}.</p>
+
+<p>Status {@link android.preference.Preference} Anda didefinisikan oleh objek yang mengimplementasikan
+antarmuka {@link android.os.Parcelable}. Kerangka kerja Android menyediakan objek seperti itu untuk Anda gunakan
+sebagai titik mulai untuk mendefinisikan objek status Anda: kelas {@link
+android.preference.Preference.BaseSavedState}.</p>
+
+<p>Untuk mendefinisikan cara kelas {@link android.preference.Preference} menyimpan statusnya, Anda harus
+memperluas kelas {@link android.preference.Preference.BaseSavedState}. Anda hanya perlu mengesampingkan
+ beberapa metode dan mendefinisikan objek {@link android.preference.Preference.BaseSavedState#CREATOR}
+.</p>
+
+<p>Untuk sebagian besar aplikasi, Anda bisa menyalin implementasi berikut dan cukup mengubah baris yang
+menangani {@code value} jika subkelas {@link android.preference.Preference} Anda menyimpan tipe
+data selain integer.</p>
+
+<pre>
+private static class SavedState extends BaseSavedState {
+ // Member that holds the setting's value
+ // Change this data type to match the type saved by your Preference
+ int value;
+
+ public SavedState(Parcelable superState) {
+ super(superState);
+ }
+
+ public SavedState(Parcel source) {
+ super(source);
+ // Get the current preference's value
+ value = source.readInt(); // Change this to read the appropriate data type
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ super.writeToParcel(dest, flags);
+ // Write the preference's value
+ dest.writeInt(value); // Change this to write the appropriate data type
+ }
+
+ // Standard creator object using an instance of this class
+ public static final Parcelable.Creator<SavedState> CREATOR =
+ new Parcelable.Creator<SavedState>() {
+
+ public SavedState createFromParcel(Parcel in) {
+ return new SavedState(in);
+ }
+
+ public SavedState[] newArray(int size) {
+ return new SavedState[size];
+ }
+ };
+}
+</pre>
+
+<p>Dengan implementasi {@link android.preference.Preference.BaseSavedState} di atas yang ditambahkan
+ke aplikasi Anda (biasanya sebagai subkelas dari subkelas {@link android.preference.Preference}), Anda
+nanti perlu mengimplementasikan metode {@link android.preference.Preference#onSaveInstanceState
+onSaveInstanceState()} dan {@link
+android.preference.Preference#onRestoreInstanceState onRestoreInstanceState()} untuk subkelas
+{@link android.preference.Preference} Anda.</p>
+
+<p>Misalnya:</p>
+
+<pre>
+@Override
+protected Parcelable onSaveInstanceState() {
+ final Parcelable superState = super.onSaveInstanceState();
+ // Check whether this Preference is persistent (continually saved)
+ if (isPersistent()) {
+ // No need to save instance state since it's persistent,
+ // use superclass state
+ return superState;
+ }
+
+ // Create instance of custom BaseSavedState
+ final SavedState myState = new SavedState(superState);
+ // Set the state's value with the class member that holds current
+ // setting value
+ myState.value = mNewValue;
+ return myState;
+}
+
+@Override
+protected void onRestoreInstanceState(Parcelable state) {
+ // Check whether we saved the state in onSaveInstanceState
+ if (state == null || !state.getClass().equals(SavedState.class)) {
+ // Didn't save the state, so call superclass
+ super.onRestoreInstanceState(state);
+ return;
+ }
+
+ // Cast state to custom BaseSavedState and pass to superclass
+ SavedState myState = (SavedState) state;
+ super.onRestoreInstanceState(myState.getSuperState());
+
+ // Set this Preference's widget to reflect the restored state
+ mNumberPicker.setValue(myState.value);
+}
+</pre>
+
diff --git a/docs/html-intl/intl/id/guide/topics/ui/ui-events.jd b/docs/html-intl/intl/id/guide/topics/ui/ui-events.jd
new file mode 100644
index 0000000..0307b34
--- /dev/null
+++ b/docs/html-intl/intl/id/guide/topics/ui/ui-events.jd
@@ -0,0 +1,291 @@
+page.title=Kejadian Input
+parent.title=Antarmuka Pengguna
+parent.link=index.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+ <h2>Dalam dokumen ini</h2>
+ <ol>
+ <li><a href="#EventListeners">Event Listener</a></li>
+ <li><a href="#EventHandlers">Event Handler</a></li>
+ <li><a href="#TouchMode">Mode Sentuh</a></li>
+ <li><a href="#HandlingFocus">Menangani Fokus</a></li>
+ </ol>
+
+</div>
+</div>
+
+<p>Di Android, ada lebih dari satu cara untuk mencegat kejadian dari interaksi pengguna dengan aplikasi Anda.
+Saat mempertimbangkan kejadian dalam antarmuka pengguna Anda, pendekatannya adalah menangkap kejadian
+dari objek View tertentu yang digunakan pengguna untuk berinteraksi. Kelas View menyediakan sarana untuk melakukannya.</p>
+
+<p>Dalam berbagai kelas View yang akan digunakan untuk menyusun layout, Anda mungkin melihat beberapa metode callback
+publik yang tampak berguna untuk kejadian UI. Metode ini dipanggil oleh kerangka kerja Android ketika masing-masing
+tindakan terjadi pada objek itu. Misalnya, bila View (seperti Button/Tombol) disentuh,
+metode <code>onTouchEvent()</code> akan dipanggil pada objek itu. Akan tetapi, untuk mencegatnya, Anda harus memperluas
+kelas dan mengesampingkan metode itu. Akan tetapi, memperluas setiap objek View
+untuk menangani kejadian seperti itu tidaklah praktis. Karena itulah kelas View juga berisi
+sekumpulan antarmuka tersarang dengan callback yang jauh lebih mudah didefinisikan. Antarmuka ini,
+yang disebut <a href="#EventListeners">event listener</a>, merupakan tiket Anda untuk menangkap interaksi pengguna dengan UI.</p>
+
+<p>Walaupun Anda akan lebih sering menggunakan event listener ini untuk interaksi pengguna,
+mungkin ada saatnya Anda ingin memperluas kelas View, untuk membuat komponen custom.
+Mungkin Anda ingin memperluas kelas {@link android.widget.Button}
+untuk membuat sesuatu yang lebih menarik. Dalam hal ini, Anda akan dapat mendefinisikan perilaku kejadian default untuk kelas Anda dengan menggunakan
+kelas <a href="#EventHandlers">event handler</a>.</p>
+
+
+<h2 id="EventListeners">Event Listener</h2>
+
+<p>Event listener merupakan antarmuka di kelas {@link android.view.View} yang berisi metode
+callback tunggal. Metode ini akan dipanggil oleh kerangka kerja Android bila View yang
+telah didaftarkan dengan listener dipicu oleh interaksi pengguna dengan item dalam UI.</p>
+
+<p>Yang juga disertakan dalam antarmuka event listener adalah metode callback berikut ini:</p>
+
+<dl>
+ <dt><code>onClick()</code></dt>
+ <dd>Dari {@link android.view.View.OnClickListener}.
+ Ini dipanggil baik saat pengguna menyentuh item
+ (bila dalam mode sentuh), maupun memfokuskan pada item dengan tombol navigasi atau trackball dan
+menekan tombol "enter" yang sesuai atau menekan trackball.</dd>
+ <dt><code>onLongClick()</code></dt>
+ <dd>Dari {@link android.view.View.OnLongClickListener}.
+ Ini dipanggil baik saat pengguna menyentuh dan menahan item (bila dalam mode sentuh),
+maupun memfokuskan pada item dengan tombol navigasi atau trackball dan
+menekan serta menahan tombol "enter" yang sesuai atau menekan dan menahan trackball (selama satu detik).</dd>
+ <dt><code>onFocusChange()</code></dt>
+ <dd>Dari {@link android.view.View.OnFocusChangeListener}.
+ Ini dipanggil saat pengguna menyusuri ke atau dari item, dengan menggunakan tombol navigasi atau trackball.</dd>
+ <dt><code>onKey()</code></dt>
+ <dd>Dari {@link android.view.View.OnKeyListener}.
+ Ini dipanggil saat pengguna memfokuskan pada item dan menekan atau melepas tombol fisik pada perangkat.</dd>
+ <dt><code>onTouch()</code></dt>
+ <dd>Dari {@link android.view.View.OnTouchListener}.
+ Ini dipanggil saat pengguna melakukan tindakan yang digolongkan sebagai kejadian sentuh, termasuk penekanan, pelepasan,
+atau gerak perpindahan pada layar (dalam batasan item itu).</dd>
+ <dt><code>onCreateContextMenu()</code></dt>
+ <dd>Dari {@link android.view.View.OnCreateContextMenuListener}.
+ Ini dipanggil saat Menu Konteks sedang dibuat (akibat "klik lama" terus-menerus). Lihat diskusi
+tentang menu konteks di panduan pengembang <a href="{@docRoot}guide/topics/ui/menus.html#context-menu">Menu</a>.
+</dd>
+</dl>
+
+<p>Metode ini satu-satunya yang menempati antarmukanya masing-masing. Untuk mendefinisikan salah satu metode ini
+dan menangani kejadian Anda, implementasikan antarmuka tersarang dalam Aktivitas Anda atau definisikan sebagai kelas anonim.
+Kemudian, teruskan satu
+instance implementasi Anda pada masing-masing metode <code>View.set...Listener()</code>. (Misalnya, panggil
+<code>{@link android.view.View#setOnClickListener(View.OnClickListener) setOnClickListener()}</code>
+dan teruskan implementasi {@link android.view.View.OnClickListener OnClickListener} Anda.)</p>
+
+<p>Contoh di bawah menunjukkan cara mendaftarkan on-click listener untuk Button. </p>
+
+<pre>
+// Create an anonymous implementation of OnClickListener
+private OnClickListener mCorkyListener = new OnClickListener() {
+ public void onClick(View v) {
+ // do something when the button is clicked
+ }
+};
+
+protected void onCreate(Bundle savedValues) {
+ ...
+ // Capture our button from layout
+ Button button = (Button)findViewById(R.id.corky);
+ // Register the onClick listener with the implementation above
+ button.setOnClickListener(mCorkyListener);
+ ...
+}
+</pre>
+
+<p>Anda juga akan merasa lebih praktis mengimplementasikan OnClickListener sebagai bagian dari Aktivitas.
+Ini akan menghindari beban kelas ekstra dan alokasi objek. Misalnya:</p>
+<pre>
+public class ExampleActivity extends Activity implements OnClickListener {
+ protected void onCreate(Bundle savedValues) {
+ ...
+ Button button = (Button)findViewById(R.id.corky);
+ button.setOnClickListener(this);
+ }
+
+ // Implement the OnClickListener callback
+ public void onClick(View v) {
+ // do something when the button is clicked
+ }
+ ...
+}
+</pre>
+
+<p>Perhatikan bahwa callback <code>onClick()</code> dalam contoh di atas tidak memiliki
+nilai hasil, namun beberapa metode event listener lainnya harus mengembalikan boolean. Sebabnya
+bergantung pada kejadian. Untuk sebagian yang mengembalikan boolean, ini sebabnya:</p>
+<ul>
+ <li><code>{@link android.view.View.OnLongClickListener#onLongClick(View) onLongClick()}</code> -
+ Ini mengembalikan boolean untuk menunjukkan apakah Anda telah menggunakan kejadian dan tidak boleh dibawa lebih jauh.
+ Yaitu, mengembalikan <em>benar</em> untuk menunjukkan apakah Anda telah menangani kejadian dan semestinya berhenti di sini;
+ mengembalikan <em>salah</em> jika Anda tidak menanganinya dan/atau kejadian semestinya berlanjut ke
+ on-click listener lainnya.</li>
+ <li><code>{@link android.view.View.OnKeyListener#onKey(View,int,KeyEvent) onKey()}</code> -
+ Ini mengembalikan boolean untuk menunjukkan apakah Anda telah menggunakan kejadian dan tidak boleh dibawa lebih jauh.
+ Yaitu, mengembalikan <em>benar</em> untuk menunjukkan apakah Anda telah menangani kejadian dan semestinya berhenti di sini;
+ mengembalikan <em>salah</em> jika Anda tidak menanganinya dan/atau kejadian semestinya berlanjut ke
+ on-key listener lainnya.</li>
+ <li><code>{@link android.view.View.OnTouchListener#onTouch(View,MotionEvent) onTouch()}</code> -
+ Ini mengembalikan boolean untuk menunjukkan apakah listener Anda telah menggunakan kejadian ini. Yang penting adalah
+kejadian ini bisa memiliki beberapa tindakan yang saling mengikuti. Jadi, jika Anda mengembalikan <em>salah</em>saat
+kejadian tindakan turun diterima, itu menunjukkan bahwa Anda belum menggunakan kejadian itu dan juga
+tidak tertarik dengan tindakan berikutnya dari kejadian ini. Karena itu, Anda tidak akan diminta untuk melakukan tindakan
+ lainnya dalam kejadian, seperti gerakan jari, atau kejadian tindakan naik yang akan terjadi.</li>
+</ul>
+
+<p>Ingatlah bahwa kejadian tombol fisik selalu disampaikan ke View yang sedang difokus. Kejadian ini dikirim mulai dari atas
+hierarki View, kemudian turun hingga tujuan yang sesuai. Jika View Anda (atau anak View Anda)
+saat ini sedang fokus, maka Anda dapat melihat kejadian berpindah melalui metode.<code>{@link android.view.View#dispatchKeyEvent(KeyEvent)
+dispatchKeyEvent()}</code> Sebagai pengganti untuk menangkap kejadian penting melalui View, Anda juga dapat menerima
+semua kejadian dalam Aktivitas Anda dengan <code>{@link android.app.Activity#onKeyDown(int,KeyEvent) onKeyDown()}</code>
+dan <code>{@link android.app.Activity#onKeyUp(int,KeyEvent) onKeyUp()}</code>.</p>
+
+<p>Selain itu, saat memikirkan tentang input teks aplikasi Anda, ingatlah bahwa banyak perangkat yang hanya memiliki
+metode input perangkat lunak. Metode seperti itu tidak harus berbasis tombol; sebagian mungkin menggunakan input suara, tulisan tangan, dan seterusnya. Meskipun
+metode input menyajikan antarmuka seperti keyboard, itu umumnya <strong>tidak</strong> memicu keluarga kejadian
+<code>{@link android.app.Activity#onKeyDown(int,KeyEvent) onKeyDown()}</code>. Anda sama sekali tidak boleh
+membangun UI yang mengharuskan penekanan tombol tertentu dikontrol kecuali jika Anda ingin membatasi aplikasi Anda pada perangkat yang memiliki
+keyboard fisik. Khususnya, jangan mengandalkan metode ini untuk memvalidasi input saat pengguna menekan tombol
+enter; melainkan, gunakan tindakan seperti {@link android.view.inputmethod.EditorInfo#IME_ACTION_DONE} untuk menandai
+metode input mengenai reaksi yang diharapkan aplikasi Anda, sehingga bisa mengubah UI-nya secara signifikan. Hindari anggapan
+tentang bagaimana metode input perangkat lunak seharusnya bekerja dan percayalah bahwa metode akan menyediakan teks yang sudah diformat bagi aplikasi Anda.</p>
+
+<p class="note"><strong>Catatan:</strong> Android akan memanggil event handler terlebih dahulu kemudian handler
+default yang sesuai dari definisi kelas. Karena itu, mengembalikan <em>benar</em> dari event listener ini akan menghentikan
+penyebaran kejadian ke event listener lain dan juga akan memblokir callback ke
+event handler default di View. Pastikan bahwa Anda ingin mengakhiri kejadian saat mengembalikan <em>true</em>.</p>
+
+
+<h2 id="EventHandlers">Event Handler</h2>
+
+<p>Jika Anda membuat komponen custom dari View, maka Anda dapat mendefinisikan penggunaan beberapa
+metode callback sebagai event handler default.
+Dalam dokumen tentang <a href="{@docRoot}guide/topics/ui/custom-components.html">Komponen
+Custom</a>, Anda akan melihat penggunaan beberapa callback umum untuk penanganan kejadian,
+termasuk:</p>
+<ul>
+ <li><code>{@link android.view.View#onKeyDown}</code> - Dipanggil bila terjadi kejadian tombol baru.</li>
+ <li><code>{@link android.view.View#onKeyUp}</code> - Dipanggil bila terjadi kejadian tombol naik.</li>
+ <li><code>{@link android.view.View#onTrackballEvent}</code> - Dipanggil bila terjadi kejadian gerakan trackball.</li>
+ <li><code>{@link android.view.View#onTouchEvent}</code> - Dipanggil bila terjadi kejadian gerakan layar sentuh.</li>
+ <li><code>{@link android.view.View#onFocusChanged}</code> - Dipanggil bila View memperoleh atau kehilangan fokus.</li>
+</ul>
+<p>Ada beberapa metode lain yang harus Anda ketahui, yang bukan bagian dari kelas View,
+namun bisa berdampak langsung pada kemampuan Anda menangani kejadian. Jadi, saat mengelola kejadian yang lebih kompleks dalam
+layout, pertimbangkanlah metode-metode lain ini:</p>
+<ul>
+ <li><code>{@link android.app.Activity#dispatchTouchEvent(MotionEvent)
+ Activity.dispatchTouchEvent(MotionEvent)}</code> - Ini memungkinkan {@link
+ android.app.Activity} Anda mencegat semua kejadian sentuh sebelum dikirim ke jendela.</li>
+ <li><code>{@link android.view.ViewGroup#onInterceptTouchEvent(MotionEvent)
+ ViewGroup.onInterceptTouchEvent(MotionEvent)}</code> - Ini memungkinkan {@link
+ android.view.ViewGroup} memantau kejadian saat dikirim ke View anak.</li>
+ <li><code>{@link android.view.ViewParent#requestDisallowInterceptTouchEvent(boolean)
+ ViewParent.requestDisallowInterceptTouchEvent(boolean)}</code> - Panggil ini
+ pada View induk untuk menunjukan larangan mencegat kejadian sentuh dengan <code>{@link
+ android.view.ViewGroup#onInterceptTouchEvent(MotionEvent)}</code>.</li>
+</ul>
+
+<h2 id="TouchMode">Mode Sentuh</h2>
+<p>
+Saat pengguna menyusuri antarmuka pengguna dengan tombol pengarah atau trackball, Anda
+perlu memberikan fokus pada item tindakan (seperti tombol) agar pengguna bisa mengetahui apa
+yang akan menerima input. Akan tetapi jika perangkat memiliki kemampuan sentuh, dan pengguna
+mulai berinteraksi dengan antarmuka dengan menyentuhnya, maka Anda tidak perlu lagi
+menyorot item, atau memfokuskan pada View tertentu. Karena itu, ada mode
+untuk interaksi yang bernama "mode sentuh".
+</p>
+<p>
+Untuk perangkat berkemampuan sentuh, setelah pengguna menyentuh layar, perangkat
+akan masuk ke mode sentuh. Dari sini dan selanjutnya, hanya View dengan
+{@link android.view.View#isFocusableInTouchMode} benar yang akan dapat difokus, seperti widget pengedit teks.
+View lain yang dapat disentuh, seperti tombol, tidak akan difokus bila disentuh; View ini akan
+langsung memicu on-click listener bila ditekan.
+</p>
+<p>
+Kapan saja pengguna menekan tombol pengarah atau menggulir dengan trackball, perangkat akan
+keluar dari mode sentuh, dan mencari tampilan untuk difokuskan. Kini pengguna bisa melanjutkan interaksi
+dengan antarmuka pengguna tanpa menyentuh layar.
+</p>
+<p>
+Status mode sentuh dipertahankan di seluruh sistem (semua jendela dan aktivitas).
+Untuk query status saat ini, Anda bisa memanggil
+{@link android.view.View#isInTouchMode} untuk mengetahui apakah perangkat saat ini sedang dalam mode sentuh.
+</p>
+
+
+<h2 id="HandlingFocus">Menangani Fokus</h2>
+
+<p>Kerangka kerja ini akan menangani gerakan fokus rutin sebagai respons input pengguna.
+Ini termasuk mengubah fokus saat View dihapus atau disembunyikan, atau saat tersedia View
+baru. View menunjukkan kesediaannya untuk mengambil fokus
+melalui metode <code>{@link android.view.View#isFocusable()}</code>. Untuk mengubah apakah View bisa mengambil
+fokus, panggil <code>{@link android.view.View#setFocusable(boolean) setFocusable()}</code>. Saat dalam mode sentuh,
+Anda dapat me-query apakah View memungkinkan fokus dengan <code>{@link android.view.View#isFocusableInTouchMode()}</code>.
+Anda bisa mengubahnya dengan <code>{@link android.view.View#setFocusableInTouchMode(boolean) setFocusableInTouchMode()}</code>.
+</p>
+
+<p>Gerakan fokus berdasarkan pada algoritma yang mencari tetangga terdekat dalam
+arah yang diberikan. Dalam kasus yang jarang terjadi, algoritma default mungkin
+tidak cocok dengan perilaku yang diinginkan pengembang. Dalam situasi ini, Anda bisa memberikan
+pengesampingan eksplisit dengan mengikuti atribut XML berikut dalam file layout:
+<var>nextFocusDown</var>, <var>nextFocusLeft</var>, <var>nextFocusRight</var>, dan
+<var>nextFocusUp</var>. Tambahkan salah satu atribut ini ke View <em>dari</em> mana fokus
+meninggalkan. Definisikan nilai atribut untuk menjadi ID View
+<em>ke</em> mana fokus harus diberikan. Misalnya:</p>
+<pre>
+<LinearLayout
+ android:orientation="vertical"
+ ... >
+ <Button android:id="@+id/top"
+ android:nextFocusUp="@+id/bottom"
+ ... />
+ <Button android:id="@+id/bottom"
+ android:nextFocusDown="@+id/top"
+ ... />
+</LinearLayout>
+</pre>
+
+<p>Biasanya, dalam layout vertikal ini, navigasi ke atas dari Button pertama tidak akan membawa ke
+mana pun, tidak pula akan menyusuri ke bawah dari Button kedua. Karena sekarang Button atas telah
+mendefinisikan Button bawah sebagai <var>nextFocusUp</var> (dan sebaliknya), fokus navigasi akan
+silih berganti dari atas ke bawah dan bawah ke atas.</p>
+
+<p>Jika Anda ingin mendeklarasikan View sebagai dapat difokus dalam UI (bila biasanya tidak dapat difokus),
+tambahkan atribut XML <code>android:focusable</code> ke View, dalam deklarasi layout Anda.
+Atur nilai <var>true</var>. Anda juga bisa mendeklarasikan View
+sebagai dapat difokus saat dalam Mode Sentuh dengan <code>android:focusableInTouchMode</code>.</p>
+<p>Untuk meminta View tertentu difokus, panggil <code>{@link android.view.View#requestFocus()}</code>.</p>
+<p>Untuk mendengarkan kejadian fokus (diberi tahu bila View menerima atau kehilangan fokus), gunakan
+<code>{@link android.view.View.OnFocusChangeListener#onFocusChange(View,boolean) onFocusChange()}</code>
+, seperti yang dibahas di bagian <a href="#EventListeners">Event Listener</a>, di atas.</p>
+
+
+
+<!--
+<h2 is="EventCycle">Event Cycle</h2>
+ <p>The basic cycle of a View is as follows:</p>
+ <ol>
+ <li>An event comes in and is dispatched to the appropriate View. The View
+ handles the event and notifies any listeners.</li>
+ <li>If, in the course of processing the event, the View's bounds may need
+ to be changed, the View will call {@link android.view.View#requestLayout()}.</li>
+ <li>Similarly, if in the course of processing the event the View's appearance
+ may need to be changed, the View will call {@link android.view.View#invalidate()}.</li>
+ <li>If either {@link android.view.View#requestLayout()} or {@link android.view.View#invalidate()} were called,
+ the framework will take care of measuring, laying out, and drawing the tree
+ as appropriate.</li>
+ </ol>
+
+ <p class="note"><strong>Note:</strong> The entire View tree is single threaded. You must always be on
+ the UI thread when calling any method on any View.
+ If you are doing work on other threads and want to update the state of a View
+ from that thread, you should use a {@link android.os.Handler}.
+ </p>
+-->
diff --git a/docs/html-intl/intl/id/training/articles/direct-boot.jd b/docs/html-intl/intl/id/training/articles/direct-boot.jd
new file mode 100644
index 0000000..a7e3cf3
--- /dev/null
+++ b/docs/html-intl/intl/id/training/articles/direct-boot.jd
@@ -0,0 +1,181 @@
+page.title=Direct Boot
+page.keywords=pratinjau,sdk,direct boot
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>Dalam dokumen ini</h2>
+ <ol>
+ <li><a href="#run">Meminta Akses untuk Berjalan Selama Direct Boot</a></li>
+ <li><a href="#access">Mengakses Penyimpanan yang Dienkripsi dengan Perangkat</a></li>
+ <li><a href="#notification">Mendapatkan Pemberitahuan saat Pengguna Membuka Kunci</a></li>
+ <li><a href="#migrating">Migrasi Data yang Ada</a></li>
+ <li><a href="#testing">Menguji Aplikasi Peka Enkripsi Anda</a></li>
+ </ol>
+</div>
+</div>
+
+<p>Android N berjalan dalam mode <i>Direct Boot</i> yang aman
+bila perangkat telah dihidupkan namun pengguna tidak membuka
+kunci perangkat. Untuk mendukung hal ini, sistem menyediakan dua lokasi penyimpanan untuk data:</p>
+
+<ul>
+<li><i>Penyimpanan yang dienkripsi dengan kredensial</i>, yang merupakan lokasi penyimpanan default
+dan hanya tersedia setelah pengguna membuka kunci perangkat.</li>
+<li><i>Penyimpanan yang dienkripsi dengan perangkat</i>, yang merupakan lokasi penyimpanan yang tersedia
+selama mode Direct Boot dan setelah pengguna membuka kunci perangkat.</li>
+</ul>
+
+<p>Secara default, aplikasi tidak berjalan selama mode Direct Boot.
+Jika aplikasi Anda perlu melakukan tindakan selama mode Direct Boot, Anda bisa mendaftarkan
+komponen aplikasi yang harus dijalankan selama mode ini. Beberapa kasus penggunaan umum
+untuk aplikasi yang perlu dijalankan selama mode Direct Boot antara lain:</p>
+
+<ul>
+<li>Aplikasi yang telah menjadwalkan pemberitahuan, seperti aplikasi
+beker.</li>
+<li>Aplikasi yang menyediakan pemberitahuan pengguna yang penting, seperti aplikasi SMS.</li>
+<li>Aplikasi yang menyediakan layanan aksesibilitas, seperti TalkBack.</li>
+</ul>
+
+<p>Jika aplikasi Anda perlu mengakses data saat dijalankan dalam mode Direct Boot, gunakan
+penyimpanan yang dienkripsi dengan perangkat. Penyimpanan yang dienkripsi dengan perangkat berisi data
+yang dienkripsi dengan kunci yang hanya tersedia setelah perangkat melakukan
+booting yang berhasil diverifikasi.</p>
+
+<p>Untuk data yang harus dienkripsi dengan kunci yang dikaitkan dengan kredensial
+pengguna, seperti PIN atau kata sandi, gunakan penyimpanan yang dienkripsi dengan kredensial.
+Penyimpanan yang dienkripsi dengan kredensial hanya tersedia setelah pengguna berhasil
+membuka kunci perangkat, hingga saat pengguna menghidupkan ulang perangkat lagi. Jika
+pengguna mengaktifkan layar kunci setelah membuka kunci perangkat, hal ini tidak akan mengunci
+penyimpanan yang dienkripsi dengan kredensial.</p>
+
+<h2 id="run">Meminta Akses untuk Berjalan Selama Direct Boot</h2>
+
+<p>Aplikasi harus mendaftarkan komponennya pada sistem agar
+bisa berjalan selama mode Direct Boot atau mengakses
+penyimpanan yang dienkripsi dengan perangkat. Aplikasi mendaftar pada sistem dengan menandai komponen sebagai
+<i>peka enkripsi</i>. Untuk menandai komponen Anda sebagai peka enkripsi, setel atribut
+<code>android:directBootAware</code> ke true dalam manifes Anda.<p>
+
+<p>Komponen yang peka enkripsi bisa mendaftar untuk menerima pesan siaran
+<code>LOCKED_BOOT_COMPLETED</code> dari
+sistem bila perangkat telah dihidupkan ulang. Pada tahap ini
+penyimpanan yang dienkripsi dengan perangkat akan tersedia, dan komponen Anda bisa mengeksekusi tugas-tugas yang perlu
+dijalankan selama mode Direct Boot, seperti memicu alarm yang terjadwal.</p>
+
+<p>Cuplikan kode berikut adalah contoh cara mendaftarkan
+{@link android.content.BroadcastReceiver} sebagai peka enkripsi, dan menambahkan sebuah
+filter intent untuk <code>LOCKED_BOOT_COMPLETED</code>, dalam manifes aplikasi:</p>
+
+<pre>
+<receiver
+ android:directBootAware="true" >
+ ...
+ <intent-filter>
+ <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
+ </intent-filter>
+</receiver>
+</pre>
+
+<p>Setelah pengguna membuka kunci perangkat, semua komponen bisa mengakses
+penyimpanan yang dienkripsi dengan perangkat serta penyimpanan yang dienkripsi dengan kredensial.</p>
+
+<h2 id="access">Mengakses Penyimpanan yang Dienkripsi dengan Perangkat</h2>
+
+<p>Untuk mengakses penyimpanan yang dienkripsi dengan perangkat, buat instance
+{@link android.content.Context} kedua dengan memanggil
+<code>Context.createDeviceProtectedStorageContext()</code>. Semua panggilan
+API penyimpanan yang dibuat menggunakan konteks ini mengakses penyimpanan yang dienkripsi dengan perangkat. Contoh
+berikut mengakses penyimpanan yang dienkripsi dengan perangkat dan membuka file data aplikasi
+yang ada:</p>
+
+<pre>
+Context directBootContext = appContext.createDeviceProtectedStorageContext();
+// Access appDataFilename that lives in device encrypted storage
+FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
+// Use inStream to read content...
+</pre>
+
+<p>Gunakan penyimpanan yang dienkripsi dengan perangkat hanya untuk
+informasi yang harus bisa diakses selama mode Direct Boot.
+Jangan gunakan penyimpanan yang dienkripsi dengan perangkat sebagai penyimpanan terenkripsi serba guna.
+Untuk informasi pengguna yang bersifat pribadi, atau data terenkripsi yang tidak diperlukan selama
+mode Direct Boot, gunakan penyimpanan yang dienkripsi dengan kredensial.</p>
+
+<h2 id="notification">Mendapatkan Pemberitahuan saat Pengguna Membuka Kunci</h2>
+
+<p>Setelah pengguna membuka kunci perangkat setelah restart, aplikasi Anda bisa beralih untuk
+mengakses penyimpanan yang dienkripsi dengan kredensial dan menggunakan layanan sistem biasa yang
+bergantung pada kredensial pengguna.</p>
+
+<p>Agar diberi tahu bila pengguna membuka kunci perangkat setelah boot ulang,
+daftarkan {@link android.content.BroadcastReceiver} dari komponen yang berjalan
+untuk mendengarkan pesan <code>ACTION_USER_UNLOCKED</code>. Atau, Anda bisa
+menerima pesan {@link android.content.Intent#ACTION_BOOT_COMPLETED
+ACTION_BOOT_COMPLETED} yang ada, yang sekarang menunjukkan bahwa perangkat telah dihidupkan dan
+pengguna telah membuka kunci perangkat.</p>
+
+<p>Anda bisa langsung kueri apakah pengguna telah membuka kunci perangkat dengan memanggil
+<code>UserManager.isUserUnlocked()</code>.</p>
+
+<h2 id="migrating">Migrasi Data yang Ada</h2>
+
+<p>Jika pengguna memperbarui perangkat mereka untuk menggunakan mode Direct Boot,
+data Anda yang ada mungkin perlu dipindahkan ke penyimpanan yang dienkripsi dengan perangkat. Gunakan
+<code>Context.moveSharedPreferencesFrom()</code> dan
+<code>Context.moveDatabaseFrom()</code> untuk memindahkan data preferensi dan
+basis data antara penyimpanan yang dienkripsi dengan kredensial dan penyimpanan yang dienkripsi dengan perangkat.</p>
+
+<p>Pertimbangkan dengan baik saat memutuskan data apa yang akan dipindahkan dari
+penyimpanan yang dienkripsi dengan kredensial ke penyimpanan yang dienkripsi dengan perangkat. Anda sebaiknya tidak memindahkan
+informasi pengguna yang bersifat rahasia, seperti kata sandi atau token otorisasi, ke
+penyimpanan yang dienkripsi dengan perangkat. Dalam beberapa skenario, Anda mungkin perlu mengelola
+set data terpisah pada dua tempat penyimpanan yang dienkripsi.</p>
+
+<h2 id="testing">Menguji Aplikasi Peka Enkripsi Anda</h2>
+
+<p>Uji aplikasi peka enkripsi Anda menggunakan mode Direct Boot baru. Ada
+dua cara untuk mengaktifkan Direct Boot.</p>
+
+<p class="caution"><strong>Perhatian:</strong> Mengaktifkan Direct Boot
+akan menghapus semua data pengguna pada perangkat.</p>
+
+<p>Pada perangkat yang didukung dengan Android N terpasang, aktifkan
+Direct Boot dengan melakukan salah satu hal berikut:</p>
+
+<ul>
+<li>Pada perangkat, aktifkan <b>Developer options</b> jika Anda belum melakukannya dengan
+masuk ke <b>Settings > About phone</b>, dan menyentuh <b>Build number</b>
+tujuh kali. Setelah layar Developer options terbuka, masuk ke
+<b>Settings > Developer options</b> dan pilih
+<b>Convert to file encryption</b>.</li>
+<li>Gunakan perintah shell adb berikut untuk mengaktifkan mode Direct Boot:
+<pre class="no-pretty-print">
+$ adb reboot-bootloader
+$ fastboot --wipe-and-use-fbe
+</pre>
+</li>
+</ul>
+
+<p>Mode emulasi Direct Boot juga tersedia, jika Anda perlu mengganti
+mode pada perangkat pengujian. Mode emulasi sebaiknya hanya digunakan selama
+pengembangan dan bisa menyebabkan kehilangan data. Untuk mengaktifkan mode emulasi Direct Boot,
+setel pola kunci pada perangkat, pilih "No thanks" jika ditanya mengenai
+layar start-up aman saat menetapkan pola kunci, kemudian gunakan
+perintah shell adb berikut:</p>
+
+<pre class="no-pretty-print">
+$ adb shell sm set-emulate-fbe true
+</pre>
+
+<p>Untuk menonaktifkan mode emulasi Direct Boot, gunakan perintah berikut:</p>
+
+<pre class="no-pretty-print">
+$ adb shell sm set-emulate-fbe false
+</pre>
+
+<p>Menggunakan perintah ini akan menyebabkan perangkat melakukan boot ulang.</p>
diff --git a/docs/html-intl/intl/id/training/articles/scoped-directory-access.jd b/docs/html-intl/intl/id/training/articles/scoped-directory-access.jd
new file mode 100644
index 0000000..30aed6f
--- /dev/null
+++ b/docs/html-intl/intl/id/training/articles/scoped-directory-access.jd
@@ -0,0 +1,148 @@
+page.title=Scoped Directory Access
+page.keywords=pratinjau,sdk,scoped directory access
+page.tags=androidn
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>Dalam dokumen ini</h2>
+ <ol>
+ <li><a href="#accessing">Mengakses Direktori Penyimpanan Eksternal</a></li>
+ <li><a href="#removable">Mengakses Direktori pada Media Lepas-Pasang</a></li>
+ <li><a href="#best">Praktik Terbaik</a></li>
+ </ol>
+</div>
+</div>
+
+<p>Aplikasi seperti aplikasi foto biasanya hanya memerlukan akses ke direktori tertentu dalam
+penyimpanan eksternal, seperti direktori <code>Pictures</code>. Pendekatan
+yang ada dalam mengakses penyimpanan eksternal tidak didesain untuk memberi kemudahan
+akses direktori tertarget untuk tipe aplikasi ini. Misalnya:</p>
+
+<ul>
+<li>Meminta {@link android.Manifest.permission#READ_EXTERNAL_STORAGE}
+atau {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} dalam manifes Anda
+akan memungkinkan akses ke semua direktori publik pada penyimpanan eksternal, yang mungkin
+lebih banyak akses dari yang dibutuhkan aplikasi Anda.</li>
+<li>Menggunakan
+<a href="{@docRoot}guide/topics/providers/document-provider.html">Storage
+Access Framework</a> biasanya membuat pengguna Anda memilih direktori
+melalui UI sistem, yang tidak diperlukan jika aplikasi Anda selalu mengakses
+direktori eksternal yang sama.</li>
+</ul>
+
+<p>Android N menyediakan API baru yang disederhanakan untuk mengakses
+direktori penyimpanan eksternal umum. </p>
+
+<h2 id="accessing">Mengakses Direktori Penyimpanan Eksternal</h2>
+
+<p>Gunakan kelas <code>StorageManager</code> untuk mendapatkan instance
+<code>StorageVolume</code> yang tepat. Kemudian, buat intent dengan memanggil metode
+<code>StorageVolume.createAccessIntent()</code> dari instance itu.
+Gunakan intent ini untuk mengakses direktori penyimpanan eksternal. Untuk mendapatkan daftar
+semua volume yang tersedia, termasuk volume media lepas-pasang, gunakan
+<code>StorageManager.getVolumesList()</code>.</p>
+
+<p>Jika Anda memiliki informasi tentang file spesifik, gunakan
+<code>StorageManager.getStorageVolume(File)</code> untuk mendapatkan
+<code>StorageVolume</code> yang berisi file tersebut. Panggil
+<code>createAccessIntent()</code> pada <code>StorageVolume</code> ini untuk mengakses
+direktori penyimpanan eksternal untuk file tersebut.</p>
+
+<p>
+Di volume kedua, seperti kartu SD eksternal, teruskan null saat memanggil
+<code>StorageVolume.createAccessIntent()</code> untuk meminta akses ke seluruh
+volume, sebagai ganti direktori spesifik.
+<code>StorageVolume.createAccessIntent()</code> akan mengembalikan null jika Anda meneruskan
+null ke volume utama, atau jika Anda meneruskan nama direktori yang tidak valid.
+</p>
+
+<p>Cuplikan kode berikut adalah contoh cara membuka direktori
+<code>Pictures</code> dalam penyimpanan bersama utama:</p>
+
+<pre>
+StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
+StorageVolume volume = sm.getPrimaryVolume();
+Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+</pre>
+
+<p>Sistem ini mencoba untuk memberikan akses ke direktori eksternal, dan jika
+diperlukan mengonfirmasi akses dengan pengguna menggunakan UI yang disederhanakan:</p>
+
+<img src="{@docRoot}images/android-7.0/scoped-directory-access-framed.png" srcset="{@docRoot}images/android-7.0/scoped-directory-access-framed.png 1x,
+{@docRoot}images/android-7.0/scoped-directory-access-framed_2x.png 2x" />
+<p class="img-caption"><strong>Gambar 1.</strong> Sebuah aplikasi yang meminta
+akses ke direktori Pictures.</p>
+
+<p>Jika pengguna memberi akses, sistem akan memanggil penggantian
+<code>onActivityResult()</code> Anda dengan kode hasil
+<code>Activity.RESULT_OK</code>, dan data intent yang berisi URI. Gunakan
+URI yang disediakan untuk mengakses informasi direktori, serupa dengan menggunakan URI
+yang dikembalikan oleh
+<a href="{@docRoot}guide/topics/providers/document-provider.html">Storage
+Access Framework</a>.</p>
+
+<p>Jika pengguna tidak memberi akses, sistem akan memanggil penggantian
+<code>onActivityResult()</code> Anda dengan kode hasil
+<code>Activity.RESULT_CANCELED</code>, dan data intent nol.</p>
+
+<p class="note"><b>Catatan</b>: Mendapatkan akses ke direktori eksternal tertentu
+juga akan memperoleh akses ke subdirektori dalam direktori tersebut.</p>
+
+<h2 id="removable">Mengakses Direktori pada Media Lepas-Pasang</h2>
+
+<p>Untuk menggunakan Scoped Directory Access guna mengakses direktori pada media lepas-pasang,
+pertama tambahkan {@link android.content.BroadcastReceiver} yang akan mendengarkan pemberitahuan
+{@link android.os.Environment#MEDIA_MOUNTED}, misalnya:</p>
+
+<pre>
+<receiver
+ android:name=".MediaMountedReceiver"
+ android:enabled="true"
+ android:exported="true" >
+ <intent-filter>
+ <action android:name="android.intent.action.MEDIA_MOUNTED" />
+ <data android:scheme="file" />
+ </intent-filter>
+</receiver>
+</pre>
+
+<p>Bila pengguna memasang media lepas-pasang, seperti kartu SD, sistem akan mengirimkan pemberitahuan
+{@link android.os.Environment#MEDIA_MOUNTED}. Pemberitahuan ini
+memberikan sebuah objek <code>StorageVolume</code> dalam data intent yang bisa
+Anda gunakan untuk mengakses direktori pada media lepas-pasang. Contoh berikut
+mengakses direktori <code>Pictures</code> pada media lepas-pasang:</p>
+
+<pre>
+// BroadcastReceiver has already cached the MEDIA_MOUNTED
+// notification Intent in mediaMountedIntent
+StorageVolume volume = (StorageVolume)
+ mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
+volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+</pre>
+
+<h2 id="best">Praktik Terbaik</h2>
+
+<p>Bila memungkinkan, pertahankan URI akses direktori eksternal sehingga Anda tidak perlu
+berulang kali meminta akses ke pengguna. Setelah pengguna memberikan akses, panggil
+<code>getContentResolver().takePersistableUriPermssion()</code> bersama
+URI akses direktori. Sistem akan mempertahankan URI dan permintaan
+akses berikutnya akan mengembalikan <code>RESULT_OK</code> dan tidak menampilkan UI konfirmasi kepada
+pengguna.</p>
+
+<p>Jika pengguna menolak akses ke direktori eksternal, jangan langsung
+meminta akses lagi. Berulang kali meminta akses akan menghasilkan pengalaman
+pengguna yang buruk. Jika permintaan ditolak oleh pengguna, dan aplikasi meminta akses
+lagi, UI akan menampilkan kotak centang <b>Don't ask again</b>:</p>
+
+<img src="{@docRoot}images/android-7.0/scoped-directory-access-dont-ask.png" srcset="{@docRoot}images/android-7.0/scoped-directory-access-dont-ask.png 1x,
+{@docRoot}images/android-7.0/scoped-directory-access-dont-ask_2x.png 2x" />
+<p class="img-caption"><strong>Gambar 1.</strong> Sebuah aplikasi membuat
+permintaan kedua untuk mengakses media lepas-pasang.</p>
+
+<p>Jika pengguna memilih <b>Don't ask again</b> dan menolak permintaan,
+semua permintaan berikutnya untuk direktori yang diberikan dari aplikasi
+Anda secara otomatis akan ditolak, dan tidak ada UI permintaan yang akan ditampilkan ke pengguna.</p>
\ No newline at end of file
diff --git a/docs/html-intl/intl/id/training/articles/security-config.jd b/docs/html-intl/intl/id/training/articles/security-config.jd
new file mode 100644
index 0000000..e13429d
--- /dev/null
+++ b/docs/html-intl/intl/id/training/articles/security-config.jd
@@ -0,0 +1,747 @@
+page.title=Konfigurasi Keamanan Jaringan
+page.keywords=androidn,keamanan,jaringan
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>Dalam dokumen ini</h2>
+<ol>
+ <li><a href="#manifest">Menambahkan File Konfigurasi Keamanan</a></li>
+ <li><a href="#CustomTrust">Menyesuaikan CA Tepercaya</a>
+ <ol>
+ <li><a href="#ConfigCustom">Mengonfigurasi CA Tepercaya Khusus</a></li>
+ <li><a href="#LimitingCas">Membatasi Set CA Tepercaya</a></li>
+ <li><a href="#TrustingAdditionalCas">Mempercayai CA Tambahan</a></li>
+ </ol>
+ </li>
+ <li><a href="#TrustingDebugCa">CA Debug Saja</a></li>
+ <li><a href="#UsesCleartextTraffic">Berhenti dari Lalu Lintas Cleartext</a></li>
+ <li><a href="#CertificatePinning">Menyematkan Sertifikat</a></li>
+ <li><a href="#ConfigInheritance">Perilaku Pewarisan Konfigurasi</a></li>
+ <li><a href="#FileFormat">Format File Konfigurasi</a></li>
+</ol>
+</div>
+</div>
+
+
+<p>
+ Android N menyertakan fitur
+ Network Security Configuration yang memungkinkan aplikasi menyesuaikan setelan keamanan jaringan mereka dalam
+ file konfigurasi deklaratif yang aman tanpa memodifikasi kode aplikasi. Setelan ini bisa
+ dikonfigurasi untuk domain dan aplikasi tertentu. Kemampuan
+ utama fitur ini adalah sebagai berikut:
+</p>
+
+<ul>
+ <li>
+ <b>Trust-anchor khusus:</b> Menyesuaikan Certificate Authorities (CA) mana
+ yang dipercaya untuk koneksi aman aplikasi. Misalnya,
+ mempercayai sertifikat tertentu yang ditandatangani sendiri atau membatasi
+ set CA umum yang dipercaya aplikasi.
+ </li>
+
+ <li>
+ <b>Penggantian hanya-debug:</b> Men-debug secara aman koneksi aman dalam aplikasi
+ tanpa menambahkan risiko pada basis yang telah dipasang.
+ </li>
+
+ <li>
+ <b>Berhenti dari lalu lintas cleartext:</b> Melindungi aplikasi dari
+ penggunaan lalu lintas cleartext secara tidak sengaja.
+ </li>
+
+ <li>
+ <b>Penyematan sertifikat:</b> Membatasi koneksi aman aplikasi ke
+ sertifikat tertentu.
+ </li>
+</ul>
+
+
+<h2 id="manifest">Menambahkan File Konfigurasi Keamanan</h2>
+
+<p>
+ Fitur Network Security Configuration menggunakan file XML tempat Anda menetapkan
+ setelan untuk aplikasi. Anda harus menyertakan sebuah entri dalam manifes aplikasi
+ untuk menunjuk ke file ini. Kutipan kode berikut dari sebuah manifes
+ yang memperagakan cara membuat entri ini:
+</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<manifest ... >
+ <application ... >
+ <meta-data android:name="android.security.net.config"
+ android:resource="@xml/network_security_config" />
+ ...
+ </application>
+</manifest>
+</pre>
+
+<h2 id="CustomTrust">Menyesuaikan CA Tepercaya</h2>
+
+<p>
+ Aplikasi mungkin perlu mempercayai set CA khusus sebagai ganti default
+ platform. Alasannya yang paling umum adalah:
+</p>
+
+<ul>
+ <li>Menghubungkan ke host dengan otoritas sertifikat khusus (ditandatangani sendiri,
+ dikeluarkan oleh CA internal, dll).
+ </li>
+
+ <li>Membatasi set CA hanya untuk CA yang Anda percaya sebagai ganti setiap CA
+ yang sudah terpasang.
+ </li>
+
+ <li>Mempercayai CA tambahan yang tidak disertakan dalam sistem.
+ </li>
+</ul>
+
+<p>
+ Secara default koneksi (mis. TLS, HTTPS) aman dari semua aplikasi mempercayai
+ CA yang telah dipasang oleh sistem, dan aplikasi yang menargetkan API level 23
+ (Android M) ke bawah, juga mempercayai penyimpanan CA yang ditambahkan pengguna secara default. Aplikasi
+ bisa menyesuaikan koneksinya menggunakan {@code base-config} (untuk
+ penyesuaian lebar-aplikasi) atau {@code domain-config} (untuk penyesuaian
+ per-domain).
+</p>
+
+
+<h3 id="ConfigCustom">Mengonfigurasi CA Khusus</h3>
+
+<p>
+ Anggaplah Anda ingin menghubungkan ke host Anda yang menggunakan sertifikat
+ SSL yang ditandatangani sendiri atau ke host yang sertifikat SSL-nya dikeluarkan oleh CA non-publik
+ yang Anda percaya, seperti CA internal perusahaan Anda.
+</p>
+
+<p>
+ <code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/my_ca"/>
+ </trust-anchors>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+<p>
+ Menambahkan sertifikat CA yang ditandatangani sendiri atau sertifikat CA non-publik, dalam format PEM atau DER, ke
+ {@code res/raw/my_ca}.
+</p>
+
+
+<h3 id="LimitingCas">Membatasi Set CA Tepercaya</h3>
+
+<p>
+ Aplikasi yang tidak ingin mempercayai semua CA yang dipercaya oleh sistem
+ sebagai gantinya bisa menetapkan set CA sendiri yang telah dikurangi untuk dipercaya. Ini akan melindungi
+ aplikasi dari sertifikat palsu yang dikeluarkan oleh selain CA.
+</p>
+
+<p>
+ Konfigurasi untuk membatasi set CA tepercaya mirip dengan <a href="#TrustingACustomCa">mempercayai CA khusus</a> untuk domain tertentu selain
+ beberapa CA disediakan dalam sumber daya.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">secure.example.com</domain>
+ <domain includeSubdomains="true">cdn.example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/trusted_roots"/>
+ </trust-anchors>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+<p>
+ Menambahkan CA tepercaya, dalam format PEM atau DER, ke {@code res/raw/trusted_roots}.
+ Perhatikan, jika menggunakan format PEM, file <em>hanya</em> boleh berisi data PEM
+ dan tidak ada teks tambahan. Anda juga bisa menyediakan beberapa elemen
+ <a href="#certificates"><code><certificates></code></a>
+sebagai ganti satu elemen.
+</p>
+
+
+<h3 id="TrustingAdditionalCas">
+ Mempercayai CA Tambahan
+</h3>
+
+<p>
+ Sebuah aplikasi mungkin perlu mempercayai CA tambahan yang tidak dipercaya oleh sistem,
+ hal ini bisa disebabkan karena sistem belum menyertakan CA atau CA tidak
+ memenuhi persyaratan untuk memasukkan ke dalam sistem Android. Aplikasi
+ bisa melakukannya dengan menetapkan beberapa sumber sertifikat untuk
+ konfigurasi.
+</p>
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <base-config>
+ <trust-anchors>
+ <certificates src="@raw/extracas"/>
+ <certificates src="system"/>
+ </trust-anchors>
+ </base-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="TrustingDebugCa">Mengonfigurasi CA untuk Debug</h2>
+
+<p>
+ Saat men-debug aplikasi yang terhubung melalui HTTPS, Anda mungkin perlu
+ menghubungkan ke server pengembangan lokal, yang tidak memiliki sertifikat
+ SSL untuk server produksi Anda. Untuk mendukungnya tanpa
+ memodifikasi kode aplikasi, Anda bisa menetapkan CA hanya-debug
+ yang <i>hanya</i> dipercaya bila <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">
+android:debuggable</a>
+ adalah {@code true} dengan menggunakan {@code debug-overrides}. Biasanya IDE dan alat
+ build menyetel flag ini secara otomatis untuk build non-rilis.
+</p>
+
+<p>
+ Ini lebih aman daripada kode kondisional biasa karena, sebagai tindakan
+ pencegahan keamanan, toko aplikasi tidak menerima aplikasi yang ditandai
+ bisa-di-debug.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <debug-overrides>
+ <trust-anchors>
+ <certificates src="@raw/debug_cas"/>
+ </trust-anchors>
+ </debug-overrides>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="UsesCleartextTraffic">Berhenti dari Lalu Lintas Cleartext</h2>
+
+<p>
+ Aplikasi bermaksud menyambung ke tujuan hanya menggunakan koneksi
+ aman dapat memilih keluar dari dukungan cleartext (menggunakan protokol
+ HTTP yang tidak terenkripsi sebagai ganti HTTPS) ke tujuan tersebut. Opsi ini akan membantu mencegah
+ regresi tidak disengaja dalam aplikasi karena perubahan dalam URL yang disediakan oleh sumber-sumber
+ eksternal seperti server backend.
+ Lihat {@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted
+ NetworkSecurityPolicy.isCleartextTrafficPermitted()} untuk detail selengkapnya.
+</p>
+
+<p>
+ Misalnya, aplikasi mungkin ingin memastikan semua koneksi ke {@code
+ secure.example.com} selalu dilakukan melalui HTTPS untuk melindungi lalu lintas sensitif
+ dari jaringan yang berbahaya.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config usesCleartextTraffic="false">
+ <domain includeSubdomains="true">secure.example.com</domain>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="CertificatePinning">Menyematkan Sertifikat</h2>
+
+<p>
+ Biasanya aplikasi mempercayai semua CA yang telah terpasang. Jika salah satu dari CA ini
+ mengeluarkan sertifikat palsu, aplikasi akan berisiko terkena serangan
+ MiTM. Beberapa aplikasi memilih untuk membatasi set sertifikat yang mereka terima
+ baik dengan membatasi set CA yang mereka percaya atau dengan menyematkan sertifikat.
+</p>
+
+<p>
+ Penyematan sertifikat dilakukan dengan memberikan seperangkat sertifikat dengan hash
+ kunci publik (SubjectPublicKeyInfo pada sertifikat X.509). Rantai
+ sertifikat nanti hanya berlaku jika rantai sertifikat berisi setidaknya salah satu
+ dari kunci publik yang disematkan.
+</p>
+
+<p>
+ Perhatikan, saat menggunakan penyematan sertifikat, Anda harus selalu menyertakan kunci
+ cadangan sehingga jika Anda terpaksa beralih ke kunci baru, atau mengubah CA (saat
+ menyematkan ke sertifikat CA atau perantara CA tersebut), konektivitas
+ aplikasi Anda tidak terpengaruh. Jika tidak, Anda harus mendorong
+ pembaruan ke aplikasi tersebut untuk memulihkan konektivitas.
+</p>
+
+<p>
+ Selain itu dimungkinkan juga menyetel waktu habis masa berlaku untuk pin setelah
+ penyematan tidak dilakukan. Hal ini membantu mencegah masalah konektivitas dalam
+ aplikasi yang belum diperbarui. Akan tetapi, menyetel waktu kedaluwarsa
+ pada pin mungkin akan membuat penyematan bisa diabaikan.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <pin-set expiration="2018-01-01">
+ <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
+ <!-- backup pin -->
+ <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
+ </pin-set>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="ConfigInheritance">Perilaku Pewarisan Konfigurasi</h2>
+
+<p>
+ Nilai yang tidak disetel dalam konfigurasi tertentu akan diwariskan. Perilaku ini memungkinkan konfigurasi
+ yang lebih kompleks sambil menjaga file konfigurasi tetap terbaca.
+</p>
+
+<p>
+ Jika nilai tidak disetel dalam entri tertentu maka nilai dari entri berikutnya yang lebih
+ umum akan digunakan. Nilai yang tidak disetel dalam {@code domain-config} akan
+ diambil dari {@code domain-config} induk, jika tersarang, atau dari {@code
+ base-config} jika tidak. Nilai yang tidak disetel dalam {@code base-config} akan menggunakan
+ nilai default platform.
+</p>
+
+<p>
+ Misalnya pertimbangkan, bila semua koneksi ke subdomain {@code
+ example.com} harus menggunakan set CA khusus. Selain itu, lalu lintas cleartext ke
+ domain ini diizinkan <em>kecuali</em> saat menghubungkan ke {@code
+ secure.example.com}. Dengan menyarangkan konfigurasi untuk {@code
+ secure.example.com} dalam konfigurasi untuk {@code example.com},
+ {@code trust-anchors} tidak perlu digandakan.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/my_ca"/>
+ </trust-anchors>
+ <domain-config cleartextTrafficPermitted="false">
+ <domain includeSubdomains="true">secure.example.com</domain>
+ </domain-config>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="FileFormat">Format File Konfigurasi</h2>
+
+<p>
+ Fitur Network Security Configuration menggunakan format file XML.
+ Struktur keseluruhan file ditampilkan dalam contoh kode berikut:
+</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <base-config>
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ </base-config>
+
+ <domain-config>
+ <domain>android.com</domain>
+ ...
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ <pin-set>
+ <pin digest="...">...</pin>
+ ...
+ </pin-set>
+ </domain-config>
+ ...
+ <debug-overrides>
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ </debug-overrides>
+</network-security-config>
+</pre>
+
+<p>
+ Bagian berikut menjelaskan sintaks dan detail lainnya dari format
+ file.
+</p>
+
+<h3 id="network-security-config">
+ <network-security-config>
+</h3>
+
+<dl class="xml">
+ <dt>
+ bisa berisi:
+ </dt>
+
+ <dd>
+ 0 atau 1 <code><a href="#base-config"><base-config></a></code><br>
+ Sejumlah <code><a href=
+ "#domain-config"><domain-config></a></code><br>
+ 0 atau 1 <code><a href="#debug-overrides"><debug-overrides></a></code>
+ </dd>
+</dl>
+
+<h3 id="base-config">
+ <base-config>
+</h3>
+
+<dl class="xml">
+ <dt>
+ sintaks:
+ </dt>
+</dl>
+
+<pre class="stx">
+<base-config <a href=
+"#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
+ ...
+</base-config>
+</pre>
+<dl class="xml">
+ <dt>
+ bisa berisi:
+ </dt>
+
+ <dd>
+ <code><a href="#trust-anchors"><trust-anchors></a></code>
+ </dd>
+
+ <dt>
+ keterangan:
+ </dt>
+
+ <dd>
+ Konfigurasi default yang digunakan oleh semua koneksi yang tujuannya tidak
+ tercakup oleh <a href="#domain-config"><code>domain-config</code></a>.
+
+<p>
+ Nilai yang tidak disetel akan menggunakan nilai default platform. Konfigurasi
+ default untuk aplikasi yang menargetkan API level 24 ke atas:
+</p>
+
+<pre>
+<base-config usesCleartextTraffic="true">
+ <trust-anchors>
+ <certificates src="system" />
+ </trust-anchors>
+</base-config>
+</pre>
+Konfigurasi default untuk aplikasi yang menargetkan API level 23 ke bawah:
+<pre>
+<base-config usesCleartextTraffic="true">
+ <trust-anchors>
+ <certificates src="system" />
+ <certificates src="user" />
+ </trust-anchors>
+</base-config>
+</pre>
+
+ </dd>
+</dl>
+
+<h3 id="domain-config"><domain-config></h3>
+<dl class="xml">
+<dt>sintaks:</dt>
+<dd>
+<pre class="stx"><domain-config <a href="#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
+ ...
+</domain-config></pre>
+</dd>
+
+<dt>Bisa Berisi:</dt>
+
+<dd>
+1 atau beberapa <code><a href="#domain"><domain></a></code>
+<br/>0 atau 1 <code><a href="#trust-anchors"><trust-anchors></a></code>
+<br/>0 atau 1 <code><a href="#pin-set"><pin-set></code></a>
+<br/>Sejumlah <code><domain-config></code> tersarang</dd>
+
+<dt>Keterangan</dt>
+<dd>Konfigurasi yang digunakan untuk koneksi ke tujuan tertentu seperti didefinisikan oleh elemen {@code domain}.
+
+<p>Perhatikan, jika beberapa elemen {@code domain-config} mencakup suatu tujuan, konfigurasi dengan aturan domain paling spesifik (terpanjang) yang cocok
+akan digunakan.</p></dd>
+</dl>
+
+
+<h3 id="domain"><domain></h3>
+
+<dl class="xml">
+ <dt>
+ sintaks:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<domain includeSubdomains=["true" | "false"]>example.com</domain>
+</pre>
+ </dd>
+
+ <dt>
+ Atribut:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code includeSubdomains}
+ </dt>
+
+ <dd>
+ Jika {@code "true"} maka aturan domain ini akan dicocokkan dengan domain dan semua
+ subdomain, termasuk subdomain dari subdomain, jika tidak peraturan hanya
+ diterapkan pada kecocokan yang persis tepat.
+ </dd>
+ </dl>
+ </dd>
+
+ <dt>
+ Keterangan:
+ </dt>
+</dl>
+
+<h3 id="debug-overrides"><debug-overrides></h3>
+
+<dl class="xml">
+ <dt>
+ sintaks:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<debug-overrides>
+ ...
+</debug-overrides>
+</pre>
+ </dd>
+
+ <dt>
+ Bisa Berisi:
+ </dt>
+
+ <dd>
+ 0 atau 1 <code><a href="#trust-anchors"><trust-anchors></a></code>
+ </dd>
+
+ <dt>
+ Keterangan:
+ </dt>
+
+ <dd>
+ Pengesampingan yang akan diterapkan bila <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
+ adalah {@code "true"} yang biasanya terjadi untuk build non-rilis
+ yang dihasilkan oleh alat IDE dan build. Trust-anchor yang ditetapkan dalam {@code
+ debug-overrides} akan ditambahkan ke semua konfigurasi lainnya dan penyematan
+ sertifikat tidak dilakukan bila rantai sertifikat server menggunakan satu dari
+ trust-anchor hanya-debug ini. Jika <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
+ adalah {@code "false"} maka bagian ini akan diabaikan sepenuhnya.
+ </dd>
+</dl>
+
+<h3 id="trust-anchors"><trust-anchors></h3>
+<dl class="xml">
+ <dt>
+ sintaks:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<trust-anchors>
+...
+</trust-anchors>
+</pre>
+ </dd>
+
+ <dt>
+ Bisa Berisi:
+ </dt>
+
+ <dd>
+ Sejumlah <code><a href="#certificates"><certificates></a></code>
+ </dd>
+
+ <dt>
+ Keterangan:
+ </dt>
+
+ <dd>
+ Set trust-anchor untuk koneksi aman.
+ </dd>
+</dl>
+
+
+<h3 id="certificates"><certificates></h3>
+<dl class="xml">
+<dt>sintaks:</dt>
+<dd><pre class="stx"><certificates src=["system" | "user" | "<i>raw resource</i>"]
+ overridePins=["true" | "false"] />
+</pre></dd>
+<dt>keterangan:</dt>
+<dd>Set sertifikat X.509 untuk elemen {@code trust-anchors}.</dd>
+
+<dt>atribut:</dt>
+<dd><dl class="attr">
+<dt>{@code src}</dt>
+<dd>
+Sumber sertifikat CA, bisa salah satu dari
+<ul>
+ <li>ID sumber daya mentah yang menunjuk ke file berisi sertifikat X.509.
+ Sertifikat harus dikodekan dalam format DER atau PEM. Dalam hal sertifikat
+ PEM, file <em>tidak boleh</em> berisi data tambahan non-PEM seperti
+ komentar.
+ </li>
+
+ <li>{@code "system"} untuk sertifikat CA sistem yang telah terpasang.
+ </li>
+
+ <li>{@code "user"} untuk sertifikat CA yang ditambahkan pengguna.
+ </li>
+</ul>
+</dd>
+
+<dt>{@code overridePins}</dt>
+<dd>
+ <p>
+ Menetapkan apakah CA dari sumber akan mengabaikan penyematan sertifikat. Jika {@code
+ "true"} kemudian rangkaian sertifikat melalui salah satu CA dari
+ sumber ini maka tidak dilakukan penyematan. Hal ini bisa berguna untuk debug CA
+ atau untuk mendukung dengan memungkinkan pengguna melakukan MiTM atas lalu lintas aman aplikasi Anda.
+ </p>
+
+ <p>
+ Default-nya adalah {@code "false"} kecuali jika ditetapkan dalam elemen {@code debug-overrides},
+ dalam hal demikian default-nya adalah {@code "true"}.
+ </p>
+</dd>
+</dl>
+</dd>
+
+
+<h3 id="pin-set"><pin-set></h3>
+
+<dl class="xml">
+ <dt>
+ sintaks:
+ </dt>
+
+ <dd>
+<pre class="stx">
+<pin-set expiration="date">
+...
+</pin-set>
+</pre>
+ </dd>
+
+ <dt>
+ Bisa Berisi:
+ </dt>
+
+ <dd>
+ Sejumlah <code><a href="#pin"><pin></a></code>
+ </dd>
+
+ <dt>
+ Keterangan:
+ </dt>
+
+ <dd>
+ Satu set pin kunci publik. Agar koneksi aman bisa dipercaya, salah satu
+ kunci publik dalam rantai kepercayaan harus berada dalam set pin. Lihat
+ <code><a href="#pin"><pin></a></code> untuk mengetahui format pin.
+ </dd>
+
+ <dt>
+ Atribut:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code expiration}
+ </dt>
+
+ <dd>
+ Tanggal, dalam format {@code yyyy-MM-dd}, pada saat dan setelah pin
+ kedaluwarsa, sehingga menonaktifkan penyematan. Jika atribut tidak disetel maka
+ pin tidak kedaluwarsa.
+ <p>
+ Tanggal kedaluwarsa membantu mencegah masalah konektivitas di aplikasi yang
+ tidak mengambil pembaruan untuk set pin mereka, misalnya karena pengguna
+ menonaktifkan pembaruan aplikasi.
+ </p>
+ </dd>
+ </dl>
+ </dd>
+</dl>
+
+<h3 id="pin"><pin></h3>
+<dl class="xml">
+ <dt>
+ sintaks:
+ </dt>
+
+ <dd>
+<pre class="stx">
+<pin digest=["SHA-256"]>base64 encoded digest of X.509
+ SubjectPublicKeyInfo (SPKI)</pin>
+</pre>
+ </dd>
+
+ <dt>
+ Atribut:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code digest}
+ </dt>
+
+ <dd>
+ Algoritme intisari yang digunakan untuk menghasilkan pin. Saat ini, hanya
+ {@code "SHA-256"} yang didukung.
+ </dd>
+ </dl>
+ </dd>
+</dl>
diff --git a/docs/html-intl/intl/id/training/basics/network-ops/data-saver.jd b/docs/html-intl/intl/id/training/basics/network-ops/data-saver.jd
new file mode 100644
index 0000000..abd4e43
--- /dev/null
+++ b/docs/html-intl/intl/id/training/basics/network-ops/data-saver.jd
@@ -0,0 +1,234 @@
+page.title=Data Saver
+metaDescription=Optimalisasi penggunaan data yang diaktifkan pengguna.
+page.keywords="android N", "data usage", "metered network"
+page.image=images/cards/card-nyc_2x.jpg
+@jd:body
+
+<div id="tb-wrapper">
+ <div id="tb">
+ <h2>
+ Dalam dokumen ini
+ </h2>
+
+ <ol>
+ <li>
+ <a href="#status">Memeriksa Preferensi Data Saver</a>
+ <ol>
+ <li>
+ <a href="#request-whitelist">Meminta izin daftar putih</a>
+ </li>
+ </ol>
+ </li>
+
+ <li>
+ <a href="#monitor-changes">Memantau Perubahan pada Preferensi
+ Data Saver</a>
+ </li>
+
+ <li>
+ <a href="#testing">Menguji dengan Perintah Android Debug Bridge</a>
+ </li>
+ </ol>
+ </div>
+</div>
+
+<p>
+ Selama penggunaan ponsel cerdas, biaya paket data seluler bisa saja
+ melebihi harga perangkat itu sendiri. Di N Developer Preview, pengguna bisa
+ mengaktifkan Data Saver berdasarkan lingkup perangkat untuk menghemat data, baik saat
+ roaming, mendekati akhir siklus penagihan, atau pada paket data prabayar kecil.
+</p>
+
+<p>
+ Bila pengguna mengaktifkan Data Saver di <strong>Settings</strong> dan perangkat
+ berada dalam jaringan berkuota, sistem akan memblokir penggunaan data latar belakang dan memberi tahu
+ aplikasi untuk menghemat penggunaan data latar depan bila memungkinkan. Pengguna bisa
+ memasukkan aplikasi tertentu ke daftar putih untuk memungkinkan penggunaan data berkuota bila Data
+ Saver diaktifkan.
+</p>
+
+<p>
+ N Developer Preview memperluas {@link android.net.ConnectivityManager}
+ API untuk menyediakan cara pada aplikasi untuk <a href="#status">menerima preferensi Data Saver
+ pengguna</a> dan <a href="#monitor-changes">memantau perubahan
+ preferensi</a>. Hal ini dianggap praktik terbaik bagi aplikasi untuk memeriksa apakah
+ pengguna telah mengaktifkan DataSaver dan berusaha membatasi penggunaan data latar depan dan
+ data latar belakang.
+</p>
+
+<h2 id="status">
+ Memeriksa Preferensi Data Saver
+</h2>
+
+<p>
+ Di N Developer Preview, aplikasi bisa menggunakan {@link
+ android.net.ConnectivityManager} API untuk menentukan pembatasan penggunaan data
+ apa yang sedang diterapkan. Metode {@code getRestrictBackgroundStatus()}
+ akan mengembalikan salah satu dari nilai berikut:
+</p>
+
+<dl>
+ <dt>
+ {@code RESTRICT_BACKGROUND_STATUS_DISABLED}
+ </dt>
+
+ <dd>
+ Data Saver dinonaktifkan.
+ </dd>
+
+ <dt>
+ {@code RESTRICT_BACKGROUND_STATUS_ENABLED}
+ </dt>
+
+ <dd>
+ Pengguna telah mengaktifkan Data Saver untuk aplikasi ini. Aplikasi harus berusaha membatasi
+ penggunaan data di latar depan dan dengan halus menangani pembatasan penggunaan
+ data latar belakang.
+ </dd>
+
+ <dt>
+ {@code RESTRICT_BACKGROUND_STATUS_WHITELISTED}
+ </dt>
+
+ <dd>
+ Pengguna telah mengaktifkan Data Saver namun aplikasi telah dimasukkan dalam daftar putih. Aplikasi harus
+ tetap berusaha membatasi penggunaan data latar belakang dan latar depan.
+ </dd>
+</dl>
+
+<p>
+ Hal ini dianggap praktik terbaik untuk membatasi penggunaan data bila perangkat
+ terhubung ke jaringan berkuota, meskipun Data Saver telah dinonaktifkan atau aplikasi
+ telah dimasukkan dalam daftar putih. Kode contoh berikut menggunakan {@link
+ android.net.ConnectivityManager#isActiveNetworkMetered
+ ConnectivityManager.isActiveNetworkMetered()} dan {@code
+ ConnectivityManager.getRestrictBackgroundStatus()} untuk menentukan berapa banyak data
+ yang harus digunakan aplikasi:
+</p>
+
+<pre>
+ConnectivityManager connMgr = (ConnectivityManager)
+ getSystemService(Context.CONNECTIVITY_SERVICE);
+// Checks if the device is on a metered network
+if (connMgr.isActiveNetworkMetered()) {
+ // Checks user’s Data Saver settings.
+ switch (connMgr.getRestrictBackgroundStatus()) {
+ case RESTRICT_BACKGROUND_STATUS_ENABLED:
+ // Background data usage is blocked for this app. Wherever possible,
+ // the app should also use less data in the foreground.
+
+ case RESTRICT_BACKGROUND_STATUS_WHITELISTED:
+ // The app is whitelisted. Wherever possible,
+ // the app should use less data in the foreground and background.
+
+ case RESTRICT_BACKGROUND_STATUS_DISABLED:
+ // Data Saver is disabled. Since the device is connected to a
+ // metered network, the app should use less data wherever possible.
+ }
+} else {
+ // The device is not on a metered network.
+ // Use data as required to perform syncs, downloads, and updates.
+}
+</pre>
+
+<h3 id="request-whitelist">
+ Meminta izin daftar putih
+</h3>
+
+<p>
+ Jika aplikasi Anda perlu menggunakan data di latar belakang, aplikasi bisa meminta izin
+ daftar putih dengan mengirim
+ <code>Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS</code>
+ yang mengandung URI dari nama paket aplikasi Anda: misalnya,
+ <code>package:MY_APP_ID</code>.
+</p>
+
+<p>
+ Mengirim intent dan URI akan membuka aplikasi <strong>Settings</strong> dan
+ menampilkan setelan penggunaan data untuk aplikasi Anda. Pengguna nanti bisa memutuskan apakah akan
+ mengaktifkan data latar belakang untuk aplikasi Anda. Sebelum Anda mengirim intent ini, sebaiknya
+ tanyakan kepada pengguna terlebih dahulu apakah mereka ingin membuka aplikasi
+ <strong>Settings</strong> untuk keperluan mengaktifkan penggunaan
+ data latar belakang.
+</p>
+
+<h2 id="monitor-changes">
+ Memantau Perubahan pada Preferensi Data Saver
+</h2>
+
+<p>
+ Aplikasi bisa memantau perubahan pada preferensi Data Saver dengan membuat {@link
+ android.content.BroadcastReceiver} untuk memantau {@code
+ ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED} dan secara dinamis
+ mendaftarkan penerima pada {@link android.content.Context#registerReceiver
+ Context.registerReceiver()}. Bila menerima siaran ini, aplikasi harus
+ <a href="#status">memeriksa apakah preferensi Data Saver baru memengaruhi
+ izinnya</a> dengan memanggil {@code
+ ConnectivityManager.getRestrictBackgroundStatus()}.
+</p>
+
+<p class="note">
+ <strong>Catatan:</strong> Sistem hanya mengirim siaran ini ke aplikasi yang
+ secara dinamis mendaftar padanya dengan {@link
+ android.content.Context#registerReceiver Context.registerReceiver()}. Aplikasi
+ yang mendaftar untuk menerima siaran ini dalam manifes mereka
+ tidak akan menerimanya.
+</p>
+
+<h2 id="testing">
+ Menguji dengan Perintah Android Debug Bridge
+</h2>
+
+<a href="{@docRoot}tools/help/adb.html">Android Debug Bridge (ADB)</a>
+menyediakan beberapa perintah yang bisa Anda gunakan untuk memeriksa dan
+mengonfigurasi izin jaringan:
+
+<dl>
+ <dt>
+ <code>$ adb shell dumpsys netpolicy</code>
+ </dt>
+
+ <dd>
+ Menghasilkan laporan berisi setelan pembatasan jaringan latar belakang
+ global saat ini, UID paket saat ini di daftar putih, dan izin jaringan
+ untuk paket yang diketahui lainnya.
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy</code>
+ </dt>
+
+ <dd>
+ Menampilkan daftar lengkap dari perintah Network Policy Manager (netpolicy).
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy set restrict-background
+ <boolean></code>
+ </dt>
+
+ <dd>
+ Mengaktifkan atau menonaktifkan mode Data Saver saat meneruskan <code>true</code> atau
+ <code>false</code>, masing-masing.
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy add restrict-background-whitelist
+ <UID></code>
+ </dt>
+
+ <dd>
+ Menambahkan UID paket tertentu ke daftar putih untuk mengizinkan penggunaan data berkuota
+ di latar belakang.
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy remove restrict-background-whitelist
+ <UID></code>
+ </dt>
+
+ <dd>
+ Membuang UID paket tertentu dari daftar putih untuk memblokir
+ penggunaan data berkuota di latar belakang saat Data Saver diaktifkan.
+ </dd>
+</dl>
diff --git a/docs/html-intl/intl/id/training/material/animations.jd b/docs/html-intl/intl/id/training/material/animations.jd
new file mode 100644
index 0000000..e57a03f
--- /dev/null
+++ b/docs/html-intl/intl/id/training/material/animations.jd
@@ -0,0 +1,550 @@
+page.title=Mendefinisikan Animasi Custom
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+<h2>Pelajaran ini mengajarkan Anda cara</h2>
+<ol>
+ <li><a href="#Touch">Menyesuaikan Umpan Balik Sentuh</a></li>
+ <li><a href="#Reveal">Menggunakan Reveal Effect</a></li>
+ <li><a href="#Transitions">Menyesuaikan Transisi Aktivitas</a></li>
+ <li><a href="#ViewState">Menganimasikan Perubahan Status Tampilan</a></li>
+ <li><a href="#AnimVector">Menganimasikan Drawable Vektor</a></li>
+</ol>
+<h2>Anda juga harus membaca</h2>
+<ul>
+ <li><a href="http://www.google.com/design/spec">Spesifikasi desain bahan</a></li>
+ <li><a href="{@docRoot}design/material/index.html">Desain bahan di Android</a></li>
+</ul>
+</div>
+</div>
+
+
+<p>Animasi dalam desain bahan memberi pengguna umpan balik tentang tindakannya dan menyediakan
+kesinambungan visual saat pengguna berinteraksi dengan aplikasi Anda. Tema bahan menyediakan beberapa animasi default
+untuk tombol dan transisi aktivitas, dan Android 5.0 (API level 21) ke atas memungkinkan Anda menyesuaikan
+animasi ini dan membuat yang baru:</p>
+
+<ul>
+<li>Umpan balik sentuh</li>
+<li>Singkap Melingkar</li>
+<li>Transisi aktivitas</li>
+<li>Gerakan melengkung</li>
+<li>Perubahan status tampilan</li>
+</ul>
+
+
+<h2 id="Touch">Menyesuaikan Umpan Balik Sentuh</h2>
+
+<p>Umpan balik sentuh dalam desain bahan menyediakan konfirmasi visual seketika pada
+titik kontak bila pengguna berinteraksi dengan elemen UI. Animasi umpan balik sentuh default
+untuk tombol menggunakan kelas {@link android.graphics.drawable.RippleDrawable} baru, yang bertransisi
+di antara berbagai status dengan efek riak.</p>
+
+<p>Di sebagian besar kasus, Anda harus menerapkan fungsionalitas ini dalam XML tampilan dengan menetapkan
+latar belakang tampilan sebagai:</p>
+
+<ul>
+<li><code>?android:attr/selectableItemBackground</code> untuk riak berbatas.</li>
+<li><code>?android:attr/selectableItemBackgroundBorderless</code> untuk riak yang meluas ke luar
+tampilan. Latar belakang ini akan digambar di atas, dan dibatasi oleh, induk tampilan terdekat dengan
+latar belakang non-null.</li>
+</ul>
+
+<p class="note"><strong>Catatan:</strong> <code>selectableItemBackgroundBorderless</code> adalah
+atribut baru yang diperkenalkan di API level 21.</p>
+
+
+<p>Atau, Anda bisa mendefinisikan {@link android.graphics.drawable.RippleDrawable}
+sebagai sumber daya XML dengan menggunakan elemen <code>ripple</code>.</p>
+
+<p>Anda bisa menetapkan warna ke objek-objek {@link android.graphics.drawable.RippleDrawable}. Untuk mengubah
+warna default umpan balik sentuh, gunakan atribut <code>android:colorControlHighlight</code>
+tema.</p>
+
+<p>Untuk informasi selengkapnya, lihat referensi API bagi kelas {@link
+android.graphics.drawable.RippleDrawable}.</p>
+
+
+<h2 id="Reveal">Menggunakan Reveal Effect</h2>
+
+<p>Animasi singkap memberi pengguna kesinambungan visual saat menampilkan atau menyembunyikan sekelompok
+elemen UI. Metode {@link android.view.ViewAnimationUtils#createCircularReveal
+ViewAnimationUtils.createCircularReveal()} memungkinkan Anda menganimasikan lingkaran terpangkas
+untuk memperlihatkan atau menyembunyikan tampilan.</p>
+
+<p>Untuk memperlihatkan tampilan yang sebelumnya tidak terlihat dengan menggunakan efek ini:</p>
+
+<pre>
+// previously invisible view
+View myView = findViewById(R.id.my_view);
+
+// get the center for the clipping circle
+int cx = (myView.getLeft() + myView.getRight()) / 2;
+int cy = (myView.getTop() + myView.getBottom()) / 2;
+
+// get the final radius for the clipping circle
+int finalRadius = Math.max(myView.getWidth(), myView.getHeight());
+
+// create the animator for this view (the start radius is zero)
+Animator anim =
+ ViewAnimationUtils.createCircularReveal(myView, cx, cy, 0, finalRadius);
+
+// make the view visible and start the animation
+myView.setVisibility(View.VISIBLE);
+anim.start();
+</pre>
+
+<p>Untuk menyembunyikan sebuah tampilan yang sebelumnya terlihat dengan menggunakan efek ini:</p>
+
+<pre>
+// previously visible view
+final View myView = findViewById(R.id.my_view);
+
+// get the center for the clipping circle
+int cx = (myView.getLeft() + myView.getRight()) / 2;
+int cy = (myView.getTop() + myView.getBottom()) / 2;
+
+// get the initial radius for the clipping circle
+int initialRadius = myView.getWidth();
+
+// create the animation (the final radius is zero)
+Animator anim =
+ ViewAnimationUtils.createCircularReveal(myView, cx, cy, initialRadius, 0);
+
+// make the view invisible when the animation is done
+anim.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ super.onAnimationEnd(animation);
+ myView.setVisibility(View.INVISIBLE);
+ }
+});
+
+// start the animation
+anim.start();
+</pre>
+
+
+<h2 id="Transitions">Menyesuaikan Transisi Aktivitas</h2>
+
+<!-- shared transition video -->
+<div style="width:290px;margin-left:35px;float:right">
+ <div class="framed-nexus5-port-span-5">
+ <video class="play-on-hover" autoplay="">
+ <source src="{@docRoot}design/material/videos/ContactsAnim.mp4">
+ <source src="{@docRoot}design/material/videos/ContactsAnim.webm">
+ <source src="{@docRoot}design/material/videos/ContactsAnim.ogv">
+ </video>
+ </div>
+ <div style="font-size:10pt;margin-left:20px;margin-bottom:30px">
+ <p class="img-caption" style="margin-top:3px;margin-bottom:10px"><strong>Gambar 1</strong> - Transisi
+ dengan elemen bersama.</p>
+ <em>Untuk memutar ulang film, klik layar perangkat</em>
+ </div>
+</div>
+
+<p>Transisi aktivitas dalam aplikasi desain bahan memberikan koneksi visual antar berbagai status
+melalui gerakan dan transformasi di antara elemen umum. Anda bisa menetapkan animasi custom untuk
+masuk ke dan keluar dari transisi dan untuk transisi elemen bersama di antara aktivitas.</p>
+
+<ul>
+<li>Transisi <strong>masuk</strong> menentukan cara tampilan di aktivitas memasuki suatu babak.
+misalnya, dalam transisi masuk <em>explode</em>, tampilan memasuki babak dari sisi luar
+dan melayang masuk ke arah tengah layar.</li>
+
+<li>Transisi <strong>keluar</strong> menentukan cara tampilan di aktivitas keluar dari suatu babak. Misalnya
+, dalam transisi keluar <em>explode</em>, tampilan akan keluar dari babak dari bagian
+tengahnya.</li>
+
+<li>Transisi <strong>elemen bersama</strong> menentukan cara menggunakan bersama suatu tampilan
+oleh dua transisi aktivitas di antara aktivitas-aktivitas ini. Misalnya, jika dua aktivitas memiliki
+gambar yang sama dengan posisi dan ukuran berbeda, transisi elemen bersama <em>changeImageTransform</em>
+mentransformasikan dan menskalakan gambar secara mulus di antara aktivitas-aktivitas ini.</li>
+</ul>
+
+<p>Android 5.0 (API level 21) mendukung transisi masuk dan transisi keluar ini:</p>
+
+<ul>
+<li><em>explode</em> - Memindahkan tampilan masuk ke atau keluar dari tengah babak.</li>
+<li><em>slide</em> - Memindahkan tampilan masuk ke atau keluar dari salah satu tepi babak.</li>
+<li><em>fade</em> - Menambahkan atau menghapus tampilan dari babak dengan mengubah opasitasnya.</li>
+</ul>
+
+<p>Transisi apa pun yang memperluas kelas {@link android.transition.Visibility} didukung
+sebagai transisi masuk atau transisi keluar. Untuk informasi selengkapnya, lihat referensi API untuk kelas
+{@link android.transition.Transition}.</p>
+
+<p>Android 5.0 (API level 21) juga mendukung transisi elemen bersama ini:</p>
+
+<ul>
+<li><em>changeBounds</em> - Menganimasikan perubahan pada batas-batas layout tampilan target.</li>
+<li><em>changeClipBounds</em> - Menganimasikan perubahan pada batas-batas pemangkasan tampilan target.</li>
+<li><em>changeTransform</em> - Menganimasikan perubahan pada skala dan rotasi tampilan target.</li>
+<li><em>changeImageTransform</em> - Menganimasikan perubahan pada ukuran dan skala gambar target.</li>
+</ul>
+
+<p>Bila Anda mengaktifkan transisi aktivitas dalam aplikasi, transisi memudar-silang default akan
+diaktifkan di antara aktivitas masuk dan aktivitas keluar.</p>
+
+<img src="{@docRoot}training/material/images/SceneTransition.png" alt="" width="600" height="405" style="margin-top:20px" />
+<p class="img-caption">
+ <strong>Gambar 2</strong> - Transisi babak dengan satu elemen bersama.
+</p>
+
+<h3>Menetapkan transisi custom</h3>
+
+<p>Pertama, aktifkan transisi konten jendela dengan atribut <code>android:windowContentTransitions</code>
+bila Anda mendefinisikan gaya yang mewarisi tema bahan. Anda juga bisa menetapkan
+transisi-transisi masuk, keluar, dan elemen bersama dalam definisi gaya:</p>
+
+<pre>
+<style name="BaseAppTheme" parent="android:Theme.Material">
+ <!-- enable window content transitions -->
+ <item name="android:windowContentTransitions">true</item>
+
+ <!-- specify enter and exit transitions -->
+ <item name="android:windowEnterTransition">@transition/explode</item>
+ <item name="android:windowExitTransition">@transition/explode</item>
+
+ <!-- specify shared element transitions -->
+ <item name="android:windowSharedElementEnterTransition">
+ @transition/change_image_transform</item>
+ <item name="android:windowSharedElementExitTransition">
+ @transition/change_image_transform</item>
+</style>
+</pre>
+
+<p>Transisi <code>change_image_transform</code> dalam contoh ini didefinisikan sebagai berikut:</p>
+
+<pre>
+<!-- res/transition/change_image_transform.xml -->
+<!-- (see also Shared Transitions below) -->
+<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
+ <changeImageTransform/>
+</transitionSet>
+</pre>
+
+<p>Elemen <code>changeImageTransform</code> menunjukkan
+kelas {@link android.transition.ChangeImageTransform}. Untuk informasi selengkapnya, lihat referensi
+API untuk {@link android.transition.Transition}.</p>
+
+<p>Sebaliknya, untuk mengaktifkan transisi konten jendela dalam kode Anda, panggil
+metode {@link android.view.Window#requestFeature Window.requestFeature()}:</p>
+
+<pre>
+// inside your activity (if you did not enable transitions in your theme)
+getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
+
+// set an exit transition
+getWindow().setExitTransition(new Explode());
+</pre>
+
+<p>Untuk menetapkan transisi dalam kode Anda, panggil metode-metode ini dengan objek {@link
+android.transition.Transition}:</p>
+
+<ul>
+ <li>{@link android.view.Window#setEnterTransition Window.setEnterTransition()}</li>
+ <li>{@link android.view.Window#setExitTransition Window.setExitTransition()}</li>
+ <li>{@link android.view.Window#setSharedElementEnterTransition
+ Window.setSharedElementEnterTransition()}</li>
+ <li>{@link android.view.Window#setSharedElementExitTransition
+ Window.setSharedElementExitTransition()}</li>
+</ul>
+
+<p>Metode {@link android.view.Window#setExitTransition setExitTransition()} dan {@link
+android.view.Window#setSharedElementExitTransition setSharedElementExitTransition()} mendefinisikan
+transisi keluar untuk aktivitas yang memanggil. Metode {@link android.view.Window#setEnterTransition
+setEnterTransition()} dan {@link android.view.Window#setSharedElementEnterTransition
+setSharedElementEnterTransition()} mendefinisikan transisi masuk untuk aktivitas yang dipanggil.</p>
+
+<p>Untuk mendapatkan efek penuh sebuah transisi, Anda harus mengaktifkan transisi konten jendela pada
+aktivitas yang memanggil maupun aktivitas yang dipanggil. Jika tidak, aktivitas yang memanggil akan memulai transisi keluar,
+namun kemudian Anda akan melihat transisi jendela (seperti mengelupas atau memudar).</p>
+
+<p>Untuk memulai transisi masuk sesegera mungkin, gunakan metode
+{@link android.view.Window#setAllowEnterTransitionOverlap Window.setAllowEnterTransitionOverlap()}
+pada aktivitas yang dipanggil. Ini memungkinkan Anda mendapatkan transisi masuk yang lebih dramatis.</p>
+
+<h3>Memulai aktivitas dengan menggunakan transisi</h3>
+
+<p>Jika Anda mengaktifkan transisi dan mengatur transisi keluar untuk aktivitas, transisi itu akan diaktifkan
+bila Anda menjalankan aktivitas lain sebagai berikut:</p>
+
+<pre>
+startActivity(intent,
+ ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
+</pre>
+
+<p>Jika Anda telah mengatur transisi masuk untuk aktivitas kedua, transisi juga akan diaktifkan
+bila aktivitas dimulai. Untuk menonaktifkan transisi bila Anda memulai aktivitas lain, sediakan
+bundel opsi <code>null</code>.</p>
+
+<h3>Memulai aktivitas dengan satu elemen bersama</h3>
+
+<p>Untuk membuat animasi transisi layar di antara dua aktivitas yang memiliki satu elemen bersama:</p>
+
+<ol>
+<li>Aktifkan transisi konten jendela dalam tema Anda.</li>
+<li>Tetapkan transisi elemen bersama dalam gaya Anda.</li>
+<li>Definisikan transisi Anda sebagai sumber daya XML.</li>
+<li>Tetapkan nama umum pada elemen bersama dalam kedua layout dengan
+ atribut <code>android:transitionName</code>.</li>
+<li>Gunakan metode {@link android.app.ActivityOptions#makeSceneTransitionAnimation
+ActivityOptions.makeSceneTransitionAnimation()}.</li>
+</ol>
+
+<pre>
+// get the element that receives the click event
+final View imgContainerView = findViewById(R.id.img_container);
+
+// get the common element for the transition in this activity
+final View androidRobotView = findViewById(R.id.image_small);
+
+// define a click listener
+imgContainerView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ Intent intent = new Intent(this, Activity2.class);
+ // create the transition animation - the images in the layouts
+ // of both activities are defined with android:transitionName="robot"
+ ActivityOptions options = ActivityOptions
+ .makeSceneTransitionAnimation(this, androidRobotView, "robot");
+ // start the new activity
+ startActivity(intent, options.toBundle());
+ }
+});
+</pre>
+
+<p>Untuk tampilan dinamis bersama yang Anda hasilkan dalam kode, gunakan
+metode {@link android.view.View#setTransitionName View.setTransitionName()} untuk menetapkan
+nama elemen umum di kedua aktivitas.</p>
+
+<p>Untuk membalik animasi transisi babak bila Anda menyelesaikan aktivitas kedua, panggil metode
+{@link android.app.Activity#finishAfterTransition Activity.finishAfterTransition()}
+sebagai ganti {@link android.app.Activity#finish Activity.finish()}.</p>
+
+<h3>Memulai aktivitas dengan beberapa elemen bersama</h3>
+
+<p>Untuk membuat animasi transisi babak antara dua aktivitas yang memiliki lebih dari satu
+elemen bersama, definisikan elemen bersama di kedua layout dengan atribut <code>android:transitionName</code>
+ (atau gunakan metode {@link android.view.View#setTransitionName View.setTransitionName()}
+di kedua aktivitas), dan buat sebuah objek {@link android.app.ActivityOptions} sebagai berikut:</p>
+
+<pre>
+ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this,
+ Pair.create(view1, "agreedName1"),
+ Pair.create(view2, "agreedName2"));
+</pre>
+
+
+<h2 id="CurvedMotion">Menggunakan Gerakan Melengkung</h2>
+
+<p>Animasi dalam desain bahan mengandalkan kurva untuk pola interpolasi waktu dan
+gerakan spasial. Dengan Android 5.0 (API level 21) ke atas, Anda bisa mendefinisikan kurva pewaktuan custom dan
+pola gerakan melengkung untuk animasi.</p>
+
+<p>Kelas {@link android.view.animation.PathInterpolator} adalah interpolator baru berdasarkan sebuah
+kurva Bézier atau objek {@link android.graphics.Path}. Interpolator ini menetapkan kurva gerakan
+dalam bujur sangkar 1x1, dengan titik-titik jangkar di (0,0) dan (1,1) dan titik-titik kontrol sebagaimana ditetapkan menggunakan
+argumen konstruktor. Anda juga bisa mendefinisikan interpolator path sebagai sumber daya XML:</p>
+
+<pre>
+<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
+ android:controlX1="0.4"
+ android:controlY1="0"
+ android:controlX2="1"
+ android:controlY2="1"/>
+</pre>
+
+<p>Sistem menyediakan sumber daya XML untuk tiga kurva dasar dalam
+spesifikasi desain bahan:</p>
+
+<ul>
+ <li><code>@interpolator/fast_out_linear_in.xml</code></li>
+ <li><code>@interpolator/fast_out_slow_in.xml</code></li>
+ <li><code>@interpolator/linear_out_slow_in.xml</code></li>
+</ul>
+
+<p>Anda bisa meneruskan objek {@link android.view.animation.PathInterpolator} ke metode {@link
+android.animation.Animator#setInterpolator Animator.setInterpolator()}.</p>
+
+<p>Kelas {@link android.animation.ObjectAnimator} memiliki konstruktor-konstruktor baru yang memungkinkan Anda menganimasikan
+koordinat bersama sebuah path dengan menggunakan dua atau beberapa properti sekaligus. Misalnya, animator berikut
+menggunakan objek {@link android.graphics.Path} untuk menganimasikan properti X dan Y sebuah tampilan:</p>
+
+<pre>
+ObjectAnimator mAnimator;
+mAnimator = ObjectAnimator.ofFloat(view, View.X, View.Y, path);
+...
+mAnimator.start();
+</pre>
+
+
+<h2 id="ViewState">Menganimasikan Perubahan Status Tampilan</h2>
+
+<p>Kelas {@link android.animation.StateListAnimator} memungkinkan Anda mendefinisikan animator yang berjalan bila
+status tampilan berubah. Contoh berikut menampilkan cara mendefinisikan {@link
+android.animation.StateListAnimator} sebagai sumber daya XML:</p>
+
+<pre>
+<!-- animate the translationZ property of a view when pressed -->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_pressed="true">
+ <set>
+ <objectAnimator android:propertyName="translationZ"
+ android:duration="@android:integer/config_shortAnimTime"
+ android:valueTo="2dp"
+ android:valueType="floatType"/>
+ <!-- you could have other objectAnimator elements
+ here for "x" and "y", or other properties -->
+ </set>
+ </item>
+ <item android:state_enabled="true"
+ android:state_pressed="false"
+ android:state_focused="true">
+ <set>
+ <objectAnimator android:propertyName="translationZ"
+ android:duration="100"
+ android:valueTo="0"
+ android:valueType="floatType"/>
+ </set>
+ </item>
+</selector>
+</pre>
+
+<p>Untuk menyertakan animasi status tampilan custom ke tampilan, definisikan animator menggunakan
+elemen <code>selector</code> dalam sumber daya file XML sebagaimana dalam contoh ini, dan tetapkan ke
+tampilan Anda dengan atribut <code>android:stateListAnimator</code>. Untuk menetapkan animator daftar status
+ke sebuah tampilan dalam kode Anda, gunakan metode {@link android.animation.AnimatorInflater#loadStateListAnimator
+AnimationInflater.loadStateListAnimator()}, dan tetapkan animator ke tampilan dengan
+metode {@link android.view.View#setStateListAnimator View.setStateListAnimator()}.</p>
+
+<p>Bila tema Anda memperluas tema bahan, tombol-tombol akan memiliki animasi Z secara default. Untuk menghindari
+perilaku ini di tombol Anda, aturlah atribut <code>android:stateListAnimator</code> ke
+<code>@null</code>.</p>
+
+<p>Kelas {@link android.graphics.drawable.AnimatedStateListDrawable} memungkinkan Anda membuat drawable
+yang menampilkan animasi di antara perubahan status tampilan terkait. Sebagian widget sistem di
+Android 5.0 menggunakan animasi ini secara default. Contoh berikut menampilkan cara
+mendefinisikan {@link android.graphics.drawable.AnimatedStateListDrawable} sebagai sumber daya XML:</p>
+
+<pre>
+<!-- res/drawable/myanimstatedrawable.xml -->
+<animated-selector
+ xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <!-- provide a different drawable for each state-->
+ <item android:id="@+id/pressed" android:drawable="@drawable/drawableP"
+ android:state_pressed="true"/>
+ <item android:id="@+id/focused" android:drawable="@drawable/drawableF"
+ android:state_focused="true"/>
+ <item android:id="@id/default"
+ android:drawable="@drawable/drawableD"/>
+
+ <!-- specify a transition -->
+ <transition android:fromId="@+id/default" android:toId="@+id/pressed">
+ <animation-list>
+ <item android:duration="15" android:drawable="@drawable/dt1"/>
+ <item android:duration="15" android:drawable="@drawable/dt2"/>
+ ...
+ </animation-list>
+ </transition>
+ ...
+</animated-selector>
+</pre>
+
+
+<h2 id="AnimVector">Menganimasikan Drawable Vektor</h2>
+
+<p><a href="{@docRoot}training/material/drawables.html#VectorDrawables">Drawable Vektor </a>
+bisa diubah skalanya tanpa kehilangan definisi. Kelas {@link android.graphics.drawable.AnimatedVectorDrawable}
+memungkinkan Anda menganimasikan properti drawable vektor.</p>
+
+<p>Anda biasanya mendefinisikan drawable vektor yang dianimasikan dalam tiga file XML:</p>
+
+<ul>
+<li>Drawable vektor dengan elemen <code><vector></code> dalam
+<code>res/drawable/</code></li>
+<li>Drawable vektor animasi dengan elemen <code><animated-vector></code> dalam
+<code>res/drawable/</code></li>
+<li>Satu atau beberapa animator objek dengan elemen <code><objectAnimator></code> dalam
+<code>res/anim/</code></li>
+</ul>
+
+<p>Drawable vektor yang dianimasikan bisa menganimasikan atribut elemen <code><group></code> dan
+<code><path></code>. Elemen <code><group></code> mendefinisikan satu set
+path atau subgrup, dan elemen <code><path></code> mendefinisikan path yang harus digambar.</p>
+
+<p>Bila Anda mendefinisikan drawable vektor yang ingin dianimasikan, gunakan atribut <code>android:name</code>
+untuk menetapkan nama unik ke grup dan path, sehingga Anda bisa merujuknya dari
+definisi animator Anda. Misalnya:</p>
+
+<pre>
+<!-- res/drawable/vectordrawable.xml -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:height="64dp"
+ android:width="64dp"
+ android:viewportHeight="600"
+ android:viewportWidth="600">
+ <group
+ <strong>android:name="rotationGroup"</strong>
+ android:pivotX="300.0"
+ android:pivotY="300.0"
+ android:rotation="45.0" >
+ <path
+ <strong>android:name="v"</strong>
+ android:fillColor="#000000"
+ android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" />
+ </group>
+</vector>
+</pre>
+
+<p>Definisi drawable vektor yang dianimasikan merujuk pada grup dan path dalam drawable vektor
+berdasarkan namanya:</p>
+
+<pre>
+<!-- res/drawable/animvectordrawable.xml -->
+<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:drawable="@drawable/vectordrawable" >
+ <target
+ android:name="rotationGroup"
+ android:animation="@anim/rotation" />
+ <target
+ android:name="v"
+ android:animation="@anim/path_morph" />
+</animated-vector>
+</pre>
+
+<p>Definisi animasi menyatakan objek {@link android.animation.ObjectAnimator} atau {@link
+android.animation.AnimatorSet}. Animator pertama dalam contoh ini memutar
+grup target sebanyak 360 derajat:</p>
+
+<pre>
+<!-- res/anim/rotation.xml -->
+<objectAnimator
+ android:duration="6000"
+ android:propertyName="rotation"
+ android:valueFrom="0"
+ android:valueTo="360" />
+</pre>
+
+<p>Animator kedua dalam contoh ini perlahan-lahan mengubah bentuk path drawable vektor dari satu bentuk ke
+bentuk yang lain. Kedua path harus kompatibel untuk morphing: keduanya harus memiliki jumlah perintah yang sama
+dan jumlah parameter yang sama untuk setiap perintah.</p>
+
+<pre>
+<!-- res/anim/path_morph.xml -->
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+ <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>
+</pre>
+
+<p>Untuk informasi selengkapnya, lihat referensi API bagi {@link
+android.graphics.drawable.AnimatedVectorDrawable}.</p>
diff --git a/docs/html-intl/intl/id/training/material/compatibility.jd b/docs/html-intl/intl/id/training/material/compatibility.jd
new file mode 100644
index 0000000..ef444c3
--- /dev/null
+++ b/docs/html-intl/intl/id/training/material/compatibility.jd
@@ -0,0 +1,168 @@
+page.title=Mempertahankan Kompatibilitas
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+<h2>Pelajaran ini mengajarkan Anda cara</h2>
+<ol>
+ <li><a href="#Theme">Mendefinisikan Gaya Alternatif</a></li>
+ <li><a href="#Layouts">Menyediakan Layout Alternatif</a></li>
+ <li><a href="#SupportLib">Menggunakan Support Library</a></li>
+ <li><a href="#CheckVersion">Memeriksa Versi Sistem</a></li>
+</ol>
+<h2>Anda juga harus membaca</h2>
+<ul>
+ <li><a href="http://www.google.com/design/spec">Spesifikasi desain bahan</a></li>
+ <li><a href="{@docRoot}design/material/index.html">Desain bahan di Android</a></li>
+</ul>
+</div>
+</div>
+
+
+<p>Sebagian fitur desain bahan seperti tema bahan dan transisi aktivitas custom
+hanya tersedia pada Android 5.0 (API level 21) ke atas. Akan tetapi, Anda bisa mendesain aplikasi untuk menggunakan
+fitur-fitur ini saat dijalankan pada perangkat yang mendukung desain bahan dan tetap kompatibel
+dengan perangkat yang menjalankan rilis Android sebelumnya.</p>
+
+
+<h2 id="Theme">Mendefinisikan Gaya Alternatif</h2>
+
+<p>Anda bisa mengonfigurasi aplikasi untuk menggunakan tema bahan pada perangkat yang mendukungnya dan mengembalikan
+ke tema lama pada perangkat yang menjalankan versi Android terdahulu:</p>
+
+<ol>
+<li>Definisikan tema yang mewarisi tema lama (seperti Holo) di
+ <code>res/values/styles.xml</code>.</li>
+<li>Definisikan tema bernama sama yang mewarisi tema bahan di
+ <code>res/values-v21/styles.xml</code>.</li>
+<li>Atur tema ini sebagai tema aplikasi Anda dalam file manifes.</li>
+</ol>
+
+<p class="note"><strong>Catatan:</strong>
+Jika aplikasi Anda menggunakan tema bahan namun tidak menyediakan tema alternatif dengan cara ini,
+aplikasi itu tidak akan berjalan pada versi Android sebelum 5.0.
+</p>
+
+
+<h2 id="Layouts">Menyediakan Layout Alternatif</h2>
+
+<p>Jika layout yang Anda desain sesuai dengan panduan desain bahan tidak menggunakan salah satu
+atribut XML baru yang diperkenalkan di Android 5.0 (API level 21), layout itu akan berfungsi pada
+versi Android sebelumnya. Jika tidak, Anda bisa menyediakan layout alternatif. Anda juga bisa menyediakan
+layout alternatif untuk menyesuaikan cara aplikasi ditampilkan pada versi Android terdahulu.</p>
+
+<p>Buatlah file layout untuk Android 5.0 (API level 21) dalam <code>res/layout-v21/</code> dan
+file layout alternatif untuk versi Android terdahulu dalam <code>res/layout/</code>.
+Misalnya, <code>res/layout/my_activity.xml</code> adalah layout alternatif untuk
+<code>res/layout-v21/my_activity.xml</code>.</p>
+
+<p>Untuk menghindari duplikasi kode, definisikan gaya dalam <code>res/values/</code>, modifikasi
+gaya di <code>res/values-v21/</code> untuk API baru, dan gunakan pewarisan gaya, dengan mendefinisikan
+gaya dasar di <code>res/values/</code> dan mewarisi gaya di <code>res/values-v21/</code>.</p>
+
+
+<h2 id="SupportLib">Menggunakan Support Library</h2>
+
+<p><a href="{@docRoot}tools/support-library/features.html#v7">v7 Support Library</a>
+r21 ke atas menyertakan fitur desain bahan berikut:</p>
+
+<ul>
+<li><a href="{@docRoot}training/material/theme.html">Gaya desain bahan</a> untuk beberapa widget sistem
+ bila Anda menerapkan salah satu tema <code>Theme.AppCompat</code>.</li>
+<li><a href="{@docRoot}training/material/theme.html#ColorPalette">Atribut tema palet warna</a>
+ dalam tema <code>Theme.AppCompat</code>.</li>
+<li>Widget {@link android.support.v7.widget.RecyclerView} untuk <a href="{@docRoot}training/material/lists-cards.html#RecyclerView">
+menampilkan kumpulan data.</a></li>
+<li>Widget {@link android.support.v7.widget.CardView} untuk <a href="{@docRoot}training/material/lists-cards.html#CardView">membuat kartu</a>.</li>
+<li>Kelas {@link android.support.v7.graphics.Palette} untuk <a href="{@docRoot}training/material/drawables.html#ColorExtract">mengekstrak warna mencolok dari
+ gambar</a>.</li>
+</ul>
+
+<h3>Widget sistem</h3>
+
+<p>Tema-tema <code>Theme.AppCompat</code> menyediakan gaya desain bahan untuk widget ini:</p>
+
+<ul>
+ <li>{@link android.widget.EditText}</li>
+ <li>{@link android.widget.Spinner}</li>
+ <li>{@link android.widget.CheckBox}</li>
+ <li>{@link android.widget.RadioButton}</li>
+ <li>{@link android.support.v7.widget.SwitchCompat}</li>
+ <li>{@link android.widget.CheckedTextView}</li>
+</ul>
+
+<h3>Palet Warna</h3>
+
+<p>Untuk memperoleh gaya desain bahan dan menyesuaikan palet warna dengan Android v7 Support
+Library, terapkan salah satu tema <code>Theme.AppCompat</code>:</p>
+
+<pre>
+<!-- extend one of the Theme.AppCompat themes -->
+<style name="Theme.MyTheme" parent="Theme.AppCompat.Light">
+ <!-- customize the color palette -->
+ <item name="colorPrimary">@color/material_blue_500</item>
+ <item name="colorPrimaryDark">@color/material_blue_700</item>
+ <item name="colorAccent">@color/material_green_A200</item>
+</style>
+</pre>
+
+<h3>Daftar dan Kartu</h3>
+
+<p>Widget {@link android.support.v7.widget.RecyclerView} dan {@link
+android.support.v7.widget.CardView} tersedia di versi Android terdahulu melalui
+Android v7 Support Library dengan pembatasan ini:</p>
+<ul>
+<li>{@link android.support.v7.widget.CardView} memundurkan ke implementasi bayangan terprogram
+ dengan menggunakan pengisi tambahan.</li>
+<li>{@link android.support.v7.widget.CardView} tidak memangkas tampilan anaknya yang berpotongan
+ dengan sudut melengkung.</li>
+</ul>
+
+
+<h3>Dependensi</h3>
+
+<p>Untuk menggunakan fitur-fitur ini di versi Android sebelum 5.0 (API level 21), sertakan
+Android v7 Support Library dalam proyek Anda sebagai <a href="{@docRoot}sdk/installing/studio-build.html#dependencies">dependensi Gradle</a>:</p>
+
+<pre>
+dependencies {
+ compile 'com.android.support:appcompat-v7:21.0.+'
+ compile 'com.android.support:cardview-v7:21.0.+'
+ compile 'com.android.support:recyclerview-v7:21.0.+'
+}
+</pre>
+
+
+<h2 id="CheckVersion">Memeriksa Versi Sistem</h2>
+
+<p>Fitur berikut hanya tersedia di Android 5.0 (API level 21) ke atas:</p>
+
+<ul>
+<li>Transisi aktivitas</li>
+<li>Umpan balik sentuh</li>
+<li>Animasi membuka</li>
+<li>Animasi berbasis path</li>
+<li>Drawable vektor</li>
+<li>Pewarnaan drawable</li>
+</ul>
+
+<p>Untuk menjaga kompatibilitas dengan versi Android terdahulu, periksa {@link
+android.os.Build.VERSION#SDK_INT version} sistem saat runtime sebelum Anda memanggil API untuk salah satu
+fitur ini:</p>
+
+<pre>
+// Check if we're running on Android 5.0 or higher
+if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ // Call some material design APIs here
+} else {
+ // Implement this feature without material design
+}
+</pre>
+
+<p class="note"><strong>Catatan:</strong> Untuk menetapkan versi Android yang didukung aplikasi Anda,
+gunakan atribut <code>android:minSdkVersion</code> dan <code>android:targetSdkVersion</code>
+dalam file manifes. Untuk menggunakan fitur desain bahan di Android 5.0, atur
+atribut <code>android:targetSdkVersion</code> ke <code>21</code>. Untuk informasi selengkapnya, lihat
+panduan <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">API
+<uses-sdk></a>.</p>
diff --git a/docs/html-intl/intl/id/training/material/drawables.jd b/docs/html-intl/intl/id/training/material/drawables.jd
new file mode 100644
index 0000000..493abd4
--- /dev/null
+++ b/docs/html-intl/intl/id/training/material/drawables.jd
@@ -0,0 +1,126 @@
+page.title=Bekerja dengan Drawable
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+<h2>Pelajaran ini mengajarkan Anda cara</h2>
+<ol>
+ <li><a href="#DrawableTint">Mewarnai Sumber Daya Drawable</a></li>
+ <li><a href="#ColorExtract">Mengekstrak Warna Mencolok dari Gambar</a></li>
+ <li><a href="#VectorDrawables">Membuat Drawable Vektor</a></li>
+</ol>
+<h2>Anda juga harus membaca</h2>
+<ul>
+ <li><a href="http://www.google.com/design/spec">Spesifikasi desain bahan</a></li>
+ <li><a href="{@docRoot}design/material/index.html">Desain bahan di Android</a></li>
+</ul>
+</div>
+</div>
+
+<p>Kemampuan berikut untuk drawable membantu Anda mengimplementasikan desain bahan dalam aplikasi Anda:</p>
+
+<ul>
+<li>Pewarnaan drawable</li>
+<li>Ekstraksi warna mencolok</li>
+<li>Drawable vektor</li>
+</ul>
+
+<p>Pelajaran ini menampilkan cara menggunakan fitur-fitur ini dalam aplikasi Anda.</p>
+
+
+<h2 id="DrawableTint">Mewarnai Sumber Daya Drawable</h2>
+
+<p>Dengan Android 5.0 (API level 21) ke atas, Anda bisa mewarnai bitmap dan sembilan-tambalan yang didefinisikan sebagai
+alpha-mask. Anda bisa mewarnainya dengan sumber daya warna atau atribut tema yang mencocokkan ke
+sumber daya warna (misalnya, <code>?android:attr/colorPrimary</code>). Biasanya, Anda membuat aset ini
+hanya sekali dan mewarnainya secara otomatis agar cocok dengan tema Anda.</p>
+
+<p>Anda bisa menerapkan warna ke objek {@link android.graphics.drawable.BitmapDrawable} atau {@link
+android.graphics.drawable.NinePatchDrawable} dengan metode {@code setTint()}. Anda juga bisa
+mengatur warna dan mode dalam layout dengan atribut <code>android:tint</code> dan
+<code>android:tintMode</code>.</p>
+
+
+<h2 id="ColorExtract">Mengekstrak Warna Mencolok dari Gambar</h2>
+
+<p>Android Support Library r21 ke atas menyertakan kelas {@link
+android.support.v7.graphics.Palette}, yang memungkinkan Anda mengekstrak warna mencolok dari gambar.
+Kelas ini mengekstrak warna mencolok berikut:</p>
+
+<ul>
+<li>Menyala</li>
+<li>Menyala pekat</li>
+<li>Menyala pucat</li>
+<li>Pudar</li>
+<li>Pudar pekat</li>
+<li>Pudar pucat</li>
+</ul>
+
+<p>Untuk mengekstrak warna-warna ini, teruskan objek {@link android.graphics.Bitmap} ke
+metode statis {@link android.support.v7.graphics.Palette#generate Palette.generate()} dalam
+thread latar belakang tempat Anda memuat gambar. Jika Anda tidak bisa menggunakan thread itu, panggil metode
+{@link android.support.v7.graphics.Palette#generateAsync Palette.generateAsync()} dan
+sediakan listener sebagai gantinya.</p>
+
+<p>Anda bisa mengambil warna mencolok dari gambar dengan metode getter di kelas
+<code>Palette</code>, misalnya <code>Palette.getVibrantColor</code>.</p>
+
+<p>Untuk menggunakan kelas {@link android.support.v7.graphics.Palette} dalam proyek Anda, tambahkan
+<a href="{@docRoot}sdk/installing/studio-build.html#dependencies">dependensi Gradle</a> berikut ke
+modul aplikasi Anda:</p>
+
+<pre>
+dependencies {
+ ...
+ compile 'com.android.support:palette-v7:21.0.0'
+}
+</pre>
+
+<p>Untuk informasi selengkapnya, lihat referensi API untuk kelas {@link android.support.v7.graphics.Palette}.
+</p>
+
+
+<h2 id="VectorDrawables">Membuat Drawable Vektor</h2>
+
+<!-- video box -->
+<a class="notice-developers-video" href="https://www.youtube.com/watch?v=wlFVIIstKmA" style="margin-top:18px">
+<div>
+ <h3>Video</h3>
+ <p>Grafis Vektor Android</p>
+</div>
+</a>
+
+<p>Di Android 5.0 (API Level 21) ke atas, Anda bisa mendefinisikan drawable vektor, yang berubah skala tanpa
+kehilangan definisi. Anda hanya memerlukan satu file aset per gambar vektor, bukan file aset untuk
+setiap densitas layar seperti pada gambar bitmap. Untuk membuat gambar vektor, Anda mendefinisikan detail
+bentuknya dalam sebuah elemen XML <code><vector></code>.</p>
+
+<p>Contoh berikut mendefinisikan gambar vektor berbentuk hati:</p>
+
+<pre>
+<!-- res/drawable/heart.xml -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ <!-- intrinsic size of the drawable -->
+ android:height="256dp"
+ android:width="256dp"
+ <!-- size of the virtual canvas -->
+ android:viewportWidth="32"
+ android:viewportHeight="32">
+
+ <!-- draw a path -->
+ <path android:fillColor="#8fff"
+ android:pathData="M20.5,9.5
+ c-1.955,0,-3.83,1.268,-4.5,3
+ c-0.67,-1.732,-2.547,-3,-4.5,-3
+ C8.957,9.5,7,11.432,7,14
+ c0,3.53,3.793,6.257,9,11.5
+ c5.207,-5.242,9,-7.97,9,-11.5
+ C25,11.432,23.043,9.5,20.5,9.5z" />
+</vector>
+</pre>
+
+<p>Gambar vektor direpresentasikan di Android sebagai objek {@link android.graphics.drawable.VectorDrawable}.
+ Untuk informasi selengkapnya tentang sintaks <code>pathData</code>, lihat <a href="http://www.w3.org/TR/SVG11/paths.html#PathData">Referensi Path SVG</a>. Untuk informasi selengkapnya
+tentang menganimasikan properti drawable vektor, lihat
+<a href="{@docRoot}training/material/animations.html#AnimVector">Menganimasikan Drawable Vektor</a>.</p>
diff --git a/docs/html-intl/intl/id/training/material/get-started.jd b/docs/html-intl/intl/id/training/material/get-started.jd
new file mode 100644
index 0000000..1a551a9
--- /dev/null
+++ b/docs/html-intl/intl/id/training/material/get-started.jd
@@ -0,0 +1,171 @@
+page.title=Memulai
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+<h2>Pelajaran ini mengajarkan Anda cara</h2>
+<ol>
+ <li><a href="#ApplyTheme">Menerapkan Tema Bahan</a></li>
+ <li><a href="#Layouts">Mendesain Layout Anda</a></li>
+ <li><a href="#Depth">Menetapkan Ketinggian di Tampilan Anda</a></li>
+ <li><a href="#ListsCards">Membuat Daftar dan Kartu</a></li>
+ <li><a href="#Animations">Menyesuaikan Animasi Anda</a></li>
+</ol>
+<h2>Anda juga harus membaca</h2>
+<ul>
+ <li><a href="http://www.google.com/design/spec">Spesifikasi desain bahan</a></li>
+ <li><a href="{@docRoot}design/material/index.html">Desain bahan di Android</a></li>
+</ul>
+</div>
+</div>
+
+
+<p>Untuk membuat aplikasi dengan desain bahan:</p>
+
+<ol>
+ <li style="margin-bottom:10px">
+ Tinjaulah <a href="http://www.google.com/design/spec">spesifikasi desain bahan</a>.</li>
+ <li style="margin-bottom:10px">
+ Terapkan <strong>tema</strong> bahan ke aplikasi Anda.</li>
+ <li style="margin-bottom:10px">
+ Buat <strong>layout</strong> agar mengikuti panduan desain bahan.</li>
+ <li style="margin-bottom:10px">
+ Tetapkan <strong>ketinggian</strong> tampilan Anda untuk menghasilkan bayangan.</li>
+ <li style="margin-bottom:10px">
+ Gunakan <strong>widget</strong> sistem untuk daftar dan kartu.</li>
+ <li style="margin-bottom:10px">
+ Sesuaikan <strong>animasi</strong> di aplikasi Anda.</li>
+</ol>
+
+<h3>Mempertahankan kompatibilitas mundur</h3>
+
+<p>Anda bisa menambahkan banyak fitur desain bahan ke aplikasi sekaligus mempertahankan kompatibilitas dengan
+versi Android sebelum 5.0. Untuk informasi selengkapnya, lihat
+<a href="{@docRoot}training/material/compatibility.html">Mempertahankan Kompatibilitas</a>.</p>
+
+<h3>Memperbarui aplikasi dengan desain bahan</h3>
+
+<p>Untuk memperbarui aplikasi yang ada guna memasukkan desain bahan, perbarui layout Anda dengan mengikuti
+panduan desain bahan. Juga pastikan memasukkan kedalaman, umpan balik sentuh, dan
+animasi.</p>
+
+<h3>Membuat aplikasi baru dengan desain bahan</h3>
+
+<p>Jika Anda sedang membuat aplikasi baru dengan fitur desain bahan, <a href="http://www.google.com/design/spec">panduan desain bahan</a> akan memberi Anda
+kerangka kerja desain yang kohesif. Ikuti panduan itu dan gunakan fungsionalitas baru di
+kerangka kerja Android untuk mendesain dan mengembangkan aplikasi Anda.</p>
+
+
+<h2 id="ApplyTheme">Menerapkan Tema Bahan</h2>
+
+<p>Untuk menerapkan tema bahan dalam aplikasi Anda, tetapkan gaya yang mewarisi
+<code>android:Theme.Material</code>:</p>
+
+<pre>
+<!-- res/values/styles.xml -->
+<resources>
+ <!-- your theme inherits from the material theme -->
+ <style name="AppTheme" parent="android:Theme.Material">
+ <!-- theme customizations -->
+ </style>
+</resources>
+</pre>
+
+<p>Tema bahan menyediakan widget sistem terbaru yang memungkinkan Anda mengatur palet warnanya dan
+animasi default untuk umpan balik sentuh dan transisi aktivitas. Untuk detail selengkapnya, lihat
+<a href="{@docRoot}training/material/theme.html">Menggunakan Tema Bahan</a>.</p>
+
+
+<h2 id="Layouts">Mendesain Layout Anda</h2>
+
+<p>Selain menerapkan dan menyesuaikan tema bahan, layout Anda harus mematuhi
+<a href="http://www.google.com/design/spec">panduan desain bahan</a>. Bila Anda mendesain
+layout, berikan perhatian khusus pada hal-hal berikut:</p>
+
+<ul>
+<li>Petak patokan</li>
+<li>Garis utama</li>
+<li>Pengaturan Jarak</li>
+<li>Ukuran target sentuh</li>
+<li>Struktur layout</li>
+</ul>
+
+
+<h2 id="Depth">Menetapkan Ketinggian di Tampilan Anda</h2>
+
+<p>Tampilan bisa menghasilkan bayangan, dan nilai ketinggian tampilan
+menentukan ukuran bayangan dan urutan penggambarannya. Untuk mengatur ketinggian tampilan, gunakan
+atribut <code>android:elevation</code> dalam layout:</p>
+
+<pre>
+<TextView
+ android:id="@+id/my_textview"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/next"
+ android:background="@color/white"
+ android:elevation="5dp" />
+</pre>
+
+<p>Properti <code>translationZ</code> baru memungkinkan Anda membuat animasi yang mencerminkan
+perubahan sementara pada ketinggian tampilan. Perubahan ketinggian bisa berguna saat
+<a href="{@docRoot}training/material/animations.html#ViewState">merespons
+gerakan sentuh</a>.</p>
+
+<p>Untuk detail selengkapnya, lihat <a href="{@docRoot}training/material/shadows-clipping.html">Mendefinisikan
+Bayangan dan Memangkas Tampilan</a>.</p>
+
+
+<h2 id="ListsCards">Membuat Daftar dan Kartu</h2>
+
+<p>{@link android.support.v7.widget.RecyclerView} adalah versi {@link
+android.widget.ListView} yang lebih mudah dimasukkan dan mendukung beragam tipe layout serta memberikan peningkatan kinerja.
+{@link android.support.v7.widget.CardView} memungkinkan Anda menampilkan potongan informasi dalam kartu dengan
+tampilan konsisten di seluruh aplikasi. Contoh kode berikut memperagakan cara menyertakan
+{@link android.support.v7.widget.CardView} dalam layout Anda:</p>
+
+<pre>
+<android.support.v7.widget.CardView
+ android:id="@+id/card_view"
+ android:layout_width="200dp"
+ android:layout_height="200dp"
+ card_view:cardCornerRadius="3dp">
+ ...
+</android.support.v7.widget.CardView>
+</pre>
+
+<p>Untuk informasi selengkapnya, lihat <a href="{@docRoot}training/material/lists-cards.html">Membuat Daftar
+dan Kartu</a>.</p>
+
+
+<h2 id="Animations">Menyesuaikan Animasi Anda</h2>
+
+<p>Android 5.0 (API level 21) menyertakan API baru untuk membuat animasi custom di aplikasi Anda.
+Misalnya, Anda bisa mengaktifkan transisi aktivitas dan mendefinisikan transisi keluar di
+aktivitas:</p>
+
+<pre>
+public class MyActivity extends Activity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ // enable transitions
+ getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
+ setContentView(R.layout.activity_my);
+ }
+
+ public void onSomeButtonClicked(View view) {
+ getWindow().setExitTransition(new Explode());
+ Intent intent = new Intent(this, MyOtherActivity.class);
+ startActivity(intent,
+ ActivityOptions
+ .makeSceneTransitionAnimation(this).toBundle());
+ }
+}
+</pre>
+
+<p>Bila Anda memulai aktivitas lain dari aktivitas ini, transisi keluar akan diaktifkan.</p>
+
+<p>Untuk mengetahui selengkapnya tentang API animasi yang baru, lihat <a href="{@docRoot}training/material/animations.html">Mendefinisikan Animasi Custom</a>.</p>
diff --git a/docs/html-intl/intl/id/training/material/index.jd b/docs/html-intl/intl/id/training/material/index.jd
new file mode 100644
index 0000000..53697d2
--- /dev/null
+++ b/docs/html-intl/intl/id/training/material/index.jd
@@ -0,0 +1,60 @@
+page.title=Desain Bahan untuk Pengembang
+page.image=images/cards/material_2x.png
+page.metaDescription=Pelajari cara menerapkan desain bahan pada aplikasi Anda.
+
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>Dependensi dan Prasyarat</h2>
+ <ul>
+ <li>Android 5.0 (API Level 21)</li>
+ </ul>
+</div>
+</div>
+
+<p>Desain bahan adalah panduan komprehensif untuk desain visual, gerak, dan interaksi di
+berbagai platform dan perangkat. Untuk menggunakan desain bahan di aplikasi Android, ikuti panduan
+yang dijelaskan dalam
+<a href="http://www.google.com/design/spec/material-design/introduction.html">spesifikasi desain bahan
+</a> dan gunakan komponen serta fungsionalitas baru yang tersedia di Android 5.0
+(API level 21).</p>
+
+<p>Kelas ini menampilkan kepada Anda cara membuat aplikasi desain bahan dengan elemen-elemen berikut:</p>
+
+<ul>
+<li>Tema bahan</li>
+<li>Widget untuk kartu dan daftar</li>
+<li>Bayangan custom dan pemangkasan tampilan</li>
+<li>Drawable vektor</li>
+<li>Animasi custom</li>
+</ul>
+
+<p>Kelas ini juga mengajarkan cara mempertahankan kompatibilitas dengan versi Android sebelum
+5.0 (API level 21) bila Anda menggunakan fitur desain bahan dalam aplikasi.</p>
+
+<h2>Pelajaran</h2>
+
+<dl>
+ <dt><a href="{@docRoot}training/material/get-started.html">Memulai</a></dt>
+ <dd>Pelajari cara memperbarui aplikasi Anda dengan fitur desain bahan.</dd>
+
+ <dt><a href="{@docRoot}training/material/theme.html">Menggunakan Tema Bahan</a></dt>
+ <dd>Pelajari cara menerapkan gaya desain bahan pada aplikasi Anda.</dd>
+
+ <dt><a href="{@docRoot}training/material/lists-cards.html">Membuat Daftar dan Kartu</a></dt>
+ <dd>Pelajari cara membuat daftar dan kartu dengan tampilan dan cara kerja yang konsisten menggunakan widget sistem.</dd>
+
+ <dt><a href="{@docRoot}training/material/shadows-clipping.html">Mendefinisikan Bayangan dan Memangkas Tampilan</a></dt>
+ <dd>Pelajari cara mengatur elevasi tampilan Anda untuk membuat bayangan custom dan cara memangkas tampilan.</dd>
+
+ <dt><a href="{@docRoot}training/material/drawables.html">Bekerja dengan Drawable</a></dt>
+ <dd>Pelajari cara membuat drawable vektor dan cara mewarnai sumber daya drawable.</dd>
+
+ <dt><a href="{@docRoot}training/material/animations.html">Mendefinisikan Animasi Custom</a></dt>
+ <dd>Pelajari cara membuat animasi custom untuk tampilan dan transisi aktivitas dengan elemen bersama.</dd>
+
+ <dt><a href="{@docRoot}training/material/compatibility.html">Mempertahankan Kompatibilitas</a></dt>
+ <dd>Pelajari cara mempertahankan kompatibilitas dengan versi platform sebelum Android 5.0.</dd>
+</dl>
diff --git a/docs/html-intl/intl/id/training/material/lists-cards.jd b/docs/html-intl/intl/id/training/material/lists-cards.jd
new file mode 100644
index 0000000..46dd19af
--- /dev/null
+++ b/docs/html-intl/intl/id/training/material/lists-cards.jd
@@ -0,0 +1,266 @@
+page.title=Membuat Daftar dan Kartu
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+<h2>Pelajaran ini mengajarkan Anda cara</h2>
+<ol>
+ <li><a href="#RecyclerView">Membuat Daftar</a></li>
+ <li><a href="#CardView">Membuat Kartu</a></li>
+ <li><a href="#Dependencies">Menambahkan Dependensi</a></li>
+</ol>
+<h2>Anda juga harus membaca</h2>
+<ul>
+ <li><a href="http://www.google.com/design/spec">Spesifikasi desain bahan</a></li>
+ <li><a href="{@docRoot}design/material/index.html">Desain bahan di Android</a></li>
+</ul>
+</div>
+</div>
+
+
+<p>Untuk membuat daftar dan kartu yang kompleks dengan gaya desain bahan di aplikasi, Anda bisa menggunakan widget
+{@link android.support.v7.widget.RecyclerView} dan {@link android.support.v7.widget.CardView}.
+</p>
+
+
+<h2 id="RecyclerView">Membuat Daftar</h2>
+
+<p>Widget {@link android.support.v7.widget.RecyclerView} adalah
+versi {@link android.widget.ListView} yang lebih maju dan fleksibel. Widget ini adalah kontainer untuk menampilkan set data
+besar yang bisa digulir secara sangat efisien dengan mempertahankan tampilan dalam jumlah terbatas. Gunakan
+widget {@link android.support.v7.widget.RecyclerView} bila Anda memiliki kumpulan data dengan elemen
+yang berubah saat runtime berdasarkan tindakan pengguna atau kejadian jaringan.</p>
+
+<p>Kelas {@link android.support.v7.widget.RecyclerView} menyederhanakan penampilan dan penanganan
+set data yang besar dengan menyediakan:</p>
+
+<ul>
+ <li>Pengelola layout untuk memosisikan item</li>
+ <li>Animasi default untuk operasi item umum, misalnya penghapusan atau penambahan item</li>
+</ul>
+
+<p>Anda juga memiliki keluwesan untuk mendefinisikan pengelola layout custom dan animasi untuk widget {@link
+android.support.v7.widget.RecyclerView}.</p>
+
+<img src="{@docRoot}training/material/images/RecyclerView.png" alt="" width="550" height="106" />
+<p class="img-caption">
+<strong>Gambar 1</strong>. Widget <code>RecyclerView</code>.
+</p>
+
+<p>Untuk menggunakan widget {@link android.support.v7.widget.RecyclerView}, Anda harus menetapkan
+adaptor dan pengelola layout. Untuk membuat adaptor, perluas kelas {@link
+android.support.v7.widget.RecyclerView.Adapter RecyclerView.Adapter}. Detail
+implementasi bergantung pada detail set data Anda dan tipe tampilan. Untuk informasi selengkapnya,
+ lihat <a href="#RVExamples">contoh-contoh</a> di bawah.</p>
+
+<div style="float:right">
+<img src="{@docRoot}design/material/images/list_mail.png" alt="" width="250" height="426" />
+<p class="img-caption" style="margin-left:8px">
+<strong>Gambar 2</strong> - Daftar berisi <code>RecyclerView</code>.
+</p>
+</div>
+
+<p><strong>Pengelola layout</strong> memosisikan tampilan item dalam {@link
+android.support.v7.widget.RecyclerView} dan menentukan waktu untuk menggunakan ulang tampilan item yang tidak
+lagi terlihat oleh pengguna. Untuk menggunakan ulang (atau <em>mendaur ulang</em>) tampilan, pengelola layout bisa meminta
+adaptor untuk mengganti konten tampilan dengan elemen lain dalam dataset. Mendaur ulang
+tampilan dengan cara ini akan meningkatkan kinerja karena menghindari pembuatan tampilan yang tidak diperlukan atau
+melakukan pencarian {@link android.app.Activity#findViewById findViewById()} yang mahal.</p>
+
+<p>{@link android.support.v7.widget.RecyclerView} menyediakan semua pengelola layout bawaan ini:</p>
+
+<ul>
+<li>{@link android.support.v7.widget.LinearLayoutManager} menampilkan item dalam
+daftar gulir vertikal atau horizontal.</li>
+<li>{@link android.support.v7.widget.GridLayoutManager} menampilkan item dalam petak.</li>
+<li>{@link android.support.v7.widget.StaggeredGridLayoutManager} menampilkan item dalam petak zigzag.</li>
+</ul>
+
+<p>Untuk membuat pengelola layout custom, perluas kelas {@link
+android.support.v7.widget.RecyclerView.LayoutManager RecyclerView.LayoutManager}.</p>
+
+<h3>Animasi</h3>
+
+<p>Animasi untuk menambahkan dan menghapus item diaktifkan secara default di {@link
+android.support.v7.widget.RecyclerView}. Untuk menyesuaikan animasi ini, perluas kelas
+{@link android.support.v7.widget.RecyclerView.ItemAnimator RecyclerView.ItemAnimator}dan gunakan
+metode {@link android.support.v7.widget.RecyclerView#setItemAnimator RecyclerView.setItemAnimator()}.
+</p>
+
+<h3 id="RVExamples">Contoh</h3>
+
+<p>Contoh kode berikut memperagakan cara menambahkan
+{@link android.support.v7.widget.RecyclerView} ke layout:</p>
+
+<pre>
+<!-- A RecyclerView with some commonly used attributes -->
+<android.support.v7.widget.RecyclerView
+ android:id="@+id/my_recycler_view"
+ android:scrollbars="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"/>
+</pre>
+
+<p>Begitu Anda menambahkan widget {@link android.support.v7.widget.RecyclerView} ke layout,
+dapatkan pengatur atau handle objek itu, hubungkan dengan pengelola layout, dan sertakan adaptor untuk data
+yang akan ditampilkan:</p>
+
+<pre>
+public class MyActivity extends Activity {
+ private RecyclerView mRecyclerView;
+ private RecyclerView.Adapter mAdapter;
+ private RecyclerView.LayoutManager mLayoutManager;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.my_activity);
+ mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
+
+ // use this setting to improve performance if you know that changes
+ // in content do not change the layout size of the RecyclerView
+ mRecyclerView.setHasFixedSize(true);
+
+ // use a linear layout manager
+ mLayoutManager = new LinearLayoutManager(this);
+ mRecyclerView.setLayoutManager(mLayoutManager);
+
+ // specify an adapter (see also next example)
+ mAdapter = new MyAdapter(myDataset);
+ mRecyclerView.setAdapter(mAdapter);
+ }
+ ...
+}
+</pre>
+
+<p>Adaptor menyediakan akses ke item dataset Anda, membuat tampilan untuk item, dan
+mengganti konten sebagian tampilan dengan item data baru bila item semula tidak lagi
+terlihat. Contoh kode berikut menampilkan implementasi sederhana untuk sebuah dataset yang terdiri dari
+larik string yang ditampilkan dengan menggunakan widget {@link android.widget.TextView}:</p>
+
+<pre>
+public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
+ private String[] mDataset;
+
+ // Provide a reference to the views for each data item
+ // Complex data items may need more than one view per item, and
+ // you provide access to all the views for a data item in a view holder
+ public static class ViewHolder extends RecyclerView.ViewHolder {
+ // each data item is just a string in this case
+ public TextView mTextView;
+ public ViewHolder(TextView v) {
+ super(v);
+ mTextView = v;
+ }
+ }
+
+ // Provide a suitable constructor (depends on the kind of dataset)
+ public MyAdapter(String[] myDataset) {
+ mDataset = myDataset;
+ }
+
+ // Create new views (invoked by the layout manager)
+ @Override
+ public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
+ int viewType) {
+ // create a new view
+ View v = LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.my_text_view, parent, false);
+ // set the view's size, margins, paddings and layout parameters
+ ...
+ ViewHolder vh = new ViewHolder(v);
+ return vh;
+ }
+
+ // Replace the contents of a view (invoked by the layout manager)
+ @Override
+ public void onBindViewHolder(ViewHolder holder, int position) {
+ // - get element from your dataset at this position
+ // - replace the contents of the view with that element
+ holder.mTextView.setText(mDataset[position]);
+
+ }
+
+ // Return the size of your dataset (invoked by the layout manager)
+ @Override
+ public int getItemCount() {
+ return mDataset.length;
+ }
+}
+</pre>
+
+
+<div style="float:right;margin-top:15px;margin-left:30px">
+<img src="{@docRoot}design/material/images/card_travel.png" alt="" width="225" height="383">
+<p class="img-caption" style="margin-left:12px">
+<strong>Gambar 3</strong>. Contoh kartu.
+</p>
+</div>
+
+<h2 id="CardView">Membuat Kartu</h2>
+
+<p>{@link android.support.v7.widget.CardView} memperluas kelas {@link android.widget.FrameLayout}
+dan memungkinkan Anda menampilkan informasi dalam kartu yang memiliki tampilan konsisten lintas platform. Widget {@link
+android.support.v7.widget.CardView} bisa memiliki bayangan dan sudut membulat.</p>
+
+<p>Untuk membuat kartu dengan bayangan, gunakan atribut <code>card_view:cardElevation</code>.
+{@link android.support.v7.widget.CardView} menggunakan elevasi nyata dan bayangan dinamis pada Android 5.0
+(API level 21) ke atas dan memundurkan ke implementasi bayangan terprogram pada versi terdahulu.
+Untuk informasi selengkapnya, lihat <a href="{@docRoot}training/material/compatibility.html">Mempertahankan
+Kompatibilitas</a>.</p>
+
+<p>Gunakan properti-properti ini untuk menyesuaikan penampilan
+widget {@link android.support.v7.widget.CardView}:</p>
+
+<ul>
+ <li>Untuk mengatur radius sudut pada layout Anda, gunakan atribut <code>card_view:cardCornerRadius</code>.
+</li>
+ <li>Untuk mengatur radius sudut dalam kode Anda, gunakan metode <code>CardView.setRadius</code>.</li>
+ <li>Untuk mengatur warna latar belakang kartu, gunakan atribut <code>card_view:cardBackgroundColor</code>.
+</li>
+</ul>
+
+<p>Contoh kode berikut menampilkan cara menyertakan widget {@link android.support.v7.widget.CardView}
+dalam layout:</p>
+
+<pre>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ xmlns:card_view="http://schemas.android.com/apk/res-auto"
+ ... >
+ <!-- A CardView that contains a TextView -->
+ <android.support.v7.widget.CardView
+ xmlns:card_view="http://schemas.android.com/apk/res-auto"
+ android:id="@+id/card_view"
+ android:layout_gravity="center"
+ android:layout_width="200dp"
+ android:layout_height="200dp"
+ card_view:cardCornerRadius="4dp">
+
+ <TextView
+ android:id="@+id/info_text"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" />
+ </android.support.v7.widget.CardView>
+</LinearLayout>
+</pre>
+
+<p>Untuk informasi selengkapnya, lihat referensi API untuk {@link android.support.v7.widget.CardView}.</p>
+
+
+<h2 id="Dependencies">Menambahkan Dependensi</h2>
+
+<p>Widget {@link android.support.v7.widget.RecyclerView} dan {@link android.support.v7.widget.CardView}
+adalah bagian dari <a href="{@docRoot}tools/support-library/features.html#v7">v7 Support
+Library</a>. Untuk menggunakan widget dalam proyek Anda, tambahkan
+<a href="{@docRoot}sdk/installing/studio-build.html#dependencies">dependensi Gradle</a> ini ke
+modul aplikasi Anda:</p>
+
+<pre>
+dependencies {
+ ...
+ compile 'com.android.support:cardview-v7:21.0.+'
+ compile 'com.android.support:recyclerview-v7:21.0.+'
+}
+</pre>
diff --git a/docs/html-intl/intl/id/training/material/shadows-clipping.jd b/docs/html-intl/intl/id/training/material/shadows-clipping.jd
new file mode 100644
index 0000000..5431926
--- /dev/null
+++ b/docs/html-intl/intl/id/training/material/shadows-clipping.jd
@@ -0,0 +1,133 @@
+page.title=Mendefinisikan Bayangan dan Memangkas Tampilan
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+<h2>Pelajaran ini mengajarkan Anda cara</h2>
+<ol>
+ <li><a href="#Elevation">Menetapkan Elevasi pada Tampilan Anda</a></li>
+ <li><a href="#Shadows">Menyesuaikan Bayangan dan Garis Luar Tampilan</a></li>
+ <li><a href="#Clip">Memangkas Tampilan</a></li>
+</ol>
+<h2>Anda juga harus membaca</h2>
+<ul>
+ <li><a href="http://www.google.com/design/spec">Spesifikasi desain bahan</a></li>
+ <li><a href="{@docRoot}design/material/index.html">Desain bahan di Android</a></li>
+</ul>
+</div>
+</div>
+
+<p>Desain bahan memperkenalkan elevasi untuk elemen-elemen UI. Elevasi membantu pengguna memahami
+arti penting relatif masing-masing elemen dan memfokuskan perhatian pada tugas yang ada.</p>
+
+<p>Elevasi tampilan, yang dinyatakan dengan properti Z, menentukan tampilan visual
+bayangannya: tampilan dengan nilai Z lebih tinggi menghasilkan bayangan lebih besar dan lebih halus. Tampilan dengan nilai Z lebih tinggi menutupi
+tampilan dengan nilai Z lebih rendah; akan tetapi, nilai Z tampilan tidak memengaruhi ukuran tampilan.</p>
+
+<p>Bayangan digambar oleh induk tampilan yang dinaikkan, sehingga terkena pemangkasan standar tampilan,
+yang dipangkas oleh induk secara default.</p>
+
+<p>Elevasi juga berguna untuk membuat animasi tempat memunculkan widget untuk sementara di atas
+bidang tampilan saat melakukan beberapa tindakan.</p>
+
+<p>Untuk informasi selengkapnya tentang elevasi dalam desain bahan, lihat
+<a href="http://www.google.com/design/spec/what-is-material/objects-in-3d-space.html">Objek
+di ruang 3D</a>.</p>
+
+
+<h2 id="Elevation">Menetapkan Elevasi pada Tampilan Anda</h2>
+
+<p>Nilai Z untuk tampilan memiliki dua komponen:
+
+<ul>
+<li>Elevasi: Komponen statis.</li>
+<li>Transformasi: Komponen dinamis yang digunakan untuk animasi.</li>
+</ul>
+
+<p><code>Z = elevation + translationZ</code></p>
+
+<img src="{@docRoot}training/material/images/shadows-depth.png" width="580" height="261" alt="" />
+<p class="img-caption"><strong>Gambar 1</strong> - Bayangan untuk berbagai elevasi tampilan.</p>
+
+<p>Untuk mengatur elevasi tampilan dalam definisi layout, gunakan atribut <code>android:elevation</code>.
+ Untuk mengatur elevasi tampilan dalam kode aktivitas, gunakan
+metode {@link android.view.View#setElevation View.setElevation()}.</p>
+
+<p>Untuk mengatur transformasi tampilan, gunakan metode {@link android.view.View#setTranslationZ
+View.setTranslationZ()}.</p>
+
+<p>Metode {@link android.view.ViewPropertyAnimator#z ViewPropertyAnimator.z()} dan {@link
+android.view.ViewPropertyAnimator#translationZ ViewPropertyAnimator.translationZ()} yang baru memudahkan
+Anda menganimasikan elevasi tampilan. Untuk informasi selengkapnya, lihat referensi API untuk
+{@link android.view.ViewPropertyAnimator} dan panduan pengembang <a href="{@docRoot}guide/topics/graphics/prop-animation.html">Animasi Properti</a>.
+</p>
+
+<p>Anda juga bisa menggunakan {@link android.animation.StateListAnimator}
+untuk menetapkan animasi ini secara deklaratif. Ini khususnya berguna bila
+perubahan status memicu animasi, seperti saat seorang pengguna menekan tombol. Untuk informasi selengkapnya, lihat
+<a href="{@docRoot}training/material/animations.html#ViewState">Menganimasikan Perubahan Status Tampilan</a>.</p>
+
+<p>Nilai Z diukur dengan satuan dp (density-independent pixel).</p>
+
+
+<h2 id="Shadows">Menyesuaikan Bayangan dan Garis Luar Tampilan</h2>
+
+<p>Batas-batas drawable latar belakang tampilan menentukan bentuk default bayangannya.
+<strong>Garis luar</strong> menyatakan bentuk luar objek grafis dan mendefinisikan
+bidang riak untuk umpan balik sentuh.</p>
+
+<p>Perhatikan tampilan ini, yang didefinisikan dengan drawable latar belakang:</p>
+
+<pre>
+<TextView
+ android:id="@+id/myview"
+ ...
+ android:elevation="2dp"
+ android:background="@drawable/myrect" />
+</pre>
+
+<p>Drawable latar belakang didefinisikan sebagai persegi panjang dengan sudut membulat:</p>
+
+<pre>
+<!-- res/drawable/myrect.xml -->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="rectangle">
+ <solid android:color="#42000000" />
+ <corners android:radius="5dp" />
+</shape>
+</pre>
+
+<p>Tampilan ini menghasilkan bayangan dengan sudut membulat, karena drawable latar belakang mendefinisikan
+garis luar tampilan. Memberikan garis luar custom akan mengesampingkan bentuk default bayangan tampilan.</p>
+
+<p>Untuk mendefinisikan garis luar custom suatu tampilan dalam kode Anda:<p>
+
+<ol>
+<li>Perluas kelas {@link android.view.ViewOutlineProvider}.</li>
+<li>Kesampingkan metode {@link android.view.ViewOutlineProvider#getOutline getOutline()}.</li>
+<li>Tetapkan penyedia garis luar baru untuk tampilan Anda dengan metode {@link
+android.view.View#setOutlineProvider View.setOutlineProvider()}.</li>
+</ol>
+
+<p>Anda bisa membuat garis luar lonjong dan persegi panjang yang bersudut membulat dengan menggunakan metode dalam
+kelas {@link android.graphics.Outline}. Penyedia garis luar default untuk tampilan memperoleh garis luar
+dari latar belakang tampilan. Untuk mencegah tampilan menghasilkan bayangan, atur penyedia garis luarnya
+ke <code>null</code>.</p>
+
+
+<h2 id="Clip">Memangkas Tampilan</h2>
+
+<p>Memangkas tampilan memudahkan Anda mengubah bentuk tampilan. Anda bisa memangkas tampilan agar
+konsistensi dengan elemen desain lainnya atau mengubah bentuk tampilan untuk merespons input pengguna.
+Anda bisa memangkas tampilan hingga area garis luarnya dengan menggunakan metode {@link android.view.View#setClipToOutline
+View.setClipToOutline()} atau atribut <code>android:clipToOutline</code>. Hanya
+garis-garis luar persegi panjang, lingkaran, dan persegi panjang bersudut bulat yang mendukung pemangkasan, seperti yang ditentukan oleh
+metode {@link android.graphics.Outline#canClip Outline.canClip()}.</p>
+
+<p>Untuk memangkas tampilan ke bentuk drawable, atur drawable sebagai latar belakang tampilan
+(seperti yang ditampilkan di atas) dan panggil metode {@link android.view.View#setClipToOutline View.setClipToOutline()}.
+</p>
+
+<p>Memangkas tampilan adalah operasi yang mahal; jadi, jangan animasikan bentuk yang Anda gunakan
+untuk memangkas tampilan. Untuk memperoleh efek ini, gunakan animasi <a href="{@docRoot}training/material/animations.html#Reveal">Reveal Effect</a>.</p>
diff --git a/docs/html-intl/intl/id/training/material/theme.jd b/docs/html-intl/intl/id/training/material/theme.jd
new file mode 100644
index 0000000..5acdcd2
--- /dev/null
+++ b/docs/html-intl/intl/id/training/material/theme.jd
@@ -0,0 +1,131 @@
+page.title=Menggunakan Tema Bahan
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+<h2>Pelajaran ini mengajarkan Anda cara</h2>
+<ol>
+ <li><a href="#ColorPalette">Menyesuaikan Palet Warna</a></li>
+ <li><a href="#StatusBar">Menyesuaikan Baris Status</a></li>
+ <li><a href="#Inheritance">Tampilan Setiap Tema</a></li>
+</ol>
+<h2>Anda juga harus membaca</h2>
+<ul>
+ <li><a href="http://www.google.com/design/spec">Spesifikasi desain bahan</a></li>
+ <li><a href="{@docRoot}design/material/index.html">Desain bahan di Android</a></li>
+</ul>
+</div>
+</div>
+
+
+<p>Tema bahan yang baru menyediakan:</p>
+
+<ul>
+ <li>Widget sistem yang memungkinkan Anda mengatur palet warnanya</li>
+ <li>Animasi umpan balik sentuh untuk widget sistem</li>
+ <li>Animasi transisi aktivitas</li>
+</ul>
+
+<p>Anda bisa menyesuaikan tampilan tema bahan
+sesuai dengan identitas merek Anda dengan palet warna yang Anda kontrol. Anda bisa mewarnai action-bar dan
+baris status dengan menggunakan atribut tema, seperti yang ditampilkan dalam <a href="#fig3">Gambar 3</a>.</p>
+
+<p>Widget sistem memiliki desain baru dan animasi umpan balik sentuh. Anda bisa menyesuaikan
+palet warna, animasi umpan balik sentuh, dan transisi aktivitas untuk aplikasi.</p>
+
+<p>Tema bahan didefinisikan sebagai:</p>
+
+<ul>
+ <li><code>@android:style/Theme.Material</code> (versi gelap)</li>
+ <li><code>@android:style/Theme.Material.Light</code> (versi terang)</li>
+ <li><code>@android:style/Theme.Material.Light.DarkActionBar</code></li>
+</ul>
+
+<p>Untuk daftar gaya bahan yang bisa Anda gunakan, lihat referensi API untuk
+{@link android.R.style R.style}.</p>
+
+<!-- two columns, dark/light material theme example -->
+<div style="width:700px;margin-top:25px;margin-bottom:10px">
+<div style="float:left;width:250px;margin-left:40px;margin-right:60px;">
+ <img src="{@docRoot}design/material/images/MaterialDark.png" width="500" height="238">
+ <div style="width:170px;margin:0 auto">
+ <p style="margin-top:8px;font-size:12px"><strong>Gambar 1</strong>. Tema bahan gelap</p>
+ </div>
+</div>
+<div style="float:left;width:250px;margin-right:0px;">
+ <img src="{@docRoot}design/material/images/MaterialLight.png" width="500" height="238">
+ <div style="width:170px;margin:0 auto">
+ <p style="margin-top:8px;font-size:12px"><strong>Gambar 2</strong>. Tema bahan terang</p>
+ </div>
+</div>
+<br style="clear:left">
+</div>
+
+<p class="note">
+<strong>Catatan:</strong> Tema bahan hanya tersedia di Android 5.0 (API level 21)
+ke atas. <a href="{@docRoot}tools/support-library/features.html#v7">v7 Support Library</a>
+menyediakan tema dengan gaya desain bahan untuk beberapa widget dan dukungan untuk menyesuaikan
+palet warna. Untuk informasi selengkapnya, lihat
+<a href="{@docRoot}training/material/compatibility.html">Mempertahankan Kompatibilitas</a>.
+</p>
+
+
+<h2 id="ColorPalette">Menyesuaikan Palet Warna</h2>
+
+<p style="margin-bottom:30px">Untuk menyesuaikan warna dasar tema agar cocok dengan merek Anda, definisikan
+warna custom menggunakan atribut tema saat Anda mewariskan dari tema bahan:</p>
+
+<pre>
+<resources>
+ <!-- inherit from the material theme -->
+ <style name="AppTheme" parent="android:Theme.Material">
+ <!-- Main theme colors -->
+ <!-- your app branding color for the app bar -->
+ <item name="android:colorPrimary">@color/primary</item>
+ <!-- darker variant for the status bar and contextual app bars -->
+ <item name="android:colorPrimaryDark">@color/primary_dark</item>
+ <!-- theme UI controls like checkboxes and text fields -->
+ <item name="android:colorAccent">@color/accent</item>
+ </style>
+</resources>
+</pre>
+
+<div style="float:right;margin-left:25px;margin-top:20px;margin-bottom:10px" id="fig3">
+<img src="{@docRoot}training/material/images/ThemeColors.png" width="250" height="445" />
+<p class="img-caption" style="margin-bottom:0px">
+<strong>Gambar 3.</strong> Menyesuaikan tema bahan.</p>
+</div>
+
+
+<h2 id="StatusBar">Menyesuaikan Baris Status</h2>
+
+<p>Tema bahan memungkinkan Anda menyesuaikan baris status dengan mudah; jadi Anda bisa menetapkan
+warna yang cocok dengan merek Anda dan memberikan kontras yang cukup untuk menampilkan ikon status putih. Untuk
+mengatur warna custom bagi baris status, gunakan atribut <code>android:statusBarColor</code> bila
+Anda memperluas tema bahan. Secara default, <code>android:statusBarColor</code> mewarisi
+nilai <code>android:colorPrimaryDark</code>.</p>
+
+<p>Anda juga bisa menggambar sendiri di belakang baris status. Misalnya, jika Anda ingin menampilkan
+baris status secara transparan di atas foto, dengan gradasi gelap yang halus untuk memastikan
+ikon status putih tetap terlihat. Caranya, atur atribut <code>android:statusBarColor</code> ke
+<code>@android:color/transparent</code> dan sesuaikan flag jendela seperti yang diperlukan. Anda juga bisa
+menggunakan metode {@link android.view.Window#setStatusBarColor Window.setStatusBarColor()} untuk
+animasi atau pemudaran.</p>
+
+<p class="note">
+<strong>Catatan:</strong> Baris status harus selalu memiliki delineasi yang jelas dari
+toolbar utama, kecuali bila Anda menampilkan gambar detail atau konten media tepi-ke-tepi di belakang
+baris ini dan bila Anda menggunakan gradasi untuk memastikan ikon tetap terlihat.
+</p>
+
+<p>Bila Anda menyesuaikan baris navigasi dan baris status, jadikan keduanya transparan atau modifikasi
+baris status saja. Baris navigasi harus tetap hitam di semua kasus lainnya.</p>
+
+
+<h2 id="Inheritance">Tampilan Setiap Tema</h3>
+
+<p>Elemen dalam definisi layout XML bisa menetapkan atribut <code>android:theme</code>,
+yang merujuk sumber daya tema. Atribut ini memodifikasi tema untuk elemen itu dan setiap
+elemen anak, yang berguna untuk mengubah palet warna tema dalam porsi tertentu
+pada antarmuka.</p>
diff --git a/docs/html-intl/intl/id/training/tv/playback/picture-in-picture.jd b/docs/html-intl/intl/id/training/tv/playback/picture-in-picture.jd
new file mode 100644
index 0000000..41af6de
--- /dev/null
+++ b/docs/html-intl/intl/id/training/tv/playback/picture-in-picture.jd
@@ -0,0 +1,213 @@
+page.title=Gambar-dalam-gambar
+page.keywords=pratinjau,sdk,PIP,Gambar-dalam-gambar
+page.tags=androidn
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>Dalam dokumen ini</h2>
+<ol>
+ <li><a href="#declaring">Mendeklarasikan Bahwa Aktivitas Anda Mendukung
+Gambar-dalam-gambar</a></li>
+ <li><a href="#pip_button">Mengalihkan Aktivitas Anda ke Gambar-dalam-gambar</a>
+</li>
+ <li><a href="#handling_ui">Menangani UI Selama Gambar-dalam-gambar</a>
+</li>
+ <li><a href="#continuing_playback">Melanjutkan Pemutaran Video Saat dalam
+Gambar-dalam-gambar</a></li>
+ <li><a href="#single_playback">Menggunakan Aktivitas Pemutaran Tunggal untuk
+ Gambar-dalam-gambar</a></li>
+ <li><a href="#best">Praktik Terbaik</a></li>
+</ol>
+
+<h2>Lihat Juga</h2>
+<ol>
+ <li><a href="{@docRoot}preview/features/multi-window.html">Dukungan
+Multi-Jendela</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>Di Android N, pengguna Android TV sekarang bisa menonton video
+dalam jendela yang disematkan di sudut layar saat menyusuri
+aplikasi. Mode gambar-dalam-gambar (PIP) memungkinkan aplikasi menjalankan aktivitas
+video dalam jendela yang disematkan selagi aktivitas lain tetap berjalan di
+latar belakang. Jendela PIP memungkinkan pengguna melakukan multitasking saat menggunakan aplikasi Anda, yang
+membantu pengguna menjadi lebih produktif.</p>
+
+<p>Aplikasi Anda bisa memutuskan kapan memicu mode PIP. Inilah beberapa contoh
+kapan memasuki mode PIP:</p>
+
+<ul>
+<li>Aplikasi Anda bisa memindahkan video ke dalam mode PIP bila pengguna mengarah
+mundur dari video untuk menjelajah materi lainnya.</li>
+<li>Aplikasi Anda bisa mengalihkan video ke dalam mode PIP selagi pengguna menonton akhir episode
+dari materi. Layar utama menampilkan informasi
+promosi atau rangkuman tentang episode berikutnya dalam seri tersebut.</li>
+<li>Aplikasi Anda bisa menyediakan suatu cara bagi pengguna untuk mengantre materi tambahan selagi
+mereka menonton video. Video terus dimainkan dalam mode PIP selagi layar
+utama menampilkan aktivitas pemilihan materi.</li>
+</ul>
+
+<p>Jendela PIP memiliki luas 240x135 dp dan ditampilkan di layer paling atas pada salah satu
+dari empat sudut layar, yang dipilih oleh sistem. Pengguna bisa memunculkan
+menu PIP yang memungkinkan mereka untuk beralih mode dari jendela PIP ke layar penuh, atau menutup jendela
+PIP, dengan menekan dan menahan tombol <b>Beranda</b> pada remote. Jika video
+lain mulai diputar pada layar utama, jendela PIP secara otomatis
+ditutup. Pengguna juga bisa menutup jendela PIP melalui Recents.</p>
+
+<img src="{@docRoot}images/android-7.0/pip-active.png" />
+<p class="img-caption"><strong>Gambar 1.</strong> Video
+Gambar-dalam-gambar terlihat di sudut layar selagi pengguna menjelajahi materi pada layar
+utama.</p>
+
+<p>PIP memanfaatkan API multi-jendela yang tersedia di Android N untuk
+menyediakan jendela hamparan video yang disematkan. Untuk menambahkan PIP ke aplikasi, Anda harus
+mendaftarkan aktivitas yang mendukung PIP, mengalihkan aktivitas Anda ke mode PIP bila
+diperlukan, serta memastikan elemen UI disembunyikan dan pemutaran video berlanjut bila
+aktivitas dalam mode PIP.</p>
+
+<h2 id="declaring">Mendeklarasikan Bahwa Aktivitas Anda Mendukung Gambar-dalam-gambar</h2>
+
+<p>Secara default, sistem tidak secara otomatis mendukung PIP untuk aplikasi.
+Jika Anda ingin mendukung PIP dalam aplikasi, daftarkan aktivitas
+video Anda dalam manifes dengan menyetel
+<code>android:supportsPictureInPicture</code> dan
+<code>android:resizeableActivity</code> ke <code>true</code>. Juga, tetapkan
+bahwa aktivitas Anda menangani perubahan konfigurasi layout sehingga aktivitas
+Anda tidak diluncurkan ulang saat terjadi perubahan layout selama transisi mode PIP.</p>
+
+<pre>
+<activity android:name="VideoActivity"
+ android:resizeableActivity="true"
+ android:supportsPictureInPicture="true"
+ android:configChanges=
+ "screenSize|smallestScreenSize|screenLayout|orientation"
+ ...
+</pre>
+
+<p>Saat mendaftarkan aktivitas Anda, ingatlah bahwa dalam mode PIP aktivitas
+Anda akan ditampilkan pada jendela hamparan kecil pada layar TV. Aktivitas
+pemutaran video dengan UI minimal akan memberikan pengalaman pengguna terbaik. Aktivitas yang
+mengandung elemen UI kecil mungkin tidak memberikan pengalaman pengguna yang baik
+ketika beralih ke mode PIP, karena pengguna tidak dapat melihat elemen UI secara jelas
+di jendela PIP.</p>
+
+<h2 id="pip_button">Mengalihkan Aktivitas Anda ke Gambar-dalam-gambar</h2>
+
+Bila Anda perlu untuk mengalihkan aktivitas ke mode PIP, panggil
+<code>Activity.enterPictureInPictureMode()</code>. Contoh berikut mengalihkan
+ke mode PIP bila pengguna memilih tombol PIP khusus pada baris
+kontrol media:</p>
+
+<pre>
+@Override
+public void onActionClicked(Action action) {
+ if (action.getId() == R.id.lb_control_picture_in_picture) {
+ getActivity().enterPictureInPictureMode();
+ return;
+ }
+ ...
+</pre>
+
+<p>Menambahkan tombol PIP ke baris kontrol media Anda akan memungkinkan pengguna dengan mudah beralih
+ke mode PIP selagi mengontrol pemutaran video.</p>
+
+<img src="{@docRoot}images/android-7.0/pip-button.png" />
+<p class="img-caption"><strong>Gambar 1.</strong> Tombol
+gambar-dalam-gambar pada baris kontrol media.</p>
+
+<p>Android N menyertakan kelas
+<code>PlaybackControlsRow.PictureInPictureAction</code> baru yang mendefinisikan
+tindakan PIP baris kontrol dan menggunakan ikon PIP.</p>
+
+<h2 id="handling_ui">Menangani UI Selama Gambar-dalam-gambar</h2>
+
+<p>Bila aktivitas memasuki mode PIP, aktivitas Anda seharusnya hanya menampilkan pemutaran
+video. Buang elemen UI sebelum aktivitas Anda memasuki PIP,
+dan pulihkan elemen ini bila aktivitas Anda beralih ke layar penuh lagi.
+Ganti <code>Activity.onPictureInPictureModeChanged()</code> atau
+<code>Fragment.onPictureInPictureModeChanged()</code> dan aktifkan atau
+nonaktifkan elemen UI saat diperlukan, misalnya:</p>
+
+<pre>
+@Override
+public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
+ if (isInPictureInPictureMode) {
+ // Hide the controls in picture-in-picture mode.
+ ...
+ } else {
+ // Restore the playback UI based on the playback status.
+ ...
+ }
+}
+</pre>
+
+<h2 id="continuing_playback">Melanjutkan Pemutaran Video Saat dalam
+Gambar-dalam-gambar</h2>
+
+<p>Bila aktivitas Anda beralih ke PIP, sistem akan menganggap aktivitas tersebut berada dalam
+keadaan berhenti sementara, dan akan memanggil metode <code>onPause()</code> aktivitas Anda. Pemutaran
+video tidak boleh berhenti sementara dan harus terus diputar jika aktivitas tersebut
+berhenti sementara karena mode PIP. Periksa PIP dalam metode
+<code>onPause()</code> aktivitas Anda dan tangani pemutaran dengan tepat,
+misalnya:</p>
+
+<pre>
+@Override
+public void onPause() {
+ // If called while in PIP mode, do not pause playback
+ if (isInPictureInPictureMode()) {
+ // Continue playback
+ ...
+ }
+ // If paused but not in PIP, pause playback if necessary
+ ...
+}
+</pre>
+
+<p>Bila aktivitas meninggalkan mode PIP dan kembali ke mode layar penuh, sistem
+akan melanjutkan aktivitas Anda dan memanggil metode <code>onResume()</code>.</p>
+
+<h2 id="single_playback">Menggunakan Aktivitas Pemutaran Tunggal untuk
+ Gambar-dalam-gambar</h2>
+
+<p>Di aplikasi Anda, seorang pengguna bisa memilih video baru saat menyusuri materi di
+layar utama, selagi aktivitas pemutaran video dalam mode PIP. Putar
+video baru di aktivitas pemutaran yang ada dalam mode layar penuh, sebagai ganti
+meluncurkan aktivitas baru yang dapat membingungkan pengguna.</p>
+
+<p>Guna memastikan aktivitas tunggal digunakan untuk permintaan pemutaran video dan
+beralih ke atau dari mode PIP bila dibutuhkan, setel
+<code>android:launchMode</code> aktivitas ke <code>singleTask</code> dalam manifes Anda:
+</p>
+
+<pre>
+<activity android:name="VideoActivity"
+ ...
+ android:supportsPictureInPicture="true"
+ android:launchMode="singleTask"
+ ...
+</pre>
+
+<p>Di aktivitas Anda, ganti {@link android.app.Activity#onNewIntent
+Activity.onNewIntent()} dan tangani video baru, yang akan menghentikan pemutaran video
+jika diperlukan.</p>
+
+<h2 id="best">Praktik Terbaik</h2>
+
+<p>PIP ditujukan untuk aktivitas yang memutar video layar penuh. Saat mengalihkan
+aktivitas Anda ke mode PIP, hindari menampilkan apa pun selain materi video.
+Pantau saat aktivitas Anda memasuki mode PIP dan sembunyikan elemen UI, seperti dijelaskan
+dalam <a href="#handling_ui">Menangani UI Selama Gambar-dalam-gambar</a>.</p>
+
+<p>Karena jendela PIP ditampilkan sebagai jendela mengambang di sudut
+layar, Anda harus menghindari menampilkan informasi penting di layar utama
+di area mana saja yang bisa terhalang oleh jendela PIP.</p>
+
+<p>Bila aktivitas ada berada dalam mode PIP, secara default aktivitas itu tidak mendapatkan fokus masukan. Untuk
+menerima kejadian masukan saat dalam mode PIP, gunakan
+<code>MediaSession.setMediaButtonReceiver()</code>.</p>
diff --git a/docs/html-intl/intl/id/training/tv/tif/content-recording.jd b/docs/html-intl/intl/id/training/tv/tif/content-recording.jd
new file mode 100644
index 0000000..3389dbf
--- /dev/null
+++ b/docs/html-intl/intl/id/training/tv/tif/content-recording.jd
@@ -0,0 +1,142 @@
+page.title=Perekaman TV
+page.keywords=pratinjau,sdk,tv,perekaman
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>Dalam dokumen ini</h2>
+ <ol>
+ <li><a href="#supporting">Menunjukkan Dukungan untuk Perekaman</a></li>
+ <li><a href="#recording">Merekam Sesi</a></li>
+ <li><a href="#errors">Menangani Kesalahan Perekaman</a></li>
+ <li><a href="#sessions">Mengelola Sesi yang Direkam</a></li>
+ <li><a href="#best">Praktik Terbaik</a></li>
+ </ol>
+</div>
+</div>
+
+<p>Layanan masukan TV memungkinkan pengguna menghentikan sementara dan melanjutkan pemutaran saluran melalui
+API perekaman. Android N telah berkembang hingga ke perekaman
+dengan memungkinkan pengguna menyimpan beberapa sesi rekaman.</p>
+
+<p>Pengguna bisa menjadwalkan rekaman terlebih dahulu, atau memulai rekaman sambil menonton
+suatu acara. Setelah sistem menyimpan rekaman, pengguna bisa menjelajah, menata,
+dan memutar kembali rekaman tersebut menggunakan aplikasi TV di sistem.</p>
+
+<p>Jika Anda ingin menyediakan fungsi perekaman untuk layanan masukan TV,
+Anda harus menunjukkan pada sistem bahwa aplikasi Anda mendukung perekaman, mengimplementasikan
+kemampuan merekam program, menangani dan mengomunikasikan kesalahan yang muncul
+selama perekaman, dan mengelola sesi perekaman Anda.</p>
+
+<p class="note"><strong>Catatan:</strong> Aplikasi Live Channels belum
+menyediakan cara bagi pengguna untuk membuat atau mengakses perekaman. Hingga dibuat perubahan
+di aplikasi Live Channels, mungkin sulit menguji sepenuhnya pengalaman
+perekaman untuk layanan masukan TV Anda.</p>
+
+<h2 id="supporting">Menunjukkan Dukungan untuk Perekaman</h2>
+
+<p>Untuk memberi tahu sistem bahwa layanan masukan TV Anda mendukung perekaman, setel
+atribut <code>android:canRecord</code> di file XML metadata layanan Anda
+ke <code>true</code>:
+</p>
+
+<pre>
+<tv-input xmlns:android="http://schemas.android.com/apk/res/android"
+ <b>android:canRecord="true"</b>
+ android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />
+</pre>
+
+<p>Untuk informasi selengkapnya mengenai layanan file metadata, lihat
+<a href="{@docRoot}training/tv/tif/tvinput.html#manifest">Mendeklarasikan Layanan Masukan TV Anda
+di Manifes</a>.
+</p>
+
+<p>Atau, Anda bisa menunjukkan dukungan perekaman dalam kode Anda menggunakan
+langkah-langkah ini:</p>
+
+<ol>
+<li>Dalam metode <code>TvInputService.onCreate()</code> Anda, buat objek
+<code>TvInputInfo</code> baru menggunakan kelas <code>TvInputInfo.Builder</code>.
+</li>
+<li>Saat membuat objek <code>TvInputInfo</code> baru, panggil
+<code>setCanRecord(true)</code> sebelum memanggil <code>build()</code> untuk
+ menunjukkan layanan Anda mendukung perekaman.</li>
+<li>Daftarkan objek <code>TvInputInfo</code> Anda pada sistem dengan memanggil
+<code>TvInputManager.updateTvInputInfo()</code>.</li>
+</ol>
+
+<h2 id="recording">Merekam Sesi</h2>
+
+<p>Setelah layanan masukan TV Anda mendaftar bahwa mendukung fungsionalitas
+perekaman, sistem akan memanggil
+<code>TvInputService.onCreateRecordingSession()</code> bila perlu untuk mengakses
+implementasi perekaman aplikasi Anda. Implementasikan subkelas
+<code>TvInputService.RecordingSession</code> Anda sendiri dan kembalikan
+bila callback <code>onCreateRecordingSession()</code> dipicu.
+ Subkelas ini bertanggung jawab mengalihkan ke saluran data yang benar,
+merekam data yang diminta, dan memberitahukan status perekaman serta kesalahan ke
+sistem.</p>
+
+<p>Bila sistem memanggil <code>RecordingSession.onTune()</code>, dengan meneruskan
+URI saluran, setel ke saluran yang ditetapkan URI. Beri tahu sistem bahwa
+aplikasi Anda telah disetel ke saluran yang diinginkan dengan memanggil <code>notifyTuned()</code>,
+atau, jika aplikasi Anda tidak bisa disetel ke saluran yang tepat, panggil
+<code>notifyError()</code>.</p>
+
+<p>Sistem berikutnya akan memanggil callback <code>RecordingSession.onStartRecording()</code>.
+ Aplikasi Anda harus segera mulai merekam. Bila sistem memanggil
+callback ini, sistem mungkin akan memberikan URI yang berisi informasi tentang program
+yang akan direkam. Bila perekaman selesai, Anda perlu menyalin data
+ini ke tabel data <code>RecordedPrograms</code>.</p>
+
+<p>Terakhir, sistem akan memanggil <code>RecordingSession.onStopRecording()</code>.
+Pada tahap ini, aplikasi Anda harus segera berhenti merekam. Anda juga perlu
+membuat entri dalam tabel <code>RecordedPrograms</code>. Entri ini harus
+menyertakan URI data sesi yang direkam dalam kolom
+<code>RecordedPrograms.COLUMN_RECORDING_DATA_URI</code>, dan informasi
+program yang diberikan sistem dalam panggilan awal ke
+<code>onStartRecording()</code>.</p>
+
+<p>Untuk detail selengkapnya tentang cara mengakses tabel <code>RecordedPrograms</code>
+lihat <a href="#sessions">Mengelola Sesi yang Direkam</a>.</p>
+
+<h2 id="errors">Menangani Kesalahan Perekaman</h2>
+
+<p>Jika terjadi kesalahan selama perekaman, yang menghasilkan data terekam yang tidak bisa digunakan,
+beri tahu sistem dengan memanggil <code>RecordingSession.notifyError()</code>.
+Begitu juga, Anda bisa memanggil <code>notifyError()</code> setelah sesi rekaman dibuat
+agar sistem mengetahui bahwa aplikasi Anda tidak bisa lagi merekam sesi.</p>
+
+<p>Jika terjadi kesalahan selama perekaman, namun Anda ingin menyediakan rekaman parsial
+yang bisa digunakan pengguna untuk pemutaran, panggil
+<code>RecordingSession.notifyRecordingStopped()</code> untuk memungkinkan sistem
+menggunakan sesi parsial.</p>
+
+<h2 id="sessions">Mengelola Sesi yang Direkam</h2>
+
+<p>Sistem menyimpan informasi untuk semua sesi yang direkam dari semua
+aplikasi saluran yang mampu merekam dalam tabel penyedia materi <code>TvContract.RecordedPrograms</code>.
+ Informasi ini bisa diakses lewat URI materi
+<code>RecordedPrograms.Uri</code>. Gunakan API penyedia materi untuk
+membaca, menambahkan, dan menghapus entri dari tabel ini.</p>
+
+<p>Untuk informasi selengkapnya tentang menangani data penyedia materi, lihat
+<a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
+Dasar-Dasar Penyedia Materi</a>.</p>
+
+<h2 id="best">Praktik Terbaik</h2>
+
+<p>Perangkat TV mungkin memiliki penyimpanan terbatas, jadi pertimbangkan sebaik mungkin saat
+mengalokasikan penyimpanan untuk menyimpan sesi rekaman. Gunakan
+<code>RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)</code> bila
+tidak cukup ruang untuk menyimpan sesi rekaman.</p>
+
+<p>Bila pengguna memulai perekaman, Anda harus memulai perekaman data
+secepatnya. Untuk memfasilitasinya, selesaikan setiap tugas yang memakan waktu di awal,
+seperti mengakses dan mengalokasikan ruang penyimpanan, saat sistem memanggil callback
+<code>onCreateRecordingSession()</code>. Hal ini akan memungkinkan Anda memulai
+perekaman dengan segera bila callback <code>onStartRecording()</code>
+dipicu.</p>
diff --git a/docs/html-intl/intl/in/about/versions/marshmallow/android-6.0-testing.jd b/docs/html-intl/intl/in/about/versions/marshmallow/android-6.0-testing.jd
new file mode 100644
index 0000000..94bc74c
--- /dev/null
+++ b/docs/html-intl/intl/in/about/versions/marshmallow/android-6.0-testing.jd
@@ -0,0 +1,190 @@
+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/android-7.0-changes.jd b/docs/html-intl/intl/in/about/versions/nougat/android-7.0-changes.jd
new file mode 100644
index 0000000..af01cd2
--- /dev/null
+++ b/docs/html-intl/intl/in/about/versions/nougat/android-7.0-changes.jd
@@ -0,0 +1,610 @@
+page.title=Perubahan Perilaku
+page.keywords=pratinjau,sdk,kompatibilitas
+meta.tags="preview", "compatibility"
+page.tags="preview", "developer preview"
+page.image=images/cards/card-n-changes_2x.png
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>Dalam dokumen ini</h2>
+
+<ol>
+ <li><a href="#perf">Peningkatan Kinerja</a>
+ <ol>
+ <li><a href="#doze">Istirahatkan</a></li>
+ <li><a href="#bg-opt">Optimalisasi Latar Belakang</a></li>
+ </ol>
+ </li>
+ <li><a href="#perm">Perubahan Izin</a>
+ </li>
+ <li><a href="#sharing-files">Berbagi File Antar Aplikasi</a></li>
+ <li><a href="#accessibility">Peningkatan Aksesibilitas</a>
+ <ol>
+ <li><a href="#screen-zoom">Perbesaran Layar</a></li>
+ <li><a href="#vision-settings">Vision Settings di Setup Wizard</a></li>
+ </ol>
+ </li>
+ <li><a href="#ndk">Penautan Aplikasi NDK ke Pustaka Platform</a></li>
+ <li><a href="#afw">Android for Work</a></li>
+ <li><a href="#annotations">Retensi Anotasi</a></li>
+ <li><a href="#other">Poin Penting Lainnya</a></li>
+</ol>
+
+<h2>Lihat Juga</h2>
+<ol>
+ <li><a href="{@docRoot}preview/api-overview.html">
+ Ringkasan Android N API</a></li>
+</ol>
+
+</div>
+</div>
+
+
+<p>
+ Bersama fitur dan kemampuan baru, Android N
+ menyertakan berbagai macam perubahan sistem dan perubahan perilaku API. Dokumen ini
+ menyoroti beberapa perubahan utama yang harus dipahami dan diperhitungkan
+ dalam aplikasi Anda.
+</p>
+
+<p>
+ Jika Anda sebelumnya telah mempublikasikan aplikasi untuk Android, ketahuilah bahwa aplikasi Anda
+ mungkin dipengaruhi oleh perubahan dalam platform.
+</p>
+
+
+<h2 id="perf">Baterai dan Memori</h2>
+
+<p>
+Android N menyertakan perubahan perilaku sistem yang bertujuan untuk meningkatkan daya tahan baterai
+perangkat dan mengurangi penggunaan RAM. Perubahan ini bisa memengaruhi akses aplikasi Anda ke
+sumber daya sistem, termasuk cara aplikasi Anda berinteraksi dengan aplikasi lain melalui
+intent implisit tertentu.
+</p>
+
+<h3 id="doze">Istirahatkan</h3>
+
+<p>
+ Diperkenalkan dalam Android 6.0 (API level 23), Istirahatkan meningkatkan daya tahan baterai dengan
+ menangguhkan aktivitas CPU dan jaringan bila pengguna tidak mencabut perangkat,
+ tidak bergerak, dan layar dinonaktifkan. Android N lebih
+ menyempurnakan Istirahatkan dengan menerapkan subset CPU dan pembatasan jaringan
+ bila perangkat dicabut dan layar dinonaktifkan, namun tidak harus
+ diam, misalnya, bila handset dibawa bepergian di saku pengguna.
+</p>
+
+
+<img src="{@docRoot}images/android-7.0/doze-diagram-1.png" alt="" height="251px" id="figure1" />
+<p class="img-caption">
+ <strong>Gambar 1.</strong> Ilustrasi tentang cara Istirahatkan menerapkan pembatasan
+ aktivitas sistem level pertama untuk meningkatkan daya tahan baterai.
+</p>
+
+<p>
+ Bila perangkat sedang menggunakan daya baterai, dan layar telah nonaktif selama jangka waktu
+ tertentu, perangkat akan memasuki Istirahatkan dan menerapkan subset pembatasan pertama: Perangkat
+ akan menutup akses jaringan aplikasi, serta menangguhkan pekerjaan dan sinkronisasi. Jika perangkat sedang
+ diam selama jangka waktu tertentu setelah memasuki Istirahatkan, sistem akan menerapkan
+ pembatasan Istirahatkan selebihnya terhadap alarm {@link android.os.PowerManager.WakeLock},
+ {@link android.app.AlarmManager}, GPS, dan pemindaian Wi-Fi. Tidak peduli
+ apakah sebagian atau semua pembatasan Istirahatkan diterapkan, sistem akan membangunkan
+ perangkat selama jeda pemeliharaan singkat, dan selama itu aplikasi diizinkan
+ mengakses jaringan dan bisa mengeksekusi semua pekerjaan/sinkronisasi yang telah ditangguhkan.
+</p>
+
+
+<img src="{@docRoot}images/android-7.0/doze-diagram-2.png" alt="" id="figure2" />
+<p class="img-caption">
+ <strong>Gambar 2.</strong> Ilustrasi tentang cara Istirahatkan menerapkan pembatasan
+ aktivitas sistem level kedua setelah perangkat diam selama jangka waktu tertentu.
+</p>
+
+<p>
+ Perhatikan, mengaktifkan layar atau mencolokkan steker perangkat akan mengeluarkan dari Istirahatkan
+ dan membuang pembatasan pemrosesan ini. Perilaku tambahan ini tidak
+ memengaruhi rekomendasi dan praktik terbaik dalam menyesuaikan aplikasi Anda dengan versi
+ Istirahatkan sebelumnya yang diperkenalkan dalam Android 6.0 (API level 23), seperti yang dibahas di
+ <a href="{@docRoot}training/monitoring-device-state/doze-standby.html">
+ Mengoptimalkan untuk Istirahatkan dan Aplikasi Siaga</a>. Anda tetap harus
+ mengikuti rekomendasi itu, seperti menggunakan Google Cloud Messaging (GCM) untuk
+ mengirim dan menerima pesan, serta mulai merencanakan pembaruan
+ untuk mengakomodasi perilaku Istirahatkan tambahan.
+</p>
+
+
+<h3 id="bg-opt">Project Svelte: Optimalisasi Latar Belakang</h3>
+
+<p>
+ Android N membuang tiga siaran implisit untuk membantu mengoptimalkan
+ penggunaan memori dan konsumsi daya. Perubahan ini penting karena siaran
+ implisit sering memulai aplikasi yang telah didaftarkan untuk mendengarkannya di
+ latar belakang. Membuang siaran ini bisa sangat menguntungkan
+ kinerja perangkat dan pengalaman pengguna.
+</p>
+
+<p>
+ Perangkat seluler seringkali mengalami perubahan konektivitas, seperti saat berpindah
+ antara Wi-Fi dan data seluler. Saat ini, aplikasi bisa memantau perubahan dalam
+ konektivitas dengan mendaftarkan suatu penerima untuk siaran implisit {@link
+ android.net.ConnectivityManager#CONNECTIVITY_ACTION} dalam manifes
+ mereka. Karena banyak aplikasi yang didaftarkan untuk menerima siaran ini, switch jaringan tunggal
+ bisa menyebabkan semuanya aktif dan memproses siaran tersebut
+ secara bersamaan.
+</p>
+
+<p>
+ Demikian pula, dalam Android versi sebelumnya, aplikasi bisa mendaftar untuk menerima siaran implisit {@link
+ android.hardware.Camera#ACTION_NEW_PICTURE} dan {@link
+ android.hardware.Camera#ACTION_NEW_VIDEO} dari aplikasi lain, seperti
+ Kamera. Bila pengguna mengambil gambar dengan aplikasi Kamera, semua aplikasi ini akan aktif
+ untuk memproses siaran.
+</p>
+
+<p>
+ Untuk meminimalkan masalah ini, Android N menerapkan optimalisasi
+ berikut:
+</p>
+
+<ul>
+ <li>Aplikasi yang menargetkan Android N tidak menerima siaran {@link
+ android.net.ConnectivityManager#CONNECTIVITY_ACTION}, sekalipun
+ memiliki entri manifes untuk meminta pemberitahuan mengenai kejadian ini. Aplikasi
+ yang berjalan tetap bisa mendengarkan {@code CONNECTIVITY_CHANGE} pada thread utama
+ jika mereka meminta pemberitahuan dengan {@link android.content.BroadcastReceiver}.
+ </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, bukan hanya aplikasi yang menargetkan Android N.
+ </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} API menyediakan mekanisme yang tangguh untuk menjadwalkan
+ operasi jaringan bila kondisi yang ditetapkan, seperti koneksi ke jaringan
+ berbiaya tetap, terpenuhi. Anda juga dapat menggunakan {@link
+ android.app.job.JobScheduler} untuk bereaksi terhadap perubahan pada penyedia materi.
+</p>
+
+<p>
+ Untuk informasi selengkapnya tentang optimalisasi latar belakang di N dan cara menyesuaikan aplikasi Anda,
+ lihat <a href="{@docRoot}preview/features/background-optimization.html">Optimalisasi
+ Latar Belakang</a>.
+</p>
+
+<h2 id="perm">Perubahan Izin</h2>
+
+<p>
+ Android N menyertakan perubahan pada izin yang bisa memengaruhi aplikasi Anda.
+</p>
+
+<h3 id="permfilesys">Perubahan izin sistem file</h3>
+
+<p>
+ Guna meningkatkan keamanan file privat, direktori privat
+ aplikasi yang menargetkan Android N atau yang lebih tinggi memiliki akses terbatas (<code>0700</code>).
+ Pengaturan ini mencegah kebocoran metadata dari file privat, seperti ukuran
+ atau eksistensi. Perubahan izin ini memiliki beberapa efek samping:
+</p>
+
+<ul>
+ <li>
+ Izin file privat tidak boleh dianggap remeh oleh pemilik,
+ dan usaha untuk melakukannya menggunakan
+ {@link android.content.Context#MODE_WORLD_READABLE} dan/atau
+ {@link android.content.Context#MODE_WORLD_WRITEABLE}, akan memicu sebuah
+ {@link java.lang.SecurityException}.
+ <p class="note">
+ <strong>Catatan:</strong> Seperti sebelumnya, pembatasan ini tidak sepenuhnya diterapkan.
+ Aplikasi mungkin masih memodifikasi izin ke direktori privat mereka menggunakan
+ API asal atau {@link java.io.File File} API. Akan tetapi, kami sangat
+ tidak menyarankan Anda meremehkan izin direktori privat.
+ </p>
+ </li>
+ <li>
+ Meneruskan URI <code>file://</code> di luar domain paket dapat meninggalkan
+ penerima dengan jalur yang tidak bisa di akses. Karena itu, upaya untuk meneruskan URI
+ <code>file://</code> akan memicu
+ <code>FileUriExposedException</code>. Cara yang disarankan adalah
+ materi file privat menggunakan {@link
+ android.support.v4.content.FileProvider}.
+ </li>
+ <li>
+ {@link android.app.DownloadManager} tidak bisa lagi berbagi
+ file yang tersimpan secara privat berdasarkan nama file. Aplikasi lawas dapat mengakibatkan
+ jalur yang tidak dapat diakses saat mengakses {@link
+ android.app.DownloadManager#COLUMN_LOCAL_FILENAME}. Aplikasi yang menargetkan
+ Android N atau yang lebih tinggi akan memicu {@link java.lang.SecurityException} saat
+ berupaya mengakses
+ {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}.
+ Aplikasi lawas yang menyetel lokasi unduhan ke lokasi publik dengan
+ menggunakan
+ {@link
+ android.app.DownloadManager.Request#setDestinationInExternalFilesDir
+ DownloadManager.Request.setDestinationInExternalFilesDir()} atau
+ {@link
+ android.app.DownloadManager.Request#setDestinationInExternalPublicDir
+ DownloadManager.Request.setDestinationInExternalPublicDir()}
+ tetap bisa mengakses jalur tersebut di
+ {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}, akan tetapi,
+ metode ini sangat tidak disarankan. Cara yang disarankan untuk mengakses file
+ yang diekspos oleh {@link android.app.DownloadManager} adalah menggunakan
+ {@link android.content.ContentResolver#openFileDescriptor
+ ContentResolver.openFileDescriptor()}.
+ </li>
+</ul>
+
+<h2 id="sharing-files">Berbagi File Antar Aplikasi</h2>
+
+<p>
+Untuk aplikasi yang menargetkan Android N, kerangka kerja Android menerapkan
+kebijakan {@link android.os.StrictMode} API yang melarang mengekspos URI {@code file://}
+di luar aplikasi Anda. Jika sebuah intent berisi URI file meninggalkan aplikasi Anda, aplikasi tersebut akan gagal
+dengan pengecualian {@code FileUriExposedException}.
+</p>
+
+<p>
+Untuk berbagi file antar aplikasi, Anda harus mengirim URI {@code content://}
+dan memberikan izin akses sementara pada URI. Cara termudah untuk memberikan izin ini adalah dengan
+menggunakan kelas {@link android.support.v4.content.FileProvider}. Untuk informasi selengkapnya
+mengenai izin dan berbagi file,
+lihat <a href="{@docRoot}training/secure-file-sharing/index.html">Berbagi File</a>.
+</p>
+
+<h2 id="accessibility">Peningkatan Aksesibilitas</h2>
+
+<p>
+ Android N menyertakan perubahan yang bertujuan meningkatkan kegunaan
+ platform untuk pengguna dengan penglihatan yang rendah atau lemah. Perubahan ini umumnya tidak
+ memerlukan perubahan kode dalam aplikasi Anda, akan tetapi Anda harus memeriksa
+ fitur ini dan mengujinya dengan aplikasi untuk menilai kemungkinan dampaknya terhadap pengalaman
+ pengguna.
+</p>
+
+
+<h3 id="screen-zoom">Perbesaran Layar</h3>
+
+<p>
+ Android N memungkinkan pengguna menyetel <strong>Display size</strong> yang akan memperbesar
+ atau memperkecil semua elemen pada layar, sehingga meningkatkan aksesibilitas perangkat
+ bagi pengguna yang kurang melihat. Pengguna tidak bisa memperbesar layar melewati lebar layar
+ minimum <a href="http://developer.android.com/guide/topics/resources/providing-resources.html">
+ sw320dp</a>, yang merupakan lebar Nexus 4, yakni ponsel ukuran sedang pada umumnya.
+</p>
+
+<div class="cols">
+
+<div class="col-6">
+ <img src="{@docRoot}images/android-7.0/screen-zoom-1.png" alt="" height="XXX" id="figure1" />
+</div>
+<div class="col-6">
+ <img src="{@docRoot}images/android-7.0/screen-zoom-2.png" alt="" height="XXX" id="figure1" />
+</div>
+
+</div> <!-- end cols -->
+<p class="img-caption">
+ <strong>Gambar 3.</strong> Layar di sebelah kanan menampilkan efek
+ penambahan Display size perangkat yang menjalankan citra sistem Android N.
+</p>
+
+
+<p>
+ Bila kepadatan perangkat berubah, sistem akan memberi tahu aplikasi yang sedang berjalan dengan
+ cara berikut:
+</p>
+
+<ul>
+ <li>Jika aplikasi menargetkan API level 23 atau yang lebih rendah, sistem secara otomatis akan mematikan
+ semua proses latar belakang. Artinya, jika pengguna beralih dari
+ aplikasi tersebut untuk membuka layar <em>Settings</em> dan mengubah
+ setelan <strong>Display size</strong>, maka sistem akan mematikan aplikasi tersebut dengan cara yang
+ sama dengan saat memori tinggal sedikit. Jika aplikasi memiliki beberapa proses
+ latar depan, sistem akan memberi tahu proses tersebut mengenai perubahan konfigurasi seperti
+ dijelaskan dalam <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Menangani Perubahan
+ Waktu Proses</a>, seolah-olah orientasi perangkat telah berubah.
+ </li>
+
+ <li>Jika sebuah aplikasi menargetkan Android N, semua prosesnya
+ (latar depan dan latar belakang) akan diberi tahu mengenai perubahan konfigurasi seperti
+ dijelaskan dalam <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Menangani Perubahan
+ Waktu Proses</a>.
+ </li>
+</ul>
+
+<p>
+ Sebagian besar aplikasi tidak perlu melakukan perubahan untuk mendukung fitur ini, asalkan
+ aplikasi tersebut mengikuti praktik terbaik Android. Hal-hal tertentu yang harus diperiksa:
+</p>
+
+<ul>
+ <li>Uji aplikasi Anda pada perangkat dengan lebar layar <code><a href=
+ "{@docRoot}guide/topics/resources/providing-resources.html">sw320dp</a></code>
+ dan pastikan aplikasi berjalan dengan semestinya.
+ </li>
+
+ <li>Bila konfigurasi perangkat berubah, perbarui informasi cache
+ yang bergantung pada kepadatan, seperti bitmap di cache atau sumber daya yang dimuat dari
+ jaringan. Periksa perubahan konfigurasi bila aplikasi melanjutkan dari status dihentikan
+ sementara.
+ <p class="note">
+ <strong>Catatan:</strong> Catatan: Jika Anda meng-cache data yang bergantung pada konfigurasi, ada
+ baiknya untuk menyertakan metadata yang relevan seperti ukuran layar
+ atau kepadatan piksel yang sesuai untuk data tersebut. Menyimpan metadata ini memungkinkan Anda untuk
+ memutuskan apakah Anda perlu segarkan data cache setelah perubahan
+ konfigurasi.
+ </p>
+ </li>
+
+ <li>Hindari menetapkan dimensi dengan satuan px, karena satuan ini tidak diskalakan dengan
+ kepadatan layar. Sebagai gantinya, tetapkan dimensi dengan satuan <a href="{@docRoot}guide/practices/screens_support.html">piksel yang tidak bergantung kepadatan
+ </a> (<code>dp</code>).
+ </li>
+</ul>
+
+<h3 id="vision-settings">Vision Settings di Setup Wizard</h3>
+
+<p>
+ Android N menyertakan Vision Settings di layar Sambutan, di mana pengguna bisa
+ menyiapkan setelan aksesibilitas berikut pada perangkat baru:
+ <strong>Magnification gesture</strong>, <strong>Font size</strong>,
+ <strong>Display size</strong> dan <strong>TalkBack</strong>. Perubahan ini
+ meningkatkan visibilitas bug terkait dengan setelan layar yang berbeda. Untuk
+ mengurangi dampak fitur ini, Anda harus menguji aplikasi dengan setelan ini
+ diaktifkan. Anda bisa menemukannya pada <strong>Settings >
+ Accessibility</strong>.
+</p>
+
+<h2 id="ndk">Penautan Aplikasi NDK ke Pustaka Platform</h2>
+
+<p>
+ Android N menyertakan perubahan ruang nama untuk mencegah pemuatan API non-publik.
+ Jika menggunakan NDK, Anda hanya boleh menggunakan API publik dari platform
+ Android. Menggunakan API non-publik dalam rilis Android resmi berikutnya
+ bisa menyebabkan aplikasi mogok.
+</p>
+
+<p>
+ Untuk memberi tahu Anda agar menggunakan API non-publik, aplikasi yang berjalan pada perangkat
+ Android N akan menghasilkan kesalahan dalam keluaran logcat bila aplikasi memanggil API non-publik.
+ Kesalahan ini juga ditampilkan di layar perangkat berupa pesan untuk membantu
+ meningkatkan kepedulian terhadap situasi ini. Anda harus memeriksa kode aplikasi untuk
+ membuang penggunaan API platform non-publik dan secara saksama menguji aplikasi Anda menggunakan
+ perangkat pratinjau atau emulator.
+</p>
+
+<p>
+ Jika aplikasi Anda bergantung pada pustaka platform, lihat dokumentasi NDK untuk
+ perbaikan tipikal guna menggantikan API privat umum dengan padanan API publik.
+ Anda mungkin juga menautkan ke pustaka platform tanpa menyadarinya,
+ terutama jika aplikasi Anda menggunakan pustaka yang merupakan bagian dari platform ini (seperti
+ <code>libpng</code>), namun bukan bagian dari NDK. Dalam hal itu, pastikan
+ APK Anda berisi semua file .so yang ingin ditautkan.
+</p>
+
+<p class="caution">
+ <strong>Perhatian:</strong> Beberapa pustaka pihak ketiga mungkin menautkan ke API
+ non-publik. Jika menggunakan pustaka ini, aplikasi Anda bisa mogok saat dijalankan
+ pada rilis resmi Android berikutnya.
+</p>
+
+<p>
+ Aplikasi tidak boleh bergantung pada atau menggunakan pustaka bawaan yang tidak disertakan dalam
+ NDK, karena bisa mengalami perubahan, atau dipindahkan dari satu rilis Android ke
+ rilis lainnya. Peralihan dari OpenSSL ke BoringSSL merupakan satu contoh dari perubahan semacam ini.
+ Selain itu, perangkat yang berbeda bisa menawarkan tingkat kompatibilitas yang berbeda, karena
+ tidak ada persyaratan kompatibilitas untuk pustaka platform yang tidak disertakan
+ dalam NDK. Jika Anda harus mengakses pustaka non-NDK pada perangkat yang lebih lama, jadikan
+ pemuatan bergantung pada level Android API.
+</p>
+
+<p>
+ Untuk membantu Anda mendiagnosis tipe masalah ini ada beberapa contoh kesalahan Java dan NDK
+ yang mungkin Anda temui saat berusaha membangun aplikasi dengan Android N:
+</p>
+
+<p>Contoh kesalahan Java:</p>
+<pre class="no-pretty-print">
+java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so"
+ is not accessible for the namespace "classloader-namespace"
+</pre>
+
+<p>Contoh kesalahan NDK:</p>
+<pre class="no-pretty-print">
+dlopen failed: cannot locate symbol "__system_property_get" referenced by ...
+</pre>
+
+
+<p>
+ Inilah beberapa perbaikan tipikal untuk aplikasi yang mengalami tipe kesalahan ini:
+</p>
+
+<ul>
+ <li>Penggunaan getJavaVM dan getJNIEnv dari libandroid_runtime.so bisa diganti
+ dengan fungsi JNI standar:
+<pre class="no-pretty-print">
+AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h>
+AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or
+JavaVM::AttachCurrentThread from <jni.h>.
+</pre>
+ </li>
+
+ <li>Penggunaan simbol {@code property_get} dari {@code libcutils.so} bisa
+ diganti dengan {@code alternative __system_property_get} publik.
+ Caranya, gunakan {@code __system_property_get} dengan menyertakan yang berikut:
+<pre>
+#include <sys/system_properties.h>
+</pre>
+ </li>
+
+ <li>Penggunaan simbol {@code SSL_ctrl} dari {@code libcrypto.so} harus
+ diganti dengan aplikasi versi lokal. Misalnya, Anda harus menautkan
+ {@code libcyrpto.a} secara statis dalam file {@code .so} atau menyertakan
+ {@code libcrypto.so} Anda sendiri secara dinamis dari BoringSSL atau OpenSSL dalam aplikasi Anda.
+ </li>
+</ul>
+
+<h2 id="afw">Android for Work</h2>
+<p>
+ Android N berisi perubahan untuk aplikasi yang menargetkan Android for Work, termasuk
+ perubahan pada pemasangan sertifikat, penyetelan ulang sandi, manajemen pengguna
+ tambahan, dan akses ke identifier perangkat. Jika Anda membangun aplikasi untuk
+ lingkungan Android for Work, Anda harus meninjau perubahan ini dan memodifikasi
+ aplikasi sebagaimana mestinya.
+</p>
+
+<ul>
+ <li>Anda harus pasang pemasang sertifikat yang didelegasikan sebelum DPC bisa
+ menyetelnya. Untuk aplikasi profil dan aplikasi pemilik perangkat yang menargetkan N SDK, Anda harus
+ pasang pemasang sertifikat yang didelegasikan sebelum pengontrol kebijakan
+ perangkat (DPC) memanggil
+ <code>DevicePolicyManager.setCertInstallerPackage()</code>. Jika pemasang
+ belum dipasang, sistem akan melontarkan
+ <code>IllegalArgumentException</code>.
+ </li>
+
+ <li>Pembatasan sandi penyetelan ulang untuk admin perangkat sekarang diterapkan ke pemilik
+ profil. Admin perangkat tidak bisa lagi menggunakan
+ {@code DevicePolicyManager.resetPassword()} untuk menghapus sandi atau mengubah
+ sandi yang sudah disetel. Admin perangkat tetap bisa menyetel sandi, namun hanya
+ bila perangkat belum memiliki sandi, PIN, atau pola.
+ </li>
+
+ <li>Pemilik perangkat dan profil bisa mengelola akun meskipun pembatasan
+ telah disetel. Pemilik perangkat dan pemilik profil bisa memanggil Account Management API
+ sekalipun pembatasan pengguna <code>DISALLOW_MODIFY_ACCOUNTS</code> diberlakukan.
+ </li>
+
+ <li>Pemilik perangkat bisa mengelola pengguna tambahan lebih mudah. Bila perangkat
+ berjalan dalam mode pemilik perangkat, maka pembatasan <code>DISALLOW_ADD_USER</code>
+ secara otomatis akan ditetapkan. Ini mencegah pengguna membuat pengguna tambahan yang
+ tidak terkelola. Selain itu, <code>CreateUser()</code> dan
+ <code>createAndInitializeUser()</code> metode tidak digunakan lagi; metode
+ <code>DevicePolicyManager.createAndManageUser()</code> telah menggantikannya.
+ </li>
+
+ <li>Pemilik perangkat bisa mengakses identifier perangkat. Pemilik perangkat bisa mengakses
+ alamat MAC Wi-Fi dari perangkat, menggunakan
+ <code>DevicePolicyManagewr.getWifiMacAddress()</code>. Jika Wi-Fi belum pernah
+ diaktifkan pada perangkat tersebut, metode ini akan mengembalikan nilai {@code null}.
+ </li>
+
+ <li>Setelan Mode Kerja mengontrol akses ke aplikasi kerja. Bila mode kerja tidak aktif, peluncur sistem
+ akan menunjukkan aplikasi kerja tidak tersedia dengan membuat warnanya jadi abu-abu. Mengaktifkan kembali
+ mode kerja akan memulihkan perilaku normal.
+</ul>
+
+<p>
+ Untuk informasi selengkapnya tentang perubahan Android for Work di Android N, lihat
+ <a href="{@docRoot}preview/features/afw.html">Pembaruan Android for Work</a>.
+</p>
+
+<h2 id="annotations">Retensi Anotasi</h2>
+
+<p>
+Android N memperbaiki bug dengan visibilitas anotasi diabaikan.
+Masalah ini mengaktifkan waktu proses untuk mengakses anotasi yang seharusnya tidak bisa
+dilakukan. Anotasi ini termasuk:
+</p>
+
+<ul>
+ <li>{@code VISIBILITY_BUILD}: Dimaksudkan agar hanya bisa terlihat pada waktu pembuatan.</li>
+ <li>{@code VISIBILITY_SYSTEM}: Dimaksud agar bisa terlihat pada waktu proses, namun hanya pada
+ sistem yang mendasarinya.</li>
+</ul>
+
+<p>
+Jika aplikasi Anda mengandalkan perilaku ini, tambahkan kebijakan retensi untuk anotasi yang harus
+tersedia di waktu proses. Caranya dengan menggunakan {@code @Retention(RetentionPolicy.RUNTIME)}.
+</p>
+
+<h2 id="other">Poin Penting Lainnya</h2>
+
+<ul>
+<li>Bila aplikasi berjalan pada Android N, namun menargetkan level API yang lebih rendah,
+dan pengguna mengubah ukuran tampilan, proses aplikasi akan dimatikan. Aplikasi
+harus dapat menangani skenario ini dengan lancar. Jika tidak, maka akan mogok
+bila pengguna memulihkannya dari Recents.
+
+<p>
+Anda harus menguji aplikasi untuk memastikan
+perilaku ini tidak terjadi.
+Anda bisa melakukannya dengan menyebabkan suatu mogok yang identik
+saat mematikan aplikasi secara manual melalui DDMS.
+</p>
+
+<p>
+Aplikasi yang menargetkan N dan yang di atasnya tidak secara otomatis dimatikan saat perubahan kepadatan;
+akan tetapi, aplikasi tersebut mungkin tetap merespons perubahan konfigurasi dengan buruk.
+</p>
+</li>
+
+<li>
+Aplikasi pada Android N harus mampu menangani perubahan konfigurasi dengan lancar,
+dan tidak boleh mengalami mogok pada start selanjutnya. Anda bisa memverifikasi perilaku aplikasi
+dengan mengubah ukuran font (<strong>Setting</strong> >
+<strong>Display</strong> > <strong>Font size</strong>), kemudian memulihkan
+aplikasi dari Recents.
+</li>
+
+<li>
+Dikarenakan adanya bug di versi Android sebelumnya, sistem tidak menandai penulisan
+ ke soket TCP di thread utama sebagai pelanggaran mode-ketat. Android N memperbaiki bug ini.
+Aplikasi yang menunjukkan perilaku ini kini melontarkan sebuah {@code android.os.NetworkOnMainThreadException}.
+Secara umum, melakukan operasi jaringan di thread utama tidak baik karena operasi ini
+biasanya memiliki latensi tinggi yang menyebabkan ANR dan jank.
+</li>
+
+<li>
+Kelompok metode {@code Debug.startMethodTracing()} kini default ke
+keluaran penyimpanan di direktori paket tertentu di penyimpanan bersama,
+sebagai ganti di level teratas
+kartu SD. Berarti aplikasi tidak perlu lagi meminta izin {@code WRITE_EXTERNAL_STORAGE} untuk menggunakan API ini.
+</li>
+
+<li>
+Banyak platform API yang kini mulai memeriksa beban besar yang dikirim
+ke seluruh transaksi {@link android.os.Binder}, dan sistem
+kini melontarkan kembali {@code TransactionTooLargeExceptions}
+sebagai {@code RuntimeExceptions}, sebagai ganti logging secara diam-diam atau menyembunyikannya. Satu contoh
+umum adalah menyimpan terlalu banyak data di
+{@link android.app.Activity#onSaveInstanceState Activity.onSaveInstanceState()},
+yang menyebabkan {@code ActivityThread.StopInfo} melontarkan
+{@code RuntimeException} bila aplikasi Anda menargetkan Android N.
+</li>
+
+<li>
+Jika sebuah aplikasi mengeposkan tugas {@link java.lang.Runnable} ke{@link android.view.View}, dan
+{@link android.view.View}
+tidak terpasang ke jendela, sistem
+akan mengantrekan tugas {@link java.lang.Runnable} dengan {@link android.view.View};
+tugas {@link java.lang.Runnable} tidak akan dieksekusi hingga
+{@link android.view.View} terpasang
+ke jendela. Perilaku ini mengatasi bug berikut:
+<ul>
+ <li>Jika sebuah aplikasi mengeposkan ke {@link android.view.View} dari thread selain thread UI jendela yang dimaksud,
+ maka {@link java.lang.Runnable} mungkin akan menjalankan thread yang salah.
+ </li>
+ <li>Jika tugas {@link java.lang.Runnable} diposkan dari thread selain
+ looper-thread, aplikasi bisa mengekspos tugas {@link java.lang.Runnable}.</li>
+</ul>
+</li>
+
+<li>
+Jika sebuah aplikasi di Android N dengan
+izin{@link android.Manifest.permission#DELETE_PACKAGES DELETE_PACKAGES}
+mencoba menghapus sebuah paket, namun sebuah aplikasi berbeda telah memasang paket itu,
+sistem akan memerlukan konfirmasi pengguna. Dalam skenario ini, aplikasi harus mengharapkan
+{@link android.content.pm.PackageInstaller#STATUS_PENDING_USER_ACTION STATUS_PENDING_USER_ACTION}
+sebagai status kembalian bila memanggil
+{@link android.content.pm.PackageInstaller#uninstall PackageInstaller.uninstall()}.
+</li>
+
+</ul>
+
diff --git a/docs/html-intl/intl/in/about/versions/nougat/android-7.0-samples.jd b/docs/html-intl/intl/in/about/versions/nougat/android-7.0-samples.jd
new file mode 100644
index 0000000..d31c0c0
--- /dev/null
+++ b/docs/html-intl/intl/in/about/versions/nougat/android-7.0-samples.jd
@@ -0,0 +1,85 @@
+page.title=Contoh
+page.tags="preview", "samples", "android"
+page.image=images/cards/card-n-samples_2x.png
+@jd:body
+
+<p>
+ Contoh kode berikut disediakan untuk Android N. Untuk
+ mengunduh contoh di Android Studio, pilih opsi menu <b>File > Import
+ Samples</b>.
+</p>
+
+<p class="note">
+ <strong>Catatan:</strong> Proyek yang bisa diunduh ini didesain
+ untuk digunakan bersama Gradle dan Android Studio.
+</p>
+
+
+<h3 id="mw">Playground Multi-Jendela</h3>
+<img src="{@docRoot}images/android-7.0/sample-multiwindow.png" style="float: left; padding-right: 0.5em" height="250" width="156" />
+<p>
+ Contoh ini memperagakan cara memanfaatkan antarmuka pengguna
+ multi-jendela bersama aplikasi Anda.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-MultiWindowPlayground">
+ Dapatkan di GitHub</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="an">Pemberitahuan Aktif</h3>
+<img src="{@docRoot}images/android-7.0/sample-activenotifications.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ Ini adalah contoh yang sudah ada sebelumnya, menampilkan layanan sederhana yang mengirimkan
+ pemberitahuan menggunakan NotificationCompat. Setiap percakapan yang belum dibaca dari pengguna
+ dikirimkan sebagai pemberitahuan berbeda.
+</p>
+<p>
+ Contoh ini telah diperbarui untuk memanfaatkan fitur pemberitahuan baru
+ yang tersedia di Android N.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-ActiveNotifications">
+ Dapatkan di GitHub</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="ms">Layanan Perpesanan</h3>
+<img src="{@docRoot}images/android-7.0/sample-messagingservice.png" style="float: left; padding-right: 0.5em" height="250" width="150" />
+<p>
+ Ini adalah contoh yang telah ada sebelumnya yang memperagakan cara menggunakan
+ NotificationManager untuk memberi tahu jumlah pemberitahuan yang saat ini ditampilkan
+ oleh aplikasi.
+</p>
+<p>
+ Contoh ini telah diperbarui untuk memanfaatkan fitur pemberitahuan baru
+ yang tersedia di Android N.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-MessagingService">
+ Dapatkan di GitHub</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="fbe">Direct Boot</h3>
+<img src="{@docRoot}images/android-7.0/sample-directboot.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ Contoh ini memperagakan cara menyimpan dan mengakses data dalam penyimpanan yang dienkripsi
+ dengan perangkat yang selalu tersedia saat perangkat booting.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-DirectBoot">
+ Dapatkan di GitHub</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="sda">Scoped Directory Access</h3>
+<img src="{@docRoot}images/android-7.0/sample-scopeddirectoryaccess.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ Contoh ini memperagakan cara membaca dan menulis data dari direktori
+ spesifik, sekaligus meminta izin lebih sedikit.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-ScopedDirectoryAccess">
+ Dapatkan di GitHub</a>
+</p>
diff --git a/docs/html-intl/intl/in/about/versions/nougat/android-7.0.jd b/docs/html-intl/intl/in/about/versions/nougat/android-7.0.jd
new file mode 100644
index 0000000..ff8af12
--- /dev/null
+++ b/docs/html-intl/intl/in/about/versions/nougat/android-7.0.jd
@@ -0,0 +1,1039 @@
+page.title=Android N for Developers
+meta.tags="preview", "androidn"
+page.tags="preview", "developer preview"
+page.image=images/cards/card-n-apis_2x.png
+@jd:body
+
+
+
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>Fitur-fitur Utama bagi Pengembang</h2>
+ <ol>
+ <ul style="list-style-type:none;">
+ <li><a href="#multi-window_support">Dukungan Multi-Jendela</a></li>
+ <li><a href="#notification_enhancements">Pemberitahuan</a></li>
+ <li><a href="#jit_aot">Kompilasi JIT/AOT</a></li>
+ <li><a href="#quick_path_to_app_install">Jalur Cepat untuk Pasang Aplikasi</a></li>
+ <li><a href="#doze_on_the_go">Istirahatkan Kapan Saja</a></li>
+ <li><a href="#background_optimizations">Optimalisasi Latar Belakang</a></li>
+ <li><a href="#data_saver">Data Saver</a></li>
+ <li><a href="#vulkan">Vulkan API</a></li>
+ <li><a href="#tile_api">Quick Settings Tile API</a></li>
+ <li><a href="#number-blocking">Pemblokiran Nomor</a></li>
+ <li><a href="#call_screening">Penyaringan Panggilan</a></li>
+ <li><a href="#multi-locale_languages">Lokal dan Bahasa</a></li>
+ <li><a href="#emoji">Emoji Baru</a></li>
+ <li><a href="#icu4">ICU4J API di Android</a></li>
+ <li><a href="#gles_32">OpenGL ES 3.2 API</a></li>
+ <li><a href="#android_tv_recording">Perekaman Android TV</a></li>
+ <li><a href="#android_for_work">Android for Work</a></li>
+ <li><a href="#accessibility_enhancements">Aksesibilitas</a></li>
+ <li><a href="#direct_boot">Direct Boot</a></li>
+ <li><a href="#key_attestation">Key Attestation</a></li>
+ <li><a href="#network_security_config">Network Security Config</a></li>
+ <li><a href="#default_trusted_ca">CA Tepercaya Default</a></li>
+ <li><a href="#apk_signature_v2">APK Signature Scheme V2</a></li>
+ <li><a href="#scoped_directory_access">Scoped Directory Access</a></li>
+ <li><a href="#keyboard_shortcuts_helper">Keyboard Shortcuts Helper</a></li>
+ <li><a href="#sustained_performance_api">Sustained Performance API</a></li>
+ <li><a href="#vr">Dukungan VR</a></li>
+ <li><a href="#print_svc">Penyempurnaan Layanan Cetak</a></li>
+ <li><a href="#virtual_files">File Maya</a></li>
+ <li><a href="#framemetrics_api">FrameMetricsListener API</a></li>
+ </ol>
+</div>
+</div>
+
+
+
+<p>Android N masih dalam pengembangan aktif, namun Anda bisa mencobanya
+sekarang sebagai bagian dari N Developer Preview. Bagian-bagian di bawah ini akan menyoroti sebagian dari
+fitur baru untuk pengembang. </p>
+
+<p>
+ Pastikan memeriksa <a href="{@docRoot}preview/behavior-changes.html">Perubahan Perilaku</a> untuk mengetahui selengkapnya tentang
+ bagian-bagian perubahan platform yang bisa memengaruhi aplikasi Anda, lihatlah
+ panduan pengembang untuk mengetahui selengkapnya tentang fitur-fitur utama, dan unduh <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi API</a> untuk mengetahui detail tentang
+ API baru.
+</p>
+
+<h2 id="multi-window_support">Dukungan Multi-Jendela</h2>
+
+
+<p>Di Android N, kami memperkenalkan fitur multitasking baru dan yang banyak diminta
+ke dalam platform — dukungan multi-jendela. </p>
+
+ <p>Pengguna sekarang bisa membuka dua aplikasi sekaligus di layar. </p>
+ <ul>
+ <li>Pada ponsel dan tablet
+yang menjalankan Android N, pengguna bisa menjalankan dua aplikasi secara berdampingan atau
+satu aplikasi di atas yang lain dalam mode layar terbagi. Pengguna bisa mengubah ukuran aplikasi dengan menyeret
+pembagi di antara keduanya. </li>
+
+<li>Pada perangkat Android TV, aplikasi bisa menempatkan dirinya sendiri dalam <a href="{@docRoot}preview/features/picture-in-picture.html">mode
+gambar-dalam-gambar</a>, sehingga aplikasi bisa terus menampilkan materi sementara pengguna menjelajahi atau
+berinteraksi dengan aplikasi lain.</li>
+ </ul>
+
+<div class="col-4of10">
+<img src="{@docRoot}images/android-7.0/mw-portrait.png" alt="" style="height:460px;padding-left:1em;" id="img-split-screen" />
+<p class="img-caption">
+ <strong>Gambar 1.</strong> Aplikasi yang berjalan dalam mode layar terbagi.
+</p>
+
+ </div>
+
+<p>Khususnya pada tablet dan perangkat yang berlayar lebih besar lainnya, dukungan multi-jendela
+memberi Anda cara baru untuk memikat pengguna. Anda bahkan bisa mengaktifkan fitur seret-dan-lepas di
+aplikasi untuk memudahkan pengguna menyeret materi ke dan dari aplikasi — cara bagus
+untuk menyempurnakan pengalaman pengguna Anda. </p>
+
+<p>Tidak sulit menambahkan dukungan multi-jendela ke aplikasi Anda dan mengonfigurasi cara
+menangani tampilan multi-jendela. Misalnya, Anda bisa menetapkan dimensi
+minimum yang diizinkan aktivitas, sehingga mencegah pengguna mengubah ukuran aktivitas di bawah
+ukuran itu. Anda juga bisa menonaktifkan tampilan multi-jendela untuk aplikasi Anda, yang
+ akan memastikan sistem hanya menampilkan aplikasi dalam mode layar penuh.</p>
+
+<p>
+ Untuk informasi selengkapnya, lihat dokumentasi pengembang <a href="{@docRoot}preview/features/multi-window.html">Dukungan Multi-Jendela</a>.
+
+</p>
+
+<h2 id="notification_enhancements">Penyempurnaan Pemberitahuan</h2>
+
+<p>Di Android N kami telah mengubah desain pemberitahuan agar lebih mudah dan lebih cepat
+digunakan. Beberapa perubahan tersebut antara lain:</p>
+
+<ul>
+ <li>
+ <strong>Pembaruan template</strong>: Kami telah memperbarui template pemberitahuan untuk
+ lebih menekankan citra pahlawan dan avatar. Pengembang akan dapat
+ memanfaatkan template baru dengan penyesuaian kode yang minimal.
+ </li>
+
+ <li>
+ <strong>Penyesuaian gaya pesan</strong>: Anda bisa menyesuaikan lebih banyak
+ label antarmuka pengguna yang berkaitan dengan pemberitahuan Anda menggunakan kelas
+ <code>MessageStyle</code>. Anda bisa mengonfigurasi pesan, judul percakapan,
+ dan tampilan materi.
+ </li>
+
+ <li>
+ <strong>Bundel pemberitahuan</strong>: Sistem bisa mengelompokkan pesan,
+ misalnya menurut topik pesan, dan menampilkan kelompok pesan tersebut. Seorang pengguna bisa
+ bertindak, misalnya Tutup atau Arsipkan, atas pesan yang ditampilkan. Jika Anda sudah
+ mengimplementasikan pemberitahuan untuk Android Wear, Anda akan terbiasa dengan
+ model ini.
+ </li>
+
+ <li>
+ <strong>Balasan Langsung</strong>: Untuk aplikasi komunikasi real-time, sistem
+ Android mendukung balasan inline sehingga pengguna bisa dengan cepat membalas
+ SMS atau pesan teks secara langsung dari dalam antarmuka pemberitahuan.
+ </li>
+
+ <li>
+ <strong>Tampilan khusus</strong>: Dua API baru memungkinkan Anda memanfaatkan dekorasi sistem,
+ misalnya header pemberitahuan dan tindakan, saat menggunakan tampilan
+ khusus dalam pemberitahuan.
+ </li>
+</ul>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-1.png" alt="" style="padding:.5em;max-width:226px">
+</div>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-3.png" alt="" style="padding:.5em;max-width:226px">
+</div>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-2.png" alt="" style="padding:.5em;max-width:226px">
+</div>
+
+
+<p class="img-caption">
+ <strong>Gambar 2.</strong> Bundel pemberitahuan dan balasan langsung.
+</p>
+
+<p>Untuk mengetahui cara mengimplementasikan fitur-fitur
+ baru ini, lihat panduan <a href="{@docRoot}preview/features/notification-updates.html">Pemberitahuan</a>.
+</p>
+
+
+
+<h2 id="jit_aot">Kompilasi JIT/AOT yang dipandu profil</h2>
+
+<p>Di Android N, kami telah menambahkan compiler Just in Time (JIT) dengan pembuatan profil kode ke
+ART, yang memungkinkannya terus meningkatkan kinerja aplikasi Android saat
+dijalankan. Compiler JIT melengkapi compiler Ahead of Time (AOT) pada ART
+dan membantu memperbaiki kinerja waktu proses, menghemat ruang penyimpanan, dan mempercepat
+pembaruan aplikasi serta pembaruan sistem.</p>
+
+<p>Kompilasi yang dipandu profil memungkinkan ART mengelola kompilasi AOT/JIT untuk setiap aplikasi
+sesuai dengan penggunaan sebenarnya, serta kondisi pada perangkat. Misalnya
+,ART menyimpan profil setiap metode terbaik aplikasi dan bisa melakukan kompilasi lebih awal
+serta menyimpan sementara metode-metode tersebut di cache untuk mendapatkan kinerja terbaik. Hal ini membuat bagian lain dari aplikasi
+dibiarkan tidak dikompilasi hingga benar-benar digunakan.</p>
+
+<p>Di samping meningkatkan kinerja bagian-bagian penting aplikasi, kompilasi yang dipandu profil
+membantu mengurangi footprint RAM keseluruhan aplikasi, termasuk biner
+terkait. Fitur ini terutama penting pada perangkat dengan memori minim.</p>
+
+<p>ART mengelola kompilasi yang dipandu profil dengan cara yang meminimalkan dampak terhadap
+baterai perangkat. ART melakukan prakompilasi hanya bila perangkat sedang diam dan
+mengisi daya, sehingga menghemat waktu dan baterai dengan melakukan pekerjaan tersebut di awal.</p>
+
+<h2 id="quick_path_to_app_install">Jalur Cepat untuk Pasang Aplikasi</h2>
+
+<p>Salah satu manfaat paling nyata dari compiler JIT pada ART adalah kecepatan
+pemasnagan aplikasi dan pembaruan sistem. Bahkan aplikasi besar yang membutuhkan beberapa menit untuk
+dioptimalkan dan dipasang di Android 6.0 sekarang bisa dipasang hanya dalam hitungan
+detik. Pembaruan sistem juga lebih cepat, karena tidak ada lagi langkah optimalisasi. </p>
+
+<h2 id="doze_on_the_go">Istirahatkan Kapan Saja...</h2>
+
+<p>Android 6.0 memperkenalkan Istirahatkan, yaitu mode sistem yang menghemat baterai dengan menangguhkan
+aktivitas CPU dan jaringan di aplikasi bila perangkat sedang diam, misalnya saat
+diletakkan di atas meja atau dalam laci. </p>
+
+<p>Sekarang di Android N, Istirahatkan selangkah lebih maju dalam menghemat baterai kapan saja.
+Setiap kali layar mati dalam jangka waktu tertentu dan perangkat tidak terhubung ke sumber daya,
+Istirahatkan akan menerapkan subset pembatasan umum CPU dan jaringan pada aplikasi.
+Artinya pengguna bisa menghemat daya baterai meskipun perangkat dibawa di dalam
+tasnya.</p>
+
+
+<img src="/preview/images/doze-diagram-1.png" alt="" id="figure1" />
+<p class="img-caption">
+ <strong>Gambar 3.</strong> Istirahatkan sekarang menerapkan
+ pembatasan untuk meningkatkan daya tahan baterai bahkan saat perangkat sedang tidak diam.
+</p>
+
+
+<p>Tidak lama setelah layar dimatikan saat perangkat menggunakan daya baterai, Istirahatkan
+akan membatasi akses jaringan serta menangguhkan pekerjaan dan sinkronisasi. Selama jeda
+pemeliharaan, aplikasi diizinkan mengakses jaringan dan menjalankan semua
+pekerjaan/sinkronisasi yang ditangguhkan. Menyalakan layar atau mencolokkan perangkat akan mengeluarkan
+perangkat dari Istirahatkan.</p>
+
+<p>Bila perangkat dalam kondisi diam lagi, dengan layar mati dan menggunakan daya baterai selama
+jangka waktu tertentu, Istirahatkan akan menerapkan pembatasan CPU dan jaringan pada {@link
+android.os.PowerManager.WakeLock}, alarm {@link android.app.AlarmManager}, dan
+pemindaian GPS/Wi-Fi.</p>
+
+<p>Praktik terbaik untuk menyesuaikan aplikasi Anda dengan Istirahatkan adalah sama, baik
+perangkat sedang bergerak maupun diam, jadi jika Anda sudah memperbarui aplikasi untuk
+menjalankan Istirahatkan dengan lancar, berarti Anda sudah siap. Jika belum, mulailah <a href="{@docRoot}training/monitoring-device-state/doze-standby.html#assessing_your_app">menyesuaikan
+aplikasi Anda dengan Istirahatkan</a> sekarang juga.</p>
+
+<h2 id="background_optimizations">Project Svelte: Optimalisasi Latar Belakang</h2>
+
+<p>Project Svelte merupakan upaya berkelanjutan untuk meminimalkan penggunaan RAM oleh sistem dan aplikasi
+di semua jenis perangkat Android dalam ekosistem. Di Android N, Project
+Svelte berfokus pada optimalisasi cara aplikasi berjalan di latar belakang. </p>
+
+<p>Proses latar belakang merupakan bagian terpenting dari sebagian besar aplikasi. Bila ditangani dengan benar, proses
+ini bisa memberikan pengalaman pengguna yang mengagumkan — segera, cepat, dan sesuai konteks.
+Bila tidak ditangani dengan benar, proses latar belakang bisa menguras RAM (dan
+baterai) yang sebenarnya tidak perlu serta memengaruhi kinerja sistem untuk aplikasi lain. </p>
+
+<p>Sejak Android 5.0, {@link android.app.job.JobScheduler} telah menjadi
+cara yang disukai untuk melakukan pekerjaan latar belakang dengan cara yang baik
+bagi pengguna. Aplikasi bisa menjadwalkan pekerjaan sekaligus memungkinkan sistem mengoptimalkan berdasarkan
+kondisi memori, daya, dan konektivitas. JobScheduler menawarkan kontrol serta
+kemudahan, dan kami ingin semua aplikasi menggunakannya. </p>
+
+<p>
+ Opsi baik lainnya adalah <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
+ <code>GCMNetworkManager</code></a>, bagian dari Google Play Services, yang
+ menawarkan penjadwalan pekerjaan serupa dengan kompatibilitas pada semua versi lawas
+ Android.
+</p>
+
+<p>Kami terus memperluas <code>JobScheduler</code> dan
+<code>GCMNetworkManager</code> untuk memenuhi lebih banyak
+kasus penggunaan Anda — misalnya, di Android N Anda sekarang bisa menjadwalkan pekerjaan
+latar belakang berdasarkan perubahan di Content Providers. Pada saat yang sama kami mulai
+menghilangkan beberapa pola lama yang bisa mengurangi kinerja sistem,
+terutama pada perangkat yang minim memori.</p>
+
+<p>Di Android N kami membuang tiga siaran implisit yang umum digunakan —
+ {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, {@link
+ android.hardware.Camera#ACTION_NEW_PICTURE}, dan {@link
+ android.hardware.Camera#ACTION_NEW_VIDEO} — karena ketiganya bisa mengaktifkan
+proses latar belakang pada beberapa aplikasi sekaligus serta menguras memori dan baterai. Jika
+aplikasi Anda menerimanya, manfaatkan N Developer Preview untuk
+ beralih ke <code>JobScheduler</code> dan API terkait sebagai gantinya. </p>
+
+<p>
+ Lihat dokumentasi <a href="{@docRoot}preview/features/background-optimization.html">Optimalisasi
+ Latar Belakang</a> untuk mengetahui detailnya.
+</p>
+
+
+<h2 id="data_saver">Data Saver</h2>
+
+<div class="col-5of12" style="margin-right:1.5em;">
+<img src="{@docRoot}images/android-7.0/datasaver.png" style="border:2px solid #ddd">
+
+<p class="img-caption" style="padding-right:2em;">
+ <strong>Gambar 4.</strong> Data Saver di Settings.
+</p>
+ </div>
+
+<p>Selama penggunaan perangkat seluler, biaya paket data seluler biasanya
+ melebihi harga perangkat itu sendiri. Bagi banyak pengguna, data seluler adalah sumber daya
+mahal yang ingin mereka hemat. </p>
+
+<p>Android N memperkenalkan mode Data Saver, layanan sistem baru yang mengurangi
+penggunaan data seluler oleh aplikasi, baik saat roaming, mendekati akhir siklus tagihan,
+atau saat menggunakan paket data prabayar yang kecil. Data Saver memberi pengguna kemampuan mengontrol cara aplikasi
+menggunakan data seluler dan memungkinkan pengembang memberikan layanan yang lebih efisien bila Data
+Saver aktif. </p>
+
+<p>Bila pengguna mengaktifkan Data Saver di <strong>Settings</strong> dan perangkat
+dalam jaringan berkuota, sistem akan memblokir penggunaan data latar belakang dan memberi tahu aplikasi
+untuk menghemat penggunaan data latar depan — misalnya dengan membatasi
+kecepatan bit untuk streaming, mengurangi kualitas gambar, menangguhkan precaching optimistik,
+dan seterusnya. Pengguna bisa memasukkan aplikasi tertentu ke daftar putih untuk memungkinkan penggunaan data berkuota
+bila Data Saver diaktifkan.</p>
+
+<p>Android N memperluas {@link android.net.ConnectivityManager} untuk menyediakan cara pada aplikasi
+untuk <a href="{@docRoot}preview/features/data-saver.html#status">mengambil
+preferensi Data Saver pengguna</a> dan <a href="{@docRoot}preview/features/data-saver.html#monitor-changes">memantau
+perubahan preferensi</a>. Semua aplikasi harus memeriksa apakah pengguna telah mengaktifkan Data
+Saver dan berusaha membatasi penggunaan data latar belakang dan latar depan.</p>
+
+
+<h2 id="vulkan">Vulkan API</h2>
+
+<p>
+ Android N mengintegrasikan <a href="http://www.khronos.org/vulkan" class="external-link">Vulkan™</a>, sebuah API rendering 3D baru, ke dalam platform. Seperti
+ <a href="https://www.khronos.org/opengles/" class="external-link">OpenGL™
+ ES</a>, Vulkan merupakan standar terbuka untuk grafik 3D dan rendering yang dikelola
+ oleh Khronos Group.
+</p>
+
+<p>
+ Vulkan didesain dari nol untuk meminimalkan overhead CPU dalam driver,
+ dan memungkinkan aplikasi Anda mengontrol operasi GPU lebih langsung. Vulkan
+ juga memungkinkan paralelisasi yang lebih baik dengan mengizinkan beberapa thread menjalankan
+ pekerjaan seperti pembuatan buffer perintah sekaligus.
+</p>
+
+<p>
+ Pustaka dan alat pengembangan Vulkan telah dimasukkan ke dalam Android NDK. Ini
+ berisi:
+</p>
+
+<ul>
+ <li>Header
+ </li>
+
+ <li>Layer validasi (pustaka debug)
+ </li>
+
+ <li>SPIR-V shader compiler
+ </li>
+
+ <li>Pustaka kompilasi shader waktu proses SPIR-V
+ </li>
+</ul>
+
+<p>
+ Vulkan hanya tersedia untuk aplikasi pada perangkat dengan perangkat keras yang mendukung Vulkan,
+ seperti Nexus 5X, Nexus 6P, dan Nexus Player. Kami bekerja sama erat dengan mitra
+ agar secepatnya makin banyak perangkat yang dilengkapi Vulkan.
+</p>
+
+<p>
+ Untuk informasi selengkapnya, lihat <a href="{@docRoot}ndk/guides/graphics/index.html">dokumentasi API</a>.
+</p>
+
+<h2 id="tile_api">Quick Settings Tile API</h2>
+
+
+<div style="float:right;max-width:320px">
+<img src="{@docRoot}images/android-7.0/quicksettings.png" style="padding-left:1.5em;">
+
+<p class="img-caption" style="padding-left:2em;">
+ <strong>Gambar 5.</strong> Quick Settings Tile dalam bayangan pemberitahuan.
+</p>
+
+
+ </div><p>Quick Settings adalah cara populer dan mudah untuk mengekspos setelan dan tindakan utama,
+langsung dari bayangan pemberitahuan. Di Android N, kami telah memperluas lingkup
+Quick Settings untuk membuatnya lebih berguna dan praktis lagi. </p>
+
+<p>Kami telah menambahkan ruang lebih banyak untuk petak Quick Settings tambahan, yang bisa
+diakses pengguna di semua bagian area tampilan halaman bernomor dengan mengusap ke kiri atau kanan. Kami juga memberi pengguna
+kontrol untuk mengatur letak dan petak Quick Settings apa yang akan
+ditampilkan — pengguna bisa menambahkan atau memindahkan petak dengan menyeret dan melepasnya. </p>
+
+<p>Bagi pengembang, Android N juga menambahkan API baru yang memungkinkan Anda mendefinisikan
+ petak Quick Settings untuk memberi akses mudah kepada pengguna ke berbagai kontrol dan tindakan utama dalam aplikasi Anda.</p>
+
+<p>
+ Petak Quick Settings dicadangkan untuk kontrol atau tindakan yang
+ mendesak atau sering digunakan, dan tidak boleh digunakan sebagai pintasan untuk
+ membuka aplikasi.
+</p>
+
+<p>
+ Setelah mendefinisikan petak, Anda bisa menyediakannya kepada pengguna, yang bisa mereka tambahkan
+ ke Quick Settings cukup dengan seret dan lepas.
+</p>
+
+<p>
+ Untuk informasi tentang pembuatan petak aplikasi, lihat dokumentasi untuk
+ <code>android.service.quicksettings.Tile</code> dalam <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi API</a> yang bisa diunduh.
+</p>
+
+
+
+<h2 id="number-blocking">Pemblokiran Nomor</h2>
+
+<p>Android N sekarang mendukung pemblokiran nomor di platform dan menyediakan
+API kerangka kerja agar penyedia layanan bisa mengelola daftar nomor blokir. Aplikasi SMS
+default, aplikasi telepon default, dan aplikasi operator bisa membaca dari dan
+menulis ke daftar nomor blokir. Daftar ini tidak dapat diakses oleh aplikasi lain.</p>
+
+<p>Dengan membuat pemblokiran nomor sebagai fitur standar pada platformnya, Android menyediakan
+cara konsisten bagi aplikasi untuk mendukung pemblokiran nomor di berbagai
+perangkat. Manfaat lain yang bisa diperoleh aplikasi antara lain:</p>
+
+<ul>
+ <li> Nomor yang diblokir untuk panggilan juga akan diblokir untuk SMS
+ <li> Nomor yang diblokir tetap disimpan saat pengaturan ulang dan pada berbagai perangkat melalui fitur Backup &
+Restore.
+ <li> Beberapa aplikasi sekaligus bisa menggunakan daftar nomor blokir yang sama.
+</ul>
+
+<p>Selain itu, dengan integrasi aplikasi operator melalui Android berarti operator bisa
+membaca daftar nomor blokir pada perangkat dan melakukan pemblokiran di sisi layanan
+bagi pengguna tersebut untuk menghentikan panggilan dan SMS yang tidak diinginkan
+agar tidak sampai ke pengguna lewat media apa pun, misalnya VOIP-endpoint atau meneruskan panggilan telepon.</p>
+
+<p>
+ Untuk informasi selengkapnya, lihat <code>android.provider.BlockedNumberContract</code>
+ dalam <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi
+ API</a> yang bisa diunduh.
+</p>
+
+<h2 id="call_screening">Penyaringan Panggilan</h2>
+
+<p>
+ Android N memungkinkan aplikasi telepon default untuk menyaring panggilan masuk. Aplikasi
+ telepon melakukannya dengan mengimplementasikan <code>CallScreeningService</code> baru,
+ yang memungkinkan aplikasi telepon untuk melakukan sejumlah tindakan berdasarkan
+ {@link android.telecom.Call.Details Call.Details} panggilan masuk, misalnya:
+</p>
+
+<ul>
+ <li> Menolak panggilan masuk
+ <li> Tidak mengizinkan panggilan tersebut disimpan ke log panggilan
+ <li> Tidak menampilkan pemberitahuan untuk panggilan tersebut kepada pengguna
+</ul>
+
+<p>
+ Untuk informasi selengkapnya, lihat <code>android.telecom.CallScreeningService</code>
+ dalam <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi
+ API</a> yang bisa diunduh.
+</p>
+
+
+<h2 id="multi-locale_languages">Dukungan Multilokal, Lebih Banyak Bahasa yang Didukung</h2>
+
+
+<p>Android N kini memungkinkan pengguna memilih <strong>banyak lokal</strong> di Settings,
+untuk mendukung kasus penggunaan dwibahasa dengan lebih baik. Aplikasi bisa menggunakan
+API baru untuk mendapatkan lokal pilihan pengguna kemudian menawarkan pengalaman pengguna
+yang lebih canggih untuk pengguna multilokal — seperti menampilkan hasil telusur dalam
+banyak bahasa dan tidak menawarkan untuk menerjemahkan halaman web dalam bahasa
+yang sudah diketahui pengguna.</p>
+
+<p>Bersama dukungan multilokal, Android N juga memperluas ragam bahasa
+yang tersedia untuk pengguna. Masing-masing ditawarkan lebih dari 25 varian untuk bahasa yang umum
+digunakan seperti Inggris, Spanyol, Prancis, dan Arab. Juga ditambahkan dukungan
+parsial untuk lebih dari 100 bahasa baru.</p>
+
+<p>Aplikasi bisa mendapatkan daftar lokal yang disetel oleh pengguna dengan memanggil
+<code>LocaleList.GetDefault()</code>. Untuk mendukung jumlah lokal yang diperluas, Android N sedang
+ mengubah cara mengatasi masalah sumber daya. Pastikan Anda menguji dan memverifikasi bahwa aplikasi Anda
+berfungsi seperti yang diharapkan dengan logika resolusi sumber daya baru.</p>
+
+<p>Untuk mengetahui tentang perilaku resolusi sumber daya baru dan praktik terbaik yang
+harus Anda ikuti, lihat <a href="{@docRoot}preview/features/multilingual-support.html">Dukungan Multibahasa</a>.</p>
+
+
+<h2 id="emoji">Emoji Baru</h2>
+
+<p>
+ Android N memperkenalkan emoji tambahan dan fitur terkait emoji termasuk
+ emoji warna kulit dan dukungan untuk pemilih
+ variasi. Jika aplikasi Anda mendukung emoji,
+ ikuti panduan berikut untuk memanfaatkan fitur terkait emoji ini.
+</p>
+
+<ul>
+ <li>
+ <strong>Periksa apakah perangkat berisi emoji sebelum memasukannya.</strong>
+ Untuk memeriksa emoji mana yang terdapat di
+ font sistem, gunakan metode {@link android.graphics.Paint#hasGlyph(String)}.
+ </li>
+ <li>
+ <strong>Periksa apakah emoji mendukung pemilih variasi.</strong>
+ Pemilih variasi memungkinkan Anda
+ menampilkan emoji tertentu berwarna atau hitam-putih.
+ Pada perangkat seluler, aplikasi akan menghadirkan emoji berwarna daripada hitam-putih. Akan tetapi,
+ jika aplikasi Anda menampilkan emoji sebaris dengan teks, maka harus menggunakan variasi hitam-putih.
+ Untuk menentukan apakah sebuah emoji memiliki variasi, gunakan pemilih variasi.
+ Untuk daftar lengkap dari karakter dengan variasinya, tinjaulah bagian
+ <em>rangkaian variasi emoji</em> pada
+ <a class="external-link" href="http://www.unicode.org/Public/9.0.0/ucd/StandardizedVariants-9.0.0d1.txt">
+ dokumentasi Unicode mengenai variasi</a>.
+ </li>
+ <li>
+ <strong>Periksa apakah emoji mendukung warna kulit.</strong> Android N memungkinkan pengguna memodifikasi
+ warna kulit emoji yang dirender sesuai dengan preferensi mereka. Aplikasi keyboard harus menyediakan indikasi
+ visual untuk emoji yang memiliki beberapa warna kulit dan harus memungkinkan pengguna
+ memilih warna kulit yang mereka sukai. Untuk menentukan apakah emoji sistem memiliki
+ modifier warna kulit, gunakan metode {@link android.graphics.Paint#hasGlyph(String)}.
+ Anda bisa menentukan emoji mana yang menggunakan warna kulit dengan membaca
+ <a class="external-link" href="http://unicode.org/emoji/charts/full-emoji-list.html">
+ dokumentasi Unicode</a>.
+ </li>
+</ul>
+
+
+<h2 id="icu4">ICU4J API di Android</h2>
+
+<p>
+ Android N kini menawarkan subset <a href="http://site.icu-project.org/">ICU4J</a> API dalam kerangka kerja Android pada paket
+ <code>android.icu</code>. Migrasi mudah, dan biasanya hanya perlu
+ mengubah dari ruang nama <code>com.java.icu</code> ke
+ <code>android.icu</code>. Jika Anda sudah menggunakan bundel ICU4J dalam aplikasi,
+ maka beralih ke <code>android.icu</code> API yang disediakan dalam kerangka kerja
+ Android bisa menghasilkan penghematan besar dalam ukuran APK.
+</p>
+
+<p>
+ Untuk mengetahui selengkapnya tentang Android ICU4J API, lihat <a href="{@docRoot}preview/features/icu4j-framework.html">Dukungan ICU4J</a>.
+</p>
+
+
+
+<h2 id="gles_32">OpenGL™ ES 3.2 API</h2>
+
+<p>Android N menambahkan antarmuka kerangka kerja dan dukungan platform untuk OpenGL ES 3.2, termasuk:</p>
+
+<ul>
+ <li> Semua ekstensi dari <a class="external-link" href="https://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">
+Android Extension Pack</a></a> (AEP) kecuali untuk <code>EXT_texture_sRGB_decode</code>.
+ <li> Floating-point framebuffer untuk HDR dan shading yang ditangguhkan.
+ <li> Panggilan draw BaseVertex agar batching dan streaming jadi lebih baik.
+ <li> Kontrol akses buffer yang tangguh untuk mengurangi overhead WebGL.
+</ul>
+
+<p>API kerangka kerja untuk OpenGL ES 3.2 di Android N dilengkapi dengan kelas
+ <code>GLES32</code>. Saat menggunakan OpenGL ES 3.2, pastikan
+mendeklarasikan persyaratan dalam file manifes Anda, dengan tag <code><uses-feature></code> dan
+atribut <code>android:glEsVersion</code>. </p>
+
+<p>Untuk informasi tentang menggunakan OpenGL ES, termasuk cara memeriksa versi
+OpenGL ES yang didukung perangkat saat waktu proses, lihat <a href="{@docRoot}guide/topics/graphics/opengl.html">Panduan OpenGL ES API</a>.</p>
+
+
+<h2 id="android_tv_recording">Perekaman Android TV</h2>
+
+<p>Android N menambahkan kemampuan untuk merekam dan memutar kembali materi dari layanan masukan
+Android TV melalui API perekaman baru. Karena dibangun dengan API perekaman yang sudah
+ada, layanan masukan TV bisa mengontrol data saluran apa yang bisa direkam, cara menyimpan
+sesi rekaman, dan mengelola interaksi pengguna dengan materi rekaman. </p>
+
+<p>Untuk informasi selengkapnya, lihat <a href="{@docRoot}preview/features/tv-recording-api.html">API Perekaman Android TV</a>.</p>
+
+
+<h2 id="android_for_work">Android for Work</h2>
+
+<p>Android for Work menambahkan berbagai fitur dan API baru untuk perangkat yang menjalankan Android N.
+Beberapa fitur unggulannya ada di bawah ini — untuk mengetahui daftar lengkap perubahannya, lihat
+<a href="{@docRoot}preview/features/afw.html">Pembaruan Android for Work</a>.</p>
+
+<h3 id="work_profile_security_challenge">Pertanyaan Keamanan Profil Kerja </h3>
+
+<p>
+ Pemilik profil yang menargetkan N SDK
+ bisa menetapkan pertanyaan keamanan terpisah untuk aplikasi yang berjalan di
+ profil kerja. Pertanyaan kerja ditampilkan bila pengguna mencoba membuka
+ aplikasi kerja apa pun. Jawaban pertanyaan keamanan yang benar akan membuka
+ profil kerja dan mendekripsinya jika diperlukan. Untuk pemilik profil,
+ <code>ACTION_SET_NEW_PASSWORD</code> akan meminta pengguna untuk menetapkan pertanyaan
+ kerja, dan <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> meminta
+ pengguna menyetel kunci perangkat.
+</p>
+
+<p>
+ Pemilik profil bisa menyetel kebijakan kode sandi untuk pertanyaan kerja
+ (seperti berapa lama seharusnya PIN, atau apakah sidik jari bisa digunakan
+ untuk membuka kunci profil) menggunakan <code>setPasswordQuality()</code>,
+ <code>setPasswordMinimumLength()</code> dan metode terkait. Pemilik profil
+ juga bisa menyetel kunci perangkat, menggunakan instance <code>DevicePolicyManager</code>
+ yang dikembalikan oleh metode <code>getParentProfileInstance()</code> baru.
+ Selain itu, pemilik profil bisa menyesuaikan layar kredensial untuk
+ pertanyaan kerja menggunakan metode baru <code>setOrganizationColor()</code> dan
+ <code>setOrganizationName()</code>.
+</p>
+<h3 id="turn_off_work">Menonaktifkan pekerjaan </h3>
+
+<p>Pada perangkat dengan profil kerja, pengguna bisa beralih mode kerja. Bila mode
+kerja dinonaktifkan, profil yang dikelola akan dinonaktifkan untuk sementara, yang akan menonaktifkan aplikasi
+profil kerja, sinkronisasi latar belakang, dan pemberitahuan. Termasuk aplikasi pemilik
+profil. Bila profil kerja dinonaktifkan, sistem akan menampilkan ikon status
+tetap untuk mengingatkan pengguna bahwa mereka tidak bisa meluncurkan aplikasi kerja. Peluncur
+menunjukkan bahwa aplikasi kerja dan widget tidak bisa diakses. </p>
+
+<h3 id="always_on_vpn">Always-On VPN </h3>
+
+<p>Pemilik perangkat dan pemilik profil bisa memastikan bahwa aplikasi kerja selalu menghubungkan
+melalui VPN yang ditetapkan. Sistem secara otomatis akan memulai VPN itu setelah booting
+perangkat.</p>
+
+<p>
+ Metode <code>DevicePolicyManager</code> baru adalah
+ <code>setAlwaysOnVpnPackage()</code> dan
+ <code>getAlwaysOnVpnPackage()</code>.
+</p>
+
+<p>Karena layanan VPN bisa diikat langsung oleh sistem tanpa interaksi
+aplikasi, klien VPN perlu menangani titik masuk baru untuk Always-On VPN. Seperti
+sebelumnya, layanan ditunjukkan ke sistem melalui
+tindakan pencocokan filter intent <code>android.net.VpnService</code>. </p>
+
+<p>
+ Pengguna bisa secara manual menyetel klien Always-On VPN yang mengimplementasikan
+ metode <code>VPNService</code> dalam pengguna utama dengan menggunakan
+ <strong>Settings>More>Vpn</strong>.
+</p>
+
+<h3 id="custom_provisioning">Penyediaan yang disesuaikan</h3>
+
+<p>
+ Aplikasi bisa menyesuaikan alur penyediaan pemilik profil dan pemilik perangkat
+ dengan warna dan logo perusahaan.
+ <code>DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR</code> menyesuaikan
+ warna alur. <code>DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI</code>
+ menyesuaikan alur dengan logo perusahaan.
+</p>
+
+<h2 id="accessibility_enhancements">Penyempurnaan Aksesibilitas</h2>
+
+<p>Android N saat ini menawarkan Vision Settings langsung di layar Sambutan untuk
+persiapan perangkat baru. Ini sangat memudahkan pengguna untuk menemukan dan mengonfigurasi
+fitur aksesibilitas pada perangkat mereka, termasuk isyarat perbesaran, ukuran
+font, ukuran layar, dan TalkBack. </p>
+
+<p>Dengan fitur aksesibilitas yang penempatannya semakin jelas, pengguna Anda
+kemungkinan besar akan mencoba aplikasi dengan fitur-fitur yang diaktifkan itu. Pastikan Anda menguji aplikasi
+lebih dini dengan mengaktifkan dahulu setelan ini. Anda bisa mengaktifkannya dari Settings >
+Accessibility.</p>
+
+<p>Di Android N, layanan aksesibilitas sekarang bisa membantu pengguna yang mengalami gangguan
+motorik untuk menyentuh layar. API baru memungkinkan membangun layanan dengan
+fitur-fitur seperti pelacakan wajah, pelacakan mata, pemindaian titik, dan seterusnya, untuk
+memenuhi kebutuhan para pengguna tersebut.</p>
+
+<p>Untuk informasi selengkapnya, lihat <code>android.accessibilityservice.GestureDescription</code>
+ dalam <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi API</a> yang bisa diunduh.</p>
+
+
+<h2 id="direct_boot">Direct Boot</h2>
+
+<p>Direct Boot memperbaiki waktu startup perangkat dan memungkinkan aplikasi
+yang telah didaftarkan memiliki fungsionalitas terbatas bahkan setelah boot ulang tak terduga.
+Misalnya, jika perangkat yang dienkripsi melakukan boot ulang selagi pengguna tidur,
+alarm terdaftar, pesan dan panggilan masuk sekarang bisa terus memberi tahu
+pengguna seperti biasa. Ini juga berarti layanan aksesibilitas bisa
+ segera tersedia setelah restart.</p>
+
+<p>Direct Boot memanfaatkan enkripsi berbasis file di Android N
+untuk mengaktifkan kebijakan enkripsi yang telah disesuaikan bagi sistem dan data aplikasi.
+Sistem akan menggunakan penyimpanan yang dienkripsi dengan perangkat untuk data sistem terpilih dan data
+aplikasi yang terdaftar secara eksplisit. Secara default, penyimpanan yang dienkripsi dengan kredensial digunakan untuk semua
+ data sistem lainnya, data pengguna, aplikasi, dan data aplikasi. </p>
+
+<p>Saat booting, sistem dimulai dalam mode terbatas dengan akses
+ke data yang dienkripsi dengan perangkat saja, dan tanpa akses umum ke aplikasi atau data.
+Jika Anda memiliki komponen yang ingin Anda jalankan dalam mode ini, Anda bisa mendaftarkannya
+dengan menyetel flag dalam manifes. Setelah restart, sistem akan mengaktifkan
+komponen terdaftar dengan menyiarkan intent <code>LOCKED_BOOT_COMPLETED</code>.
+ Sistem akan memastikan data aplikasi yang dienkripsi dengan perangkat tersedia
+sebelum membuka kunci. Semua data lainnya tidak tersedia sebelum Pengguna mengonfirmasi
+ kredensial layar kunci mereka untuk mendekripsinya. </p>
+
+Untuk informasi selengkapnya, lihat <a href="{@docRoot}preview/features/direct-boot.html">Direct Boot</a>.</p>
+</p>
+
+
+<h2 id="key_attestation">Key Attestation</h2>
+
+<p>Keystore yang didukung perangkat keras menyediakan metode yang jauh lebih aman untuk membuat, menyimpan,
+dan menggunakan kunci kriptografi pada perangkat Android. Keystore itu melindungi kunci dari
+kernel Linux, potensi kerentanan Android, dan ekstraksi
+dari perangkat yang di-root.</p>
+
+<p>Agar lebih mudah dan lebih aman dalam menggunakan keystore yang didukung perangkat keras,
+Android N memperkenalkan Key Attestation. Aplikasi dan perangkat-nonaktif bisa menggunakan Key
+Attestation untuk menentukan apakah penyandingan kunci RSA atau EC
+didukung perangkat keras, apa properti dari penyandingan kunci, dan batasan
+ apa yang diterapkan terhadap penggunaan dan validitasnya. </p>
+
+<p>Aplikasi dan layanan perangkat-nonaktif bisa meminta informasi tentang penyandingan kunci
+melalui sertifikat pengesahan X.509 yang harus ditandatangani dengan kunci
+pengesahan yang valid. Kunci pengesahan adalah kunci penandatanganan ECDSA yang
+telah diinjeksikan ke dalam keystore yang didukung perangkat keras pada perangkat saat di pabriknya.
+Karena itu, sertifikat pengesahan yang ditandatangani oleh kunci pengesahan yang
+valid akan mengonfirmasi keberadaan keystore yang didukung perangkat keras, bersama
+ detail pasangan kunci dalam keystore itu.</p>
+
+<p>Untuk memastikan perangkat ini menggunakan citra Android resmi yang
+aman dari pabrik, Key Attestation mengharuskan <a class="external-link" href="https://source.android.com/security/verifiedboot/verified-boot.html#bootloader_requirements">bootloader</a> perangkat
+menyediakan informasi berikut pada <a class="external-link" href="https://source.android.com/security/trusty/index.html">Trusted
+Execution Environment (TEE)</a>:</p>
+
+<ul>
+<li>Versi OS dan level patch yang dipasang pada perangkat</li>
+<li>Kunci publik <a href="https://source.android.com/security/verifiedboot/index.html" class="external-link">Verified Boot</a> dan status kunci</li>
+ </ul>
+
+<p>Untuk informasi selengkapnya tentang fitur keystore yang didukung perangkat keras,
+lihat panduan untuk <a href="https://source.android.com/security/keystore/" class="external-link">Keystore yang Didukung Perangkat Keras</a>.</p>
+
+<p>Selain Key Attestation, Android N juga memperkenalkan
+ kunci yang terikat sidik jari yang tidak dipanggil saat pendaftaran sidik jari.</p>
+
+<h2 id="network_security_config">Network Security Config</h2>
+
+<p>Di Android N, aplikasi bisa menyesuaikan perilaku koneksi aman mereka
+(HTTPS, TLS) secara aman, tanpa modifikasi kode, dengan menggunakan
+<em>Network Security Config</em> deklaratif sebagai ganti menggunakan API programatik
+konvensional yang rawan kesalahan (mis. X509TrustManager).</p>
+
+ <p>Fitur yang didukung:</p>
+<ul>
+<li><b>Trust-anchor khusus.</b> Memungkinkan aplikasi menyesuaikan
+Certificate Authorities (CA) mana yang dipercaya untuk koneksi amannya. Misalnya,
+mempercayai sertifikat tertentu yang ditandatangani sendiri atau set CA publik yang dibatasi.
+</li>
+<li><b>Penggantian hanya-debug.</b> Memungkinkan pengembang aplikasi dengan aman men-debug
+koneksi aman aplikasi mereka tanpa menambah risiko pada basis yang sudah
+dipasang.
+</li>
+<li><b>Berhenti dari lalu lintas cleartext.</b> Memungkinkan aplikasi melindungi dirinya sendiri dari
+penggunaan lalu lintas cleartext yang tidak disengaja.</li>
+<li><b>Penyematan sertifikat.</b> Sebuah fitur canggih yang memungkinkan aplikasi
+ membatasi kunci server mana yang dipercaya untuk koneksi aman.</li>
+</ul>
+
+<p>Untuk informasi selengkapnya, lihat <a href="{@docRoot}preview/features/security-config.html">Network Security
+Config</a>.</p>
+
+<h2 id="default_trusted_ca">Certificate Authority Tepercaya Default</h2>
+
+<p>Secara default, aplikasi yang menargetkan Android N hanya mempercayai sertifikat yang disediakan sistem
+dan tidak lagi mempercayai Certificate Authorities (CA) yang ditambahkan pengguna. Aplikasi yang menargetkan Android
+N dan ingin mempercayai CA yang ditambahkan pengguna harus menggunakan
+<a href="{@docRoot}preview/features/security-config.html">Network Security Config</a> untuk
+menetapkan cara mempercayai CA pengguna.</p>
+
+<h2 id="apk_signature_v2">APK Signature Scheme v2</h2>
+
+<p>
+ Android N memperkenalkan APK Signature Scheme v2, sebuah skema penandatanganan aplikasi baru yang
+ menawarkan waktu pasang aplikasi lebih cepat dan lebih banyak perlindungan terhadap perubahan
+ tidak sah pada file APK. Secara default, Android Studio 2.2 dan Android
+ Plugin untuk Gradle 2.2 menandatangani aplikasi Anda menggunakan APK Signature Scheme v2 dan
+ skema penandatanganan tradisional, yang menggunakan penandatanganan JAR.
+</p>
+
+<p>
+ Meskipun kami menyarankan untuk menerapkan APK Signature Scheme v2 pada aplikasi Anda, skema
+ baru ini tidak wajib. Jika aplikasi Anda tidak dibangun dengan benar saat menggunakan APK
+ Signature Scheme v2, Anda bisa menonaktifkan skema baru ini. Proses penonaktifan
+ menyebabkan Android Studio 2.2 dan Android Plugin untuk Gradle 2.2 menandatangani aplikasi Anda
+ menggunakan skema penandatanganan tradisional saja. Untuk menandatangani dengan
+ skema tradisional saja, buka file <code>build.gradle</code> level-modul, kemudian
+ tambahkan baris <code>v2SigningEnabled false</code> ke konfigurasi
+ penandatanganan rilis Anda:
+</p>
+
+<pre>
+ android {
+ ...
+ defaultConfig { ... }
+ signingConfigs {
+ release {
+ storeFile file("myreleasekey.keystore")
+ storePassword "password"
+ keyAlias "MyReleaseKey"
+ keyPassword "password"
+ <strong>v2SigningEnabled false</strong>
+ }
+ }
+ }
+</pre>
+
+<p class="caution"><strong>Perhatian: </strong> Jika Anda menandatangani aplikasi menggunakan APK
+ Signature Scheme v2 dan membuat perubahan lebih jauh pada aplikasi, tanda tangan aplikasi
+ menjadi tidak valid. Untuk alasan ini, gunakan alat seperti <code>zipalign</code>
+ sebelum menandatangani aplikasi Anda menggunakan APK Signature Scheme v2, bukan setelahnya.
+</p>
+
+<p>
+ Untuk informasi selengkapnya, baca dokumen Android Studio yang menjelaskan cara
+ <a href="{@docRoot}studio/publish/app-signing.html#release-mode">
+ menandatangani aplikasi</a> di Android Studio dan cara<a href="{@docRoot}studio/build/build-variants.html#signing"> mengonfigurasi
+ file build untuk menandatangani aplikasi</a> menggunakan Android Plugin untuk Gradle.
+</p>
+
+<h2 id="scoped_directory_access">Scoped Directory Access</h2>
+
+<p>Di Android N, aplikasi bisa menggunakan API baru untuk meminta akses ke direktori <a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">penyimpanan
+eksternal</a> tertentu, termasuk direktori di media lepas-pasang seperti kartu
+SD. API baru ini sangat menyederhanakan cara aplikasi Anda mengakses direktori
+penyimpanan eksternal standar, seperti direktori <code>Pictures</code>. Aplikasi
+seperti aplikasi foto bisa menggunakan API ini sebagai ganti menggunakan
+<code>READ_EXTERNAL_STORAGE</code>, yang memberikan akses ke semua direktori
+penyimpanan, atau Storage Access Framework, yang membuat pengguna mengarah ke
+direktori tersebut.</p>
+
+<p>Selain itu, API baru ini menyederhanakan langkah-langkah yang diambil pengguna untuk memberikan akses
+penyimpanan eksternal ke aplikasi Anda. Bila Anda menggunakan API baru, sistem akan menggunakan UI izin
+sederhana yang memperinci dengan jelas direktori apa yang aksesnya diminta
+oleh aplikasi.</p>
+
+<p>Untuk informasi selengkapnya, lihat dokumentasi pengembang
+<a href="{@docRoot}preview/features/scoped-folder-access.html">Scoped
+Directory Access</a>.</p>
+
+<h2 id="keyboard_shortcuts_helper">Keyboard Shortcuts Helper</h2>
+
+<p>
+Di Android N, pengguna bisa menekan "Alt + /" untuk memunculkan layar <em>Keyboard Shortcuts</em>
+yang menampilkan semua pintasan yang tersedia baik dari sistem maupun dari
+aplikasi yang sedang mendapatkan fokus. Ini diambil secara otomatis dari menu aplikasi
+jika tersedia, namun pengembang bisa menyediakan daftar pintasan yang telah disesuaikan
+untuk layar. Anda bisa melakukannya dengan mengganti metode
+<code>Activity.onProvideKeyboardShortcuts()</code> baru, yang dijelaskan dalam
+<a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi API</a> yang bisa diunduh.
+</p>
+
+<p>
+Untuk memunculkan Keyboard Shortcuts Helper dari mana saja di aplikasi Anda,
+panggil {@code Activity.requestKeyboardShortcutsHelper()} untuk aktivitas terkait.
+</p>
+
+<h2 id="sustained_performance_api">Sustained Performance API</h2>
+
+<p>
+Kinerja bisa berfluktuasi secara dramatis untuk aplikasi yang berjalan lama, karena
+sistem melakukan throttle pada mesin sistem-di-chip saat komponen perangkat mencapai
+batas suhunya. Fluktuasi ini memberikan target bergerak bagi pengembang
+aplikasi yang sedang membuat aplikasi berkinerja tinggi dan berjalan lama.
+</p>
+
+<p>
+Untuk menangani batasan ini, Android N menyertakan dukungan untuk
+<em>mode kinerja kontinu</em>, yang memungkinkan OEM memberikan petunjuk mengenai kemampuan kinerja
+perangkat untuk aplikasi yang berjalan lama. Pengembang aplikasi
+bisa menggunakan petunjuk ini untuk menyesuaikan aplikasi agar kinerja perangkat bisa diprediksi
+dan pada level yang konsisten dalam jangka waktu lama.
+</p>
+
+<p>
+Pengembang aplikasi bisa mencoba API baru ini dalam N Developer Preview pada
+perangkat Nexus 6P saja. Untuk menggunakan fitur ini,
+setel flag jendela kinerja kontinu
+yang ingin Anda jalankan dalam mode kinerja kontinu. Setel flag ini menggunakan metode
+{@code Window.setSustainedPerformanceMode()}. Sistem secara otomatis
+akan menonaktifkan mode ini bila jendela tidak lagi mendapatkan fokus.
+</p>
+
+<h2 id="vr">Dukungan VR</h2>
+
+<p>
+Android N menambahkan dukungan platform dan optimalisasi untuk VR Mode baru yang memungkinkan
+pengembang membuat pengalaman VR berkualitas tinggi di seluler bagi para pengguna. Ada banyak perbaikan
+kinerja, termasuk akses ke inti CPU yang eksklusif untuk aplikasi VR.
+Di dalam aplikasi, Anda bisa memanfaatkan pelacakan kepala yang cerdas,
+dan pemberitahuan stereo yang bekerja untuk VR. Hal terpenting adalah Android N menyediakan
+grafis dengan latensi sangat rendah. Untuk informasi selengkapnya tentang membangun aplikasi VR untuk Android N,
+lihat <a href="https://developers.google.com/vr/android/">Google VR SDK untuk Android</a>.
+</p>
+
+
+<h2 id="print_svc">Penyempurnaan Layanan Cetak</h2>
+
+<p>
+ Di Android N, pengembang layanan cetak kini bisa menampilkan informasi tambahan
+ tentang masing-masing printer dan pekerjaan cetak.
+</p>
+
+<p>
+ Saat mendaftarkan masing-masing printer, layanan cetak kini bisa menyetel
+ ikon per printer dalam dua cara:
+</p>
+
+<ul>
+ <li>Anda bisa menyetel ikon dari ID sumber daya dengan memanggil
+ <code>PrinterInfo.Builder.setResourceIconId()</code>
+ </li>
+
+ <li>Anda bisa menampilkan ikon dari jaringan dengan memanggil
+ <code>PrinterInfo.Builder.setHasCustomPrinterIcon()</code>, dan menyetel sebuah
+ callback bila ikon diminta menggunakan
+ <code>android.printservice.PrinterDiscoverySession.onRequestCustomPrinterIcon()</code>
+ </li>
+</ul>
+
+<p>
+ Selain itu, Anda bisa menyediakan aktivitas per printer untuk menampilkan informasi
+ tambahan dengan memanggil <code>PrinterInfo.Builder.setInfoIntent()</code>.
+</p>
+
+<p>
+ Anda bisa menunjukkan kemajuan dan status pekerjaan cetak di
+ pemberitahuan pekerjaan cetak dengan memanggil masing-masing
+ <code>android.printservice.PrintJob.setProgress()</code> dan
+ <code>android.printservice.PrintJob.setStatus()</code>.
+</p>
+
+<p>
+ Untuk informasi selengkapnya tentang metode ini,lihat dalam <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi API</a> yang bisa diunduh.
+</p>
+
+<h2 id="framemetrics_api">FrameMetricsListener API</h2>
+
+<p>
+FrameMetricsListener API memungkinkan aplikasi untuk memantau
+kinerja rendering UI. API tersebut menyediakan kemampuan ini dengan mengekspos Pub/Sub API streaming
+untuk mentransfer info frame-timing untuk jendela aplikasi saat ini. Data yang dikembalikan
+setara dengan yang ditampilkan <code><a href="{@docRoot}tools/help/shell.html#shellcommands">adb shell</a>
+dumpsys gfxinfo framestats</code>, namun tidak dibatasi pada 120 bingkai.
+</p>
+
+<p>
+Anda bisa menggunakan FrameMetricsListener untuk mengukur kinerja UI
+level interaksi di produksi, tanpa koneksi USB. API
+ini memungkinkan pengumpulan data dengan granularitas lebih tinggi daripada
+{@code adb shell dumpsys gfxinfo}. Granularitas lebih tinggi ini dimungkinkan karena
+sistem bisa mengumpulkan data untuk interaksi tertentu di aplikasi; sistem
+tidak perlu merekam ringkasan global untuk keseluruhan kinerja
+aplikasi, atau mengosongkan status global yang ada. Anda bisa menggunakan kemampuan ini
+untuk mengumpulkan data kinerja dan menangkap regresi di kinerja UI
+untuk kasus penggunaan sungguhan di dalam aplikasi.
+</p>
+
+<p>
+Untuk memantau sebuah jendela, implementasikan metode callback <code>FrameMetricsListener.onMetricsAvailable()</code>
+dan daftarkan di jendela itu. Untuk informasi selengkapnya, lihat
+dokumentasi kelas {@code FrameMetricsListener} di
+<a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi API</a> yang bisa diunduh.
+</p>
+
+<p>
+API menyediakan objek {@code FrameMetrics}, yang berisi data timing yang
+dilaporkan subsistem rendering untuk berbagai tahap pencapaian dalam daur hidup bingkai.
+Metrik yang didukung adalah: {@code UNKNOWN_DELAY_DURATION},
+{@code INPUT_HANDLING_DURATION}, {@code ANIMATION_DURATION},
+{@code LAYOUT_MEASURE_DURATION}, {@code DRAW_DURATION}, {@code SYNC_DURATION},
+{@code COMMAND_ISSUE_DURATION}, {@code SWAP_BUFFERS_DURATION},
+{@code TOTAL_DURATION}, dan {@code FIRST_DRAW_FRAME}.
+</p>
+
+
+<h2 id="virtual_files">File Maya</h2>
+
+<p>
+ Di versi Android sebelumnya, aplikasi Anda bisa menggunakan Storage Access
+ Framework untuk memungkinkan pengguna memilih file dari akun penyimpanan awan mereka,
+ seperti Google Drive. Akan tetapi, tidak ada cara untuk merepresentasikan file yang
+ tidak memiliki representasi bytecode langsung; setiap file diharuskan menyediakan
+ aliran masukan.
+</p>
+
+<p>
+ Android N menambahkan konsep <em>file maya</em> pada Storage Access
+ Framework. Fitur file maya memungkinkan
+ {@link android.provider.DocumentsProvider} Anda mengembalikan URI dokumen yang bisa
+ digunakan bersama intent {@link android.content.Intent#ACTION_VIEW} sekalipun
+ tidak memiliki representasi bytecode langsung. Android N juga memungkinkan Anda untuk
+ menyediakan format alternatif untuk file pengguna, maya atau dengan cara lain.
+</p>
+
+<p>
+ Untuk mendapatkan URI sebuah dokumen maya di aplikasi Anda, terlebih dahulu Anda membuat
+ {@link android.content.Intent} untuk membuka UI pemilih file. Karena aplikasi
+ tidak bisa membuka file maya secara langsung dengan menggunakan metode
+ {@link android.content.ContentResolver#openInputStream(Uri) openInputStream()},
+ aplikasi Anda tidak akan menerima file maya jika Anda memasukkan kategori
+ {@link android.content.Intent#CATEGORY_OPENABLE}.
+</p>
+
+<p>
+ Setelah pengguna menentukan pilihan, sistem akan memanggil metode
+ {@link android.app.Activity#onActivityResult onActivityResult()}.
+ Aplikasi Anda bisa mengambil URI file maya dan mendapatkan aliran masukan, seperti yang
+ diperagakan dalam cuplikan kode di bawah.
+</p>
+
+<pre>
+ // Other Activity code ...
+
+ final static private int REQUEST_CODE = 64;
+
+ // We listen to the OnActivityResult event to respond to the user's selection.
+ @Override
+ public void onActivityResult(int requestCode, int resultCode,
+ Intent resultData) {
+ try {
+ if (requestCode == REQUEST_CODE &&
+ resultCode == Activity.RESULT_OK) {
+
+ Uri uri = null;
+
+ if (resultData != null) {
+ uri = resultData.getData();
+
+ ContentResolver resolver = getContentResolver();
+
+ // Before attempting to coerce a file into a MIME type,
+ // check to see what alternative MIME types are available to
+ // coerce this file into.
+ String[] streamTypes =
+ resolver.getStreamTypes(uri, "*/*");
+
+ AssetFileDescriptor descriptor =
+ resolver.openTypedAssetFileDescriptor(
+ uri,
+ streamTypes[0],
+ null);
+
+ // Retrieve a stream to the virtual file.
+ InputStream inputStream = descriptor.createInputStream();
+ }
+ }
+ } catch (Exception ex) {
+ Log.e("EXCEPTION", "ERROR: ", ex);
+ }
+ }
+</pre>
+
+<p>
+ Untuk informasi selengkapnya tentang mengakses file pengguna, lihat
+ <a href="{@docRoot}guide/topics/providers/document-provider.html">Panduan Storage
+ Access Frameworks</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
new file mode 100644
index 0000000..212870a
--- /dev/null
+++ b/docs/html-intl/intl/in/about/versions/nougat/index.jd
@@ -0,0 +1,110 @@
+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
+
+<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-8of16" style="padding-left:2em">
+ <h1 class="dac-hero-title">Android 7.0 Nougat</h1>
+ <p class="dac-hero-description">
+ 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}about/versions/nougat/android-7.0.html">
+ <span class="dac-sprite dac-auto-chevron"></span>
+ Mulai
+ </a>
+ </div>
+ <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></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>
+</section>
+
+
+<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://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/dev-community">
+ <i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
+ Bergabunglah dengan komunitas pengembang
+ </a>
+ </li>
+ </ul>
+ </div><!-- end .wrap -->
+</div><!-- end .dac-actions -->
+
+<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"
+ data-query="type:blog+tag:androidn+tag:featured, type:youtube+tag:androidn+tag:featured"
+ data-sortOrder="-timestamp"
+ data-cardSizes="6x6"
+ data-items-per-page="6"
+ data-maxResults="15"
+ data-initial-results="3"></div>
+</div></section>
+
+<section class="dac-section dac-gray" id="videos"><div class="wrap">
+ <h1 class="dac-section-title">Videos</h1>
+ <div class="dac-section-subtitle">
+ 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: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>
\ No newline at end of file
diff --git a/docs/html-intl/intl/in/preview/j8-jack.jd b/docs/html-intl/intl/in/guide/platform/j8-jack.jd
similarity index 100%
rename from docs/html-intl/intl/in/preview/j8-jack.jd
rename to docs/html-intl/intl/in/guide/platform/j8-jack.jd
diff --git a/docs/html-intl/intl/in/guide/topics/ui/multi-window.jd b/docs/html-intl/intl/in/guide/topics/ui/multi-window.jd
new file mode 100644
index 0000000..5e7b3d9
--- /dev/null
+++ b/docs/html-intl/intl/in/guide/topics/ui/multi-window.jd
@@ -0,0 +1,589 @@
+page.title=Dukungan Multi-Jendela
+page.metaDescription=Dukungan baru di Android N untuk menampilkan lebih dari satu aplikasi sekaligus.
+page.keywords="multi-window", "android N", "split screen", "free-form"
+
+@jd:body
+
+<div id="tb-wrapper">
+ <div id="tb">
+ <h2>Dalam dokumen ini</h2>
+ <ol>
+ <li><a href="#overview">Ringkasan</a></li>
+ <li><a href="#lifecycle">Daur Hidup Multi-Jendela</a></li>
+ <li><a href="#configuring">Mengonfigurasi Aplikasi Anda untuk Mode
+ Multi-Jendela</a></li>
+ <li><a href="#running">Menjalankan Aplikasi Anda dalam Mode Multi-Jendela</a></li>
+ <li><a href="#testing">Menguji Dukungan Multi-Jendela Aplikasi Anda</a></li>
+ </ol>
+ <h2>Lihat Juga</h2>
+ <ol>
+ <li><a class="external-link" href="https://github.com/googlesamples/android-MultiWindowPlayground">Aplikasi contoh Playground
+ Multi-Jendela</a></li>
+ <li><a class="external-link" href="https://medium.com/google-developers/5-tips-for-preparing-for-multi-window-in-android-n-7bed803dda64">Lima Tip untuk Mempersiapkan Multi-Jendela di Android N</a></li>
+ </ol>
+ </div>
+</div>
+
+<p>
+ Android N menambahkan dukungan untuk menampilkan lebih dari satu aplikasi
+ sekaligus. Pada perangkat genggam, dua aplikasi bisa berjalan berdampingan atau
+ atas-bawah dalam mode <em>layar terbagi</em>. Pada perangkat TV, aplikasi bisa
+ menggunakan mode <em>gambar-dalam-gambar</em> untuk melanjutkan pemutaran video selagi pengguna
+ berinteraksi dengan aplikasi lain.
+</p>
+
+<p>
+ Jika Anda membangun aplikasi Anda dengan N Preview SDK, Anda bisa mengonfigurasi cara aplikasi
+ menangani tampilan multi-jendela. Misalnya, Anda bisa menetapkan dimensi
+ minimum yang diizinkan aktivitas Anda. Anda juga bisa menonaktifkan tampilan multi-jendela untuk
+ aplikasi, sehingga memastikan sistem hanya menampilkan aplikasi Anda dalam mode
+ layar penuh.
+</p>
+
+<h2 id="overview">Ringkasan</h2>
+
+<p>
+ Android N memungkinkan beberapa aplikasi berbagi layar sekaligus. Misalnya,
+ pengguna bisa membagi layar, melihat halaman web di sisi kiri
+ sambil menulis email di sisi kanan. Pengalaman pengguna bergantung pada
+ perangkat:
+</p>
+
+<ul>
+ <li>Perangkat genggam yang menjalankan Android N menawarkan mode
+ layar terbagi. Di mode ini, sistem mengisi layar dengan dua aplikasi, menampilkannya secara
+ berdampingan atau atas-bawah. Pengguna bisa menyeret garis pembagi
+ yang memisahkan keduanya untuk membuat satu aplikasi lebih besar dan yang lainnya lebih kecil.
+ </li>
+
+ <li>Pada Nexus Player yang menjalankan Android N, aplikasi bisa menempatkan diri
+ dalam <a href="picture-in-picture.html">mode gambar-dalam-gambar</a>, yang memungkinkannya
+ untuk terus menampilkan materi selagi pengguna menjelajahi atau berinteraksi dengan
+ aplikasi lain.
+ </li>
+
+ <li>Produsen perangkat berukuran lebih besar bisa memilih untuk mengaktifkan mode
+ bentuk bebas, di mana pengguna bisa bebas mengubah ukuran setiap aktivitas. Jika
+ produsen mengaktifkan fitur ini, perangkat akan menawarkan mode bentuk bebas sebagai tambahan
+ untuk mode layar terbagi.
+ </li>
+</ul>
+
+<img src="{@docRoot}images/android-7.0/mw-splitscreen.png" alt="" width="650" srcset="{@docRoot}images/android-7.0/mw-splitscreen.png 1x,
+ {@docRoot}images/android-7.0/mw-splitscreen_2x.png 2x," id="img-split-screen" />
+<p class="img-caption">
+ <strong>Gambar 1.</strong> Dua aplikasi berjalan berdampingan dalam mode layar terbagi.
+</p>
+
+<p>
+ Pengguna bisa beralih ke mode multi-jendela dengan cara berikut:
+</p>
+
+<ul>
+ <li>Jika pengguna membuka <a href="{@docRoot}guide/components/recents.html">layar
+ Ringkasan</a> dan menekan lama pada
+ judul aktivitas, mereka bisa menyeret aktivitas itu ke bagian yang disorot pada layar
+ untuk menempatkan aktivitas dalam mode multi-jendela.
+ </li>
+
+ <li>Jika pengguna menekan lama pada tombol Ringkasan, perangkat akan menempatkan
+ aktivitas saat ini dalam mode multi-jendela, dan membuka layar Ringkasan guna
+ memungkinkan pengguna memilih aktivitas lain untuk berbagi layar.
+ </li>
+</ul>
+
+<p>
+ Pengguna bisa <a href="{@docRoot}guide/topics/ui/drag-drop.html">seret dan
+ lepas</a> data dari aktivitas satu ke aktivitas lain sewaktu aktivitas berbagi
+ layar. (Sebelumnya, pengguna hanya bisa menyeret dan melepas data dalam aktivitas
+ tunggal.)
+</p>
+
+<h2 id="lifecycle">Daur Hidup Multi-Jendela</h2>
+
+<p>
+ Mode multi-jendela tidak mengubah <a href="{@docRoot}training/basics/activity-lifecycle/index.html">daur hidup
+ aktivitas</a>.
+</p>
+
+<p>
+ Dalam mode multi-jendela, hanya aktivitas yang paling sering digunakan pengguna
+ yang akan aktif pada waktu tertentu. Aktivitas ini dianggap <em>teratas</em>.
+ Semua aktivitas lainnya dalam keadaan berhenti sementara, sekalipun terlihat.
+ Akan tetapi, sistem memberikan aktivitas, yang berhenti-sementara-namun-terlihat ini, prioritas lebih tinggi
+ daripada aktivitas yang tidak terlihat. Jika pengguna berinteraksi dengan salah satu
+ aktivitas yang berhenti sementara, aktivitas tersebut akan dilanjutkan kembali, dan aktivitas
+ teratas sebelumnya akan dihentikan sementara.
+</p>
+
+<p class="note">
+ <strong>Catatan:</strong> Dalam mode multi-jendela, aplikasi bisa berada dalam keadaan berhenti sementara
+ dan masih terlihat oleh pengguna. Sebuah aplikasi mungkin perlu melanjutkan aktivitasnya
+ bahkan saat berhenti sementara. Misalnya, aplikasi pemutar video yang ada dalam
+ mode berhenti sementara namun terlihat harus tetap menampilkan videonya. Karena alasan
+ ini, kami menyarankan aktivitas yang memutar video <em>tidak</em> menghentikan sementara video
+ dalam handler {@link android.app.Activity#onPause onPause()} mereka.
+ Sebagai gantinya, aktivitas itu harus menghentikan sementara video di {@link android.app.Activity#onStop
+ onStop()}, dan melanjutkan pemutaran di {@link android.app.Activity#onStart
+ onStart()}.
+</p>
+
+<p>
+ Bila pengguna menempatkan aplikasi dalam mode multi-jendela, sistem akan memberi tahu
+ aktivitas tersebut mengenai perubahan konfigurasi, sebagaimana ditetapkan dalam <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Menangani Perubahan
+ Waktu Proses</a>. Hal ini juga terjadi ketika pengguna mengubah skala aplikasi, atau menempatkan kembali aplikasi
+ ke mode layar penuh.
+ Pada dasarnya, perubahan ini memiliki implikasi daur hidup aktivitas yang sama
+ seperti saat sistem memberi tahu aplikasi bahwa perangkat telah beralih
+ dari mode potret ke mode lanskap, kecuali dimensi perangkat
+ telah berubah sebagai ganti bertukar posisi. Seperti yang dibahas di <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Menangani Perubahan
+ Waktu Proses</a>, aktivitas Anda bisa menangani perubahan konfigurasi itu sendiri, atau
+ mengizinkan sistem memusnahkan aktivitas dan membuatnya kembali dengan dimensi
+ baru.
+</p>
+
+<p>
+ Jika pengguna mengubah ukuran jendela dan membuat dimensinya lebih besar, sistem
+ akan mengubah ukuran aktivitas untuk menyesuaikan dengan tindakan pengguna dan mengeluarkan <a href="{@docRoot}guide/topics/resources/runtime-changes.html">perubahan waktu proses</a>
+ bila diperlukan. Jika aplikasi tertinggal dibandingkan gambar di area yang baru diekspos,
+ sistem untuk sementara mengisi area tersebut dengan warna yang ditetapkan oleh atribut {@link
+ android.R.attr#windowBackground windowBackground} atau dengan atribut gaya
+ <code>windowBackgroundFallback</code> secara default.
+</p>
+
+<h2 id="configuring">Mengonfigurasi Aplikasi Anda untuk Mode Multi-Jendela</h2>
+
+<p>
+ Jika aplikasi Anda menargetkan Android N, Anda bisa mengonfigurasi bagaimana dan
+ apakah aktivitas aplikasi Anda mendukung tampilan multi-jendela. Anda bisa menyetel
+ atribut dalam manifes untuk mengontrol ukuran dan layoutnya.
+ Setelan atribut aktivitas root berlaku pada semua aktivitas
+ dalam tumpukan tugasnya. Misalnya, jika aktivitas root memiliki
+ <code>android:resizeableActivity</code> yang disetel ke true, maka semua aktivitas
+ dalam tumpukan tugas bisa diubah ukurannya.
+</p>
+
+<p class="note">
+ <strong>Catatan:</strong> Jika Anda membangun aplikasi multi-orientasi dengan versi
+ SDK lebih rendah dari Android N, dan pengguna menggunakan aplikasi
+ dalam mode multi-jendela, sistem akan mengubah ukuran aplikasi secara paksa. Sistem akan menampilkan kotak
+ dialog yang memperingatkan pengguna bahwa aplikasi mungkin berperilaku tidak terduga. Sistem
+ <em>tidak</em> mengubah ukuran aplikasi yang berorientasi tetap; jika
+ pengguna berusaha membuka aplikasi berorientasi tetap saat mode multi-jendela,
+ aplikasi akan menggunakan seluruh layar.
+</p>
+
+<h4 id="resizeableActivity">android:resizeableActivity</h4>
+<p>
+ Setel atribut ini dalam manifes <code><activity></code> Anda atau simpul
+ <code><application></code> untuk mengaktifkan atau menonaktifkan tampilan
+ multi-jendela:
+</p>
+
+<pre>
+android:resizeableActivity=["true" | "false"]
+</pre>
+
+<p>
+ Jika atribut ini disetel ke true, aktivitas bisa dijalankan di
+ mode layar terbagi dan mode bentuk bebas. Jika atribut ini disetel ke false, aktivitas
+ tidak akan mendukung mode multi-jendela. Jika nilai ini false, dan pengguna
+ berusaha memulai aktivitas dalam mode multi-jendela, aktivitas akan menggunakan
+ layar penuh.
+</p>
+
+<p>
+ Jika aplikasi Anda menargetkan Android N, namun Anda tidak menetapkan nilai
+ untuk atribut ini, nilai atribut default adalah true.
+</p>
+
+<h4 id="supportsPictureInPicture">android:supportsPictureInPicture</h4>
+
+<p>
+ Setel atribut ini dalam simpul <code><activity></code> manifes Anda untuk
+ menunjukkan apakah aktivitas mendukung tampilan gambar-dalam-gambar. Atribut ini
+ diabaikan jika <code>android:resizeableActivity</code> bernilai false.
+</p>
+
+<pre>
+android:supportsPictureInPicture=["true" | "false"]
+</pre>
+
+<h3 id="layout">Atribut layout</h3>
+
+<p>
+ Dengan Android N, elemen manifes <code><layout></code>
+ mendukung beberapa atribut yang memengaruhi cara aktivitas berperilaku dalam
+ mode multi-jendela:
+</p>
+
+<dl>
+ <dt>
+ <code>android:defaultWidth</code>
+ </dt>
+
+ <dd>
+ Lebar default aktivitas saat dijalankan dalam mode bentuk bebas.
+ </dd>
+
+ <dt>
+ <code>android:defaultHeight</code>
+ </dt>
+
+ <dd>
+ Tinggi default aktivitas saat dijalankan dalam mode bentuk bebas.
+ </dd>
+
+ <dt>
+ <code>android:gravity</code>
+ </dt>
+
+ <dd>
+ Penempatan awal dari aktivitas saat dibuka dalam mode bentuk bebas. Lihat referensi
+ {@link android.view.Gravity} untuk mengetahui nilai yang cocok.
+ </dd>
+
+ <dt>
+ <code>android:minimalHeight</code>, <code>android:minimalWidth</code>
+ </dt>
+
+ <dd>
+ Tinggi dan lebar minimum untuk aktivitas dalam mode layar terbagi
+ dan mode bentuk bebas. Jika pengguna memindahkan pembagi dalam mode layar terbagi
+ untuk membuat aktivitas lebih kecil dari minimum yang ditetapkan, sistem akan memangkas
+ aktivitas sesuai dengan ukuran yang diminta pengguna.
+ </dd>
+</dl>
+
+<p>
+ Misalnya, kode berikut menampilkan cara menetapkan ukuran dan lokasi default
+ aktivitas, dan ukuran minimumnya, bila aktivitas ditampilkan dalam
+ mode bentuk bebas:
+</p>
+
+<pre>
+<activity android:name=".MyActivity">
+ <layout android:defaultHeight="500dp"
+ android:defaultWidth="600dp"
+ android:gravity="top|end"
+ android:minimalHeight="450dp"
+ android:minimalWidth="300dp" />
+</activity>
+</pre>
+
+<h2 id="running">Menjalankan Aplikasi Anda dalam Mode Multi-Jendela</h2>
+
+<p>
+ Android N menawarkan fungsionalitas baru untuk mendukung aplikasi yang bisa berjalan
+ dalam mode multi-jendela.
+</p>
+
+<h3 id="disabled-features">Fitur yang dinonaktifkan dalam mode multi-jendela</h3>
+
+<p>
+ Fitur tertentu akan dinonaktifkan atau diabaikan bila perangkat berada dalam mode
+ multi-jendela, karena dianggap tidak logis bagi suatu aktivitas yang mungkin berbagi
+ layar perangkat dengan aktivitas atau aplikasi lainnya. Fitur tersebut meliputi:
+
+<ul>
+ <li>Beberapa opsi penyesuaian di <a href="{@docRoot}training/system-ui/index.html">System UI</a>
+ dinonaktifkan; misalnya, aplikasi tidak bisa menyembunyikan bilah status
+ jika tidak berjalan dalam mode layar penuh.
+ </li>
+
+ <li>Sistem akan mengabaikan perubahan pada atribut <code><a href=
+ "{@docRoot}guide/topics/manifest/activity-element.html#screen"
+ >android:screenOrientation</a></code>.
+ </li>
+</ul>
+
+<h3 id="change-notification">Pemberitahuan perubahan multi-jendela dan melakukan kueri</h3>
+
+<p>
+ Metode baru berikut telah ditambahkan ke kelas {@link android.app.Activity}
+ untuk mendukung tampilan multi-jendela. Untuk mengetahui detail tentang setiap
+ metode, lihat <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi N
+ Preview SDK</a>.
+</p>
+
+<dl>
+ <dt>
+ <code>Activity.isInMultiWindowMode()</code>
+ </dt>
+
+ <dd>
+ Panggil untuk mengetahui apakah aktivitas berada dalam mode multi-jendela.
+ </dd>
+
+ <dt>
+ <code>Activity.isInPictureInPictureMode()</code>
+ </dt>
+
+ <dd>
+ Panggil untuk mengetahui apakah aktivitas berada dalam mode gambar-dalam-gambar.
+
+ <p class="note">
+ <strong>Catatan:</strong> Mode gambar-dalam-gambar adalah kasus khusus pada
+ mode multi-jendela. Jika <code>myActivity.isInPictureInPictureMode()</code>
+ mengembalikan nilai true, maka <code>myActivity.isInMultiWindowMode()</code> juga
+ mengembalikan nilai true.
+ </p>
+ </dd>
+
+ <dt>
+ <code>Activity.onMultiWindowModeChanged()</code>
+ </dt>
+
+ <dd>
+ Sistem akan memanggil metode ini bila aktivitas masuk atau keluar dari
+ mode multi-jendela. Sistem akan meneruskan ke metode sebuah nilai true jika
+ aktivitas tersebut memasuki mode multi-jendela, dan nilai false jika aktivitas
+ tersebut meninggalkan mode multi-jendela.
+ </dd>
+
+ <dt>
+ <code>Activity.onPictureInPictureModeChanged()</code>
+ </dt>
+
+ <dd>
+ Sistem akan memanggil metode ini bila aktivitas masuk atau keluar dari
+ mode gambar-dalam-gambar. Sistem akan meneruskan ke metode sebuah nilai true jika
+ aktivitas tersebut memasuki mode gambar-dalam-gambar, dan nilai false jika aktivitas
+ tersebut meninggalkan mode gambar-dalam-gambar.
+ </dd>
+</dl>
+
+<p>
+ Ada juga versi {@link android.app.Fragment} untuk setiap
+ metode ini, misalnya <code>Fragment.isInMultiWindowMode()</code>.
+</p>
+
+<h3 id="entering-pip">Memasuki mode gambar-dalam-gambar</h3>
+
+<p>
+ Untuk menempatkan aktivitas dalam mode gambar-dalam-gambar, panggil metode baru
+ <code>Activity.enterPictureInPictureMode()</code>. Metode ini tidak berpengaruh jika
+ perangkat tidak mendukung mode gambar-dalam-gambar. Untuk informasi selengkapnya,
+ lihat dokumentasi <a href="picture-in-picture.html">Gambar-dalam-Gambar</a>.
+</p>
+
+<h3 id="launch">Meluncurkan Aktivitas Baru dalam Mode Multi-Jendela</h3>
+
+<p>
+ Bila meluncurkan aktivitas baru, Anda bisa memberi petunjuk pada sistem bahwa aktivitas
+ baru harus ditampilkan bersebelahan dengan aktivitas yang sedang aktif, jika memungkinkan. Caranya,
+ gunakan flag
+ <code>Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT</code>. Meneruskan
+ flag ini akan meminta perilaku berikut:
+</p>
+
+<ul>
+ <li>Jika perangkat berada dalam mode layar terbagi, sistem akan berupaya membuat
+ aktivitas baru di sebelah aktivitas yang meluncurkannya, sehingga kedua aktivitas tersebut
+ berbagi layar. Tidak ada jaminan sistem mampu melakukannya, namun sistem akan
+ membuat aktivitas bersebelahan jika memungkinkan.
+ </li>
+
+ <li>Jika perangkat tidak berada dalam mode layar terbagi, flag ini tidak akan berpengaruh.
+ </li>
+</ul>
+
+<p>
+ Jika perangkat dalam mode bentuk bebas dan Anda menjalankan aktivitas baru, Anda bisa
+ menetapkan dimensi aktivitas baru dan lokasi layar dengan memanggil
+ <code>ActivityOptions.setLaunchBounds()</code>. Metode ini tidak berpengaruh jika
+ perangkat tidak berada dalam mode multi-jendela.
+</p>
+
+<p class="note">
+ <strong>Catatan:</strong> Jika Anda meluncurkan aktivitas dalam tumpukan tugas, aktivitas
+ tersebut akan menggantikan aktivitas pada layar, dengan mewarisi semua
+ properti multi-jendelanya. Jika Anda ingin meluncurkan aktivitas baru sebagai jendela
+ terpisah dalam mode multi-jendela, Anda harus meluncurkannya dalam tumpukan tugas baru.
+</p>
+
+<h3 id="dnd">Mendukung seret dan lepas</h3>
+
+<p>
+ Pengguna bisa <a href="{@docRoot}guide/topics/ui/drag-drop.html">menyeret dan
+ melepas</a> data dari satu aktivitas ke aktivitas yang lain selagi kedua aktivitas
+ berbagi layar. (Sebelumnya, pengguna hanya bisa menyeret dan melepas data dalam
+ aktivitas tunggal.) Karena alasan ini, Anda mungkin perlu menambahkan fungsionalitas
+ seret dan lepas ke aplikasi jika aplikasi saat ini belum mendukungnya.
+</p>
+
+<p>
+ N Preview SDK menambahkan paket <a href="{@docRoot}reference/android/view/package-summary.html"><code>android.view</code></a>
+ untuk mendukung seret dan lepas lintas-aplikasi. Untuk mengetahui detail tentang kelas dan metode
+ berikut, lihat <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi N
+ Preview SDK</a>.
+</p>
+
+<dl>
+ <dt>
+ <code>android.view.DropPermissions</code>
+ </dt>
+
+ <dd>
+ Objek token bertanggung jawab menetapkan izin yang diberikan kepada aplikasi
+ yang menerima pelepasan tersebut.
+ </dd>
+
+ <dt>
+ <code>View.startDragAndDrop()</code>
+ </dt>
+
+ <dd>
+ Alias baru untuk {@link android.view.View#startDrag View.startDrag()}. Untuk
+ mengaktifkan seret dan lepas lintas-aktivitas, teruskan flag baru
+ <code>View.DRAG_FLAG_GLOBAL</code>. Jika Anda perlu memberikan izin URI ke
+ aktivitas penerima, teruskan flag baru,
+ <code>View.DRAG_FLAG_GLOBAL_URI_READ</code> atau
+ <code>View.DRAG_FLAG_GLOBAL_URI_WRITE</code>, sebagaimana mestinya.
+ </dd>
+
+ <dt>
+ <code>View.cancelDragAndDrop()</code>
+ </dt>
+
+ <dd>
+ Membatalkan operasi seret yang sedang berlangsung. Hanya bisa dipanggil oleh
+ aplikasi yang menghasilkan operasi seret.
+ </dd>
+
+ <dt>
+ <code>View.updateDragShadow()</code>
+ </dt>
+
+ <dd>
+ Menggantikan bayangan penyeretan untuk operasi seret yang sedang berlangsung. Hanya
+ bisa dipanggil oleh aplikasi yang menghasilkan operasi seret.
+ </dd>
+
+ <dt>
+ <code>Activity.requestDropPermissions()</code>
+ </dt>
+
+ <dd>
+ Meminta izin untuk URI materi yang diteruskan dengan {@link
+ android.content.ClipData} yang terdapat dalam {@link android.view.DragEvent}.
+ </dd>
+</dl>
+
+<h2 id="testing">Menguji Dukungan Multi-Jendela Aplikasi Anda</h2>
+
+<p>
+ Apakah Anda memperbarui aplikasi untuk Android N atau tidak, Anda harus
+ verifikasi bagaimana perilakunya di mode multi-jendela saat pengguna mencoba untuk menjalankannya
+ dalam mode multi-jendela pada perangkat yang menjalankan Android N.
+</p>
+
+<h3 id="configuring">Mengonfigurasi Perangkat Pengujian</h3>
+
+<p>
+ Jika Anda pasang Android N pada perangkat, mode
+ layar terbagi secara otomatis didukung.
+</p>
+
+<h3 id="test-non-n">Jika aplikasi Anda tidak dibangun dengan N Preview SDK</h3>
+
+<p>
+ Jika Anda tidak membangun aplikasi dengan N Preview SDK dan pengguna berupaya menggunakan
+ aplikasi dalam mode multi-jendela, sistem secara paksa akan mengubah ukuran aplikasi kecuali jika aplikasi
+ mendeklarasikan orientasi tetap.
+</p>
+
+<p>
+ Jika aplikasi Anda tidak mendeklarasikan orientasi tetap, Anda harus meluncurkan aplikasi
+ pada perangkat yang menjalankan Android N dan berupaya menempatkan aplikasi tersebut dalam
+ mode layar terbagi. Verifikasi pengalaman pengguna
+ bisa diterima bila aplikasi secara paksa diubah ukurannya.
+</p>
+
+<p>
+ Jika aplikasi mendeklarasikan orientasi tetap, Anda harus berupaya menempatkan aplikasi dalam
+ mode multi-jendela. Verifikasi apakah saat Anda melakukannya, aplikasi tetap berada dalam
+ mode layar penuh.
+</p>
+
+<h3 id="test-mw">Jika Anda mendukung mode multi-jendela</h3>
+
+<p>
+ Jika Anda membuat aplikasi Anda dengan N Preview SDK dan belum menonaktifkan
+ dukungan multi-jendela, verifikasi perilaku berikut dalam mode layar terbagi
+ dan mode bentuk bebas.
+</p>
+
+<ul>
+ <li>Luncurkan aplikasi dalam mode layar penuh, kemudian beralih ke mode multi-jendela dengan
+ menekan lama pada tombol Ringkasan. Verifikasi apakah aplikasi beralih dengan benar.
+ </li>
+
+ <li>Jalankan aplikasi secara langsung dalam mode multi-jendela, dan verifikasi aplikasi
+ diluncurkan dengan benar. Anda bisa meluncurkan aplikasi dalam mode multi-jendela dengan menekan
+ tombol Ringkasan, kemudian menekan lama baris judul pada aplikasi Anda dan menyeretnya
+ ke salah satu area yang disorot di layar.
+ </li>
+
+ <li>Ubah ukuran aplikasi Anda dalam mode layar terbagi dengan menyeret garis pembagi.
+ Verifikasi apakah aplikasi mengubah ukuran tanpa mogok, dan apakah elemen UI yang diperlukan
+ terlihat.
+ </li>
+
+ <li>Jika Anda telah menetapkan dimensi minimum aplikasi, cobalah untuk mengubah ukuran
+ aplikasi di bawah dimensi tersebut. Verifikasi apakah Anda tidak bisa mengubah ukuran aplikasi menjadi
+ lebih kecil dari minimum yang ditetapkan.
+ </li>
+
+ <li>Melalui semua pengujian, verifikasi apakah kinerja aplikasi Anda bisa diterima. Misalnya,
+ verifikasi apakah tidak ada jeda yang terlalu lama untuk memperbarui UI setelah
+ aplikasi diubah ukurannya.
+ </li>
+</ul>
+
+<h4 id="test-checklist">Daftar periksa pengujian</h4>
+
+<p>
+ Untuk verifikasi kinerja aplikasi Anda dalam mode multi-jendela, cobalah operasi
+ berikut. Anda harus mencoba semua operasi ini dalam mode layar terbagi dan
+ dan mode multi-jendela, kecuali jika dinyatakan berbeda.
+</p>
+
+<ul>
+ <li>Masuki dan tinggalkan mode multi-jendela.
+ </li>
+
+ <li>Beralih dari aplikasi Anda ke aplikasi lain, dan verifikasi apakah aplikasi berperilaku
+ sebagaimana mestinya saat terlihat namun tidak aktif. Misalnya, jika aplikasi Anda
+ sedang memutar video, verifikasi apakah video terus diputar selagi pengguna
+ berinteraksi dengan aplikasi lain.
+ </li>
+
+ <li>Dalam mode layar terbagi, cobalah menggeser garis pembagi untuk membuat aplikasi
+ Anda menjadi lebih besar dan lebih kecil. Coba operasi ini dalam konfigurasi berdampingan dan
+ atas-bawah. Verifikasi apakah aplikasi tidak mogok,
+ fungsionalitas penting bisa terlihat, dan operasi mengubah ukuran tidak memakan waktu terlalu
+ lama.
+ </li>
+
+ <li>Lakukan beberapa operasi ubah ukuran berturut-turut dalam waktu cepat. Verifikasi apakah
+ aplikasi Anda tidak mogok atau mengalami kebocoran memori. Untuk informasi tentang memeriksa penggunaan memori
+ aplikasi Anda, lihat <a href="{@docRoot}tools/debugging/debugging-memory.html">
+ Menyelidiki Penggunaan RAM Anda</a>.
+ </li>
+
+ <li>Gunakan aplikasi secara normal di sejumlah konfigurasi jendela yang berbeda, dan
+ verifikasi apakah aplikasi berperilaku sebagaimana mestinya. Verifikasi apakah teks terbaca, dan apakah
+ elemen UI tidak terlalu kecil untuk interaksi.
+ </li>
+</ul>
+
+<h3 id="test-disabled-mw">Jika Anda telah menonaktifkan dukungan multi-jendela</h3>
+
+<p>
+ Jika Anda menonaktifkan dukungan multi-jendela dengan menyetel
+ <code>android:resizableActivity="false"</code>, Anda harus menjalankan aplikasi pada
+ perangkat yang menjalankan Android N dan berusaha menempatkan aplikasi dalam
+ mode bentuk bebas dan mode layar terbagi. Verifikasi apakah saat Anda melakukannya, aplikasi tetap berada dalam
+ mode layar penuh.
+</p>
diff --git a/docs/html-intl/intl/in/preview/_book.yaml b/docs/html-intl/intl/in/preview/_book.yaml
deleted file mode 100644
index 88d6c71..0000000
--- a/docs/html-intl/intl/in/preview/_book.yaml
+++ /dev/null
@@ -1,342 +0,0 @@
-toc:
-- title: Ringkasan Program
- path: /preview/overview.html
- path_attributes:
- - name: es-lang
- value: Información general del programa
- - name: in-lang
- value: Ringkasan Program
- - name: ja-lang
- value: プログラム概要
- - name: ko-lang
- value: 프로그램 개요
- - name: pt-br-lang
- value: Visão geral do programa
- - name: ru-lang
- value: Обзор программы
- - name: vi-lang
- value: Tổng quan về Chương trình
- - name: zh-cn-lang
- value: 计划概览
- - name: zh-tw-lang
- value: 程式總覽
-
-- title: Dukungan dan Catatan Rilis
- path: /preview/support.html
-
-- title: Menyiapkan Pratinjau
- path: /preview/setup-sdk.html
- path_attributes:
- - name: es-lang
- value: Configurar el SDK de la versión preliminar
- - name: in-lang
- value: Menyiapkan Pratinjau
- - name: ja-lang
- value: Preview SDK のセットアップ
- - name: ko-lang
- value: 미리 보기 SDK 설정하기
- - name: pt-br-lang
- value: Configuração do Preview SDK
- - name: ru-lang
- value: Настройка пакета SDK Preview
- - name: vi-lang
- value: Kiểm thử trên Thiết bị
- - name: zh-cn-lang
- value: 设置预览版 SDK
- - name: zh-tw-lang
- value: 設定預覽版 SDK
-
-- title: Menguji pada Perangkat
- path: /preview/download.html
- path_attributes:
- - name: es-lang
- value: Pruebe en un dispositivo
- - name: in-lang
- value: Menguji pada Perangkat
- - name: ja-lang
- value: デバイス上でテストする
- - name: ko-lang
- value: 기기에서 테스트
- - name: pt-br-lang
- value: Testar em um dispositivo
- - name: ru-lang
- value: Тестирование на устройстве
- - name: vi-lang
- value: Kiểm thử trên Thiết bị
- - name: zh-cn-lang
- value: 在设备上测试
- - name: zh-tw-lang
- value: 在裝置上測試
-
-- title: Perubahan Perilaku
- path: /preview/behavior-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: 行為變更
- section:
- - title: Optimalisasi Latar Belakang
- path: /preview/features/background-optimization.html
- path_attributes:
- - name: es-lang
- value: Optimizaciones en segundo plano
- - name: in-lang
- value: Optimisasi Latar Belakang
- - name: ja-lang
- value: バックグラウンド処理の最適化
- - name: ko-lang
- value: 백그라운드 최적화
- - name: pt-br-lang
- value: Otimizações em segundo plano
- - name: ru-lang
- value: Оптимизация фоновых процессов
- - name: vi-lang
- value: Tối ưu hóa Chạy ngầm
- - name: zh-cn-lang
- value: 后台优化
- - name: zh-tw-lang
- value: 背景最佳化
- - title: Bahasa dan Lokal
- path: /preview/features/multilingual-support.html
- path_attributes:
- - name: es-lang
- value: Idioma y configuración regional
- - name: in-lang
- value: Bahasa dan Lokal
- - name: ja-lang
- value: 言語とロケール
- - name: ko-lang
- value: 언어 및 로케일
- - name: pt-br-lang
- value: Idioma e localidade
- - name: ru-lang
- value: Язык и языковой стандарт
- - name: vi-lang
- value: Ngôn ngữ và Bản địa
- - name: zh-cn-lang
- value: 语言和区域设置
- - name: zh-tw-lang
- value: 語言和地區設定
-
-- title: Android N for Developers
- path: /preview/api-overview.html
- 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 總覽
- section:
- - title: Dukungan Multi-Jendela
- path: /preview/features/multi-window.html
- path_attributes:
- - name: es-lang
- value: Compatibilidad con ventanas múltiples
- - name: in-lang
- value: Dukungan Multi-Jendela
- - name: ja-lang
- value: マルチ ウィンドウのサポート
- - name: ko-lang
- value: 다중 창 지원
- - name: pt-br-lang
- value: Suporte a várias janelas
- - name: ru-lang
- value: Поддержка многооконного режима
- - name: vi-lang
- value: Hỗ trợ đa cửa sổ
- - name: zh-cn-lang
- value: 多窗口支持
- - name: zh-tw-lang
- value: 多視窗支援
- - title: Pemberitahuan
- path: /preview/features/notification-updates.html
- path_attributes:
- - name: es-lang
- value: Notificaciones
- - name: in-lang
- value: Pemberitahuan
- - name: ja-lang
- value: 通知
- - name: ko-lang
- value: 알림
- - name: pt-br-lang
- value: Notificações
- - name: ru-lang
- value: Уведомления
- - name: vi-lang
- value: Thông báo
- - name: zh-cn-lang
- value: 通知
- - name: zh-tw-lang
- value: 通知
- - title: Data Saver
- path: /preview/features/data-saver.html
- - title: Perekaman TV
- path: /preview/features/tv-recording-api.html
- path_attributes:
- - name: es-lang
- value: Grabación de TV
- - name: in-lang
- value: Perekaman TV
- - name: ja-lang
- value: TV の録画
- - name: ko-lang
- value: TV 녹화
- - name: pt-br-lang
- value: Gravação para TV
- - name: ru-lang
- value: Запись ТВ
- - name: vi-lang
- value: Ghi lại TV
- - name: zh-cn-lang
- value: TV 录制
- - name: zh-tw-lang
- value: 電視錄製
- - title: Konfigurasi Keamanan Jaringan
- path: /preview/features/security-config.html
- path_attributes:
- - name: es-lang
- value: Configuración de seguridad de la red
- - name: ja-lang
- value: ネットワーク セキュリティ構成
- - name: ko-lang
- value: 네트워크 보안 구성
- - name: pt-br-lang
- value: Configurações de segurança de rede
- - name: ru-lang
- value: Конфигурация сетевой безопасности
- - name: vi-lang
- value: Cấu hình Bảo mật mạng
- - name: zh-cn-lang
- value: 网络安全配置
- - name: zh-tw-lang
- value: 網路安全性設定
- - title: Dukungan ICU4J
- path: /preview/features/icu4j-framework.html
- path_attributes:
- - name: es-lang
- value: API de ICU4J del framework de Android
- - name: in-lang
- value: ICU4J Android Framework API
- - name: ja-lang
- value: ICU4J Android フレームワーク API
- - name: ko-lang
- value: ICU4J Android 프레임워크 API
- - name: pt-br-lang
- value: APIs de estrutura do Android para ICU4J
- - name: ru-lang
- value: API-интерфейсы ICU4J в платформе Android
- - name: vi-lang
- value: API Khuôn khổ Android ICU4J
- - name: zh-cn-lang
- value: ICU4J Android 框架 API
- - name: zh-tw-lang
- value: ICU4J Android 架構 API
- - title: Fitur Bahasa Java 8
- path: /preview/j8-jack.html
- path_attributes:
- - name: es-lang
- value: Funciones del lenguaje Java 8
- - name: in-lang
- value: Fitur Bahasa Java 8
- - name: ja-lang
- value: Java 8 の機能
- - name: ko-lang
- value: Java 8 언어 기능
- - name: pt-br-lang
- value: Recursos de linguagem do Java 8
- - name: ru-lang
- value: Возможности языка Java 8
- - name: vi-lang
- value: Tính năng của Ngôn ngữ Java 8
- - name: zh-cn-lang
- value: Java 8 语言功能
- - name: zh-tw-lang
- value: Java 8 語言功能
- - title: Pembaruan Android for Work
- path: /preview/features/afw.html
- - title: Scoped Directory Access
- path: /preview/features/scoped-folder-access.html
- path_attributes:
- - name: es-lang
- value: Acceso a directorios determinados
- - name: ja-lang
- value: 特定のディレクトリへのアクセス
- - name: ko-lang
- value: 범위가 지정된 디렉터리 액세스
- - name: pt-br-lang
- value: Acesso a diretórios com escopo
- - name: ru-lang
- value: Доступ к выделенным каталогам
- - name: vi-lang
- value: Truy cập Thư mục theo Phạm vi
- - name: zh-cn-lang
- value: 作用域目录访问
- - name: zh-tw-lang
- value: 限定範圍目錄存取
-
-- title: Contoh
- path: /preview/samples.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: Perjanjian Lisensi
- path: /preview/license.html
- path_attributes:
- - name: es-lang
- value: Contrato de licencia
- - name: ja-lang
- value: 使用許諾契約
- - name: ko-lang
- value: 라이선스 계약
- - name: pt-br-lang
- value: Contrato de licença
- - name: ru-lang
- value: Лицензионное соглашение
- - name: zh-cn-lang
- value: 许可协议
- - name: zh-tw-lang
- value: 授權協議
diff --git a/docs/html-intl/intl/in/preview/api-overview.jd b/docs/html-intl/intl/in/preview/api-overview.jd
deleted file mode 100644
index b652dd9..0000000
--- a/docs/html-intl/intl/in/preview/api-overview.jd
+++ /dev/null
@@ -1,1039 +0,0 @@
-page.title=Android N for Developers
-meta.tags="preview", "androidn"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-apis_2x.png
-@jd:body
-
-
-
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>Fitur-fitur Utama bagi Pengembang</h2>
- <ol>
- <ul style="list-style-type:none;">
- <li><a href="#multi-window_support">Dukungan Multi-Jendela</a></li>
- <li><a href="#notification_enhancements">Pemberitahuan</a></li>
- <li><a href="#jit_aot">Kompilasi JIT/AOT</a></li>
- <li><a href="#quick_path_to_app_install">Jalur Cepat untuk Pasang Aplikasi</a></li>
- <li><a href="#doze_on_the_go">Istirahatkan Kapan Saja</a></li>
- <li><a href="#background_optimizations">Optimalisasi Latar Belakang</a></li>
- <li><a href="#data_saver">Data Saver</a></li>
- <li><a href="#vulkan">Vulkan API</a></li>
- <li><a href="#tile_api">Quick Settings Tile API</a></li>
- <li><a href="#number-blocking">Pemblokiran Nomor</a></li>
- <li><a href="#call_screening">Penyaringan Panggilan</a></li>
- <li><a href="#multi-locale_languages">Lokal dan Bahasa</a></li>
- <li><a href="#emoji">Emoji Baru</a></li>
- <li><a href="#icu4">ICU4J API di Android</a></li>
- <li><a href="#gles_32">OpenGL ES 3.2 API</a></li>
- <li><a href="#android_tv_recording">Perekaman Android TV</a></li>
- <li><a href="#android_for_work">Android for Work</a></li>
- <li><a href="#accessibility_enhancements">Aksesibilitas</a></li>
- <li><a href="#direct_boot">Direct Boot</a></li>
- <li><a href="#key_attestation">Key Attestation</a></li>
- <li><a href="#network_security_config">Network Security Config</a></li>
- <li><a href="#default_trusted_ca">CA Tepercaya Default</a></li>
- <li><a href="#apk_signature_v2">APK Signature Scheme V2</a></li>
- <li><a href="#scoped_directory_access">Scoped Directory Access</a></li>
- <li><a href="#keyboard_shortcuts_helper">Keyboard Shortcuts Helper</a></li>
- <li><a href="#sustained_performance_api">Sustained Performance API</a></li>
- <li><a href="#vr">Dukungan VR</a></li>
- <li><a href="#print_svc">Penyempurnaan Layanan Cetak</a></li>
- <li><a href="#virtual_files">File Maya</a></li>
- <li><a href="#framemetrics_api">FrameMetricsListener API</a></li>
- </ol>
-</div>
-</div>
-
-
-
-<p>Android N masih dalam pengembangan aktif, namun Anda bisa mencobanya
-sekarang sebagai bagian dari N Developer Preview. Bagian-bagian di bawah ini akan menyoroti sebagian dari
-fitur baru untuk pengembang. </p>
-
-<p>
- Pastikan memeriksa <a href="{@docRoot}preview/behavior-changes.html">Perubahan Perilaku</a> untuk mengetahui selengkapnya tentang
- bagian-bagian perubahan platform yang bisa memengaruhi aplikasi Anda, lihatlah
- panduan pengembang untuk mengetahui selengkapnya tentang fitur-fitur utama, dan unduh <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi API</a> untuk mengetahui detail tentang
- API baru.
-</p>
-
-<h2 id="multi-window_support">Dukungan Multi-Jendela</h2>
-
-
-<p>Di Android N, kami memperkenalkan fitur multitasking baru dan yang banyak diminta
-ke dalam platform — dukungan multi-jendela. </p>
-
- <p>Pengguna sekarang bisa membuka dua aplikasi sekaligus di layar. </p>
- <ul>
- <li>Pada ponsel dan tablet
-yang menjalankan Android N, pengguna bisa menjalankan dua aplikasi secara berdampingan atau
-satu aplikasi di atas yang lain dalam mode layar terbagi. Pengguna bisa mengubah ukuran aplikasi dengan menyeret
-pembagi di antara keduanya. </li>
-
-<li>Pada perangkat Android TV, aplikasi bisa menempatkan dirinya sendiri dalam <a href="{@docRoot}preview/features/picture-in-picture.html">mode
-gambar-dalam-gambar</a>, sehingga aplikasi bisa terus menampilkan materi sementara pengguna menjelajahi atau
-berinteraksi dengan aplikasi lain.</li>
- </ul>
-
-<div class="col-4of10">
-<img src="{@docRoot}preview/images/mw-portrait.png" alt="" style="height:460px;padding-left:1em;" id="img-split-screen" />
-<p class="img-caption">
- <strong>Gambar 1.</strong> Aplikasi yang berjalan dalam mode layar terbagi.
-</p>
-
- </div>
-
-<p>Khususnya pada tablet dan perangkat yang berlayar lebih besar lainnya, dukungan multi-jendela
-memberi Anda cara baru untuk memikat pengguna. Anda bahkan bisa mengaktifkan fitur seret-dan-lepas di
-aplikasi untuk memudahkan pengguna menyeret materi ke dan dari aplikasi — cara bagus
-untuk menyempurnakan pengalaman pengguna Anda. </p>
-
-<p>Tidak sulit menambahkan dukungan multi-jendela ke aplikasi Anda dan mengonfigurasi cara
-menangani tampilan multi-jendela. Misalnya, Anda bisa menetapkan dimensi
-minimum yang diizinkan aktivitas, sehingga mencegah pengguna mengubah ukuran aktivitas di bawah
-ukuran itu. Anda juga bisa menonaktifkan tampilan multi-jendela untuk aplikasi Anda, yang
- akan memastikan sistem hanya menampilkan aplikasi dalam mode layar penuh.</p>
-
-<p>
- Untuk informasi selengkapnya, lihat dokumentasi pengembang <a href="{@docRoot}preview/features/multi-window.html">Dukungan Multi-Jendela</a>.
-
-</p>
-
-<h2 id="notification_enhancements">Penyempurnaan Pemberitahuan</h2>
-
-<p>Di Android N kami telah mengubah desain pemberitahuan agar lebih mudah dan lebih cepat
-digunakan. Beberapa perubahan tersebut antara lain:</p>
-
-<ul>
- <li>
- <strong>Pembaruan template</strong>: Kami telah memperbarui template pemberitahuan untuk
- lebih menekankan citra pahlawan dan avatar. Pengembang akan dapat
- memanfaatkan template baru dengan penyesuaian kode yang minimal.
- </li>
-
- <li>
- <strong>Penyesuaian gaya pesan</strong>: Anda bisa menyesuaikan lebih banyak
- label antarmuka pengguna yang berkaitan dengan pemberitahuan Anda menggunakan kelas
- <code>MessageStyle</code>. Anda bisa mengonfigurasi pesan, judul percakapan,
- dan tampilan materi.
- </li>
-
- <li>
- <strong>Bundel pemberitahuan</strong>: Sistem bisa mengelompokkan pesan,
- misalnya menurut topik pesan, dan menampilkan kelompok pesan tersebut. Seorang pengguna bisa
- bertindak, misalnya Tutup atau Arsipkan, atas pesan yang ditampilkan. Jika Anda sudah
- mengimplementasikan pemberitahuan untuk Android Wear, Anda akan terbiasa dengan
- model ini.
- </li>
-
- <li>
- <strong>Balasan Langsung</strong>: Untuk aplikasi komunikasi real-time, sistem
- Android mendukung balasan inline sehingga pengguna bisa dengan cepat membalas
- SMS atau pesan teks secara langsung dari dalam antarmuka pemberitahuan.
- </li>
-
- <li>
- <strong>Tampilan khusus</strong>: Dua API baru memungkinkan Anda memanfaatkan dekorasi sistem,
- misalnya header pemberitahuan dan tindakan, saat menggunakan tampilan
- khusus dalam pemberitahuan.
- </li>
-</ul>
-
-<div class="col-4of12">
- <img src="{@docRoot}preview/images/notifications-1.png" alt="" style="padding:.5em;max-width:226px">
-</div>
-
-<div class="col-4of12">
- <img src="{@docRoot}preview/images/notifications-3.png" alt="" style="padding:.5em;max-width:226px">
-</div>
-
-<div class="col-4of12">
- <img src="{@docRoot}preview/images/notifications-2.png" alt="" style="padding:.5em;max-width:226px">
-</div>
-
-
-<p class="img-caption">
- <strong>Gambar 2.</strong> Bundel pemberitahuan dan balasan langsung.
-</p>
-
-<p>Untuk mengetahui cara mengimplementasikan fitur-fitur
- baru ini, lihat panduan <a href="{@docRoot}preview/features/notification-updates.html">Pemberitahuan</a>.
-</p>
-
-
-
-<h2 id="jit_aot">Kompilasi JIT/AOT yang dipandu profil</h2>
-
-<p>Di Android N, kami telah menambahkan compiler Just in Time (JIT) dengan pembuatan profil kode ke
-ART, yang memungkinkannya terus meningkatkan kinerja aplikasi Android saat
-dijalankan. Compiler JIT melengkapi compiler Ahead of Time (AOT) pada ART
-dan membantu memperbaiki kinerja waktu proses, menghemat ruang penyimpanan, dan mempercepat
-pembaruan aplikasi serta pembaruan sistem.</p>
-
-<p>Kompilasi yang dipandu profil memungkinkan ART mengelola kompilasi AOT/JIT untuk setiap aplikasi
-sesuai dengan penggunaan sebenarnya, serta kondisi pada perangkat. Misalnya
-,ART menyimpan profil setiap metode terbaik aplikasi dan bisa melakukan kompilasi lebih awal
-serta menyimpan sementara metode-metode tersebut di cache untuk mendapatkan kinerja terbaik. Hal ini membuat bagian lain dari aplikasi
-dibiarkan tidak dikompilasi hingga benar-benar digunakan.</p>
-
-<p>Di samping meningkatkan kinerja bagian-bagian penting aplikasi, kompilasi yang dipandu profil
-membantu mengurangi footprint RAM keseluruhan aplikasi, termasuk biner
-terkait. Fitur ini terutama penting pada perangkat dengan memori minim.</p>
-
-<p>ART mengelola kompilasi yang dipandu profil dengan cara yang meminimalkan dampak terhadap
-baterai perangkat. ART melakukan prakompilasi hanya bila perangkat sedang diam dan
-mengisi daya, sehingga menghemat waktu dan baterai dengan melakukan pekerjaan tersebut di awal.</p>
-
-<h2 id="quick_path_to_app_install">Jalur Cepat untuk Pasang Aplikasi</h2>
-
-<p>Salah satu manfaat paling nyata dari compiler JIT pada ART adalah kecepatan
-pemasnagan aplikasi dan pembaruan sistem. Bahkan aplikasi besar yang membutuhkan beberapa menit untuk
-dioptimalkan dan dipasang di Android 6.0 sekarang bisa dipasang hanya dalam hitungan
-detik. Pembaruan sistem juga lebih cepat, karena tidak ada lagi langkah optimalisasi. </p>
-
-<h2 id="doze_on_the_go">Istirahatkan Kapan Saja...</h2>
-
-<p>Android 6.0 memperkenalkan Istirahatkan, yaitu mode sistem yang menghemat baterai dengan menangguhkan
-aktivitas CPU dan jaringan di aplikasi bila perangkat sedang diam, misalnya saat
-diletakkan di atas meja atau dalam laci. </p>
-
-<p>Sekarang di Android N, Istirahatkan selangkah lebih maju dalam menghemat baterai kapan saja.
-Setiap kali layar mati dalam jangka waktu tertentu dan perangkat tidak terhubung ke sumber daya,
-Istirahatkan akan menerapkan subset pembatasan umum CPU dan jaringan pada aplikasi.
-Artinya pengguna bisa menghemat daya baterai meskipun perangkat dibawa di dalam
-tasnya.</p>
-
-
-<img src="/preview/images/doze-diagram-1.png" alt="" id="figure1" />
-<p class="img-caption">
- <strong>Gambar 3.</strong> Istirahatkan sekarang menerapkan
- pembatasan untuk meningkatkan daya tahan baterai bahkan saat perangkat sedang tidak diam.
-</p>
-
-
-<p>Tidak lama setelah layar dimatikan saat perangkat menggunakan daya baterai, Istirahatkan
-akan membatasi akses jaringan serta menangguhkan pekerjaan dan sinkronisasi. Selama jeda
-pemeliharaan, aplikasi diizinkan mengakses jaringan dan menjalankan semua
-pekerjaan/sinkronisasi yang ditangguhkan. Menyalakan layar atau mencolokkan perangkat akan mengeluarkan
-perangkat dari Istirahatkan.</p>
-
-<p>Bila perangkat dalam kondisi diam lagi, dengan layar mati dan menggunakan daya baterai selama
-jangka waktu tertentu, Istirahatkan akan menerapkan pembatasan CPU dan jaringan pada {@link
-android.os.PowerManager.WakeLock}, alarm {@link android.app.AlarmManager}, dan
-pemindaian GPS/Wi-Fi.</p>
-
-<p>Praktik terbaik untuk menyesuaikan aplikasi Anda dengan Istirahatkan adalah sama, baik
-perangkat sedang bergerak maupun diam, jadi jika Anda sudah memperbarui aplikasi untuk
-menjalankan Istirahatkan dengan lancar, berarti Anda sudah siap. Jika belum, mulailah <a href="{@docRoot}training/monitoring-device-state/doze-standby.html#assessing_your_app">menyesuaikan
-aplikasi Anda dengan Istirahatkan</a> sekarang juga.</p>
-
-<h2 id="background_optimizations">Project Svelte: Optimalisasi Latar Belakang</h2>
-
-<p>Project Svelte merupakan upaya berkelanjutan untuk meminimalkan penggunaan RAM oleh sistem dan aplikasi
-di semua jenis perangkat Android dalam ekosistem. Di Android N, Project
-Svelte berfokus pada optimalisasi cara aplikasi berjalan di latar belakang. </p>
-
-<p>Proses latar belakang merupakan bagian terpenting dari sebagian besar aplikasi. Bila ditangani dengan benar, proses
-ini bisa memberikan pengalaman pengguna yang mengagumkan — segera, cepat, dan sesuai konteks.
-Bila tidak ditangani dengan benar, proses latar belakang bisa menguras RAM (dan
-baterai) yang sebenarnya tidak perlu serta memengaruhi kinerja sistem untuk aplikasi lain. </p>
-
-<p>Sejak Android 5.0, {@link android.app.job.JobScheduler} telah menjadi
-cara yang disukai untuk melakukan pekerjaan latar belakang dengan cara yang baik
-bagi pengguna. Aplikasi bisa menjadwalkan pekerjaan sekaligus memungkinkan sistem mengoptimalkan berdasarkan
-kondisi memori, daya, dan konektivitas. JobScheduler menawarkan kontrol serta
-kemudahan, dan kami ingin semua aplikasi menggunakannya. </p>
-
-<p>
- Opsi baik lainnya adalah <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
- <code>GCMNetworkManager</code></a>, bagian dari Google Play Services, yang
- menawarkan penjadwalan pekerjaan serupa dengan kompatibilitas pada semua versi lawas
- Android.
-</p>
-
-<p>Kami terus memperluas <code>JobScheduler</code> dan
-<code>GCMNetworkManager</code> untuk memenuhi lebih banyak
-kasus penggunaan Anda — misalnya, di Android N Anda sekarang bisa menjadwalkan pekerjaan
-latar belakang berdasarkan perubahan di Content Providers. Pada saat yang sama kami mulai
-menghilangkan beberapa pola lama yang bisa mengurangi kinerja sistem,
-terutama pada perangkat yang minim memori.</p>
-
-<p>Di Android N kami membuang tiga siaran implisit yang umum digunakan —
- {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, {@link
- android.hardware.Camera#ACTION_NEW_PICTURE}, dan {@link
- android.hardware.Camera#ACTION_NEW_VIDEO} — karena ketiganya bisa mengaktifkan
-proses latar belakang pada beberapa aplikasi sekaligus serta menguras memori dan baterai. Jika
-aplikasi Anda menerimanya, manfaatkan N Developer Preview untuk
- beralih ke <code>JobScheduler</code> dan API terkait sebagai gantinya. </p>
-
-<p>
- Lihat dokumentasi <a href="{@docRoot}preview/features/background-optimization.html">Optimalisasi
- Latar Belakang</a> untuk mengetahui detailnya.
-</p>
-
-
-<h2 id="data_saver">Data Saver</h2>
-
-<div class="col-5of12" style="margin-right:1.5em;">
-<img src="{@docRoot}preview/images/datasaver.png" style="border:2px solid #ddd">
-
-<p class="img-caption" style="padding-right:2em;">
- <strong>Gambar 4.</strong> Data Saver di Settings.
-</p>
- </div>
-
-<p>Selama penggunaan perangkat seluler, biaya paket data seluler biasanya
- melebihi harga perangkat itu sendiri. Bagi banyak pengguna, data seluler adalah sumber daya
-mahal yang ingin mereka hemat. </p>
-
-<p>Android N memperkenalkan mode Data Saver, layanan sistem baru yang mengurangi
-penggunaan data seluler oleh aplikasi, baik saat roaming, mendekati akhir siklus tagihan,
-atau saat menggunakan paket data prabayar yang kecil. Data Saver memberi pengguna kemampuan mengontrol cara aplikasi
-menggunakan data seluler dan memungkinkan pengembang memberikan layanan yang lebih efisien bila Data
-Saver aktif. </p>
-
-<p>Bila pengguna mengaktifkan Data Saver di <strong>Settings</strong> dan perangkat
-dalam jaringan berkuota, sistem akan memblokir penggunaan data latar belakang dan memberi tahu aplikasi
-untuk menghemat penggunaan data latar depan — misalnya dengan membatasi
-kecepatan bit untuk streaming, mengurangi kualitas gambar, menangguhkan precaching optimistik,
-dan seterusnya. Pengguna bisa memasukkan aplikasi tertentu ke daftar putih untuk memungkinkan penggunaan data berkuota
-bila Data Saver diaktifkan.</p>
-
-<p>Android N memperluas {@link android.net.ConnectivityManager} untuk menyediakan cara pada aplikasi
-untuk <a href="{@docRoot}preview/features/data-saver.html#status">mengambil
-preferensi Data Saver pengguna</a> dan <a href="{@docRoot}preview/features/data-saver.html#monitor-changes">memantau
-perubahan preferensi</a>. Semua aplikasi harus memeriksa apakah pengguna telah mengaktifkan Data
-Saver dan berusaha membatasi penggunaan data latar belakang dan latar depan.</p>
-
-
-<h2 id="vulkan">Vulkan API</h2>
-
-<p>
- Android N mengintegrasikan <a href="http://www.khronos.org/vulkan" class="external-link">Vulkan™</a>, sebuah API rendering 3D baru, ke dalam platform. Seperti
- <a href="https://www.khronos.org/opengles/" class="external-link">OpenGL™
- ES</a>, Vulkan merupakan standar terbuka untuk grafik 3D dan rendering yang dikelola
- oleh Khronos Group.
-</p>
-
-<p>
- Vulkan didesain dari nol untuk meminimalkan overhead CPU dalam driver,
- dan memungkinkan aplikasi Anda mengontrol operasi GPU lebih langsung. Vulkan
- juga memungkinkan paralelisasi yang lebih baik dengan mengizinkan beberapa thread menjalankan
- pekerjaan seperti pembuatan buffer perintah sekaligus.
-</p>
-
-<p>
- Pustaka dan alat pengembangan Vulkan telah dimasukkan ke dalam Android NDK. Ini
- berisi:
-</p>
-
-<ul>
- <li>Header
- </li>
-
- <li>Layer validasi (pustaka debug)
- </li>
-
- <li>SPIR-V shader compiler
- </li>
-
- <li>Pustaka kompilasi shader waktu proses SPIR-V
- </li>
-</ul>
-
-<p>
- Vulkan hanya tersedia untuk aplikasi pada perangkat dengan perangkat keras yang mendukung Vulkan,
- seperti Nexus 5X, Nexus 6P, dan Nexus Player. Kami bekerja sama erat dengan mitra
- agar secepatnya makin banyak perangkat yang dilengkapi Vulkan.
-</p>
-
-<p>
- Untuk informasi selengkapnya, lihat <a href="{@docRoot}ndk/guides/graphics/index.html">dokumentasi API</a>.
-</p>
-
-<h2 id="tile_api">Quick Settings Tile API</h2>
-
-
-<div style="float:right;max-width:320px">
-<img src="{@docRoot}preview/images/quicksettings.png" style="padding-left:1.5em;">
-
-<p class="img-caption" style="padding-left:2em;">
- <strong>Gambar 5.</strong> Quick Settings Tile dalam bayangan pemberitahuan.
-</p>
-
-
- </div><p>Quick Settings adalah cara populer dan mudah untuk mengekspos setelan dan tindakan utama,
-langsung dari bayangan pemberitahuan. Di Android N, kami telah memperluas lingkup
-Quick Settings untuk membuatnya lebih berguna dan praktis lagi. </p>
-
-<p>Kami telah menambahkan ruang lebih banyak untuk petak Quick Settings tambahan, yang bisa
-diakses pengguna di semua bagian area tampilan halaman bernomor dengan mengusap ke kiri atau kanan. Kami juga memberi pengguna
-kontrol untuk mengatur letak dan petak Quick Settings apa yang akan
-ditampilkan — pengguna bisa menambahkan atau memindahkan petak dengan menyeret dan melepasnya. </p>
-
-<p>Bagi pengembang, Android N juga menambahkan API baru yang memungkinkan Anda mendefinisikan
- petak Quick Settings untuk memberi akses mudah kepada pengguna ke berbagai kontrol dan tindakan utama dalam aplikasi Anda.</p>
-
-<p>
- Petak Quick Settings dicadangkan untuk kontrol atau tindakan yang
- mendesak atau sering digunakan, dan tidak boleh digunakan sebagai pintasan untuk
- membuka aplikasi.
-</p>
-
-<p>
- Setelah mendefinisikan petak, Anda bisa menyediakannya kepada pengguna, yang bisa mereka tambahkan
- ke Quick Settings cukup dengan seret dan lepas.
-</p>
-
-<p>
- Untuk informasi tentang pembuatan petak aplikasi, lihat dokumentasi untuk
- <code>android.service.quicksettings.Tile</code> dalam <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi API</a> yang bisa diunduh.
-</p>
-
-
-
-<h2 id="number-blocking">Pemblokiran Nomor</h2>
-
-<p>Android N sekarang mendukung pemblokiran nomor di platform dan menyediakan
-API kerangka kerja agar penyedia layanan bisa mengelola daftar nomor blokir. Aplikasi SMS
-default, aplikasi telepon default, dan aplikasi operator bisa membaca dari dan
-menulis ke daftar nomor blokir. Daftar ini tidak dapat diakses oleh aplikasi lain.</p>
-
-<p>Dengan membuat pemblokiran nomor sebagai fitur standar pada platformnya, Android menyediakan
-cara konsisten bagi aplikasi untuk mendukung pemblokiran nomor di berbagai
-perangkat. Manfaat lain yang bisa diperoleh aplikasi antara lain:</p>
-
-<ul>
- <li> Nomor yang diblokir untuk panggilan juga akan diblokir untuk SMS
- <li> Nomor yang diblokir tetap disimpan saat pengaturan ulang dan pada berbagai perangkat melalui fitur Backup &
-Restore.
- <li> Beberapa aplikasi sekaligus bisa menggunakan daftar nomor blokir yang sama.
-</ul>
-
-<p>Selain itu, dengan integrasi aplikasi operator melalui Android berarti operator bisa
-membaca daftar nomor blokir pada perangkat dan melakukan pemblokiran di sisi layanan
-bagi pengguna tersebut untuk menghentikan panggilan dan SMS yang tidak diinginkan
-agar tidak sampai ke pengguna lewat media apa pun, misalnya VOIP-endpoint atau meneruskan panggilan telepon.</p>
-
-<p>
- Untuk informasi selengkapnya, lihat <code>android.provider.BlockedNumberContract</code>
- dalam <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi
- API</a> yang bisa diunduh.
-</p>
-
-<h2 id="call_screening">Penyaringan Panggilan</h2>
-
-<p>
- Android N memungkinkan aplikasi telepon default untuk menyaring panggilan masuk. Aplikasi
- telepon melakukannya dengan mengimplementasikan <code>CallScreeningService</code> baru,
- yang memungkinkan aplikasi telepon untuk melakukan sejumlah tindakan berdasarkan
- {@link android.telecom.Call.Details Call.Details} panggilan masuk, misalnya:
-</p>
-
-<ul>
- <li> Menolak panggilan masuk
- <li> Tidak mengizinkan panggilan tersebut disimpan ke log panggilan
- <li> Tidak menampilkan pemberitahuan untuk panggilan tersebut kepada pengguna
-</ul>
-
-<p>
- Untuk informasi selengkapnya, lihat <code>android.telecom.CallScreeningService</code>
- dalam <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi
- API</a> yang bisa diunduh.
-</p>
-
-
-<h2 id="multi-locale_languages">Dukungan Multilokal, Lebih Banyak Bahasa yang Didukung</h2>
-
-
-<p>Android N kini memungkinkan pengguna memilih <strong>banyak lokal</strong> di Settings,
-untuk mendukung kasus penggunaan dwibahasa dengan lebih baik. Aplikasi bisa menggunakan
-API baru untuk mendapatkan lokal pilihan pengguna kemudian menawarkan pengalaman pengguna
-yang lebih canggih untuk pengguna multilokal — seperti menampilkan hasil telusur dalam
-banyak bahasa dan tidak menawarkan untuk menerjemahkan halaman web dalam bahasa
-yang sudah diketahui pengguna.</p>
-
-<p>Bersama dukungan multilokal, Android N juga memperluas ragam bahasa
-yang tersedia untuk pengguna. Masing-masing ditawarkan lebih dari 25 varian untuk bahasa yang umum
-digunakan seperti Inggris, Spanyol, Prancis, dan Arab. Juga ditambahkan dukungan
-parsial untuk lebih dari 100 bahasa baru.</p>
-
-<p>Aplikasi bisa mendapatkan daftar lokal yang disetel oleh pengguna dengan memanggil
-<code>LocaleList.GetDefault()</code>. Untuk mendukung jumlah lokal yang diperluas, Android N sedang
- mengubah cara mengatasi masalah sumber daya. Pastikan Anda menguji dan memverifikasi bahwa aplikasi Anda
-berfungsi seperti yang diharapkan dengan logika resolusi sumber daya baru.</p>
-
-<p>Untuk mengetahui tentang perilaku resolusi sumber daya baru dan praktik terbaik yang
-harus Anda ikuti, lihat <a href="{@docRoot}preview/features/multilingual-support.html">Dukungan Multibahasa</a>.</p>
-
-
-<h2 id="emoji">Emoji Baru</h2>
-
-<p>
- Android N memperkenalkan emoji tambahan dan fitur terkait emoji termasuk
- emoji warna kulit dan dukungan untuk pemilih
- variasi. Jika aplikasi Anda mendukung emoji,
- ikuti panduan berikut untuk memanfaatkan fitur terkait emoji ini.
-</p>
-
-<ul>
- <li>
- <strong>Periksa apakah perangkat berisi emoji sebelum memasukannya.</strong>
- Untuk memeriksa emoji mana yang terdapat di
- font sistem, gunakan metode {@link android.graphics.Paint#hasGlyph(String)}.
- </li>
- <li>
- <strong>Periksa apakah emoji mendukung pemilih variasi.</strong>
- Pemilih variasi memungkinkan Anda
- menampilkan emoji tertentu berwarna atau hitam-putih.
- Pada perangkat seluler, aplikasi akan menghadirkan emoji berwarna daripada hitam-putih. Akan tetapi,
- jika aplikasi Anda menampilkan emoji sebaris dengan teks, maka harus menggunakan variasi hitam-putih.
- Untuk menentukan apakah sebuah emoji memiliki variasi, gunakan pemilih variasi.
- Untuk daftar lengkap dari karakter dengan variasinya, tinjaulah bagian
- <em>rangkaian variasi emoji</em> pada
- <a class="external-link" href="http://www.unicode.org/Public/9.0.0/ucd/StandardizedVariants-9.0.0d1.txt">
- dokumentasi Unicode mengenai variasi</a>.
- </li>
- <li>
- <strong>Periksa apakah emoji mendukung warna kulit.</strong> Android N memungkinkan pengguna memodifikasi
- warna kulit emoji yang dirender sesuai dengan preferensi mereka. Aplikasi keyboard harus menyediakan indikasi
- visual untuk emoji yang memiliki beberapa warna kulit dan harus memungkinkan pengguna
- memilih warna kulit yang mereka sukai. Untuk menentukan apakah emoji sistem memiliki
- modifier warna kulit, gunakan metode {@link android.graphics.Paint#hasGlyph(String)}.
- Anda bisa menentukan emoji mana yang menggunakan warna kulit dengan membaca
- <a class="external-link" href="http://unicode.org/emoji/charts/full-emoji-list.html">
- dokumentasi Unicode</a>.
- </li>
-</ul>
-
-
-<h2 id="icu4">ICU4J API di Android</h2>
-
-<p>
- Android N kini menawarkan subset <a href="http://site.icu-project.org/">ICU4J</a> API dalam kerangka kerja Android pada paket
- <code>android.icu</code>. Migrasi mudah, dan biasanya hanya perlu
- mengubah dari ruang nama <code>com.java.icu</code> ke
- <code>android.icu</code>. Jika Anda sudah menggunakan bundel ICU4J dalam aplikasi,
- maka beralih ke <code>android.icu</code> API yang disediakan dalam kerangka kerja
- Android bisa menghasilkan penghematan besar dalam ukuran APK.
-</p>
-
-<p>
- Untuk mengetahui selengkapnya tentang Android ICU4J API, lihat <a href="{@docRoot}preview/features/icu4j-framework.html">Dukungan ICU4J</a>.
-</p>
-
-
-
-<h2 id="gles_32">OpenGL™ ES 3.2 API</h2>
-
-<p>Android N menambahkan antarmuka kerangka kerja dan dukungan platform untuk OpenGL ES 3.2, termasuk:</p>
-
-<ul>
- <li> Semua ekstensi dari <a class="external-link" href="https://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">
-Android Extension Pack</a></a> (AEP) kecuali untuk <code>EXT_texture_sRGB_decode</code>.
- <li> Floating-point framebuffer untuk HDR dan shading yang ditangguhkan.
- <li> Panggilan draw BaseVertex agar batching dan streaming jadi lebih baik.
- <li> Kontrol akses buffer yang tangguh untuk mengurangi overhead WebGL.
-</ul>
-
-<p>API kerangka kerja untuk OpenGL ES 3.2 di Android N dilengkapi dengan kelas
- <code>GLES32</code>. Saat menggunakan OpenGL ES 3.2, pastikan
-mendeklarasikan persyaratan dalam file manifes Anda, dengan tag <code><uses-feature></code> dan
-atribut <code>android:glEsVersion</code>. </p>
-
-<p>Untuk informasi tentang menggunakan OpenGL ES, termasuk cara memeriksa versi
-OpenGL ES yang didukung perangkat saat waktu proses, lihat <a href="{@docRoot}guide/topics/graphics/opengl.html">Panduan OpenGL ES API</a>.</p>
-
-
-<h2 id="android_tv_recording">Perekaman Android TV</h2>
-
-<p>Android N menambahkan kemampuan untuk merekam dan memutar kembali materi dari layanan masukan
-Android TV melalui API perekaman baru. Karena dibangun dengan API perekaman yang sudah
-ada, layanan masukan TV bisa mengontrol data saluran apa yang bisa direkam, cara menyimpan
-sesi rekaman, dan mengelola interaksi pengguna dengan materi rekaman. </p>
-
-<p>Untuk informasi selengkapnya, lihat <a href="{@docRoot}preview/features/tv-recording-api.html">API Perekaman Android TV</a>.</p>
-
-
-<h2 id="android_for_work">Android for Work</h2>
-
-<p>Android for Work menambahkan berbagai fitur dan API baru untuk perangkat yang menjalankan Android N.
-Beberapa fitur unggulannya ada di bawah ini — untuk mengetahui daftar lengkap perubahannya, lihat
-<a href="{@docRoot}preview/features/afw.html">Pembaruan Android for Work</a>.</p>
-
-<h3 id="work_profile_security_challenge">Pertanyaan Keamanan Profil Kerja </h3>
-
-<p>
- Pemilik profil yang menargetkan N SDK
- bisa menetapkan pertanyaan keamanan terpisah untuk aplikasi yang berjalan di
- profil kerja. Pertanyaan kerja ditampilkan bila pengguna mencoba membuka
- aplikasi kerja apa pun. Jawaban pertanyaan keamanan yang benar akan membuka
- profil kerja dan mendekripsinya jika diperlukan. Untuk pemilik profil,
- <code>ACTION_SET_NEW_PASSWORD</code> akan meminta pengguna untuk menetapkan pertanyaan
- kerja, dan <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> meminta
- pengguna menyetel kunci perangkat.
-</p>
-
-<p>
- Pemilik profil bisa menyetel kebijakan kode sandi untuk pertanyaan kerja
- (seperti berapa lama seharusnya PIN, atau apakah sidik jari bisa digunakan
- untuk membuka kunci profil) menggunakan <code>setPasswordQuality()</code>,
- <code>setPasswordMinimumLength()</code> dan metode terkait. Pemilik profil
- juga bisa menyetel kunci perangkat, menggunakan instance <code>DevicePolicyManager</code>
- yang dikembalikan oleh metode <code>getParentProfileInstance()</code> baru.
- Selain itu, pemilik profil bisa menyesuaikan layar kredensial untuk
- pertanyaan kerja menggunakan metode baru <code>setOrganizationColor()</code> dan
- <code>setOrganizationName()</code>.
-</p>
-<h3 id="turn_off_work">Menonaktifkan pekerjaan </h3>
-
-<p>Pada perangkat dengan profil kerja, pengguna bisa beralih mode kerja. Bila mode
-kerja dinonaktifkan, profil yang dikelola akan dinonaktifkan untuk sementara, yang akan menonaktifkan aplikasi
-profil kerja, sinkronisasi latar belakang, dan pemberitahuan. Termasuk aplikasi pemilik
-profil. Bila profil kerja dinonaktifkan, sistem akan menampilkan ikon status
-tetap untuk mengingatkan pengguna bahwa mereka tidak bisa meluncurkan aplikasi kerja. Peluncur
-menunjukkan bahwa aplikasi kerja dan widget tidak bisa diakses. </p>
-
-<h3 id="always_on_vpn">Always-On VPN </h3>
-
-<p>Pemilik perangkat dan pemilik profil bisa memastikan bahwa aplikasi kerja selalu menghubungkan
-melalui VPN yang ditetapkan. Sistem secara otomatis akan memulai VPN itu setelah booting
-perangkat.</p>
-
-<p>
- Metode <code>DevicePolicyManager</code> baru adalah
- <code>setAlwaysOnVpnPackage()</code> dan
- <code>getAlwaysOnVpnPackage()</code>.
-</p>
-
-<p>Karena layanan VPN bisa diikat langsung oleh sistem tanpa interaksi
-aplikasi, klien VPN perlu menangani titik masuk baru untuk Always-On VPN. Seperti
-sebelumnya, layanan ditunjukkan ke sistem melalui
-tindakan pencocokan filter intent <code>android.net.VpnService</code>. </p>
-
-<p>
- Pengguna bisa secara manual menyetel klien Always-On VPN yang mengimplementasikan
- metode <code>VPNService</code> dalam pengguna utama dengan menggunakan
- <strong>Settings>More>Vpn</strong>.
-</p>
-
-<h3 id="custom_provisioning">Penyediaan yang disesuaikan</h3>
-
-<p>
- Aplikasi bisa menyesuaikan alur penyediaan pemilik profil dan pemilik perangkat
- dengan warna dan logo perusahaan.
- <code>DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR</code> menyesuaikan
- warna alur. <code>DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI</code>
- menyesuaikan alur dengan logo perusahaan.
-</p>
-
-<h2 id="accessibility_enhancements">Penyempurnaan Aksesibilitas</h2>
-
-<p>Android N saat ini menawarkan Vision Settings langsung di layar Sambutan untuk
-persiapan perangkat baru. Ini sangat memudahkan pengguna untuk menemukan dan mengonfigurasi
-fitur aksesibilitas pada perangkat mereka, termasuk isyarat perbesaran, ukuran
-font, ukuran layar, dan TalkBack. </p>
-
-<p>Dengan fitur aksesibilitas yang penempatannya semakin jelas, pengguna Anda
-kemungkinan besar akan mencoba aplikasi dengan fitur-fitur yang diaktifkan itu. Pastikan Anda menguji aplikasi
-lebih dini dengan mengaktifkan dahulu setelan ini. Anda bisa mengaktifkannya dari Settings >
-Accessibility.</p>
-
-<p>Di Android N, layanan aksesibilitas sekarang bisa membantu pengguna yang mengalami gangguan
-motorik untuk menyentuh layar. API baru memungkinkan membangun layanan dengan
-fitur-fitur seperti pelacakan wajah, pelacakan mata, pemindaian titik, dan seterusnya, untuk
-memenuhi kebutuhan para pengguna tersebut.</p>
-
-<p>Untuk informasi selengkapnya, lihat <code>android.accessibilityservice.GestureDescription</code>
- dalam <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi API</a> yang bisa diunduh.</p>
-
-
-<h2 id="direct_boot">Direct Boot</h2>
-
-<p>Direct Boot memperbaiki waktu startup perangkat dan memungkinkan aplikasi
-yang telah didaftarkan memiliki fungsionalitas terbatas bahkan setelah boot ulang tak terduga.
-Misalnya, jika perangkat yang dienkripsi melakukan boot ulang selagi pengguna tidur,
-alarm terdaftar, pesan dan panggilan masuk sekarang bisa terus memberi tahu
-pengguna seperti biasa. Ini juga berarti layanan aksesibilitas bisa
- segera tersedia setelah restart.</p>
-
-<p>Direct Boot memanfaatkan enkripsi berbasis file di Android N
-untuk mengaktifkan kebijakan enkripsi yang telah disesuaikan bagi sistem dan data aplikasi.
-Sistem akan menggunakan penyimpanan yang dienkripsi dengan perangkat untuk data sistem terpilih dan data
-aplikasi yang terdaftar secara eksplisit. Secara default, penyimpanan yang dienkripsi dengan kredensial digunakan untuk semua
- data sistem lainnya, data pengguna, aplikasi, dan data aplikasi. </p>
-
-<p>Saat booting, sistem dimulai dalam mode terbatas dengan akses
-ke data yang dienkripsi dengan perangkat saja, dan tanpa akses umum ke aplikasi atau data.
-Jika Anda memiliki komponen yang ingin Anda jalankan dalam mode ini, Anda bisa mendaftarkannya
-dengan menyetel flag dalam manifes. Setelah restart, sistem akan mengaktifkan
-komponen terdaftar dengan menyiarkan intent <code>LOCKED_BOOT_COMPLETED</code>.
- Sistem akan memastikan data aplikasi yang dienkripsi dengan perangkat tersedia
-sebelum membuka kunci. Semua data lainnya tidak tersedia sebelum Pengguna mengonfirmasi
- kredensial layar kunci mereka untuk mendekripsinya. </p>
-
-Untuk informasi selengkapnya, lihat <a href="{@docRoot}preview/features/direct-boot.html">Direct Boot</a>.</p>
-</p>
-
-
-<h2 id="key_attestation">Key Attestation</h2>
-
-<p>Keystore yang didukung perangkat keras menyediakan metode yang jauh lebih aman untuk membuat, menyimpan,
-dan menggunakan kunci kriptografi pada perangkat Android. Keystore itu melindungi kunci dari
-kernel Linux, potensi kerentanan Android, dan ekstraksi
-dari perangkat yang di-root.</p>
-
-<p>Agar lebih mudah dan lebih aman dalam menggunakan keystore yang didukung perangkat keras,
-Android N memperkenalkan Key Attestation. Aplikasi dan perangkat-nonaktif bisa menggunakan Key
-Attestation untuk menentukan apakah penyandingan kunci RSA atau EC
-didukung perangkat keras, apa properti dari penyandingan kunci, dan batasan
- apa yang diterapkan terhadap penggunaan dan validitasnya. </p>
-
-<p>Aplikasi dan layanan perangkat-nonaktif bisa meminta informasi tentang penyandingan kunci
-melalui sertifikat pengesahan X.509 yang harus ditandatangani dengan kunci
-pengesahan yang valid. Kunci pengesahan adalah kunci penandatanganan ECDSA yang
-telah diinjeksikan ke dalam keystore yang didukung perangkat keras pada perangkat saat di pabriknya.
-Karena itu, sertifikat pengesahan yang ditandatangani oleh kunci pengesahan yang
-valid akan mengonfirmasi keberadaan keystore yang didukung perangkat keras, bersama
- detail pasangan kunci dalam keystore itu.</p>
-
-<p>Untuk memastikan perangkat ini menggunakan citra Android resmi yang
-aman dari pabrik, Key Attestation mengharuskan <a class="external-link" href="https://source.android.com/security/verifiedboot/verified-boot.html#bootloader_requirements">bootloader</a> perangkat
-menyediakan informasi berikut pada <a class="external-link" href="https://source.android.com/security/trusty/index.html">Trusted
-Execution Environment (TEE)</a>:</p>
-
-<ul>
-<li>Versi OS dan level patch yang dipasang pada perangkat</li>
-<li>Kunci publik <a href="https://source.android.com/security/verifiedboot/index.html" class="external-link">Verified Boot</a> dan status kunci</li>
- </ul>
-
-<p>Untuk informasi selengkapnya tentang fitur keystore yang didukung perangkat keras,
-lihat panduan untuk <a href="https://source.android.com/security/keystore/" class="external-link">Keystore yang Didukung Perangkat Keras</a>.</p>
-
-<p>Selain Key Attestation, Android N juga memperkenalkan
- kunci yang terikat sidik jari yang tidak dipanggil saat pendaftaran sidik jari.</p>
-
-<h2 id="network_security_config">Network Security Config</h2>
-
-<p>Di Android N, aplikasi bisa menyesuaikan perilaku koneksi aman mereka
-(HTTPS, TLS) secara aman, tanpa modifikasi kode, dengan menggunakan
-<em>Network Security Config</em> deklaratif sebagai ganti menggunakan API programatik
-konvensional yang rawan kesalahan (mis. X509TrustManager).</p>
-
- <p>Fitur yang didukung:</p>
-<ul>
-<li><b>Trust-anchor khusus.</b> Memungkinkan aplikasi menyesuaikan
-Certificate Authorities (CA) mana yang dipercaya untuk koneksi amannya. Misalnya,
-mempercayai sertifikat tertentu yang ditandatangani sendiri atau set CA publik yang dibatasi.
-</li>
-<li><b>Penggantian hanya-debug.</b> Memungkinkan pengembang aplikasi dengan aman men-debug
-koneksi aman aplikasi mereka tanpa menambah risiko pada basis yang sudah
-dipasang.
-</li>
-<li><b>Berhenti dari lalu lintas cleartext.</b> Memungkinkan aplikasi melindungi dirinya sendiri dari
-penggunaan lalu lintas cleartext yang tidak disengaja.</li>
-<li><b>Penyematan sertifikat.</b> Sebuah fitur canggih yang memungkinkan aplikasi
- membatasi kunci server mana yang dipercaya untuk koneksi aman.</li>
-</ul>
-
-<p>Untuk informasi selengkapnya, lihat <a href="{@docRoot}preview/features/security-config.html">Network Security
-Config</a>.</p>
-
-<h2 id="default_trusted_ca">Certificate Authority Tepercaya Default</h2>
-
-<p>Secara default, aplikasi yang menargetkan Android N hanya mempercayai sertifikat yang disediakan sistem
-dan tidak lagi mempercayai Certificate Authorities (CA) yang ditambahkan pengguna. Aplikasi yang menargetkan Android
-N dan ingin mempercayai CA yang ditambahkan pengguna harus menggunakan
-<a href="{@docRoot}preview/features/security-config.html">Network Security Config</a> untuk
-menetapkan cara mempercayai CA pengguna.</p>
-
-<h2 id="apk_signature_v2">APK Signature Scheme v2</h2>
-
-<p>
- Android N memperkenalkan APK Signature Scheme v2, sebuah skema penandatanganan aplikasi baru yang
- menawarkan waktu pasang aplikasi lebih cepat dan lebih banyak perlindungan terhadap perubahan
- tidak sah pada file APK. Secara default, Android Studio 2.2 dan Android
- Plugin untuk Gradle 2.2 menandatangani aplikasi Anda menggunakan APK Signature Scheme v2 dan
- skema penandatanganan tradisional, yang menggunakan penandatanganan JAR.
-</p>
-
-<p>
- Meskipun kami menyarankan untuk menerapkan APK Signature Scheme v2 pada aplikasi Anda, skema
- baru ini tidak wajib. Jika aplikasi Anda tidak dibangun dengan benar saat menggunakan APK
- Signature Scheme v2, Anda bisa menonaktifkan skema baru ini. Proses penonaktifan
- menyebabkan Android Studio 2.2 dan Android Plugin untuk Gradle 2.2 menandatangani aplikasi Anda
- menggunakan skema penandatanganan tradisional saja. Untuk menandatangani dengan
- skema tradisional saja, buka file <code>build.gradle</code> level-modul, kemudian
- tambahkan baris <code>v2SigningEnabled false</code> ke konfigurasi
- penandatanganan rilis Anda:
-</p>
-
-<pre>
- android {
- ...
- defaultConfig { ... }
- signingConfigs {
- release {
- storeFile file("myreleasekey.keystore")
- storePassword "password"
- keyAlias "MyReleaseKey"
- keyPassword "password"
- <strong>v2SigningEnabled false</strong>
- }
- }
- }
-</pre>
-
-<p class="caution"><strong>Perhatian: </strong> Jika Anda menandatangani aplikasi menggunakan APK
- Signature Scheme v2 dan membuat perubahan lebih jauh pada aplikasi, tanda tangan aplikasi
- menjadi tidak valid. Untuk alasan ini, gunakan alat seperti <code>zipalign</code>
- sebelum menandatangani aplikasi Anda menggunakan APK Signature Scheme v2, bukan setelahnya.
-</p>
-
-<p>
- Untuk informasi selengkapnya, baca dokumen Android Studio yang menjelaskan cara
- <a href="{@docRoot}studio/publish/app-signing.html#release-mode">
- menandatangani aplikasi</a> di Android Studio dan cara<a href="{@docRoot}studio/build/build-variants.html#signing"> mengonfigurasi
- file build untuk menandatangani aplikasi</a> menggunakan Android Plugin untuk Gradle.
-</p>
-
-<h2 id="scoped_directory_access">Scoped Directory Access</h2>
-
-<p>Di Android N, aplikasi bisa menggunakan API baru untuk meminta akses ke direktori <a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">penyimpanan
-eksternal</a> tertentu, termasuk direktori di media lepas-pasang seperti kartu
-SD. API baru ini sangat menyederhanakan cara aplikasi Anda mengakses direktori
-penyimpanan eksternal standar, seperti direktori <code>Pictures</code>. Aplikasi
-seperti aplikasi foto bisa menggunakan API ini sebagai ganti menggunakan
-<code>READ_EXTERNAL_STORAGE</code>, yang memberikan akses ke semua direktori
-penyimpanan, atau Storage Access Framework, yang membuat pengguna mengarah ke
-direktori tersebut.</p>
-
-<p>Selain itu, API baru ini menyederhanakan langkah-langkah yang diambil pengguna untuk memberikan akses
-penyimpanan eksternal ke aplikasi Anda. Bila Anda menggunakan API baru, sistem akan menggunakan UI izin
-sederhana yang memperinci dengan jelas direktori apa yang aksesnya diminta
-oleh aplikasi.</p>
-
-<p>Untuk informasi selengkapnya, lihat dokumentasi pengembang
-<a href="{@docRoot}preview/features/scoped-folder-access.html">Scoped
-Directory Access</a>.</p>
-
-<h2 id="keyboard_shortcuts_helper">Keyboard Shortcuts Helper</h2>
-
-<p>
-Di Android N, pengguna bisa menekan "Alt + /" untuk memunculkan layar <em>Keyboard Shortcuts</em>
-yang menampilkan semua pintasan yang tersedia baik dari sistem maupun dari
-aplikasi yang sedang mendapatkan fokus. Ini diambil secara otomatis dari menu aplikasi
-jika tersedia, namun pengembang bisa menyediakan daftar pintasan yang telah disesuaikan
-untuk layar. Anda bisa melakukannya dengan mengganti metode
-<code>Activity.onProvideKeyboardShortcuts()</code> baru, yang dijelaskan dalam
-<a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi API</a> yang bisa diunduh.
-</p>
-
-<p>
-Untuk memunculkan Keyboard Shortcuts Helper dari mana saja di aplikasi Anda,
-panggil {@code Activity.requestKeyboardShortcutsHelper()} untuk aktivitas terkait.
-</p>
-
-<h2 id="sustained_performance_api">Sustained Performance API</h2>
-
-<p>
-Kinerja bisa berfluktuasi secara dramatis untuk aplikasi yang berjalan lama, karena
-sistem melakukan throttle pada mesin sistem-di-chip saat komponen perangkat mencapai
-batas suhunya. Fluktuasi ini memberikan target bergerak bagi pengembang
-aplikasi yang sedang membuat aplikasi berkinerja tinggi dan berjalan lama.
-</p>
-
-<p>
-Untuk menangani batasan ini, Android N menyertakan dukungan untuk
-<em>mode kinerja kontinu</em>, yang memungkinkan OEM memberikan petunjuk mengenai kemampuan kinerja
-perangkat untuk aplikasi yang berjalan lama. Pengembang aplikasi
-bisa menggunakan petunjuk ini untuk menyesuaikan aplikasi agar kinerja perangkat bisa diprediksi
-dan pada level yang konsisten dalam jangka waktu lama.
-</p>
-
-<p>
-Pengembang aplikasi bisa mencoba API baru ini dalam N Developer Preview pada
-perangkat Nexus 6P saja. Untuk menggunakan fitur ini,
-setel flag jendela kinerja kontinu
-yang ingin Anda jalankan dalam mode kinerja kontinu. Setel flag ini menggunakan metode
-{@code Window.setSustainedPerformanceMode()}. Sistem secara otomatis
-akan menonaktifkan mode ini bila jendela tidak lagi mendapatkan fokus.
-</p>
-
-<h2 id="vr">Dukungan VR</h2>
-
-<p>
-Android N menambahkan dukungan platform dan optimalisasi untuk VR Mode baru yang memungkinkan
-pengembang membuat pengalaman VR berkualitas tinggi di seluler bagi para pengguna. Ada banyak perbaikan
-kinerja, termasuk akses ke inti CPU yang eksklusif untuk aplikasi VR.
-Di dalam aplikasi, Anda bisa memanfaatkan pelacakan kepala yang cerdas,
-dan pemberitahuan stereo yang bekerja untuk VR. Hal terpenting adalah Android N menyediakan
-grafis dengan latensi sangat rendah. Untuk informasi selengkapnya tentang membangun aplikasi VR untuk Android N,
-lihat <a href="https://developers.google.com/vr/android/">Google VR SDK untuk Android</a>.
-</p>
-
-
-<h2 id="print_svc">Penyempurnaan Layanan Cetak</h2>
-
-<p>
- Di Android N, pengembang layanan cetak kini bisa menampilkan informasi tambahan
- tentang masing-masing printer dan pekerjaan cetak.
-</p>
-
-<p>
- Saat mendaftarkan masing-masing printer, layanan cetak kini bisa menyetel
- ikon per printer dalam dua cara:
-</p>
-
-<ul>
- <li>Anda bisa menyetel ikon dari ID sumber daya dengan memanggil
- <code>PrinterInfo.Builder.setResourceIconId()</code>
- </li>
-
- <li>Anda bisa menampilkan ikon dari jaringan dengan memanggil
- <code>PrinterInfo.Builder.setHasCustomPrinterIcon()</code>, dan menyetel sebuah
- callback bila ikon diminta menggunakan
- <code>android.printservice.PrinterDiscoverySession.onRequestCustomPrinterIcon()</code>
- </li>
-</ul>
-
-<p>
- Selain itu, Anda bisa menyediakan aktivitas per printer untuk menampilkan informasi
- tambahan dengan memanggil <code>PrinterInfo.Builder.setInfoIntent()</code>.
-</p>
-
-<p>
- Anda bisa menunjukkan kemajuan dan status pekerjaan cetak di
- pemberitahuan pekerjaan cetak dengan memanggil masing-masing
- <code>android.printservice.PrintJob.setProgress()</code> dan
- <code>android.printservice.PrintJob.setStatus()</code>.
-</p>
-
-<p>
- Untuk informasi selengkapnya tentang metode ini,lihat dalam <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi API</a> yang bisa diunduh.
-</p>
-
-<h2 id="framemetrics_api">FrameMetricsListener API</h2>
-
-<p>
-FrameMetricsListener API memungkinkan aplikasi untuk memantau
-kinerja rendering UI. API tersebut menyediakan kemampuan ini dengan mengekspos Pub/Sub API streaming
-untuk mentransfer info frame-timing untuk jendela aplikasi saat ini. Data yang dikembalikan
-setara dengan yang ditampilkan <code><a href="{@docRoot}tools/help/shell.html#shellcommands">adb shell</a>
-dumpsys gfxinfo framestats</code>, namun tidak dibatasi pada 120 bingkai.
-</p>
-
-<p>
-Anda bisa menggunakan FrameMetricsListener untuk mengukur kinerja UI
-level interaksi di produksi, tanpa koneksi USB. API
-ini memungkinkan pengumpulan data dengan granularitas lebih tinggi daripada
-{@code adb shell dumpsys gfxinfo}. Granularitas lebih tinggi ini dimungkinkan karena
-sistem bisa mengumpulkan data untuk interaksi tertentu di aplikasi; sistem
-tidak perlu merekam ringkasan global untuk keseluruhan kinerja
-aplikasi, atau mengosongkan status global yang ada. Anda bisa menggunakan kemampuan ini
-untuk mengumpulkan data kinerja dan menangkap regresi di kinerja UI
-untuk kasus penggunaan sungguhan di dalam aplikasi.
-</p>
-
-<p>
-Untuk memantau sebuah jendela, implementasikan metode callback <code>FrameMetricsListener.onMetricsAvailable()</code>
-dan daftarkan di jendela itu. Untuk informasi selengkapnya, lihat
-dokumentasi kelas {@code FrameMetricsListener} di
-<a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi API</a> yang bisa diunduh.
-</p>
-
-<p>
-API menyediakan objek {@code FrameMetrics}, yang berisi data timing yang
-dilaporkan subsistem rendering untuk berbagai tahap pencapaian dalam daur hidup bingkai.
-Metrik yang didukung adalah: {@code UNKNOWN_DELAY_DURATION},
-{@code INPUT_HANDLING_DURATION}, {@code ANIMATION_DURATION},
-{@code LAYOUT_MEASURE_DURATION}, {@code DRAW_DURATION}, {@code SYNC_DURATION},
-{@code COMMAND_ISSUE_DURATION}, {@code SWAP_BUFFERS_DURATION},
-{@code TOTAL_DURATION}, dan {@code FIRST_DRAW_FRAME}.
-</p>
-
-
-<h2 id="virtual_files">File Maya</h2>
-
-<p>
- Di versi Android sebelumnya, aplikasi Anda bisa menggunakan Storage Access
- Framework untuk memungkinkan pengguna memilih file dari akun penyimpanan awan mereka,
- seperti Google Drive. Akan tetapi, tidak ada cara untuk merepresentasikan file yang
- tidak memiliki representasi bytecode langsung; setiap file diharuskan menyediakan
- aliran masukan.
-</p>
-
-<p>
- Android N menambahkan konsep <em>file maya</em> pada Storage Access
- Framework. Fitur file maya memungkinkan
- {@link android.provider.DocumentsProvider} Anda mengembalikan URI dokumen yang bisa
- digunakan bersama intent {@link android.content.Intent#ACTION_VIEW} sekalipun
- tidak memiliki representasi bytecode langsung. Android N juga memungkinkan Anda untuk
- menyediakan format alternatif untuk file pengguna, maya atau dengan cara lain.
-</p>
-
-<p>
- Untuk mendapatkan URI sebuah dokumen maya di aplikasi Anda, terlebih dahulu Anda membuat
- {@link android.content.Intent} untuk membuka UI pemilih file. Karena aplikasi
- tidak bisa membuka file maya secara langsung dengan menggunakan metode
- {@link android.content.ContentResolver#openInputStream(Uri) openInputStream()},
- aplikasi Anda tidak akan menerima file maya jika Anda memasukkan kategori
- {@link android.content.Intent#CATEGORY_OPENABLE}.
-</p>
-
-<p>
- Setelah pengguna menentukan pilihan, sistem akan memanggil metode
- {@link android.app.Activity#onActivityResult onActivityResult()}.
- Aplikasi Anda bisa mengambil URI file maya dan mendapatkan aliran masukan, seperti yang
- diperagakan dalam cuplikan kode di bawah.
-</p>
-
-<pre>
- // Other Activity code ...
-
- final static private int REQUEST_CODE = 64;
-
- // We listen to the OnActivityResult event to respond to the user's selection.
- @Override
- public void onActivityResult(int requestCode, int resultCode,
- Intent resultData) {
- try {
- if (requestCode == REQUEST_CODE &&
- resultCode == Activity.RESULT_OK) {
-
- Uri uri = null;
-
- if (resultData != null) {
- uri = resultData.getData();
-
- ContentResolver resolver = getContentResolver();
-
- // Before attempting to coerce a file into a MIME type,
- // check to see what alternative MIME types are available to
- // coerce this file into.
- String[] streamTypes =
- resolver.getStreamTypes(uri, "*/*");
-
- AssetFileDescriptor descriptor =
- resolver.openTypedAssetFileDescriptor(
- uri,
- streamTypes[0],
- null);
-
- // Retrieve a stream to the virtual file.
- InputStream inputStream = descriptor.createInputStream();
- }
- }
- } catch (Exception ex) {
- Log.e("EXCEPTION", "ERROR: ", ex);
- }
- }
-</pre>
-
-<p>
- Untuk informasi selengkapnya tentang mengakses file pengguna, lihat
- <a href="{@docRoot}guide/topics/providers/document-provider.html">Panduan Storage
- Access Frameworks</a>.
-</p>
diff --git a/docs/html-intl/intl/in/preview/behavior-changes.jd b/docs/html-intl/intl/in/preview/behavior-changes.jd
deleted file mode 100644
index 521312e..0000000
--- a/docs/html-intl/intl/in/preview/behavior-changes.jd
+++ /dev/null
@@ -1,610 +0,0 @@
-page.title=Perubahan Perilaku
-page.keywords=pratinjau,sdk,kompatibilitas
-meta.tags="preview", "compatibility"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-changes_2x.png
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>Dalam dokumen ini</h2>
-
-<ol>
- <li><a href="#perf">Peningkatan Kinerja</a>
- <ol>
- <li><a href="#doze">Istirahatkan</a></li>
- <li><a href="#bg-opt">Optimalisasi Latar Belakang</a></li>
- </ol>
- </li>
- <li><a href="#perm">Perubahan Izin</a>
- </li>
- <li><a href="#sharing-files">Berbagi File Antar Aplikasi</a></li>
- <li><a href="#accessibility">Peningkatan Aksesibilitas</a>
- <ol>
- <li><a href="#screen-zoom">Perbesaran Layar</a></li>
- <li><a href="#vision-settings">Vision Settings di Setup Wizard</a></li>
- </ol>
- </li>
- <li><a href="#ndk">Penautan Aplikasi NDK ke Pustaka Platform</a></li>
- <li><a href="#afw">Android for Work</a></li>
- <li><a href="#annotations">Retensi Anotasi</a></li>
- <li><a href="#other">Poin Penting Lainnya</a></li>
-</ol>
-
-<h2>Lihat Juga</h2>
-<ol>
- <li><a href="{@docRoot}preview/api-overview.html">
- Ringkasan Android N API</a></li>
-</ol>
-
-</div>
-</div>
-
-
-<p>
- Bersama fitur dan kemampuan baru, Android N
- menyertakan berbagai macam perubahan sistem dan perubahan perilaku API. Dokumen ini
- menyoroti beberapa perubahan utama yang harus dipahami dan diperhitungkan
- dalam aplikasi Anda.
-</p>
-
-<p>
- Jika Anda sebelumnya telah mempublikasikan aplikasi untuk Android, ketahuilah bahwa aplikasi Anda
- mungkin dipengaruhi oleh perubahan dalam platform.
-</p>
-
-
-<h2 id="perf">Baterai dan Memori</h2>
-
-<p>
-Android N menyertakan perubahan perilaku sistem yang bertujuan untuk meningkatkan daya tahan baterai
-perangkat dan mengurangi penggunaan RAM. Perubahan ini bisa memengaruhi akses aplikasi Anda ke
-sumber daya sistem, termasuk cara aplikasi Anda berinteraksi dengan aplikasi lain melalui
-intent implisit tertentu.
-</p>
-
-<h3 id="doze">Istirahatkan</h3>
-
-<p>
- Diperkenalkan dalam Android 6.0 (API level 23), Istirahatkan meningkatkan daya tahan baterai dengan
- menangguhkan aktivitas CPU dan jaringan bila pengguna tidak mencabut perangkat,
- tidak bergerak, dan layar dinonaktifkan. Android N lebih
- menyempurnakan Istirahatkan dengan menerapkan subset CPU dan pembatasan jaringan
- bila perangkat dicabut dan layar dinonaktifkan, namun tidak harus
- diam, misalnya, bila handset dibawa bepergian di saku pengguna.
-</p>
-
-
-<img src="{@docRoot}preview/images/doze-diagram-1.png" alt="" height="251px" id="figure1" />
-<p class="img-caption">
- <strong>Gambar 1.</strong> Ilustrasi tentang cara Istirahatkan menerapkan pembatasan
- aktivitas sistem level pertama untuk meningkatkan daya tahan baterai.
-</p>
-
-<p>
- Bila perangkat sedang menggunakan daya baterai, dan layar telah nonaktif selama jangka waktu
- tertentu, perangkat akan memasuki Istirahatkan dan menerapkan subset pembatasan pertama: Perangkat
- akan menutup akses jaringan aplikasi, serta menangguhkan pekerjaan dan sinkronisasi. Jika perangkat sedang
- diam selama jangka waktu tertentu setelah memasuki Istirahatkan, sistem akan menerapkan
- pembatasan Istirahatkan selebihnya terhadap alarm {@link android.os.PowerManager.WakeLock},
- {@link android.app.AlarmManager}, GPS, dan pemindaian Wi-Fi. Tidak peduli
- apakah sebagian atau semua pembatasan Istirahatkan diterapkan, sistem akan membangunkan
- perangkat selama jeda pemeliharaan singkat, dan selama itu aplikasi diizinkan
- mengakses jaringan dan bisa mengeksekusi semua pekerjaan/sinkronisasi yang telah ditangguhkan.
-</p>
-
-
-<img src="{@docRoot}preview/images/doze-diagram-2.png" alt="" id="figure2" />
-<p class="img-caption">
- <strong>Gambar 2.</strong> Ilustrasi tentang cara Istirahatkan menerapkan pembatasan
- aktivitas sistem level kedua setelah perangkat diam selama jangka waktu tertentu.
-</p>
-
-<p>
- Perhatikan, mengaktifkan layar atau mencolokkan steker perangkat akan mengeluarkan dari Istirahatkan
- dan membuang pembatasan pemrosesan ini. Perilaku tambahan ini tidak
- memengaruhi rekomendasi dan praktik terbaik dalam menyesuaikan aplikasi Anda dengan versi
- Istirahatkan sebelumnya yang diperkenalkan dalam Android 6.0 (API level 23), seperti yang dibahas di
- <a href="{@docRoot}training/monitoring-device-state/doze-standby.html">
- Mengoptimalkan untuk Istirahatkan dan Aplikasi Siaga</a>. Anda tetap harus
- mengikuti rekomendasi itu, seperti menggunakan Google Cloud Messaging (GCM) untuk
- mengirim dan menerima pesan, serta mulai merencanakan pembaruan
- untuk mengakomodasi perilaku Istirahatkan tambahan.
-</p>
-
-
-<h3 id="bg-opt">Project Svelte: Optimalisasi Latar Belakang</h3>
-
-<p>
- Android N membuang tiga siaran implisit untuk membantu mengoptimalkan
- penggunaan memori dan konsumsi daya. Perubahan ini penting karena siaran
- implisit sering memulai aplikasi yang telah didaftarkan untuk mendengarkannya di
- latar belakang. Membuang siaran ini bisa sangat menguntungkan
- kinerja perangkat dan pengalaman pengguna.
-</p>
-
-<p>
- Perangkat seluler seringkali mengalami perubahan konektivitas, seperti saat berpindah
- antara Wi-Fi dan data seluler. Saat ini, aplikasi bisa memantau perubahan dalam
- konektivitas dengan mendaftarkan suatu penerima untuk siaran implisit {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION} dalam manifes
- mereka. Karena banyak aplikasi yang didaftarkan untuk menerima siaran ini, switch jaringan tunggal
- bisa menyebabkan semuanya aktif dan memproses siaran tersebut
- secara bersamaan.
-</p>
-
-<p>
- Demikian pula, dalam Android versi sebelumnya, aplikasi bisa mendaftar untuk menerima siaran implisit {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} dan {@link
- android.hardware.Camera#ACTION_NEW_VIDEO} dari aplikasi lain, seperti
- Kamera. Bila pengguna mengambil gambar dengan aplikasi Kamera, semua aplikasi ini akan aktif
- untuk memproses siaran.
-</p>
-
-<p>
- Untuk meminimalkan masalah ini, Android N menerapkan optimalisasi
- berikut:
-</p>
-
-<ul>
- <li>Aplikasi yang menargetkan Android N tidak menerima siaran {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION}, sekalipun
- memiliki entri manifes untuk meminta pemberitahuan mengenai kejadian ini. Aplikasi
- yang berjalan tetap bisa mendengarkan {@code CONNECTIVITY_CHANGE} pada thread utama
- jika mereka meminta pemberitahuan dengan {@link android.content.BroadcastReceiver}.
- </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, bukan hanya aplikasi yang menargetkan Android N.
- </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} API menyediakan mekanisme yang tangguh untuk menjadwalkan
- operasi jaringan bila kondisi yang ditetapkan, seperti koneksi ke jaringan
- berbiaya tetap, terpenuhi. Anda juga dapat menggunakan {@link
- android.app.job.JobScheduler} untuk bereaksi terhadap perubahan pada penyedia materi.
-</p>
-
-<p>
- Untuk informasi selengkapnya tentang optimalisasi latar belakang di N dan cara menyesuaikan aplikasi Anda,
- lihat <a href="{@docRoot}preview/features/background-optimization.html">Optimalisasi
- Latar Belakang</a>.
-</p>
-
-<h2 id="perm">Perubahan Izin</h2>
-
-<p>
- Android N menyertakan perubahan pada izin yang bisa memengaruhi aplikasi Anda.
-</p>
-
-<h3 id="permfilesys">Perubahan izin sistem file</h3>
-
-<p>
- Guna meningkatkan keamanan file privat, direktori privat
- aplikasi yang menargetkan Android N atau yang lebih tinggi memiliki akses terbatas (<code>0700</code>).
- Pengaturan ini mencegah kebocoran metadata dari file privat, seperti ukuran
- atau eksistensi. Perubahan izin ini memiliki beberapa efek samping:
-</p>
-
-<ul>
- <li>
- Izin file privat tidak boleh dianggap remeh oleh pemilik,
- dan usaha untuk melakukannya menggunakan
- {@link android.content.Context#MODE_WORLD_READABLE} dan/atau
- {@link android.content.Context#MODE_WORLD_WRITEABLE}, akan memicu sebuah
- {@link java.lang.SecurityException}.
- <p class="note">
- <strong>Catatan:</strong> Seperti sebelumnya, pembatasan ini tidak sepenuhnya diterapkan.
- Aplikasi mungkin masih memodifikasi izin ke direktori privat mereka menggunakan
- API asal atau {@link java.io.File File} API. Akan tetapi, kami sangat
- tidak menyarankan Anda meremehkan izin direktori privat.
- </p>
- </li>
- <li>
- Meneruskan URI <code>file://</code> di luar domain paket dapat meninggalkan
- penerima dengan jalur yang tidak bisa di akses. Karena itu, upaya untuk meneruskan URI
- <code>file://</code> akan memicu
- <code>FileUriExposedException</code>. Cara yang disarankan adalah
- materi file privat menggunakan {@link
- android.support.v4.content.FileProvider}.
- </li>
- <li>
- {@link android.app.DownloadManager} tidak bisa lagi berbagi
- file yang tersimpan secara privat berdasarkan nama file. Aplikasi lawas dapat mengakibatkan
- jalur yang tidak dapat diakses saat mengakses {@link
- android.app.DownloadManager#COLUMN_LOCAL_FILENAME}. Aplikasi yang menargetkan
- Android N atau yang lebih tinggi akan memicu {@link java.lang.SecurityException} saat
- berupaya mengakses
- {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}.
- Aplikasi lawas yang menyetel lokasi unduhan ke lokasi publik dengan
- menggunakan
- {@link
- android.app.DownloadManager.Request#setDestinationInExternalFilesDir
- DownloadManager.Request.setDestinationInExternalFilesDir()} atau
- {@link
- android.app.DownloadManager.Request#setDestinationInExternalPublicDir
- DownloadManager.Request.setDestinationInExternalPublicDir()}
- tetap bisa mengakses jalur tersebut di
- {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}, akan tetapi,
- metode ini sangat tidak disarankan. Cara yang disarankan untuk mengakses file
- yang diekspos oleh {@link android.app.DownloadManager} adalah menggunakan
- {@link android.content.ContentResolver#openFileDescriptor
- ContentResolver.openFileDescriptor()}.
- </li>
-</ul>
-
-<h2 id="sharing-files">Berbagi File Antar Aplikasi</h2>
-
-<p>
-Untuk aplikasi yang menargetkan Android N, kerangka kerja Android menerapkan
-kebijakan {@link android.os.StrictMode} API yang melarang mengekspos URI {@code file://}
-di luar aplikasi Anda. Jika sebuah intent berisi URI file meninggalkan aplikasi Anda, aplikasi tersebut akan gagal
-dengan pengecualian {@code FileUriExposedException}.
-</p>
-
-<p>
-Untuk berbagi file antar aplikasi, Anda harus mengirim URI {@code content://}
-dan memberikan izin akses sementara pada URI. Cara termudah untuk memberikan izin ini adalah dengan
-menggunakan kelas {@link android.support.v4.content.FileProvider}. Untuk informasi selengkapnya
-mengenai izin dan berbagi file,
-lihat <a href="{@docRoot}training/secure-file-sharing/index.html">Berbagi File</a>.
-</p>
-
-<h2 id="accessibility">Peningkatan Aksesibilitas</h2>
-
-<p>
- Android N menyertakan perubahan yang bertujuan meningkatkan kegunaan
- platform untuk pengguna dengan penglihatan yang rendah atau lemah. Perubahan ini umumnya tidak
- memerlukan perubahan kode dalam aplikasi Anda, akan tetapi Anda harus memeriksa
- fitur ini dan mengujinya dengan aplikasi untuk menilai kemungkinan dampaknya terhadap pengalaman
- pengguna.
-</p>
-
-
-<h3 id="screen-zoom">Perbesaran Layar</h3>
-
-<p>
- Android N memungkinkan pengguna menyetel <strong>Display size</strong> yang akan memperbesar
- atau memperkecil semua elemen pada layar, sehingga meningkatkan aksesibilitas perangkat
- bagi pengguna yang kurang melihat. Pengguna tidak bisa memperbesar layar melewati lebar layar
- minimum <a href="http://developer.android.com/guide/topics/resources/providing-resources.html">
- sw320dp</a>, yang merupakan lebar Nexus 4, yakni ponsel ukuran sedang pada umumnya.
-</p>
-
-<div class="cols">
-
-<div class="col-6">
- <img src="{@docRoot}preview/images/screen-zoom-1.png" alt="" height="XXX" id="figure1" />
-</div>
-<div class="col-6">
- <img src="{@docRoot}preview/images/screen-zoom-2.png" alt="" height="XXX" id="figure1" />
-</div>
-
-</div> <!-- end cols -->
-<p class="img-caption">
- <strong>Gambar 3.</strong> Layar di sebelah kanan menampilkan efek
- penambahan Display size perangkat yang menjalankan citra sistem Android N.
-</p>
-
-
-<p>
- Bila kepadatan perangkat berubah, sistem akan memberi tahu aplikasi yang sedang berjalan dengan
- cara berikut:
-</p>
-
-<ul>
- <li>Jika aplikasi menargetkan API level 23 atau yang lebih rendah, sistem secara otomatis akan mematikan
- semua proses latar belakang. Artinya, jika pengguna beralih dari
- aplikasi tersebut untuk membuka layar <em>Settings</em> dan mengubah
- setelan <strong>Display size</strong>, maka sistem akan mematikan aplikasi tersebut dengan cara yang
- sama dengan saat memori tinggal sedikit. Jika aplikasi memiliki beberapa proses
- latar depan, sistem akan memberi tahu proses tersebut mengenai perubahan konfigurasi seperti
- dijelaskan dalam <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Menangani Perubahan
- Waktu Proses</a>, seolah-olah orientasi perangkat telah berubah.
- </li>
-
- <li>Jika sebuah aplikasi menargetkan Android N, semua prosesnya
- (latar depan dan latar belakang) akan diberi tahu mengenai perubahan konfigurasi seperti
- dijelaskan dalam <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Menangani Perubahan
- Waktu Proses</a>.
- </li>
-</ul>
-
-<p>
- Sebagian besar aplikasi tidak perlu melakukan perubahan untuk mendukung fitur ini, asalkan
- aplikasi tersebut mengikuti praktik terbaik Android. Hal-hal tertentu yang harus diperiksa:
-</p>
-
-<ul>
- <li>Uji aplikasi Anda pada perangkat dengan lebar layar <code><a href=
- "{@docRoot}guide/topics/resources/providing-resources.html">sw320dp</a></code>
- dan pastikan aplikasi berjalan dengan semestinya.
- </li>
-
- <li>Bila konfigurasi perangkat berubah, perbarui informasi cache
- yang bergantung pada kepadatan, seperti bitmap di cache atau sumber daya yang dimuat dari
- jaringan. Periksa perubahan konfigurasi bila aplikasi melanjutkan dari status dihentikan
- sementara.
- <p class="note">
- <strong>Catatan:</strong> Catatan: Jika Anda meng-cache data yang bergantung pada konfigurasi, ada
- baiknya untuk menyertakan metadata yang relevan seperti ukuran layar
- atau kepadatan piksel yang sesuai untuk data tersebut. Menyimpan metadata ini memungkinkan Anda untuk
- memutuskan apakah Anda perlu segarkan data cache setelah perubahan
- konfigurasi.
- </p>
- </li>
-
- <li>Hindari menetapkan dimensi dengan satuan px, karena satuan ini tidak diskalakan dengan
- kepadatan layar. Sebagai gantinya, tetapkan dimensi dengan satuan <a href="{@docRoot}guide/practices/screens_support.html">piksel yang tidak bergantung kepadatan
- </a> (<code>dp</code>).
- </li>
-</ul>
-
-<h3 id="vision-settings">Vision Settings di Setup Wizard</h3>
-
-<p>
- Android N menyertakan Vision Settings di layar Sambutan, di mana pengguna bisa
- menyiapkan setelan aksesibilitas berikut pada perangkat baru:
- <strong>Magnification gesture</strong>, <strong>Font size</strong>,
- <strong>Display size</strong> dan <strong>TalkBack</strong>. Perubahan ini
- meningkatkan visibilitas bug terkait dengan setelan layar yang berbeda. Untuk
- mengurangi dampak fitur ini, Anda harus menguji aplikasi dengan setelan ini
- diaktifkan. Anda bisa menemukannya pada <strong>Settings >
- Accessibility</strong>.
-</p>
-
-<h2 id="ndk">Penautan Aplikasi NDK ke Pustaka Platform</h2>
-
-<p>
- Android N menyertakan perubahan ruang nama untuk mencegah pemuatan API non-publik.
- Jika menggunakan NDK, Anda hanya boleh menggunakan API publik dari platform
- Android. Menggunakan API non-publik dalam rilis Android resmi berikutnya
- bisa menyebabkan aplikasi mogok.
-</p>
-
-<p>
- Untuk memberi tahu Anda agar menggunakan API non-publik, aplikasi yang berjalan pada perangkat
- Android N akan menghasilkan kesalahan dalam keluaran logcat bila aplikasi memanggil API non-publik.
- Kesalahan ini juga ditampilkan di layar perangkat berupa pesan untuk membantu
- meningkatkan kepedulian terhadap situasi ini. Anda harus memeriksa kode aplikasi untuk
- membuang penggunaan API platform non-publik dan secara saksama menguji aplikasi Anda menggunakan
- perangkat pratinjau atau emulator.
-</p>
-
-<p>
- Jika aplikasi Anda bergantung pada pustaka platform, lihat dokumentasi NDK untuk
- perbaikan tipikal guna menggantikan API privat umum dengan padanan API publik.
- Anda mungkin juga menautkan ke pustaka platform tanpa menyadarinya,
- terutama jika aplikasi Anda menggunakan pustaka yang merupakan bagian dari platform ini (seperti
- <code>libpng</code>), namun bukan bagian dari NDK. Dalam hal itu, pastikan
- APK Anda berisi semua file .so yang ingin ditautkan.
-</p>
-
-<p class="caution">
- <strong>Perhatian:</strong> Beberapa pustaka pihak ketiga mungkin menautkan ke API
- non-publik. Jika menggunakan pustaka ini, aplikasi Anda bisa mogok saat dijalankan
- pada rilis resmi Android berikutnya.
-</p>
-
-<p>
- Aplikasi tidak boleh bergantung pada atau menggunakan pustaka bawaan yang tidak disertakan dalam
- NDK, karena bisa mengalami perubahan, atau dipindahkan dari satu rilis Android ke
- rilis lainnya. Peralihan dari OpenSSL ke BoringSSL merupakan satu contoh dari perubahan semacam ini.
- Selain itu, perangkat yang berbeda bisa menawarkan tingkat kompatibilitas yang berbeda, karena
- tidak ada persyaratan kompatibilitas untuk pustaka platform yang tidak disertakan
- dalam NDK. Jika Anda harus mengakses pustaka non-NDK pada perangkat yang lebih lama, jadikan
- pemuatan bergantung pada level Android API.
-</p>
-
-<p>
- Untuk membantu Anda mendiagnosis tipe masalah ini ada beberapa contoh kesalahan Java dan NDK
- yang mungkin Anda temui saat berusaha membangun aplikasi dengan Android N:
-</p>
-
-<p>Contoh kesalahan Java:</p>
-<pre class="no-pretty-print">
-java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so"
- is not accessible for the namespace "classloader-namespace"
-</pre>
-
-<p>Contoh kesalahan NDK:</p>
-<pre class="no-pretty-print">
-dlopen failed: cannot locate symbol "__system_property_get" referenced by ...
-</pre>
-
-
-<p>
- Inilah beberapa perbaikan tipikal untuk aplikasi yang mengalami tipe kesalahan ini:
-</p>
-
-<ul>
- <li>Penggunaan getJavaVM dan getJNIEnv dari libandroid_runtime.so bisa diganti
- dengan fungsi JNI standar:
-<pre class="no-pretty-print">
-AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h>
-AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or
-JavaVM::AttachCurrentThread from <jni.h>.
-</pre>
- </li>
-
- <li>Penggunaan simbol {@code property_get} dari {@code libcutils.so} bisa
- diganti dengan {@code alternative __system_property_get} publik.
- Caranya, gunakan {@code __system_property_get} dengan menyertakan yang berikut:
-<pre>
-#include <sys/system_properties.h>
-</pre>
- </li>
-
- <li>Penggunaan simbol {@code SSL_ctrl} dari {@code libcrypto.so} harus
- diganti dengan aplikasi versi lokal. Misalnya, Anda harus menautkan
- {@code libcyrpto.a} secara statis dalam file {@code .so} atau menyertakan
- {@code libcrypto.so} Anda sendiri secara dinamis dari BoringSSL atau OpenSSL dalam aplikasi Anda.
- </li>
-</ul>
-
-<h2 id="afw">Android for Work</h2>
-<p>
- Android N berisi perubahan untuk aplikasi yang menargetkan Android for Work, termasuk
- perubahan pada pemasangan sertifikat, penyetelan ulang sandi, manajemen pengguna
- tambahan, dan akses ke identifier perangkat. Jika Anda membangun aplikasi untuk
- lingkungan Android for Work, Anda harus meninjau perubahan ini dan memodifikasi
- aplikasi sebagaimana mestinya.
-</p>
-
-<ul>
- <li>Anda harus pasang pemasang sertifikat yang didelegasikan sebelum DPC bisa
- menyetelnya. Untuk aplikasi profil dan aplikasi pemilik perangkat yang menargetkan N SDK, Anda harus
- pasang pemasang sertifikat yang didelegasikan sebelum pengontrol kebijakan
- perangkat (DPC) memanggil
- <code>DevicePolicyManager.setCertInstallerPackage()</code>. Jika pemasang
- belum dipasang, sistem akan melontarkan
- <code>IllegalArgumentException</code>.
- </li>
-
- <li>Pembatasan sandi penyetelan ulang untuk admin perangkat sekarang diterapkan ke pemilik
- profil. Admin perangkat tidak bisa lagi menggunakan
- {@code DevicePolicyManager.resetPassword()} untuk menghapus sandi atau mengubah
- sandi yang sudah disetel. Admin perangkat tetap bisa menyetel sandi, namun hanya
- bila perangkat belum memiliki sandi, PIN, atau pola.
- </li>
-
- <li>Pemilik perangkat dan profil bisa mengelola akun meskipun pembatasan
- telah disetel. Pemilik perangkat dan pemilik profil bisa memanggil Account Management API
- sekalipun pembatasan pengguna <code>DISALLOW_MODIFY_ACCOUNTS</code> diberlakukan.
- </li>
-
- <li>Pemilik perangkat bisa mengelola pengguna tambahan lebih mudah. Bila perangkat
- berjalan dalam mode pemilik perangkat, maka pembatasan <code>DISALLOW_ADD_USER</code>
- secara otomatis akan ditetapkan. Ini mencegah pengguna membuat pengguna tambahan yang
- tidak terkelola. Selain itu, <code>CreateUser()</code> dan
- <code>createAndInitializeUser()</code> metode tidak digunakan lagi; metode
- <code>DevicePolicyManager.createAndManageUser()</code> telah menggantikannya.
- </li>
-
- <li>Pemilik perangkat bisa mengakses identifier perangkat. Pemilik perangkat bisa mengakses
- alamat MAC Wi-Fi dari perangkat, menggunakan
- <code>DevicePolicyManagewr.getWifiMacAddress()</code>. Jika Wi-Fi belum pernah
- diaktifkan pada perangkat tersebut, metode ini akan mengembalikan nilai {@code null}.
- </li>
-
- <li>Setelan Mode Kerja mengontrol akses ke aplikasi kerja. Bila mode kerja tidak aktif, peluncur sistem
- akan menunjukkan aplikasi kerja tidak tersedia dengan membuat warnanya jadi abu-abu. Mengaktifkan kembali
- mode kerja akan memulihkan perilaku normal.
-</ul>
-
-<p>
- Untuk informasi selengkapnya tentang perubahan Android for Work di Android N, lihat
- <a href="{@docRoot}preview/features/afw.html">Pembaruan Android for Work</a>.
-</p>
-
-<h2 id="annotations">Retensi Anotasi</h2>
-
-<p>
-Android N memperbaiki bug dengan visibilitas anotasi diabaikan.
-Masalah ini mengaktifkan waktu proses untuk mengakses anotasi yang seharusnya tidak bisa
-dilakukan. Anotasi ini termasuk:
-</p>
-
-<ul>
- <li>{@code VISIBILITY_BUILD}: Dimaksudkan agar hanya bisa terlihat pada waktu pembuatan.</li>
- <li>{@code VISIBILITY_SYSTEM}: Dimaksud agar bisa terlihat pada waktu proses, namun hanya pada
- sistem yang mendasarinya.</li>
-</ul>
-
-<p>
-Jika aplikasi Anda mengandalkan perilaku ini, tambahkan kebijakan retensi untuk anotasi yang harus
-tersedia di waktu proses. Caranya dengan menggunakan {@code @Retention(RetentionPolicy.RUNTIME)}.
-</p>
-
-<h2 id="other">Poin Penting Lainnya</h2>
-
-<ul>
-<li>Bila aplikasi berjalan pada Android N, namun menargetkan level API yang lebih rendah,
-dan pengguna mengubah ukuran tampilan, proses aplikasi akan dimatikan. Aplikasi
-harus dapat menangani skenario ini dengan lancar. Jika tidak, maka akan mogok
-bila pengguna memulihkannya dari Recents.
-
-<p>
-Anda harus menguji aplikasi untuk memastikan
-perilaku ini tidak terjadi.
-Anda bisa melakukannya dengan menyebabkan suatu mogok yang identik
-saat mematikan aplikasi secara manual melalui DDMS.
-</p>
-
-<p>
-Aplikasi yang menargetkan N dan yang di atasnya tidak secara otomatis dimatikan saat perubahan kepadatan;
-akan tetapi, aplikasi tersebut mungkin tetap merespons perubahan konfigurasi dengan buruk.
-</p>
-</li>
-
-<li>
-Aplikasi pada Android N harus mampu menangani perubahan konfigurasi dengan lancar,
-dan tidak boleh mengalami mogok pada start selanjutnya. Anda bisa memverifikasi perilaku aplikasi
-dengan mengubah ukuran font (<strong>Setting</strong> >
-<strong>Display</strong> > <strong>Font size</strong>), kemudian memulihkan
-aplikasi dari Recents.
-</li>
-
-<li>
-Dikarenakan adanya bug di versi Android sebelumnya, sistem tidak menandai penulisan
- ke soket TCP di thread utama sebagai pelanggaran mode-ketat. Android N memperbaiki bug ini.
-Aplikasi yang menunjukkan perilaku ini kini melontarkan sebuah {@code android.os.NetworkOnMainThreadException}.
-Secara umum, melakukan operasi jaringan di thread utama tidak baik karena operasi ini
-biasanya memiliki latensi tinggi yang menyebabkan ANR dan jank.
-</li>
-
-<li>
-Kelompok metode {@code Debug.startMethodTracing()} kini default ke
-keluaran penyimpanan di direktori paket tertentu di penyimpanan bersama,
-sebagai ganti di level teratas
-kartu SD. Berarti aplikasi tidak perlu lagi meminta izin {@code WRITE_EXTERNAL_STORAGE} untuk menggunakan API ini.
-</li>
-
-<li>
-Banyak platform API yang kini mulai memeriksa beban besar yang dikirim
-ke seluruh transaksi {@link android.os.Binder}, dan sistem
-kini melontarkan kembali {@code TransactionTooLargeExceptions}
-sebagai {@code RuntimeExceptions}, sebagai ganti logging secara diam-diam atau menyembunyikannya. Satu contoh
-umum adalah menyimpan terlalu banyak data di
-{@link android.app.Activity#onSaveInstanceState Activity.onSaveInstanceState()},
-yang menyebabkan {@code ActivityThread.StopInfo} melontarkan
-{@code RuntimeException} bila aplikasi Anda menargetkan Android N.
-</li>
-
-<li>
-Jika sebuah aplikasi mengeposkan tugas {@link java.lang.Runnable} ke{@link android.view.View}, dan
-{@link android.view.View}
-tidak terpasang ke jendela, sistem
-akan mengantrekan tugas {@link java.lang.Runnable} dengan {@link android.view.View};
-tugas {@link java.lang.Runnable} tidak akan dieksekusi hingga
-{@link android.view.View} terpasang
-ke jendela. Perilaku ini mengatasi bug berikut:
-<ul>
- <li>Jika sebuah aplikasi mengeposkan ke {@link android.view.View} dari thread selain thread UI jendela yang dimaksud,
- maka {@link java.lang.Runnable} mungkin akan menjalankan thread yang salah.
- </li>
- <li>Jika tugas {@link java.lang.Runnable} diposkan dari thread selain
- looper-thread, aplikasi bisa mengekspos tugas {@link java.lang.Runnable}.</li>
-</ul>
-</li>
-
-<li>
-Jika sebuah aplikasi di Android N dengan
-izin{@link android.Manifest.permission#DELETE_PACKAGES DELETE_PACKAGES}
-mencoba menghapus sebuah paket, namun sebuah aplikasi berbeda telah memasang paket itu,
-sistem akan memerlukan konfirmasi pengguna. Dalam skenario ini, aplikasi harus mengharapkan
-{@link android.content.pm.PackageInstaller#STATUS_PENDING_USER_ACTION STATUS_PENDING_USER_ACTION}
-sebagai status kembalian bila memanggil
-{@link android.content.pm.PackageInstaller#uninstall PackageInstaller.uninstall()}.
-</li>
-
-</ul>
-
diff --git a/docs/html-intl/intl/in/preview/download-ota.jd b/docs/html-intl/intl/in/preview/download-ota.jd
deleted file mode 100644
index 4adf9bb..0000000
--- a/docs/html-intl/intl/in/preview/download-ota.jd
+++ /dev/null
@@ -1,332 +0,0 @@
-page.title=Menerapkan Citra OTA Perangkat
-
-@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">Sebelum mengunduh dan memasang
- komponen Android Preview SDK, Anda harus menyetujui ketentuan dan persyaratan
- berikut.</p>
-
- <h2 class="norule">Ketentuan dan Persyaratan</h2>
-
- <div class="sdk-terms" onfocus="this.blur()" style="width:678px">
-Ini adalah Perjanjian Lisensi Android SDK Preview ("Perjanjian Lisensi").
-
-1. Pengantar
-
-1.1 Android SDK Preview (dalam Perjanjian Lisensi ini disebut "Pratinjau" dan secara spesifik termasuk file sistem Android, paket API, dan file pustaka Pratinjau, jika disediakan) diberikan lisensinya kepada Anda sesuai dengan ketentuan Perjanjian Lisensi. Perjanjian Lisensi ini merupakan kontrak yang mengikat secara hukum antara Anda dan Google dalam kaitannya dengan penggunaan Pratinjau oleh Anda.
-
-1.2 "Android" berarti tumpukan perangkat lunak Android untuk perangkat, seperti yang tersedia di Android Open Source Project, yang ada di URL berikut: http://source.android.com/, yang selalu diperbarui.
-
-1.3 “Kompatibel dengan Android” berarti segala implementasi Android yang (i) sesuai dengan Android Compatibility Definition Document, yang bisa ditemukan di situs web kompatibilitas Android (http://source.android.com/compatibility) dan yang selalu diperbarui; serta (ii) berhasil lulus Android Compatibility Test Suite (CTS).
-
-1.4 "Google" berarti Google Inc., perusahaan asal Delaware dengan kantor bisnis utama di 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States.
-
-2. Menerima Perjanjian Lisensi
-
-2.1 Agar bisa menggunakan Pratinjau, Anda terlebih dahulu harus menyetujui Perjanjian Lisensi ini. Anda tidak boleh menggunakan Pratinjau jika tidak menerima Perjanjian Lisensi.
-
-2.2 Dengan mengklik untuk menerima dan/atau menggunakan Pratinjau, berarti Anda menyetujui ketentuan Perjanjian Lisensi.
-
-2.3 Anda tidak boleh menggunakan Pratinjau dan tidak boleh menerima Perjanjian Lisensi jika Anda adalah orang yang dilarang menerima Pratinjau berdasarkan hukum Amerika Serikat atau negara lainnya termasuk negara di mana Anda tinggal atau dari mana Anda menggunakan Pratinjau.
-
-2.4 Jika Anda akan menggunakan Pratinjau di lingkungan perusahaan atau organisasi Anda, berarti Anda setuju untuk terikat oleh Perjanjian Lisensi atas nama perusahaan Anda atau entitas lainnya, serta Anda mewakili dan menjamin bahwa Anda memiliki kewenangan hukum penuh untuk mengikat perusahaan Anda atau entitas tersebut pada Perjanjian Lisensi ini. Jika Anda tidak memiliki kewenangan yang disyaratkan, Anda tidak boleh menerima Perjanjian Lisensi atau menggunakan Pratinjau atas nama perusahaan Anda atau entitas lainnya.
-
-3. Lisensi Pratinjau dari Google
-
-3.1 Sesuai dengan ketentuan Perjanjian Lisensi ini, Google memberi Anda lisensi yang tidak bisa disublisensikan, non-eksklusif, tidak bisa dialihkan, bebas royalti, bersifat global dan terbatas dalam menggunakan Pratinjau hanya untuk keperluan pengembangan aplikasi yang kompatibel untuk diimplementasikan pada Android.
-
-3.2 Anda tidak boleh menggunakan Pratinjau ini untuk mengembangkan aplikasi platform lain (termasuk implementasi yang tidak kompatibel pada Android) atau untuk mengembangkan SDK lain. Anda tentu saja bebas mengembangkan aplikasi untuk platform lain, termasuk implementasi yang tidak kompatibel pada Android, karena Pratinjau ini tidak digunakan untuk tujuan tersebut.
-
-3.3 Anda setuju bahwa Google atau pihak ketiga memiliki semua hak, kuasa dan kepentingan hukum dalam dan pada Pratinjau, termasuk Hak Kekayaan Intelektual yang terdapat dalam Pratinjau. "Hak Kekayaan Intelektual" berarti setiap dan semua hak yang berdasarkan pada hukum paten, hukum hak cipta, hukum rahasia dagang, hukum merek dagang, dan setiap dan semua hak kepemilikan lainnya. Google memiliki semua hak yang tidak secara tersurat diberikan kepada Anda.
-
-3.4 Anda tidak boleh menggunakan Pratinjau untuk tujuan apa pun yang tidak secara tersurat diizinkan dalam Perjanjian Lisensi ini. Kecuali sejauh yang diperlukan oleh lisensi pihak ketiga yang berlaku, Anda tidak boleh: (a) menyalin (kecuali untuk keperluan pencadangan), memodifikasi, mengadaptasi, mendistribusikan kembali, mendekompilasi, merekayasa balik, membongkar atau membuat karya turunan dari Pratinjau atau bagian apa pun dari Pratinjau; atau (b) memuat bagian apa pun dari Pratinjau ke sebuah handset ponsel atau perangkat keras selain komputer pribadi, menggabungkan suatu bagian dari Pratinjau dengan perangkat lunak lain, atau mendistribusikan perangkat lunak atau perangkat yang menggabungkan suatu bagian dari Pratinjau.
-
-3.5 Penggunaan, reproduksi dan distribusi komponen Pratinjau yang berlisensi perangkat lunak sumber terbuka diatur semata-mata oleh ketentuan lisensi perangkat lunak sumber terbuka tersebut dan bukan oleh Perjanjian Lisensi ini. Anda menyetujui bagian selebihnya dari lisensi dengan maksud baik sehubungan dengan lisensi perangkat lunak sumber terbuka tersebut sesuai dengan semua hak yang diberikan dan untuk menahan diri dari segala tindakan yang mungkin akan mengakhiri, menangguhkan, atau melanggar hak tersebut.
-
-3.6 Anda setuju bahwa bentuk dan sifat Pratinjau yang disediakan oleh Google dapat berubah tanpa pemberitahuan sebelumnya kepada Anda dan bahwa versi Pratinjau mendatang mungkin tidak kompatibel dengan aplikasi yang dikembangkan di versi Pratinjau sebelumnya. Anda setuju bahwa Google boleh menghentikan (secara permanen atau sementara) penyediaan Pratinjau (atau fitur apa pun dalam Pratinjau) kepada Anda atau pengguna pada umumnya atas kebijakan Google semata, tanpa pemberitahuan sebelumnya kepada Anda.
-
-3.7 Perjanjian Lisensi ini tidak memberi Anda hak untuk menggunakan nama dagang, merek dagang, merek layanan, logo, nama domain, atau fitur merek khas Google lainnya.
-
-3.8 Anda setuju bahwa Anda tidak akan membuang, mengaburkan, atau mengubah pernyataan hak kepemilikan apa pun (termasuk pemberitahuan hak cipta dan merek dagang) yang terlampir atau termuat dalam Pratinjau.
-
-4. Penggunaan Pratinjau oleh Anda
-
-4.1 Google setuju bahwa Perjanjian Lisensi ini tidak memberi Google hak, kuasa, dan kepentingan hukum dari Anda (atau pemberi lisensi Anda) dalam atau pada aplikasi perangkat lunak apa pun yang Anda kembangkan menggunakan Pratinjau ini, termasuk kekayaan intelektual yang ada dalam aplikasi tersebut.
-
-4.2 Anda setuju untuk menggunakan Pratinjau dan menulis aplikasi hanya untuk tujuan yang diizinkan oleh (a) Perjanjian Lisensi, dan (b) hukum yang berlaku, peraturan atau praktik yang diterima secara umum atau panduan dalam yurisdiksi terkait (termasuk hukum mengenai ekspor data atau perangkat lunak ke dan dari Amerika Serikat atau negara lain yang terkait).
-
-4.3 Anda setuju jika Anda menggunakan Pratinjau untuk mengembangkan aplikasi, Anda akan melindungi hak privasi dan hak hukum pengguna. Jika pengguna memberikan nama pengguna, sandi, atau informasi login atau informasi pribadinya, Anda harus membuat pengguna tersebut menyadari bahwa informasi yang diberikannya akan bisa digunakan oleh aplikasi Anda, dan Anda harus memberikan perlindungan dan pemberitahuan privasi yang memadai secara hukum bagi pengguna tersebut. Jika aplikasi Anda menyimpan informasi pribadi atau sensitif yang diberikan oleh pengguna, aplikasi Anda harus melakukannya dengan aman. Jika pengguna memberikan informasi Akun Google, aplikasi Anda hanya boleh menggunakan informasi tersebut untuk mengakses Akun Google pengguna saat, dan untuk tujuan terbatas di mana, pengguna tersebut telah memberikan izin kepada Anda untuk melakukannya.
-
-4.4 Anda setuju bahwa Anda tidak akan terlibat dalam aktivitas apa pun dengan Pratinjau, termasuk pengembangan atau distribusi aplikasi yang mengganggu, mengacaukan, merusak, atau mengakses secara tidak sah server, jaringan atau properti layanan Google atau pihak ketiga lainnya.
-
-4.5 Anda setuju bertanggung jawab penuh untuk (dan bahwa Google tidak bertanggung jawab terhadap Anda atau pihak ketiga lainnya untuk) data, materi, atau sumber daya apa pun yang Anda buat, kirimkan atau tampilkan melalui Android dan/atau aplikasi untuk Android, dan terhadap konsekuensi tindakan Anda (termasuk kerugian atau kerusakan apa pun yang mungkin dialami Google).
-
-4.6 Anda setuju bertanggung jawab penuh terhadap (dan bahwa Google tidak bertanggung jawab terhadap Anda atau pihak ketiga lainnya untuk) pelanggaran kewajiban Anda berdasarkan Perjanjian Lisensi ini, kontrak pihak ketiga yang berlaku atau Ketentuan Layanan, atau hukum atau peraturan yang berlaku, dan terhadap konsekuensi (termasuk kerugian atau kerusakan yang mungkin dialami Google atau pihak ketiga lainnya) akibat pelanggaran tersebut.
-
-4.7 Pratinjau ini dalam tahap pengembangan, dan pengujian serta masukan Anda merupakan bagian penting dalam proses pengembangan. Dengan menggunakan Pratinjau, Anda mengakui bahwa implementasi beberapa fitur masih dalam tahap pengembangan dan bahwa Anda tidak seharusnya mengandalkan Pratinjau berfungsi sepenuhnya sebagaimana pada rilis stabil. Anda setuju untuk tidak mendistribusikan atau mengirimkan untuk umum penggunaan aplikasi menggunakan Pratinjau karena Pratinjau ini tidak akan lagi didukung setelah Android SDK dirilis secara resmi.
-
-5. Kredensial Pengembang Anda
-
-5.1 Anda setuju bertanggung jawab untuk menjaga kerahasiaan semua kredensial pengembang yang mungkin diberikan Google kepada Anda atau yang mungkin Anda pilih sendiri dan bahwa Anda akan bertanggung jawab penuh terhadap semua aplikasi yang dikembangkan dengan kredensial pengembang Anda.
-
-6. Privasi dan Informasi
-
-6.1 Untuk terus berinovasi dan meningkatkan Pratinjau, Google boleh mengumpulkan statistik penggunaan tertentu dari perangkat lunak termasuk namun tidak terbatas pada identifier unik, alamat IP terkait, nomor versi perangkat lunak, dan informasi yang menjadi tempat penggunaan alat dan/atau layanan dalam Pratinjau dan cara penggunaannya. Sebelum informasi ini dikumpulkan, Pratinjau akan memberi tahu dan meminta persetujuan Anda. Jika Anda tidak memberikan persetujuan, informasi tersebut tidak akan dikumpulkan.
-
-6.2 Data yang dikumpulkan akan diperiksa secara agregat untuk meningkatkan Pratinjau dan dikelola sesuai dengan Kebijakan Privasi Google yang terdapat di http://www.google.com/policies/privacy.
-
-7. Aplikasi Pihak Ketiga
-
-7.1 Jika Anda menggunakan Pratinjau untuk menjalankan aplikasi yang dikembangkan oleh pihak ketiga atau yang mengakses data, materi atau sumber daya yang disediakan oleh pihak ketiga, Anda setuju bahwa Google tidak bertanggung jawab terhadap aplikasi, data, materi atau sumber daya tersebut. Anda memahami bahwa semua data, materi atau sumber daya yang mungkin Anda akses melalui aplikasi pihak ketiga merupakan tanggung jawab penuh dari pihak yang menjadi asal data tersebut dan Google tidak bertanggung jawab terhadap kerugian atau kerusakan apa pun yang mungkin Anda alami sebagai akibat menggunakan atau mengakses aplikasi, data, materi, atau sumber daya pihak ketiga tersebut.
-
-7.2 Anda harus menyadari bahwa data, materi dan sumber daya yang diberikan kepada Anda melalui aplikasi pihak ketiga mungkin dilindungi oleh hak kekayaan intelektual yang dimiliki oleh penyedia (atau oleh orang lain atau perusahaan atas nama mereka). Anda tidak boleh memodifikasi, menyewakan, menyewabelikan, meminjamkan, menjual, mendistribusikan atau membuat karya turunan berdasarkan data, materi, atau sumber daya ini (baik secara keseluruhan atau sebagian) kecuali Anda secara khusus diberikan izin untuk melakukannya oleh pemilik yang bersangkutan.
-
-7.3 Anda mengakui bahwa penggunaan Anda atas aplikasi, data, materi, atau sumber daya pihak ketiga semacam itu tunduk pada ketentuan terpisah antara Anda dan pihak ketiga yang bersangkutan.
-
-8. Menggunakan Google API
-
-8.1 Google API
-
-8.1.1 Jika Anda menggunakan API (Antarmuka Pemrograman Aplikasi) untuk mengambil data dari Google, Anda mengakui bahwa data tersebut dilindungi hak kekayaan intelektual yang dimiliki Google atau pihak-pihak yang menyediakan data (atau oleh orang lain atau perusahaan atas nama mereka). Penggunaan API oleh Anda tunduk pada Ketentuan Layanan tambahan. Anda tidak boleh memodifikasi, menyewakan, menyewabelikan, meminjamkan, menjual, mendistribusikan atau membuat karya turunan berdasarkan data ini (baik secara keseluruhan atau sebagian) kecuali diizinkan oleh Ketentuan Layanan yang bersangkutan.
-
-8.1.2 Jika Anda menggunakan API dalam bentuk apa pun untuk mengambil data pengguna dari Google, Anda mengakui dan menyetujui bahwa Anda akan mengambil data hanya dengan persetujuan yang jelas dari pengguna dan hanya bila, dan sebatas keperluan yang diizinkan oleh pengguna tersebut untuk Anda lakukan.
-
-9. Mengakhiri Perjanjian Lisensi
-
-9.1 Perjanjian Lisensi ini akan terus berlaku hingga diakhiri oleh Anda atau Google sebagaimana diatur di bawah ini.
-
-9.2 Jika Anda ingin mengakhiri Perjanjian Lisensi ini, Anda boleh melakukannya dengan menghentikan penggunaan Pratinjau dan kredensial pengembang yang relevan.
-
-9.3 Google boleh mengakhiri Perjanjian Lisensi ini dengan Anda kapan saja, dengan atau tanpa sebab, setelah memberi tahu Anda.
-
-9.4 Perjanjian Lisensi akan berakhir secara otomatis tanpa pemberitahuan atau tindakan lainnya bila, mana saja yang lebih dahulu:
-(A) Google berhenti menyediakan Pratinjau atau bagian Pratinjau tertentu kepada pengguna di negara tempat Anda tinggal atau negara tempat asal Anda menggunakan layanan; dan
-(B) Google mengeluarkan versi rilis final dari Android SDK.
-
-9.5 Bila Perjanjian Lisensi berakhir, lisensi yang telah diberikan kepada Anda dalam Perjanjian Lisensi akan berakhir pula, Anda akan segera menghentikan semua penggunaan Pratinjau, dan ketetapan paragraf 10, 11, 12, dan 14 akan terus berlaku secara tak terbatas.
-
-10. SANGGAHAN
-
-10.1 ANDA SEPENUHNYA MEMAHAMI DAN MENYETUJUI BAHWA PENGGUNAAN PRATINJAU OLEH ANDA MERUPAKAN RISIKO ANDA SENDIRI DAN BAHWA PRATINJAU INI DISEDIAKAN "APA ADANYA" DAN "SEBAGAIMANA TERSEDIA" TANPA JAMINAN DALAM BENTUK APA PUN DARI GOOGLE.
-
-10.2 PENGGUNAAN PRATINJAU DAN MATERI APA PUN YANG DIUNDUH ATAU DIPEROLEH MELALUI PENGGUNAAN PRATINJAU OLEH ANDA ADALAH ATAS KEHENDAK DAN RISIKO ANDA SENDIRI DAN ANDA BERTANGGUNG JAWAB PENUH TERHADAP KERUSAKAN PADA SISTEM KOMPUTER ATAU PERANGKAT LAIN ATAU HILANGNYA DATA AKIBAT PENGGUNAAN TERSEBUT. TANPA MEMBATASI HAL TERSEBUT, ANDA MEMAHAMI BAHWA PRATINJAU BUKANLAH RILIS STABIL DAN MUNGKIN BERISI KESALAHAN, CACAT, DAN RISIKO KEAMANAN YANG BISA MENGAKIBATKAN KERUSAKAN SIGNIFIKAN, TERMASUK KEHILANGAN PENGGUNAAN ATAS SISTEM KOMPUTER ANDA ATAU PERANGKAT LAIN DENGAN SEPENUHNYA DAN TIDAK BISA DIPULIHKAN LAGI.
-
-10.3 GOOGLE LEBIH LANJUT MENYANGGAH SEMUA JAMINAN DAN PERSYARATAN APA PUN, BAIK TERSURAT MAUPUN TERSIRAT, TERMASUK NAMUN TIDAK TERBATAS PADA JAMINAN TERSIRAT DAN PERSYARATAN MENGENAI DAYA JUAL, KESESUAIAN DENGAN TUJUAN TERTENTU, DAN NON-PELANGGARAN.
-
-11. PEMBATASAN KEWAJIBAN
-
-11.1 ANDA SEPENUHNYA MEMAHAMI DAN MENYETUJUI BAHWA GOOGLE, ANAK PERUSAHAAN DAN AFILIASINYA, DAN PEMBERI LISENSINYA TIDAK AKAN BERTANGGUNG JAWAB KEPADA ANDA BERDASARKAN TEORI KEWAJIBAN TERHADAP SEGALA KERUGIAN LANGSUNG, TIDAK LANGSUNG, INSIDENTAL, KHUSUS, JANGKA PANJANG ATAU GANTI RUGI YANG DIAKIBATKAN OLEH ANDA, TERMASUK HILANGNYA DATA, WALAUPUN GOOGLE ATAU PERWAKILANNYA TELAH DIBERI TAHU ATAU SEHARUSNYA MENGETAHUI KEMUNGKINAN TIMBULNYA KEHILANGAN TERSEBUT.
-
-12. Penggantian Kerugian
-
-12.1 Sejauh maksimum yang diizinkan oleh hukum, Anda setuju untuk membela, mengganti kerugian dan melepaskan tanggung jawab Google, afiliasinya beserta direksi, petugas, karyawan dan agennya dari dan terhadap setiap dan semua klaim, tindakan, gugatan, proses hukum, serta setiap dan semua kehilangan, kewajiban, kerusakan, biaya dan pengeluaran (termasuk biaya pengacara yang sewajarnya) yang timbul atau diakibatkan dari (a) penggunaan Pratinjau oleh Anda, (b) aplikasi apa pun yang Anda kembangkan dari Pratinjau yang melanggar Hak Kekayaan Intelektual seseorang atau mencemarkan nama baik seseorang atau melanggar hak mereka berkaitan dengan publisitas atau privasi, dan (c) ketidakpatuhan Anda terhadap Perjanjian Lisensi ini.
-
-13. Perubahan pada Perjanjian Lisensi
-
-13.1 Google boleh membuat perubahan pada Perjanjian Lisensi saat mendistribusikan versi baru Pratinjau. Saat perubahan tersebut dibuat, Google akan menyediakan versi baru Perjanjian Lisensi di situs web penyediaan Pratinjau.
-
-14. Ketentuan Hukum Umum
-
-14.1 Perjanjian Lisensi ini merupakan perjanjian hukum antara Anda dan Google dan mengatur penggunaan Pratinjau oleh Anda (tidak termasuk layanan apa pun yang mungkin disediakan Google untuk Anda dalam perjanjian tertulis terpisah), dan sepenuhnya menggantikan perjanjian sebelumnya antara Anda dan Google dalam kaitannya dengan Pratinjau.
-
-14.2 Anda setuju bahwa jika Google tidak menjalankan atau menerapkan hak atau upaya hukum yang terkandung dalam Perjanjian Lisensi ini (atau bila Google memiliki kewenangan berdasarkan hukum yang berlaku), tindakan ini tidak akan dianggap sebagai pelepasan hak secara resmi oleh Google dan bahwa hak atau upaya hukum tersebut akan tetap bisa digunakan oleh Google.
-
-14.3 Jika persidangan hukum yang berwenang untuk memutuskan perkara ini menetapkan bahwa ada ketetapan Perjanjian Lisensi ini yang tidak valid, maka ketetapan tersebut akan dihapus dari Perjanjian Lisensi tanpa memengaruhi bagian selebihnya dari Perjanjian Lisensi ini. Ketetapan selebihnya dari Perjanjian Lisensi ini akan tetap sah dan berlaku.
-
-14.4 Anda mengakui dan menyetujui bahwa setiap anggota dari kelompok perusahaan yang diinduki oleh Google akan menjadi pihak ketiga penerima manfaat dari Perjanjian Lisensi ini dan bahwa perusahaan tersebut berhak untuk secara langsung memberlakukan, dan bergantung pada, ketetapan yang dimuat dalam Perjanjian Lisensi ini yang memberikan manfaat (atau hak yang mendukung) kepada mereka. Selain yang telah disebutkan di atas, tidak ada orang atau perusahaan lain yang akan menjadi pihak ketiga penerima manfaat dari Perjanjian Lisensi ini
-
-14.5 PEMBATASAN EKSPOR. PRATINJAU TUNDUK PADA HUKUM DAN PERATURAN EKSPOR AMERIKA SERIKAT. ANDA HARUS MEMATUHI SEMUA HUKUM DAN PERATURAN NASIONAL DAN INTERNASIONAL YANG BERLAKU PADA PRATINJAU. HUKUM INI MENYERTAKAN PEMBATASAN ATAS TUJUAN, PENGGUNA AKHIR DAN PENGGUNAAN AKHIR
-
-14.6 Perjanjian Lisensi ini tidak boleh diberikan atau dialihkan baik oleh Anda tanpa persetujuan tertulis sebelumnya dari Google, dan upaya apa pun untuk mengalihkannya tanpa persetujuan akan menjadi tidak sah. Anda tidak boleh mendelegasikan tanggung jawab atau kewajiban berdasarkan Perjanjian Lisensi ini tanpa persetujuan tertulis sebelumnya dari pihak lain.
-
-14.7 Perjanjian Lisensi ini, dan hubungan Anda dengan Google berdasarkan Perjanjian Lisensi ini, akan diatur oleh hukum Negara Bagian California tanpa mengindahkan pertentangan ketetapan hukumnya. Anda dan Google setuju untuk tunduk pada yurisdiksi eksklusif pengadilan yang berlokasi di county Santa Clara, California untuk menyelesaikan segala masalah hukum yang timbul dari Perjanjian Lisensi ini. Meski demikian, Anda setuju bahwa Google akan tetap diizinkan untuk mengajukan upaya hukum (atau tipe keringanan hukum setara yang mendesak) dalam yurisdiksi apa pun.
- </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">Saya telah membaca dan menyetujui ketentuan dan persyaratan di atas</label>
- </p>
- <p><a href="" class="button disabled" id="downloadForRealz" onclick="return onDownloadForRealz(this);"></a></p>
- </div>
-
-
- </div><!-- end TOS -->
-
-
- <div id="landing">
-
-<p>
- Halaman ini menyediakan tautan ke citra perangkat lewat jaringan seluler (OTA) dan menjelaskan
- cara menerapkan pembaruan OTA secara manual ke suatu perangkat. Prosedur ini berguna
- untuk memulihkan perangkat yang menerima pembaruan OTA melalui Android Beta
- Program dan tidak jalan setelah pembaruan dipasang.
-</p>
-
-<h2 id="install-ota">Memasang Citra OTA</h2>
-
-<p></p>
-
-<p>Untuk pasang OTA pada perangkat:</p>
-
-<ol>
- <li>Unduh citra perangkat OTA dari tabel di bawah.</li>
- <li>Boot ulang perangkat ke dalam mode Recovery. Untuk informasi selengkapnya mengenai cara masuk ke mode ini
- di perangkat Nexus, lihat
- <a href="https://support.google.com/nexus/answer/4596836">Setel ulang perangkat Nexus
- Anda ke setelan pabrik</a>.
- </li>
- <li>Pada perangkat, pilih <strong>ADB sideload</strong>.</li>
- <li>Hubungkan perangkat ke komputer dengan lingkungan pengembangan Android
- yang telah dimuat dan alat Android Debug Bridge (adb) yang telah dipasang.</li>
- <li>Jalankan perintah berikut:
- <pre>adb sideload <em><ota-package></em></pre>
- </li>
-</ol>
-
-
-
-<h2 id="ota-images">Citra OTA Perangkat</h2>
-
-<table>
- <tr>
- <th scope="col">Perangkat</th>
- <th scope="col">Unduhan / Checksum</th>
- </tr>
-
- <tr id="bullhead">
- <td>Nexus 5X <br>"bullhead"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >bullhead-ota-npd90g-0a874807.zip</a><br>
- MD5: 4b83b803fac1a6eec13f66d0afc6f46e<br>
- SHA-1: a9920bcc8d475ce322cada097d085448512635e2
- </td>
- </tr>
-
- <tr id="shamu">
- <td>Nexus 6 <br>"shamu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >shamu-ota-npd90g-06f5d23d.zip</a><br>
- MD5: 513570bb3a91878c2d1a5807d2340420<br>
- SHA-1: 2d2f40636c95c132907e6ba0d10b395301e969ed
- </td>
- </tr>
-
- <tr id="angler">
- <td>Nexus 6P <br>"angler"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >angler-ota-npd90g-5baa69c2.zip</a><br>
- MD5: 096fe26c5d50606a424d2f3326c0477b<br>
- SHA-1: 468d2e7aea444505513ddc183c85690c00fab0c1
- </td>
- </tr>
-
- <tr id="volantis">
- <td>Nexus 9 <br>"volantis"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantis-ota-npd90g-c04785e1.zip</a><br>
- MD5: 6aecd3b0b3a839c5ce1ce4d12187b03e<br>
- SHA-1: 31633180635b831e59271a7d904439f278586f49
- </td>
- </tr>
-
- <tr id="volantisg">
- <td>Nexus 9G <br>"volantisg"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantisg-ota-npd90g-c56aa1b0.zip</a><br>
- MD5: 0493fa79763d67bcdde8007299e1888d<br>
- SHA-1: f709daf81968a1b27ed41fe40d42e0d106f3c494
- </td>
- </tr>
-
- <tr id="fugu">
- <td>Nexus Player <br>"fugu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >fugu-ota-npd90g-3a0643ae.zip</a><br>
- MD5: 9c38b6647fe5a4f2965196b7c409f0f7<br>
- SHA-1: 77c6fb05191f0c2ae0956bae18f1c80b2f922f05
- </td>
- </tr>
-
- <tr id="ryu">
- <td>Pixel C <br>"ryu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >ryu-ota-npd90g-ec931914.zip</a><br>
- MD5: 4c6135498ca156a9cdaf443ddfdcb2ba<br>
- SHA-1: 297cc9a204685ef5507ec087fc7edf5b34551ce6
- </td>
- </tr>
-
- <tr id="seed">
- <td>General Mobile 4G (Android One) <br>"seed"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >seed_l8150-ota-npd90g-dcb0662d.zip</a><br>
- MD5: f40ea6314a13ea6dd30d0e68098532a2<br>
- SHA-1: 11af10b621f4480ac63f4e99189d61e1686c0865
- </td>
- </tr>
-
-</table>
-
-
- </div><!-- landing -->
-
-</div><!-- relative wrapper -->
-
-
-
-<script>
- var urlRoot = "http://storage.googleapis.com/androiddevelopers/shareables/preview/ota/";
- function onDownload(link) {
-
- $("#downloadForRealz").html("Download " + $(link).text());
- $("#downloadForRealz").attr('href', urlRoot + $(link).text());
-
- $("#tos").fadeIn('fast');
- $("#landing").fadeOut('fast');
-
- return true;
- }
-
-
- function onAgreeChecked() {
- /* verifikasi apakah TOS disetujui */
- if ($("input#agree").is(":checked")) {
- /* tampilkan tombol unduh */
- $("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/in/preview/download.jd b/docs/html-intl/intl/in/preview/download.jd
deleted file mode 100644
index e6714bb..0000000
--- a/docs/html-intl/intl/in/preview/download.jd
+++ /dev/null
@@ -1,544 +0,0 @@
-page.title=Menguji pada Perangkat
-meta.tags="preview", "nexus","system image"
-page.tags="preview", "androidn"
-page.image=images/cards/card-n-downloads_2x.png
-
-@jd:body
-
-<div style="position:relative; min-height:600px">
-
- <div class="wrap" id="tos" style="position:absolute;display:none;width:inherit;">
-
- <p class="sdk-terms-intro">Sebelum mengunduh dan memasang
- komponen Android Preview SDK, Anda harus menyetujui ketentuan dan persyaratan
- berikut.</p>
-
- <h2 class="norule">Ketentuan dan Persyaratan</h2>
-
- <div class="sdk-terms" onfocus="this.blur()" style="width:678px">
-Ini adalah Perjanjian Lisensi Android SDK Preview ("Perjanjian Lisensi").
-
-1. Pengantar
-
-1.1 Android SDK Preview (dalam Perjanjian Lisensi ini disebut "Pratinjau" dan secara spesifik termasuk file sistem Android, paket API, dan file pustaka Pratinjau, jika disediakan) diberikan lisensinya kepada Anda sesuai dengan ketentuan Perjanjian Lisensi. Perjanjian Lisensi ini merupakan kontrak yang mengikat secara hukum antara Anda dan Google dalam kaitannya dengan penggunaan Pratinjau oleh Anda.
-
-1.2 "Android" berarti tumpukan perangkat lunak Android untuk perangkat, seperti yang tersedia di Android Open Source Project, yang ada di URL berikut: http://source.android.com/, yang selalu diperbarui.
-
-1.3 “Kompatibel dengan Android” berarti segala implementasi Android yang (i) sesuai dengan Android Compatibility Definition Document, yang bisa ditemukan di situs web kompatibilitas Android (http://source.android.com/compatibility) dan yang selalu diperbarui; serta (ii) berhasil lulus Android Compatibility Test Suite (CTS).
-
-1.4 "Google" berarti Google Inc., perusahaan asal Delaware dengan kantor bisnis utama di 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States.
-
-2. Menerima Perjanjian Lisensi
-
-2.1 Agar bisa menggunakan Pratinjau, Anda terlebih dahulu harus menyetujui Perjanjian Lisensi ini. Anda tidak boleh menggunakan Pratinjau jika tidak menerima Perjanjian Lisensi.
-
-2.2 Dengan mengklik untuk menerima dan/atau menggunakan Pratinjau, berarti Anda menyetujui ketentuan Perjanjian Lisensi.
-
-2.3 Anda tidak boleh menggunakan Pratinjau dan tidak boleh menerima Perjanjian Lisensi jika Anda adalah orang yang dilarang menerima Pratinjau berdasarkan hukum Amerika Serikat atau negara lainnya termasuk negara di mana Anda tinggal atau dari mana Anda menggunakan Pratinjau.
-
-2.4 Jika Anda akan menggunakan Pratinjau di lingkungan perusahaan atau organisasi Anda, berarti Anda setuju untuk terikat oleh Perjanjian Lisensi atas nama perusahaan Anda atau entitas lainnya, serta Anda mewakili dan menjamin bahwa Anda memiliki kewenangan hukum penuh untuk mengikat perusahaan Anda atau entitas tersebut pada Perjanjian Lisensi ini. Jika Anda tidak memiliki kewenangan yang disyaratkan, Anda tidak boleh menerima Perjanjian Lisensi atau menggunakan Pratinjau atas nama perusahaan Anda atau entitas lainnya.
-
-3. Lisensi Pratinjau dari Google
-
-3.1 Sesuai dengan ketentuan Perjanjian Lisensi ini, Google memberi Anda lisensi yang tidak bisa disublisensikan, non-eksklusif, tidak bisa dialihkan, bebas royalti, bersifat global dan terbatas dalam menggunakan Pratinjau hanya untuk keperluan pengembangan aplikasi yang kompatibel untuk diimplementasikan pada Android.
-
-3.2 Anda tidak boleh menggunakan Pratinjau ini untuk mengembangkan aplikasi platform lain (termasuk implementasi yang tidak kompatibel pada Android) atau untuk mengembangkan SDK lain. Anda tentu saja bebas mengembangkan aplikasi untuk platform lain, termasuk implementasi yang tidak kompatibel pada Android, karena Pratinjau ini tidak digunakan untuk tujuan tersebut.
-
-3.3 Anda setuju bahwa Google atau pihak ketiga memiliki semua hak, kuasa dan kepentingan hukum dalam dan pada Pratinjau, termasuk Hak Kekayaan Intelektual yang terdapat dalam Pratinjau. "Hak Kekayaan Intelektual" berarti setiap dan semua hak yang berdasarkan pada hukum paten, hukum hak cipta, hukum rahasia dagang, hukum merek dagang, dan setiap dan semua hak kepemilikan lainnya. Google memiliki semua hak yang tidak secara tersurat diberikan kepada Anda.
-
-3.4 Anda tidak boleh menggunakan Pratinjau untuk tujuan apa pun yang tidak secara tersurat diizinkan dalam Perjanjian Lisensi ini. Kecuali sejauh yang diperlukan oleh lisensi pihak ketiga yang berlaku, Anda tidak boleh: (a) menyalin (kecuali untuk keperluan pencadangan), memodifikasi, mengadaptasi, mendistribusikan kembali, mendekompilasi, merekayasa balik, membongkar atau membuat karya turunan dari Pratinjau atau bagian apa pun dari Pratinjau; atau (b) memuat bagian apa pun dari Pratinjau ke sebuah handset ponsel atau perangkat keras selain komputer pribadi, menggabungkan suatu bagian dari Pratinjau dengan perangkat lunak lain, atau mendistribusikan perangkat lunak atau perangkat yang menggabungkan suatu bagian dari Pratinjau.
-
-3.5 Penggunaan, reproduksi dan distribusi komponen Pratinjau yang berlisensi perangkat lunak sumber terbuka diatur semata-mata oleh ketentuan lisensi perangkat lunak sumber terbuka tersebut dan bukan oleh Perjanjian Lisensi ini. Anda menyetujui bagian selebihnya dari lisensi dengan maksud baik sehubungan dengan lisensi perangkat lunak sumber terbuka tersebut sesuai dengan semua hak yang diberikan dan untuk menahan diri dari segala tindakan yang mungkin akan mengakhiri, menangguhkan, atau melanggar hak tersebut.
-
-3.6 Anda setuju bahwa bentuk dan sifat Pratinjau yang disediakan oleh Google dapat berubah tanpa pemberitahuan sebelumnya kepada Anda dan bahwa versi Pratinjau mendatang mungkin tidak kompatibel dengan aplikasi yang dikembangkan di versi Pratinjau sebelumnya. Anda setuju bahwa Google boleh menghentikan (secara permanen atau sementara) penyediaan Pratinjau (atau fitur apa pun dalam Pratinjau) kepada Anda atau pengguna pada umumnya atas kebijakan Google semata, tanpa pemberitahuan sebelumnya kepada Anda.
-
-3.7 Perjanjian Lisensi ini tidak memberi Anda hak untuk menggunakan nama dagang, merek dagang, merek layanan, logo, nama domain, atau fitur merek khas Google lainnya.
-
-3.8 Anda setuju bahwa Anda tidak akan membuang, mengaburkan, atau mengubah pernyataan hak kepemilikan apa pun (termasuk pemberitahuan hak cipta dan merek dagang) yang terlampir atau termuat dalam Pratinjau.
-
-4. Penggunaan Pratinjau oleh Anda
-
-4.1 Google setuju bahwa Perjanjian Lisensi ini tidak memberi Google hak, kuasa, dan kepentingan hukum dari Anda (atau pemberi lisensi Anda) dalam atau pada aplikasi perangkat lunak apa pun yang Anda kembangkan menggunakan Pratinjau ini, termasuk kekayaan intelektual yang ada dalam aplikasi tersebut.
-
-4.2 Anda setuju untuk menggunakan Pratinjau dan menulis aplikasi hanya untuk tujuan yang diizinkan oleh (a) Perjanjian Lisensi, dan (b) hukum yang berlaku, peraturan atau praktik yang diterima secara umum atau panduan dalam yurisdiksi terkait (termasuk hukum mengenai ekspor data atau perangkat lunak ke dan dari Amerika Serikat atau negara lain yang terkait).
-
-4.3 Anda setuju jika Anda menggunakan Pratinjau untuk mengembangkan aplikasi, Anda akan melindungi hak privasi dan hak hukum pengguna. Jika pengguna memberikan nama pengguna, sandi, atau informasi login atau informasi pribadinya, Anda harus membuat pengguna tersebut menyadari bahwa informasi yang diberikannya akan bisa digunakan oleh aplikasi Anda, dan Anda harus memberikan perlindungan dan pemberitahuan privasi yang memadai secara hukum bagi pengguna tersebut. Jika aplikasi Anda menyimpan informasi pribadi atau sensitif yang diberikan oleh pengguna, aplikasi Anda harus melakukannya dengan aman. Jika pengguna memberikan informasi Akun Google, aplikasi Anda hanya boleh menggunakan informasi tersebut untuk mengakses Akun Google pengguna saat, dan untuk tujuan terbatas di mana, pengguna tersebut telah memberikan izin kepada Anda untuk melakukannya.
-
-4.4 Anda setuju bahwa Anda tidak akan terlibat dalam aktivitas apa pun dengan Pratinjau, termasuk pengembangan atau distribusi aplikasi yang mengganggu, mengacaukan, merusak, atau mengakses secara tidak sah server, jaringan atau properti layanan Google atau pihak ketiga lainnya.
-
-4.5 Anda setuju bertanggung jawab penuh untuk (dan bahwa Google tidak bertanggung jawab terhadap Anda atau pihak ketiga lainnya untuk) data, materi, atau sumber daya apa pun yang Anda buat, kirimkan atau tampilkan melalui Android dan/atau aplikasi untuk Android, dan terhadap konsekuensi tindakan Anda (termasuk kerugian atau kerusakan apa pun yang mungkin dialami Google).
-
-4.6 Anda setuju bertanggung jawab penuh terhadap (dan bahwa Google tidak bertanggung jawab terhadap Anda atau pihak ketiga lainnya untuk) pelanggaran kewajiban Anda berdasarkan Perjanjian Lisensi ini, kontrak pihak ketiga yang berlaku atau Ketentuan Layanan, atau hukum atau peraturan yang berlaku, dan terhadap konsekuensi (termasuk kerugian atau kerusakan yang mungkin dialami Google atau pihak ketiga lainnya) akibat pelanggaran tersebut.
-
-4.7 Pratinjau ini dalam tahap pengembangan, dan pengujian serta masukan Anda merupakan bagian penting dalam proses pengembangan. Dengan menggunakan Pratinjau, Anda mengakui bahwa implementasi beberapa fitur masih dalam tahap pengembangan dan bahwa Anda tidak seharusnya mengandalkan Pratinjau berfungsi sepenuhnya sebagaimana pada rilis stabil. Anda setuju untuk tidak mendistribusikan atau mengirimkan untuk umum penggunaan aplikasi menggunakan Pratinjau karena Pratinjau ini tidak akan lagi didukung setelah Android SDK dirilis secara resmi.
-
-5. Kredensial Pengembang Anda
-
-5.1 Anda setuju bertanggung jawab untuk menjaga kerahasiaan semua kredensial pengembang yang mungkin diberikan Google kepada Anda atau yang mungkin Anda pilih sendiri dan bahwa Anda akan bertanggung jawab penuh terhadap semua aplikasi yang dikembangkan dengan kredensial pengembang Anda.
-
-6. Privasi dan Informasi
-
-6.1 Untuk terus berinovasi dan meningkatkan Pratinjau, Google boleh mengumpulkan statistik penggunaan tertentu dari perangkat lunak termasuk namun tidak terbatas pada identifier unik, alamat IP terkait, nomor versi perangkat lunak, dan informasi yang menjadi tempat penggunaan alat dan/atau layanan dalam Pratinjau dan cara penggunaannya. Sebelum informasi ini dikumpulkan, Pratinjau akan memberi tahu dan meminta persetujuan Anda. Jika Anda tidak memberikan persetujuan, informasi tersebut tidak akan dikumpulkan.
-
-6.2 Data yang dikumpulkan akan diperiksa secara agregat untuk meningkatkan Pratinjau dan dikelola sesuai dengan Kebijakan Privasi Google yang terdapat di http://www.google.com/policies/privacy.
-
-7. Aplikasi Pihak Ketiga
-
-7.1 Jika Anda menggunakan Pratinjau untuk menjalankan aplikasi yang dikembangkan oleh pihak ketiga atau yang mengakses data, materi atau sumber daya yang disediakan oleh pihak ketiga, Anda setuju bahwa Google tidak bertanggung jawab terhadap aplikasi, data, materi atau sumber daya tersebut. Anda memahami bahwa semua data, materi atau sumber daya yang mungkin Anda akses melalui aplikasi pihak ketiga merupakan tanggung jawab penuh dari pihak yang menjadi asal data tersebut dan Google tidak bertanggung jawab terhadap kerugian atau kerusakan apa pun yang mungkin Anda alami sebagai akibat menggunakan atau mengakses aplikasi, data, materi, atau sumber daya pihak ketiga tersebut.
-
-7.2 Anda harus menyadari bahwa data, materi dan sumber daya yang diberikan kepada Anda melalui aplikasi pihak ketiga mungkin dilindungi oleh hak kekayaan intelektual yang dimiliki oleh penyedia (atau oleh orang lain atau perusahaan atas nama mereka). Anda tidak boleh memodifikasi, menyewakan, menyewabelikan, meminjamkan, menjual, mendistribusikan atau membuat karya turunan berdasarkan data, materi, atau sumber daya ini (baik secara keseluruhan atau sebagian) kecuali Anda secara khusus diberikan izin untuk melakukannya oleh pemilik yang bersangkutan.
-
-7.3 Anda mengakui bahwa penggunaan Anda atas aplikasi, data, materi, atau sumber daya pihak ketiga semacam itu tunduk pada ketentuan terpisah antara Anda dan pihak ketiga yang bersangkutan.
-
-8. Menggunakan Google API
-
-8.1 Google API
-
-8.1.1 Jika Anda menggunakan API (Antarmuka Pemrograman Aplikasi) untuk mengambil data dari Google, Anda mengakui bahwa data tersebut dilindungi hak kekayaan intelektual yang dimiliki Google atau pihak-pihak yang menyediakan data (atau oleh orang lain atau perusahaan atas nama mereka). Penggunaan API oleh Anda tunduk pada Ketentuan Layanan tambahan. Anda tidak boleh memodifikasi, menyewakan, menyewabelikan, meminjamkan, menjual, mendistribusikan atau membuat karya turunan berdasarkan data ini (baik secara keseluruhan atau sebagian) kecuali diizinkan oleh Ketentuan Layanan yang bersangkutan.
-
-8.1.2 Jika Anda menggunakan API dalam bentuk apa pun untuk mengambil data pengguna dari Google, Anda mengakui dan menyetujui bahwa Anda akan mengambil data hanya dengan persetujuan yang jelas dari pengguna dan hanya bila, dan sebatas keperluan yang diizinkan oleh pengguna tersebut untuk Anda lakukan.
-
-9. Mengakhiri Perjanjian Lisensi
-
-9.1 Perjanjian Lisensi ini akan terus berlaku hingga diakhiri oleh Anda atau Google sebagaimana diatur di bawah ini.
-
-9.2 Jika Anda ingin mengakhiri Perjanjian Lisensi ini, Anda boleh melakukannya dengan menghentikan penggunaan Pratinjau dan kredensial pengembang yang relevan.
-
-9.3 Google boleh mengakhiri Perjanjian Lisensi ini dengan Anda kapan saja, dengan atau tanpa sebab, setelah memberi tahu Anda.
-
-9.4 Perjanjian Lisensi akan berakhir secara otomatis tanpa pemberitahuan atau tindakan lainnya bila, mana saja yang lebih dahulu:
-(A) Google berhenti menyediakan Pratinjau atau bagian Pratinjau tertentu kepada pengguna di negara tempat Anda tinggal atau negara tempat asal Anda menggunakan layanan; dan
-(B) Google mengeluarkan versi rilis final dari Android SDK.
-
-9.5 Bila Perjanjian Lisensi berakhir, lisensi yang telah diberikan kepada Anda dalam Perjanjian Lisensi akan berakhir pula, Anda akan segera menghentikan semua penggunaan Pratinjau, dan ketetapan paragraf 10, 11, 12, dan 14 akan terus berlaku secara tak terbatas.
-
-10. SANGGAHAN
-
-10.1 ANDA SEPENUHNYA MEMAHAMI DAN MENYETUJUI BAHWA PENGGUNAAN PRATINJAU OLEH ANDA MERUPAKAN RISIKO ANDA SENDIRI DAN BAHWA PRATINJAU INI DISEDIAKAN "APA ADANYA" DAN "SEBAGAIMANA TERSEDIA" TANPA JAMINAN DALAM BENTUK APA PUN DARI GOOGLE.
-
-10.2 PENGGUNAAN PRATINJAU DAN MATERI APA PUN YANG DIUNDUH ATAU DIPEROLEH MELALUI PENGGUNAAN PRATINJAU OLEH ANDA ADALAH ATAS KEHENDAK DAN RISIKO ANDA SENDIRI DAN ANDA BERTANGGUNG JAWAB PENUH TERHADAP KERUSAKAN PADA SISTEM KOMPUTER ATAU PERANGKAT LAIN ATAU HILANGNYA DATA AKIBAT PENGGUNAAN TERSEBUT. TANPA MEMBATASI HAL TERSEBUT, ANDA MEMAHAMI BAHWA PRATINJAU BUKANLAH RILIS STABIL DAN MUNGKIN BERISI KESALAHAN, CACAT, DAN RISIKO KEAMANAN YANG BISA MENGAKIBATKAN KERUSAKAN SIGNIFIKAN, TERMASUK KEHILANGAN PENGGUNAAN ATAS SISTEM KOMPUTER ANDA ATAU PERANGKAT LAIN DENGAN SEPENUHNYA DAN TIDAK BISA DIPULIHKAN LAGI.
-
-10.3 GOOGLE LEBIH LANJUT MENYANGGAH SEMUA JAMINAN DAN PERSYARATAN APA PUN, BAIK TERSURAT MAUPUN TERSIRAT, TERMASUK NAMUN TIDAK TERBATAS PADA JAMINAN TERSIRAT DAN PERSYARATAN MENGENAI DAYA JUAL, KESESUAIAN DENGAN TUJUAN TERTENTU, DAN NON-PELANGGARAN.
-
-11. PEMBATASAN KEWAJIBAN
-
-11.1 ANDA SEPENUHNYA MEMAHAMI DAN MENYETUJUI BAHWA GOOGLE, ANAK PERUSAHAAN DAN AFILIASINYA, DAN PEMBERI LISENSINYA TIDAK AKAN BERTANGGUNG JAWAB KEPADA ANDA BERDASARKAN TEORI KEWAJIBAN TERHADAP SEGALA KERUGIAN LANGSUNG, TIDAK LANGSUNG, INSIDENTAL, KHUSUS, JANGKA PANJANG ATAU GANTI RUGI YANG DIAKIBATKAN OLEH ANDA, TERMASUK HILANGNYA DATA, WALAUPUN GOOGLE ATAU PERWAKILANNYA TELAH DIBERI TAHU ATAU SEHARUSNYA MENGETAHUI KEMUNGKINAN TIMBULNYA KEHILANGAN TERSEBUT.
-
-12. Penggantian Kerugian
-
-12.1 Sejauh maksimum yang diizinkan oleh hukum, Anda setuju untuk membela, mengganti kerugian dan melepaskan tanggung jawab Google, afiliasinya beserta direksi, petugas, karyawan dan agennya dari dan terhadap setiap dan semua klaim, tindakan, gugatan, proses hukum, serta setiap dan semua kehilangan, kewajiban, kerusakan, biaya dan pengeluaran (termasuk biaya pengacara yang sewajarnya) yang timbul atau diakibatkan dari (a) penggunaan Pratinjau oleh Anda, (b) aplikasi apa pun yang Anda kembangkan dari Pratinjau yang melanggar Hak Kekayaan Intelektual seseorang atau mencemarkan nama baik seseorang atau melanggar hak mereka berkaitan dengan publisitas atau privasi, dan (c) ketidakpatuhan Anda terhadap Perjanjian Lisensi ini.
-
-13. Perubahan pada Perjanjian Lisensi
-
-13.1 Google boleh membuat perubahan pada Perjanjian Lisensi saat mendistribusikan versi baru Pratinjau. Saat perubahan tersebut dibuat, Google akan menyediakan versi baru Perjanjian Lisensi di situs web penyediaan Pratinjau.
-
-14. Ketentuan Hukum Umum
-
-14.1 Perjanjian Lisensi ini merupakan perjanjian hukum antara Anda dan Google dan mengatur penggunaan Pratinjau oleh Anda (tidak termasuk layanan apa pun yang mungkin disediakan Google untuk Anda dalam perjanjian tertulis terpisah), dan sepenuhnya menggantikan perjanjian sebelumnya antara Anda dan Google dalam kaitannya dengan Pratinjau.
-
-14.2 Anda setuju bahwa jika Google tidak menjalankan atau menerapkan hak atau upaya hukum yang terkandung dalam Perjanjian Lisensi ini (atau bila Google memiliki kewenangan berdasarkan hukum yang berlaku), tindakan ini tidak akan dianggap sebagai pelepasan hak secara resmi oleh Google dan bahwa hak atau upaya hukum tersebut akan tetap bisa digunakan oleh Google.
-
-14.3 Jika persidangan hukum yang berwenang untuk memutuskan perkara ini menetapkan bahwa ada ketetapan Perjanjian Lisensi ini yang tidak valid, maka ketetapan tersebut akan dihapus dari Perjanjian Lisensi tanpa memengaruhi bagian selebihnya dari Perjanjian Lisensi ini. Ketetapan selebihnya dari Perjanjian Lisensi ini akan tetap sah dan berlaku.
-
-14.4 Anda mengakui dan menyetujui bahwa setiap anggota dari kelompok perusahaan yang diinduki oleh Google akan menjadi pihak ketiga penerima manfaat dari Perjanjian Lisensi ini dan bahwa perusahaan tersebut berhak untuk secara langsung memberlakukan, dan bergantung pada, ketetapan yang dimuat dalam Perjanjian Lisensi ini yang memberikan manfaat (atau hak yang mendukung) kepada mereka. Selain yang telah disebutkan di atas, tidak ada orang atau perusahaan lain yang akan menjadi pihak ketiga penerima manfaat dari Perjanjian Lisensi ini
-
-14.5 PEMBATASAN EKSPOR. PRATINJAU TUNDUK PADA HUKUM DAN PERATURAN EKSPOR AMERIKA SERIKAT. ANDA HARUS MEMATUHI SEMUA HUKUM DAN PERATURAN NASIONAL DAN INTERNASIONAL YANG BERLAKU PADA PRATINJAU. HUKUM INI MENYERTAKAN PEMBATASAN ATAS TUJUAN, PENGGUNA AKHIR DAN PENGGUNAAN AKHIR
-
-14.6 Perjanjian Lisensi ini tidak boleh diberikan atau dialihkan baik oleh Anda tanpa persetujuan tertulis sebelumnya dari Google, dan upaya apa pun untuk mengalihkannya tanpa persetujuan akan menjadi tidak sah. Anda tidak boleh mendelegasikan tanggung jawab atau kewajiban berdasarkan Perjanjian Lisensi ini tanpa persetujuan tertulis sebelumnya dari pihak lain.
-
-14.7 Perjanjian Lisensi ini, dan hubungan Anda dengan Google berdasarkan Perjanjian Lisensi ini, akan diatur oleh hukum Negara Bagian California tanpa mengindahkan pertentangan ketetapan hukumnya. Anda dan Google setuju untuk tunduk pada yurisdiksi eksklusif pengadilan yang berlokasi di county Santa Clara, California untuk menyelesaikan segala masalah hukum yang timbul dari Perjanjian Lisensi ini. Meski demikian, Anda setuju bahwa Google akan tetap diizinkan untuk mengajukan upaya hukum (atau tipe keringanan hukum setara yang mendesak) dalam yurisdiksi apa pun.
- </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">Saya telah membaca dan menyetujui ketentuan dan persyaratan di atas</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>Dalam dokumen ini</h2>
- <ol>
- <li><a href="#device-preview">Menyiapkan perangkat keras</a>
- <ol>
- <li><a href="#ota">Mendapatkan pembaruan lewat jaringan seluler</a></li>
- <li><a href="#flash">Mem-flash perangkat secara manual</a></li>
- <li><a href="#revertDevice">Mencopot pemasangan</a></li>
- </ol>
- </li>
- <li><a href="#setupAVD">Menyiapkan emulator</a></li>
- </ol>
- </div>
-</div>
-
-<p>
- Untuk menjalankan dan menguji aplikasi Anda pada platform baru, Anda perlu menyiapkan lingkungan waktu proses
- Android N. Anda bisa melakukannya dengan salah satu cara ini:
-</p>
-
-<ul>
- <li>Pasang Android N pada perangkat keras yang didukung, atau</li>
- <li>Siapkan emulator Android yang menjalankan Android N</li>
-</ul>
-
-<p>
- Jika Anda ingin lingkungan untuk pengujian kompatibilitas dasar aplikasi Anda pada
- platform baru, maka Anda hanya perlu APK saat ini dan perangkat keras atau
- emulator. Anda tidak perlu memperbarui lingkungan
- pengembangan penuh untuk melakukan pengujian dasar.
-</p>
-
-<p>
- Jika Anda ingin memodifikasi aplikasi untuk menargetkan Android N atau menggunakan Android N API baru,
- Anda perlu menyiapkan lingkungan pengembangan yang telah diperbarui untuk mendukung
- Android N. <a href="{@docRoot}preview/setup-sdk.html">Menyiapkan Pengembangan
- Android N</a> berisi detail mengenai hal ini.
-</p>
-
-
-<h2 id="device-preview">Menyiapkan perangkat keras</h2>
-
-<p>
- N Developer Preview menawarkan pembaruan sistem untuk berbagai jenis perangkat keras
- yang bisa Anda gunakan untuk menguji aplikasi Anda, dari ponsel hingga tablet dan TV.
-</p>
-
-<p>
- Jika Anda memiliki akses ke perangkat yang didukung, Anda bisa memperbaruinya ke build tahapan pencapaian Developer
- Preview dengan salah satu cara berikut:
-</p>
-
-<ul>
- <li><strong>Daftarkan perangkat dalam pembaruan sistem OTA otomatis</strong> melalui
- <a href="https://g.co/androidbeta">Android Beta Program</a>. Setelah didaftarkan, perangkat Anda akan secara teratur menerima
- pembaruan lewat jaringan seluler (OTA) untuk semua build tahapan pencapaian dalam N Developer Preview. Pendekatan
- ini disarankan karena akan membantu Anda melakukan transisi secara mulus dari lingkungan saat ini
- ke berbagai rilis N Developer Preview.</li>
- <li><strong>Unduh citra sistem Developer Preview dan flash perangkat</strong>.
- Pembaruan OTA tidak disediakan secara otomatis untuk perangkat yang Anda flash secara manual, namun
- Anda bisa mendaftarkan perangkat tersebut dalam Android Beta Program untuk memperoleh pembaruan OTA. </li>
-</ul>
-
-<h3 id="ota">Daftarkan perangkat dalam pembaruan OTA otomatis</h3>
-
-<p>
- Jika Anda memiliki akses ke perangkat yang didukung (lihat daftar dalam tabel
- Unduhan), Anda bisa menerima pembaruan lewat jaringan seluler ke versi pratinjau Android
- dengan mendaftarkan perangkat itu ke <a href="https://g.co/androidbeta">Android Beta Program</a>. Pembaruan ini
- secara otomatis akan diunduh dan memperbarui perangkat Anda seperti
- pembaruan sistem resmi.
-</p>
-
-<p>
- Anda bisa membatalkan pendaftaran perangkat kapan saja. Perangkat akan menerima pembaruan OTA
- ke versi produksi terbaru Android yang tersedia untuk perangkat itu
- (misalnya, Android 6.0 Marshmallow). Pembaruan mengharuskan penyetelan ulang
- perangkat secara penuh, jadi data pengguna pada perangkat itu akan dibuang. Pastikan <strong>mencadangkan
- data penting</strong> sebelum membatalkan pendaftaran perangkat.
-</p>
-
-<p>
- Untuk informasi selengkapnya dan untuk mendaftarkan perangkat Anda, lihat
- situs web <a href="https://g.co/androidbeta">Android Beta Program</a>.
-</p>
-
-<p class="note"><strong>Catatan:</strong>
- Membatalkan pendaftaran mengharuskan penyetelan ulang perangkat secara penuh. Cadangkan
- data penting terlebih dahulu.
-</p>
-
-<h3 id="flash">Mem-flash perangkat secara manual</h3>
-
-<p>
- Anda bisa mengunduh citra sistem Developer Preview terbaru dan
- mem-flash-nya secara manual ke perangkat Anda kapan saja. Lihat tabel di bawah untuk mengunduh citra
- sistem perangkat pengujian Anda. Mem-flash perangkat secara manual berguna jika Anda harus
- mengontrol secara persis lingkungan pengujian tersebut atau harus memasang ulang secara rutin,
- misalnya untuk pengujian otomatis.
-</p>
-
-<!-- You can flash by ota or system image --><p>
- Memasang citra sistem pada perangkat <strong>akan membuang semua data dari
- perangkat</strong>, karena itu Anda harus mencadangkan data terlebih dahulu.
-</p>
-
-<p>
- Setelah Anda mencadangkan data perangkat dan mengunduh citra sistem di bawah ini yang
- sesuai dengan perangkat Anda, ikuti petunjuk di <a href="https://developers.google.com/android/nexus/images#instructions">developers.google.com/android</a>
- untuk mem-flash citra ini ke perangkat Anda.
-</p>
-
-<p>
- Citra sistem yang di-flash secara manual <strong>tidak secara otomatis akan
- menerima pembaruan OTA</strong> ke build tahapan pencapaian Developer Preview
- terbaru. Pastikan lingkungan Anda selalu diperbarui dan lakukan flash
- citra sistem yang baru di setiap tahapan pencapaian Developer Preview.
-</p>
-
-<p>
- Jika Anda memutuskan ingin mendapatkan pembaruan OTA setelah mem-flash perangkat secara manual,
- Anda tinggal mendaftarkan perangkat dalam <a href="https://g.co/androidbeta">
- Android Beta Program</a>. Anda bisa mendaftarkan perangkat kapan saja untuk menerima pembaruan Pratinjau
- berikutnya lewat jaringan seluler.
-</p>
-
-<table>
- <tr>
- <th scope="col">Perangkat</th>
- <th scope="col">Unduhan / Checksum</th>
- </tr>
-
- <tr id="bullhead">
- <td>Nexus 5X <br>"bullhead"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >bullhead-npd90g-factory-7a0ca1bc.tgz</a><br>
- MD5: e7a9a3061335c1e0c8be2588f13290af<br>
- SHA-1: 7a0ca1bcfa51bbefde34243603bc79c7dec214a1
- </td>
- </tr>
-
- <tr id="shamu">
- <td>Nexus 6 <br>"shamu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >shamu-npd90g-factory-f7a4e3a9.tgz</a><br>
- MD5: 2fb572ddcfca67bb1d741be97492a9ed<br>
- SHA-1: f7a4e3a96c797827492998e855c8f9efbfc8559a
- </td>
- </tr>
-
- <tr id="angler">
- <td>Nexus 6P <br>"angler"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >angler-npd90g-factory-cd9ac81e.tgz</a><br>
- MD5: 2370c30f3ef1d0684c1de5216a5d90fe<br>
- SHA-1: cd9ac81ec7f4a646ac6054eecbf2ea4c4b89b054
- </td>
- </tr>
-
- <tr id="volantis">
- <td>Nexus 9 <br>"volantis"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantis-npd90g-factory-41b55406.tgz</a><br>
- MD5: cefa78950141da2a7c75e887717e3c8f<br>
- SHA-1: 41b554060263a7ef16e4be8422cbd6caca26e00f
- </td>
- </tr>
-
- <tr id="volantisg">
- <td>Nexus 9G <br>"volantisg"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantisg-npd90g-factory-610492be.tgz</a><br>
- MD5: 2f36dc0d0fab02ab78be500677ec239f<br>
- SHA-1: 610492bedfc4127023040ecb2c89239a78a900ad
- </td>
- </tr>
-
- <tr id="fugu">
- <td>Nexus Player <br>"fugu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >fugu-npd90g-factory-0fe95694.tgz</a><br>
- MD5: f4cb48f919e4c29c631de21416c612e2<br>
- SHA-1: 0fe95694e7bc41e4c3ac0e4438cd77102a0aa8b4
- </td>
- </tr>
-
- <tr id="ryu">
- <td>Pixel C <br>"ryu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >ryu-npd90g-factory-f4da981c.tgz</a><br>
- MD5: d9f0e40b6c20d274831e8a7d285fd887<br>
- SHA-1: f4da981c70576133321e2858e52fe2c990e68a75
- </td>
- </tr>
-
- <tr id="seed">
- <td>General Mobile 4G (Android One) <br>"seed"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >seed_l8150-npd90g-factory-48f59c99.tgz</a><br>
- MD5: 0ed565c509594072822d71c65b48ec8e<br>
- SHA-1: 48f59c99ac43d1cd2f5656a283bb9868581663a8
- </td>
- </tr>
-
-</table>
-
-<h3 id="revertDevice">Mencopot pemasangan Pratinjau dari perangkat</h3>
-
-<p>
- Jika Anda ingin mencopot pemasangan Pratinjau dari perangkat, Anda bisa melakukannya dengan salah satu cara
- ini: </p>
- <ul>
- <li><strong>Dapatkan citra sistem sesuai spesifikasi pabrik</strong> kemudian flash
- secara manual ke perangkat.
- <ul>
- <li>Untuk <strong>perangkat Nexus dan Pixel C</strong>, lihat halaman
- <a href="http://developers.google.com/android/nexus/images">Citra Pabrik
- untuk Perangkat Nexus</a> untuk mengunduhnya. </li>
- <li>Untuk <strong>perangkat lainnya</strong>, hubungi produsen perangkat
- secara langsung. Atau, jika perangkat didukung
- dalam Android Beta Program, Anda bisa mendaftarkan perangkat dalam
- program kemudian membatalkan pendaftarannya (lihat di bawah).</li>
- </ul>
- </li>
- <li><strong>Batalkan pendaftaran perangkat dari Android Beta Program</strong>. Jika
- perangkat telah terdaftar dalam <a href="https://g.co/androidbeta">Android Beta
- Program</a>, apa pun perangkatnya, Anda cukup membatalkan pendaftarannya dari program tersebut.
- <p>
- Perangkat akan menerima pembaruan OTA ke versi produksi terbaru
- Android yang tersedia untuk perangkat itu (misalnya, Android 6.0 Marshmallow).
- Pembaruan mengharuskan penyetelan ulang perangkat secara penuh, jadi data pengguna pada perangkat itu akan
- dibuang. Pastikan Anda <strong>mencadangkan data penting</strong> sebelum
- membatalkan pendaftaran perangkat.
- </p>
- </li>
-</ul>
-
-<p class="note"><strong>Catatan:</strong>
- Mencopot pemasangan citra sistem Developer Preview sebelum
- program berakhir mengharuskan penyetelan ulang perangkat secara penuh dan membuang semua data pengguna
- pada perangkat.
-</p>
-
-
-<h2 id="setupAVD">Menyiapkan emulator</h2>
-
-<p>Untuk menggunakan Android Emulator guna menjalankan Android N Preview, Anda perlu
-mengunduh Android N Preview SDK dan membuat perangkat maya untuk
-emulator.</p>
-
-<p>Pertama, unduh Android N Preview SDK sebagai berikut (jika Anda
-sudah memperolehnya saat <a href="{@docRoot}preview/setup-sdk.html">menyiapkan
-pengembangan Android N</a>, Anda bisa lewati bagian ini):
-
-<ol>
- <li>Di Android Studio, buka dialog Settings
- (<strong>File > Settings</strong> pada Windows/Linux, atau
- <strong>Android Studio > Preferences</strong> pada Mac). Di panel
- kiri, pilih <strong>Appearance & Behavior >
- System Settings > Android SDK</strong>.
-
- <li>Klik tab <strong>SDK Platforms</strong>, kemudian pilih kotak centang
- <strong>Android N Preview</strong>.</li>
-
- <li>Klik tab <strong>SDK Tools</strong>, kemudian pilih
- kotak centang <strong>Android SDK Build Tools</strong>, <strong>Android SDK
- Platform-Tools</strong>, dan <strong>Android SDK Tools</strong>.
-
- </li>
-
- <li>Klik <strong>OK</strong>, dan terima
- perjanjian lisensi untuk setiap paket yang akan dipasang.
- </li>
-</ol>
-
-<p>Sekarang Anda seharusnya telah memiliki <strong>Android SDK Built-Tools 24.0 0 rc1</strong>,
-<strong>Platform-Tools 24.0.0 rc1</strong>, dan <strong>SDK Tools
-25.0.9</strong>. Jika Anda tidak memperbarui SDK Tools ke 25.0.9, maka Anda tidak akan
-dapat menjalankan citra sistem x86_64 untuk Android N.</p>
-
-
-<p>Sekarang buatlah perangkat maya dengan citra sistem Android N:</p>
-
-<ol>
- <li>Buka AVD Manager dengan memilih <strong>Tools > Android >
- AVD Manager</strong>.</li>
- <li>Klik <strong>Create Virtual Device</strong>.</li>
- <li>Pilih perangkat misalnya Nexus 5X, Nexus 6P, Nexus 9, atau Android TV,
- kemudian klik <strong>Next</strong>.</li>
- <li>Pilih citra sistem <strong>N</strong> (dengan
- <strong>x86</strong> ABI), kemudian klik <strong>Next</strong>.
- (Hanya citra sistem x86 yang saat ini didukung dengan Android Emulator
-untuk Android N Preview.)
- <li>Selesaikan konfigurasi AVD selanjutnya dan klik
- <strong>Finish</strong>.</li>
-</ol>
-
-<p>Anda sekarang bisa meluncurkan Android Emulator dengan Android N Preview AVD.</p>
-
-<p>
-Untuk mendapatkan pengalaman terbaik di Android Emulator, pastikan Anda menggunakan
-Android Studio 2.1 atau yang lebih tinggi, yang mendukung <a href="http://tools.android.com/tech-docs/emulator">Android Emulator 2.0</a>
-dengan kinerja jauh lebih cepat dibandingkan Emulator di
-Android Studio 1.5.</p>
-
-<p>Untuk informasi selengkapnya tentang membuat perangkat maya, lihat <a href="{@docRoot}tools/devices/index.html">Mengelola Perangkat Maya</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() {
- /* verifikasi apakah TOS disetujui */
- if ($("input#agree").is(":checked")) {
- /* tampilkan tombol unduh */
- $("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/in/preview/features/afw.jd b/docs/html-intl/intl/in/preview/features/afw.jd
deleted file mode 100644
index 643fab2..0000000
--- a/docs/html-intl/intl/in/preview/features/afw.jd
+++ /dev/null
@@ -1,552 +0,0 @@
-page.title=Pembaruan Android for Work
-page.metaDescription=API dan fitur baru Android for Work di Android N.
-page.keywords="android for work", "android N", "enterprise", "QR code"
-
-@jd:body
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>Dalam dokumen ini</h2>
- <ol>
- <li><a href="#qr">Penyediaan Kode QR
- </a></li>
-
- <li><a href="#sec-challenge">Pertanyaan Keamanan Profil Kerja
- </a></li>
-
- <li><a href="#suspend">Menonaktifkan Akses ke Aplikasi
- </a></li>
-
- <li><a href="#toggle-work">Beralih Mode Kerja
- </a></li>
-
- <li><a href="#always-on-vpn">Always-On VPN
- </a></li>
-
- <li><a href="#contacts">Integrasi Kontak dengan Profil Kerja
- </a></li>
-
- <li><a href="#remote-reboot">Boot Ulang Jarak Jauh
- </a></li>
-
- <li><a href="#disable-roaming">Menonaktifkan Roaming Data
- </a></li>
-
- <li><a href="#process-logging">Pencatatan Proses Enterprise
- </a></li>
-
- <li><a href="#bug-reports">Laporan Bug Jarak Jauh
- </a></li>
-
- <li><a href="#remove-cert">Membuang Sertifikat Klien
- </a></li>
-
- <li><a href="#grant-cert-on-install">Memberi Akses ke Sertifikat Klien
- saat Pemasangan</a></li>
-
- <li><a href="#ui-policy">Transparansi Kebijakan UI Sistem
- </a></li>
-
- <li><a href="#restrictions-mgmt">Penyempurnaan Manajemen Pembatasan Aplikasi
- </a></li>
-
- <li><a href="#location-off">Tombol Lokasi Nonaktif
- </a></li>
-
- <li><a href="#custom-provisioning">Penyediaan yang Disesuaikan
- </a></li>
-
- <li><a href="#multi-wifi-ca">Multi-Sertifikat CA Wi-Fi
- </a></li>
-
- <li><a href="#custom-lock">Pesan Layar Kunci yang Disesuaikan
- </a></li>
-
- <li><a href="#work-connectionservice">ConnectionService Profil Kerja
- </a></li>
-
- <li><a href="#lock-wp">Mengunci Wallpaper
- </a></li>
-
- <li><a href="#lock-user-icon">Mengunci Ikon Pengguna
- </a></li>
-
- <li><a href="#health-monitoring">Pemantauan Kesehatan Perangkat
- </a></li>
-
- </ol>
-
- <h2>Lihat Juga</h2>
- <ul>
- <li><a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi
- N Preview SDK</a></li>
- </ul>
- </div>
-</div>
-
-<p>Dokumen ini menjelaskan fitur baru Android for Work yang disediakan di
-Android N.</p>
-
-<h2 id="qr">Penyediaan Kode QR</h2>
-
-<p>
- Android for Work kini mendukung penggunaan kode QR untuk penyediaan perangkat
- milik perusahaan. Wizard persiapan kini memungkinkan Anda memindai kode QR untuk penyediaan
- perangkat.
-</p>
-
-<h2 id="sec-challenge">Pertanyaan Keamanan Profil Kerja</h2>
-
-<p>
- Pemilik profil bisa mengharuskan pengguna menetapkan pertanyaan keamanan untuk aplikasi
- yang berjalan dalam profil kerja. Sistem akan menampilkan pertanyaan keamanan bila
- pengguna mencoba membuka aplikasi kerja apa pun. Jika pengguna berhasil menyelesaikan
- pertanyaan keamanan, sistem akan membuat profil kerja dan mendekripsinya
- jika diperlukan.
-</p>
-
-<p>
- Jika pemilik profil mengirim intent {@link
- android.app.admin.DevicePolicyManager#ACTION_SET_NEW_PASSWORD} , sistem
- akan menampilkan pertanyaan keamanan kepada pengguna. Pemilik profil juga dapat
- mengirim intent <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> untuk
- meminta pengguna menyetel kunci perangkat.
-</p>
-
-<p>
- Pemilik profil dapat memilih untuk menyetel kebijakan sandi untuk pertanyaan pekerjaan
- yang berbeda dari kebijakan sandi perangkat lainnya. Misalnya, panjang minimum
- jawaban pertanyaan perangkat bisa berbeda dari panjang
- yang diperlukan untuk sandi lainnya. Pemilik profil menyetel kebijakan pertanyaan
- menggunakan metode{@link android.app.admin.DevicePolicyManager}
- biasa, seperti {@link
- android.app.admin.DevicePolicyManager#setPasswordQuality
- setPasswordQuality()} dan {@link
- android.app.admin.DevicePolicyManager#setPasswordMinimumLength
- setPasswordMinimumLength()}. Pemilik profil juga bisa menyetel penguncian perangkat,
- dengan menggunakan instance {@link android.app.admin.DevicePolicyManager} yang dikembalikan secara langsung
- oleh metode <code>DevicePolicyManager.getParentProfileInstance()</code>
- baru. Selain itu, pemilik profil dapat menyesuaikan layar kredensial untuk
- pertanyaan kerja menggunakan kelas {@link android.app.admin.DevicePolicyManager}
- dengan metode <code>setOrganizationColor()</code> dan
- <code>setOrganizationName()</code> baru.
-</p>
-
-<p>
- Untuk mengetahui detail tentang kelas dan metode berikut, lihat halaman referensi
- <code>DevicePolicyManager</code> di <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi N Preview SDK</a>.
-</p>
-
-<h2 id="suspend">Menonaktifkan Akses ke Aplikasi</h2>
-
-<p>
- Pemilik perangkat dan pemilik profil bisa menangguhkan akses untuk sementara ke paket
- dengan memanggil metode <code>DevicePolicyManager.setPackagesSuspended()</code>
- baru. Pemilik bisa menggunakan metode yang sama untuk mengaktifkan kembali paket tersebut.
-</p>
-
-<p>
- Selagi paket ditangguhkan, maka tidak bisa memulai aktivitas, pemberitahuan ke
- paket akan disembunyikan, dan entri aplikasi dalam <a href="{@docRoot}guide/components/recents.html">layar ringkasan</a> akan disembunyikan.
- Paket yang ditangguhkan tidak muncul di <a href="{@docRoot}guide/components/recents.html">layar ringkasan</a>, dan
- tidak bisa menampilkan dialog (termasuk toast dan snackbar). Juga tidak bisa memutar
- audio atau menggetarkan perangkat.
-</p>
-
-<p>
- Launcher harus menerapkan UI berbeda pada aplikasi yang ditangguhkan untuk menunjukkan
- aplikasi saat ini tidak tersedia; misalnya, bisa merender ikon aplikasi
- dalam warna abu-abu. Launcher bisa mengetahui apakah aplikasi ditangguhkan dengan memanggil metode
- <code>DevicePolicyManager.getPackageSuspended()</code> baru.
-</p>
-
-<h2 id="toggle-work">Beralih Mode Kerja</h2>
-
-<p>
- Pada perangkat dua-profil, pengguna bisa mengaktifkan dan menonaktifkan mode kerja. Selagi mode
- kerja dinonaktifkan, profil yang dikelola akan dinonaktifkan untuk sementara. Aplikasi Profil Kerja,
- sinkronisasi latar belakang, dan pemberitahuan semuanya dinonaktifkan, termasuk
- aplikasi pemilik profil. Selagi profil kerja dinonaktifkan, sistem
- akan menampilkan ikon status tetap untuk mengingatkan pengguna bahwa mereka tidak bisa meluncurkan aplikasi
- kerja. Peluncur sistem menunjukkan bahwa aplikasi kerja dan widget tidak bisa
- diakses.
-</p>
-
-<h2 id="always-on-vpn">Always-On VPN</h2>
-
-<p>
- Pemilik perangkat dan pemilik profil bisa mengharuskan aplikasi kerja selalu terhubung
- ke jaringan melalui VPN yang ditetapkan. Jika pemilik menyetel persyaratan ini,
- perangkat secara otomatis akan memulai VPN itu saat booting.
-</p>
-
-<p>
- Pemilik bisa menggunakan VPN dengan memanggil metode
- <code>DevicePolicyManager.setAlwaysOnVpnPackage()</code> baru. Untuk mengetahui
- apakah pemilik telah menyetel persyaratan VPN, panggil metode
- <code>DevicePolicyManager.GetAlwaysOnVpnPackage()</code> baru.
-</p>
-
-<p>
- Karena sistem bisa secara langsung mengikat layanan VPN tanpa interaksi aplikasi,
- klien VPN perlu menangani titik masuk baru untuk Always-On VPN. Seperti sebelumnya,
- Anda bisa menemukan layanan aktif dengan menggunakan filter intent yang cocok dengan tindakan
- {@link android.net.VpnService android.net.VpnService}.
-</p>
-
-<p>
- Pengguna bisa secara manual menyetel klien Always-On VPN yang mengimplementasikan {@link
- android.net.VpnService} dengan menggunakan layar <strong>Settings > More >
- VPN</strong>.
-</p>
-
-<h2 id="contacts">Integrasi Kontak dengan Profil Kerja</h2>
-
-<p>
- Pemilik profil bisa mengizinkan penelusuran lokal dan pencarian direktori kontak kerja
- dari pengguna utama. Misalnya, seorang pengguna bisa mengakses kontak direktori pribadi dan pekerjaan
- dari telepon pribadi atau aplikasi kontak mereka (jika
- diizinkan oleh administrator profil mereka).
-</p>
-
-<p>
- Pengembang yang memanfaatkan Contact Provider bisa menggunakan Enterprise Contacts
- API untuk mengakses entri direktori profil kerja dari pengguna utama jika diizinkan
- oleh kebijakan:
-</p>
-
-<ul>
- <li><code>ContactsContract.Contacts.ENTERPRISE_CONTENT_FILTER_URI</code>
- </li>
-
- <li><code>ContactsContract.Phone.ENTERPRISE_CONTENT_FILTER_URI</code>
- </li>
-
- <li><code>ContactsContract.Email.ENTERPRISE_CONTENT_FILTER_URI</code>
- </li>
-
- <li><code>ContactsContract.Callable.ENTERPRISE_CONTENT_FILTER_URI</code>
- </li>
-
- <li><code>ContactsContract.Directory.ENTERPRISE_CONTENT_URI</code>
- </li>
-
- <li><code>ContactsContract.Directory.isEntepriseDirectoryId()</code>
- </li>
-</ul>
-
-<p>
- Pemilik profil bisa mengendalikan visibilitas kontak kerja di
- pengguna utama menggunakan metode baru berikut:
-</p>
-
-<ul>
- <li>
- <code>DevicePolicyManager.setCrossProfileContactsSearchDisabled()</code>
- </li>
-
- <li>
- <code>DevicePolicyManager.getCrossProfileContactsSearchDisabled()</code>
- </li>
-</ul>
-
-<h2 id="remote-reboot">Boot Ulang Jarak Jauh</h2>
-
-<p>
- Pemilik perangkat bisa mem-boot ulang perangkat dari jarak jauh. Di beberapa kasus, perangkat yang diluncurkan di
- tempat umum dalam pembatas bisa mencegah akses ke tombol daya. Jika
- perangkat perlu di-boot ulang, administrator bisa melakukannya dengan metode
- <code>DevicePolicyManager.reboot()</code> baru.
-</p>
-
-<h2 id="disable-roaming">Menonaktifkan Roaming Data</h2>
-
-<p>
- Pemilik perangkat bisa menonaktifkan roaming data menggunakan pembatasan pengguna {@link
- android.os.UserManager} <code>DISALLOW_DATA_ROAMING</code> baru.
-</p>
-
-<h2 id="process-logging">Pencatatan Proses Enterprise</h2>
-
-<p>
- Pemilik perangkat bisa mengenali aktivitas mencurigakan dengan melacak perangkat dari jarak jauh,
- termasuk peluncuran aplikasi, aktivitas adb, dan pembukaan kunci layar. Log proses
- tidak memerlukan persetujuan pengguna. Untuk mengambil log, pemilik perangkat mengaktifkan
- pencatatan perangkat menggunakan <code>DevicePolicyManager.setSecurityLoggingEnabled()</code>.
-</p>
-
-<p>
- Perubahan API meliputi:
-</p>
-
-<ul>
-
- <li>
- Kelas <code>android.app.admin.SecurityLog</code> baru dan
- metodenya
- </li>
-
- <li>
- <code>void DevicePolicyManager.setSecurityLoggingEnabled()</code>
- </li>
-
- <li>
- <code>boolean DevicePolicyManager.isSecurityLoggingEnabled()</code>
- </li>
-
- <li>
- <code>List<SecurityEvent>
- DevicePolicyManager.retrieveSecurityLogs()</code>
- </li>
-
- <li>
- <code>List<SecurityEvent>
- DevicePolicyManager.retrievePreRebootSecurityLogs()</code>
- </li>
-
- <li>
- <code>void DeviceAdminReceiver.onSecurityLogsAvailable()</code>
- </li>
-</ul>
-
-<h2 id="bug-reports">Laporan Bug Jarak Jauh</h2>
-
-<p>
- Pemilik perangkat bisa memicu dari jarak jauh dan mengambil laporan bug yang berisi
- file dump status perangkat, yang memungkinkan penyelidikan forensik atas
- kesalahan yang diketahui atau perangkat yang telah diutak-atik. Dikarenakan sifat detail laporan bug,
- maka diperlukan persetujuan pengguna.
-</p>
-
-<p>
- Android N menyertakan tambahan API berikut untuk mendukung fitur ini. Untuk detailnya, lihat
- <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi
- N Preview SDK</a>.
-</p>
-
-<ul>
- <li>
- <code>DevicePolicyManager.requestBugreport()</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.onBugreportFailed()</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.onBugreportShared()</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.onBugreportSharingDeclined()</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.BUGREPORT_FAILURE_FAILED_COMPLETING</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.BUGREPORT_FAILURE_FILE_NO_LONGER_AVAILABLE</code>
- </li>
-</ul>
-
-<h2 id="remove-cert">Membuang Sertifikat Klien</h2>
-
-<p>
- Pemilik profil dan pemilik perangkat kini bisa membuang sertifikat klien yang telah dipasang melalui
- {@link android.app.admin.DevicePolicyManager#installKeyPair
- installKeyPair()} dengan memanggil metode baru
- <code>DevicePolicyManager.removeKeyPair()</code>.
-</p>
-
-<h2 id="grant-cert-on-install">Memberi Akses ke Sertifikat Klien
- saat Pemasangan</h2>
-
-<p>
- Jika pemilik profil dan pemilik perangkat memberikan kemampuan kepada aplikasi pihak ketiga untuk
- mengelola sertifikat, aplikasi bisa memberikan akses pada dirinya sendiri ke sertifikat
- yang dipasangnya tanpa intervensi dari pemilik.
-</p>
-
-<p>
- API yang sudah ada untuk mengelola sertifikat diperluas untuk mencakup:
-</p>
-
-<ul>
- <li><code>DevicePolicyManager.installKeyPair()</code>
- </li>
-</ul>
-
-<h2 id="ui-policy">Transparansi Kebijakan UI Sistem</h2>
-
-<p>
- Kebijakan yang memengaruhi pengalaman pengguna atau membatasi Settings pengguna sepenuhnya
- diungkapkan kepada pengguna, serta pemilik profil dan pemilik perangkat bisa memberlakukan
- kebijakannya kepada departemen TI perusahaan mereka. Selain pesan “Action
- not allowed” yang konsisten di Settings, administrator TI bisa menyetel
- pesan dukungan khusus-organisasi di setelan perangkat dengan metode
- {@link android.app.admin.DevicePolicyManager} baru berikut:
-</p>
-
-<ul>
- <li>
- <code>DevicePolicyManager.setShortSupportMessage()</code>
- </li>
-
- <li>
- <code>DevicePolicyManager.setLongSupportMessage()</code>
- </li>
-</ul>
-
-<h2 id="restrictions-mgmt">Penyempurnaan Manajemen Pembatasan Aplikasi</h2>
-
-<p>
- Pemilik perangkat atau profil bisa mengaktifkan aplikasi lain untuk mengelola
- pembatasan aplikasi melalui metode
- <code>DevicePolicyManager.setApplicationRestrictionsManagingPackage()</code>
- baru. Aplikasi yang dipilih bisa memeriksa apakah izin ini telah
- diberikan dengan memanggil
- <code>DevicePolicyManager.isCallerApplicationRestrictionsManagingPackage()</code>.
-</p>
-
-<p>
- Aplikasi yang dipilih untuk mengelola pembatasan aplikasi bisa memanggil {@link
- android.app.admin.DevicePolicyManager#setApplicationRestrictions
- setApplicationRestrictions()} dan {@link
- android.app.admin.DevicePolicyManager#getApplicationRestrictions
- getApplicationRestrictions()} untuk paket apa pun di pengguna atau profil itu.
-</p>
-
-<h2 id="location-off">Tombol Lokasi Nonaktif</h2>
-
-<p>
- Pengguna bisa menonaktifkan izin lokasi untuk aplikasi kerja sambil melanjutkan
- akses informasi lokasi di aplikasi pribadi mereka. Tombol akses
- lokasi yang terpisah di Location Settings memungkinkan pengguna untuk menolak pembaruan lokasi atau
- kueri lokasi terakhir untuk aplikasi yang berjalan di profil kerja.
-</p>
-
-<p>
- Tombol lokasi nonaktif level teratas menonaktifkan akses lokasi untuk
- profil utama dan profil yang dikelola.
-</p>
-
-<h2 id="custom-provisioning">Penyediaan yang Disesuaikan</h2>
-
-<p>
- Aplikasi bisa menyesuaikan alur penyediaan pemilik profil dan pemilik perangkat
- dengan warna dan logo perusahaan.
-</p>
-
-<dl>
- <dt>
- <code>DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR</code>
- </dt>
-
- <dd>
- Menyesuaikan warna alur.
- </dd>
-
- <dt>
- <code>DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI</code>
- </dt>
-
- <dd>
- Menyesuaikan alur dengan logo perusahaan.
- </dd>
-</dl>
-
-<h2 id="multi-wifi-ca">Multi-Sertifikat CA Wi-Fi</h2>
-
-<p>
- Pemilik profil dan pemilik perangkat bisa menyetel beberapa sertifikat CA sekaligus untuk
- konfigurasi Wi-Fi yang diberikan. Bila jaringan Wi-Fi perusahaan memiliki CA terpisah untuk
- titik akses yang terpisah dengan SSID yang sama, administrator TI bisa menyertakan semua
- CA yang relevan dalam konfigurasi Wi-Fi menggunakan metode
- <code>setCaCertificates()</code> baru.
-</p>
-
-<p>
- API yang ditambah adalah:
-</p>
-
-<ul>
- <li>
- <code>WifiEnterpriseConfig.setCaCertificates()</code>
- </li>
-
- <li>
- <code>WifiEnterpriseConfig.getCaCertificates()</code>
- </li>
-</ul>
-
-<h2 id="custom-lock">Pesan Layar Terkunci yang Disesuaikan</h2>
-
-<p>
- Pemilik perangkat bisa menyediakan informasi pemilik agar ditampilkan di layar kunci.
- Informasi ini lebih diprioritaskan dari pesan layar kunci pengguna (jika sudah ada
- yang disetel). Metode {@link android.app.admin.DevicePolicyManager} baru adalah:
-</p>
-
-<ul>
- <li>
- <code>setDeviceOwnerLockScreenInfo()</code>
- </li>
-
- <li>
- <code>getDeviceOwnerLockScreenInfo()</code>
- </li>
-</ul>
-
-<h2 id="work-connectionservice">ConnectionService Profil Kerja</h2>
-
-<p>
- Pemilik profil bisa menetapkan aplikasi telepon kerja yang menggunakan
- {@link android.telecom.ConnectionService} khusus-kerja untuk
- backend panggilan (akun panggilan). Telepon kerja hanya menyimpan log panggilan kerja
- dan hanya mengandalkan kontak kerja. Pengguna memiliki pengalaman UI
- saat-panggilan yang konsisten, apa pun aplikasi panggilannya. Panggilan telepon kerja yang masuk ke akun panggilan kerja
- dibedakan dari telepon pribadi yang masuk
- ke akun panggilan pribadi.
-</p>
-
-<p>
- Penelepon harus memeriksa tanda baru
- <code>android.telecom.Call.PROPERTY_WORK_CALL</code> untuk menentukan apakah telepon tersebut merupakan
- telepon kerja. Jika merupakan telepon kerja, penelepon harus menunjukkannya,
- misalnya dengan menambahkan lencana kerja.
-</p>
-
-<h2 id="lock-wp">Mengunci Wallpaper</h2>
-
-<p>
- Pembatasan pengguna baru (<code>DISALLOW_SET_WALLPAPER</code>) mencegah
- pengguna mengubah wallpaper mereka. Pemilik perangkat atau pemilik profil tetap bisa
- mengubah wallpaper, namun mereka hanya bisa mengubah wallpaper
- untuk pengguna atau profil yang mereka kontrol. Misalnya, pemilik profil tidak bisa mengubah
- wallpaper pengguna induk, namun pemilik profil utama di profil utama atau
- pemilik perangkat bisa melakukannya. Pemilik profil atau pemilik perangkat yang ingin mengubah
- wallpapernya harus memeriksa apakah pengguna atau profil
- yang mereka kelola memiliki wallpaper ({@link android.app.WallpaperManager#isWallpaperSupported
- isWallpaperSupported()}) dan apakah mereka diperbolehkan untuk mengubahnya (dengan metode
- baru<code>WallpaperManager.isWallpaperSettingAllowed()</code>)
-</p>
-
-<h2 id="lock-user-icon">Mengunci Ikon Pengguna</h2>
-
-<p>
- Pembatasan pengguna baru (<code>DISALLOW_SET_USER_ICON</code>) mencegah
- pengguna mengubah ikon pengguna mereka. Pemilik perangkat atau pemilik profil pengguna
- tetap bisa mengubah ikon. Akan tetapi, pemilik profil hanya bisa mengubah ikon
- pengguna untuk profil yang dikontrolnya.
-</p>
-
-<h2 id="health-monitoring">Pemantauan Kesehatan Perangkat</h2>
-
-<p>
- Pemilik perangkat atau pemilik profil bisa menggunakan antarmuka
- <code>HardwarePropertiesManager</code> baru untuk mengambil informasi
- tentang kesehatan perangkat, seperti suhu CPU atau GPU dan penggunaan CPU. Antarmuka pemantauan
- baru ini khususnya berguna untuk memantau berjalannya perangkat yang tidak diawasi
- di lokasi yang jauh.
-</p>
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/data-saver.jd b/docs/html-intl/intl/in/preview/features/data-saver.jd
deleted file mode 100644
index 6cd64d2..0000000
--- a/docs/html-intl/intl/in/preview/features/data-saver.jd
+++ /dev/null
@@ -1,234 +0,0 @@
-page.title=Data Saver
-metaDescription=Optimalisasi penggunaan data yang diaktifkan pengguna.
-page.keywords="android N", "data usage", "metered network"
-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="#status">Memeriksa Preferensi Data Saver</a>
- <ol>
- <li>
- <a href="#request-whitelist">Meminta izin daftar putih</a>
- </li>
- </ol>
- </li>
-
- <li>
- <a href="#monitor-changes">Memantau Perubahan pada Preferensi
- Data Saver</a>
- </li>
-
- <li>
- <a href="#testing">Menguji dengan Perintah Android Debug Bridge</a>
- </li>
- </ol>
- </div>
-</div>
-
-<p>
- Selama penggunaan ponsel cerdas, biaya paket data seluler bisa saja
- melebihi harga perangkat itu sendiri. Di N Developer Preview, pengguna bisa
- mengaktifkan Data Saver berdasarkan lingkup perangkat untuk menghemat data, baik saat
- roaming, mendekati akhir siklus penagihan, atau pada paket data prabayar kecil.
-</p>
-
-<p>
- Bila pengguna mengaktifkan Data Saver di <strong>Settings</strong> dan perangkat
- berada dalam jaringan berkuota, sistem akan memblokir penggunaan data latar belakang dan memberi tahu
- aplikasi untuk menghemat penggunaan data latar depan bila memungkinkan. Pengguna bisa
- memasukkan aplikasi tertentu ke daftar putih untuk memungkinkan penggunaan data berkuota bila Data
- Saver diaktifkan.
-</p>
-
-<p>
- N Developer Preview memperluas {@link android.net.ConnectivityManager}
- API untuk menyediakan cara pada aplikasi untuk <a href="#status">menerima preferensi Data Saver
- pengguna</a> dan <a href="#monitor-changes">memantau perubahan
- preferensi</a>. Hal ini dianggap praktik terbaik bagi aplikasi untuk memeriksa apakah
- pengguna telah mengaktifkan DataSaver dan berusaha membatasi penggunaan data latar depan dan
- data latar belakang.
-</p>
-
-<h2 id="status">
- Memeriksa Preferensi Data Saver
-</h2>
-
-<p>
- Di N Developer Preview, aplikasi bisa menggunakan {@link
- android.net.ConnectivityManager} API untuk menentukan pembatasan penggunaan data
- apa yang sedang diterapkan. Metode {@code getRestrictBackgroundStatus()}
- akan mengembalikan salah satu dari nilai berikut:
-</p>
-
-<dl>
- <dt>
- {@code RESTRICT_BACKGROUND_STATUS_DISABLED}
- </dt>
-
- <dd>
- Data Saver dinonaktifkan.
- </dd>
-
- <dt>
- {@code RESTRICT_BACKGROUND_STATUS_ENABLED}
- </dt>
-
- <dd>
- Pengguna telah mengaktifkan Data Saver untuk aplikasi ini. Aplikasi harus berusaha membatasi
- penggunaan data di latar depan dan dengan halus menangani pembatasan penggunaan
- data latar belakang.
- </dd>
-
- <dt>
- {@code RESTRICT_BACKGROUND_STATUS_WHITELISTED}
- </dt>
-
- <dd>
- Pengguna telah mengaktifkan Data Saver namun aplikasi telah dimasukkan dalam daftar putih. Aplikasi harus
- tetap berusaha membatasi penggunaan data latar belakang dan latar depan.
- </dd>
-</dl>
-
-<p>
- Hal ini dianggap praktik terbaik untuk membatasi penggunaan data bila perangkat
- terhubung ke jaringan berkuota, meskipun Data Saver telah dinonaktifkan atau aplikasi
- telah dimasukkan dalam daftar putih. Kode contoh berikut menggunakan {@link
- android.net.ConnectivityManager#isActiveNetworkMetered
- ConnectivityManager.isActiveNetworkMetered()} dan {@code
- ConnectivityManager.getRestrictBackgroundStatus()} untuk menentukan berapa banyak data
- yang harus digunakan aplikasi:
-</p>
-
-<pre>
-ConnectivityManager connMgr = (ConnectivityManager)
- getSystemService(Context.CONNECTIVITY_SERVICE);
-// Checks if the device is on a metered network
-if (connMgr.isActiveNetworkMetered()) {
- // Checks user’s Data Saver settings.
- switch (connMgr.getRestrictBackgroundStatus()) {
- case RESTRICT_BACKGROUND_STATUS_ENABLED:
- // Background data usage is blocked for this app. Wherever possible,
- // the app should also use less data in the foreground.
-
- case RESTRICT_BACKGROUND_STATUS_WHITELISTED:
- // The app is whitelisted. Wherever possible,
- // the app should use less data in the foreground and background.
-
- case RESTRICT_BACKGROUND_STATUS_DISABLED:
- // Data Saver is disabled. Since the device is connected to a
- // metered network, the app should use less data wherever possible.
- }
-} else {
- // The device is not on a metered network.
- // Use data as required to perform syncs, downloads, and updates.
-}
-</pre>
-
-<h3 id="request-whitelist">
- Meminta izin daftar putih
-</h3>
-
-<p>
- Jika aplikasi Anda perlu menggunakan data di latar belakang, aplikasi bisa meminta izin
- daftar putih dengan mengirim
- <code>Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS</code>
- yang mengandung URI dari nama paket aplikasi Anda: misalnya,
- <code>package:MY_APP_ID</code>.
-</p>
-
-<p>
- Mengirim intent dan URI akan membuka aplikasi <strong>Settings</strong> dan
- menampilkan setelan penggunaan data untuk aplikasi Anda. Pengguna nanti bisa memutuskan apakah akan
- mengaktifkan data latar belakang untuk aplikasi Anda. Sebelum Anda mengirim intent ini, sebaiknya
- tanyakan kepada pengguna terlebih dahulu apakah mereka ingin membuka aplikasi
- <strong>Settings</strong> untuk keperluan mengaktifkan penggunaan
- data latar belakang.
-</p>
-
-<h2 id="monitor-changes">
- Memantau Perubahan pada Preferensi Data Saver
-</h2>
-
-<p>
- Aplikasi bisa memantau perubahan pada preferensi Data Saver dengan membuat {@link
- android.content.BroadcastReceiver} untuk memantau {@code
- ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED} dan secara dinamis
- mendaftarkan penerima pada {@link android.content.Context#registerReceiver
- Context.registerReceiver()}. Bila menerima siaran ini, aplikasi harus
- <a href="#status">memeriksa apakah preferensi Data Saver baru memengaruhi
- izinnya</a> dengan memanggil {@code
- ConnectivityManager.getRestrictBackgroundStatus()}.
-</p>
-
-<p class="note">
- <strong>Catatan:</strong> Sistem hanya mengirim siaran ini ke aplikasi yang
- secara dinamis mendaftar padanya dengan {@link
- android.content.Context#registerReceiver Context.registerReceiver()}. Aplikasi
- yang mendaftar untuk menerima siaran ini dalam manifes mereka
- tidak akan menerimanya.
-</p>
-
-<h2 id="testing">
- Menguji dengan Perintah Android Debug Bridge
-</h2>
-
-<a href="{@docRoot}tools/help/adb.html">Android Debug Bridge (ADB)</a>
-menyediakan beberapa perintah yang bisa Anda gunakan untuk memeriksa dan
-mengonfigurasi izin jaringan:
-
-<dl>
- <dt>
- <code>$ adb shell dumpsys netpolicy</code>
- </dt>
-
- <dd>
- Menghasilkan laporan berisi setelan pembatasan jaringan latar belakang
- global saat ini, UID paket saat ini di daftar putih, dan izin jaringan
- untuk paket yang diketahui lainnya.
- </dd>
-
- <dt>
- <code>$ adb shell cmd netpolicy</code>
- </dt>
-
- <dd>
- Menampilkan daftar lengkap dari perintah Network Policy Manager (netpolicy).
- </dd>
-
- <dt>
- <code>$ adb shell cmd netpolicy set restrict-background
- <boolean></code>
- </dt>
-
- <dd>
- Mengaktifkan atau menonaktifkan mode Data Saver saat meneruskan <code>true</code> atau
- <code>false</code>, masing-masing.
- </dd>
-
- <dt>
- <code>$ adb shell cmd netpolicy add restrict-background-whitelist
- <UID></code>
- </dt>
-
- <dd>
- Menambahkan UID paket tertentu ke daftar putih untuk mengizinkan penggunaan data berkuota
- di latar belakang.
- </dd>
-
- <dt>
- <code>$ adb shell cmd netpolicy remove restrict-background-whitelist
- <UID></code>
- </dt>
-
- <dd>
- Membuang UID paket tertentu dari daftar putih untuk memblokir
- penggunaan data berkuota di latar belakang saat Data Saver diaktifkan.
- </dd>
-</dl>
\ No newline at end of file
diff --git a/docs/html-intl/intl/in/preview/features/direct-boot.jd b/docs/html-intl/intl/in/preview/features/direct-boot.jd
deleted file mode 100644
index b06a7dd..0000000
--- a/docs/html-intl/intl/in/preview/features/direct-boot.jd
+++ /dev/null
@@ -1,181 +0,0 @@
-page.title=Direct Boot
-page.keywords=pratinjau,sdk,direct boot
-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="#run">Meminta Akses untuk Berjalan Selama Direct Boot</a></li>
- <li><a href="#access">Mengakses Penyimpanan yang Dienkripsi dengan Perangkat</a></li>
- <li><a href="#notification">Mendapatkan Pemberitahuan saat Pengguna Membuka Kunci</a></li>
- <li><a href="#migrating">Migrasi Data yang Ada</a></li>
- <li><a href="#testing">Menguji Aplikasi Peka Enkripsi Anda</a></li>
- </ol>
-</div>
-</div>
-
-<p>Android N berjalan dalam mode <i>Direct Boot</i> yang aman
-bila perangkat telah dihidupkan namun pengguna tidak membuka
-kunci perangkat. Untuk mendukung hal ini, sistem menyediakan dua lokasi penyimpanan untuk data:</p>
-
-<ul>
-<li><i>Penyimpanan yang dienkripsi dengan kredensial</i>, yang merupakan lokasi penyimpanan default
-dan hanya tersedia setelah pengguna membuka kunci perangkat.</li>
-<li><i>Penyimpanan yang dienkripsi dengan perangkat</i>, yang merupakan lokasi penyimpanan yang tersedia
-selama mode Direct Boot dan setelah pengguna membuka kunci perangkat.</li>
-</ul>
-
-<p>Secara default, aplikasi tidak berjalan selama mode Direct Boot.
-Jika aplikasi Anda perlu melakukan tindakan selama mode Direct Boot, Anda bisa mendaftarkan
-komponen aplikasi yang harus dijalankan selama mode ini. Beberapa kasus penggunaan umum
-untuk aplikasi yang perlu dijalankan selama mode Direct Boot antara lain:</p>
-
-<ul>
-<li>Aplikasi yang telah menjadwalkan pemberitahuan, seperti aplikasi
-beker.</li>
-<li>Aplikasi yang menyediakan pemberitahuan pengguna yang penting, seperti aplikasi SMS.</li>
-<li>Aplikasi yang menyediakan layanan aksesibilitas, seperti TalkBack.</li>
-</ul>
-
-<p>Jika aplikasi Anda perlu mengakses data saat dijalankan dalam mode Direct Boot, gunakan
-penyimpanan yang dienkripsi dengan perangkat. Penyimpanan yang dienkripsi dengan perangkat berisi data
-yang dienkripsi dengan kunci yang hanya tersedia setelah perangkat melakukan
-booting yang berhasil diverifikasi.</p>
-
-<p>Untuk data yang harus dienkripsi dengan kunci yang dikaitkan dengan kredensial
-pengguna, seperti PIN atau kata sandi, gunakan penyimpanan yang dienkripsi dengan kredensial.
-Penyimpanan yang dienkripsi dengan kredensial hanya tersedia setelah pengguna berhasil
-membuka kunci perangkat, hingga saat pengguna menghidupkan ulang perangkat lagi. Jika
-pengguna mengaktifkan layar kunci setelah membuka kunci perangkat, hal ini tidak akan mengunci
-penyimpanan yang dienkripsi dengan kredensial.</p>
-
-<h2 id="run">Meminta Akses untuk Berjalan Selama Direct Boot</h2>
-
-<p>Aplikasi harus mendaftarkan komponennya pada sistem agar
-bisa berjalan selama mode Direct Boot atau mengakses
-penyimpanan yang dienkripsi dengan perangkat. Aplikasi mendaftar pada sistem dengan menandai komponen sebagai
-<i>peka enkripsi</i>. Untuk menandai komponen Anda sebagai peka enkripsi, setel atribut
-<code>android:directBootAware</code> ke true dalam manifes Anda.<p>
-
-<p>Komponen yang peka enkripsi bisa mendaftar untuk menerima pesan siaran
-<code>LOCKED_BOOT_COMPLETED</code> dari
-sistem bila perangkat telah dihidupkan ulang. Pada tahap ini
-penyimpanan yang dienkripsi dengan perangkat akan tersedia, dan komponen Anda bisa mengeksekusi tugas-tugas yang perlu
-dijalankan selama mode Direct Boot, seperti memicu alarm yang terjadwal.</p>
-
-<p>Cuplikan kode berikut adalah contoh cara mendaftarkan
-{@link android.content.BroadcastReceiver} sebagai peka enkripsi, dan menambahkan sebuah
-filter intent untuk <code>LOCKED_BOOT_COMPLETED</code>, dalam manifes aplikasi:</p>
-
-<pre>
-<receiver
- android:directBootAware="true" >
- ...
- <intent-filter>
- <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
- </intent-filter>
-</receiver>
-</pre>
-
-<p>Setelah pengguna membuka kunci perangkat, semua komponen bisa mengakses
-penyimpanan yang dienkripsi dengan perangkat serta penyimpanan yang dienkripsi dengan kredensial.</p>
-
-<h2 id="access">Mengakses Penyimpanan yang Dienkripsi dengan Perangkat</h2>
-
-<p>Untuk mengakses penyimpanan yang dienkripsi dengan perangkat, buat instance
-{@link android.content.Context} kedua dengan memanggil
-<code>Context.createDeviceProtectedStorageContext()</code>. Semua panggilan
-API penyimpanan yang dibuat menggunakan konteks ini mengakses penyimpanan yang dienkripsi dengan perangkat. Contoh
-berikut mengakses penyimpanan yang dienkripsi dengan perangkat dan membuka file data aplikasi
-yang ada:</p>
-
-<pre>
-Context directBootContext = appContext.createDeviceProtectedStorageContext();
-// Access appDataFilename that lives in device encrypted storage
-FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
-// Use inStream to read content...
-</pre>
-
-<p>Gunakan penyimpanan yang dienkripsi dengan perangkat hanya untuk
-informasi yang harus bisa diakses selama mode Direct Boot.
-Jangan gunakan penyimpanan yang dienkripsi dengan perangkat sebagai penyimpanan terenkripsi serba guna.
-Untuk informasi pengguna yang bersifat pribadi, atau data terenkripsi yang tidak diperlukan selama
-mode Direct Boot, gunakan penyimpanan yang dienkripsi dengan kredensial.</p>
-
-<h2 id="notification">Mendapatkan Pemberitahuan saat Pengguna Membuka Kunci</h2>
-
-<p>Setelah pengguna membuka kunci perangkat setelah restart, aplikasi Anda bisa beralih untuk
-mengakses penyimpanan yang dienkripsi dengan kredensial dan menggunakan layanan sistem biasa yang
-bergantung pada kredensial pengguna.</p>
-
-<p>Agar diberi tahu bila pengguna membuka kunci perangkat setelah boot ulang,
-daftarkan {@link android.content.BroadcastReceiver} dari komponen yang berjalan
-untuk mendengarkan pesan <code>ACTION_USER_UNLOCKED</code>. Atau, Anda bisa
-menerima pesan {@link android.content.Intent#ACTION_BOOT_COMPLETED
-ACTION_BOOT_COMPLETED} yang ada, yang sekarang menunjukkan bahwa perangkat telah dihidupkan dan
-pengguna telah membuka kunci perangkat.</p>
-
-<p>Anda bisa langsung kueri apakah pengguna telah membuka kunci perangkat dengan memanggil
-<code>UserManager.isUserUnlocked()</code>.</p>
-
-<h2 id="migrating">Migrasi Data yang Ada</h2>
-
-<p>Jika pengguna memperbarui perangkat mereka untuk menggunakan mode Direct Boot,
-data Anda yang ada mungkin perlu dipindahkan ke penyimpanan yang dienkripsi dengan perangkat. Gunakan
-<code>Context.moveSharedPreferencesFrom()</code> dan
-<code>Context.moveDatabaseFrom()</code> untuk memindahkan data preferensi dan
-basis data antara penyimpanan yang dienkripsi dengan kredensial dan penyimpanan yang dienkripsi dengan perangkat.</p>
-
-<p>Pertimbangkan dengan baik saat memutuskan data apa yang akan dipindahkan dari
-penyimpanan yang dienkripsi dengan kredensial ke penyimpanan yang dienkripsi dengan perangkat. Anda sebaiknya tidak memindahkan
-informasi pengguna yang bersifat rahasia, seperti kata sandi atau token otorisasi, ke
-penyimpanan yang dienkripsi dengan perangkat. Dalam beberapa skenario, Anda mungkin perlu mengelola
-set data terpisah pada dua tempat penyimpanan yang dienkripsi.</p>
-
-<h2 id="testing">Menguji Aplikasi Peka Enkripsi Anda</h2>
-
-<p>Uji aplikasi peka enkripsi Anda menggunakan mode Direct Boot baru. Ada
-dua cara untuk mengaktifkan Direct Boot.</p>
-
-<p class="caution"><strong>Perhatian:</strong> Mengaktifkan Direct Boot
-akan menghapus semua data pengguna pada perangkat.</p>
-
-<p>Pada perangkat yang didukung dengan Android N terpasang, aktifkan
-Direct Boot dengan melakukan salah satu hal berikut:</p>
-
-<ul>
-<li>Pada perangkat, aktifkan <b>Developer options</b> jika Anda belum melakukannya dengan
-masuk ke <b>Settings > About phone</b>, dan menyentuh <b>Build number</b>
-tujuh kali. Setelah layar Developer options terbuka, masuk ke
-<b>Settings > Developer options</b> dan pilih
-<b>Convert to file encryption</b>.</li>
-<li>Gunakan perintah shell adb berikut untuk mengaktifkan mode Direct Boot:
-<pre class="no-pretty-print">
-$ adb reboot-bootloader
-$ fastboot --wipe-and-use-fbe
-</pre>
-</li>
-</ul>
-
-<p>Mode emulasi Direct Boot juga tersedia, jika Anda perlu mengganti
-mode pada perangkat pengujian. Mode emulasi sebaiknya hanya digunakan selama
-pengembangan dan bisa menyebabkan kehilangan data. Untuk mengaktifkan mode emulasi Direct Boot,
-setel pola kunci pada perangkat, pilih "No thanks" jika ditanya mengenai
-layar start-up aman saat menetapkan pola kunci, kemudian gunakan
-perintah shell adb berikut:</p>
-
-<pre class="no-pretty-print">
-$ adb shell sm set-emulate-fbe true
-</pre>
-
-<p>Untuk menonaktifkan mode emulasi Direct Boot, gunakan perintah berikut:</p>
-
-<pre class="no-pretty-print">
-$ adb shell sm set-emulate-fbe false
-</pre>
-
-<p>Menggunakan perintah ini akan menyebabkan perangkat melakukan boot ulang.</p>
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/multi-window.jd b/docs/html-intl/intl/in/preview/features/multi-window.jd
deleted file mode 100644
index 3f75def..0000000
--- a/docs/html-intl/intl/in/preview/features/multi-window.jd
+++ /dev/null
@@ -1,589 +0,0 @@
-page.title=Dukungan Multi-Jendela
-page.metaDescription=Dukungan baru di Android N untuk menampilkan lebih dari satu aplikasi sekaligus.
-page.keywords="multi-window", "android N", "split screen", "free-form"
-
-@jd:body
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>Dalam dokumen ini</h2>
- <ol>
- <li><a href="#overview">Ringkasan</a></li>
- <li><a href="#lifecycle">Daur Hidup Multi-Jendela</a></li>
- <li><a href="#configuring">Mengonfigurasi Aplikasi Anda untuk Mode
- Multi-Jendela</a></li>
- <li><a href="#running">Menjalankan Aplikasi Anda dalam Mode Multi-Jendela</a></li>
- <li><a href="#testing">Menguji Dukungan Multi-Jendela Aplikasi Anda</a></li>
- </ol>
- <h2>Lihat Juga</h2>
- <ol>
- <li><a class="external-link" href="https://github.com/googlesamples/android-MultiWindowPlayground">Aplikasi contoh Playground
- Multi-Jendela</a></li>
- <li><a class="external-link" href="https://medium.com/google-developers/5-tips-for-preparing-for-multi-window-in-android-n-7bed803dda64">Lima Tip untuk Mempersiapkan Multi-Jendela di Android N</a></li>
- </ol>
- </div>
-</div>
-
-<p>
- Android N menambahkan dukungan untuk menampilkan lebih dari satu aplikasi
- sekaligus. Pada perangkat genggam, dua aplikasi bisa berjalan berdampingan atau
- atas-bawah dalam mode <em>layar terbagi</em>. Pada perangkat TV, aplikasi bisa
- menggunakan mode <em>gambar-dalam-gambar</em> untuk melanjutkan pemutaran video selagi pengguna
- berinteraksi dengan aplikasi lain.
-</p>
-
-<p>
- Jika Anda membangun aplikasi Anda dengan N Preview SDK, Anda bisa mengonfigurasi cara aplikasi
- menangani tampilan multi-jendela. Misalnya, Anda bisa menetapkan dimensi
- minimum yang diizinkan aktivitas Anda. Anda juga bisa menonaktifkan tampilan multi-jendela untuk
- aplikasi, sehingga memastikan sistem hanya menampilkan aplikasi Anda dalam mode
- layar penuh.
-</p>
-
-<h2 id="overview">Ringkasan</h2>
-
-<p>
- Android N memungkinkan beberapa aplikasi berbagi layar sekaligus. Misalnya,
- pengguna bisa membagi layar, melihat halaman web di sisi kiri
- sambil menulis email di sisi kanan. Pengalaman pengguna bergantung pada
- perangkat:
-</p>
-
-<ul>
- <li>Perangkat genggam yang menjalankan Android N menawarkan mode
- layar terbagi. Di mode ini, sistem mengisi layar dengan dua aplikasi, menampilkannya secara
- berdampingan atau atas-bawah. Pengguna bisa menyeret garis pembagi
- yang memisahkan keduanya untuk membuat satu aplikasi lebih besar dan yang lainnya lebih kecil.
- </li>
-
- <li>Pada Nexus Player yang menjalankan Android N, aplikasi bisa menempatkan diri
- dalam <a href="picture-in-picture.html">mode gambar-dalam-gambar</a>, yang memungkinkannya
- untuk terus menampilkan materi selagi pengguna menjelajahi atau berinteraksi dengan
- aplikasi lain.
- </li>
-
- <li>Produsen perangkat berukuran lebih besar bisa memilih untuk mengaktifkan mode
- bentuk bebas, di mana pengguna bisa bebas mengubah ukuran setiap aktivitas. Jika
- produsen mengaktifkan fitur ini, perangkat akan menawarkan mode bentuk bebas sebagai tambahan
- untuk mode layar terbagi.
- </li>
-</ul>
-
-<img src="{@docRoot}preview/images/mw-splitscreen.png" alt="" width="650" srcset="{@docRoot}preview/images/mw-splitscreen.png 1x,
- {@docRoot}preview/images/mw-splitscreen_2x.png 2x," id="img-split-screen" />
-<p class="img-caption">
- <strong>Gambar 1.</strong> Dua aplikasi berjalan berdampingan dalam mode layar terbagi.
-</p>
-
-<p>
- Pengguna bisa beralih ke mode multi-jendela dengan cara berikut:
-</p>
-
-<ul>
- <li>Jika pengguna membuka <a href="{@docRoot}guide/components/recents.html">layar
- Ringkasan</a> dan menekan lama pada
- judul aktivitas, mereka bisa menyeret aktivitas itu ke bagian yang disorot pada layar
- untuk menempatkan aktivitas dalam mode multi-jendela.
- </li>
-
- <li>Jika pengguna menekan lama pada tombol Ringkasan, perangkat akan menempatkan
- aktivitas saat ini dalam mode multi-jendela, dan membuka layar Ringkasan guna
- memungkinkan pengguna memilih aktivitas lain untuk berbagi layar.
- </li>
-</ul>
-
-<p>
- Pengguna bisa <a href="{@docRoot}guide/topics/ui/drag-drop.html">seret dan
- lepas</a> data dari aktivitas satu ke aktivitas lain sewaktu aktivitas berbagi
- layar. (Sebelumnya, pengguna hanya bisa menyeret dan melepas data dalam aktivitas
- tunggal.)
-</p>
-
-<h2 id="lifecycle">Daur Hidup Multi-Jendela</h2>
-
-<p>
- Mode multi-jendela tidak mengubah <a href="{@docRoot}training/basics/activity-lifecycle/index.html">daur hidup
- aktivitas</a>.
-</p>
-
-<p>
- Dalam mode multi-jendela, hanya aktivitas yang paling sering digunakan pengguna
- yang akan aktif pada waktu tertentu. Aktivitas ini dianggap <em>teratas</em>.
- Semua aktivitas lainnya dalam keadaan berhenti sementara, sekalipun terlihat.
- Akan tetapi, sistem memberikan aktivitas, yang berhenti-sementara-namun-terlihat ini, prioritas lebih tinggi
- daripada aktivitas yang tidak terlihat. Jika pengguna berinteraksi dengan salah satu
- aktivitas yang berhenti sementara, aktivitas tersebut akan dilanjutkan kembali, dan aktivitas
- teratas sebelumnya akan dihentikan sementara.
-</p>
-
-<p class="note">
- <strong>Catatan:</strong> Dalam mode multi-jendela, aplikasi bisa berada dalam keadaan berhenti sementara
- dan masih terlihat oleh pengguna. Sebuah aplikasi mungkin perlu melanjutkan aktivitasnya
- bahkan saat berhenti sementara. Misalnya, aplikasi pemutar video yang ada dalam
- mode berhenti sementara namun terlihat harus tetap menampilkan videonya. Karena alasan
- ini, kami menyarankan aktivitas yang memutar video <em>tidak</em> menghentikan sementara video
- dalam handler {@link android.app.Activity#onPause onPause()} mereka.
- Sebagai gantinya, aktivitas itu harus menghentikan sementara video di {@link android.app.Activity#onStop
- onStop()}, dan melanjutkan pemutaran di {@link android.app.Activity#onStart
- onStart()}.
-</p>
-
-<p>
- Bila pengguna menempatkan aplikasi dalam mode multi-jendela, sistem akan memberi tahu
- aktivitas tersebut mengenai perubahan konfigurasi, sebagaimana ditetapkan dalam <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Menangani Perubahan
- Waktu Proses</a>. Hal ini juga terjadi ketika pengguna mengubah skala aplikasi, atau menempatkan kembali aplikasi
- ke mode layar penuh.
- Pada dasarnya, perubahan ini memiliki implikasi daur hidup aktivitas yang sama
- seperti saat sistem memberi tahu aplikasi bahwa perangkat telah beralih
- dari mode potret ke mode lanskap, kecuali dimensi perangkat
- telah berubah sebagai ganti bertukar posisi. Seperti yang dibahas di <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Menangani Perubahan
- Waktu Proses</a>, aktivitas Anda bisa menangani perubahan konfigurasi itu sendiri, atau
- mengizinkan sistem memusnahkan aktivitas dan membuatnya kembali dengan dimensi
- baru.
-</p>
-
-<p>
- Jika pengguna mengubah ukuran jendela dan membuat dimensinya lebih besar, sistem
- akan mengubah ukuran aktivitas untuk menyesuaikan dengan tindakan pengguna dan mengeluarkan <a href="{@docRoot}guide/topics/resources/runtime-changes.html">perubahan waktu proses</a>
- bila diperlukan. Jika aplikasi tertinggal dibandingkan gambar di area yang baru diekspos,
- sistem untuk sementara mengisi area tersebut dengan warna yang ditetapkan oleh atribut {@link
- android.R.attr#windowBackground windowBackground} atau dengan atribut gaya
- <code>windowBackgroundFallback</code> secara default.
-</p>
-
-<h2 id="configuring">Mengonfigurasi Aplikasi Anda untuk Mode Multi-Jendela</h2>
-
-<p>
- Jika aplikasi Anda menargetkan Android N, Anda bisa mengonfigurasi bagaimana dan
- apakah aktivitas aplikasi Anda mendukung tampilan multi-jendela. Anda bisa menyetel
- atribut dalam manifes untuk mengontrol ukuran dan layoutnya.
- Setelan atribut aktivitas root berlaku pada semua aktivitas
- dalam tumpukan tugasnya. Misalnya, jika aktivitas root memiliki
- <code>android:resizeableActivity</code> yang disetel ke true, maka semua aktivitas
- dalam tumpukan tugas bisa diubah ukurannya.
-</p>
-
-<p class="note">
- <strong>Catatan:</strong> Jika Anda membangun aplikasi multi-orientasi dengan versi
- SDK lebih rendah dari Android N, dan pengguna menggunakan aplikasi
- dalam mode multi-jendela, sistem akan mengubah ukuran aplikasi secara paksa. Sistem akan menampilkan kotak
- dialog yang memperingatkan pengguna bahwa aplikasi mungkin berperilaku tidak terduga. Sistem
- <em>tidak</em> mengubah ukuran aplikasi yang berorientasi tetap; jika
- pengguna berusaha membuka aplikasi berorientasi tetap saat mode multi-jendela,
- aplikasi akan menggunakan seluruh layar.
-</p>
-
-<h4 id="resizeableActivity">android:resizeableActivity</h4>
-<p>
- Setel atribut ini dalam manifes <code><activity></code> Anda atau simpul
- <code><application></code> untuk mengaktifkan atau menonaktifkan tampilan
- multi-jendela:
-</p>
-
-<pre>
-android:resizeableActivity=["true" | "false"]
-</pre>
-
-<p>
- Jika atribut ini disetel ke true, aktivitas bisa dijalankan di
- mode layar terbagi dan mode bentuk bebas. Jika atribut ini disetel ke false, aktivitas
- tidak akan mendukung mode multi-jendela. Jika nilai ini false, dan pengguna
- berusaha memulai aktivitas dalam mode multi-jendela, aktivitas akan menggunakan
- layar penuh.
-</p>
-
-<p>
- Jika aplikasi Anda menargetkan Android N, namun Anda tidak menetapkan nilai
- untuk atribut ini, nilai atribut default adalah true.
-</p>
-
-<h4 id="supportsPictureInPicture">android:supportsPictureInPicture</h4>
-
-<p>
- Setel atribut ini dalam simpul <code><activity></code> manifes Anda untuk
- menunjukkan apakah aktivitas mendukung tampilan gambar-dalam-gambar. Atribut ini
- diabaikan jika <code>android:resizeableActivity</code> bernilai false.
-</p>
-
-<pre>
-android:supportsPictureInPicture=["true" | "false"]
-</pre>
-
-<h3 id="layout">Atribut layout</h3>
-
-<p>
- Dengan Android N, elemen manifes <code><layout></code>
- mendukung beberapa atribut yang memengaruhi cara aktivitas berperilaku dalam
- mode multi-jendela:
-</p>
-
-<dl>
- <dt>
- <code>android:defaultWidth</code>
- </dt>
-
- <dd>
- Lebar default aktivitas saat dijalankan dalam mode bentuk bebas.
- </dd>
-
- <dt>
- <code>android:defaultHeight</code>
- </dt>
-
- <dd>
- Tinggi default aktivitas saat dijalankan dalam mode bentuk bebas.
- </dd>
-
- <dt>
- <code>android:gravity</code>
- </dt>
-
- <dd>
- Penempatan awal dari aktivitas saat dibuka dalam mode bentuk bebas. Lihat referensi
- {@link android.view.Gravity} untuk mengetahui nilai yang cocok.
- </dd>
-
- <dt>
- <code>android:minimalHeight</code>, <code>android:minimalWidth</code>
- </dt>
-
- <dd>
- Tinggi dan lebar minimum untuk aktivitas dalam mode layar terbagi
- dan mode bentuk bebas. Jika pengguna memindahkan pembagi dalam mode layar terbagi
- untuk membuat aktivitas lebih kecil dari minimum yang ditetapkan, sistem akan memangkas
- aktivitas sesuai dengan ukuran yang diminta pengguna.
- </dd>
-</dl>
-
-<p>
- Misalnya, kode berikut menampilkan cara menetapkan ukuran dan lokasi default
- aktivitas, dan ukuran minimumnya, bila aktivitas ditampilkan dalam
- mode bentuk bebas:
-</p>
-
-<pre>
-<activity android:name=".MyActivity">
- <layout android:defaultHeight="500dp"
- android:defaultWidth="600dp"
- android:gravity="top|end"
- android:minimalHeight="450dp"
- android:minimalWidth="300dp" />
-</activity>
-</pre>
-
-<h2 id="running">Menjalankan Aplikasi Anda dalam Mode Multi-Jendela</h2>
-
-<p>
- Android N menawarkan fungsionalitas baru untuk mendukung aplikasi yang bisa berjalan
- dalam mode multi-jendela.
-</p>
-
-<h3 id="disabled-features">Fitur yang dinonaktifkan dalam mode multi-jendela</h3>
-
-<p>
- Fitur tertentu akan dinonaktifkan atau diabaikan bila perangkat berada dalam mode
- multi-jendela, karena dianggap tidak logis bagi suatu aktivitas yang mungkin berbagi
- layar perangkat dengan aktivitas atau aplikasi lainnya. Fitur tersebut meliputi:
-
-<ul>
- <li>Beberapa opsi penyesuaian di <a href="{@docRoot}training/system-ui/index.html">System UI</a>
- dinonaktifkan; misalnya, aplikasi tidak bisa menyembunyikan bilah status
- jika tidak berjalan dalam mode layar penuh.
- </li>
-
- <li>Sistem akan mengabaikan perubahan pada atribut <code><a href=
- "{@docRoot}guide/topics/manifest/activity-element.html#screen"
- >android:screenOrientation</a></code>.
- </li>
-</ul>
-
-<h3 id="change-notification">Pemberitahuan perubahan multi-jendela dan melakukan kueri</h3>
-
-<p>
- Metode baru berikut telah ditambahkan ke kelas {@link android.app.Activity}
- untuk mendukung tampilan multi-jendela. Untuk mengetahui detail tentang setiap
- metode, lihat <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi N
- Preview SDK</a>.
-</p>
-
-<dl>
- <dt>
- <code>Activity.isInMultiWindowMode()</code>
- </dt>
-
- <dd>
- Panggil untuk mengetahui apakah aktivitas berada dalam mode multi-jendela.
- </dd>
-
- <dt>
- <code>Activity.isInPictureInPictureMode()</code>
- </dt>
-
- <dd>
- Panggil untuk mengetahui apakah aktivitas berada dalam mode gambar-dalam-gambar.
-
- <p class="note">
- <strong>Catatan:</strong> Mode gambar-dalam-gambar adalah kasus khusus pada
- mode multi-jendela. Jika <code>myActivity.isInPictureInPictureMode()</code>
- mengembalikan nilai true, maka <code>myActivity.isInMultiWindowMode()</code> juga
- mengembalikan nilai true.
- </p>
- </dd>
-
- <dt>
- <code>Activity.onMultiWindowModeChanged()</code>
- </dt>
-
- <dd>
- Sistem akan memanggil metode ini bila aktivitas masuk atau keluar dari
- mode multi-jendela. Sistem akan meneruskan ke metode sebuah nilai true jika
- aktivitas tersebut memasuki mode multi-jendela, dan nilai false jika aktivitas
- tersebut meninggalkan mode multi-jendela.
- </dd>
-
- <dt>
- <code>Activity.onPictureInPictureModeChanged()</code>
- </dt>
-
- <dd>
- Sistem akan memanggil metode ini bila aktivitas masuk atau keluar dari
- mode gambar-dalam-gambar. Sistem akan meneruskan ke metode sebuah nilai true jika
- aktivitas tersebut memasuki mode gambar-dalam-gambar, dan nilai false jika aktivitas
- tersebut meninggalkan mode gambar-dalam-gambar.
- </dd>
-</dl>
-
-<p>
- Ada juga versi {@link android.app.Fragment} untuk setiap
- metode ini, misalnya <code>Fragment.isInMultiWindowMode()</code>.
-</p>
-
-<h3 id="entering-pip">Memasuki mode gambar-dalam-gambar</h3>
-
-<p>
- Untuk menempatkan aktivitas dalam mode gambar-dalam-gambar, panggil metode baru
- <code>Activity.enterPictureInPictureMode()</code>. Metode ini tidak berpengaruh jika
- perangkat tidak mendukung mode gambar-dalam-gambar. Untuk informasi selengkapnya,
- lihat dokumentasi <a href="picture-in-picture.html">Gambar-dalam-Gambar</a>.
-</p>
-
-<h3 id="launch">Meluncurkan Aktivitas Baru dalam Mode Multi-Jendela</h3>
-
-<p>
- Bila meluncurkan aktivitas baru, Anda bisa memberi petunjuk pada sistem bahwa aktivitas
- baru harus ditampilkan bersebelahan dengan aktivitas yang sedang aktif, jika memungkinkan. Caranya,
- gunakan flag
- <code>Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT</code>. Meneruskan
- flag ini akan meminta perilaku berikut:
-</p>
-
-<ul>
- <li>Jika perangkat berada dalam mode layar terbagi, sistem akan berupaya membuat
- aktivitas baru di sebelah aktivitas yang meluncurkannya, sehingga kedua aktivitas tersebut
- berbagi layar. Tidak ada jaminan sistem mampu melakukannya, namun sistem akan
- membuat aktivitas bersebelahan jika memungkinkan.
- </li>
-
- <li>Jika perangkat tidak berada dalam mode layar terbagi, flag ini tidak akan berpengaruh.
- </li>
-</ul>
-
-<p>
- Jika perangkat dalam mode bentuk bebas dan Anda menjalankan aktivitas baru, Anda bisa
- menetapkan dimensi aktivitas baru dan lokasi layar dengan memanggil
- <code>ActivityOptions.setLaunchBounds()</code>. Metode ini tidak berpengaruh jika
- perangkat tidak berada dalam mode multi-jendela.
-</p>
-
-<p class="note">
- <strong>Catatan:</strong> Jika Anda meluncurkan aktivitas dalam tumpukan tugas, aktivitas
- tersebut akan menggantikan aktivitas pada layar, dengan mewarisi semua
- properti multi-jendelanya. Jika Anda ingin meluncurkan aktivitas baru sebagai jendela
- terpisah dalam mode multi-jendela, Anda harus meluncurkannya dalam tumpukan tugas baru.
-</p>
-
-<h3 id="dnd">Mendukung seret dan lepas</h3>
-
-<p>
- Pengguna bisa <a href="{@docRoot}guide/topics/ui/drag-drop.html">menyeret dan
- melepas</a> data dari satu aktivitas ke aktivitas yang lain selagi kedua aktivitas
- berbagi layar. (Sebelumnya, pengguna hanya bisa menyeret dan melepas data dalam
- aktivitas tunggal.) Karena alasan ini, Anda mungkin perlu menambahkan fungsionalitas
- seret dan lepas ke aplikasi jika aplikasi saat ini belum mendukungnya.
-</p>
-
-<p>
- N Preview SDK menambahkan paket <a href="{@docRoot}reference/android/view/package-summary.html"><code>android.view</code></a>
- untuk mendukung seret dan lepas lintas-aplikasi. Untuk mengetahui detail tentang kelas dan metode
- berikut, lihat <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi N
- Preview SDK</a>.
-</p>
-
-<dl>
- <dt>
- <code>android.view.DropPermissions</code>
- </dt>
-
- <dd>
- Objek token bertanggung jawab menetapkan izin yang diberikan kepada aplikasi
- yang menerima pelepasan tersebut.
- </dd>
-
- <dt>
- <code>View.startDragAndDrop()</code>
- </dt>
-
- <dd>
- Alias baru untuk {@link android.view.View#startDrag View.startDrag()}. Untuk
- mengaktifkan seret dan lepas lintas-aktivitas, teruskan flag baru
- <code>View.DRAG_FLAG_GLOBAL</code>. Jika Anda perlu memberikan izin URI ke
- aktivitas penerima, teruskan flag baru,
- <code>View.DRAG_FLAG_GLOBAL_URI_READ</code> atau
- <code>View.DRAG_FLAG_GLOBAL_URI_WRITE</code>, sebagaimana mestinya.
- </dd>
-
- <dt>
- <code>View.cancelDragAndDrop()</code>
- </dt>
-
- <dd>
- Membatalkan operasi seret yang sedang berlangsung. Hanya bisa dipanggil oleh
- aplikasi yang menghasilkan operasi seret.
- </dd>
-
- <dt>
- <code>View.updateDragShadow()</code>
- </dt>
-
- <dd>
- Menggantikan bayangan penyeretan untuk operasi seret yang sedang berlangsung. Hanya
- bisa dipanggil oleh aplikasi yang menghasilkan operasi seret.
- </dd>
-
- <dt>
- <code>Activity.requestDropPermissions()</code>
- </dt>
-
- <dd>
- Meminta izin untuk URI materi yang diteruskan dengan {@link
- android.content.ClipData} yang terdapat dalam {@link android.view.DragEvent}.
- </dd>
-</dl>
-
-<h2 id="testing">Menguji Dukungan Multi-Jendela Aplikasi Anda</h2>
-
-<p>
- Apakah Anda memperbarui aplikasi untuk Android N atau tidak, Anda harus
- verifikasi bagaimana perilakunya di mode multi-jendela saat pengguna mencoba untuk menjalankannya
- dalam mode multi-jendela pada perangkat yang menjalankan Android N.
-</p>
-
-<h3 id="configuring">Mengonfigurasi Perangkat Pengujian</h3>
-
-<p>
- Jika Anda pasang Android N pada perangkat, mode
- layar terbagi secara otomatis didukung.
-</p>
-
-<h3 id="test-non-n">Jika aplikasi Anda tidak dibangun dengan N Preview SDK</h3>
-
-<p>
- Jika Anda tidak membangun aplikasi dengan N Preview SDK dan pengguna berupaya menggunakan
- aplikasi dalam mode multi-jendela, sistem secara paksa akan mengubah ukuran aplikasi kecuali jika aplikasi
- mendeklarasikan orientasi tetap.
-</p>
-
-<p>
- Jika aplikasi Anda tidak mendeklarasikan orientasi tetap, Anda harus meluncurkan aplikasi
- pada perangkat yang menjalankan Android N dan berupaya menempatkan aplikasi tersebut dalam
- mode layar terbagi. Verifikasi pengalaman pengguna
- bisa diterima bila aplikasi secara paksa diubah ukurannya.
-</p>
-
-<p>
- Jika aplikasi mendeklarasikan orientasi tetap, Anda harus berupaya menempatkan aplikasi dalam
- mode multi-jendela. Verifikasi apakah saat Anda melakukannya, aplikasi tetap berada dalam
- mode layar penuh.
-</p>
-
-<h3 id="test-mw">Jika Anda mendukung mode multi-jendela</h3>
-
-<p>
- Jika Anda membuat aplikasi Anda dengan N Preview SDK dan belum menonaktifkan
- dukungan multi-jendela, verifikasi perilaku berikut dalam mode layar terbagi
- dan mode bentuk bebas.
-</p>
-
-<ul>
- <li>Luncurkan aplikasi dalam mode layar penuh, kemudian beralih ke mode multi-jendela dengan
- menekan lama pada tombol Ringkasan. Verifikasi apakah aplikasi beralih dengan benar.
- </li>
-
- <li>Jalankan aplikasi secara langsung dalam mode multi-jendela, dan verifikasi aplikasi
- diluncurkan dengan benar. Anda bisa meluncurkan aplikasi dalam mode multi-jendela dengan menekan
- tombol Ringkasan, kemudian menekan lama baris judul pada aplikasi Anda dan menyeretnya
- ke salah satu area yang disorot di layar.
- </li>
-
- <li>Ubah ukuran aplikasi Anda dalam mode layar terbagi dengan menyeret garis pembagi.
- Verifikasi apakah aplikasi mengubah ukuran tanpa mogok, dan apakah elemen UI yang diperlukan
- terlihat.
- </li>
-
- <li>Jika Anda telah menetapkan dimensi minimum aplikasi, cobalah untuk mengubah ukuran
- aplikasi di bawah dimensi tersebut. Verifikasi apakah Anda tidak bisa mengubah ukuran aplikasi menjadi
- lebih kecil dari minimum yang ditetapkan.
- </li>
-
- <li>Melalui semua pengujian, verifikasi apakah kinerja aplikasi Anda bisa diterima. Misalnya,
- verifikasi apakah tidak ada jeda yang terlalu lama untuk memperbarui UI setelah
- aplikasi diubah ukurannya.
- </li>
-</ul>
-
-<h4 id="test-checklist">Daftar periksa pengujian</h4>
-
-<p>
- Untuk verifikasi kinerja aplikasi Anda dalam mode multi-jendela, cobalah operasi
- berikut. Anda harus mencoba semua operasi ini dalam mode layar terbagi dan
- dan mode multi-jendela, kecuali jika dinyatakan berbeda.
-</p>
-
-<ul>
- <li>Masuki dan tinggalkan mode multi-jendela.
- </li>
-
- <li>Beralih dari aplikasi Anda ke aplikasi lain, dan verifikasi apakah aplikasi berperilaku
- sebagaimana mestinya saat terlihat namun tidak aktif. Misalnya, jika aplikasi Anda
- sedang memutar video, verifikasi apakah video terus diputar selagi pengguna
- berinteraksi dengan aplikasi lain.
- </li>
-
- <li>Dalam mode layar terbagi, cobalah menggeser garis pembagi untuk membuat aplikasi
- Anda menjadi lebih besar dan lebih kecil. Coba operasi ini dalam konfigurasi berdampingan dan
- atas-bawah. Verifikasi apakah aplikasi tidak mogok,
- fungsionalitas penting bisa terlihat, dan operasi mengubah ukuran tidak memakan waktu terlalu
- lama.
- </li>
-
- <li>Lakukan beberapa operasi ubah ukuran berturut-turut dalam waktu cepat. Verifikasi apakah
- aplikasi Anda tidak mogok atau mengalami kebocoran memori. Untuk informasi tentang memeriksa penggunaan memori
- aplikasi Anda, lihat <a href="{@docRoot}tools/debugging/debugging-memory.html">
- Menyelidiki Penggunaan RAM Anda</a>.
- </li>
-
- <li>Gunakan aplikasi secara normal di sejumlah konfigurasi jendela yang berbeda, dan
- verifikasi apakah aplikasi berperilaku sebagaimana mestinya. Verifikasi apakah teks terbaca, dan apakah
- elemen UI tidak terlalu kecil untuk interaksi.
- </li>
-</ul>
-
-<h3 id="test-disabled-mw">Jika Anda telah menonaktifkan dukungan multi-jendela</h3>
-
-<p>
- Jika Anda menonaktifkan dukungan multi-jendela dengan menyetel
- <code>android:resizableActivity="false"</code>, Anda harus menjalankan aplikasi pada
- perangkat yang menjalankan Android N dan berusaha menempatkan aplikasi dalam
- mode bentuk bebas dan mode layar terbagi. Verifikasi apakah saat Anda melakukannya, aplikasi tetap berada dalam
- mode layar penuh.
-</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/in/preview/features/picture-in-picture.jd b/docs/html-intl/intl/in/preview/features/picture-in-picture.jd
deleted file mode 100644
index 5df3e5d..0000000
--- a/docs/html-intl/intl/in/preview/features/picture-in-picture.jd
+++ /dev/null
@@ -1,213 +0,0 @@
-page.title=Gambar-dalam-gambar
-page.keywords=pratinjau,sdk,PIP,Gambar-dalam-gambar
-page.tags=androidn
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>Dalam dokumen ini</h2>
-<ol>
- <li><a href="#declaring">Mendeklarasikan Bahwa Aktivitas Anda Mendukung
-Gambar-dalam-gambar</a></li>
- <li><a href="#pip_button">Mengalihkan Aktivitas Anda ke Gambar-dalam-gambar</a>
-</li>
- <li><a href="#handling_ui">Menangani UI Selama Gambar-dalam-gambar</a>
-</li>
- <li><a href="#continuing_playback">Melanjutkan Pemutaran Video Saat dalam
-Gambar-dalam-gambar</a></li>
- <li><a href="#single_playback">Menggunakan Aktivitas Pemutaran Tunggal untuk
- Gambar-dalam-gambar</a></li>
- <li><a href="#best">Praktik Terbaik</a></li>
-</ol>
-
-<h2>Lihat Juga</h2>
-<ol>
- <li><a href="{@docRoot}preview/features/multi-window.html">Dukungan
-Multi-Jendela</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>Di Android N, pengguna Android TV sekarang bisa menonton video
-dalam jendela yang disematkan di sudut layar saat menyusuri
-aplikasi. Mode gambar-dalam-gambar (PIP) memungkinkan aplikasi menjalankan aktivitas
-video dalam jendela yang disematkan selagi aktivitas lain tetap berjalan di
-latar belakang. Jendela PIP memungkinkan pengguna melakukan multitasking saat menggunakan aplikasi Anda, yang
-membantu pengguna menjadi lebih produktif.</p>
-
-<p>Aplikasi Anda bisa memutuskan kapan memicu mode PIP. Inilah beberapa contoh
-kapan memasuki mode PIP:</p>
-
-<ul>
-<li>Aplikasi Anda bisa memindahkan video ke dalam mode PIP bila pengguna mengarah
-mundur dari video untuk menjelajah materi lainnya.</li>
-<li>Aplikasi Anda bisa mengalihkan video ke dalam mode PIP selagi pengguna menonton akhir episode
-dari materi. Layar utama menampilkan informasi
-promosi atau rangkuman tentang episode berikutnya dalam seri tersebut.</li>
-<li>Aplikasi Anda bisa menyediakan suatu cara bagi pengguna untuk mengantre materi tambahan selagi
-mereka menonton video. Video terus dimainkan dalam mode PIP selagi layar
-utama menampilkan aktivitas pemilihan materi.</li>
-</ul>
-
-<p>Jendela PIP memiliki luas 240x135 dp dan ditampilkan di layer paling atas pada salah satu
-dari empat sudut layar, yang dipilih oleh sistem. Pengguna bisa memunculkan
-menu PIP yang memungkinkan mereka untuk beralih mode dari jendela PIP ke layar penuh, atau menutup jendela
-PIP, dengan menekan dan menahan tombol <b>Beranda</b> pada remote. Jika video
-lain mulai diputar pada layar utama, jendela PIP secara otomatis
-ditutup. Pengguna juga bisa menutup jendela PIP melalui Recents.</p>
-
-<img src="{@docRoot}preview/images/pip-active.png" />
-<p class="img-caption"><strong>Gambar 1.</strong> Video
-Gambar-dalam-gambar terlihat di sudut layar selagi pengguna menjelajahi materi pada layar
-utama.</p>
-
-<p>PIP memanfaatkan API multi-jendela yang tersedia di Android N untuk
-menyediakan jendela hamparan video yang disematkan. Untuk menambahkan PIP ke aplikasi, Anda harus
-mendaftarkan aktivitas yang mendukung PIP, mengalihkan aktivitas Anda ke mode PIP bila
-diperlukan, serta memastikan elemen UI disembunyikan dan pemutaran video berlanjut bila
-aktivitas dalam mode PIP.</p>
-
-<h2 id="declaring">Mendeklarasikan Bahwa Aktivitas Anda Mendukung Gambar-dalam-gambar</h2>
-
-<p>Secara default, sistem tidak secara otomatis mendukung PIP untuk aplikasi.
-Jika Anda ingin mendukung PIP dalam aplikasi, daftarkan aktivitas
-video Anda dalam manifes dengan menyetel
-<code>android:supportsPictureInPicture</code> dan
-<code>android:resizeableActivity</code> ke <code>true</code>. Juga, tetapkan
-bahwa aktivitas Anda menangani perubahan konfigurasi layout sehingga aktivitas
-Anda tidak diluncurkan ulang saat terjadi perubahan layout selama transisi mode PIP.</p>
-
-<pre>
-<activity android:name="VideoActivity"
- android:resizeableActivity="true"
- android:supportsPictureInPicture="true"
- android:configChanges=
- "screenSize|smallestScreenSize|screenLayout|orientation"
- ...
-</pre>
-
-<p>Saat mendaftarkan aktivitas Anda, ingatlah bahwa dalam mode PIP aktivitas
-Anda akan ditampilkan pada jendela hamparan kecil pada layar TV. Aktivitas
-pemutaran video dengan UI minimal akan memberikan pengalaman pengguna terbaik. Aktivitas yang
-mengandung elemen UI kecil mungkin tidak memberikan pengalaman pengguna yang baik
-ketika beralih ke mode PIP, karena pengguna tidak dapat melihat elemen UI secara jelas
-di jendela PIP.</p>
-
-<h2 id="pip_button">Mengalihkan Aktivitas Anda ke Gambar-dalam-gambar</h2>
-
-Bila Anda perlu untuk mengalihkan aktivitas ke mode PIP, panggil
-<code>Activity.enterPictureInPictureMode()</code>. Contoh berikut mengalihkan
-ke mode PIP bila pengguna memilih tombol PIP khusus pada baris
-kontrol media:</p>
-
-<pre>
-@Override
-public void onActionClicked(Action action) {
- if (action.getId() == R.id.lb_control_picture_in_picture) {
- getActivity().enterPictureInPictureMode();
- return;
- }
- ...
-</pre>
-
-<p>Menambahkan tombol PIP ke baris kontrol media Anda akan memungkinkan pengguna dengan mudah beralih
-ke mode PIP selagi mengontrol pemutaran video.</p>
-
-<img src="{@docRoot}preview/images/pip-button.png" />
-<p class="img-caption"><strong>Gambar 1.</strong> Tombol
-gambar-dalam-gambar pada baris kontrol media.</p>
-
-<p>Android N menyertakan kelas
-<code>PlaybackControlsRow.PictureInPictureAction</code> baru yang mendefinisikan
-tindakan PIP baris kontrol dan menggunakan ikon PIP.</p>
-
-<h2 id="handling_ui">Menangani UI Selama Gambar-dalam-gambar</h2>
-
-<p>Bila aktivitas memasuki mode PIP, aktivitas Anda seharusnya hanya menampilkan pemutaran
-video. Buang elemen UI sebelum aktivitas Anda memasuki PIP,
-dan pulihkan elemen ini bila aktivitas Anda beralih ke layar penuh lagi.
-Ganti <code>Activity.onPictureInPictureModeChanged()</code> atau
-<code>Fragment.onPictureInPictureModeChanged()</code> dan aktifkan atau
-nonaktifkan elemen UI saat diperlukan, misalnya:</p>
-
-<pre>
-@Override
-public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
- if (isInPictureInPictureMode) {
- // Hide the controls in picture-in-picture mode.
- ...
- } else {
- // Restore the playback UI based on the playback status.
- ...
- }
-}
-</pre>
-
-<h2 id="continuing_playback">Melanjutkan Pemutaran Video Saat dalam
-Gambar-dalam-gambar</h2>
-
-<p>Bila aktivitas Anda beralih ke PIP, sistem akan menganggap aktivitas tersebut berada dalam
-keadaan berhenti sementara, dan akan memanggil metode <code>onPause()</code> aktivitas Anda. Pemutaran
-video tidak boleh berhenti sementara dan harus terus diputar jika aktivitas tersebut
-berhenti sementara karena mode PIP. Periksa PIP dalam metode
-<code>onPause()</code> aktivitas Anda dan tangani pemutaran dengan tepat,
-misalnya:</p>
-
-<pre>
-@Override
-public void onPause() {
- // If called while in PIP mode, do not pause playback
- if (isInPictureInPictureMode()) {
- // Continue playback
- ...
- }
- // If paused but not in PIP, pause playback if necessary
- ...
-}
-</pre>
-
-<p>Bila aktivitas meninggalkan mode PIP dan kembali ke mode layar penuh, sistem
-akan melanjutkan aktivitas Anda dan memanggil metode <code>onResume()</code>.</p>
-
-<h2 id="single_playback">Menggunakan Aktivitas Pemutaran Tunggal untuk
- Gambar-dalam-gambar</h2>
-
-<p>Di aplikasi Anda, seorang pengguna bisa memilih video baru saat menyusuri materi di
-layar utama, selagi aktivitas pemutaran video dalam mode PIP. Putar
-video baru di aktivitas pemutaran yang ada dalam mode layar penuh, sebagai ganti
-meluncurkan aktivitas baru yang dapat membingungkan pengguna.</p>
-
-<p>Guna memastikan aktivitas tunggal digunakan untuk permintaan pemutaran video dan
-beralih ke atau dari mode PIP bila dibutuhkan, setel
-<code>android:launchMode</code> aktivitas ke <code>singleTask</code> dalam manifes Anda:
-</p>
-
-<pre>
-<activity android:name="VideoActivity"
- ...
- android:supportsPictureInPicture="true"
- android:launchMode="singleTask"
- ...
-</pre>
-
-<p>Di aktivitas Anda, ganti {@link android.app.Activity#onNewIntent
-Activity.onNewIntent()} dan tangani video baru, yang akan menghentikan pemutaran video
-jika diperlukan.</p>
-
-<h2 id="best">Praktik Terbaik</h2>
-
-<p>PIP ditujukan untuk aktivitas yang memutar video layar penuh. Saat mengalihkan
-aktivitas Anda ke mode PIP, hindari menampilkan apa pun selain materi video.
-Pantau saat aktivitas Anda memasuki mode PIP dan sembunyikan elemen UI, seperti dijelaskan
-dalam <a href="#handling_ui">Menangani UI Selama Gambar-dalam-gambar</a>.</p>
-
-<p>Karena jendela PIP ditampilkan sebagai jendela mengambang di sudut
-layar, Anda harus menghindari menampilkan informasi penting di layar utama
-di area mana saja yang bisa terhalang oleh jendela PIP.</p>
-
-<p>Bila aktivitas ada berada dalam mode PIP, secara default aktivitas itu tidak mendapatkan fokus masukan. Untuk
-menerima kejadian masukan saat dalam mode PIP, gunakan
-<code>MediaSession.setMediaButtonReceiver()</code>.</p>
diff --git a/docs/html-intl/intl/in/preview/features/scoped-folder-access.jd b/docs/html-intl/intl/in/preview/features/scoped-folder-access.jd
deleted file mode 100644
index d557e96..0000000
--- a/docs/html-intl/intl/in/preview/features/scoped-folder-access.jd
+++ /dev/null
@@ -1,148 +0,0 @@
-page.title=Scoped Directory Access
-page.keywords=pratinjau,sdk,scoped directory access
-page.tags=androidn
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>Dalam dokumen ini</h2>
- <ol>
- <li><a href="#accessing">Mengakses Direktori Penyimpanan Eksternal</a></li>
- <li><a href="#removable">Mengakses Direktori pada Media Lepas-Pasang</a></li>
- <li><a href="#best">Praktik Terbaik</a></li>
- </ol>
-</div>
-</div>
-
-<p>Aplikasi seperti aplikasi foto biasanya hanya memerlukan akses ke direktori tertentu dalam
-penyimpanan eksternal, seperti direktori <code>Pictures</code>. Pendekatan
-yang ada dalam mengakses penyimpanan eksternal tidak didesain untuk memberi kemudahan
-akses direktori tertarget untuk tipe aplikasi ini. Misalnya:</p>
-
-<ul>
-<li>Meminta {@link android.Manifest.permission#READ_EXTERNAL_STORAGE}
-atau {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} dalam manifes Anda
-akan memungkinkan akses ke semua direktori publik pada penyimpanan eksternal, yang mungkin
-lebih banyak akses dari yang dibutuhkan aplikasi Anda.</li>
-<li>Menggunakan
-<a href="{@docRoot}guide/topics/providers/document-provider.html">Storage
-Access Framework</a> biasanya membuat pengguna Anda memilih direktori
-melalui UI sistem, yang tidak diperlukan jika aplikasi Anda selalu mengakses
-direktori eksternal yang sama.</li>
-</ul>
-
-<p>Android N menyediakan API baru yang disederhanakan untuk mengakses
-direktori penyimpanan eksternal umum. </p>
-
-<h2 id="accessing">Mengakses Direktori Penyimpanan Eksternal</h2>
-
-<p>Gunakan kelas <code>StorageManager</code> untuk mendapatkan instance
-<code>StorageVolume</code> yang tepat. Kemudian, buat intent dengan memanggil metode
-<code>StorageVolume.createAccessIntent()</code> dari instance itu.
-Gunakan intent ini untuk mengakses direktori penyimpanan eksternal. Untuk mendapatkan daftar
-semua volume yang tersedia, termasuk volume media lepas-pasang, gunakan
-<code>StorageManager.getVolumesList()</code>.</p>
-
-<p>Jika Anda memiliki informasi tentang file spesifik, gunakan
-<code>StorageManager.getStorageVolume(File)</code> untuk mendapatkan
-<code>StorageVolume</code> yang berisi file tersebut. Panggil
-<code>createAccessIntent()</code> pada <code>StorageVolume</code> ini untuk mengakses
-direktori penyimpanan eksternal untuk file tersebut.</p>
-
-<p>
-Di volume kedua, seperti kartu SD eksternal, teruskan null saat memanggil
-<code>StorageVolume.createAccessIntent()</code> untuk meminta akses ke seluruh
-volume, sebagai ganti direktori spesifik.
-<code>StorageVolume.createAccessIntent()</code> akan mengembalikan null jika Anda meneruskan
-null ke volume utama, atau jika Anda meneruskan nama direktori yang tidak valid.
-</p>
-
-<p>Cuplikan kode berikut adalah contoh cara membuka direktori
-<code>Pictures</code> dalam penyimpanan bersama utama:</p>
-
-<pre>
-StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
-StorageVolume volume = sm.getPrimaryVolume();
-Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
-startActivityForResult(intent, request_code);
-</pre>
-
-<p>Sistem ini mencoba untuk memberikan akses ke direktori eksternal, dan jika
-diperlukan mengonfirmasi akses dengan pengguna menggunakan UI yang disederhanakan:</p>
-
-<img src="{@docRoot}preview/images/scoped-folder-access-framed.png" srcset="{@docRoot}preview/images/scoped-folder-access-framed.png 1x,
-{@docRoot}preview/images/scoped-folder-access-framed_2x.png 2x" />
-<p class="img-caption"><strong>Gambar 1.</strong> Sebuah aplikasi yang meminta
-akses ke direktori Pictures.</p>
-
-<p>Jika pengguna memberi akses, sistem akan memanggil penggantian
-<code>onActivityResult()</code> Anda dengan kode hasil
-<code>Activity.RESULT_OK</code>, dan data intent yang berisi URI. Gunakan
-URI yang disediakan untuk mengakses informasi direktori, serupa dengan menggunakan URI
-yang dikembalikan oleh
-<a href="{@docRoot}guide/topics/providers/document-provider.html">Storage
-Access Framework</a>.</p>
-
-<p>Jika pengguna tidak memberi akses, sistem akan memanggil penggantian
-<code>onActivityResult()</code> Anda dengan kode hasil
-<code>Activity.RESULT_CANCELED</code>, dan data intent nol.</p>
-
-<p class="note"><b>Catatan</b>: Mendapatkan akses ke direktori eksternal tertentu
-juga akan memperoleh akses ke subdirektori dalam direktori tersebut.</p>
-
-<h2 id="removable">Mengakses Direktori pada Media Lepas-Pasang</h2>
-
-<p>Untuk menggunakan Scoped Directory Access guna mengakses direktori pada media lepas-pasang,
-pertama tambahkan {@link android.content.BroadcastReceiver} yang akan mendengarkan pemberitahuan
-{@link android.os.Environment#MEDIA_MOUNTED}, misalnya:</p>
-
-<pre>
-<receiver
- android:name=".MediaMountedReceiver"
- android:enabled="true"
- android:exported="true" >
- <intent-filter>
- <action android:name="android.intent.action.MEDIA_MOUNTED" />
- <data android:scheme="file" />
- </intent-filter>
-</receiver>
-</pre>
-
-<p>Bila pengguna memasang media lepas-pasang, seperti kartu SD, sistem akan mengirimkan pemberitahuan
-{@link android.os.Environment#MEDIA_MOUNTED}. Pemberitahuan ini
-memberikan sebuah objek <code>StorageVolume</code> dalam data intent yang bisa
-Anda gunakan untuk mengakses direktori pada media lepas-pasang. Contoh berikut
-mengakses direktori <code>Pictures</code> pada media lepas-pasang:</p>
-
-<pre>
-// BroadcastReceiver has already cached the MEDIA_MOUNTED
-// notification Intent in mediaMountedIntent
-StorageVolume volume = (StorageVolume)
- mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
-volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
-startActivityForResult(intent, request_code);
-</pre>
-
-<h2 id="best">Praktik Terbaik</h2>
-
-<p>Bila memungkinkan, pertahankan URI akses direktori eksternal sehingga Anda tidak perlu
-berulang kali meminta akses ke pengguna. Setelah pengguna memberikan akses, panggil
-<code>getContentResolver().takePersistableUriPermssion()</code> bersama
-URI akses direktori. Sistem akan mempertahankan URI dan permintaan
-akses berikutnya akan mengembalikan <code>RESULT_OK</code> dan tidak menampilkan UI konfirmasi kepada
-pengguna.</p>
-
-<p>Jika pengguna menolak akses ke direktori eksternal, jangan langsung
-meminta akses lagi. Berulang kali meminta akses akan menghasilkan pengalaman
-pengguna yang buruk. Jika permintaan ditolak oleh pengguna, dan aplikasi meminta akses
-lagi, UI akan menampilkan kotak centang <b>Don't ask again</b>:</p>
-
-<img src="{@docRoot}preview/images/scoped-folder-access-dont-ask.png" srcset="{@docRoot}preview/images/scoped-folder-access-dont-ask.png 1x,
-{@docRoot}preview/images/scoped-folder-access-dont-ask_2x.png 2x" />
-<p class="img-caption"><strong>Gambar 1.</strong> Sebuah aplikasi membuat
-permintaan kedua untuk mengakses media lepas-pasang.</p>
-
-<p>Jika pengguna memilih <b>Don't ask again</b> dan menolak permintaan,
-semua permintaan berikutnya untuk direktori yang diberikan dari aplikasi
-Anda secara otomatis akan ditolak, dan tidak ada UI permintaan yang akan ditampilkan ke pengguna.</p>
\ No newline at end of file
diff --git a/docs/html-intl/intl/in/preview/features/security-config.jd b/docs/html-intl/intl/in/preview/features/security-config.jd
deleted file mode 100644
index 7a0303e..0000000
--- a/docs/html-intl/intl/in/preview/features/security-config.jd
+++ /dev/null
@@ -1,747 +0,0 @@
-page.title=Konfigurasi Keamanan Jaringan
-page.keywords=androidn,keamanan,jaringan
-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="#manifest">Menambahkan File Konfigurasi Keamanan</a></li>
- <li><a href="#CustomTrust">Menyesuaikan CA Tepercaya</a>
- <ol>
- <li><a href="#ConfigCustom">Mengonfigurasi CA Tepercaya Khusus</a></li>
- <li><a href="#LimitingCas">Membatasi Set CA Tepercaya</a></li>
- <li><a href="#TrustingAdditionalCas">Mempercayai CA Tambahan</a></li>
- </ol>
- </li>
- <li><a href="#TrustingDebugCa">CA Debug Saja</a></li>
- <li><a href="#UsesCleartextTraffic">Berhenti dari Lalu Lintas Cleartext</a></li>
- <li><a href="#CertificatePinning">Menyematkan Sertifikat</a></li>
- <li><a href="#ConfigInheritance">Perilaku Pewarisan Konfigurasi</a></li>
- <li><a href="#FileFormat">Format File Konfigurasi</a></li>
-</ol>
-</div>
-</div>
-
-
-<p>
- Android N menyertakan fitur
- Network Security Configuration yang memungkinkan aplikasi menyesuaikan setelan keamanan jaringan mereka dalam
- file konfigurasi deklaratif yang aman tanpa memodifikasi kode aplikasi. Setelan ini bisa
- dikonfigurasi untuk domain dan aplikasi tertentu. Kemampuan
- utama fitur ini adalah sebagai berikut:
-</p>
-
-<ul>
- <li>
- <b>Trust-anchor khusus:</b> Menyesuaikan Certificate Authorities (CA) mana
- yang dipercaya untuk koneksi aman aplikasi. Misalnya,
- mempercayai sertifikat tertentu yang ditandatangani sendiri atau membatasi
- set CA umum yang dipercaya aplikasi.
- </li>
-
- <li>
- <b>Penggantian hanya-debug:</b> Men-debug secara aman koneksi aman dalam aplikasi
- tanpa menambahkan risiko pada basis yang telah dipasang.
- </li>
-
- <li>
- <b>Berhenti dari lalu lintas cleartext:</b> Melindungi aplikasi dari
- penggunaan lalu lintas cleartext secara tidak sengaja.
- </li>
-
- <li>
- <b>Penyematan sertifikat:</b> Membatasi koneksi aman aplikasi ke
- sertifikat tertentu.
- </li>
-</ul>
-
-
-<h2 id="manifest">Menambahkan File Konfigurasi Keamanan</h2>
-
-<p>
- Fitur Network Security Configuration menggunakan file XML tempat Anda menetapkan
- setelan untuk aplikasi. Anda harus menyertakan sebuah entri dalam manifes aplikasi
- untuk menunjuk ke file ini. Kutipan kode berikut dari sebuah manifes
- yang memperagakan cara membuat entri ini:
-</p>
-
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<manifest ... >
- <application ... >
- <meta-data android:name="android.security.net.config"
- android:resource="@xml/network_security_config" />
- ...
- </application>
-</manifest>
-</pre>
-
-<h2 id="CustomTrust">Menyesuaikan CA Tepercaya</h2>
-
-<p>
- Aplikasi mungkin perlu mempercayai set CA khusus sebagai ganti default
- platform. Alasannya yang paling umum adalah:
-</p>
-
-<ul>
- <li>Menghubungkan ke host dengan otoritas sertifikat khusus (ditandatangani sendiri,
- dikeluarkan oleh CA internal, dll).
- </li>
-
- <li>Membatasi set CA hanya untuk CA yang Anda percaya sebagai ganti setiap CA
- yang sudah terpasang.
- </li>
-
- <li>Mempercayai CA tambahan yang tidak disertakan dalam sistem.
- </li>
-</ul>
-
-<p>
- Secara default koneksi (mis. TLS, HTTPS) aman dari semua aplikasi mempercayai
- CA yang telah dipasang oleh sistem, dan aplikasi yang menargetkan API level 23
- (Android M) ke bawah, juga mempercayai penyimpanan CA yang ditambahkan pengguna secara default. Aplikasi
- bisa menyesuaikan koneksinya menggunakan {@code base-config} (untuk
- penyesuaian lebar-aplikasi) atau {@code domain-config} (untuk penyesuaian
- per-domain).
-</p>
-
-
-<h3 id="ConfigCustom">Mengonfigurasi CA Khusus</h3>
-
-<p>
- Anggaplah Anda ingin menghubungkan ke host Anda yang menggunakan sertifikat
- SSL yang ditandatangani sendiri atau ke host yang sertifikat SSL-nya dikeluarkan oleh CA non-publik
- yang Anda percaya, seperti CA internal perusahaan Anda.
-</p>
-
-<p>
- <code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">example.com</domain>
- <trust-anchors>
- <certificates src="@raw/my_ca"/>
- </trust-anchors>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-<p>
- Menambahkan sertifikat CA yang ditandatangani sendiri atau sertifikat CA non-publik, dalam format PEM atau DER, ke
- {@code res/raw/my_ca}.
-</p>
-
-
-<h3 id="LimitingCas">Membatasi Set CA Tepercaya</h3>
-
-<p>
- Aplikasi yang tidak ingin mempercayai semua CA yang dipercaya oleh sistem
- sebagai gantinya bisa menetapkan set CA sendiri yang telah dikurangi untuk dipercaya. Ini akan melindungi
- aplikasi dari sertifikat palsu yang dikeluarkan oleh selain CA.
-</p>
-
-<p>
- Konfigurasi untuk membatasi set CA tepercaya mirip dengan <a href="#TrustingACustomCa">mempercayai CA khusus</a> untuk domain tertentu selain
- beberapa CA disediakan dalam sumber daya.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">secure.example.com</domain>
- <domain includeSubdomains="true">cdn.example.com</domain>
- <trust-anchors>
- <certificates src="@raw/trusted_roots"/>
- </trust-anchors>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-<p>
- Menambahkan CA tepercaya, dalam format PEM atau DER, ke {@code res/raw/trusted_roots}.
- Perhatikan, jika menggunakan format PEM, file <em>hanya</em> boleh berisi data PEM
- dan tidak ada teks tambahan. Anda juga bisa menyediakan beberapa elemen
- <a href="#certificates"><code><certificates></code></a>
-sebagai ganti satu elemen.
-</p>
-
-
-<h3 id="TrustingAdditionalCas">
- Mempercayai CA Tambahan
-</h3>
-
-<p>
- Sebuah aplikasi mungkin perlu mempercayai CA tambahan yang tidak dipercaya oleh sistem,
- hal ini bisa disebabkan karena sistem belum menyertakan CA atau CA tidak
- memenuhi persyaratan untuk memasukkan ke dalam sistem Android. Aplikasi
- bisa melakukannya dengan menetapkan beberapa sumber sertifikat untuk
- konfigurasi.
-</p>
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <base-config>
- <trust-anchors>
- <certificates src="@raw/extracas"/>
- <certificates src="system"/>
- </trust-anchors>
- </base-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="TrustingDebugCa">Mengonfigurasi CA untuk Debug</h2>
-
-<p>
- Saat men-debug aplikasi yang terhubung melalui HTTPS, Anda mungkin perlu
- menghubungkan ke server pengembangan lokal, yang tidak memiliki sertifikat
- SSL untuk server produksi Anda. Untuk mendukungnya tanpa
- memodifikasi kode aplikasi, Anda bisa menetapkan CA hanya-debug
- yang <i>hanya</i> dipercaya bila <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">
-android:debuggable</a>
- adalah {@code true} dengan menggunakan {@code debug-overrides}. Biasanya IDE dan alat
- build menyetel flag ini secara otomatis untuk build non-rilis.
-</p>
-
-<p>
- Ini lebih aman daripada kode kondisional biasa karena, sebagai tindakan
- pencegahan keamanan, toko aplikasi tidak menerima aplikasi yang ditandai
- bisa-di-debug.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <debug-overrides>
- <trust-anchors>
- <certificates src="@raw/debug_cas"/>
- </trust-anchors>
- </debug-overrides>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="UsesCleartextTraffic">Berhenti dari Lalu Lintas Cleartext</h2>
-
-<p>
- Aplikasi bermaksud menyambung ke tujuan hanya menggunakan koneksi
- aman dapat memilih keluar dari dukungan cleartext (menggunakan protokol
- HTTP yang tidak terenkripsi sebagai ganti HTTPS) ke tujuan tersebut. Opsi ini akan membantu mencegah
- regresi tidak disengaja dalam aplikasi karena perubahan dalam URL yang disediakan oleh sumber-sumber
- eksternal seperti server backend.
- Lihat {@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted
- NetworkSecurityPolicy.isCleartextTrafficPermitted()} untuk detail selengkapnya.
-</p>
-
-<p>
- Misalnya, aplikasi mungkin ingin memastikan semua koneksi ke {@code
- secure.example.com} selalu dilakukan melalui HTTPS untuk melindungi lalu lintas sensitif
- dari jaringan yang berbahaya.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config usesCleartextTraffic="false">
- <domain includeSubdomains="true">secure.example.com</domain>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="CertificatePinning">Menyematkan Sertifikat</h2>
-
-<p>
- Biasanya aplikasi mempercayai semua CA yang telah terpasang. Jika salah satu dari CA ini
- mengeluarkan sertifikat palsu, aplikasi akan berisiko terkena serangan
- MiTM. Beberapa aplikasi memilih untuk membatasi set sertifikat yang mereka terima
- baik dengan membatasi set CA yang mereka percaya atau dengan menyematkan sertifikat.
-</p>
-
-<p>
- Penyematan sertifikat dilakukan dengan memberikan seperangkat sertifikat dengan hash
- kunci publik (SubjectPublicKeyInfo pada sertifikat X.509). Rantai
- sertifikat nanti hanya berlaku jika rantai sertifikat berisi setidaknya salah satu
- dari kunci publik yang disematkan.
-</p>
-
-<p>
- Perhatikan, saat menggunakan penyematan sertifikat, Anda harus selalu menyertakan kunci
- cadangan sehingga jika Anda terpaksa beralih ke kunci baru, atau mengubah CA (saat
- menyematkan ke sertifikat CA atau perantara CA tersebut), konektivitas
- aplikasi Anda tidak terpengaruh. Jika tidak, Anda harus mendorong
- pembaruan ke aplikasi tersebut untuk memulihkan konektivitas.
-</p>
-
-<p>
- Selain itu dimungkinkan juga menyetel waktu habis masa berlaku untuk pin setelah
- penyematan tidak dilakukan. Hal ini membantu mencegah masalah konektivitas dalam
- aplikasi yang belum diperbarui. Akan tetapi, menyetel waktu kedaluwarsa
- pada pin mungkin akan membuat penyematan bisa diabaikan.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">example.com</domain>
- <pin-set expiration="2018-01-01">
- <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
- <!-- backup pin -->
- <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
- </pin-set>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="ConfigInheritance">Perilaku Pewarisan Konfigurasi</h2>
-
-<p>
- Nilai yang tidak disetel dalam konfigurasi tertentu akan diwariskan. Perilaku ini memungkinkan konfigurasi
- yang lebih kompleks sambil menjaga file konfigurasi tetap terbaca.
-</p>
-
-<p>
- Jika nilai tidak disetel dalam entri tertentu maka nilai dari entri berikutnya yang lebih
- umum akan digunakan. Nilai yang tidak disetel dalam {@code domain-config} akan
- diambil dari {@code domain-config} induk, jika tersarang, atau dari {@code
- base-config} jika tidak. Nilai yang tidak disetel dalam {@code base-config} akan menggunakan
- nilai default platform.
-</p>
-
-<p>
- Misalnya pertimbangkan, bila semua koneksi ke subdomain {@code
- example.com} harus menggunakan set CA khusus. Selain itu, lalu lintas cleartext ke
- domain ini diizinkan <em>kecuali</em> saat menghubungkan ke {@code
- secure.example.com}. Dengan menyarangkan konfigurasi untuk {@code
- secure.example.com} dalam konfigurasi untuk {@code example.com},
- {@code trust-anchors} tidak perlu digandakan.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">example.com</domain>
- <trust-anchors>
- <certificates src="@raw/my_ca"/>
- </trust-anchors>
- <domain-config cleartextTrafficPermitted="false">
- <domain includeSubdomains="true">secure.example.com</domain>
- </domain-config>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="FileFormat">Format File Konfigurasi</h2>
-
-<p>
- Fitur Network Security Configuration menggunakan format file XML.
- Struktur keseluruhan file ditampilkan dalam contoh kode berikut:
-</p>
-
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <base-config>
- <trust-anchors>
- <certificates src="..."/>
- ...
- </trust-anchors>
- </base-config>
-
- <domain-config>
- <domain>android.com</domain>
- ...
- <trust-anchors>
- <certificates src="..."/>
- ...
- </trust-anchors>
- <pin-set>
- <pin digest="...">...</pin>
- ...
- </pin-set>
- </domain-config>
- ...
- <debug-overrides>
- <trust-anchors>
- <certificates src="..."/>
- ...
- </trust-anchors>
- </debug-overrides>
-</network-security-config>
-</pre>
-
-<p>
- Bagian berikut menjelaskan sintaks dan detail lainnya dari format
- file.
-</p>
-
-<h3 id="network-security-config">
- <network-security-config>
-</h3>
-
-<dl class="xml">
- <dt>
- bisa berisi:
- </dt>
-
- <dd>
- 0 atau 1 <code><a href="#base-config"><base-config></a></code><br>
- Sejumlah <code><a href=
- "#domain-config"><domain-config></a></code><br>
- 0 atau 1 <code><a href="#debug-overrides"><debug-overrides></a></code>
- </dd>
-</dl>
-
-<h3 id="base-config">
- <base-config>
-</h3>
-
-<dl class="xml">
- <dt>
- sintaks:
- </dt>
-</dl>
-
-<pre class="stx">
-<base-config <a href=
-"#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
- ...
-</base-config>
-</pre>
-<dl class="xml">
- <dt>
- bisa berisi:
- </dt>
-
- <dd>
- <code><a href="#trust-anchors"><trust-anchors></a></code>
- </dd>
-
- <dt>
- keterangan:
- </dt>
-
- <dd>
- Konfigurasi default yang digunakan oleh semua koneksi yang tujuannya tidak
- tercakup oleh <a href="#domain-config"><code>domain-config</code></a>.
-
-<p>
- Nilai yang tidak disetel akan menggunakan nilai default platform. Konfigurasi
- default untuk aplikasi yang menargetkan API level 24 ke atas:
-</p>
-
-<pre>
-<base-config usesCleartextTraffic="true">
- <trust-anchors>
- <certificates src="system" />
- </trust-anchors>
-</base-config>
-</pre>
-Konfigurasi default untuk aplikasi yang menargetkan API level 23 ke bawah:
-<pre>
-<base-config usesCleartextTraffic="true">
- <trust-anchors>
- <certificates src="system" />
- <certificates src="user" />
- </trust-anchors>
-</base-config>
-</pre>
-
- </dd>
-</dl>
-
-<h3 id="domain-config"><domain-config></h3>
-<dl class="xml">
-<dt>sintaks:</dt>
-<dd>
-<pre class="stx"><domain-config <a href="#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
- ...
-</domain-config></pre>
-</dd>
-
-<dt>Bisa Berisi:</dt>
-
-<dd>
-1 atau beberapa <code><a href="#domain"><domain></a></code>
-<br/>0 atau 1 <code><a href="#trust-anchors"><trust-anchors></a></code>
-<br/>0 atau 1 <code><a href="#pin-set"><pin-set></code></a>
-<br/>Sejumlah <code><domain-config></code> tersarang</dd>
-
-<dt>Keterangan</dt>
-<dd>Konfigurasi yang digunakan untuk koneksi ke tujuan tertentu seperti didefinisikan oleh elemen {@code domain}.
-
-<p>Perhatikan, jika beberapa elemen {@code domain-config} mencakup suatu tujuan, konfigurasi dengan aturan domain paling spesifik (terpanjang) yang cocok
-akan digunakan.</p></dd>
-</dl>
-
-
-<h3 id="domain"><domain></h3>
-
-<dl class="xml">
- <dt>
- sintaks:
- </dt>
-
- <dd>
- <pre class="stx">
-<domain includeSubdomains=["true" | "false"]>example.com</domain>
-</pre>
- </dd>
-
- <dt>
- Atribut:
- </dt>
-
- <dd>
- <dl class="attr">
- <dt>
- {@code includeSubdomains}
- </dt>
-
- <dd>
- Jika {@code "true"} maka aturan domain ini akan dicocokkan dengan domain dan semua
- subdomain, termasuk subdomain dari subdomain, jika tidak peraturan hanya
- diterapkan pada kecocokan yang persis tepat.
- </dd>
- </dl>
- </dd>
-
- <dt>
- Keterangan:
- </dt>
-</dl>
-
-<h3 id="debug-overrides"><debug-overrides></h3>
-
-<dl class="xml">
- <dt>
- sintaks:
- </dt>
-
- <dd>
- <pre class="stx">
-<debug-overrides>
- ...
-</debug-overrides>
-</pre>
- </dd>
-
- <dt>
- Bisa Berisi:
- </dt>
-
- <dd>
- 0 atau 1 <code><a href="#trust-anchors"><trust-anchors></a></code>
- </dd>
-
- <dt>
- Keterangan:
- </dt>
-
- <dd>
- Pengesampingan yang akan diterapkan bila <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
- adalah {@code "true"} yang biasanya terjadi untuk build non-rilis
- yang dihasilkan oleh alat IDE dan build. Trust-anchor yang ditetapkan dalam {@code
- debug-overrides} akan ditambahkan ke semua konfigurasi lainnya dan penyematan
- sertifikat tidak dilakukan bila rantai sertifikat server menggunakan satu dari
- trust-anchor hanya-debug ini. Jika <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
- adalah {@code "false"} maka bagian ini akan diabaikan sepenuhnya.
- </dd>
-</dl>
-
-<h3 id="trust-anchors"><trust-anchors></h3>
-<dl class="xml">
- <dt>
- sintaks:
- </dt>
-
- <dd>
- <pre class="stx">
-<trust-anchors>
-...
-</trust-anchors>
-</pre>
- </dd>
-
- <dt>
- Bisa Berisi:
- </dt>
-
- <dd>
- Sejumlah <code><a href="#certificates"><certificates></a></code>
- </dd>
-
- <dt>
- Keterangan:
- </dt>
-
- <dd>
- Set trust-anchor untuk koneksi aman.
- </dd>
-</dl>
-
-
-<h3 id="certificates"><certificates></h3>
-<dl class="xml">
-<dt>sintaks:</dt>
-<dd><pre class="stx"><certificates src=["system" | "user" | "<i>raw resource</i>"]
- overridePins=["true" | "false"] />
-</pre></dd>
-<dt>keterangan:</dt>
-<dd>Set sertifikat X.509 untuk elemen {@code trust-anchors}.</dd>
-
-<dt>atribut:</dt>
-<dd><dl class="attr">
-<dt>{@code src}</dt>
-<dd>
-Sumber sertifikat CA, bisa salah satu dari
-<ul>
- <li>ID sumber daya mentah yang menunjuk ke file berisi sertifikat X.509.
- Sertifikat harus dikodekan dalam format DER atau PEM. Dalam hal sertifikat
- PEM, file <em>tidak boleh</em> berisi data tambahan non-PEM seperti
- komentar.
- </li>
-
- <li>{@code "system"} untuk sertifikat CA sistem yang telah terpasang.
- </li>
-
- <li>{@code "user"} untuk sertifikat CA yang ditambahkan pengguna.
- </li>
-</ul>
-</dd>
-
-<dt>{@code overridePins}</dt>
-<dd>
- <p>
- Menetapkan apakah CA dari sumber akan mengabaikan penyematan sertifikat. Jika {@code
- "true"} kemudian rangkaian sertifikat melalui salah satu CA dari
- sumber ini maka tidak dilakukan penyematan. Hal ini bisa berguna untuk debug CA
- atau untuk mendukung dengan memungkinkan pengguna melakukan MiTM atas lalu lintas aman aplikasi Anda.
- </p>
-
- <p>
- Default-nya adalah {@code "false"} kecuali jika ditetapkan dalam elemen {@code debug-overrides},
- dalam hal demikian default-nya adalah {@code "true"}.
- </p>
-</dd>
-</dl>
-</dd>
-
-
-<h3 id="pin-set"><pin-set></h3>
-
-<dl class="xml">
- <dt>
- sintaks:
- </dt>
-
- <dd>
-<pre class="stx">
-<pin-set expiration="date">
-...
-</pin-set>
-</pre>
- </dd>
-
- <dt>
- Bisa Berisi:
- </dt>
-
- <dd>
- Sejumlah <code><a href="#pin"><pin></a></code>
- </dd>
-
- <dt>
- Keterangan:
- </dt>
-
- <dd>
- Satu set pin kunci publik. Agar koneksi aman bisa dipercaya, salah satu
- kunci publik dalam rantai kepercayaan harus berada dalam set pin. Lihat
- <code><a href="#pin"><pin></a></code> untuk mengetahui format pin.
- </dd>
-
- <dt>
- Atribut:
- </dt>
-
- <dd>
- <dl class="attr">
- <dt>
- {@code expiration}
- </dt>
-
- <dd>
- Tanggal, dalam format {@code yyyy-MM-dd}, pada saat dan setelah pin
- kedaluwarsa, sehingga menonaktifkan penyematan. Jika atribut tidak disetel maka
- pin tidak kedaluwarsa.
- <p>
- Tanggal kedaluwarsa membantu mencegah masalah konektivitas di aplikasi yang
- tidak mengambil pembaruan untuk set pin mereka, misalnya karena pengguna
- menonaktifkan pembaruan aplikasi.
- </p>
- </dd>
- </dl>
- </dd>
-</dl>
-
-<h3 id="pin"><pin></h3>
-<dl class="xml">
- <dt>
- sintaks:
- </dt>
-
- <dd>
-<pre class="stx">
-<pin digest=["SHA-256"]>base64 encoded digest of X.509
- SubjectPublicKeyInfo (SPKI)</pin>
-</pre>
- </dd>
-
- <dt>
- Atribut:
- </dt>
-
- <dd>
- <dl class="attr">
- <dt>
- {@code digest}
- </dt>
-
- <dd>
- Algoritme intisari yang digunakan untuk menghasilkan pin. Saat ini, hanya
- {@code "SHA-256"} yang didukung.
- </dd>
- </dl>
- </dd>
-</dl>
diff --git a/docs/html-intl/intl/in/preview/features/tv-recording-api.jd b/docs/html-intl/intl/in/preview/features/tv-recording-api.jd
deleted file mode 100644
index afedf8f..0000000
--- a/docs/html-intl/intl/in/preview/features/tv-recording-api.jd
+++ /dev/null
@@ -1,142 +0,0 @@
-page.title=Perekaman TV
-page.keywords=pratinjau,sdk,tv,perekaman
-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="#supporting">Menunjukkan Dukungan untuk Perekaman</a></li>
- <li><a href="#recording">Merekam Sesi</a></li>
- <li><a href="#errors">Menangani Kesalahan Perekaman</a></li>
- <li><a href="#sessions">Mengelola Sesi yang Direkam</a></li>
- <li><a href="#best">Praktik Terbaik</a></li>
- </ol>
-</div>
-</div>
-
-<p>Layanan masukan TV memungkinkan pengguna menghentikan sementara dan melanjutkan pemutaran saluran melalui
-API perekaman. Android N telah berkembang hingga ke perekaman
-dengan memungkinkan pengguna menyimpan beberapa sesi rekaman.</p>
-
-<p>Pengguna bisa menjadwalkan rekaman terlebih dahulu, atau memulai rekaman sambil menonton
-suatu acara. Setelah sistem menyimpan rekaman, pengguna bisa menjelajah, menata,
-dan memutar kembali rekaman tersebut menggunakan aplikasi TV di sistem.</p>
-
-<p>Jika Anda ingin menyediakan fungsi perekaman untuk layanan masukan TV,
-Anda harus menunjukkan pada sistem bahwa aplikasi Anda mendukung perekaman, mengimplementasikan
-kemampuan merekam program, menangani dan mengomunikasikan kesalahan yang muncul
-selama perekaman, dan mengelola sesi perekaman Anda.</p>
-
-<p class="note"><strong>Catatan:</strong> Aplikasi Live Channels belum
-menyediakan cara bagi pengguna untuk membuat atau mengakses perekaman. Hingga dibuat perubahan
-di aplikasi Live Channels, mungkin sulit menguji sepenuhnya pengalaman
-perekaman untuk layanan masukan TV Anda.</p>
-
-<h2 id="supporting">Menunjukkan Dukungan untuk Perekaman</h2>
-
-<p>Untuk memberi tahu sistem bahwa layanan masukan TV Anda mendukung perekaman, setel
-atribut <code>android:canRecord</code> di file XML metadata layanan Anda
-ke <code>true</code>:
-</p>
-
-<pre>
-<tv-input xmlns:android="http://schemas.android.com/apk/res/android"
- <b>android:canRecord="true"</b>
- android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />
-</pre>
-
-<p>Untuk informasi selengkapnya mengenai layanan file metadata, lihat
-<a href="{@docRoot}training/tv/tif/tvinput.html#manifest">Mendeklarasikan Layanan Masukan TV Anda
-di Manifes</a>.
-</p>
-
-<p>Atau, Anda bisa menunjukkan dukungan perekaman dalam kode Anda menggunakan
-langkah-langkah ini:</p>
-
-<ol>
-<li>Dalam metode <code>TvInputService.onCreate()</code> Anda, buat objek
-<code>TvInputInfo</code> baru menggunakan kelas <code>TvInputInfo.Builder</code>.
-</li>
-<li>Saat membuat objek <code>TvInputInfo</code> baru, panggil
-<code>setCanRecord(true)</code> sebelum memanggil <code>build()</code> untuk
- menunjukkan layanan Anda mendukung perekaman.</li>
-<li>Daftarkan objek <code>TvInputInfo</code> Anda pada sistem dengan memanggil
-<code>TvInputManager.updateTvInputInfo()</code>.</li>
-</ol>
-
-<h2 id="recording">Merekam Sesi</h2>
-
-<p>Setelah layanan masukan TV Anda mendaftar bahwa mendukung fungsionalitas
-perekaman, sistem akan memanggil
-<code>TvInputService.onCreateRecordingSession()</code> bila perlu untuk mengakses
-implementasi perekaman aplikasi Anda. Implementasikan subkelas
-<code>TvInputService.RecordingSession</code> Anda sendiri dan kembalikan
-bila callback <code>onCreateRecordingSession()</code> dipicu.
- Subkelas ini bertanggung jawab mengalihkan ke saluran data yang benar,
-merekam data yang diminta, dan memberitahukan status perekaman serta kesalahan ke
-sistem.</p>
-
-<p>Bila sistem memanggil <code>RecordingSession.onTune()</code>, dengan meneruskan
-URI saluran, setel ke saluran yang ditetapkan URI. Beri tahu sistem bahwa
-aplikasi Anda telah disetel ke saluran yang diinginkan dengan memanggil <code>notifyTuned()</code>,
-atau, jika aplikasi Anda tidak bisa disetel ke saluran yang tepat, panggil
-<code>notifyError()</code>.</p>
-
-<p>Sistem berikutnya akan memanggil callback <code>RecordingSession.onStartRecording()</code>.
- Aplikasi Anda harus segera mulai merekam. Bila sistem memanggil
-callback ini, sistem mungkin akan memberikan URI yang berisi informasi tentang program
-yang akan direkam. Bila perekaman selesai, Anda perlu menyalin data
-ini ke tabel data <code>RecordedPrograms</code>.</p>
-
-<p>Terakhir, sistem akan memanggil <code>RecordingSession.onStopRecording()</code>.
-Pada tahap ini, aplikasi Anda harus segera berhenti merekam. Anda juga perlu
-membuat entri dalam tabel <code>RecordedPrograms</code>. Entri ini harus
-menyertakan URI data sesi yang direkam dalam kolom
-<code>RecordedPrograms.COLUMN_RECORDING_DATA_URI</code>, dan informasi
-program yang diberikan sistem dalam panggilan awal ke
-<code>onStartRecording()</code>.</p>
-
-<p>Untuk detail selengkapnya tentang cara mengakses tabel <code>RecordedPrograms</code>
-lihat <a href="#sessions">Mengelola Sesi yang Direkam</a>.</p>
-
-<h2 id="errors">Menangani Kesalahan Perekaman</h2>
-
-<p>Jika terjadi kesalahan selama perekaman, yang menghasilkan data terekam yang tidak bisa digunakan,
-beri tahu sistem dengan memanggil <code>RecordingSession.notifyError()</code>.
-Begitu juga, Anda bisa memanggil <code>notifyError()</code> setelah sesi rekaman dibuat
-agar sistem mengetahui bahwa aplikasi Anda tidak bisa lagi merekam sesi.</p>
-
-<p>Jika terjadi kesalahan selama perekaman, namun Anda ingin menyediakan rekaman parsial
-yang bisa digunakan pengguna untuk pemutaran, panggil
-<code>RecordingSession.notifyRecordingStopped()</code> untuk memungkinkan sistem
-menggunakan sesi parsial.</p>
-
-<h2 id="sessions">Mengelola Sesi yang Direkam</h2>
-
-<p>Sistem menyimpan informasi untuk semua sesi yang direkam dari semua
-aplikasi saluran yang mampu merekam dalam tabel penyedia materi <code>TvContract.RecordedPrograms</code>.
- Informasi ini bisa diakses lewat URI materi
-<code>RecordedPrograms.Uri</code>. Gunakan API penyedia materi untuk
-membaca, menambahkan, dan menghapus entri dari tabel ini.</p>
-
-<p>Untuk informasi selengkapnya tentang menangani data penyedia materi, lihat
-<a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
-Dasar-Dasar Penyedia Materi</a>.</p>
-
-<h2 id="best">Praktik Terbaik</h2>
-
-<p>Perangkat TV mungkin memiliki penyimpanan terbatas, jadi pertimbangkan sebaik mungkin saat
-mengalokasikan penyimpanan untuk menyimpan sesi rekaman. Gunakan
-<code>RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)</code> bila
-tidak cukup ruang untuk menyimpan sesi rekaman.</p>
-
-<p>Bila pengguna memulai perekaman, Anda harus memulai perekaman data
-secepatnya. Untuk memfasilitasinya, selesaikan setiap tugas yang memakan waktu di awal,
-seperti mengakses dan mengalokasikan ruang penyimpanan, saat sistem memanggil callback
-<code>onCreateRecordingSession()</code>. Hal ini akan memungkinkan Anda memulai
-perekaman dengan segera bila callback <code>onStartRecording()</code>
-dipicu.</p>
diff --git a/docs/html-intl/intl/in/preview/guide.jd b/docs/html-intl/intl/in/preview/guide.jd
deleted file mode 100644
index a229beb..0000000
--- a/docs/html-intl/intl/in/preview/guide.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="qv-wrapper">
- <div id="qv">
- <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/preview/index.jd b/docs/html-intl/intl/in/preview/index.jd
deleted file mode 100644
index a8f61eb..0000000
--- a/docs/html-intl/intl/in/preview/index.jd
+++ /dev/null
@@ -1,131 +0,0 @@
-page.title=Android N Developer Preview
-page.tags="preview","developer"
-meta.tags="preview", "android"
-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">
- <div class="wrap" style="max-width:1100px;margin-top:0">
- <div class="cols dac-hero-content" style="padding-bottom:1em;">
-
- <div class="col-7of16 col-push-9of16" style="padding-left:2em">
- <h1 class="dac-hero-title">Android N Developer Preview</h1>
- <p class="dac-hero-description">
- Bersiaplah menyambut Android N!
- <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">
- <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>-->
- </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>
- </div>
- <div class="dac-section dac-small">
- <div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/resources"
- data-cardSizes="6x2"
- data-maxResults="6"></div>
- </div>
- </div>
-</section>
-
-<div id="useUpdatedTemplates" style="display:none" 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>
- </a>
- <ul class="dac-actions">
- <li class="dac-action">
- <a class="dac-action-link" href="https://developer.android.com/preview/bug">
- <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>
- </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>
- </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"
- data-query="type:blog+tag:androidn+tag:featured, type:youtube+tag:androidn+tag:featured"
- data-sortOrder="-timestamp"
- data-cardSizes="6x6"
- data-items-per-page="6"
- data-maxResults="15"
- data-initial-results="3"></div>
-</div></section>
-
-<section class="dac-section dac-gray"><div class="wrap">
- <h1 class="dac-section-title">Sumber Daya</h1>
- <div class="dac-section-subtitle">
- Informasi penting guna membantu mempersiapkan aplikasi untuk Android N.
- </div>
-
- <div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/more"
- data-cardSizes="6x6"
- data-items-per-page="6"
- data-maxResults="15"
- data-initial-results="6"></div>
-
- </div>
-</section>
-
diff --git a/docs/html-intl/intl/in/preview/license.jd b/docs/html-intl/intl/in/preview/license.jd
deleted file mode 100644
index 56ae58a..0000000
--- a/docs/html-intl/intl/in/preview/license.jd
+++ /dev/null
@@ -1,145 +0,0 @@
-page.title=Perjanjian Lisensi
-
-@jd:body
-
-<p>
-Untuk mulai Android SDK Preview, Anda harus menyetujui ketentuan dan persyaratan berikut.
-Seperti dijelaskan di bawah ini, perhatikan bahwa ini adalah versi pratinjau Android SDK, bisa saja berubah, yang Anda gunakan dengan risiko sendiri. Android SDK Preview bukan rilis stabil, dan mungkin berisi kesalahan serta cacat yang bisa mengakibatkan kerusakan serius pada sistem komputer, perangkat dan data Anda.
-</p>
-
-<p>
-Ini adalah Perjanjian Lisensi Android SDK Preview ("Perjanjian Lisensi").
-</p>
-<div class="sdk-terms" style="height:auto;border:0;padding:0;width:700px">
-1. Pengantar
-
-1.1 Android SDK Preview (dalam Perjanjian Lisensi ini disebut "Pratinjau" dan secara spesifik termasuk file sistem Android, paket API, dan file pustaka Pratinjau, jika disediakan) diberikan lisensinya kepada Anda sesuai dengan ketentuan Perjanjian Lisensi. Perjanjian Lisensi ini merupakan kontrak yang mengikat secara hukum antara Anda dan Google dalam kaitannya dengan penggunaan Pratinjau oleh Anda.
-
-1.2 "Android" berarti tumpukan perangkat lunak Android untuk perangkat, seperti yang tersedia di Android Open Source Project, yang ada di URL berikut: http://source.android.com/, yang selalu diperbarui.
-
-1.3 “Kompatibel dengan Android” berarti segala implementasi Android yang (i) sesuai dengan Android Compatibility Definition Document, yang bisa ditemukan di situs web kompatibilitas Android (http://source.android.com/compatibility) dan yang selalu diperbarui; serta (ii) berhasil lulus Android Compatibility Test Suite (CTS).
-
-1.4 "Google" berarti Google Inc., perusahaan asal Delaware dengan kantor bisnis utama di 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States.
-
-2. Menerima Perjanjian Lisensi
-
-2.1 Agar bisa menggunakan Pratinjau, Anda terlebih dahulu harus menyetujui Perjanjian Lisensi ini. Anda tidak boleh menggunakan Pratinjau jika tidak menerima Perjanjian Lisensi.
-
-2.2 Dengan mengklik untuk menerima dan/atau menggunakan Pratinjau, berarti Anda menyetujui ketentuan Perjanjian Lisensi.
-
-2.3 Anda tidak boleh menggunakan Pratinjau dan tidak boleh menerima Perjanjian Lisensi jika Anda adalah orang yang dilarang menerima Pratinjau berdasarkan hukum Amerika Serikat atau negara lainnya termasuk negara di mana Anda tinggal atau dari mana Anda menggunakan Pratinjau.
-
-2.4 Jika Anda akan menggunakan Pratinjau di lingkungan perusahaan atau organisasi Anda, berarti Anda setuju untuk terikat oleh Perjanjian Lisensi atas nama perusahaan Anda atau entitas lainnya, serta Anda mewakili dan menjamin bahwa Anda memiliki kewenangan hukum penuh untuk mengikat perusahaan Anda atau entitas tersebut pada Perjanjian Lisensi ini. Jika Anda tidak memiliki kewenangan yang disyaratkan, Anda tidak boleh menerima Perjanjian Lisensi atau menggunakan Pratinjau atas nama perusahaan Anda atau entitas lainnya.
-
-3. Lisensi Pratinjau dari Google
-
-3.1 Sesuai dengan ketentuan Perjanjian Lisensi ini, Google memberi Anda lisensi yang tidak bisa disublisensikan, non-eksklusif, tidak bisa dialihkan, bebas royalti, bersifat global dan terbatas dalam menggunakan Pratinjau hanya untuk keperluan pengembangan aplikasi yang kompatibel untuk diimplementasikan pada Android.
-
-3.2 Anda tidak boleh menggunakan Pratinjau ini untuk mengembangkan aplikasi platform lain (termasuk implementasi yang tidak kompatibel pada Android) atau untuk mengembangkan SDK lain. Anda tentu saja bebas mengembangkan aplikasi untuk platform lain, termasuk implementasi yang tidak kompatibel pada Android, karena Pratinjau ini tidak digunakan untuk tujuan tersebut.
-
-3.3 Anda setuju bahwa Google atau pihak ketiga memiliki semua hak, kuasa dan kepentingan hukum dalam dan pada Pratinjau, termasuk Hak Kekayaan Intelektual yang terdapat dalam Pratinjau. "Hak Kekayaan Intelektual" berarti setiap dan semua hak yang berdasarkan pada hukum paten, hukum hak cipta, hukum rahasia dagang, hukum merek dagang, dan setiap dan semua hak kepemilikan lainnya. Google memiliki semua hak yang tidak secara tersurat diberikan kepada Anda.
-
-3.4 Anda tidak boleh menggunakan Pratinjau untuk tujuan apa pun yang tidak secara tersurat diizinkan dalam Perjanjian Lisensi ini. Kecuali sejauh yang diperlukan oleh lisensi pihak ketiga yang berlaku, Anda tidak boleh: (a) menyalin (kecuali untuk keperluan pencadangan), memodifikasi, mengadaptasi, mendistribusikan kembali, mendekompilasi, merekayasa balik, membongkar atau membuat karya turunan dari Pratinjau atau bagian apa pun dari Pratinjau; atau (b) memuat bagian apa pun dari Pratinjau ke sebuah handset ponsel atau perangkat keras selain komputer pribadi, menggabungkan suatu bagian dari Pratinjau dengan perangkat lunak lain, atau mendistribusikan perangkat lunak atau perangkat yang menggabungkan suatu bagian dari Pratinjau.
-
-3.5 Penggunaan, reproduksi dan distribusi komponen Pratinjau yang berlisensi perangkat lunak sumber terbuka diatur semata-mata oleh ketentuan lisensi perangkat lunak sumber terbuka tersebut dan bukan oleh Perjanjian Lisensi ini. Anda menyetujui bagian selebihnya dari lisensi dengan maksud baik sehubungan dengan lisensi perangkat lunak sumber terbuka tersebut sesuai dengan semua hak yang diberikan dan untuk menahan diri dari segala tindakan yang mungkin akan mengakhiri, menangguhkan, atau melanggar hak tersebut.
-
-3.6 Anda setuju bahwa bentuk dan sifat Pratinjau yang disediakan oleh Google dapat berubah tanpa pemberitahuan sebelumnya kepada Anda dan bahwa versi Pratinjau mendatang mungkin tidak kompatibel dengan aplikasi yang dikembangkan di versi Pratinjau sebelumnya. Anda setuju bahwa Google boleh menghentikan (secara permanen atau sementara) penyediaan Pratinjau (atau fitur apa pun dalam Pratinjau) kepada Anda atau pengguna pada umumnya atas kebijakan Google semata, tanpa pemberitahuan sebelumnya kepada Anda.
-
-3.7 Perjanjian Lisensi ini tidak memberi Anda hak untuk menggunakan nama dagang, merek dagang, merek layanan, logo, nama domain, atau fitur merek khas Google lainnya.
-
-3.8 Anda setuju bahwa Anda tidak akan membuang, mengaburkan, atau mengubah pernyataan hak kepemilikan apa pun (termasuk pemberitahuan hak cipta dan merek dagang) yang terlampir atau termuat dalam Pratinjau.
-
-4. Penggunaan Pratinjau oleh Anda
-
-4.1 Google setuju bahwa Perjanjian Lisensi ini tidak memberi Google hak, kuasa, dan kepentingan hukum dari Anda (atau pemberi lisensi Anda) dalam atau pada aplikasi perangkat lunak apa pun yang Anda kembangkan menggunakan Pratinjau ini, termasuk kekayaan intelektual yang ada dalam aplikasi tersebut.
-
-4.2 Anda setuju untuk menggunakan Pratinjau dan menulis aplikasi hanya untuk tujuan yang diizinkan oleh (a) Perjanjian Lisensi, dan (b) hukum yang berlaku, peraturan atau praktik yang diterima secara umum atau panduan dalam yurisdiksi terkait (termasuk hukum mengenai ekspor data atau perangkat lunak ke dan dari Amerika Serikat atau negara lain yang terkait).
-
-4.3 Anda setuju jika Anda menggunakan Pratinjau untuk mengembangkan aplikasi, Anda akan melindungi hak privasi dan hak hukum pengguna. Jika pengguna memberikan nama pengguna, sandi, atau informasi login atau informasi pribadinya, Anda harus membuat pengguna tersebut menyadari bahwa informasi yang diberikannya akan bisa digunakan oleh aplikasi Anda, dan Anda harus memberikan perlindungan dan pemberitahuan privasi yang memadai secara hukum bagi pengguna tersebut. Jika aplikasi Anda menyimpan informasi pribadi atau sensitif yang diberikan oleh pengguna, aplikasi Anda harus melakukannya dengan aman. Jika pengguna memberikan informasi Akun Google, aplikasi Anda hanya boleh menggunakan informasi tersebut untuk mengakses Akun Google pengguna saat, dan untuk tujuan terbatas di mana, pengguna tersebut telah memberikan izin kepada Anda untuk melakukannya.
-
-4.4 Anda setuju bahwa Anda tidak akan terlibat dalam aktivitas apa pun dengan Pratinjau, termasuk pengembangan atau distribusi aplikasi yang mengganggu, mengacaukan, merusak, atau mengakses secara tidak sah server, jaringan atau properti layanan Google atau pihak ketiga lainnya.
-
-4.5 Anda setuju bertanggung jawab penuh untuk (dan bahwa Google tidak bertanggung jawab terhadap Anda atau pihak ketiga lainnya untuk) data, materi, atau sumber daya apa pun yang Anda buat, kirimkan atau tampilkan melalui Android dan/atau aplikasi untuk Android, dan terhadap konsekuensi tindakan Anda (termasuk kerugian atau kerusakan apa pun yang mungkin dialami Google).
-
-4.6 Anda setuju bertanggung jawab penuh terhadap (dan bahwa Google tidak bertanggung jawab terhadap Anda atau pihak ketiga lainnya untuk) pelanggaran kewajiban Anda berdasarkan Perjanjian Lisensi ini, kontrak pihak ketiga yang berlaku atau Ketentuan Layanan, atau hukum atau peraturan yang berlaku, dan terhadap konsekuensi (termasuk kerugian atau kerusakan yang mungkin dialami Google atau pihak ketiga lainnya) akibat pelanggaran tersebut.
-
-4.7 Pratinjau ini dalam tahap pengembangan, dan pengujian serta masukan Anda merupakan bagian penting dalam proses pengembangan. Dengan menggunakan Pratinjau, Anda mengakui bahwa implementasi beberapa fitur masih dalam tahap pengembangan dan bahwa Anda tidak seharusnya mengandalkan Pratinjau berfungsi sepenuhnya sebagaimana pada rilis stabil. Anda setuju untuk tidak mendistribusikan atau mengirimkan untuk umum penggunaan aplikasi menggunakan Pratinjau karena Pratinjau ini tidak akan lagi didukung setelah Android SDK dirilis secara resmi.
-
-5. Kredensial Pengembang Anda
-
-5.1 Anda setuju bertanggung jawab untuk menjaga kerahasiaan semua kredensial pengembang yang mungkin diberikan Google kepada Anda atau yang mungkin Anda pilih sendiri dan bahwa Anda akan bertanggung jawab penuh terhadap semua aplikasi yang dikembangkan dengan kredensial pengembang Anda.
-
-6. Privasi dan Informasi
-
-6.1 Untuk terus berinovasi dan meningkatkan Pratinjau, Google boleh mengumpulkan statistik penggunaan tertentu dari perangkat lunak termasuk namun tidak terbatas pada identifier unik, alamat IP terkait, nomor versi perangkat lunak, dan informasi yang menjadi tempat penggunaan alat dan/atau layanan dalam Pratinjau dan cara penggunaannya. Sebelum informasi ini dikumpulkan, Pratinjau akan memberi tahu dan meminta persetujuan Anda. Jika Anda tidak memberikan persetujuan, informasi tersebut tidak akan dikumpulkan.
-
-6.2 Data yang dikumpulkan akan diperiksa secara agregat untuk meningkatkan Pratinjau dan dikelola sesuai dengan Kebijakan Privasi Google yang terdapat di http://www.google.com/policies/privacy.
-
-7. Aplikasi Pihak Ketiga
-
-7.1 Jika Anda menggunakan Pratinjau untuk menjalankan aplikasi yang dikembangkan oleh pihak ketiga atau yang mengakses data, materi atau sumber daya yang disediakan oleh pihak ketiga, Anda setuju bahwa Google tidak bertanggung jawab terhadap aplikasi, data, materi atau sumber daya tersebut. Anda memahami bahwa semua data, materi atau sumber daya yang mungkin Anda akses melalui aplikasi pihak ketiga merupakan tanggung jawab penuh dari pihak yang menjadi asal data tersebut dan Google tidak bertanggung jawab terhadap kerugian atau kerusakan apa pun yang mungkin Anda alami sebagai akibat menggunakan atau mengakses aplikasi, data, materi, atau sumber daya pihak ketiga tersebut.
-
-7.2 Anda harus menyadari bahwa data, materi dan sumber daya yang diberikan kepada Anda melalui aplikasi pihak ketiga mungkin dilindungi oleh hak kekayaan intelektual yang dimiliki oleh penyedia (atau oleh orang lain atau perusahaan atas nama mereka). Anda tidak boleh memodifikasi, menyewakan, menyewabelikan, meminjamkan, menjual, mendistribusikan atau membuat karya turunan berdasarkan data, materi, atau sumber daya ini (baik secara keseluruhan atau sebagian) kecuali Anda secara khusus diberikan izin untuk melakukannya oleh pemilik yang bersangkutan.
-
-7.3 Anda mengakui bahwa penggunaan Anda atas aplikasi, data, materi, atau sumber daya pihak ketiga semacam itu tunduk pada ketentuan terpisah antara Anda dan pihak ketiga yang bersangkutan.
-
-8. Menggunakan Google API
-
-8.1 Google API
-
-8.1.1 Jika Anda menggunakan API (Antarmuka Pemrograman Aplikasi) untuk mengambil data dari Google, Anda mengakui bahwa data tersebut dilindungi hak kekayaan intelektual yang dimiliki Google atau pihak-pihak yang menyediakan data (atau oleh orang lain atau perusahaan atas nama mereka). Penggunaan API oleh Anda tunduk pada Ketentuan Layanan tambahan. Anda tidak boleh memodifikasi, menyewakan, menyewabelikan, meminjamkan, menjual, mendistribusikan atau membuat karya turunan berdasarkan data ini (baik secara keseluruhan atau sebagian) kecuali diizinkan oleh Ketentuan Layanan yang bersangkutan.
-
-8.1.2 Jika Anda menggunakan API dalam bentuk apa pun untuk mengambil data pengguna dari Google, Anda mengakui dan menyetujui bahwa Anda akan mengambil data hanya dengan persetujuan yang jelas dari pengguna dan hanya bila, dan sebatas keperluan yang diizinkan oleh pengguna tersebut untuk Anda lakukan.
-
-9. Mengakhiri Perjanjian Lisensi
-
-9.1 Perjanjian Lisensi ini akan terus berlaku hingga diakhiri oleh Anda atau Google sebagaimana diatur di bawah ini.
-
-9.2 Jika Anda ingin mengakhiri Perjanjian Lisensi ini, Anda boleh melakukannya dengan menghentikan penggunaan Pratinjau dan kredensial pengembang yang relevan.
-
-9.3 Google boleh mengakhiri Perjanjian Lisensi ini dengan Anda kapan saja, dengan atau tanpa sebab, setelah memberi tahu Anda.
-
-9.4 Perjanjian Lisensi akan berakhir secara otomatis tanpa pemberitahuan atau tindakan lainnya bila, mana saja yang lebih dahulu:
-(A) Google berhenti menyediakan Pratinjau atau bagian Pratinjau tertentu kepada pengguna di negara tempat Anda tinggal atau negara tempat asal Anda menggunakan layanan; dan
-(B) Google mengeluarkan versi rilis final dari Android SDK.
-
-9.5 Bila Perjanjian Lisensi berakhir, lisensi yang telah diberikan kepada Anda dalam Perjanjian Lisensi akan berakhir pula, Anda akan segera menghentikan semua penggunaan Pratinjau, dan ketetapan paragraf 10, 11, 12, dan 14 akan terus berlaku secara tak terbatas.
-
-10. SANGGAHAN
-
-10.1 ANDA SEPENUHNYA MEMAHAMI DAN MENYETUJUI BAHWA PENGGUNAAN PRATINJAU OLEH ANDA MERUPAKAN RISIKO ANDA SENDIRI DAN BAHWA PRATINJAU INI DISEDIAKAN "APA ADANYA" DAN "SEBAGAIMANA TERSEDIA" TANPA JAMINAN DALAM BENTUK APA PUN DARI GOOGLE.
-
-10.2 PENGGUNAAN PRATINJAU DAN MATERI APA PUN YANG DIUNDUH ATAU DIPEROLEH MELALUI PENGGUNAAN PRATINJAU OLEH ANDA ADALAH ATAS KEHENDAK DAN RISIKO ANDA SENDIRI DAN ANDA BERTANGGUNG JAWAB PENUH TERHADAP KERUSAKAN PADA SISTEM KOMPUTER ATAU PERANGKAT LAIN ATAU HILANGNYA DATA AKIBAT PENGGUNAAN TERSEBUT. TANPA MEMBATASI HAL TERSEBUT, ANDA MEMAHAMI BAHWA PRATINJAU BUKANLAH RILIS STABIL DAN MUNGKIN BERISI KESALAHAN, CACAT, DAN RISIKO KEAMANAN YANG BISA MENGAKIBATKAN KERUSAKAN SIGNIFIKAN, TERMASUK KEHILANGAN PENGGUNAAN ATAS SISTEM KOMPUTER ANDA ATAU PERANGKAT LAIN DENGAN SEPENUHNYA DAN TIDAK BISA DIPULIHKAN LAGI.
-
-10.3 GOOGLE LEBIH LANJUT MENYANGGAH SEMUA JAMINAN DAN PERSYARATAN APA PUN, BAIK TERSURAT MAUPUN TERSIRAT, TERMASUK NAMUN TIDAK TERBATAS PADA JAMINAN TERSIRAT DAN PERSYARATAN MENGENAI DAYA JUAL, KESESUAIAN DENGAN TUJUAN TERTENTU, DAN NON-PELANGGARAN.
-
-11. PEMBATASAN KEWAJIBAN
-
-11.1 ANDA SEPENUHNYA MEMAHAMI DAN MENYETUJUI BAHWA GOOGLE, ANAK PERUSAHAAN DAN AFILIASINYA, DAN PEMBERI LISENSINYA TIDAK AKAN BERTANGGUNG JAWAB KEPADA ANDA BERDASARKAN TEORI KEWAJIBAN TERHADAP SEGALA KERUGIAN LANGSUNG, TIDAK LANGSUNG, INSIDENTAL, KHUSUS, JANGKA PANJANG ATAU GANTI RUGI YANG DIAKIBATKAN OLEH ANDA, TERMASUK HILANGNYA DATA, WALAUPUN GOOGLE ATAU PERWAKILANNYA TELAH DIBERI TAHU ATAU SEHARUSNYA MENGETAHUI KEMUNGKINAN TIMBULNYA KEHILANGAN TERSEBUT.
-
-12. Penggantian Kerugian
-
-12.1 Sejauh maksimum yang diizinkan oleh hukum, Anda setuju untuk membela, mengganti kerugian dan melepaskan tanggung jawab Google, afiliasinya beserta direksi, petugas, karyawan dan agennya dari dan terhadap setiap dan semua klaim, tindakan, gugatan, proses hukum, serta setiap dan semua kehilangan, kewajiban, kerusakan, biaya dan pengeluaran (termasuk biaya pengacara yang sewajarnya) yang timbul atau diakibatkan dari (a) penggunaan Pratinjau oleh Anda, (b) aplikasi apa pun yang Anda kembangkan dari Pratinjau yang melanggar Hak Kekayaan Intelektual seseorang atau mencemarkan nama baik seseorang atau melanggar hak mereka berkaitan dengan publisitas atau privasi, dan (c) ketidakpatuhan Anda terhadap Perjanjian Lisensi ini.
-
-13. Perubahan pada Perjanjian Lisensi
-
-13.1 Google boleh membuat perubahan pada Perjanjian Lisensi saat mendistribusikan versi baru Pratinjau. Saat perubahan tersebut dibuat, Google akan menyediakan versi baru Perjanjian Lisensi di situs web penyediaan Pratinjau.
-
-14. Ketentuan Hukum Umum
-
-14.1 Perjanjian Lisensi ini merupakan perjanjian hukum antara Anda dan Google dan mengatur penggunaan Pratinjau oleh Anda (tidak termasuk layanan apa pun yang mungkin disediakan Google untuk Anda dalam perjanjian tertulis terpisah), dan sepenuhnya menggantikan perjanjian sebelumnya antara Anda dan Google dalam kaitannya dengan Pratinjau.
-
-14.2 Anda setuju bahwa jika Google tidak menjalankan atau menerapkan hak atau upaya hukum yang terkandung dalam Perjanjian Lisensi ini (atau bila Google memiliki kewenangan berdasarkan hukum yang berlaku), tindakan ini tidak akan dianggap sebagai pelepasan hak secara resmi oleh Google dan bahwa hak atau upaya hukum tersebut akan tetap bisa digunakan oleh Google.
-
-14.3 Jika persidangan hukum yang berwenang untuk memutuskan perkara ini menetapkan bahwa ada ketetapan Perjanjian Lisensi ini yang tidak valid, maka ketetapan tersebut akan dihapus dari Perjanjian Lisensi tanpa memengaruhi bagian selebihnya dari Perjanjian Lisensi ini. Ketetapan selebihnya dari Perjanjian Lisensi ini akan tetap sah dan berlaku.
-
-14.4 Anda mengakui dan menyetujui bahwa setiap anggota dari kelompok perusahaan yang diinduki oleh Google akan menjadi pihak ketiga penerima manfaat dari Perjanjian Lisensi ini dan bahwa perusahaan tersebut berhak untuk secara langsung memberlakukan, dan bergantung pada, ketetapan yang dimuat dalam Perjanjian Lisensi ini yang memberikan manfaat (atau hak yang mendukung) kepada mereka. Selain yang telah disebutkan di atas, tidak ada orang atau perusahaan lain yang akan menjadi pihak ketiga penerima manfaat dari Perjanjian Lisensi ini
-
-14.5 PEMBATASAN EKSPOR. PRATINJAU TUNDUK PADA HUKUM DAN PERATURAN EKSPOR AMERIKA SERIKAT. ANDA HARUS MEMATUHI SEMUA HUKUM DAN PERATURAN NASIONAL DAN INTERNASIONAL YANG BERLAKU PADA PRATINJAU. HUKUM INI MENYERTAKAN PEMBATASAN ATAS TUJUAN, PENGGUNA AKHIR DAN PENGGUNAAN AKHIR
-
-14.6 Perjanjian Lisensi ini tidak boleh diberikan atau dialihkan baik oleh Anda tanpa persetujuan tertulis sebelumnya dari Google, dan upaya apa pun untuk mengalihkannya tanpa persetujuan akan menjadi tidak sah. Anda tidak boleh mendelegasikan tanggung jawab atau kewajiban berdasarkan Perjanjian Lisensi ini tanpa persetujuan tertulis sebelumnya dari pihak lain.
-
-14.7 Perjanjian Lisensi ini, dan hubungan Anda dengan Google berdasarkan Perjanjian Lisensi ini, akan diatur oleh hukum Negara Bagian California tanpa mengindahkan pertentangan ketetapan hukumnya. Anda dan Google setuju untuk tunduk pada yurisdiksi eksklusif pengadilan yang berlokasi di county Santa Clara, California untuk menyelesaikan segala masalah hukum yang timbul dari Perjanjian Lisensi ini. Meski demikian, Anda setuju bahwa Google akan tetap diizinkan untuk mengajukan upaya hukum (atau tipe keringanan hukum setara yang mendesak) dalam yurisdiksi apa pun.
-
-
-</div>
\ No newline at end of file
diff --git a/docs/html-intl/intl/in/preview/overview.jd b/docs/html-intl/intl/in/preview/overview.jd
deleted file mode 100644
index c38a579..0000000
--- a/docs/html-intl/intl/in/preview/overview.jd
+++ /dev/null
@@ -1,440 +0,0 @@
-page.title=Ringkasan Program
-page.metaDescription=Persiapkan aplikasi Anda untuk versi Android berikutnya
-page.image=images/cards/card-n-overview_2x.png
-meta.tags="preview", "developer", "android"
-page.tags="preview", "developer", "android"
-
-@jd:body
-<!--
-<div class="cols" style=
-"background-color:#f2daf5; padding: 5px 0;margin-bottom:1em; text-align:center;">
-<h3>
- Developer Preview 3 is now available
- </h3>
- <p>Includes final SDK and near-final system images</p>
- <div style="margin:auto 1em">
- <ul class="dac-section-links">
- <li class="dac-section-link">
- <a href="{@docRoot}preview/support.html#preview3-notes">
- <span class="dac-sprite dac-auto-chevron"></span>
- Read the Notes</a>
- </li>
-
- <li class="dac-section-link">
- <a href="{@docRoot}preview/support.html#preview3-get">
- <span class="dac-sprite dac-auto-chevron"></span>
- Get the Update</a>
- </li>
-
- <li class="dac-section-link">
- <a href="https://code.google.com/p/android-developer-preview/">
- <span class="dac-sprite dac-auto-chevron"></span>
- Report Issues</a>
- </li>
- </ul>
- </div>
-</div>
--->
-
-<p>
- Selamat datang di <strong>Android N Developer Preview</strong>, program yang
- akan memberi apa saja yang Anda butuhkan untuk menguji dan mengoptimalkan aplikasi untuk versi
- Android berikutnya. Program ini tersedia gratis, dan Anda bisa langsung mulai hanya dengan
- mengunduh alat bantu N Developer Preview.
-</p>
-
-
-
-
-
-
-
-<div style="background-color:#eceff1;padding:1em;">
-<div class="wrap">
- <div class="cols">
- <div class="col-4of12">
- <h5>
- Gambar perangkat keras dan emulator
- </h5>
-
- <p>
- Jalankan dan uji aplikasi Anda pada berbagai perangkat atau pada emulator.
-
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- Kode platform terbaru
- </h5>
-
- <p>
- Kami akan menyediakan pembaruan setiap bulan selama Pratinjau, agar Anda bisa menguji perubahan platform terbaru.
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- Prioritas untuk masalah pengembang
- </h5>
-
- <p>
- Selama beberapa minggu pertama, kami akan memberikan prioritas pada masalah-masalah
- yang dilaporkan pengembang, jadi ujilah dan berikan masukan sesegera mungkin.
- </p>
- </div>
-
- </div>
-
- <div class="cols">
-
-
- <div class="col-4of12">
- <h5>
- Kemampuan dan perilaku baru
- </h5>
-
- <p>
- Mulailah pekerjaan lebih awal untuk mendukung perilaku platform baru dan kembangkan dengan fitur-fitur baru.
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- Pembaruan dikirim melalui OTA
- </h5>
-
- <p>
- Pembaruan lewat jaringan seluler tanpa kendala untuk setiap perangkat yang didukung melalui
- Android Beta Program. Flashing tidak diperlukan.
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- Masukan dan dukungan
- </h5>
-
- <p>
- Laporkan masalah dan berikan masukan kepada kami dengan menggunakan
- <a href="{@docRoot}preview/bug">Issue Tracker</a> kami. Hubungkan dengan
- pengembang lain di
- <a href="{@docRoot}preview/dev-community">N Developer Community</a>.
- </p>
- </div>
- </div>
-</div>
-</div>
-
-<!--
-<p>New in the Android N Developer Preview: </p>
-
-<ul>
- <li> Accompanying Android Beta Program for consumers, starting later in the preview</li>
- <li> More supported devices, including devices from OEM partners</li>
- <li> Seamless OTAs for your devices, from initial release to final N release without flashing</li>
-</ul>
--->
-
-<h2 id="timeline">Kronologi dan pembaruan</h2>
-<img src="{@docRoot}images/n-preview-updates_2x.png">
-
-<p>
- N Developer Preview berjalan dari 9 Maret 2016 hingga rilis resmi Android N
- final ke AOSP dan OEM, yang direncanakan selama Kuartal 3 2016.
-</p>
-
-<p>
- Pada tahapan pencapaian pengembangan yang penting kami akan mengirimkan pembaruan untuk lingkungan pengujian dan
- pengembangan Anda. Pada umumnya Anda diharapkan sudah memperoleh pembaruan setiap bulan (dengan interval 4 sampai 6
- minggu). Tahapan pencapaian tersebut tercantum di bawah ini.
-</p>
-
-<ul>
- <li><strong><a href="{@docRoot}preview/support.html#dp1">Pratinjau 1</a></strong> (rilis pertama, alfa)</li>
- <li><strong><a href="{@docRoot}preview/support.html#dp2">Pratinjau 2</a></strong> (pembaruan bertahap, alfa)</li>
- <li><strong><a href="{@docRoot}preview/support.html#dp3">Pratinjau 3</a></strong> (pembaruan bertahap, beta)</li>
- <li><strong>Pratinjau 4</strong> (API final dan SDK resmi, publikasi di Play)</li>
- <li><strong>Pratinjau 5</strong> (citra sistem hampir final untuk pengujian akhir)</li>
- <li><strong>Rilis Final</strong> ke AOSP dan ekosistem</li>
-</ul>
-
-<p>
- Setiap pembaruan menyertakan SDK Tools, citra sistem pratinjau, emulator, dokumentasi
- referensi, dan diff API.
-</p>
-
-<p>
- <strong>Tiga tahapan pencapaian pratinjau pertama</strong> memberikan <strong>ujian
- pertama dan lingkungan pengembangan</strong> yang membantu Anda mengidentifikasi
- masalah kompatibilitas dalam aplikasi Anda saat ini dan merencanakan migrasi atau menampilkan pekerjaan
- yang diperlukan untuk menargetkan platform baru. Ini adalah periode prioritas yang akan
- memberi kami masukan dari Anda tentang fitur dan API serta masalah kompatibilitas file
- — untuk semua ini, gunakan <a href="{@docRoot}preview/bug">Issue
- Tracker</a>. Anda bisa mengharapkan beberapa perubahan API dalam pembaruan ini.
-</p>
-
-<p>
- Pada <strong>pratinjau 4 dan 5</strong> Anda akan memiliki akses ke <strong>
- API dan SDK N final</strong> untuk digunakan dalam pengembangan, serta citra sistem hampir-final
- untuk menguji perilaku dan fitur sistem. Android N akan memberikan level API
- standar pada saat ini. Anda bisa memulai pengujian kompatibilitas final dari aplikasi
- lawas dan menyaring setiap kode baru yang menggunakan API atau fitur N.
-</p>
-
-<p>
- Juga, mulai pratinjau 4, Anda akan bisa <strong>mempublikasikan aplikasi ke
- perangkat</strong> yang menjalankan Android N pada level API resmi, seperti
- perangkat konsumen yang telah mengikuti program Android Beta. Anda bisa
- mempublikasikan ke saluran alfa dan beta Google Play terlebih dahulu, agar Anda bisa menguji
- aplikasi pada konsumen Android Beta sebelum mendistribusikan secara luas di
- toko.
-</p>
-
-<p>
- Saat Anda menguji dan mengembangkan di Android N, kami sangat menyarankan<strong>terus memperbarui
- lingkungan pengembangan</strong> saat pembaruan pratinjau
- dirilis. Untuk mempermudah prosesnya, Anda bisa mendaftarkan perangkat pengujian di
- program Android Beta dan mendapatkan <strong>pembaruan lewat jaringan seluler (OTA)</strong>
- pada setiap tahapan pencapaian. Sebagai alternatif, citra pratinjau terbaru telah tersedia agar Anda
- bisa mengunduh dan mem-flash secara manual.
-</p>
-
-<p>
- Kami akan memberi tahu Anda bila pembaruan pratinjau telah tersedia lewat <a href="http://android-developers.blogspot.com/">Android Developers Blog</a> serta
- situs ini dan <a href="{@docRoot}preview/dev-community">Android
- N Developer Community</a>.
-</p>
-
-
-<h2 id="preview_tools">Apa yang ada di N Developer Preview?</h2>
-
-<p>
- N Developer Preview menyertakan apa saja yang Anda perlukan untuk menguji aplikasi
- yang ada pada berbagai ukuran layar, teknologi jaringan, chipset CPU/GPU,
- dan arsitektur perangkat keras.
-</p>
-
-<h3 id="sdk_tools">SDK Tools</h3>
-
-<p>Anda bisa mengunduh komponen-komponen ini melalui SDK Manager di <a href="{@docRoot}studio/intro/update.html">Android Studio</a>:</p>
-
-<ul>
- <li> SDK dan alat <strong>N Developer Preview</strong>
- <li> <strong>Citra sistem emulator</strong> N Developer Preview (32-bit & 64-bit)
- <li> <strong>Citra sistem emulator</strong> N Developer Preview untuk Android TV (32-bit)
- <li> N Developer Preview mendukung pustaka (untuk template aplikasi baru)
-</ul>
-
-<p>
- Kami akan menyediakan pembaruan untuk alat pengembangan ini di setiap tahapan pencapaian jika diperlukan.
-</p>
-
-<h3 id="hardware_system_images">Citra sistem perangkat keras</h3>
-
-<p>
- N Developer Preview menyertakan citra sistem Nexus dan perangkat keras lainnya yang bisa Anda gunakan saat
- menguji dan mengembangkan pada perangkat fisik. Lihat halaman <a href="{@docRoot}preview/download.html">Citra Perangkat</a> untuk melihat daftar lengkap
- citra perangkat keras.
-</p>
-
-<p>
- Kami akan mengirimkan citra sistem terbaru untuk perangkat ini pada setiap tahapan pencapaian. Anda
- bisa mengunduh dan mem-flash citra sistem yang diperbarui untuk perangkat pengujian
- secara manual, sesering yang Anda perlukan. Ini terutama berguna untuk lingkungan pengujian
- otomatis bila Anda mungkin perlu mem-flash ulang perangkat beberapa
- kali.
-</p>
-
-<p class="note"><strong>Catatan</strong>:
- <strong>Perangkat yang di-flash secara manual tidak akan mendapatkan pembaruan OTA</strong> seperti di
- pratinjau tahun lalu. Tahun ini, Anda bisa memperoleh OTA dengan mendaftarkan perangkat dalam
- Android Beta Program — lihat detailnya di bagian berikutnya.
-</p>
-
-<h3 id="android_beta">Pembaruan OTA melalui Android Beta Program</h3>
-
-<p>
- Yang baru untuk Android N adalah program pembaruan lewat jaringan seluler (OTA) yang secara otomatis
- mengirim pembaruan pratinjau terbaru Android N secara langsung ke perangkat yang telah mendaftar
- di program ini. Program ini gratis dan terbuka bagi siapa saja yang memiliki
- perangkat yang didukung dan telah didaftarkan ke akun Google mereka.
-</p>
-
-<p>
- Untuk mendaftar dalam program ini, kunjungi situs <a href="https://g.co/androidbeta">Android
- Beta Program</a>. Anda akan
- melihat semua perangkat yang telah didaftarkan ke akun Anda yang memenuhi syarat untuk mendaftar
- dalam Android Beta.
-</p>
-
-<ol>
- <li> Pilih perangkat yang Anda inginkan untuk menerima pembaruan Android N
- <li> Klik Enroll, baca dan setujui ketentuan layanan, kemudian klik OK
-</ol>
-
-<p>
- Setelah terdaftar, perangkat Anda akan segera menerima pembaruan. Umumnya
- Anda tidak perlu penyetelan ulang penuh atas data untuk beralih ke Android N, namun
- Anda disarankan mencadangkan setiap data yang tidak ingin hilang sebelum
- mendaftarkan perangkat.
-</p>
-
-<p>
- Saat pembaruan dikirim ke perangkat Anda, kami menyarankan Anda untuk segera mengunduh dan
- memasangnya. Anda perlu terus mengikuti perubahan terbaru
- dalam UI sistem, perilaku, API, dan fitur.
-</p>
-
-<p>
- Di akhir periode Developer Preview, perangkat Anda yang telah didaftarkan akan
- menerima pembaruan ke rilis resmi Android N.
-</p>
-
-<p>
- Anda bisa membatalkan pendaftaran perangkat dari program Android Beta kapan saja dari
- situs Android Beta. Sebelum membatalkan pendaftaran, pastikan Anda telah mencadangkan data pada
- perangkat.
-</p>
-
- <p class="note"><strong>Catatan</strong>:
- Bila membatalkan pendaftaran, <strong>perangkat Anda akan dikembalikan ke setelan pabrik</strong>
- ke versi terbaru
- Android 6.0 Marshmallow (tidak harus ke versi yang telah Anda
- pasang sebelum mendaftarkan perangkat). Untuk memastikan pemasangan yang bersih,
- data Anda akan dihapus dari perangkat, termasuk kontak, pesan,
- foto, dan seterusnya.
-</p>
-
-<h3 id="documentation_and_sample_code">Dokumentasi dan kode contoh</h3>
-
-<p>
- Sumber daya dokumentasi ini tersedia pada situs Developer Preview untuk
- membantu Anda mempelajari tentang Android N:
-</p>
-
-<ul>
- <li> <a href="{@docRoot}preview/setup-sdk.html">Menyiapkan Pengembangan untuk
-Android N</a> memiliki
- petunjuk langkah demi langkah untuk memulai.</li>
- <li> <a href="{@docRoot}preview/behavior-changes.html">Perubahan
- Perilaku</a> akan menunjukkan kepada Anda bidang-bidang utama untuk diuji.</li>
- <li> Dokumentasi API baru, termasuk <a href="{@docRoot}preview/api-overview.html">Ringkasan API</a>,
- <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi
- API</a> yang bisa diunduh, dan panduan pengembang detail mengenai fitur-fitur utama seperti
- dukungan multi-jendela, bundel pemberitahuan, dukungan multilokal, dan lainnya.
- <li> <a href="{@docRoot}preview/samples.html">Kode contoh</a> yang
- memperagakan cara mendukung izin dan fitur baru lainnya.
- <li> <a href="{@docRoot}preview/support.html#release-notes">Catatan rilis</a>
- untuk versi N Developer Preview saat ini, termasuk catatan perubahan dan
- laporan diff.
-</ul>
-
-<h4 id="reference">Referensi API yang Bisa Diunduh</h4>
-
-<p>
- Selama pembaruan pratinjau awal, Anda bisa mengunduh
- <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi API
- untuk platform Android N</a> sebagai arsip zip terpisah. Unduhan
- referensi juga menyertakan laporan diff yang akan membantu Anda mengenali perubahan API dari
- API 23 dan pembaruan sebelumnya.
-</p>
-
-<p>
- Bila API Android N sudah final dan API level resmi telah ditetapkan,
- kami akan menyediakan referensi API kepada Anda secara online di <a href="https://developer.android.com">https://developer.android.com</a>.
-</p>
-
-<h3 id="support_resources">
- Sumber daya dukungan
-</h3>
-
-<p>
- Saat Anda menguji dan mengembangkan N Developer Preview, gunakan saluran
- ini untuk melaporkan masalah dan memberikan masukan.
-</p>
-
-<ul>
- <li> <a href="https://code.google.com/p/android-developer-preview/">N Developer Preview Issue
- Tracker</a> adalah <strong>saluran masukan Anda.</strong> Anda bisa melaporkan bug, masalah
- kinerja, dan masukan umum melalui Issue Tracker. Anda juga bisa memeriksa
-<a href="{@docRoot}preview/bugs">masalah yang diketahui</a> dan
- mencari langkah-langkah solusinya. Kami akan terus mengabari Anda mengenai masalah tersebut bila telah disortir dan dikirimkan ke
- tim teknis Android untuk ditinjau. </li>
- <li> <a href="{@docRoot}preview/dev-community">Android N Developer Community</a> adalah
- sebuah komunitas Google+ tempat Anda bisa <strong>terhubung dengan pengembang lain</strong> yang menggunakan
- Android N. Anda bisa menyampaikan pengamatan atau ide atau menemukan jawaban atas
- pertanyaan-pertanyaan mengenai Android N. Kami akan memoderasi komunitas ini dan memberikan jawaban serta
- panduan jika diperlukan.</li>
-</ul>
-
-<h3 id="targeting">Menargetkan, API pratinjau, dan mempublikasikan</h3>
-
-<p>
- N Developer Preview menyediakan sistem pengembangan saja dan pustaka
- Android yang <strong>tidak memiliki API level standar</strong>. Jika Anda tidak ingin
- mengikuti perilaku kompatibilitas untuk menguji aplikasi (yang sangat
- disarankan), Anda bisa menargetkan versi pratinjau Android N dengan menyetel
- <code><a href=
- "{@docRoot}preview/setup-sdk.html#create-update">targetSdkVersion</a></code>
- aplikasi Anda ke <code>“N”</code>.
-</p>
-
-<p>
- Android N Developer Preview menghasilkan <strong>API pratinjau</strong>
- — API ini tidak akan resmi hingga SDK final dirilis,
- yang saat ini direncanakan untuk kuartal ketiga 2016. Berarti Anda bisa
- <strong>mengharapkan ada banyak perubahan kecil pada API</strong> selama waktu ini, terutama selama
- minggu-minggu awal program. Kami akan menyediakan rangkuman perubahan kepada Anda bersama
- setiap pembaruan Android N Developer Preview.
-</p>
-
-<p class="note">
- <strong>Catatan</strong>: Meskipun API pratinjau mungkin berubah, perilaku dasar
- sistem sudah stabil dan siap diuji.
-
-</p>
-
-<p>
- Google Play <strong>mencegah publikasi aplikasi yang menargetkan N Developer
- Preview</strong>. Bila Android N final SDK tersedia, Anda akan bisa
- menargetkan level API Android N resmi dan mempublikasikan aplikasi ke Google
- Play lewat saluran rilis alfa dan beta. Sementara itu, jika Anda ingin
- mendistribusikan aplikasi yang menargetkan Android N kepada penguji, Anda bisa melakukannya lewat email atau
- dengan mengunduh langsung dari situs Anda.
-</p>
-
-<p>
- Saat rilis penuh Android N ke AOSP dan OEM, yang direncanakan pada Kuartal 3 2016,
- Anda akan bisa mempublikasikan aplikasi yang menargetkan Android N ke saluran
- rilis resmi di Google Play.
-</p>
-
-
-<h2 id="how_to_get_started">Cara mulai</h2>
-
-<p>
- Untuk mulai menguji aplikasi Anda dengan Android N:
-</p>
-
-<ol>
- <li> Tinjau <a href="{@docRoot}preview/api-overview.html">Ringkasan API</a>
- dan <a href="{@docRoot}preview/behavior-changes.html">Perubahan Perilaku</a> untuk
- mendapatkan gambaran mengenai apa saja yang baru dan bagaimana pengaruhnya pada aplikasi Anda. Khususnya,
- pelajari tentang fitur baru <a href="{@docRoot}preview/features/notification-updates.html">pemberitahuan</a> dan
- <a href="{@docRoot}preview/features/multi-window.html">dukungan multi-jendela</a>.</li>
- <li> Siapkan lingkungan Anda dengan mengikuti petunjuk berikut untuk <a href="{@docRoot}preview/setup-sdk.html">Menyiapkan SDK Pratinjau</a>
- dan mengonfigurasi perangkat pengujian.</li>
- <li> Ikuti <a href="https://developers.google.com/android/nexus/images">petunjuk
- flashing</a> untuk mem-flash citra sistem Android N terbaru ke perangkat Anda. </li>
- <li> Tinjau <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi API</a>
- dan <a href="{@docRoot}preview/samples.html">contoh Android N</a> untuk mendapatkan wawasan
- lebih luas mengenai fitur-futur API yang baru dan cara menggunakannya dalam aplikasi Anda.
- <li> Bergabunglah dengan <a href="{@docRoot}preview/dev-community">Android N
- Developer Community</a> untuk mendapatkan berita terbaru dan terhubung dengan pengembang
- lainnya yang menggunakan platform baru ini.</li>
-</ol>
-
-<p>
- Terima kasih atas partisipasi Anda dalam program Android N Developer Preview!
-</p>
diff --git a/docs/html-intl/intl/in/preview/preview_toc.cs b/docs/html-intl/intl/in/preview/preview_toc.cs
deleted file mode 100644
index 5868e4d..0000000
--- a/docs/html-intl/intl/in/preview/preview_toc.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-<ul id="nav">
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/overview.html" es-lang="Información general del programa" in-lang="Ikhtisar Program" ja-lang="プログラム概要" ko-lang="프로그램 개요" pt-br-lang="Visão geral do programa" ru-lang="Обзор программы" vi-lang="Tổng quan về Chương trình" zh-cn-lang="计划概览" zh-tw-lang="程式總覽"> Ringkasan Program</a></div>
- </li>
-
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/support.html"> Dukungan dan Catatan Rilis</a></div>
- </li>
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/setup-sdk.html" es-lang="Configurar el SDK de la versión preliminar" in-lang="Menyiapkan Preview" ja-lang="Preview SDK のセットアップ" ko-lang="미리 보기 SDK 설정하기" pt-br-lang="Configuração do Preview SDK" ru-lang="Настройка пакета SDK Preview" vi-lang="Kiểm thử trên Thiết bị" zh-cn-lang="设置预览版 SDK" zh-tw-lang="設定預覽版 SDK">Menyiapkan Pratinjau</a></div>
- </li>
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/download.html" es-lang="Pruebe en un dispositivo" in-lang="Menguji pada Perangkat" ja-lang="デバイス上でテストする" ko-lang="기기에서 테스트" pt-br-lang="Testar em um dispositivo" ru-lang="Тестирование на устройстве" vi-lang="Kiểm thử trên Thiết bị" zh-cn-lang="在设备上测试" zh-tw-lang="在裝置上測試">Menguji pada Perangkat</a></div>
- </li>
-
-
- <li class="nav-section">
- <div class="nav-section-header"><a href="<?cs var:toroot ?>preview/behavior-changes.html" es-lang="Cambios en los comportamientos" in-lang="Perubahan Perilaku" ja-lang="動作の変更点" ko-lang="동작 변경" pt-br-lang="Mudanças de comportamento" ru-lang="Изменения в работе" vi-lang="Các thay đổi Hành vi" zh-cn-lang="行为变更" zh-tw-lang="行為變更">Perubahan Perilaku </a></div>
- <ul>
- <li><a href="<?cs var:toroot ?>preview/features/background-optimization.html" es-lang="Optimizaciones en segundo plano" in-lang="Optimisasi Latar Belakang" ja-lang="バックグラウンド処理の最適化" ko-lang="백그라운드 최적화" pt-br-lang="Otimizações em segundo plano" ru-lang="Оптимизация фоновых процессов" vi-lang="Tối ưu hóa Chạy ngầm" zh-cn-lang="后台优化" zh-tw-lang="背景最佳化">Optimalisasi Latar Belakang</a></li>
- <li><a href="<?cs var:toroot ?>preview/features/multilingual-support.html" es-lang="Idioma y configuración regional" in-lang="Bahasa dan Lokal" ja-lang="言語とロケール" ko-lang="언어 및 로케일" pt-br-lang="Idioma e localidade" ru-lang="Язык и языковой стандарт" vi-lang="Ngôn ngữ và Bản địa" zh-cn-lang="语言和区域设置" zh-tw-lang="語言和地區設定">Bahasa dan Lokal</a></li>
- </ul>
- </li>
-
- <li class="nav-section">
- <div class="nav-section-header"><a href="<?cs var:toroot ?>preview/api-overview.html" es-lang="Información general de la API" in-lang="Android N untuk Pengembang" ja-lang="API の概要" ko-lang="API 개요" pt-br-lang="Visão geral da API" ru-lang="Обзор API-интерфейсов" vi-lang="Android N cho Nhà phát triển" zh-cn-lang="API 概览" zh-tw-lang="API 總覽">Android N for Developers</a></div>
- <ul>
-
- <li><a href="<?cs var:toroot ?>preview/features/multi-window.html" es-lang="Compatibilidad con ventanas múltiples" in-lang="Dukungan Multi-Jendela" ja-lang="マルチ ウィンドウのサポート" ko-lang="다중 창 지원" pt-br-lang="Suporte a várias janelas" ru-lang="Поддержка многооконного режима" vi-lang="Hỗ trợ đa cửa sổ" zh-cn-lang="多窗口支持" zh-tw-lang="多視窗支援">Dukungan Multi-Jendela</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/notification-updates.html" es-lang="Notificaciones" in-lang="Pemberitahuan" ja-lang="通知" ko-lang="알림" pt-br-lang="Notificações" ru-lang="Уведомления" vi-lang="Thông báo" zh-cn-lang="通知" zh-tw-lang="通知">Pemberitahuan</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/data-saver.html"> Data Saver</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/tv-recording-api.html" es-lang="Grabación de TV" in-lang="Perekaman TV" ja-lang="TV の録画" ko-lang="TV 녹화" pt-br-lang="Gravação para TV" ru-lang="Запись ТВ" vi-lang="Ghi lại TV" zh-cn-lang="TV 录制" zh-tw-lang="電視錄製">Perekaman TV</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/security-config.html" es-lang="Configuración de seguridad de la red" in-lang="Network Security Configuration" ja-lang="ネットワーク セキュリティ構成" ko-lang="네트워크 보안 구성" pt-br-lang="Configurações de segurança de rede" ru-lang="Конфигурация сетевой безопасности" vi-lang="Cấu hình Bảo mật mạng" zh-cn-lang="网络安全配置" zh-tw-lang="網路安全性設定">Konfigurasi Keamanan Jaringan</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/icu4j-framework.html" es-lang="API de ICU4J del framework de Android" in-lang="ICU4J Android Framework API" ja-lang="ICU4J Android フレームワーク API" ko-lang="ICU4J Android 프레임워크 API" pt-br-lang="APIs de estrutura do Android para ICU4J" ru-lang="API-интерфейсы ICU4J в платформе Android" vi-lang="API Khuôn khổ Android ICU4J" zh-cn-lang="ICU4J Android 框架 API" zh-tw-lang="ICU4J Android 架構 API"> Dukungan ICU4J</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/j8-jack.html" es-lang="Funciones del lenguaje Java 8" in-lang="Fitur Bahasa Java 8" ja-lang="Java 8 の機能" ko-lang="Java 8 언어 기능" pt-br-lang="Recursos de linguagem do Java 8" ru-lang="Возможности языка Java 8" vi-lang="Tính năng của Ngôn ngữ Java 8" zh-cn-lang="Java 8 语言功能" zh-tw-lang="Java 8 語言功能">Fitur Bahasa Java 8</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/afw.html"> Pembaruan Android for Work</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/scoped-folder-access.html" es-lang="Acceso a directorios determinados" in-lang="Scoped Directory Access" ja-lang="特定のディレクトリへのアクセス" ko-lang="범위가 지정된 디렉터리 액세스" pt-br-lang="Acesso a diretórios com escopo" ru-lang="Доступ к выделенным каталогам" vi-lang="Truy cập Thư mục theo Phạm vi" zh-cn-lang="作用域目录访问" zh-tw-lang="限定範圍目錄存取">Scoped Directory Access</a></li>
- </ul>
- </li>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/samples.html" es-lang="Ejemplos" in-lang="Contoh" ja-lang="サンプル" ko-lang="샘플" pt-br-lang="Exemplos" ru-lang="Примеры" zh-cn-lang="示例" zh-tw-lang="範例"> Contoh</a></div>
- </li>
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/license.html" es-lang="Contrato de licencia" ja-lang="使用許諾契約" ko-lang="라이선스 계약" pt-br-lang="Contrato de licença" ru-lang="Лицензионное соглашение" zh-cn-lang="许可协议" zh-tw-lang="授權協議"> Perjanjian Lisensi</a></div>
- </li>
-
-</ul>
\ No newline at end of file
diff --git a/docs/html-intl/intl/in/preview/samples.jd b/docs/html-intl/intl/in/preview/samples.jd
deleted file mode 100644
index 481260c..0000000
--- a/docs/html-intl/intl/in/preview/samples.jd
+++ /dev/null
@@ -1,85 +0,0 @@
-page.title=Contoh
-page.tags="preview", "samples", "android"
-page.image=images/cards/card-n-samples_2x.png
-@jd:body
-
-<p>
- Contoh kode berikut disediakan untuk Android N. Untuk
- mengunduh contoh di Android Studio, pilih opsi menu <b>File > Import
- Samples</b>.
-</p>
-
-<p class="note">
- <strong>Catatan:</strong> Proyek yang bisa diunduh ini didesain
- untuk digunakan bersama Gradle dan Android Studio.
-</p>
-
-
-<h3 id="mw">Playground Multi-Jendela</h3>
-<img src="{@docRoot}preview/images/sample-multiwindow.png" style="float: left; padding-right: 0.5em" height="250" width="156" />
-<p>
- Contoh ini memperagakan cara memanfaatkan antarmuka pengguna
- multi-jendela bersama aplikasi Anda.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-MultiWindowPlayground">
- Dapatkan di GitHub</a>
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="an">Pemberitahuan Aktif</h3>
-<img src="{@docRoot}preview/images/sample-activenotifications.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
-<p>
- Ini adalah contoh yang sudah ada sebelumnya, menampilkan layanan sederhana yang mengirimkan
- pemberitahuan menggunakan NotificationCompat. Setiap percakapan yang belum dibaca dari pengguna
- dikirimkan sebagai pemberitahuan berbeda.
-</p>
-<p>
- Contoh ini telah diperbarui untuk memanfaatkan fitur pemberitahuan baru
- yang tersedia di Android N.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-ActiveNotifications">
- Dapatkan di GitHub</a>
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="ms">Layanan Perpesanan</h3>
-<img src="{@docRoot}preview/images/sample-messagingservice.png" style="float: left; padding-right: 0.5em" height="250" width="150" />
-<p>
- Ini adalah contoh yang telah ada sebelumnya yang memperagakan cara menggunakan
- NotificationManager untuk memberi tahu jumlah pemberitahuan yang saat ini ditampilkan
- oleh aplikasi.
-</p>
-<p>
- Contoh ini telah diperbarui untuk memanfaatkan fitur pemberitahuan baru
- yang tersedia di Android N.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-MessagingService">
- Dapatkan di GitHub</a>
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="fbe">Direct Boot</h3>
-<img src="{@docRoot}preview/images/sample-directboot.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
-<p>
- Contoh ini memperagakan cara menyimpan dan mengakses data dalam penyimpanan yang dienkripsi
- dengan perangkat yang selalu tersedia saat perangkat booting.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-DirectBoot">
- Dapatkan di GitHub</a>
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="sda">Scoped Directory Access</h3>
-<img src="{@docRoot}preview/images/sample-scopeddirectoryaccess.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
-<p>
- Contoh ini memperagakan cara membaca dan menulis data dari direktori
- spesifik, sekaligus meminta izin lebih sedikit.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-ScopedDirectoryAccess">
- Dapatkan di GitHub</a>
-</p>
\ No newline at end of file
diff --git a/docs/html-intl/intl/in/preview/setup-sdk.jd b/docs/html-intl/intl/in/preview/setup-sdk.jd
deleted file mode 100644
index c03f388..0000000
--- a/docs/html-intl/intl/in/preview/setup-sdk.jd
+++ /dev/null
@@ -1,187 +0,0 @@
-page.title=Menyiapkan Pratinjau
-meta.keywords="preview", "android"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-sdk_2x.png
-
-@jd:body
-
-
-<div id="qv-wrapper">
- <div id="qv">
-<ol>
- <li><a href="#get-as13">Dapatkan Android Studio 2.1</a></li>
- <li><a href="#get-sdk">Dapatkan Android N SDK</a>
- <ol>
- <li><a href="#docs-dl">Dokumentasi referensi</a>
- </ol>
- </li>
- <li><a href="#java8">Dapatkan Java 8 JDK</a></li>
- <li><a href="#create-update">Perbarui atau Buat sebuah Proyek</a></li>
- <li><a href="#next">Langkah Berikutnya</a></li>
-</ol>
- </div>
-</div>
-
-<p>Untuk mengembangkan aplikasi bagi Android N Preview, Anda perlu membuat beberapa pembaruan
-pada lingkungan pengembang, seperti dijelaskan pada halaman ini.</p>
-
-<p>Untuk sekedar menguji kompatibilitas aplikasi Anda pada
-citra sistem Android N, ikuti panduan untuk <a href="{@docRoot}preview/download.html">Menguji pada Perangkat Android N</a>.</p>
-
-<img src="{@docRoot}preview/images/n-preview-setup.png" width="700" alt="" />
-
-
-<h2 id="get-as13">Dapatkan Android Studio 2.1</h2>
-
-<p>Platform Android N menambahkan dukungan untuk <a href="{@docRoot}preview/j8-jack.html">fitur bahasa Java 8</a>,
-yang memerlukan compiler baru bernama Jack. Jack versi terbaru
-saat ini hanya didukung di Android Studio 2.1. Jadi, jika Anda ingin
-menggunakan fitur bahasa Java 8, Anda harus menggunakan Android Studio 2.1 untuk
-membangun aplikasi. Jika tidak, Anda tidak perlu menggunakan compiler Jack, namun Anda
-tetap harus memperbarui JDK 8 untuk mengompilasi pada platform Android N,
-seperti dijelaskan di bawah ini.</p>
-
-<p>Jika sudah memasang Android Studio, pastikan Anda memiliki Android
-Studio 2.1 atau yang lebih tinggi dengan mengklik <strong>Help > Check for Update</strong>
-(pada Mac, <strong>Android Studio > Check for Updates</strong>).</p>
-
-<p>Jika Anda tidak memilikinya, <a href="{@docRoot}studio/">unduh Android Studio
-2.1 di sini</a>.</p>
-
-
-<h2 id="get-sdk">Dapatkan N Preview SDK</h2>
-
-<p>Untuk mulai mengembangkan dengan Android N API, Anda perlu pasang
-Android N Preview SDK di Android Studio sebagai berikut:</p>
-
-<ol>
- <li>Buka SDK Manager dengan mengklik <strong>Tools > Android >
- SDK Manager</strong>.</li>
-
- <li>Di tab <strong>SDK Platforms</strong> pilih
-kotak centang <strong>Android N Preview</strong>.</li>
-
- <li>Klik tab <strong>SDK Tools</strong>, kemudian pilih
- kotak centang <strong>Android SDK Build Tools</strong>, <strong>Android SDK
- Platform-Tools</strong>, dan <strong>Android SDK Tools</strong>.
-
- </li>
-
- <li>Klik <strong>OK</strong>, kemudian terima
- perjanjian lisensi untuk setiap paket yang perlu dipasang.
- </li>
-</ol>
-
-<h3 id="docs-dl">Dapatkan dokumentasi referensi N Preview</h3>
-
-<p>
- Informasi detail tentang Android N API tersedia dalam dokumentasi referensi N Preview,
- yang bisa Anda unduh dari tabel berikut.
- Paket ini berisi versi offline situs web pengembang Android yang disederhanakan,
- dan termasuk referensi API yang diperbarui untuk Android N API serta
- laporan perbedaan API.
-</p>
-
-<table>
- <tr>
- <th scope="col">Dokumentasi</th>
- <th scope="col">Checksum</th>
- </tr>
- <tr>
- <td style="white-space: nowrap">
- <a href="{@docRoot}shareables/preview/n-preview-3-docs.zip">n-preview-3-docs.zip</a></td>
- <td width="100%">
- MD5: 19bcfd057a1f9dd01ffbb3d8ff7b8d81<br>
- SHA-1: 9224bd4445cd7f653c4c294d362ccb195a2101e7
- </td>
- </tr>
-<table>
-
-
-
-<h2 id="java8">Dapatkan Java 8 JDK</h2>
-
-<p>Untuk mengompilasi aplikasi Anda pada platform Android N dan menggunakan beberapa alat bersama
-Android Studio 2.1, Anda perlu pasang Java 8 Developer Kit (JDK 8). Jadi, jika
-Anda belum mempunyai versi terbaru, unduh JDK 8 sekarang.</p>
-
-<p>Kemudian, setel versi JDK di Android Studio sebagai berikut:</p>
-
-<ol>
- <li>Buka proyek Android di Android Studio, kemudian buka
- dialog Project Structure dengan memilih <strong>File >
- Project Structure</strong>. (Atau, Anda bisa menyetel default
- untuk semua proyek dengan memilih <strong>File > Other Settings >
- Default Project Structure</strong>.)
- </li>
- <li>Di panel kiri dialog, klik <strong>SDK Location</strong>.
- </li>
- <li>Dalam bidang <strong>JDK Location</strong>, masukkan lokasi
- Java 8 JDK (klik tombol di sebelah kanan
- untuk menjelajah file Anda), kemudian klik <strong>OK</strong>.
- </li>
-</ol>
-
-<img src="{@docRoot}preview/images/studio-jdk-location.jpg" width="700" alt="" />
-
-
-<h2 id="create-update">Perbarui atau Buat sebuah Proyek</h2>
-
-<p>
- Untuk menggunakan Android N API, proyek Anda harus dikonfigurasi dengan benar.
-</p>
-
-<p>Jika Anda berencana menggunakan fitur bahasa Java 8, Anda juga harus membaca
-<a href="{@docRoot}preview/j8-jack.html">Fitur Bahasa Java 8</a>
-untuk informasi tentang fitur Java 8 yang didukung dan
-cara mengonfigurasi proyek Anda dengan Jack compiler.</p>
-
-
-<h3 id="update">Perbarui proyek yang ada</h3>
-
-<p>Buka file
- <code>build.gradle</code> untuk modul Anda dan perbarui nilainya sebagai
- berikut:
-</p>
-
-<pre>
-android {
- compileSdkVersion <strong>'android-N'</strong>
- buildToolsVersion <strong>'24.0.0-rc3'</strong>
- ...
-
- defaultConfig {
- minSdkVersion <strong>'N'</strong>
- targetSdkVersion <strong>'N'</strong>
- ...
- }
- ...
-}</pre>
-
-
-<h3 id="create">Buat proyek baru</h3>
-
-
-<p>Untuk membuat proyek baru bagi pengembangan dengan Android N Preview SDK:</p>
-
-<ol>
- <li>Klik <strong>File > New Project</strong>, dan ikuti langkah-langkahnya hingga
- Anda tiba di halaman Target Android Devices.
- </li>
- <li>Pada halaman ini, pilih opsi <strong>Phone and Tablet</strong>.</li>
- <li>Pada opsi <strong>Phone and Tablet</strong>, dalam daftar opsi <strong>Minimum
- SDK</strong>, pilih
- <strong>N: Android API 23, N Preview (Pratinjau)</strong>.</li>
-</ol>
-
-
-<h2 id="next">Langkah Berikutnya</h2>
-
-<ul>
- <li>Ikuti panduan untuk <a href="{@docRoot}preview/download.html">Menguji pada Perangkat Android N</a>.</li>
- <li>Ketahui selengkapnya tentang platform Android N dengan
-<a href="{@docRoot}preview/behavior-changes.html">Perubahan Perilaku</a>
-dan <a href="{@docRoot}preview/api-overview.html">Android N API
-dan Fiturnya</a>.</li>
-</ul>
-
diff --git a/docs/html-intl/intl/in/preview/support.jd b/docs/html-intl/intl/in/preview/support.jd
deleted file mode 100644
index 885e7c7..0000000
--- a/docs/html-intl/intl/in/preview/support.jd
+++ /dev/null
@@ -1,1188 +0,0 @@
-page.title=Dukungan dan Catatan Rilis
-meta.keywords="preview", "android"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-support_2x.png
-
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>Dalam dokumen ini</h2>
-
-<ul>
- <li><a href="#dp3">Developer Preview 3</a>
- <ul>
- <li><a href="#general">Saran umum</a></li>
- <li><a href="#new">Yang baru di DP3</a></li>
- <li><a href="#ki">Masalah yang diketahui</a></li>
- </ul>
- </li>
- <li><a href="#dp2">Developer Preview 2</a></li>
- <li><a href="#dp1">Developer Preview 1</a></li>
-</ul>
-
-<!--
-<h2>See Also</h2>
-<ol>
- <li></li>
-</ol>
--->
-
-</div>
-</div>
-
-<p>
- Dua saluran dukungan utama tersedia untuk Anda saat mengembangkan dan menguji
- dengan Android N Developer Preview: Laporkan bug di <a href="https://developer.android.com/preview/bug">https://developer.android.com/preview/bug</a> untuk
- bug perangkat tertentu, sistem, dan Google App. Untuk masalah di aplikasi lain,
- hubungi pengembang secara langsung.
-</p>
-
-<p>Untuk mendiskusikan masalah atau gagasan dengan pengembang lain yang menangani Android N, bergabunglah dengan
-<a href="{@docRoot}preview/dev-community">komunitas Google+ untuk Developer Preview</a>.</p>
-
-<h2 id="dp3">Developer Preview 3</h2>
-
-<div class="wrap">
- <div class="cols">
- <div class="col-6of12">
- <p>
- <em>Tanggal: Mei 2016<br>
- Build: NPD35K<br>
- Dukungan emulator: x86 & ARM (32/64-bit)<br>
- Google Play Services: 8.4</em>
- </p>
- </div>
- </div>
-</div>
-
-<h3 id="general">Saran umum</h3>
-
-<p>
- Rilis Developer Preview ini adalah untuk <strong>pengembang aplikasi dan pengguna
- awal lainnya</strong> serta tersedia untuk penggunaan sehari-hari, pengembangan, atau
- pengujian kompatibilitas. Harap perhatikan catatan umum tentang
- rilis ini:
-</p>
-
-<ul>
- <li>Rilis ini mungkin memiliki berbagai <strong>masalah stabilitas</strong> pada
- perangkat yang didukung. Pengguna mungkin mengalami ketidakstabilan sistem, seperti kernel
- yang panik dan mogok.
- </li>
-
- <li>Beberapa aplikasi <strong>mungkin tidak berfungsi seperti yang diharapkan</strong> pada versi
- platform baru. Hal ini termasuk aplikasi Google serta aplikasi lainnya.
- </li>
-
- <li>Developer Preview 3 adalah <strong>Compatibility Test Suite (CTS)
- yang disetujui</strong> pada perangkat ini: Nexus 5X, Nexus 6, Nexus 6P, dan Pixel
- C. Aplikasi yang bergantung pada build yang disetujui CTS seharusnya
- berfungsi secara normal pada perangkat ini (Android Pay misalnya).
- </li>
-
- <li>Developer Preview 3 <strong>tersedia pada semua perangkat
- yang didukung:</strong> Nexus 5X, Nexus 6, Nexus 6P, Nexus 9, Nexus Player, Pixel
- C, General Mobile 4G (Android One), serta Sony Xperia Z3 (model D6603 dan
- D6653).
-
- </li>
-</ul>
-
-
-<h3 id="new">Yang baru di DP3</h3>
-
-<h4 id="">VR Mode untuk Android</h4>
-
-<p>
- Android N menambahkan dukungan platform dan optimalisasi untuk VR Mode baru yang memungkinkan
- pengembang membuat pengalaman VR berkualitas tinggi di seluler bagi para pengguna. Ada
- banyak penyempurnaan kinerja, termasuk akses ke inti CPU yang eksklusif
- untuk aplikasi VR. Dalam aplikasi, Anda bisa memanfaatkan pemantauan kepala
- yang cerdas, dan pemberitahuan stereo yang bekerja untuk VR. Yang terpenting,
- Android N memberikan grafis latensi sangat rendah.
-</p>
-
-<p>
- Untuk informasi selengkapnya, lihat <a href="https://developers.google.com/vr/android/">Google VR SDK untuk Android</a>.
-</p>
-
-<h4 id="">Mode kinerja kontinu</h4>
-
-<p>
- Android N menyertakan dukungan opsional untuk <a href="{@docRoot}preview/api-overview.html#sustained_performance_api">mode
- kinerja kontinu</a>, yang memungkinkan OEM memberikan petunjuk mengenai kapabilitas kinerja
- perangkat untuk aplikasi yang berjalan dalam waktu lama. Pengembang aplikasi nanti bisa menggunakan
- petunjuk ini untuk menyesuaikan aplikasi agar kinerja
- perangkat bisa diprediksi pada level yang konsisten dalam jangka waktu lama. Pengembang aplikasi bisa mencoba API
- baru ini dalam Developer Preview pada perangkat Nexus 6P saja.
-</p>
-
-<h4>Multiprocess WebView</h4>
-
-<p>
- Mulai versi 51 di Android N, WebView akan menjalankan materi web dalam
- proses sandbox terpisah bila opsi pengembang "Multiprocess Webview"
- diaktifkan. Tim WebView menunggu masukan mengenai kompatibilitas dan
- kinerja waktu proses di N sebelum mengaktifkan Multiprocess WebView di versi Android
- yang akan datang. Dalam versi ini, diharapkan adanya regresi waktu startup, penggunaan
- memori total dan kinerja render perangkat lunak.
-</p>
-
-<p>
- Jika Anda menemukan masalah yang tidak diharapkan dalam mode multiproses, kami ingin
- mengetahuinya. Hubungi tim WebView dengan <a href="https://bugs.chromium.org/p/chromium/issues/entry?template=Webview%20Bugs">
- melaporkan bug</a>.
-</p>
-
-<h4 id="">Keyboard Shortcuts Helper</h4>
-
-<p>
- Android N memungkinkan pengguna menekan <code>Meta+/</code> untuk memunculkan layar <strong>Keyboard
- Shortcuts</strong> yang menampilkan semua pintasan yang tersedia baik dari
- sistem maupun dari aplikasi yang sedang mendapatkan fokus. Pengembang bisa menambahkan pintasan sendiri atau
- memunculkan layar Shortcuts dari aplikasi mereka. Lihat <a href="{@docRoot}preview/api-overview.html#keyboard_shortcuts_helper">Keyboard
- Shortcuts Helper</a> untuk detailnya.
-</p>
-
-<h4 id="">FrameMetrics API</h4>
-
-<p>
- DP3 memperkenalkan <a href="{@docRoot}preview/api-overview.html#framemetrics_api">FrameMetrics API</a>
- baru yang memungkinkan aplikasi memantau kinerja render UI dengan mengekspos
- streaming pubsub API untuk mentransfer informasi frame-timing jendela aplikasi
- saat ini. <code>FrameMetricsListener</code> bisa digunakan untuk mengukur
- kinerja UI level interaksi di produksi dengan tingkat kejelasan yang lebih tinggi dan
- tidak memerlukan koneksi USB.
-</p>
-
-<h4 id="api-changes">Fitur dan perubahan API</h4>
-
-<dl>
- <dt>
- Pintasan Peluncur dan Launcher Shortcuts API
- </dt>
-
- <dd>
- Kami memutuskan untuk menunda fitur ini pada rilis Android yang akan datang. Kami berencana
- membuang Launcher Shortcuts API (ShortcutManager dan lainnya) dari
- Android N API publik mulai dalam Developer Preview berikutnya.
- </dd>
-
- <dt>
- WebView Javascript berjalan sebelum halaman dimuat
- </dt>
-
- <dd>
- Mulai dengan aplikasi yang menargetkan Android N, konteks Javascript disetel ulang
- saat halaman baru telah dimuat. Saat ini, konteks tersebut dibawa untuk
- halaman pertama yang dimuat di instance {@link android.webkit.WebView} yang baru.
- Pengembang yang ingin menginjeksikan Javascript ke dalam {@link
-android.webkit.WebView} harus mengeksekusi skrip setelah halaman
- mulai dimuat.
- </dd>
-
- <dt>
- WebView Geolocation pada sumber yang tidak aman
- </dt>
-
- <dd>
- Mulai dengan aplikasi yang menargetkan Android N, API geolokasi hanya akan
- diizinkan pada sumber yang aman (melalui HTTPS). Kebijakan ini didesain untuk melindungi
- informasi privat pengguna saat mereka menggunakan koneksi yang tidak aman.
- </dd>
-
- <dt>
- Data Saver
- </dt>
-
- <dd>
- Mulai di Developer Preview 3, aplikasi bisa menggunakan intent untuk menampilkan
- dialog sistem yang memungkinkan pengguna menambahkan aplikasi secara langsung ke daftar putih pengecualian
- Data Saver. Lihat <a href="{@docRoot}preview/api-overview.html#data_saver">dokumentasi
- Data Saver</a> untuk detailnya.
- </dd>
-
- <dt>
- <a href="{@docRoot}preview/api-overview.html#number-blocking">Pemblokiran nomor</a>
- </dt>
-
- <dd>
- Jika pengguna yang tidak diizinkan berusaha memblokir atau membuka blokir suatu nomor, operasi
- tersebut kini akan gagal dengan {@link java.lang.SecurityException}. (Sebelumnya,
- operasi tersebut akan melontarkan {@link java.lang.UnsupportedOperationException}.)
- </dd>
-
- <dt>
- <a href="{@docRoot}preview/api-overview.html#tile_api">Quick Settings Tile
- API</a>
- </dt>
-
- <dd>
- Sistem kini menggunakan metadata aktivitas untuk memutuskan mode petak.
- (Sebelumnya, mode petak ditentukan oleh nilai hasil
- <code>TileService.onTileAdded()</code>.) Untuk informasi selengkapnya, lihat
- <code>TileService.META_DATA_ACTIVE_TILE</code> dalam <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referensi API</a> yang bisa diunduh.
- </dd>
-</dl>
-
-<h4 id="dp3-fixes">Perbaikan untuk masalah yang dilaporkan oleh pengembang</h4>
-
-<p>
- Banyak masalah yang dilaporkan oleh pengembang telah diperbaiki, termasuk:
-</p>
-
-<ul>
- <li>Pemutaran Bluetooth Audio yang terputus setelah 1 lagu (bug <a href="https://code.google.com/p/android/issues/detail?id=206889">206889</a>)
- </li>
-
- <li>Pixel C Terus Mengalami Mogok (bug <a href="https://code.google.com/p/android/issues/detail?id=206962">206962</a>)
- </li>
-
- <li>Masalah pemberitahuan Jam dan Toast (bug <a href="https://code.google.com/p/android/issues/detail?id=203094">203094</a>)
- </li>
-
- <li>Pixel C melakukan boot ulang saat dihubungkan ke MacBook Pro lewat Kabel USB C (bug
- <a href="https://code.google.com/p/android/issues/detail?id=205432">205432</a>)
- </li>
-
- <li>Kalender selisih satu hari (bug <a href="https://code.google.com/p/android/issues/detail?id=203002">203002</a>)
- </li>
-
- <li>TelephonyManager.getAllCellInfo menghasilkan data tidak valid (bug <a href="https://code.google.com/p/android/issues/detail?id=203022">203022</a>)
- </li>
-
- <li>Nexus 6p, Bluetooth terputus terus-menerus (bug <a href="https://code.google.com/p/android/issues/detail?id=208062">208062</a>)
- </li>
-</ul>
-
-<p>Untuk daftar lengkap masalah yang telah diperbaiki, lihat <a href="https://goo.gl/6uCKtf">Issue
-Tracker</a>.</p>
-
-<h3 id="ki">Masalah yang Diketahui</h3>
-
-<h4>Aksesibilitas</h4>
-
-<ul>
- <li>Tidak bisa memantau output TTS saat pitch disetel mendekati level maksimum.
- </li>
-
- <li>Fitur dan setelan aksesibilitas bisa terganggu bila pengguna menambahkan
- sebuah profil kerja, termasuk isyarat perbesaran dan setelan. Kondisi
- aksesibilitas dipulihkan bila pengguna menyentuh setelan terkait.
- </li>
-</ul>
-
-<h4>Kamera</h4>
-
-<ul>
- <li>Aplikasi Kamera telah menunjukkan ketidakstabilan; aplikasi ini bisa mogok dalam berbagai
- keadaan, seperti saat diluncurkan dalam mode multi-jendela.
- </li>
-
- <li>Menekan rana terus-menerus dalam mode panorama dapat menyebabkan aplikasi
- Kamera mogok.
- </li>
-</ul>
-
-<h4>Audio</h4>
-<ul>
- <li>Masalah pemutar audio platform mencegah beberapa aplikasi berfungsi
- secara normal. Misalnya, Skype dan aplikasi lain terpengaruh oleh masalah ini.
- </li>
-</ul>
-
-<h4>Konektivitas</h4>
-
-
-<ul>
- <li>Bila perangkat peran periferal Bluetooth Low Energy (BLE) mengiklankan suatu
- layanan dan perangkat peran sentral BLE menghubungkan, perangkat peran periferal
- akan terputus dengan sangat cepat.
- </li>
-
- <li>Koneksi Wi-Fi dapat melemah bila layar mati.
- </li>
-
- <li>Koneksi RFCOMM tidak stabil serta dapat mengakibatkan kerusakan data dan
- koneksi yang menggantung.
- </li>
-
- <li>Kondisi jaringan aktif ({@link android.net.NetworkInfo#getState
- NetworkInfo.getState()} dan {@link android.net.NetworkInfo#getDetailedState
- NetworkInfo.getDetailedState()}) mungkin mengembalikan nilai yang tidak benar selama beberapa
- skenario latar belakang terbatas.
- </li>
-</ul>
-
-
-<h4>
- Peluncur
-</h4>
-
-<ul>
- <li>Baki All Apps peluncur default mungkin menjadi tidak responsif setelah
- layar dimatikan/dihidupkan berulang-ulang. Kembali ke layar beranda dan meluncurkan kembali
- baki All Apps mungkin akan mengatasi masalah ini.
- </li>
-</ul>
-
-<h4>
- Keyboard
-</h4>
-
-<ul>
- <li>Saat memperbarui perangkat yang menjalankan Android 6.0 atau yang sebelum versi N Developer
- Preview, Keyboard Google tidak menyimpan data preferensi seperti emoji
- terbaru dan setelan suara.
- </li>
-
- <li>Google Indic Managed Keyboard mungkin menjadi tidak stabil.
- </li>
-
- <li>Saat memasukkan teks dalam bidang sandi, pengguna bisa memilih bahasa Rusia sebagai
- bahasa masukan, namun keyboard tetap dalam bahasa Inggris. Hal ini mencegah
- pengguna memasukkan sandi berbahasa Rusia.
- </li>
-</ul>
-
-<h4>
- Lokal dan bahasa
-</h4>
-
-<ul>
- <li>Saat menggunakan lokal kanan-ke-kiri (RTL), sistem mungkin secara tidak diharapkan
- beralih ke presentasi kiri-ke-kanan (LTR) setelah menghidupkan ulang perangkat.
- </li>
-</ul>
-
-<h4>Media</h4>
-
-<ul>
- <li>Pemutaran media mungkin tidak bisa diandalkan pada Nexus 9 dan Nexus Player, termasuk
- masalah pemutaran video HD.
- </li>
-</ul>
-
-<h4>
- Mode multi-jendela
-</h4>
-
-<ul>
- <li>Perangkat mungkin macet saat mengubah orientasi dalam mode multi-jendela.
- </li>
-
- <li>Beberapa aplikasi saat ini memiliki masalah dengan mode multi-jendela:
- <ul>
- <li>UI sistem bisa mogok saat mengubah Settings > Display >
- Screen brightness ke multi-jendela.
- </li>
-
- <li>Aplikasi Kamera mungkin mogok bila diluncurkan dalam mode multi-jendela.
- </li>
-
- <li>YouTube mungkin mogok bila diluncurkan dalam mode multi-jendela. Untuk memperbaiki
- masalah ini, Anda bisa mengosongkan data aplikasi YouTube di Storage > Apps >
- YouTube.
- </li>
- </ul>
- </li>
-</ul>
-
-<h4>
- Google Play Services
-</h4>
-
-<ul>
- <li>Aplikasi yang menggunakan Google Cast melalui Google Play Services mungkin menjadi tidak stabil bila
- pengguna memilih lokal sistem yang menggunakan huruf serta angka di luar
- rentang ASCII.
- </li>
-</ul>
-
-<h4>
- Kebijakan Perangkat Android for Work dan Google Apps
-</h4>
-
-<ul>
- <li>Aplikasi Device Policy mungkin mogok bila pengguna membuka kunci perangkat dengan
- layar "status kebijakan perangkat" disematkan.
- </li>
-
- <li>Setelah menyiapkan profil kerja dengan enkripsi berbasis file diaktifkan
- kemudian menonaktifkan Work, pengguna harus membuka kunci layar profil utama untuk sekali
- lagi mengakses aplikasi Work.
- </li>
-
- <li>Perangkat dihidupkan ulang saat membuang kunci pola keamanan dan membuka aplikasi
- kerja/aplikasi pribadi di multi-jendela.
- </li>
-
- <li>Menyetel DISALLOW_VPN_CONFIG menyebabkan dialog persetujuan muncul di
- always-on-vpn yang disetel oleh Device Policy Client.
- </li>
-
- <li>Lalu lintas tidak dikunci hingga VPN terhubung dalam mode always-on-vpn.
- </li>
-</ul>
-
-<h4>
- Penyimpanan eksternal
-</h4>
-
-<ul>
- <li>Aplikasi mungkin menjadi tidak stabil bila pengguna memindahkannya dari penyimpanan internal
- ke penyimpanan eksternal lepas-pasang (ini termasuk kartu SD atau perangkat yang dihubungkan
- melalui USB).
- </li>
-</ul>
-
-<h4>
- Perbesaran layar dan multi-APK dalam Google Play
-</h4>
-
-<ul>
- <li>Pada perangkat yang menjalankan Android N, Google Play Services 9.0.83 salah melaporkan
- kepadatan layar saat ini dibandingkan dengan kepadatan layar stabil. Saat perbesaran
- layar diaktifkan pada perangkat, hal ini bisa menyebabkan Google Play memilih
- versi aplikasi multi-APK yang didesain untuk layar yang lebih kecil. Masalah ini
- telah diperbaiki dalam Google Play Services versi berikutnya dan akan disertakan dalam
- rilis Developer Preview mendatang.
- </li>
-
- <li>Pada perangkat yang menjalankan Android N, Google Play Services 9.0.83 saat ini melaporkan
- dukungan Vulkan, namun bukan versi Vulkan. Hal ini bisa mengakibatkan Google Play memilih
- versi aplikasi multi-APK yang didesain untuk mendukung Vulkan yang lebih rendah pada
- perangkat dengan dukungan versi yang lebih tinggi. Saat ini, Google Play Store tidak
- menerima unggahan aplikasi yang menggunakan penargetan versi Vulkan. Dukungan ini
- akan ditambahkan pada Google Play Store di masa mendatang dan diperbaiki dalam
- Google Play Services versi berikutnya (akan disertakan dalam rilis Developer Preview
- mendatang). Perangkat N yang menggunakan Google Play Services 9.0.83 akan
- tetap menerima versi Aplikasi yang menargetkan dukungan Vulkan dasar.
- </li>
-</ul>
-
-<h4 id="">Pemberitahuan</h4>
-
-<ul>
- <li>MessagingStyle tidak menampilkan pemberitahuan dengan pengirim "null" (sendiri).
- </li>
-</ul>
-
-<h4 id="">Alat Pengembang</h4>
-
-<ul>
- <li>
- <code>adb</code> mungkin kadang-kadang terputus saat menggunakan debug JDWP.
- </li>
-</ul>
-
-<!-- TBA, if any
-<h4>Device-specific issues</h4>
-
-<dl>
- <dt>
- <strong>Device Name</strong>
- </dt>
-
- <dd>
- Issue 1
- </dd>
-
- <dd>
- Issue 2
- </dd>
-</dl>
-
--->
-
-
-
-
-
-
-
-<!-- DP2 Release Notes Archive -->
-
-<h2 id="dp2">Developer Preview 2</h2>
-
-<div class="wrap">
- <div class="cols">
- <div class="col-6of12">
- <p>
- <em>Tanggal: April 2016<br>
- Build: NPC91K, NPC91O<br>
- Dukungan emulator: x86 & ARM (32/64-bit)<br>
- Google Play Services: 8.4</em>
- </p>
- </div>
- </div>
-</div>
-
-<h3 id="dp2-new">Yang baru di DP2</h3>
-
-<ul>
- <li>Dukungan platform untuk Vulkan, API rendering 3D baru yang menyediakan
- kontrol GPU (Graphics Processor Unit) eksplisit dan overhead yang rendah serta menawarkan
- peningkatan kinerja untuk aplikasi draw-call yang berat. Untuk detailnya, lihat
- <a href="{@docRoot}ndk/guides/graphics/index.html">dokumentasi</a>.
- </li>
-
- <li>Emoji orang yang baru dengan dukungan untuk warna kulit, dan glyph Unicode 9 baru.
- Warna kulit dan emoji baru tidak akan muncul hingga keyboard membangun dukungan untuknya
- di palet. Aplikasi tidak perlu melakukan tindakan apa pun untuk memanfaatkan
- emoji baru ini, kecuali jika aplikasi menggunakan font nonsistem. Pengembang
- IME perlu menyertakan dukungan untuk emoji baru.
- </li>
-
- <li>
- <a href="{@docRoot}preview/api-overview.html#launcher_shortcuts">Launcher
- Shortcuts API</a>: Aplikasi bisa menggunakan <code>ShortcutManager</code> untuk mengirim
- pintasan ke titik awal dalam aplikasi itu sendiri ke peluncur.
- </li>
-
- <li>
- <a href="{@docRoot}preview/features/multi-window.html">Multi-Jendela</a>:
- Anda kini bisa menetapkan tinggi minimum dan lebar minimum secara terpisah untuk suatu
- aktivitas. Selain itu, beberapa nama API sedikit berubah.
- </li>
-</ul>
-
-<h4 id="dp2-fixes">Perbaikan untuk masalah yang dilaporkan oleh pengembang</h4>
-
-<p>
- Banyak masalah yang dilaporkan oleh pengembang telah diperbaiki, termasuk:
-</p>
-
-<ul>
- <li>Tidak bisa menghubungkan ke SSID tersembunyi atau Wi-Fi yang tidak disiarkan. (bug <a href="https://code.google.com/p/android/issues/detail?id=203116">203116</a>)
- </li>
-
- <li>Keadaan mikrofon nonaktif terjadi selama aktivitas. (bug <a href="https://code.google.com/p/android/issues/detail?id=205922">205922</a>)
- </li>
-
- <li>Mengubah fokus multi-jendela akan menghentikan YouTube untuk sementara. (bug <a href="https://code.google.com/p/android/issues/detail?id=203424">203424</a>)
- </li>
-
- <li>Balasan Langsung mungkin menutup aktivitas yang telah dibuka. (bug <a href="https://code.google.com/p/android/issues/detail?id=204411">204411</a>)
- </li>
-
- <li>Berbagai perbaikan stabilitas.
- </li>
-</ul>
-
-<h3 id="dp2-general">Saran umum</h3>
-
-<p>
- Rilis Developer Preview ini adalah untuk <strong>pengembang aplikasi saja</strong>
- dan didesain untuk digunakan dalam pengujian kompatibilitas serta pengembangan awal saja.
- Harap perhatikan catatan umum tentang rilis ini:
-</p>
-
-<ul>
-
- <li>Komponen alat pengembangan dan pustaka dukungan telah diperbarui
- untuk rilis DP2. Pastikan memperbarui lingkungan pengembangan pratinjau Anda
- sebelum mengembangkan untuk DP2. Untuk petunjuk mengenai persiapan lingkungan
- pengembangan Anda, lihat
- <a href="{@docRoot}preview/setup-sdk.html">Menyiapkan Pratinjau</a>.
- </li>
-
- <li>Rilis ini memiliki berbagai masalah stabilitas dan kinerja pada semua perangkat
- yang membuatnya <strong>tidak cocok untuk penggunaan sehari-hari pada ponsel atau tablet</strong>,
- terutama untuk selain pengembang.
- </li>
-
- <li>Daya tahan dan kinerja baterai belum dioptimalkan pada rilis
- ini:
-
- <ul>
- <li>Kinerja <strong>sistem dan aplikasi diketahui lambat/
- melempem pada waktu-waktu tertentu</strong>, dan perangkat kadang-kadang tidak responsif. Masalah-masalah
- ini bisa menjadi lebih akut pada penggunaan yang lama.
- </li>
-
- <li>Daya tahan baterai mungkin melemah dalam rilis ini untuk kasus penggunaan layar hidup dan
- layar mati.
- </li>
- </ul>
- </li>
-
- <li>Beberapa <strong>aplikasi mungkin tidak berfungsi dengan normal</strong> pada Developer Preview
- 2. Termasuk aplikasi Google serta aplikasi lainnya.
- </li>
-
- <li>Build awal ini bukan <strong>Compatibility Test Suite (CTS)
- yang disetujui</strong>. Aplikasi yang bergantung pada build yang disetujui CTS tidak akan berfungsi
- (Android Pay misalnya).
- </li>
-
- <li>Rilis pratinjau ini mendukung perangkat berikut: Nexus 5X, Nexus 6,
- Nexus 6P, Nexus 9, dan Pixel C, serta General Mobile 4G
- (Android One). Dukungan untuk Nexus Player segera hadir.
- </li>
-
-
- <li><a href="https://github.com/googlesamples/android-testdpc/releases">TestDPC</a> telah
- diperbarui untuk menangani perubahan API antara DP1 dan DP2.
- </li>
-</ul>
-
-<h3 id="dp2-ki">Masalah yang Diketahui</h3>
-
-<h4>Kinerja dan baterai</h4>
-
-<ul>
- <li>Kinerja sistem dan aplikasi diketahui <strong>lambat/
- melempem pada waktu-waktu tertentu</strong>, dan perangkat kadang-kadang tidak responsif. Masalah-masalah
- ini bisa menjadi lebih akut pada penggunaan yang lama.
- </li>
-</ul>
-
-<h4>Akun Google</h4>
-
-<ul>
- <li>Dalam beberapa situasi, bisa jadi ada masalah dengan
- <code>AccountManagerService</code> yang mencegah masuk ke akun Google
- </li>
-</ul>
-
-<h4>Pemutakhiran sistem</h4>
-
-<ul>
- <li>Perangkat mungkin langsung dihidupkan ulang setelah memperbarui ke DP2.
- </li>
-</ul>
-
-<h4>Aksesibilitas</h4>
-
-<ul>
- <li>Ada masalah dalam mendengarkan keluaran teks-ke-suara (TTS) bila pitch disetel
- mendekati level maksimum.
- </li>
-</ul>
-
-<h4>Bluetooth</h4>
-
-<ul>
- <li>Karakteristik Bluetooth Low Energy (LE) GATT menggunakan tipe tulisan
- yang salah dan tidak akan dikirim ke perangkat jauh. Karena itu, misalnya, beberapa perangkat
- kebugaran tidak akan berfungsi.
- </li>
-</ul>
-
-<h4>Wizard persiapan</h4>
-
-<ul>
- <li>Opsi untuk memulihkan data pada perangkat baru (atau perangkat yang baru disetel ulang) dari
- "Your Google Account" tidak dapat digunakan dari wizard persiapan. Anda harus memulihkan
- data dari perangkat yang ada dengan memilih "another Android device" dalam
- wizard persiapan, atau siapkan sebagai perangkat baru.
- </li>
-</ul>
-
-<h4>Buka kunci OEM</h4>
-
-<ul>
- <li>Pada beberapa perangkat, <strong>Enable OEM unlock</strong> dalam "Developer Options", berwarna abu-abu
- saat menjalankan DP2.<br>
- <strong>Solusi:</strong> Ikuti
- Android Beta Program (jika Anda belum mengikuti) dengan mengunjungi
- <a href="https://www.google.com/android/beta" class="external-link">www.google.com/android/beta</a>. Kemudian, keluar dan terima
- OTA turunkan versi. Keluar dari program akan menyebabkan perangkat turun versi ke Android 6.0. Anda
- seharusnya sekarang bisa memilih <strong>Enable OEM unlock</strong> dalam
- "Developer Options". Data pribadi akan dihapus bila Anda turunkan versi
- perangkat; akan tetapi, membuka kunci bootloader akan menghapus data ini.
- </li>
-</ul>
-
-<h4>Android for Work</h4>
-
-<ul>
- <li>Work Security Challenge
- <ul>
- <li>Setelah migrasi ke N, atau setelah pengguna membuat profil kerja, profil
- kerja tidak bisa membuat kunci-kunci dalam keystore hingga pengguna mengubah pola,
- PIN, atau sandi mereka, atau menyiapkan Work Challenge.
- </li>
-
- <li>Dalam mode Direct Boot, menerapkan batasan kode sandi pada perangkat
- menyebabkan profil kerja tidak terkunci, meskipun perangkat terkunci.
- Hal ini membuat profil kerja bisa diakses meskipun seharusnya dilindungi
- oleh layar kunci perangkat.
- </li>
- </ul>
- </li>
-
- <li>Always-On VPN
- <ul>
- <li>Jika mode Always-On VPN diaktifkan, namun VPN tidak tersedia, aplikasi
- akan menghubungkan melalui jaringan biasa. Aplikasi seharusnya offline jika tidak
- tersedia koneksi VPN.
- </li>
-
- <li>Bila mode Always-On aktif, koneksi VPN tidak akan dibuat setelah
- perangkat dihidupkan ulang ke dalam mode Direct Boot, bahkan setelah pengguna membuka kunci
- layar kunci aman.
- </li>
- </ul>
- </li>
-
- <li>Paket Ditangguhkan
- <ul>
- <li>Admin perangkat bisa menangguhkan paket sistem penting, yang dapat menyebabkan
- perilaku yang tidak diharapkan, seperti melakukan panggilan meskipun dialog "Telephone
- disabled" sedang ditampilkan.
- </li>
- </ul>
- </li>
-
- <li>Lainnya
- <ul>
- <li>Aplikasi Settings akan mogok saat dibuka jika {@link
- android.os.UserManager#DISALLOW_MOUNT_PHYSICAL_MEDIA} disetel ke true bila
- pengguna memasukkan media fisik seperti kartu SD.
- </li>
-
- <li>Proses masuk pertama ke Profil Kerja membutuhkan waktu
- beberapa menit.
- </li>
- </ul>
- </li>
-</ul>
-
-<h4 id="vulkan">Vulkan</h4>
-
-<ul>
- <li>Nexus 5X/6P</li>
- <ul>
- <li>Selisih antara angka-angka yang mengikat dan selain nol
- sebagai angka pengikat pertama menyebabkan {@code vkCreateGraphicsPipeline()} gagal.</li>
- <li>Vulkan menunjukkan perilaku sampling yang salah pada koordinat tekstur yang diproyeksikan.</li>
- <li>dalam contoh multithreadCmdBuffer, {@code vkCmdClearColorImage()} mengalami mogok bila
- dijalankan dengan driver N-DP2.</li>
- <li>Nilai kembalian dari {@code vkGetPhysicalDeviceFormatProperties()} tidak menyetel nilai
- untuk {@code VkFormatProperties::linearTilingFeatures}, yang mengambil nilai 0 sebagai
- hasil.</li>
- <li>Lampiran buffer bingkai titik ambang Vulkan tidak ditangani dengan benar.</li>
- </ul>
- <li>Nexus Player</li>
- <ul>
- <li>SPIR-V shader mungkin memicu pernyataan driver.</li>
- <li>Beberapa konfigurasi pipeline mungkin menyebabkan {@code vkCreateGraphicsPipeline()}
- mogok.</li>
- </ul>
-</ul>
-
-<h4>Masalah perangkat tertentu</h4>
-
-<dl>
- <dt>
- <strong>Android One</strong>
- </dt>
-
- <dd>
- Koneksi data gagal bila perangkat dipindah dari slot 1 SIM ke slot 2 SIM.
- </dd>
-
- <dt>
- <strong>Pixel C</strong>
- </dt>
-
- <dd>
- Tidak bisa mengubah opsi "Always On" untuk Voice Search.
- </dd>
-
- <dt>
- <strong>Nexus 6</strong>
- </dt>
-
- <dd>
- Gambar kamera dalam orientasi potret rusak, kecuali untuk foto
- HDR+.
- </dd>
-
- <dt>
- <strong>Nexus Player</strong>
- </dt>
-
- <dd>
- Pemutaran materi HD Netflix mungkin gagal pada Nexus Player.
- </dd>
-
- <dd>
- Aplikasi yang bergantung pada perubahan resolusi video dinamis mungkin gagal pada
- Nexus Player.
- </dd>
-
- <dd>
- Aplikasi yang menggunakan codec video VP9 mungkin gagal pada Nexus Player.
- </dd>
-</dl>
-
-<!-- DP 1 release notes archive -->
-
-<h2 id="dp1">Developer Preview 1</h2>
-
-<div class="wrap">
- <div class="cols">
- <div class="col-6of12">
- <p>
- <em>Tanggal: Maret 2016<br>
- Build: NPC56P, NPC56R, diperbarui: NPC56W, NPC56X<br>
- Dukungan emulator: x86 & ARM (32/64-bit)<br>
- Google Play Services: 8.4</em>
- </p>
- </div>
- </div>
-</div>
-
-<h3 id="dp1-general">Saran umum</h3>
-
-<p>
- Rilis Developer Preview ini adalah untuk pengembang aplikasi saja dan didesain untuk
- digunakan dalam pengujian kompatibilitas serta pengembangan awal saja. Harap perhatikan
- catatan umum tentang rilis ini:
-</p>
-<ul>
- <li>Rilis ini memiliki berbagai masalah stabilitas dan kinerja pada semua perangkat
- yang membuatnya <em>tidak cocok untuk penggunaan sehari-hari pada ponsel atau tablet</em>,
- terutama untuk selain pengembang.
- </li>
-
- <li>Kinerja sistem dan aplikasi diketahui <strong>lambat/
- melempem pada waktu-waktu tertentu</strong>, dan perangkat kadang-kadang tidak responsif. Masalah-masalah
- ini bisa menjadi lebih akut pada penggunaan yang lama.
- </li>
-
- <li>Daya tahan baterai mungkin melemah dalam rilis ini untuk kasus penggunaan layar hidup dan
- layar mati.
- </li>
-
- <li>Beberapa aplikasi mungkin tidak berfungsi dengan normal pada Developer Preview 1.
- Termasuk aplikasi Google serta aplikasi lainnya.
- </li>
-
- <li>Build awal ini bukan Compatibility Test Suite (CTS) yang disetujui. Aplikasi
- yang bergantung pada build yang disetujui CTS tidak akan berfungsi (Android Pay misalnya).
- </li>
-
- <li>Rilis pratinjau ini mendukung perangkat berikut: Nexus 5X, Nexus 6,
- Nexus 6P, Nexus 9, Nexus Player, dan Pixel C, serta General Mobile 4G
- (Android One).
- </li>
-</ul>
-
-<h3 id="dp1-platform">Masalah Platform</h3>
-
-<h4>Kinerja dan baterai</h4>
-
-<ul>
- <li>Kinerja sistem dan aplikasi diketahui <strong>lambat/
- melempem pada waktu-waktu tertentu</strong>, dan perangkat kadang-kadang tidak responsif. Masalah-masalah
- ini bisa menjadi lebih akut pada penggunaan yang lama.
- </li>
-
- <li>Daya tahan baterai mungkin melemah dalam rilis ini untuk kasus penggunaan layar hidup dan
- layar mati.
- </li>
-</ul>
-<h4 id="dialer">Telepon</h4>
-
-<ul>
- <li>Aplikasi telepon tidak mendukung Direct Boot. Hal ini nanti akan ditangani dalam
- N Developer Preview.
- </li>
-
- <li>Pemutaran pesan suara tidak berfungsi.
- </li>
-</ul>
-
-<h4>Mikrofon</h4>
-
-<ul>
- <li>Sistem mungkin keliru mempertahankan mikrofon dalam keadaan nonaktif di semua aplikasi dan saat menghidupkan ulang. Jika Anda menonaktifkan mikrofon di aplikasi dan kondisi ini terus bertahan, buka aplikasi apa saja yang memiliki kontrol untuk menonaktifkan mikrofon dan aktifkan mikrofon.</li>
-</ul>
-
-<h4 id="ui">UI sistem</h4>
-
-<ul>
- <li>Beberapa string baru atau yang dimodifikasi dalam UI sistem tidak diterjemahkan ke semua
- bahasa.
- </li>
-
- <li>UI ringkasan masih dalam pengembangan, dan masih mungkin berubah. Misalnya,
- kami bermaksud membuang timer yang muncul bila pengguna beralih
- aplikasi.
- </li>
-
- <li>Kontrol setelan dan peralihannya mungkin menjadi lambat atau tampak tidak responsif.
- </li>
-
- <li>Desain visual pemberitahuan masih bisa berubah.
- </li>
-
- <li>Dalam aplikasi Gmail, pengarsipan email secara langsung yang disertakan dalam bundel
- pemberitahuan tidak berfungsi dengan benar.
- </li>
-</ul>
-
-<h4>Android for Work</h4>
-
-<ul>
- <li>Work Security Challenge
- <ul>
- <li>Setelah migrasi ke N, atau setelah pengguna membuat profil kerja, profil
- kerja tidak bisa membuat kunci-kunci dalam keystore hingga pengguna mengubah pola,
- PIN, atau sandi mereka, atau menyiapkan Work Challenge.
- </li>
-
- <li>Dalam mode Direct Boot, menerapkan batasan kode sandi pada perangkat
- menyebabkan profil kerja tidak terkunci, meskipun perangkat terkunci.
- Hal ini membuat profil kerja bisa diakses meskipun seharusnya dilindungi
- oleh layar kunci perangkat.
- </li>
-
- <li>Bila pengguna memasukkan sandi dan pin yang salah, sistem tidak akan
- menampilkan pesan informasi; sistem hanya mengosongkan bidang
- masukan. Masalah ini tidak memengaruhi masukan pola atau sidik jari.
- </li>
-
- <li>Pada tablet, latar belakang yang ditampilkan bersama pertanyaan kerja
- berukuran kecil dan tidak proporsional.
- </li>
-
- <li>Versi <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.enterprise.dmagent">
- Google Apps Device Policy</a> yang dibundel bersama N Developer Preview
- belum mendukung fitur Pertanyaan Keamanan Profil Kerja.
- Pengembang seharusnya menggunakan <a href="https://github.com/googlesamples/android-testdpc/releases">TestDPC</a>
- untuk menguji fitur ini.
- </li>
- </ul>
- </li>
-
- <li>Always-On VPN
- <ul>
- <li>Jika mode Always-On VPN diaktifkan, namun VPN tidak tersedia, aplikasi
- yang tidak dinyatakan sebagai pengecualian pada kebijakan Always On akan menghubungkan melalui
- jaringan biasa. Kecuali jika ditetapkan sebagai pengecualian pada kebijakan Always-On VPN,
- aplikasi seharusnya offline jika tidak tersedia koneksi VPN.
- <ul>
- <li>Bila mode Always On aktif, koneksi VPN tidak akan dibuat
- setelah perangkat dihidupkan ulang ke dalam mode Direct Boot, bahkan
- setelah pengguna membuka kunci layar kunci aman.
- </li>
- </ul>
- </li>
- </ul>
- </li>
-
- <li>Kontak yang Ditingkatkan
- <ul>
- <li>Perangkat Bluetooth PBAP/MAP tidak menampilkan nomor penelepon untuk kontak
- kerja. Rilis Pratinjau berikutnya akan mengatasi masalah ini.
- </li>
- </ul>
- </li>
-
- <li>Mode Kerja
- <ul>
- <li>Peluncur Google Now tidak menampilkan apakah Mode Kerja aktif atau
- nonaktif. Peluncur juga tidak menunjukkan kondisi penangguhan aplikasi.
- </li>
-
- <li>Setelah pengguna menonaktifkan lalu mengaktifkan Mode Kerja, sistem tidak lagi menampilkan
- widget aplikasi Profil Kerja, seperti Kalender.
- </li>
- </ul>
- </li>
-
- <li>Paket Ditangguhkan
- </li>
-
- <li>Admin perangkat bisa menangguhkan paket sistem penting, yang dapat menyebabkan
- perilaku yang tidak diharapkan, seperti melakukan panggilan meskipun dialog Telephone
- disabled sedang ditampilkan.
- </li>
-
- <li>Lainnya
- <ul>
- <li>Aplikasi Settings akan mogok saat dibuka jika {@link
- android.os.UserManager#DISALLOW_MOUNT_PHYSICAL_MEDIA} disetel ke true bila
- pengguna memasukkan media fisik seperti kartu SD.
- </li>
-
- <li>Keadaan {@code DPM.setPackagesSuspended} tidak akan bertahan bila
- pengguna mencopot pemasangan kemudian memasang kembali aplikasi tersebut. Aplikasi harus tetap
- ditangguhkan setelah mencopot pemasangan/pemasangan ulang, atau aplikasi tidak boleh
- dicopot pemasangannya
- </li>
-
- <li>Proses masuk pertama ke Profil Kerja membutuhkan waktu
- beberapa menit. Hal ini dapat menyebabkan perangkat membutuhkan waktu lebih lama dari biasanya untuk
- terlihat di Play EMM API.
- </li>
-
- <li>Pemberitahuan dari aplikasi Profil Kerja tidak tampak bagi listener
- pemberitahuan yang terpasang di profil pribadi. Akibatnya, sistem tidak
- menampilkan Pemberitahuan seperti yang diharapkan.
- </li>
-
- </ul>
- </li>
-</ul>
-
-<h4 >Keyboard</h4>
-
-<ul>
- <li>Penyandingan Bluetooth antara keyboard dan perangkat Android mungkin menjadi tidak stabil.
- </li>
-</ul>
-
-<h4 >Video</h4>
-
-<ul>
-<li>Pemutaran video mungkin mengalami selisih waktu dan menunjukkan interupsi.</li>
-</ul>
-
-<h4>Wi-Fi</h4>
-
-<ul>
- <li>Wi-Fi telah menjalani beberapa optimalisasi yang mungkin mengubah perilaku kasus patologis
- API. Khususnya, aplikasi yang berusaha menghubungkan ke jaringan
- tertentu, atau berusaha menghubungkan kembali ke jaringan harus mengulang pengujian.
- </li>
-
- <li>Klien DHCP lawas telah dibuang dari platform. Satu-satunya klien DHCP
- yang didukung platform adalah klien DHCP yang diperkenalkan di M.
- </li>
-</ul>
-
-<h4>Direct Boot</h4>
-
-<ul>
- <li>NFC tidak berfungsi hingga pembukaan kunci pertama.
- <ul>
- <li>Bila telepon berkemampuan Bluetooth dihidupkan ulang, Bluetooth tidak akan
- aktif secara otomatis. Anda harus mengaktifkan kembali Bluetooth secara manual.
- </li>
-
- <li>Dalam beberapa situasi, nada dering default mungkin tidak terdengar untuk
- panggilan telepon dan pesan. Perilaku ini telah diperbaiki dalam rilis N Preview berikutnya,
- dengan satu pengecualian (dan solusi):
- </li>
-
- <li>Pada perangkat yang bukan baru dikosongkan--perangkat yang telah booting setidaknya
- sekali sejak disetel ke mode Direct Boot--nada dering pemberitahuan
- default tidak berbunyi. Pengguna bisa mengatasi masalah ini dengan
- memilih nada dering dari Settings secara manual.
- </li>
-
- <li>Direct Boot tidak diaktifkan secara default pada perangkat yang menjalankan build N
- Developer Preview. Untuk mengaktifkan Direct Boot untuk pengujian dan
- pengembangan, masuklah ke Developer Option dan ketuk Convert to File Encryption.
- Dalam Developer Preview ini perlu penyetelan ulang pabrik untuk membagi ulang dan
- memformat ulang perangkat Anda bagi File-based Encryption.
- </li>
- </ul>
- </li>
-</ul>
-
-<h4>Gambar-dalam-gambar untuk Android TV</h4>
-
-<ul>
- <li>Integrasi PIP dalam Recents UI belum final, dan masih bisa
- berubah.
- <ul>
- <li>Animasi jendela PIP belum halus. Rilis Pratinjau
- mendatang akan memperbaiki hal ini.
- </li>
- </ul>
- </li>
-
- <li style="list-style: none">Rilis Pratinjau mendatang akan memperbaiki
- desain visual dan perapian layout PIP.
- </li>
-</ul>
-
-<h4>Laporan bug</h4>
-
-<ul>
- <li>Laporan bug tidak selalu berhasil diselesaikan (seperti solusi,
- kadang-kadang masih bisa diakses melalui penyedia dokumen laporan bug
- di penyimpanan internal).
- </li>
-</ul>
-
-<h4>Layar terbagi Multi-jendela</h4>
-
-<ul>
- <li>Aplikasi bisa mengalami mogok dan perilaku UI yang tidak diharapkan bila ditempatkan dalam
- mode layar terbagi. Ini adalah masalah aplikasi yang harus diperbaiki oleh pengembang
- aplikasi.
- </li>
-
- <li>Bila aplikasi menargetkan versi platform Android sebelum N, maka
- aplikasi mungkin tidak berfungsi pada layar terbagi dan toast mungkin muncul berkali-kali.
- </li>
-
- <li>Menekan lama tombol Ringkasan saat menggunakan aplikasi dengan orientasi
- tetap mungkin menghasilkan perilaku aplikasi yang tidak diharapkan.
- </li>
-
- <li>Aplikasi mungkin berkedip saat mengubah ukurannya.
- </li>
-
- <li>Animasi belum final.
- </li>
-</ul>
-
-<h4>Metode masukan</h4>
-
-<ul>
- <li>Google Keyboard secara tidak diharapkan kembali ke keyboard Google generik
- bila <b>menggunakan bahasa sistem</b>, namun Google Keyboard tidak mendukung
- bahasa yang dipilih dalam preferensi bahasa sistem. Ia akan kembali
- ke American English.
- <p>
- Anda bisa mengatasi masalah ini dengan menambahkan setidaknya satu bahasa yang didukung
- Keyboard Google.
- </p>
- </li>
-</ul>
-
-<h4>Aksesibilitas</h4>
-
-<ul>
- <li>TalkBack menunjukkan masalah pada beberapa fitur termasuk Pemberitahuan, petak
- Quick Settings dan tampilan Multi-jendela yang mungkin menyebabkan sistem mogok atau
- tidak ada masukan lisan dari TalkBack. Rilis pratinjau mendatang akan
- menangani masalah ini.
- </li>
-</ul>
-
-<h3 id="dp1-device-sp">Masalah dan Catatan untuk Perangkat Tertentu</h3>
-
-<h4>Nexus Player</h4>
-<ul>
- <li>Pemutaran video, kompatibilitas aplikasi, dan masalah stabilitas telah antisipasi pada
- Nexus Player dalam rilis Pratinjau ini.
- </li>
-</ul>
-
-<h4>Pixel C</h4>
-<ul>
-<li>Mengubah ukuran multi-jendela bisa menyebabkan mogok.</li>
-</ul>
-
-<h4>Nexus 9</h4>
-<ul>
-<li>Perangkat Nexus 9 mungkin tidak jalan setelah menerima pembaruan lewat jaringan seluler (OTA)
- via Android Beta Program. Untuk memulihkan dari masalah ini, Anda bisa mencoba
- pasang citra OTA secara manual. Untuk informasi selengkapnya, lihat
- <a href="{@docRoot}preview/download-ota.html">Menerapkan Citra OTA Perangkat</a>.
-</li>
-</ul>
-
diff --git a/docs/html-intl/intl/in/training/articles/direct-boot.jd b/docs/html-intl/intl/in/training/articles/direct-boot.jd
new file mode 100644
index 0000000..a7e3cf3
--- /dev/null
+++ b/docs/html-intl/intl/in/training/articles/direct-boot.jd
@@ -0,0 +1,181 @@
+page.title=Direct Boot
+page.keywords=pratinjau,sdk,direct boot
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>Dalam dokumen ini</h2>
+ <ol>
+ <li><a href="#run">Meminta Akses untuk Berjalan Selama Direct Boot</a></li>
+ <li><a href="#access">Mengakses Penyimpanan yang Dienkripsi dengan Perangkat</a></li>
+ <li><a href="#notification">Mendapatkan Pemberitahuan saat Pengguna Membuka Kunci</a></li>
+ <li><a href="#migrating">Migrasi Data yang Ada</a></li>
+ <li><a href="#testing">Menguji Aplikasi Peka Enkripsi Anda</a></li>
+ </ol>
+</div>
+</div>
+
+<p>Android N berjalan dalam mode <i>Direct Boot</i> yang aman
+bila perangkat telah dihidupkan namun pengguna tidak membuka
+kunci perangkat. Untuk mendukung hal ini, sistem menyediakan dua lokasi penyimpanan untuk data:</p>
+
+<ul>
+<li><i>Penyimpanan yang dienkripsi dengan kredensial</i>, yang merupakan lokasi penyimpanan default
+dan hanya tersedia setelah pengguna membuka kunci perangkat.</li>
+<li><i>Penyimpanan yang dienkripsi dengan perangkat</i>, yang merupakan lokasi penyimpanan yang tersedia
+selama mode Direct Boot dan setelah pengguna membuka kunci perangkat.</li>
+</ul>
+
+<p>Secara default, aplikasi tidak berjalan selama mode Direct Boot.
+Jika aplikasi Anda perlu melakukan tindakan selama mode Direct Boot, Anda bisa mendaftarkan
+komponen aplikasi yang harus dijalankan selama mode ini. Beberapa kasus penggunaan umum
+untuk aplikasi yang perlu dijalankan selama mode Direct Boot antara lain:</p>
+
+<ul>
+<li>Aplikasi yang telah menjadwalkan pemberitahuan, seperti aplikasi
+beker.</li>
+<li>Aplikasi yang menyediakan pemberitahuan pengguna yang penting, seperti aplikasi SMS.</li>
+<li>Aplikasi yang menyediakan layanan aksesibilitas, seperti TalkBack.</li>
+</ul>
+
+<p>Jika aplikasi Anda perlu mengakses data saat dijalankan dalam mode Direct Boot, gunakan
+penyimpanan yang dienkripsi dengan perangkat. Penyimpanan yang dienkripsi dengan perangkat berisi data
+yang dienkripsi dengan kunci yang hanya tersedia setelah perangkat melakukan
+booting yang berhasil diverifikasi.</p>
+
+<p>Untuk data yang harus dienkripsi dengan kunci yang dikaitkan dengan kredensial
+pengguna, seperti PIN atau kata sandi, gunakan penyimpanan yang dienkripsi dengan kredensial.
+Penyimpanan yang dienkripsi dengan kredensial hanya tersedia setelah pengguna berhasil
+membuka kunci perangkat, hingga saat pengguna menghidupkan ulang perangkat lagi. Jika
+pengguna mengaktifkan layar kunci setelah membuka kunci perangkat, hal ini tidak akan mengunci
+penyimpanan yang dienkripsi dengan kredensial.</p>
+
+<h2 id="run">Meminta Akses untuk Berjalan Selama Direct Boot</h2>
+
+<p>Aplikasi harus mendaftarkan komponennya pada sistem agar
+bisa berjalan selama mode Direct Boot atau mengakses
+penyimpanan yang dienkripsi dengan perangkat. Aplikasi mendaftar pada sistem dengan menandai komponen sebagai
+<i>peka enkripsi</i>. Untuk menandai komponen Anda sebagai peka enkripsi, setel atribut
+<code>android:directBootAware</code> ke true dalam manifes Anda.<p>
+
+<p>Komponen yang peka enkripsi bisa mendaftar untuk menerima pesan siaran
+<code>LOCKED_BOOT_COMPLETED</code> dari
+sistem bila perangkat telah dihidupkan ulang. Pada tahap ini
+penyimpanan yang dienkripsi dengan perangkat akan tersedia, dan komponen Anda bisa mengeksekusi tugas-tugas yang perlu
+dijalankan selama mode Direct Boot, seperti memicu alarm yang terjadwal.</p>
+
+<p>Cuplikan kode berikut adalah contoh cara mendaftarkan
+{@link android.content.BroadcastReceiver} sebagai peka enkripsi, dan menambahkan sebuah
+filter intent untuk <code>LOCKED_BOOT_COMPLETED</code>, dalam manifes aplikasi:</p>
+
+<pre>
+<receiver
+ android:directBootAware="true" >
+ ...
+ <intent-filter>
+ <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
+ </intent-filter>
+</receiver>
+</pre>
+
+<p>Setelah pengguna membuka kunci perangkat, semua komponen bisa mengakses
+penyimpanan yang dienkripsi dengan perangkat serta penyimpanan yang dienkripsi dengan kredensial.</p>
+
+<h2 id="access">Mengakses Penyimpanan yang Dienkripsi dengan Perangkat</h2>
+
+<p>Untuk mengakses penyimpanan yang dienkripsi dengan perangkat, buat instance
+{@link android.content.Context} kedua dengan memanggil
+<code>Context.createDeviceProtectedStorageContext()</code>. Semua panggilan
+API penyimpanan yang dibuat menggunakan konteks ini mengakses penyimpanan yang dienkripsi dengan perangkat. Contoh
+berikut mengakses penyimpanan yang dienkripsi dengan perangkat dan membuka file data aplikasi
+yang ada:</p>
+
+<pre>
+Context directBootContext = appContext.createDeviceProtectedStorageContext();
+// Access appDataFilename that lives in device encrypted storage
+FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
+// Use inStream to read content...
+</pre>
+
+<p>Gunakan penyimpanan yang dienkripsi dengan perangkat hanya untuk
+informasi yang harus bisa diakses selama mode Direct Boot.
+Jangan gunakan penyimpanan yang dienkripsi dengan perangkat sebagai penyimpanan terenkripsi serba guna.
+Untuk informasi pengguna yang bersifat pribadi, atau data terenkripsi yang tidak diperlukan selama
+mode Direct Boot, gunakan penyimpanan yang dienkripsi dengan kredensial.</p>
+
+<h2 id="notification">Mendapatkan Pemberitahuan saat Pengguna Membuka Kunci</h2>
+
+<p>Setelah pengguna membuka kunci perangkat setelah restart, aplikasi Anda bisa beralih untuk
+mengakses penyimpanan yang dienkripsi dengan kredensial dan menggunakan layanan sistem biasa yang
+bergantung pada kredensial pengguna.</p>
+
+<p>Agar diberi tahu bila pengguna membuka kunci perangkat setelah boot ulang,
+daftarkan {@link android.content.BroadcastReceiver} dari komponen yang berjalan
+untuk mendengarkan pesan <code>ACTION_USER_UNLOCKED</code>. Atau, Anda bisa
+menerima pesan {@link android.content.Intent#ACTION_BOOT_COMPLETED
+ACTION_BOOT_COMPLETED} yang ada, yang sekarang menunjukkan bahwa perangkat telah dihidupkan dan
+pengguna telah membuka kunci perangkat.</p>
+
+<p>Anda bisa langsung kueri apakah pengguna telah membuka kunci perangkat dengan memanggil
+<code>UserManager.isUserUnlocked()</code>.</p>
+
+<h2 id="migrating">Migrasi Data yang Ada</h2>
+
+<p>Jika pengguna memperbarui perangkat mereka untuk menggunakan mode Direct Boot,
+data Anda yang ada mungkin perlu dipindahkan ke penyimpanan yang dienkripsi dengan perangkat. Gunakan
+<code>Context.moveSharedPreferencesFrom()</code> dan
+<code>Context.moveDatabaseFrom()</code> untuk memindahkan data preferensi dan
+basis data antara penyimpanan yang dienkripsi dengan kredensial dan penyimpanan yang dienkripsi dengan perangkat.</p>
+
+<p>Pertimbangkan dengan baik saat memutuskan data apa yang akan dipindahkan dari
+penyimpanan yang dienkripsi dengan kredensial ke penyimpanan yang dienkripsi dengan perangkat. Anda sebaiknya tidak memindahkan
+informasi pengguna yang bersifat rahasia, seperti kata sandi atau token otorisasi, ke
+penyimpanan yang dienkripsi dengan perangkat. Dalam beberapa skenario, Anda mungkin perlu mengelola
+set data terpisah pada dua tempat penyimpanan yang dienkripsi.</p>
+
+<h2 id="testing">Menguji Aplikasi Peka Enkripsi Anda</h2>
+
+<p>Uji aplikasi peka enkripsi Anda menggunakan mode Direct Boot baru. Ada
+dua cara untuk mengaktifkan Direct Boot.</p>
+
+<p class="caution"><strong>Perhatian:</strong> Mengaktifkan Direct Boot
+akan menghapus semua data pengguna pada perangkat.</p>
+
+<p>Pada perangkat yang didukung dengan Android N terpasang, aktifkan
+Direct Boot dengan melakukan salah satu hal berikut:</p>
+
+<ul>
+<li>Pada perangkat, aktifkan <b>Developer options</b> jika Anda belum melakukannya dengan
+masuk ke <b>Settings > About phone</b>, dan menyentuh <b>Build number</b>
+tujuh kali. Setelah layar Developer options terbuka, masuk ke
+<b>Settings > Developer options</b> dan pilih
+<b>Convert to file encryption</b>.</li>
+<li>Gunakan perintah shell adb berikut untuk mengaktifkan mode Direct Boot:
+<pre class="no-pretty-print">
+$ adb reboot-bootloader
+$ fastboot --wipe-and-use-fbe
+</pre>
+</li>
+</ul>
+
+<p>Mode emulasi Direct Boot juga tersedia, jika Anda perlu mengganti
+mode pada perangkat pengujian. Mode emulasi sebaiknya hanya digunakan selama
+pengembangan dan bisa menyebabkan kehilangan data. Untuk mengaktifkan mode emulasi Direct Boot,
+setel pola kunci pada perangkat, pilih "No thanks" jika ditanya mengenai
+layar start-up aman saat menetapkan pola kunci, kemudian gunakan
+perintah shell adb berikut:</p>
+
+<pre class="no-pretty-print">
+$ adb shell sm set-emulate-fbe true
+</pre>
+
+<p>Untuk menonaktifkan mode emulasi Direct Boot, gunakan perintah berikut:</p>
+
+<pre class="no-pretty-print">
+$ adb shell sm set-emulate-fbe false
+</pre>
+
+<p>Menggunakan perintah ini akan menyebabkan perangkat melakukan boot ulang.</p>
diff --git a/docs/html-intl/intl/in/training/articles/scoped-directory-access.jd b/docs/html-intl/intl/in/training/articles/scoped-directory-access.jd
new file mode 100644
index 0000000..30aed6f
--- /dev/null
+++ b/docs/html-intl/intl/in/training/articles/scoped-directory-access.jd
@@ -0,0 +1,148 @@
+page.title=Scoped Directory Access
+page.keywords=pratinjau,sdk,scoped directory access
+page.tags=androidn
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>Dalam dokumen ini</h2>
+ <ol>
+ <li><a href="#accessing">Mengakses Direktori Penyimpanan Eksternal</a></li>
+ <li><a href="#removable">Mengakses Direktori pada Media Lepas-Pasang</a></li>
+ <li><a href="#best">Praktik Terbaik</a></li>
+ </ol>
+</div>
+</div>
+
+<p>Aplikasi seperti aplikasi foto biasanya hanya memerlukan akses ke direktori tertentu dalam
+penyimpanan eksternal, seperti direktori <code>Pictures</code>. Pendekatan
+yang ada dalam mengakses penyimpanan eksternal tidak didesain untuk memberi kemudahan
+akses direktori tertarget untuk tipe aplikasi ini. Misalnya:</p>
+
+<ul>
+<li>Meminta {@link android.Manifest.permission#READ_EXTERNAL_STORAGE}
+atau {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} dalam manifes Anda
+akan memungkinkan akses ke semua direktori publik pada penyimpanan eksternal, yang mungkin
+lebih banyak akses dari yang dibutuhkan aplikasi Anda.</li>
+<li>Menggunakan
+<a href="{@docRoot}guide/topics/providers/document-provider.html">Storage
+Access Framework</a> biasanya membuat pengguna Anda memilih direktori
+melalui UI sistem, yang tidak diperlukan jika aplikasi Anda selalu mengakses
+direktori eksternal yang sama.</li>
+</ul>
+
+<p>Android N menyediakan API baru yang disederhanakan untuk mengakses
+direktori penyimpanan eksternal umum. </p>
+
+<h2 id="accessing">Mengakses Direktori Penyimpanan Eksternal</h2>
+
+<p>Gunakan kelas <code>StorageManager</code> untuk mendapatkan instance
+<code>StorageVolume</code> yang tepat. Kemudian, buat intent dengan memanggil metode
+<code>StorageVolume.createAccessIntent()</code> dari instance itu.
+Gunakan intent ini untuk mengakses direktori penyimpanan eksternal. Untuk mendapatkan daftar
+semua volume yang tersedia, termasuk volume media lepas-pasang, gunakan
+<code>StorageManager.getVolumesList()</code>.</p>
+
+<p>Jika Anda memiliki informasi tentang file spesifik, gunakan
+<code>StorageManager.getStorageVolume(File)</code> untuk mendapatkan
+<code>StorageVolume</code> yang berisi file tersebut. Panggil
+<code>createAccessIntent()</code> pada <code>StorageVolume</code> ini untuk mengakses
+direktori penyimpanan eksternal untuk file tersebut.</p>
+
+<p>
+Di volume kedua, seperti kartu SD eksternal, teruskan null saat memanggil
+<code>StorageVolume.createAccessIntent()</code> untuk meminta akses ke seluruh
+volume, sebagai ganti direktori spesifik.
+<code>StorageVolume.createAccessIntent()</code> akan mengembalikan null jika Anda meneruskan
+null ke volume utama, atau jika Anda meneruskan nama direktori yang tidak valid.
+</p>
+
+<p>Cuplikan kode berikut adalah contoh cara membuka direktori
+<code>Pictures</code> dalam penyimpanan bersama utama:</p>
+
+<pre>
+StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
+StorageVolume volume = sm.getPrimaryVolume();
+Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+</pre>
+
+<p>Sistem ini mencoba untuk memberikan akses ke direktori eksternal, dan jika
+diperlukan mengonfirmasi akses dengan pengguna menggunakan UI yang disederhanakan:</p>
+
+<img src="{@docRoot}images/android-7.0/scoped-directory-access-framed.png" srcset="{@docRoot}images/android-7.0/scoped-directory-access-framed.png 1x,
+{@docRoot}images/android-7.0/scoped-directory-access-framed_2x.png 2x" />
+<p class="img-caption"><strong>Gambar 1.</strong> Sebuah aplikasi yang meminta
+akses ke direktori Pictures.</p>
+
+<p>Jika pengguna memberi akses, sistem akan memanggil penggantian
+<code>onActivityResult()</code> Anda dengan kode hasil
+<code>Activity.RESULT_OK</code>, dan data intent yang berisi URI. Gunakan
+URI yang disediakan untuk mengakses informasi direktori, serupa dengan menggunakan URI
+yang dikembalikan oleh
+<a href="{@docRoot}guide/topics/providers/document-provider.html">Storage
+Access Framework</a>.</p>
+
+<p>Jika pengguna tidak memberi akses, sistem akan memanggil penggantian
+<code>onActivityResult()</code> Anda dengan kode hasil
+<code>Activity.RESULT_CANCELED</code>, dan data intent nol.</p>
+
+<p class="note"><b>Catatan</b>: Mendapatkan akses ke direktori eksternal tertentu
+juga akan memperoleh akses ke subdirektori dalam direktori tersebut.</p>
+
+<h2 id="removable">Mengakses Direktori pada Media Lepas-Pasang</h2>
+
+<p>Untuk menggunakan Scoped Directory Access guna mengakses direktori pada media lepas-pasang,
+pertama tambahkan {@link android.content.BroadcastReceiver} yang akan mendengarkan pemberitahuan
+{@link android.os.Environment#MEDIA_MOUNTED}, misalnya:</p>
+
+<pre>
+<receiver
+ android:name=".MediaMountedReceiver"
+ android:enabled="true"
+ android:exported="true" >
+ <intent-filter>
+ <action android:name="android.intent.action.MEDIA_MOUNTED" />
+ <data android:scheme="file" />
+ </intent-filter>
+</receiver>
+</pre>
+
+<p>Bila pengguna memasang media lepas-pasang, seperti kartu SD, sistem akan mengirimkan pemberitahuan
+{@link android.os.Environment#MEDIA_MOUNTED}. Pemberitahuan ini
+memberikan sebuah objek <code>StorageVolume</code> dalam data intent yang bisa
+Anda gunakan untuk mengakses direktori pada media lepas-pasang. Contoh berikut
+mengakses direktori <code>Pictures</code> pada media lepas-pasang:</p>
+
+<pre>
+// BroadcastReceiver has already cached the MEDIA_MOUNTED
+// notification Intent in mediaMountedIntent
+StorageVolume volume = (StorageVolume)
+ mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
+volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+</pre>
+
+<h2 id="best">Praktik Terbaik</h2>
+
+<p>Bila memungkinkan, pertahankan URI akses direktori eksternal sehingga Anda tidak perlu
+berulang kali meminta akses ke pengguna. Setelah pengguna memberikan akses, panggil
+<code>getContentResolver().takePersistableUriPermssion()</code> bersama
+URI akses direktori. Sistem akan mempertahankan URI dan permintaan
+akses berikutnya akan mengembalikan <code>RESULT_OK</code> dan tidak menampilkan UI konfirmasi kepada
+pengguna.</p>
+
+<p>Jika pengguna menolak akses ke direktori eksternal, jangan langsung
+meminta akses lagi. Berulang kali meminta akses akan menghasilkan pengalaman
+pengguna yang buruk. Jika permintaan ditolak oleh pengguna, dan aplikasi meminta akses
+lagi, UI akan menampilkan kotak centang <b>Don't ask again</b>:</p>
+
+<img src="{@docRoot}images/android-7.0/scoped-directory-access-dont-ask.png" srcset="{@docRoot}images/android-7.0/scoped-directory-access-dont-ask.png 1x,
+{@docRoot}images/android-7.0/scoped-directory-access-dont-ask_2x.png 2x" />
+<p class="img-caption"><strong>Gambar 1.</strong> Sebuah aplikasi membuat
+permintaan kedua untuk mengakses media lepas-pasang.</p>
+
+<p>Jika pengguna memilih <b>Don't ask again</b> dan menolak permintaan,
+semua permintaan berikutnya untuk direktori yang diberikan dari aplikasi
+Anda secara otomatis akan ditolak, dan tidak ada UI permintaan yang akan ditampilkan ke pengguna.</p>
\ No newline at end of file
diff --git a/docs/html-intl/intl/in/training/articles/security-config.jd b/docs/html-intl/intl/in/training/articles/security-config.jd
new file mode 100644
index 0000000..e13429d
--- /dev/null
+++ b/docs/html-intl/intl/in/training/articles/security-config.jd
@@ -0,0 +1,747 @@
+page.title=Konfigurasi Keamanan Jaringan
+page.keywords=androidn,keamanan,jaringan
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>Dalam dokumen ini</h2>
+<ol>
+ <li><a href="#manifest">Menambahkan File Konfigurasi Keamanan</a></li>
+ <li><a href="#CustomTrust">Menyesuaikan CA Tepercaya</a>
+ <ol>
+ <li><a href="#ConfigCustom">Mengonfigurasi CA Tepercaya Khusus</a></li>
+ <li><a href="#LimitingCas">Membatasi Set CA Tepercaya</a></li>
+ <li><a href="#TrustingAdditionalCas">Mempercayai CA Tambahan</a></li>
+ </ol>
+ </li>
+ <li><a href="#TrustingDebugCa">CA Debug Saja</a></li>
+ <li><a href="#UsesCleartextTraffic">Berhenti dari Lalu Lintas Cleartext</a></li>
+ <li><a href="#CertificatePinning">Menyematkan Sertifikat</a></li>
+ <li><a href="#ConfigInheritance">Perilaku Pewarisan Konfigurasi</a></li>
+ <li><a href="#FileFormat">Format File Konfigurasi</a></li>
+</ol>
+</div>
+</div>
+
+
+<p>
+ Android N menyertakan fitur
+ Network Security Configuration yang memungkinkan aplikasi menyesuaikan setelan keamanan jaringan mereka dalam
+ file konfigurasi deklaratif yang aman tanpa memodifikasi kode aplikasi. Setelan ini bisa
+ dikonfigurasi untuk domain dan aplikasi tertentu. Kemampuan
+ utama fitur ini adalah sebagai berikut:
+</p>
+
+<ul>
+ <li>
+ <b>Trust-anchor khusus:</b> Menyesuaikan Certificate Authorities (CA) mana
+ yang dipercaya untuk koneksi aman aplikasi. Misalnya,
+ mempercayai sertifikat tertentu yang ditandatangani sendiri atau membatasi
+ set CA umum yang dipercaya aplikasi.
+ </li>
+
+ <li>
+ <b>Penggantian hanya-debug:</b> Men-debug secara aman koneksi aman dalam aplikasi
+ tanpa menambahkan risiko pada basis yang telah dipasang.
+ </li>
+
+ <li>
+ <b>Berhenti dari lalu lintas cleartext:</b> Melindungi aplikasi dari
+ penggunaan lalu lintas cleartext secara tidak sengaja.
+ </li>
+
+ <li>
+ <b>Penyematan sertifikat:</b> Membatasi koneksi aman aplikasi ke
+ sertifikat tertentu.
+ </li>
+</ul>
+
+
+<h2 id="manifest">Menambahkan File Konfigurasi Keamanan</h2>
+
+<p>
+ Fitur Network Security Configuration menggunakan file XML tempat Anda menetapkan
+ setelan untuk aplikasi. Anda harus menyertakan sebuah entri dalam manifes aplikasi
+ untuk menunjuk ke file ini. Kutipan kode berikut dari sebuah manifes
+ yang memperagakan cara membuat entri ini:
+</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<manifest ... >
+ <application ... >
+ <meta-data android:name="android.security.net.config"
+ android:resource="@xml/network_security_config" />
+ ...
+ </application>
+</manifest>
+</pre>
+
+<h2 id="CustomTrust">Menyesuaikan CA Tepercaya</h2>
+
+<p>
+ Aplikasi mungkin perlu mempercayai set CA khusus sebagai ganti default
+ platform. Alasannya yang paling umum adalah:
+</p>
+
+<ul>
+ <li>Menghubungkan ke host dengan otoritas sertifikat khusus (ditandatangani sendiri,
+ dikeluarkan oleh CA internal, dll).
+ </li>
+
+ <li>Membatasi set CA hanya untuk CA yang Anda percaya sebagai ganti setiap CA
+ yang sudah terpasang.
+ </li>
+
+ <li>Mempercayai CA tambahan yang tidak disertakan dalam sistem.
+ </li>
+</ul>
+
+<p>
+ Secara default koneksi (mis. TLS, HTTPS) aman dari semua aplikasi mempercayai
+ CA yang telah dipasang oleh sistem, dan aplikasi yang menargetkan API level 23
+ (Android M) ke bawah, juga mempercayai penyimpanan CA yang ditambahkan pengguna secara default. Aplikasi
+ bisa menyesuaikan koneksinya menggunakan {@code base-config} (untuk
+ penyesuaian lebar-aplikasi) atau {@code domain-config} (untuk penyesuaian
+ per-domain).
+</p>
+
+
+<h3 id="ConfigCustom">Mengonfigurasi CA Khusus</h3>
+
+<p>
+ Anggaplah Anda ingin menghubungkan ke host Anda yang menggunakan sertifikat
+ SSL yang ditandatangani sendiri atau ke host yang sertifikat SSL-nya dikeluarkan oleh CA non-publik
+ yang Anda percaya, seperti CA internal perusahaan Anda.
+</p>
+
+<p>
+ <code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/my_ca"/>
+ </trust-anchors>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+<p>
+ Menambahkan sertifikat CA yang ditandatangani sendiri atau sertifikat CA non-publik, dalam format PEM atau DER, ke
+ {@code res/raw/my_ca}.
+</p>
+
+
+<h3 id="LimitingCas">Membatasi Set CA Tepercaya</h3>
+
+<p>
+ Aplikasi yang tidak ingin mempercayai semua CA yang dipercaya oleh sistem
+ sebagai gantinya bisa menetapkan set CA sendiri yang telah dikurangi untuk dipercaya. Ini akan melindungi
+ aplikasi dari sertifikat palsu yang dikeluarkan oleh selain CA.
+</p>
+
+<p>
+ Konfigurasi untuk membatasi set CA tepercaya mirip dengan <a href="#TrustingACustomCa">mempercayai CA khusus</a> untuk domain tertentu selain
+ beberapa CA disediakan dalam sumber daya.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">secure.example.com</domain>
+ <domain includeSubdomains="true">cdn.example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/trusted_roots"/>
+ </trust-anchors>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+<p>
+ Menambahkan CA tepercaya, dalam format PEM atau DER, ke {@code res/raw/trusted_roots}.
+ Perhatikan, jika menggunakan format PEM, file <em>hanya</em> boleh berisi data PEM
+ dan tidak ada teks tambahan. Anda juga bisa menyediakan beberapa elemen
+ <a href="#certificates"><code><certificates></code></a>
+sebagai ganti satu elemen.
+</p>
+
+
+<h3 id="TrustingAdditionalCas">
+ Mempercayai CA Tambahan
+</h3>
+
+<p>
+ Sebuah aplikasi mungkin perlu mempercayai CA tambahan yang tidak dipercaya oleh sistem,
+ hal ini bisa disebabkan karena sistem belum menyertakan CA atau CA tidak
+ memenuhi persyaratan untuk memasukkan ke dalam sistem Android. Aplikasi
+ bisa melakukannya dengan menetapkan beberapa sumber sertifikat untuk
+ konfigurasi.
+</p>
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <base-config>
+ <trust-anchors>
+ <certificates src="@raw/extracas"/>
+ <certificates src="system"/>
+ </trust-anchors>
+ </base-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="TrustingDebugCa">Mengonfigurasi CA untuk Debug</h2>
+
+<p>
+ Saat men-debug aplikasi yang terhubung melalui HTTPS, Anda mungkin perlu
+ menghubungkan ke server pengembangan lokal, yang tidak memiliki sertifikat
+ SSL untuk server produksi Anda. Untuk mendukungnya tanpa
+ memodifikasi kode aplikasi, Anda bisa menetapkan CA hanya-debug
+ yang <i>hanya</i> dipercaya bila <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">
+android:debuggable</a>
+ adalah {@code true} dengan menggunakan {@code debug-overrides}. Biasanya IDE dan alat
+ build menyetel flag ini secara otomatis untuk build non-rilis.
+</p>
+
+<p>
+ Ini lebih aman daripada kode kondisional biasa karena, sebagai tindakan
+ pencegahan keamanan, toko aplikasi tidak menerima aplikasi yang ditandai
+ bisa-di-debug.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <debug-overrides>
+ <trust-anchors>
+ <certificates src="@raw/debug_cas"/>
+ </trust-anchors>
+ </debug-overrides>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="UsesCleartextTraffic">Berhenti dari Lalu Lintas Cleartext</h2>
+
+<p>
+ Aplikasi bermaksud menyambung ke tujuan hanya menggunakan koneksi
+ aman dapat memilih keluar dari dukungan cleartext (menggunakan protokol
+ HTTP yang tidak terenkripsi sebagai ganti HTTPS) ke tujuan tersebut. Opsi ini akan membantu mencegah
+ regresi tidak disengaja dalam aplikasi karena perubahan dalam URL yang disediakan oleh sumber-sumber
+ eksternal seperti server backend.
+ Lihat {@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted
+ NetworkSecurityPolicy.isCleartextTrafficPermitted()} untuk detail selengkapnya.
+</p>
+
+<p>
+ Misalnya, aplikasi mungkin ingin memastikan semua koneksi ke {@code
+ secure.example.com} selalu dilakukan melalui HTTPS untuk melindungi lalu lintas sensitif
+ dari jaringan yang berbahaya.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config usesCleartextTraffic="false">
+ <domain includeSubdomains="true">secure.example.com</domain>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="CertificatePinning">Menyematkan Sertifikat</h2>
+
+<p>
+ Biasanya aplikasi mempercayai semua CA yang telah terpasang. Jika salah satu dari CA ini
+ mengeluarkan sertifikat palsu, aplikasi akan berisiko terkena serangan
+ MiTM. Beberapa aplikasi memilih untuk membatasi set sertifikat yang mereka terima
+ baik dengan membatasi set CA yang mereka percaya atau dengan menyematkan sertifikat.
+</p>
+
+<p>
+ Penyematan sertifikat dilakukan dengan memberikan seperangkat sertifikat dengan hash
+ kunci publik (SubjectPublicKeyInfo pada sertifikat X.509). Rantai
+ sertifikat nanti hanya berlaku jika rantai sertifikat berisi setidaknya salah satu
+ dari kunci publik yang disematkan.
+</p>
+
+<p>
+ Perhatikan, saat menggunakan penyematan sertifikat, Anda harus selalu menyertakan kunci
+ cadangan sehingga jika Anda terpaksa beralih ke kunci baru, atau mengubah CA (saat
+ menyematkan ke sertifikat CA atau perantara CA tersebut), konektivitas
+ aplikasi Anda tidak terpengaruh. Jika tidak, Anda harus mendorong
+ pembaruan ke aplikasi tersebut untuk memulihkan konektivitas.
+</p>
+
+<p>
+ Selain itu dimungkinkan juga menyetel waktu habis masa berlaku untuk pin setelah
+ penyematan tidak dilakukan. Hal ini membantu mencegah masalah konektivitas dalam
+ aplikasi yang belum diperbarui. Akan tetapi, menyetel waktu kedaluwarsa
+ pada pin mungkin akan membuat penyematan bisa diabaikan.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <pin-set expiration="2018-01-01">
+ <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
+ <!-- backup pin -->
+ <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
+ </pin-set>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="ConfigInheritance">Perilaku Pewarisan Konfigurasi</h2>
+
+<p>
+ Nilai yang tidak disetel dalam konfigurasi tertentu akan diwariskan. Perilaku ini memungkinkan konfigurasi
+ yang lebih kompleks sambil menjaga file konfigurasi tetap terbaca.
+</p>
+
+<p>
+ Jika nilai tidak disetel dalam entri tertentu maka nilai dari entri berikutnya yang lebih
+ umum akan digunakan. Nilai yang tidak disetel dalam {@code domain-config} akan
+ diambil dari {@code domain-config} induk, jika tersarang, atau dari {@code
+ base-config} jika tidak. Nilai yang tidak disetel dalam {@code base-config} akan menggunakan
+ nilai default platform.
+</p>
+
+<p>
+ Misalnya pertimbangkan, bila semua koneksi ke subdomain {@code
+ example.com} harus menggunakan set CA khusus. Selain itu, lalu lintas cleartext ke
+ domain ini diizinkan <em>kecuali</em> saat menghubungkan ke {@code
+ secure.example.com}. Dengan menyarangkan konfigurasi untuk {@code
+ secure.example.com} dalam konfigurasi untuk {@code example.com},
+ {@code trust-anchors} tidak perlu digandakan.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/my_ca"/>
+ </trust-anchors>
+ <domain-config cleartextTrafficPermitted="false">
+ <domain includeSubdomains="true">secure.example.com</domain>
+ </domain-config>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="FileFormat">Format File Konfigurasi</h2>
+
+<p>
+ Fitur Network Security Configuration menggunakan format file XML.
+ Struktur keseluruhan file ditampilkan dalam contoh kode berikut:
+</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <base-config>
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ </base-config>
+
+ <domain-config>
+ <domain>android.com</domain>
+ ...
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ <pin-set>
+ <pin digest="...">...</pin>
+ ...
+ </pin-set>
+ </domain-config>
+ ...
+ <debug-overrides>
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ </debug-overrides>
+</network-security-config>
+</pre>
+
+<p>
+ Bagian berikut menjelaskan sintaks dan detail lainnya dari format
+ file.
+</p>
+
+<h3 id="network-security-config">
+ <network-security-config>
+</h3>
+
+<dl class="xml">
+ <dt>
+ bisa berisi:
+ </dt>
+
+ <dd>
+ 0 atau 1 <code><a href="#base-config"><base-config></a></code><br>
+ Sejumlah <code><a href=
+ "#domain-config"><domain-config></a></code><br>
+ 0 atau 1 <code><a href="#debug-overrides"><debug-overrides></a></code>
+ </dd>
+</dl>
+
+<h3 id="base-config">
+ <base-config>
+</h3>
+
+<dl class="xml">
+ <dt>
+ sintaks:
+ </dt>
+</dl>
+
+<pre class="stx">
+<base-config <a href=
+"#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
+ ...
+</base-config>
+</pre>
+<dl class="xml">
+ <dt>
+ bisa berisi:
+ </dt>
+
+ <dd>
+ <code><a href="#trust-anchors"><trust-anchors></a></code>
+ </dd>
+
+ <dt>
+ keterangan:
+ </dt>
+
+ <dd>
+ Konfigurasi default yang digunakan oleh semua koneksi yang tujuannya tidak
+ tercakup oleh <a href="#domain-config"><code>domain-config</code></a>.
+
+<p>
+ Nilai yang tidak disetel akan menggunakan nilai default platform. Konfigurasi
+ default untuk aplikasi yang menargetkan API level 24 ke atas:
+</p>
+
+<pre>
+<base-config usesCleartextTraffic="true">
+ <trust-anchors>
+ <certificates src="system" />
+ </trust-anchors>
+</base-config>
+</pre>
+Konfigurasi default untuk aplikasi yang menargetkan API level 23 ke bawah:
+<pre>
+<base-config usesCleartextTraffic="true">
+ <trust-anchors>
+ <certificates src="system" />
+ <certificates src="user" />
+ </trust-anchors>
+</base-config>
+</pre>
+
+ </dd>
+</dl>
+
+<h3 id="domain-config"><domain-config></h3>
+<dl class="xml">
+<dt>sintaks:</dt>
+<dd>
+<pre class="stx"><domain-config <a href="#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
+ ...
+</domain-config></pre>
+</dd>
+
+<dt>Bisa Berisi:</dt>
+
+<dd>
+1 atau beberapa <code><a href="#domain"><domain></a></code>
+<br/>0 atau 1 <code><a href="#trust-anchors"><trust-anchors></a></code>
+<br/>0 atau 1 <code><a href="#pin-set"><pin-set></code></a>
+<br/>Sejumlah <code><domain-config></code> tersarang</dd>
+
+<dt>Keterangan</dt>
+<dd>Konfigurasi yang digunakan untuk koneksi ke tujuan tertentu seperti didefinisikan oleh elemen {@code domain}.
+
+<p>Perhatikan, jika beberapa elemen {@code domain-config} mencakup suatu tujuan, konfigurasi dengan aturan domain paling spesifik (terpanjang) yang cocok
+akan digunakan.</p></dd>
+</dl>
+
+
+<h3 id="domain"><domain></h3>
+
+<dl class="xml">
+ <dt>
+ sintaks:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<domain includeSubdomains=["true" | "false"]>example.com</domain>
+</pre>
+ </dd>
+
+ <dt>
+ Atribut:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code includeSubdomains}
+ </dt>
+
+ <dd>
+ Jika {@code "true"} maka aturan domain ini akan dicocokkan dengan domain dan semua
+ subdomain, termasuk subdomain dari subdomain, jika tidak peraturan hanya
+ diterapkan pada kecocokan yang persis tepat.
+ </dd>
+ </dl>
+ </dd>
+
+ <dt>
+ Keterangan:
+ </dt>
+</dl>
+
+<h3 id="debug-overrides"><debug-overrides></h3>
+
+<dl class="xml">
+ <dt>
+ sintaks:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<debug-overrides>
+ ...
+</debug-overrides>
+</pre>
+ </dd>
+
+ <dt>
+ Bisa Berisi:
+ </dt>
+
+ <dd>
+ 0 atau 1 <code><a href="#trust-anchors"><trust-anchors></a></code>
+ </dd>
+
+ <dt>
+ Keterangan:
+ </dt>
+
+ <dd>
+ Pengesampingan yang akan diterapkan bila <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
+ adalah {@code "true"} yang biasanya terjadi untuk build non-rilis
+ yang dihasilkan oleh alat IDE dan build. Trust-anchor yang ditetapkan dalam {@code
+ debug-overrides} akan ditambahkan ke semua konfigurasi lainnya dan penyematan
+ sertifikat tidak dilakukan bila rantai sertifikat server menggunakan satu dari
+ trust-anchor hanya-debug ini. Jika <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
+ adalah {@code "false"} maka bagian ini akan diabaikan sepenuhnya.
+ </dd>
+</dl>
+
+<h3 id="trust-anchors"><trust-anchors></h3>
+<dl class="xml">
+ <dt>
+ sintaks:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<trust-anchors>
+...
+</trust-anchors>
+</pre>
+ </dd>
+
+ <dt>
+ Bisa Berisi:
+ </dt>
+
+ <dd>
+ Sejumlah <code><a href="#certificates"><certificates></a></code>
+ </dd>
+
+ <dt>
+ Keterangan:
+ </dt>
+
+ <dd>
+ Set trust-anchor untuk koneksi aman.
+ </dd>
+</dl>
+
+
+<h3 id="certificates"><certificates></h3>
+<dl class="xml">
+<dt>sintaks:</dt>
+<dd><pre class="stx"><certificates src=["system" | "user" | "<i>raw resource</i>"]
+ overridePins=["true" | "false"] />
+</pre></dd>
+<dt>keterangan:</dt>
+<dd>Set sertifikat X.509 untuk elemen {@code trust-anchors}.</dd>
+
+<dt>atribut:</dt>
+<dd><dl class="attr">
+<dt>{@code src}</dt>
+<dd>
+Sumber sertifikat CA, bisa salah satu dari
+<ul>
+ <li>ID sumber daya mentah yang menunjuk ke file berisi sertifikat X.509.
+ Sertifikat harus dikodekan dalam format DER atau PEM. Dalam hal sertifikat
+ PEM, file <em>tidak boleh</em> berisi data tambahan non-PEM seperti
+ komentar.
+ </li>
+
+ <li>{@code "system"} untuk sertifikat CA sistem yang telah terpasang.
+ </li>
+
+ <li>{@code "user"} untuk sertifikat CA yang ditambahkan pengguna.
+ </li>
+</ul>
+</dd>
+
+<dt>{@code overridePins}</dt>
+<dd>
+ <p>
+ Menetapkan apakah CA dari sumber akan mengabaikan penyematan sertifikat. Jika {@code
+ "true"} kemudian rangkaian sertifikat melalui salah satu CA dari
+ sumber ini maka tidak dilakukan penyematan. Hal ini bisa berguna untuk debug CA
+ atau untuk mendukung dengan memungkinkan pengguna melakukan MiTM atas lalu lintas aman aplikasi Anda.
+ </p>
+
+ <p>
+ Default-nya adalah {@code "false"} kecuali jika ditetapkan dalam elemen {@code debug-overrides},
+ dalam hal demikian default-nya adalah {@code "true"}.
+ </p>
+</dd>
+</dl>
+</dd>
+
+
+<h3 id="pin-set"><pin-set></h3>
+
+<dl class="xml">
+ <dt>
+ sintaks:
+ </dt>
+
+ <dd>
+<pre class="stx">
+<pin-set expiration="date">
+...
+</pin-set>
+</pre>
+ </dd>
+
+ <dt>
+ Bisa Berisi:
+ </dt>
+
+ <dd>
+ Sejumlah <code><a href="#pin"><pin></a></code>
+ </dd>
+
+ <dt>
+ Keterangan:
+ </dt>
+
+ <dd>
+ Satu set pin kunci publik. Agar koneksi aman bisa dipercaya, salah satu
+ kunci publik dalam rantai kepercayaan harus berada dalam set pin. Lihat
+ <code><a href="#pin"><pin></a></code> untuk mengetahui format pin.
+ </dd>
+
+ <dt>
+ Atribut:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code expiration}
+ </dt>
+
+ <dd>
+ Tanggal, dalam format {@code yyyy-MM-dd}, pada saat dan setelah pin
+ kedaluwarsa, sehingga menonaktifkan penyematan. Jika atribut tidak disetel maka
+ pin tidak kedaluwarsa.
+ <p>
+ Tanggal kedaluwarsa membantu mencegah masalah konektivitas di aplikasi yang
+ tidak mengambil pembaruan untuk set pin mereka, misalnya karena pengguna
+ menonaktifkan pembaruan aplikasi.
+ </p>
+ </dd>
+ </dl>
+ </dd>
+</dl>
+
+<h3 id="pin"><pin></h3>
+<dl class="xml">
+ <dt>
+ sintaks:
+ </dt>
+
+ <dd>
+<pre class="stx">
+<pin digest=["SHA-256"]>base64 encoded digest of X.509
+ SubjectPublicKeyInfo (SPKI)</pin>
+</pre>
+ </dd>
+
+ <dt>
+ Atribut:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code digest}
+ </dt>
+
+ <dd>
+ Algoritme intisari yang digunakan untuk menghasilkan pin. Saat ini, hanya
+ {@code "SHA-256"} yang didukung.
+ </dd>
+ </dl>
+ </dd>
+</dl>
diff --git a/docs/html-intl/intl/in/training/basics/network-ops/data-saver.jd b/docs/html-intl/intl/in/training/basics/network-ops/data-saver.jd
new file mode 100644
index 0000000..abd4e43
--- /dev/null
+++ b/docs/html-intl/intl/in/training/basics/network-ops/data-saver.jd
@@ -0,0 +1,234 @@
+page.title=Data Saver
+metaDescription=Optimalisasi penggunaan data yang diaktifkan pengguna.
+page.keywords="android N", "data usage", "metered network"
+page.image=images/cards/card-nyc_2x.jpg
+@jd:body
+
+<div id="tb-wrapper">
+ <div id="tb">
+ <h2>
+ Dalam dokumen ini
+ </h2>
+
+ <ol>
+ <li>
+ <a href="#status">Memeriksa Preferensi Data Saver</a>
+ <ol>
+ <li>
+ <a href="#request-whitelist">Meminta izin daftar putih</a>
+ </li>
+ </ol>
+ </li>
+
+ <li>
+ <a href="#monitor-changes">Memantau Perubahan pada Preferensi
+ Data Saver</a>
+ </li>
+
+ <li>
+ <a href="#testing">Menguji dengan Perintah Android Debug Bridge</a>
+ </li>
+ </ol>
+ </div>
+</div>
+
+<p>
+ Selama penggunaan ponsel cerdas, biaya paket data seluler bisa saja
+ melebihi harga perangkat itu sendiri. Di N Developer Preview, pengguna bisa
+ mengaktifkan Data Saver berdasarkan lingkup perangkat untuk menghemat data, baik saat
+ roaming, mendekati akhir siklus penagihan, atau pada paket data prabayar kecil.
+</p>
+
+<p>
+ Bila pengguna mengaktifkan Data Saver di <strong>Settings</strong> dan perangkat
+ berada dalam jaringan berkuota, sistem akan memblokir penggunaan data latar belakang dan memberi tahu
+ aplikasi untuk menghemat penggunaan data latar depan bila memungkinkan. Pengguna bisa
+ memasukkan aplikasi tertentu ke daftar putih untuk memungkinkan penggunaan data berkuota bila Data
+ Saver diaktifkan.
+</p>
+
+<p>
+ N Developer Preview memperluas {@link android.net.ConnectivityManager}
+ API untuk menyediakan cara pada aplikasi untuk <a href="#status">menerima preferensi Data Saver
+ pengguna</a> dan <a href="#monitor-changes">memantau perubahan
+ preferensi</a>. Hal ini dianggap praktik terbaik bagi aplikasi untuk memeriksa apakah
+ pengguna telah mengaktifkan DataSaver dan berusaha membatasi penggunaan data latar depan dan
+ data latar belakang.
+</p>
+
+<h2 id="status">
+ Memeriksa Preferensi Data Saver
+</h2>
+
+<p>
+ Di N Developer Preview, aplikasi bisa menggunakan {@link
+ android.net.ConnectivityManager} API untuk menentukan pembatasan penggunaan data
+ apa yang sedang diterapkan. Metode {@code getRestrictBackgroundStatus()}
+ akan mengembalikan salah satu dari nilai berikut:
+</p>
+
+<dl>
+ <dt>
+ {@code RESTRICT_BACKGROUND_STATUS_DISABLED}
+ </dt>
+
+ <dd>
+ Data Saver dinonaktifkan.
+ </dd>
+
+ <dt>
+ {@code RESTRICT_BACKGROUND_STATUS_ENABLED}
+ </dt>
+
+ <dd>
+ Pengguna telah mengaktifkan Data Saver untuk aplikasi ini. Aplikasi harus berusaha membatasi
+ penggunaan data di latar depan dan dengan halus menangani pembatasan penggunaan
+ data latar belakang.
+ </dd>
+
+ <dt>
+ {@code RESTRICT_BACKGROUND_STATUS_WHITELISTED}
+ </dt>
+
+ <dd>
+ Pengguna telah mengaktifkan Data Saver namun aplikasi telah dimasukkan dalam daftar putih. Aplikasi harus
+ tetap berusaha membatasi penggunaan data latar belakang dan latar depan.
+ </dd>
+</dl>
+
+<p>
+ Hal ini dianggap praktik terbaik untuk membatasi penggunaan data bila perangkat
+ terhubung ke jaringan berkuota, meskipun Data Saver telah dinonaktifkan atau aplikasi
+ telah dimasukkan dalam daftar putih. Kode contoh berikut menggunakan {@link
+ android.net.ConnectivityManager#isActiveNetworkMetered
+ ConnectivityManager.isActiveNetworkMetered()} dan {@code
+ ConnectivityManager.getRestrictBackgroundStatus()} untuk menentukan berapa banyak data
+ yang harus digunakan aplikasi:
+</p>
+
+<pre>
+ConnectivityManager connMgr = (ConnectivityManager)
+ getSystemService(Context.CONNECTIVITY_SERVICE);
+// Checks if the device is on a metered network
+if (connMgr.isActiveNetworkMetered()) {
+ // Checks user’s Data Saver settings.
+ switch (connMgr.getRestrictBackgroundStatus()) {
+ case RESTRICT_BACKGROUND_STATUS_ENABLED:
+ // Background data usage is blocked for this app. Wherever possible,
+ // the app should also use less data in the foreground.
+
+ case RESTRICT_BACKGROUND_STATUS_WHITELISTED:
+ // The app is whitelisted. Wherever possible,
+ // the app should use less data in the foreground and background.
+
+ case RESTRICT_BACKGROUND_STATUS_DISABLED:
+ // Data Saver is disabled. Since the device is connected to a
+ // metered network, the app should use less data wherever possible.
+ }
+} else {
+ // The device is not on a metered network.
+ // Use data as required to perform syncs, downloads, and updates.
+}
+</pre>
+
+<h3 id="request-whitelist">
+ Meminta izin daftar putih
+</h3>
+
+<p>
+ Jika aplikasi Anda perlu menggunakan data di latar belakang, aplikasi bisa meminta izin
+ daftar putih dengan mengirim
+ <code>Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS</code>
+ yang mengandung URI dari nama paket aplikasi Anda: misalnya,
+ <code>package:MY_APP_ID</code>.
+</p>
+
+<p>
+ Mengirim intent dan URI akan membuka aplikasi <strong>Settings</strong> dan
+ menampilkan setelan penggunaan data untuk aplikasi Anda. Pengguna nanti bisa memutuskan apakah akan
+ mengaktifkan data latar belakang untuk aplikasi Anda. Sebelum Anda mengirim intent ini, sebaiknya
+ tanyakan kepada pengguna terlebih dahulu apakah mereka ingin membuka aplikasi
+ <strong>Settings</strong> untuk keperluan mengaktifkan penggunaan
+ data latar belakang.
+</p>
+
+<h2 id="monitor-changes">
+ Memantau Perubahan pada Preferensi Data Saver
+</h2>
+
+<p>
+ Aplikasi bisa memantau perubahan pada preferensi Data Saver dengan membuat {@link
+ android.content.BroadcastReceiver} untuk memantau {@code
+ ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED} dan secara dinamis
+ mendaftarkan penerima pada {@link android.content.Context#registerReceiver
+ Context.registerReceiver()}. Bila menerima siaran ini, aplikasi harus
+ <a href="#status">memeriksa apakah preferensi Data Saver baru memengaruhi
+ izinnya</a> dengan memanggil {@code
+ ConnectivityManager.getRestrictBackgroundStatus()}.
+</p>
+
+<p class="note">
+ <strong>Catatan:</strong> Sistem hanya mengirim siaran ini ke aplikasi yang
+ secara dinamis mendaftar padanya dengan {@link
+ android.content.Context#registerReceiver Context.registerReceiver()}. Aplikasi
+ yang mendaftar untuk menerima siaran ini dalam manifes mereka
+ tidak akan menerimanya.
+</p>
+
+<h2 id="testing">
+ Menguji dengan Perintah Android Debug Bridge
+</h2>
+
+<a href="{@docRoot}tools/help/adb.html">Android Debug Bridge (ADB)</a>
+menyediakan beberapa perintah yang bisa Anda gunakan untuk memeriksa dan
+mengonfigurasi izin jaringan:
+
+<dl>
+ <dt>
+ <code>$ adb shell dumpsys netpolicy</code>
+ </dt>
+
+ <dd>
+ Menghasilkan laporan berisi setelan pembatasan jaringan latar belakang
+ global saat ini, UID paket saat ini di daftar putih, dan izin jaringan
+ untuk paket yang diketahui lainnya.
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy</code>
+ </dt>
+
+ <dd>
+ Menampilkan daftar lengkap dari perintah Network Policy Manager (netpolicy).
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy set restrict-background
+ <boolean></code>
+ </dt>
+
+ <dd>
+ Mengaktifkan atau menonaktifkan mode Data Saver saat meneruskan <code>true</code> atau
+ <code>false</code>, masing-masing.
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy add restrict-background-whitelist
+ <UID></code>
+ </dt>
+
+ <dd>
+ Menambahkan UID paket tertentu ke daftar putih untuk mengizinkan penggunaan data berkuota
+ di latar belakang.
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy remove restrict-background-whitelist
+ <UID></code>
+ </dt>
+
+ <dd>
+ Membuang UID paket tertentu dari daftar putih untuk memblokir
+ penggunaan data berkuota di latar belakang saat Data Saver diaktifkan.
+ </dd>
+</dl>
diff --git a/docs/html-intl/intl/in/training/tv/playback/picture-in-picture.jd b/docs/html-intl/intl/in/training/tv/playback/picture-in-picture.jd
new file mode 100644
index 0000000..41af6de
--- /dev/null
+++ b/docs/html-intl/intl/in/training/tv/playback/picture-in-picture.jd
@@ -0,0 +1,213 @@
+page.title=Gambar-dalam-gambar
+page.keywords=pratinjau,sdk,PIP,Gambar-dalam-gambar
+page.tags=androidn
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>Dalam dokumen ini</h2>
+<ol>
+ <li><a href="#declaring">Mendeklarasikan Bahwa Aktivitas Anda Mendukung
+Gambar-dalam-gambar</a></li>
+ <li><a href="#pip_button">Mengalihkan Aktivitas Anda ke Gambar-dalam-gambar</a>
+</li>
+ <li><a href="#handling_ui">Menangani UI Selama Gambar-dalam-gambar</a>
+</li>
+ <li><a href="#continuing_playback">Melanjutkan Pemutaran Video Saat dalam
+Gambar-dalam-gambar</a></li>
+ <li><a href="#single_playback">Menggunakan Aktivitas Pemutaran Tunggal untuk
+ Gambar-dalam-gambar</a></li>
+ <li><a href="#best">Praktik Terbaik</a></li>
+</ol>
+
+<h2>Lihat Juga</h2>
+<ol>
+ <li><a href="{@docRoot}preview/features/multi-window.html">Dukungan
+Multi-Jendela</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>Di Android N, pengguna Android TV sekarang bisa menonton video
+dalam jendela yang disematkan di sudut layar saat menyusuri
+aplikasi. Mode gambar-dalam-gambar (PIP) memungkinkan aplikasi menjalankan aktivitas
+video dalam jendela yang disematkan selagi aktivitas lain tetap berjalan di
+latar belakang. Jendela PIP memungkinkan pengguna melakukan multitasking saat menggunakan aplikasi Anda, yang
+membantu pengguna menjadi lebih produktif.</p>
+
+<p>Aplikasi Anda bisa memutuskan kapan memicu mode PIP. Inilah beberapa contoh
+kapan memasuki mode PIP:</p>
+
+<ul>
+<li>Aplikasi Anda bisa memindahkan video ke dalam mode PIP bila pengguna mengarah
+mundur dari video untuk menjelajah materi lainnya.</li>
+<li>Aplikasi Anda bisa mengalihkan video ke dalam mode PIP selagi pengguna menonton akhir episode
+dari materi. Layar utama menampilkan informasi
+promosi atau rangkuman tentang episode berikutnya dalam seri tersebut.</li>
+<li>Aplikasi Anda bisa menyediakan suatu cara bagi pengguna untuk mengantre materi tambahan selagi
+mereka menonton video. Video terus dimainkan dalam mode PIP selagi layar
+utama menampilkan aktivitas pemilihan materi.</li>
+</ul>
+
+<p>Jendela PIP memiliki luas 240x135 dp dan ditampilkan di layer paling atas pada salah satu
+dari empat sudut layar, yang dipilih oleh sistem. Pengguna bisa memunculkan
+menu PIP yang memungkinkan mereka untuk beralih mode dari jendela PIP ke layar penuh, atau menutup jendela
+PIP, dengan menekan dan menahan tombol <b>Beranda</b> pada remote. Jika video
+lain mulai diputar pada layar utama, jendela PIP secara otomatis
+ditutup. Pengguna juga bisa menutup jendela PIP melalui Recents.</p>
+
+<img src="{@docRoot}images/android-7.0/pip-active.png" />
+<p class="img-caption"><strong>Gambar 1.</strong> Video
+Gambar-dalam-gambar terlihat di sudut layar selagi pengguna menjelajahi materi pada layar
+utama.</p>
+
+<p>PIP memanfaatkan API multi-jendela yang tersedia di Android N untuk
+menyediakan jendela hamparan video yang disematkan. Untuk menambahkan PIP ke aplikasi, Anda harus
+mendaftarkan aktivitas yang mendukung PIP, mengalihkan aktivitas Anda ke mode PIP bila
+diperlukan, serta memastikan elemen UI disembunyikan dan pemutaran video berlanjut bila
+aktivitas dalam mode PIP.</p>
+
+<h2 id="declaring">Mendeklarasikan Bahwa Aktivitas Anda Mendukung Gambar-dalam-gambar</h2>
+
+<p>Secara default, sistem tidak secara otomatis mendukung PIP untuk aplikasi.
+Jika Anda ingin mendukung PIP dalam aplikasi, daftarkan aktivitas
+video Anda dalam manifes dengan menyetel
+<code>android:supportsPictureInPicture</code> dan
+<code>android:resizeableActivity</code> ke <code>true</code>. Juga, tetapkan
+bahwa aktivitas Anda menangani perubahan konfigurasi layout sehingga aktivitas
+Anda tidak diluncurkan ulang saat terjadi perubahan layout selama transisi mode PIP.</p>
+
+<pre>
+<activity android:name="VideoActivity"
+ android:resizeableActivity="true"
+ android:supportsPictureInPicture="true"
+ android:configChanges=
+ "screenSize|smallestScreenSize|screenLayout|orientation"
+ ...
+</pre>
+
+<p>Saat mendaftarkan aktivitas Anda, ingatlah bahwa dalam mode PIP aktivitas
+Anda akan ditampilkan pada jendela hamparan kecil pada layar TV. Aktivitas
+pemutaran video dengan UI minimal akan memberikan pengalaman pengguna terbaik. Aktivitas yang
+mengandung elemen UI kecil mungkin tidak memberikan pengalaman pengguna yang baik
+ketika beralih ke mode PIP, karena pengguna tidak dapat melihat elemen UI secara jelas
+di jendela PIP.</p>
+
+<h2 id="pip_button">Mengalihkan Aktivitas Anda ke Gambar-dalam-gambar</h2>
+
+Bila Anda perlu untuk mengalihkan aktivitas ke mode PIP, panggil
+<code>Activity.enterPictureInPictureMode()</code>. Contoh berikut mengalihkan
+ke mode PIP bila pengguna memilih tombol PIP khusus pada baris
+kontrol media:</p>
+
+<pre>
+@Override
+public void onActionClicked(Action action) {
+ if (action.getId() == R.id.lb_control_picture_in_picture) {
+ getActivity().enterPictureInPictureMode();
+ return;
+ }
+ ...
+</pre>
+
+<p>Menambahkan tombol PIP ke baris kontrol media Anda akan memungkinkan pengguna dengan mudah beralih
+ke mode PIP selagi mengontrol pemutaran video.</p>
+
+<img src="{@docRoot}images/android-7.0/pip-button.png" />
+<p class="img-caption"><strong>Gambar 1.</strong> Tombol
+gambar-dalam-gambar pada baris kontrol media.</p>
+
+<p>Android N menyertakan kelas
+<code>PlaybackControlsRow.PictureInPictureAction</code> baru yang mendefinisikan
+tindakan PIP baris kontrol dan menggunakan ikon PIP.</p>
+
+<h2 id="handling_ui">Menangani UI Selama Gambar-dalam-gambar</h2>
+
+<p>Bila aktivitas memasuki mode PIP, aktivitas Anda seharusnya hanya menampilkan pemutaran
+video. Buang elemen UI sebelum aktivitas Anda memasuki PIP,
+dan pulihkan elemen ini bila aktivitas Anda beralih ke layar penuh lagi.
+Ganti <code>Activity.onPictureInPictureModeChanged()</code> atau
+<code>Fragment.onPictureInPictureModeChanged()</code> dan aktifkan atau
+nonaktifkan elemen UI saat diperlukan, misalnya:</p>
+
+<pre>
+@Override
+public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
+ if (isInPictureInPictureMode) {
+ // Hide the controls in picture-in-picture mode.
+ ...
+ } else {
+ // Restore the playback UI based on the playback status.
+ ...
+ }
+}
+</pre>
+
+<h2 id="continuing_playback">Melanjutkan Pemutaran Video Saat dalam
+Gambar-dalam-gambar</h2>
+
+<p>Bila aktivitas Anda beralih ke PIP, sistem akan menganggap aktivitas tersebut berada dalam
+keadaan berhenti sementara, dan akan memanggil metode <code>onPause()</code> aktivitas Anda. Pemutaran
+video tidak boleh berhenti sementara dan harus terus diputar jika aktivitas tersebut
+berhenti sementara karena mode PIP. Periksa PIP dalam metode
+<code>onPause()</code> aktivitas Anda dan tangani pemutaran dengan tepat,
+misalnya:</p>
+
+<pre>
+@Override
+public void onPause() {
+ // If called while in PIP mode, do not pause playback
+ if (isInPictureInPictureMode()) {
+ // Continue playback
+ ...
+ }
+ // If paused but not in PIP, pause playback if necessary
+ ...
+}
+</pre>
+
+<p>Bila aktivitas meninggalkan mode PIP dan kembali ke mode layar penuh, sistem
+akan melanjutkan aktivitas Anda dan memanggil metode <code>onResume()</code>.</p>
+
+<h2 id="single_playback">Menggunakan Aktivitas Pemutaran Tunggal untuk
+ Gambar-dalam-gambar</h2>
+
+<p>Di aplikasi Anda, seorang pengguna bisa memilih video baru saat menyusuri materi di
+layar utama, selagi aktivitas pemutaran video dalam mode PIP. Putar
+video baru di aktivitas pemutaran yang ada dalam mode layar penuh, sebagai ganti
+meluncurkan aktivitas baru yang dapat membingungkan pengguna.</p>
+
+<p>Guna memastikan aktivitas tunggal digunakan untuk permintaan pemutaran video dan
+beralih ke atau dari mode PIP bila dibutuhkan, setel
+<code>android:launchMode</code> aktivitas ke <code>singleTask</code> dalam manifes Anda:
+</p>
+
+<pre>
+<activity android:name="VideoActivity"
+ ...
+ android:supportsPictureInPicture="true"
+ android:launchMode="singleTask"
+ ...
+</pre>
+
+<p>Di aktivitas Anda, ganti {@link android.app.Activity#onNewIntent
+Activity.onNewIntent()} dan tangani video baru, yang akan menghentikan pemutaran video
+jika diperlukan.</p>
+
+<h2 id="best">Praktik Terbaik</h2>
+
+<p>PIP ditujukan untuk aktivitas yang memutar video layar penuh. Saat mengalihkan
+aktivitas Anda ke mode PIP, hindari menampilkan apa pun selain materi video.
+Pantau saat aktivitas Anda memasuki mode PIP dan sembunyikan elemen UI, seperti dijelaskan
+dalam <a href="#handling_ui">Menangani UI Selama Gambar-dalam-gambar</a>.</p>
+
+<p>Karena jendela PIP ditampilkan sebagai jendela mengambang di sudut
+layar, Anda harus menghindari menampilkan informasi penting di layar utama
+di area mana saja yang bisa terhalang oleh jendela PIP.</p>
+
+<p>Bila aktivitas ada berada dalam mode PIP, secara default aktivitas itu tidak mendapatkan fokus masukan. Untuk
+menerima kejadian masukan saat dalam mode PIP, gunakan
+<code>MediaSession.setMediaButtonReceiver()</code>.</p>
diff --git a/docs/html-intl/intl/in/training/tv/tif/content-recording.jd b/docs/html-intl/intl/in/training/tv/tif/content-recording.jd
new file mode 100644
index 0000000..3389dbf
--- /dev/null
+++ b/docs/html-intl/intl/in/training/tv/tif/content-recording.jd
@@ -0,0 +1,142 @@
+page.title=Perekaman TV
+page.keywords=pratinjau,sdk,tv,perekaman
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>Dalam dokumen ini</h2>
+ <ol>
+ <li><a href="#supporting">Menunjukkan Dukungan untuk Perekaman</a></li>
+ <li><a href="#recording">Merekam Sesi</a></li>
+ <li><a href="#errors">Menangani Kesalahan Perekaman</a></li>
+ <li><a href="#sessions">Mengelola Sesi yang Direkam</a></li>
+ <li><a href="#best">Praktik Terbaik</a></li>
+ </ol>
+</div>
+</div>
+
+<p>Layanan masukan TV memungkinkan pengguna menghentikan sementara dan melanjutkan pemutaran saluran melalui
+API perekaman. Android N telah berkembang hingga ke perekaman
+dengan memungkinkan pengguna menyimpan beberapa sesi rekaman.</p>
+
+<p>Pengguna bisa menjadwalkan rekaman terlebih dahulu, atau memulai rekaman sambil menonton
+suatu acara. Setelah sistem menyimpan rekaman, pengguna bisa menjelajah, menata,
+dan memutar kembali rekaman tersebut menggunakan aplikasi TV di sistem.</p>
+
+<p>Jika Anda ingin menyediakan fungsi perekaman untuk layanan masukan TV,
+Anda harus menunjukkan pada sistem bahwa aplikasi Anda mendukung perekaman, mengimplementasikan
+kemampuan merekam program, menangani dan mengomunikasikan kesalahan yang muncul
+selama perekaman, dan mengelola sesi perekaman Anda.</p>
+
+<p class="note"><strong>Catatan:</strong> Aplikasi Live Channels belum
+menyediakan cara bagi pengguna untuk membuat atau mengakses perekaman. Hingga dibuat perubahan
+di aplikasi Live Channels, mungkin sulit menguji sepenuhnya pengalaman
+perekaman untuk layanan masukan TV Anda.</p>
+
+<h2 id="supporting">Menunjukkan Dukungan untuk Perekaman</h2>
+
+<p>Untuk memberi tahu sistem bahwa layanan masukan TV Anda mendukung perekaman, setel
+atribut <code>android:canRecord</code> di file XML metadata layanan Anda
+ke <code>true</code>:
+</p>
+
+<pre>
+<tv-input xmlns:android="http://schemas.android.com/apk/res/android"
+ <b>android:canRecord="true"</b>
+ android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />
+</pre>
+
+<p>Untuk informasi selengkapnya mengenai layanan file metadata, lihat
+<a href="{@docRoot}training/tv/tif/tvinput.html#manifest">Mendeklarasikan Layanan Masukan TV Anda
+di Manifes</a>.
+</p>
+
+<p>Atau, Anda bisa menunjukkan dukungan perekaman dalam kode Anda menggunakan
+langkah-langkah ini:</p>
+
+<ol>
+<li>Dalam metode <code>TvInputService.onCreate()</code> Anda, buat objek
+<code>TvInputInfo</code> baru menggunakan kelas <code>TvInputInfo.Builder</code>.
+</li>
+<li>Saat membuat objek <code>TvInputInfo</code> baru, panggil
+<code>setCanRecord(true)</code> sebelum memanggil <code>build()</code> untuk
+ menunjukkan layanan Anda mendukung perekaman.</li>
+<li>Daftarkan objek <code>TvInputInfo</code> Anda pada sistem dengan memanggil
+<code>TvInputManager.updateTvInputInfo()</code>.</li>
+</ol>
+
+<h2 id="recording">Merekam Sesi</h2>
+
+<p>Setelah layanan masukan TV Anda mendaftar bahwa mendukung fungsionalitas
+perekaman, sistem akan memanggil
+<code>TvInputService.onCreateRecordingSession()</code> bila perlu untuk mengakses
+implementasi perekaman aplikasi Anda. Implementasikan subkelas
+<code>TvInputService.RecordingSession</code> Anda sendiri dan kembalikan
+bila callback <code>onCreateRecordingSession()</code> dipicu.
+ Subkelas ini bertanggung jawab mengalihkan ke saluran data yang benar,
+merekam data yang diminta, dan memberitahukan status perekaman serta kesalahan ke
+sistem.</p>
+
+<p>Bila sistem memanggil <code>RecordingSession.onTune()</code>, dengan meneruskan
+URI saluran, setel ke saluran yang ditetapkan URI. Beri tahu sistem bahwa
+aplikasi Anda telah disetel ke saluran yang diinginkan dengan memanggil <code>notifyTuned()</code>,
+atau, jika aplikasi Anda tidak bisa disetel ke saluran yang tepat, panggil
+<code>notifyError()</code>.</p>
+
+<p>Sistem berikutnya akan memanggil callback <code>RecordingSession.onStartRecording()</code>.
+ Aplikasi Anda harus segera mulai merekam. Bila sistem memanggil
+callback ini, sistem mungkin akan memberikan URI yang berisi informasi tentang program
+yang akan direkam. Bila perekaman selesai, Anda perlu menyalin data
+ini ke tabel data <code>RecordedPrograms</code>.</p>
+
+<p>Terakhir, sistem akan memanggil <code>RecordingSession.onStopRecording()</code>.
+Pada tahap ini, aplikasi Anda harus segera berhenti merekam. Anda juga perlu
+membuat entri dalam tabel <code>RecordedPrograms</code>. Entri ini harus
+menyertakan URI data sesi yang direkam dalam kolom
+<code>RecordedPrograms.COLUMN_RECORDING_DATA_URI</code>, dan informasi
+program yang diberikan sistem dalam panggilan awal ke
+<code>onStartRecording()</code>.</p>
+
+<p>Untuk detail selengkapnya tentang cara mengakses tabel <code>RecordedPrograms</code>
+lihat <a href="#sessions">Mengelola Sesi yang Direkam</a>.</p>
+
+<h2 id="errors">Menangani Kesalahan Perekaman</h2>
+
+<p>Jika terjadi kesalahan selama perekaman, yang menghasilkan data terekam yang tidak bisa digunakan,
+beri tahu sistem dengan memanggil <code>RecordingSession.notifyError()</code>.
+Begitu juga, Anda bisa memanggil <code>notifyError()</code> setelah sesi rekaman dibuat
+agar sistem mengetahui bahwa aplikasi Anda tidak bisa lagi merekam sesi.</p>
+
+<p>Jika terjadi kesalahan selama perekaman, namun Anda ingin menyediakan rekaman parsial
+yang bisa digunakan pengguna untuk pemutaran, panggil
+<code>RecordingSession.notifyRecordingStopped()</code> untuk memungkinkan sistem
+menggunakan sesi parsial.</p>
+
+<h2 id="sessions">Mengelola Sesi yang Direkam</h2>
+
+<p>Sistem menyimpan informasi untuk semua sesi yang direkam dari semua
+aplikasi saluran yang mampu merekam dalam tabel penyedia materi <code>TvContract.RecordedPrograms</code>.
+ Informasi ini bisa diakses lewat URI materi
+<code>RecordedPrograms.Uri</code>. Gunakan API penyedia materi untuk
+membaca, menambahkan, dan menghapus entri dari tabel ini.</p>
+
+<p>Untuk informasi selengkapnya tentang menangani data penyedia materi, lihat
+<a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
+Dasar-Dasar Penyedia Materi</a>.</p>
+
+<h2 id="best">Praktik Terbaik</h2>
+
+<p>Perangkat TV mungkin memiliki penyimpanan terbatas, jadi pertimbangkan sebaik mungkin saat
+mengalokasikan penyimpanan untuk menyimpan sesi rekaman. Gunakan
+<code>RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)</code> bila
+tidak cukup ruang untuk menyimpan sesi rekaman.</p>
+
+<p>Bila pengguna memulai perekaman, Anda harus memulai perekaman data
+secepatnya. Untuk memfasilitasinya, selesaikan setiap tugas yang memakan waktu di awal,
+seperti mengakses dan mengalokasikan ruang penyimpanan, saat sistem memanggil callback
+<code>onCreateRecordingSession()</code>. Hal ini akan memungkinkan Anda memulai
+perekaman dengan segera bila callback <code>onStartRecording()</code>
+dipicu.</p>
diff --git a/docs/html-intl/intl/ja/about/versions/marshmallow/android-6.0-testing.jd b/docs/html-intl/intl/ja/about/versions/marshmallow/android-6.0-testing.jd
new file mode 100644
index 0000000..9f03412
--- /dev/null
+++ b/docs/html-intl/intl/ja/about/versions/marshmallow/android-6.0-testing.jd
@@ -0,0 +1,190 @@
+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/android-7.0-changes.jd b/docs/html-intl/intl/ja/about/versions/nougat/android-7.0-changes.jd
new file mode 100644
index 0000000..0fd9412
--- /dev/null
+++ b/docs/html-intl/intl/ja/about/versions/nougat/android-7.0-changes.jd
@@ -0,0 +1,610 @@
+page.title=動作の変更点
+page.keywords=preview,sdk,compatibility
+meta.tags="preview", "compatibility"
+page.tags="preview", "developer preview"
+page.image=images/cards/card-n-changes_2x.png
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>このドキュメントの内容</h2>
+
+<ol>
+ <li><a href="#perf">パフォーマンスの向上</a>
+ <ol>
+ <li><a href="#doze">Doze</a></li>
+ <li><a href="#bg-opt">バックグラウンド処理の最適化</a></li>
+ </ol>
+ </li>
+ <li><a href="#perm">パーミッションの変更</a>
+ </li>
+ <li><a href="#sharing-files">アプリ間のファイルの共有</a></li>
+ <li><a href="#accessibility">ユーザー補助機能の改善</a>
+ <ol>
+ <li><a href="#screen-zoom">画面のズーム</a></li>
+ <li><a href="#vision-settings">セットアップ ウィザードの [Vision Settings]</a></li>
+ </ol>
+ </li>
+ <li><a href="#ndk">プラットフォーム ライブラリにリンクした NDK アプリ</a></li>
+ <li><a href="#afw">Android for Work</a></li>
+ <li><a href="#annotations">アノテーションの保持</a></li>
+ <li><a href="#other">その他の重要事項</a></li>
+</ol>
+
+<h2>関連ドキュメント</h2>
+<ol>
+ <li><a href="{@docRoot}preview/api-overview.html">Android N API の概要</a>
+</li>
+</ol>
+
+</div>
+</div>
+
+
+<p>
+ 新しい機能に加えて、Android N では、さまざまなシステムおよび API の動作が変更されています。
+このドキュメントでは、アプリ開発において把握しておくべき主な変更点について説明します。
+
+
+</p>
+
+<p>
+ 過去に Android 向けのアプリを公開したことがある場合は、そのアプリが今回のプラットフォームの変更による影響を受ける可能性があることに注意してください。
+
+</p>
+
+
+<h2 id="perf">電池とメモリ</h2>
+
+<p>
+Android N では、端末の電池寿命を改善したり、RAM の使用量を削減したりするために、システムの動作がいくつか変更されています。
+これらの変更は、システム リソースへのアプリのアクセスに加え、特定の暗黙的インテントを介して他のアプリとやり取りする方法に影響を及ぼす可能性があります。
+
+
+</p>
+
+<h3 id="doze">Doze</h3>
+
+<p>
+ Android 6.0(API レベル 23)で Doze が導入されました。これは、ユーザーが端末を電源と接続せずに静止状態にし、画面をオフにすると、CPU とネットワークのアクティビティを保留して電池寿命を改善するものです。
+
+Android N では、Doze が改良されています。端末を電源と接続せずに画面をオフにすると、端末が静止していなくても(たとえば、ユーザーが携帯端末をポケットに入れて持ち歩いている場合)、CPU およびネットワーク制限のサブセットがアプリに適用されます。
+
+
+
+</p>
+
+
+<img src="{@docRoot}images/android-7.0/doze-diagram-1.png" alt="" height="251px" id="figure1" />
+<p class="img-caption">
+ <strong>図 1.</strong> Doze が第 1 レベルのシステム アクティビティ制限を適用して、電池寿命を改善
+
+</p>
+
+<p>
+ 端末が電池電源で動作しているときに画面をしばらくオフにすると、端末は Doze モードになり、制限の最初のサブセットが適用されます。
+これにより、アプリのネットワーク アクセスが切断されてジョブと同期が保留されます。
+端末が Doze モードに入った後、しばらくの間静止状態になると、残りの Doze 制限が {@link android.os.PowerManager.WakeLock}、{@link android.app.AlarmManager} アラーム、GPS、Wi-Fi スキャンに適用されます。
+
+
+適用される Doze 制限が一部であるか完全なものであるかには関係なく、端末は Doze モードから短時間抜け出し、メンテナンス ウィンドウと呼ばれる状態になります。このとき、アプリはネットワーク アクセスを許可され、保留されたジョブや同期を実行することができます。
+
+
+
+</p>
+
+
+<img src="{@docRoot}images/android-7.0/doze-diagram-2.png" alt="" id="figure2" />
+<p class="img-caption">
+ <strong>図 2.</strong> 端末がしばらくの間静止状態になると、Doze が第 2 レベルのシステム アクティビティ制限を適用する
+
+</p>
+
+<p>
+ 画面をオンにするか、端末を電源に接続すると、Doze モードは解除され、これらの処理の制限は適用されなくなります。
+<a href="{@docRoot}training/monitoring-device-state/doze-standby.html">Doze とアプリ スタンバイ用に最適化する</a>で説明したように、今回追加された動作は、Android 6.0(API レベル 23)で導入された以前のバージョンの Doze にアプリを対応させるための推奨事項とベスト プラクティスには影響を及ぼしません。
+
+
+
+メッセージの送受信に Google Cloud Messaging(GCM)を使用するなどの推奨事項を引き続き順守して、追加の Doze 動作に対応するためにアップデートを計画する必要があります。
+
+
+
+</p>
+
+
+<h3 id="bg-opt">Project Svelte:バックグラウンド処理の最適化</h3>
+
+<p>
+ Android N では、メモリ使用量と消費電力を最適化するために、3 つの暗黙的なブロードキャストが削除されています。
+この変更が必要になるのは、暗黙的なブロードキャストが行われると、バックグラウンドでブロードキャストをリッスンするように登録されているアプリが頻繁に起動されるためです。
+
+これらのブロードキャストを削除すると端末のパフォーマンスとユーザー エクスペリエンスが大幅に向上します。
+
+</p>
+
+<p>
+ モバイル端末では、Wi-Fi とモバイルデータ間を移動するときなど、接続が頻繁に変化します。
+現在のアプリでは、暗黙的な {@link
+ android.net.ConnectivityManager#CONNECTIVITY_ACTION} ブロードキャストのレシーバーをマニフェストに登録することにより、接続の変化を監視できるようになっています。
+
+多くのアプリがこのブロードキャストを受信する登録を行っているので、一度ネットワークの切り替えが起こるだけですべてのアプリがアクティブになり、ブロードキャストが同時に処理されます。
+
+
+</p>
+
+<p>
+ 同様に、旧バージョンの Android では、暗黙的な {@link
+ android.hardware.Camera#ACTION_NEW_PICTURE} ブロードキャストと {@link
+ android.hardware.Camera#ACTION_NEW_VIDEO} ブロードキャストをカメラなどの他のアプリから受信するよう登録できました。
+ユーザーがカメラアプリで写真を撮ると、これらのアプリがアクティブになり、ブロードキャストが処理されます。
+
+</p>
+
+<p>
+ Android N では、こういった問題を緩和するために、以下の最適化手法が適用されます。
+
+</p>
+
+<ul>
+ <li>Android N 向けのアプリは、{@link
+ android.net.ConnectivityManager#CONNECTIVITY_ACTION} ブロードキャストを受信しません。これは、アプリにこれらのイベントの通知をリクエストするマニフェスト エントリがある場合も同様です。
+実行されているアプリが {@link android.content.BroadcastReceiver} で通知をリクエストした場合は、メインスレッドで {@code CONNECTIVITY_CHANGE} を引き続きリッスンできます。
+
+
+ </li>
+
+ <li>アプリは、{@link
+ android.hardware.Camera#ACTION_NEW_PICTURE} ブロードキャストまたは {@link
+ android.hardware.Camera#ACTION_NEW_VIDEO} ブロードキャストを送受信できません。この最適化は、Android N 向けのアプリだけでなく、すべてのアプリに影響を及ぼします。
+
+ </li>
+</ul>
+
+<p>アプリでこれらのインテントのいずれかを使用する場合は、Android N 端末を適切にターゲットにできるよう可能な限りインテントとの依存性を削除する必要があります。
+
+ Android フレームワークは、これらの暗黙的なブロードキャストの必要性を軽減するいくつかのソリューションを提供します。
+たとえば、{@link
+ android.app.job.JobScheduler} API は、従量制ではないネットワークへの接続など、指定された条件のときに、ネットワーク操作をスケジュールするための堅牢なメカニズムを提供します。
+
+また、{@link
+ android.app.job.JobScheduler} を使用して、コンテンツ プロバイダの変更に対応することもできます。
+</p>
+
+<p>
+ N でのバックグラウンド処理の最適化や、アプリで必要となる対応の詳細については、<a href="{@docRoot}preview/features/background-optimization.html">バックグラウンド処理の最適化</a>をご覧ください。
+
+
+</p>
+
+<h2 id="perm">パーミッションの変更</h2>
+
+<p>
+ Android N では、アプリに影響を及ぼす可能性のあるパーミッションが変更されています。
+</p>
+
+<h3 id="permfilesys">ファイル システムのパーミッションの変更</h3>
+
+<p>
+ プライベート ファイルのセキュリティを強化するために、Android N 以降向けのアプリのプライベート ディレクトリにはアクセス制限があります(<code>0700</code>)。
+
+ この設定により、サイズや存在など、プライベート ファイルのメタデータの漏洩を防ぐことができます。
+このパーミッションの変更には、以下のような複数の副作用があります。
+</p>
+
+<ul>
+ <li>
+ プライベート ファイルの所有者はこのファイル パーミッションを緩和することができず、{@link android.content.Context#MODE_WORLD_READABLE} や {@link android.content.Context#MODE_WORLD_WRITEABLE} を使用してこれを実行しようとすると、{@link java.lang.SecurityException} がトリガーされます。
+
+
+
+
+ <p class="note">
+ <strong>注:</strong>現在のところ、この制限は完全には適用されていません。
+ アプリはネイティブ API や {@link java.io.File File} API を使用して、プライベート ディレクトリのパーミッションを変更できる場合があります。
+ただし、プライベート ディレクトリのパーミッションを緩和できないようにすることをお勧めします。
+
+ </p>
+ </li>
+ <li>
+ パッケージ ドメイン以外の <code>file://</code> URI を渡すと、レシーバーがアクセスできないパスになる可能性があります。
+そのため、<code>file://</code> URI を渡そうとすると、<code>FileUriExposedException</code> がトリガーされます。
+
+プライベート ファイルのコンテンツの共有には、{@link
+ android.support.v4.content.FileProvider} を使用することをお勧めします。
+
+ </li>
+ <li>
+ {@link android.app.DownloadManager} では、ファイル名でプライベートに保存されたファイルを共有することはできなくなりました。
+以前のアプリで {@link
+ android.app.DownloadManager#COLUMN_LOCAL_FILENAME} にアクセスした場合、このパスにアクセスできないことがあります。
+Android N 以降向けのアプリが、{@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME} にアクセスしようとすると、{@link java.lang.SecurityException} がトリガーされます。
+
+
+
+ ダウンロードの場所を {@link
+ android.app.DownloadManager.Request#setDestinationInExternalFilesDir
+ DownloadManager.Request.setDestinationInExternalFilesDir()} や {@link
+ android.app.DownloadManager.Request#setDestinationInExternalPublicDir
+ DownloadManager.Request.setDestinationInExternalPublicDir()} を使用してパブリックな場所に設定する以前のアプリは、{@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME} でこのパスにアクセスできますが、このメソッドは使用しないことをお勧めします。
+
+
+
+
+
+{@link android.app.DownloadManager} で公開されているファイルへのアクセスには、{@link android.content.ContentResolver#openFileDescriptor
+ ContentResolver.openFileDescriptor()} を使用することをお勧めします。
+
+
+ </li>
+</ul>
+
+<h2 id="sharing-files">アプリ間のファイルの共有</h2>
+
+<p>
+Android N 向けのアプリでは、Android フレームワークにより、アプリ以外の {@code file://} URI の公開を禁止する {@link android.os.StrictMode} API ポリシーが適用されます。
+
+ファイル URI を含むインテントがアプリからなくなると、{@code FileUriExposedException} 例外によりアプリはエラーになります。
+
+</p>
+
+<p>
+アプリ間でファイルを共有するには、{@code content://} URI を送信して、この URI に一時的なアクセス パーミッションを付与する必要があります。
+このパーミッションを付与する最も簡単な方法は、{@link android.support.v4.content.FileProvider} クラスを使用することです。
+パーミッションとファイルの共有の詳細については、<a href="{@docRoot}training/secure-file-sharing/index.html">ファイルの共有</a>をご覧ください。
+
+
+</p>
+
+<h2 id="accessibility">ユーザー補助機能の改善</h2>
+
+<p>
+ Android N には、低視力のユーザーまたは視覚障害のあるユーザー向けのプラットフォームのユーザビリティを改善するための変更がいくつか追加されています。
+通常は、これらの変更によってアプリのコードを変更する必要はありませんが、この機能について理解し、アプリでテストして、ユーザー エクスペリエンスに与える潜在的な影響を評価する必要があります。
+
+
+
+</p>
+
+
+<h3 id="screen-zoom">画面のズーム</h3>
+
+<p>
+ Android N では、<strong>ディスプレイ サイズ</strong>を設定して、画面上のすべての要素を拡大または縮小することができるので、視覚障害のあるユーザーに対する端末のユーザー補助機能が向上しています。
+
+ユーザーは、一般的な中くらいのサイズの携帯端末 Nexus 4 の幅である <a href="http://developer.android.com/guide/topics/resources/providing-resources.html">sw320dp</a> の画面最小幅を超えて画面をズームできません。
+
+
+</p>
+
+<div class="cols">
+
+<div class="col-6">
+ <img src="{@docRoot}images/android-7.0/screen-zoom-1.png" alt="" height="XXX" id="figure1" />
+</div>
+<div class="col-6">
+ <img src="{@docRoot}images/android-7.0/screen-zoom-2.png" alt="" height="XXX" id="figure1" />
+</div>
+
+</div> <!-- end cols -->
+<p class="img-caption">
+ <strong>図 3.</strong> 右側の画面では、Android N システム イメージを実行している端末のディスプレイ サイズを拡大している
+
+</p>
+
+
+<p>
+ 端末の画面密度が変更されると、以下の方法で実行中のアプリに通知されます。
+
+</p>
+
+<ul>
+ <li>アプリが API レベル 23 以前をターゲットにしている場合は、すべてのバックグラウンド処理が自動的に強制終了します。
+つまり、ユーザーがそのようなアプリから移動して [<em>Settings</em>] 画面を開き、<strong>ディスプレイ サイズ</strong>の設定を変更すると、メモリ不足の場合と同じように、アプリが強制終了します。
+
+
+アプリになんらかのフォアグラウンド処理がある場合は、<a href="{@docRoot}guide/topics/resources/runtime-changes.html">実行時の変更の処理</a>に記載されている設定変更の処理が通知されます。これは、端末の画面の向きが変わったときの処理と同様です。
+
+
+
+ </li>
+
+ <li>アプリが Android N をターゲットにしている場合、<a href="{@docRoot}guide/topics/resources/runtime-changes.html">実行時の変更の処理</a>に記載されているように、すべての処理(フォアグラウンド処理およびバックグラウンド処理)に対して設定変更が通知されます。
+
+
+
+ </li>
+</ul>
+
+<p>
+ Android のベスト プラクティスに従っているほとんどのアプリでは、この機能をサポートするための変更を加える必要はありません。
+以下の点は確認する必要があります。
+</p>
+
+<ul>
+ <li>画面幅 <code><a href=
+ "{@docRoot}guide/topics/resources/providing-resources.html">sw320dp</a></code> の端末でアプリをテストして、適切に機能することを確認します。
+
+ </li>
+
+ <li>端末設定が変更された場合、キャッシュ済みのビットマップやネットワークからロードされるリソースなど、画面密度に依存するキャッシュ情報を更新してください。
+
+また、アプリが一時停止状態から再開された場合は、設定変更をチェックしてください。
+
+ <p class="note">
+ <strong>注:</strong>設定に依存したデータをキャッシュに保存する場合は、そのデータ用の適切な画面サイズやピクセル密度など、関連するメタデータを含めることをお勧めします。
+
+このメタデータを保存しておくと、設定を変更した後、キャッシュ データを更新する必要があるかどうかを決定できます。
+
+
+ </p>
+ </li>
+
+ <li>ピクセル単位は画面密度に対応しないため、ピクセル単位で寸法を指定することは避けてください。
+その代わり、<a href="{@docRoot}guide/practices/screens_support.html">密度非依存ピクセル</a>(<code>dp</code>)単位で寸法を指定します。
+
+ </li>
+</ul>
+
+<h3 id="vision-settings">セットアップ ウィザードの [Vision Settings]</h3>
+
+<p>
+ Android N には、オープニング画面に [Vision Settings] が追加されています。ユーザーはこれを使用して、新しい端末で以下のユーザー補助機能設定を設定できます。
+
+ <strong>ズーム操作</strong>、<strong>フォントサイズ</strong>、<strong>ディスプレイ サイズ</strong>、<strong>TalkBack</strong>。
+この変更により、さまざまな画面設定に関連するバグが顕在化する可能性があります。
+この機能が及ぼす影響を評価するには、これらの設定を有効にしてアプリをテストする必要があります。
+
+設定は、<strong>[Settings] > [Accessibility]</strong> にあります。
+
+</p>
+
+<h2 id="ndk">プラットフォーム ライブラリにリンクした NDK アプリ</h2>
+
+<p>
+ Android N では、非パブリック API のロードを防止するために、名前空間が変更されています。
+ NDK を使用する場合、Android プラットフォームのパブリック API のみを使用する必要があります。
+Android の次の公式リリースで非パブリック API を使用すると、アプリがクラッシュする可能性があります。
+
+</p>
+
+<p>
+ 非パブリック API を使用していることを警告するために、アプリが非パブリック API を呼び出すと、Android N 端末で実行されているアプリは logcat 出力でエラーを生成します。
+
+ この状態を認識してもらえるよう、このエラーはメッセージとして端末の画面にも表示されます。
+アプリのコードを確認して、非パブリック プラットフォーム API を削除し、プレビュー端末またはエミュレータを使用して、アプリを十分にテストしてください。
+
+
+</p>
+
+<p>
+ アプリがプラットフォーム ライブラリに依存している場合は、NDK ドキュメントにある一般的な修正例を参照して、共通のプライベート API をそれと同等の機能を持つパブリック API に置き換えます。
+
+ 特に、<code>libpng</code> など、プラットフォームに含まれていて NDK には含まれていないライブラリをアプリで使用している場合、気付かないうちにプラットフォーム ライブラリにリンクしていることがあります。
+
+この場合、APK にリンク対象のすべての .so ファイルが含まれていることを確認します。
+
+</p>
+
+<p class="caution">
+ <strong>警告:</strong>サードパーティのライブラリの中には非パブリック API にリンクしているものもあります。
+アプリがこれらのライブラリを使用している場合、Android の次の公式リリースでアプリを実行すると、アプリがクラッシュする可能性があります。
+
+</p>
+
+<p>
+ NDK に含まれていないネイティブ ライブラリは Android のリリース版が変わると変更または削除される場合があるため、アプリでは、こういったライブラリへの依存やその使用を避けてください。
+
+OpenSSL から BoringSSL への移行は、そのような変更の一例です。
+ また、NDK に含まれていないプラットフォーム ライブラリには互換性要件がないため、端末によって互換性レベルが異なる場合があります。
+
+古い端末で非 NDK ライブラリにアクセスする必要がある場合は、Android API レベルに応じてロードしてください。
+
+</p>
+
+<p>
+ こうしたタイプの問題の診断を支援するために、Android N でアプリをビルドするときに発生する可能性のある Java および NDK のエラーの例を以下に示します。
+
+</p>
+
+<p>Java のエラー例</p>
+<pre class="no-pretty-print">
+java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so"
+ is not accessible for the namespace "classloader-namespace"
+</pre>
+
+<p>NDK のエラー例</p>
+<pre class="no-pretty-print">
+dlopen failed: cannot locate symbol "__system_property_get" referenced by ...
+</pre>
+
+
+<p>
+ こうしたタイプのエラーが発生しているアプリの典型的な修正例を以下に示します。
+</p>
+
+<ul>
+ <li>libandroid_runtime.so の getJavaVM と getJNIEnv を使用している場合は、標準の JNI 関数に置き換えることができます。
+
+<pre class="no-pretty-print">
+AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h>
+AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or
+JavaVM::AttachCurrentThread from <jni.h>.
+</pre>
+ </li>
+
+ <li>{@code libcutils.so} の {@code property_get} シンボルを使用している場合は、public {@code alternative __system_property_get} に置き換えることができます。
+
+ これを行うには、次の include 文とともに {@code __system_property_get} を使用します。
+<pre>
+#include <sys/system_properties.h>
+</pre>
+ </li>
+
+ <li>{@code libcrypto.so} の {@code SSL_ctrl} シンボルを使用している場合は、ローカル版のアプリに置き換える必要があります。
+たとえば、{@code .so} ファイルに {@code libcyrpto.a} を静的にリンクするか、BoringSSL や OpenSSL の {@code libcrypto.so} をアプリに動的に含める必要があります。
+
+
+ </li>
+</ul>
+
+<h2 id="afw">Android for Work</h2>
+<p>
+ Android N には、証明書のインストール、パスワードの再設定、セカンダリ ユーザーの管理、端末識別子へのアクセスなど、Android for Work をターゲットにしているアプリに対する変更が含まれています。
+
+Android for Work 環境向けのアプリをビルドしている場合、これらの変更点を確認し、変更に応じてアプリを修正する必要があります。
+
+
+</p>
+
+<ul>
+ <li>DPC が代理証明書を設定する前に、代理証明書インストーラをインストールする必要があります。
+また、プロファイルと N SDK をターゲットにしているデバイス オーナー アプリに対して、デバイス ポリシー コントローラ(DPC)が <code>DevicePolicyManager.setCertInstallerPackage()</code> を呼び出す前に代理証明書インストーラをインストールする必要があります。
+
+
+このインストーラがインストールされていない場合、<code>IllegalArgumentException</code> がスローされます。
+
+
+ </li>
+
+ <li>端末管理者向けのパスワードの再設定制限がプロファイル オーナーに適用されます。
+端末管理者は、{@code DevicePolicyManager.resetPassword()} を使用して、既に設定されているパスワードを削除または変更できなくなりました。
+
+端末管理者は、端末にパスワード、PIN、またはパターンが設定されていない場合のみ、パスワードを設定できます。
+
+ </li>
+
+ <li>デバイス オーナーとプロファイル オーナーは、制限が設定されている場合でもアカウントを管理することができます。
+デバイス オーナーとプロファイル オーナーは、<code>DISALLOW_MODIFY_ACCOUNTS</code> ユーザー制限が適用されている場合でもアカウント管理 API を呼び出すことができます。
+
+ </li>
+
+ <li>デバイス オーナーによるセカンダリ ユーザーの管理がさらに簡単になりました。端末がデバイス オーナー モードで実行されている場合は、<code>DISALLOW_ADD_USER</code> 制限が自動的に設定されます。
+
+これにより、管理されていないセカンダリ ユーザーが作成されることを防ぐことができます。
+また、<code>CreateUser()</code> メソッドと <code>createAndInitializeUser()</code> メソッドは廃止され、新しい <code>DevicePolicyManager.createAndManageUser()</code> メソッドに置き換えられました。
+
+
+ </li>
+
+ <li>デバイス オーナーは、端末識別子にアクセスできます。また、デバイス オーナーは <code>DevicePolicyManagewr.getWifiMacAddress()</code> を使用して、端末の Wi-Fi MAC アドレスにもアクセスできます。
+
+端末で Wi-Fi が有効にされたことがない場合、このメソッドは {@code null} 値を返します。
+
+ </li>
+
+ <li>ワークモード設定により、仕事用アプリへのアクセスが制御されます。ワークモードがオフになると、システム ランチャーは仕事用アプリをグレーアウトしてこれらが利用できないことを示します。
+ワークモードが再度有効になると、通常の動作が復元されます。
+
+</ul>
+
+<p>
+ Android N での Android for Work の変更の詳細については、<a href="{@docRoot}preview/features/afw.html">Android for Work のアップデート</a>をご覧ください。
+
+</p>
+
+<h2 id="annotations">アノテーションの保持</h2>
+
+<p>
+Android N では、アノテーションの表示が無視されていたバグを修正しています。この問題は、ランタイムがこれまでできなかったアノテーションへのアクセスを可能にしました。
+
+これらのアノテーションは以下のとおりです。
+</p>
+
+<ul>
+ <li>{@code VISIBILITY_BUILD}:ビルド時にのみ表示されます。</li>
+ <li>{@code VISIBILITY_SYSTEM}:実行時に表示されますが、基幹システムにのみ表示されます。
+</li>
+</ul>
+
+<p>
+アプリでこの動作を利用している場合は、実行時に表示されるアノテーションに保持ポリシーを追加してください。
+これは {@code @Retention(RetentionPolicy.RUNTIME)} を使用して実行できます。
+</p>
+
+<h2 id="other">その他の重要事項</h2>
+
+<ul>
+<li>Android N 上で低い API レベルをターゲットにしたアプリが実行されている場合、ユーザーがディスプレイ サイズを変更すると、アプリのプロセスは強制終了されます。
+アプリは、このシナリオを適切に処理する必要があります。
+適切に処理しないと、ユーザーが [Recents] からアプリを復元したときに、アプリがクラッシュします。
+
+
+<p>
+アプリをテストして、この動作が発生しないようにしてください。DDMS でアプリを手動で強制終了させて同様のクラッシュを発生させることにより、アプリのテストを行うことができます。
+
+
+
+</p>
+
+<p>
+N 以上をターゲットにしたアプリは、画面密度の変更時に自動的に強制終了しませんが、設定変更への対応が不十分なままである可能性があります。
+
+</p>
+</li>
+
+<li>
+Android N 上のアプリは設定変更を適切に処理し、次回の起動時にクラッシュしないようにする必要があります。
+フォントのサイズを変更([<strong>Setting</strong>] > [<strong>Display</strong>] > [<strong>Font size</strong>])した後に [Recents] からアプリを復元すると、アプリの動作を確認できます。
+
+
+
+</li>
+
+<li>
+旧バージョンの Android では、バグにより、メインスレッドの TCP ソケットへの書き込みを厳格モード違反として報告していませんでした。
+Android N ではこのバグが修正されています。この動作を表示するアプリから {@code android.os.NetworkOnMainThreadException} がスローされるようになりました。通常、メインスレッドでネットワーク操作を実行することはお勧めできません。それは、これらの操作は一般的に ANR やジャンクを引き起こす大幅なテイル レイテンシが発生するためです。
+
+
+
+</li>
+
+<li>
+メソッドの {@code Debug.startMethodTracing()} ファミリーが、SD カードのトップレベルではなく、共有ストレージ上のパッケージ固有のディレクトリの storing output にデフォルト設定されました。
+
+
+つまり、これらの API を使用するためにアプリで {@code WRITE_EXTERNAL_STORAGE} パーミッションをリクエストする必要はありません。
+</li>
+
+<li>
+多くのプラットフォーム API は、{@link android.os.Binder} トランザクションで送信される大きなペイロードをチェックし、暗黙的にログ記録したり、削除したりするのではなく {@code TransactionTooLargeExceptions} を {@code RuntimeExceptions} として再度スローするようになりました。
+
+
+一般的な例としては、{@link android.app.Activity#onSaveInstanceState Activity.onSaveInstanceState()} で大量のデータを格納することです。これにより、アプリが Android N をターゲットにしている場合は、{@code ActivityThread.StopInfo} で {@code RuntimeException} がスローされます。
+
+
+
+
+</li>
+
+<li>
+アプリが {@link java.lang.Runnable} タスクを {@link android.view.View} に渡し、{@link android.view.View} がウィンドウにアタッチされない場合は、{@link java.lang.Runnable} タスクと {@link android.view.View} がキューに入れられます。{@link java.lang.Runnable} タスクは {@link android.view.View} がウィンドウにアタッチされるまで実行されません。
+
+
+
+
+
+この動作は以下のバグを修正します。
+<ul>
+ <li>対象ウィンドウの UI スレッド以外のスレッドからアプリが {@link android.view.View} に渡すと、結果として不適切なスレッドで {@link java.lang.Runnable} が実行される可能性があります。
+
+ </li>
+ <li>{@link java.lang.Runnable} タスクがルーパー スレッド以外のスレッドから渡されると、アプリは {@link java.lang.Runnable} タスクを公開できました。
+</li>
+</ul>
+</li>
+
+<li>
+{@link android.Manifest.permission#DELETE_PACKAGES DELETE_PACKAGES} パーミッションを持つ Android N 上のアプリが、別のアプリがインストールしたパッケージを削除しようとすると、ユーザー確認が要求されます。
+
+
+このシナリオでは、アプリが {@link android.content.pm.PackageInstaller#uninstall PackageInstaller.uninstall()} を呼び出した場合は、{@link android.content.pm.PackageInstaller#STATUS_PENDING_USER_ACTION STATUS_PENDING_USER_ACTION} をリターン ステータスとしてみなす必要があります。
+
+
+
+</li>
+
+</ul>
+
diff --git a/docs/html-intl/intl/ja/about/versions/nougat/android-7.0-samples.jd b/docs/html-intl/intl/ja/about/versions/nougat/android-7.0-samples.jd
new file mode 100644
index 0000000..9a50ff7
--- /dev/null
+++ b/docs/html-intl/intl/ja/about/versions/nougat/android-7.0-samples.jd
@@ -0,0 +1,85 @@
+page.title=サンプル
+page.tags="preview", "samples", "android"
+page.image=images/cards/card-n-samples_2x.png
+@jd:body
+
+<p>
+ 以下は Android N のサンプルコードです。サンプルを Android Studio でダウンロードするには、<b>[File] > [Import Samples]</b> メニュー オプションを選択します。
+
+
+</p>
+
+<p class="note">
+ <strong>注:</strong>以下のダウンロード可能なプロジェクトは、Gradle と Android Studio でご利用いただくために提供しています。
+
+</p>
+
+
+<h3 id="mw">マルチ ウィンドウ Playground</h3>
+<img src="{@docRoot}images/android-7.0/sample-multiwindow.png" style="float: left; padding-right: 0.5em" height="250" width="156" />
+<p>
+ このサンプルでは、自身のアプリでマルチ ウィンドウのユーザー インターフェースを使用する方法をご確認いただけます。
+
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-MultiWindowPlayground">GitHub でサンプルを入手</a>
+
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="an">アクティブ通知</h3>
+<img src="{@docRoot}images/android-7.0/sample-activenotifications.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ NotificationCompat を使用して通知を送信するシンプルなサービスをご確認いただける既存のサンプルです。
+ユーザーからの未読メッセージは、それぞれ別の通知として送信されます。
+
+</p>
+<p>
+ このサンプルは、Android N 向けの新たな通知機能を利用できるようにアップデートされています。
+
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-ActiveNotifications">GitHub でサンプルを入手</a>
+
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="ms">メッセージ サービス</h3>
+<img src="{@docRoot}images/android-7.0/sample-messagingservice.png" style="float: left; padding-right: 0.5em" height="250" width="150" />
+<p>
+ 1 つのアプリで表示している通知の件数を NotificationManager で取得する方法をご確認いただける既存のサンプルです。
+
+
+</p>
+<p>
+ このサンプルは、Android N 向けの新たな通知機能を利用できるようにアップデートされています。
+
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-MessagingService">GitHub でサンプルを入手</a>
+
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="fbe">ダイレクト ブート</h3>
+<img src="{@docRoot}images/android-7.0/sample-directboot.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ このサンプルでは、端末の暗号化ストレージ内のデータにアクセスしたり、データを保存したりする方法をご確認いただけます。この機能は端末が起動している間は常に有効です。
+
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-DirectBoot">GitHub でサンプルを入手</a>
+
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="sda">特定のディレクトリへのアクセス</h3>
+<img src="{@docRoot}images/android-7.0/sample-scopeddirectoryaccess.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ このサンプルでは、より少ないパーミッションで、特定のディレクトリに対するデータの読み出しや書き込みを行う方法をご確認いただけます。
+
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-ScopedDirectoryAccess">GitHub でサンプルを入手</a>
+
+</p>
diff --git a/docs/html-intl/intl/ja/about/versions/nougat/android-7.0.jd b/docs/html-intl/intl/ja/about/versions/nougat/android-7.0.jd
new file mode 100644
index 0000000..732b014
--- /dev/null
+++ b/docs/html-intl/intl/ja/about/versions/nougat/android-7.0.jd
@@ -0,0 +1,1039 @@
+page.title=Android N for Developers
+meta.tags="preview", "androidn"
+page.tags="preview", "developer preview"
+page.image=images/cards/card-n-apis_2x.png
+@jd:body
+
+
+
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>主なデベロッパー機能</h2>
+ <ol>
+ <ul style="list-style-type:none;">
+ <li><a href="#multi-window_support">マルチ ウィンドウのサポート</a></li>
+ <li><a href="#notification_enhancements">通知</a></li>
+ <li><a href="#jit_aot">JIT / AOT コンパイル</a></li>
+ <li><a href="#quick_path_to_app_install">アプリの高速インストール</a></li>
+ <li><a href="#doze_on_the_go">どこでも機能する Doze</a></li>
+ <li><a href="#background_optimizations">バックグラウンド処理の最適化</a></li>
+ <li><a href="#data_saver">データセーバー</a></li>
+ <li><a href="#vulkan">Vulkan API</a></li>
+ <li><a href="#tile_api">クイック設定タイル API</a></li>
+ <li><a href="#number-blocking">電話番号のブロック</a></li>
+ <li><a href="#call_screening">通話スクリーニング</a></li>
+ <li><a href="#multi-locale_languages">ロケールと言語</a></li>
+ <li><a href="#emoji">新しい絵文字</a></li>
+ <li><a href="#icu4">Android の ICU4J API</a></li>
+ <li><a href="#gles_32">OpenGL ES 3.2 API</a></li>
+ <li><a href="#android_tv_recording">Android TV の録画機能</a></li>
+ <li><a href="#android_for_work">Android for Work</a></li>
+ <li><a href="#accessibility_enhancements">ユーザー補助機能</a></li>
+ <li><a href="#direct_boot">ダイレクト ブート</a></li>
+ <li><a href="#key_attestation">キーの構成証明</a></li>
+ <li><a href="#network_security_config">ネットワーク セキュリティ構成</a></li>
+ <li><a href="#default_trusted_ca">既定の信頼される証明機関</a></li>
+ <li><a href="#apk_signature_v2">APK 署名スキーム v2</a></li>
+ <li><a href="#scoped_directory_access">特定のディレクトリへのアクセス</a></li>
+ <li><a href="#keyboard_shortcuts_helper">キーボード ショートカット ヘルパー</a></li>
+ <li><a href="#sustained_performance_api">パフォーマンス維持 API</a></li>
+ <li><a href="#vr">VR サポート</a></li>
+ <li><a href="#print_svc">印刷サービス機能の強化</a></li>
+ <li><a href="#virtual_files">仮想ファイル</a></li>
+ <li><a href="#framemetrics_api">FrameMetricsListener API</a></li>
+ </ol>
+</div>
+</div>
+
+
+
+<p>Android N は現在も開発中ですが、N Developer Preview の一部として Android N を試用できます。
+以下のセクションでは、デベロッパー向けの新しい機能の一部を紹介しています。
+ </p>
+
+<p>
+ <a href="{@docRoot}preview/behavior-changes.html">動作の変更点</a>を確認して、プラットフォームの変更がアプリに影響を及ぼす可能性のある領域について把握してください。また、デベロッパー ガイドを参照して主な機能について詳しく学習し、<a href="{@docRoot}preview/setup-sdk.html#docs-dl">API リファレンス</a>をダウンロードして、新しい API の詳細を理解してください。
+
+
+
+</p>
+
+<h2 id="multi-window_support">マルチ ウィンドウのサポート</h2>
+
+
+<p>Android N では、多くのユーザーから求められていたマルチタスク機能がプラットフォームに新しく導入されました。つまり、マルチ ウィンドウがサポートされるようになりました。
+ </p>
+
+ <p>ユーザーは同時に 2 つのアプリを画面に開くことができます。 </p>
+ <ul>
+ <li>Android N が動作している携帯端末やタブレットでは、分割画面モードで 2 つのアプリを左右や上下に並べて実行できます。
+
+また、2 つのアプリの間にある分割線をドラッグしてアプリのサイズを変更することもできます。
+ </li>
+
+<li>Android TV 端末では、アプリを<a href="{@docRoot}preview/features/picture-in-picture.html">ピクチャ イン ピクチャ モード</a>にすると、アプリにコンテンツを表示したまま、他のアプリをブラウジングまたは操作することができます。
+
+</li>
+ </ul>
+
+<div class="col-4of10">
+<img src="{@docRoot}images/android-7.0/mw-portrait.png" alt="" style="height:460px;padding-left:1em;" id="img-split-screen" />
+<p class="img-caption">
+ <strong>図 1.</strong> 分割画面モードで実行されているアプリ
+</p>
+
+ </div>
+
+<p>特にタブレットや大画面の端末では、マルチ ウィンドウのサポートにより、ユーザーを引き付ける新しい方法が提供されます。
+アプリでドラッグ アンド ドロップを有効にすると、ユーザーはアプリとの間でコンテンツを簡単にドラッグすることができるので、快適な使い心地を実現することができます。
+
+ </p>
+
+<p>マルチ ウィンドウのサポートをアプリに追加して、マルチ ウィンドウ ディスプレイを処理する方法を設定するのは簡単です。
+たとえば、アクティビティの最小許容ディメンションを指定すると、ユーザーはアクティビティをそのサイズより小さく変更できなくなります。
+
+また、アプリに対してマルチ ウィンドウ ディスプレイを無効にし、アプリを全画面モードのみで表示することもできます。
+</p>
+
+<p>
+ 詳細については、<a href="{@docRoot}preview/features/multi-window.html">マルチ ウィンドウのサポート</a>に関するデベロッパー向けドキュメントをご覧ください。
+
+</p>
+
+<h2 id="notification_enhancements">通知の機能強化</h2>
+
+<p>Android N では、通知が再設計されており、さらに使いやすくなっています。
+次のような点が変更されました。</p>
+
+<ul>
+ <li>
+ <strong>テンプレートのアップデート</strong>:通知テンプレートは、ヒーロー イメージやアバターを中心としたデザインにアップデートされています。
+デベロッパーは、コードに最小限の変更を加えるだけで、この新しいテンプレートを活用できます。
+
+ </li>
+
+ <li>
+ <strong>メッセージ スタイルのカスタマイズ</strong>:<code>MessageStyle</code> クラスを使用して、通知に関連付けられているさらに多くのユーザー インターフェース ラベルをカスタマイズできます。
+
+メッセージ、会話、タイトル、コンテンツ ビューを設定できます。
+
+ </li>
+
+ <li>
+ <strong>バンドル通知</strong>:メッセージをグループ化できます。たとえば、メッセージをトピックごとにグループ化して、各グループを表示できます。
+ユーザーは、各グループに対して、消去やアーカイブといったアクションを実行できます。
+Android Wear 向けの通知を実装したことがある場合は、このモデルはおなじみでしょう。
+
+
+ </li>
+
+ <li>
+ <strong>ダイレクト リプライ</strong>:Android システムでは、インライン リプライがサポートされています。リアルタイム通信アプリを使用しているユーザーは、通知インターフェース内で直接 SMS やテキスト メッセージにすばやく応答できます。
+
+
+ </li>
+
+ <li>
+ <strong>カスタムビュー</strong>:2 つの新しい API を使用すると、通知でカスタムビューを使用するときに、通知ヘッダーやアクションなどのシステム デコレーションを活用できます。
+
+
+ </li>
+</ul>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-1.png" alt="" style="padding:.5em;max-width:226px">
+</div>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-3.png" alt="" style="padding:.5em;max-width:226px">
+</div>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-2.png" alt="" style="padding:.5em;max-width:226px">
+</div>
+
+
+<p class="img-caption">
+ <strong>図 2.</strong> バンドル通知とダイレクト リプライ
+</p>
+
+<p>以上の新しい機能を実装する方法の詳細については、<a href="{@docRoot}preview/features/notification-updates.html">通知</a>に関するガイドをご覧ください。
+
+</p>
+
+
+
+<h2 id="jit_aot">プロファイルに基づいた JIT / AOT コンパイル</h2>
+
+<p>Android N では、コード プロファイリングにも対応した Just in Time(JIT)コンパイラーが ART に追加されており、Android アプリを実行するときのパフォーマンスが向上しています。
+
+JIT コンパイラーは、ART で現在使用されている Ahead of Time(AOT)コンパイラーを補完するものであり、ランタイム パフォーマンスの向上、ストレージ スペースの削減、アプリとシステムのアップデートの高速化に貢献します。
+
+</p>
+
+<p>プロファイルに基づいたコンパイルを使用すると、アプリの実際の使用方法や端末上での状態に応じて、ART が各アプリの AOT / JIT コンパイルを管理します。
+たとえば、ART は各アプリのホット メソッドのプロファイルを維持し、これらのメソッドをプリコンパイルしてキャッシュに保存することにより、パフォーマンスを最適化します。
+
+また、アプリの他の部分は、実際に使用されるときまでコンパイルされません。
+</p>
+
+<p>プロファイルに基づいたコンパイルは、アプリの主要部分のパフォーマンスを向上させ、関連するバイナリなど、アプリの全体的な RAM 使用量を削減します。
+
+この機能は、メモリが少ない端末で特に重要です。</p>
+
+<p>ART は、端末の電池への影響が最小限になるようにプロファイルに基づいたコンパイルを管理します。
+端末がアイドル状態および充電中のときにのみ、プリコンパイルが事前に実行されるため、時間と電池が節約できます。
+</p>
+
+<h2 id="quick_path_to_app_install">アプリの高速インストール</h2>
+
+<p>ART の JIT コンパイラーの最も明確な利点の 1 つは、アプリのインストールとシステム アップデートの速度です。
+Android 6.0 では最適化とインストールの実行に数分かかっていたサイズの大きいアプリでも、数秒でインストールできるようになりました。
+
+最適化のステップが不要になったため、システム アップデートも高速化されています。 </p>
+
+<h2 id="doze_on_the_go">どこでも機能する Doze</h2>
+
+<p>Android 6.0 では Doze システムモードが導入されています。これにより、端末が机に置かれているときや引き出しに収められているときなどのアイドル時にアプリの CPU とネットワーク通信の実行を保留し、電池を節約します。
+
+ </p>
+
+<p>Android N では Doze が改良され、外出中でも電池を節約できるようになっています。画面をしばらくオフにしたり端末を電源から抜いたりすると、Doze により、通常の CPU およびネットワーク制限の一部がアプリに適用されます。つまり、端末をポケットに入れて持ち歩いているときでも電池を節約できます。
+
+
+
+</p>
+
+
+<img src="/preview/images/doze-diagram-1.png" alt="" id="figure1" />
+<p class="img-caption">
+ <strong>図 3.</strong> Doze により、端末が静止していないときでも制限が適用され、電池の寿命が延長される
+
+</p>
+
+
+<p>端末が電池で動作しているときに画面をしばらくオフにすると、Doze はネットワーク アクセスを制限し、ジョブと同期を保留します。
+アプリはメンテナンス ウィンドウと呼ばれる短い時間にネットワークにアクセスしたり、保留中のジョブや同期を実行したりします。
+
+画面をオンにするか、端末を電源に接続すると、端末の Doze モードは解除されます。
+</p>
+
+<p>電池で動作している端末が再び静止状態になり、画面がしばらくオフになると、Doze は完全な CPU およびネットワーク制限を {@link
+android.os.PowerManager.WakeLock}、{@link android.app.AlarmManager} アラーム、GPS / Wi-Fi スキャンに適用します。
+
+</p>
+
+<p>アプリを Doze に対応させるためのベスト プラクティスは端末を持ち歩いているかどうかには関係ありません。そのため、Doze が適切に処理されるようにアプリを既にアップデートしている場合は、追加の対応は必要ありません。
+
+そうでない場合は、<a href="{@docRoot}training/monitoring-device-state/doze-standby.html#assessing_your_app">アプリの Doze 対応</a>を行ってください。
+</p>
+
+<h2 id="background_optimizations">Project Svelte:バックグラウンド処理の最適化</h2>
+
+<p>Project Svelte は、Android エコシステムのさまざまな端末でシステムやアプリによる RAM の使用を最小限にする取り組みです。
+Android N での Project Svelte は、アプリをバックグラウンドで実行する方法を最適化することに重点を置いています。
+ </p>
+
+<p>ほとんどのアプリでは、バックグラウンド処理が非常に重要になります。バックグラウンド処理を適切に実行すると、状況に応じて高速に実行できるなどユーザー エクスペリエンスが大幅に向上します。バックグラウンド処理が不適切な場合は、RAM(と電池)が必要以上に消費され、他のアプリのシステム パフォーマンスに影響を及ぼす可能性があります。
+
+
+ </p>
+
+<p>Android 5.0 以降では、ユーザーに適した方法でバックグラウンド処理を実行する {@link android.app.job.JobScheduler} が推奨されています。
+
+これによって、メモリ、電源、接続の状態に基づいてシステムを最適化しながら、アプリでジョブをスケジュールできます。
+JobScheduler はシンプルな制御を提供するため、すべてのアプリで JobScheduler を使用することが効果的です。
+ </p>
+
+<p>
+ もう 1 つの適切な選択肢は、Google Play サービスの一部である <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager"><code>GCMNetworkManager</code></a> です。この機能も同様のジョブ スケジュール機能を提供しますが、こちらは以前のバージョンの Android とも互換性があります。
+
+
+
+</p>
+
+<p>さらに多くのユースケースに対応するために、<code>JobScheduler</code> と <code>GCMNetworkManager</code> の拡張は継続されています。たとえば、Android N では、コンテンツ プロバイダの変更に基づいてバックグラウンド処理をスケジュールできるようになりました。
+
+
+また、特にメモリの少ない端末でシステム パフォーマンスを低下させる可能性のある一部の古いパターンの廃止も開始されています。
+
+</p>
+
+<p>一般的に使用される暗黙的なブロードキャストである
+{@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}、{@link
+ android.hardware.Camera#ACTION_NEW_PICTURE}、{@link
+ android.hardware.Camera#ACTION_NEW_VIDEO} は複数のアプリのバックグラウンド処理を同時に起動するので、メモリと電池に負荷をかける可能性があります。そのため、Android N では、この 3 つのブロードキャストが削除されています。
+アプリがこれらのブロードキャストを受信する場合は、N Developer Preview を使用して、<code>JobScheduler</code> とそれに関連する API に移行してください。
+
+ </p>
+
+<p>
+ 詳細については、<a href="{@docRoot}preview/features/background-optimization.html">バックグラウンド処理の最適化</a>に関するドキュメントをご覧ください。
+
+</p>
+
+
+<h2 id="data_saver">データセーバー</h2>
+
+<div class="col-5of12" style="margin-right:1.5em;">
+<img src="{@docRoot}images/android-7.0/datasaver.png" style="border:2px solid #ddd">
+
+<p class="img-caption" style="padding-right:2em;">
+ <strong>図 4.</strong> [Settings] でのデータセーバー
+</p>
+ </div>
+
+<p>一般的に、モバイル端末のライフサイクル全体では、モバイルデータ通信プランのコストが端末自体のコストを上回ります。
+多くのユーザーにとって、モバイルデータ通信は、節約する必要のある高価なリソースです。
+ </p>
+
+<p>Android N では、ローミング、課金サイクルの終了近く、または短期間のデータパックであるかどうかに関係なく、アプリによるモバイルデータ通信の使用を削減する新しいシステム サービスであるデータセーバー モードが導入されています。
+
+データセーバーを使用すると、アプリによるモバイルデータ通信の使用方法をユーザーが制御できます。また、デベロッパーは、データセーバーがオンのときに、より効率よく通信するサービスを提供できるようになります。
+
+ </p>
+
+<p>ユーザーが [<strong>Settings</strong>] でデータセーバーを有効にし、端末が従量制課金ネットワークに接続されている場合、システムは、ストリーミングのビットレートを制限したり、画質を低下させたり、オプティミスティックなプレキャッシングを保留したりすることにより、バックグラウンドでのデータ使用をブロックし、フォアグラウンドでのデータ使用をなるべく抑えるようにアプリに指示します。
+
+
+
+ユーザーは特定のアプリをホワイトリストに登録することにより、データセーバーがオンになっているときでも、バックグラウンドで従量制データ通信を使用できます。
+</p>
+
+<p>Android N は {@link android.net.ConnectivityManager} を拡張することで、<a href="{@docRoot}preview/features/data-saver.html#status">ユーザーのデータセーバー設定を取得</a>する方法と、<a href="{@docRoot}preview/features/data-saver.html#monitor-changes">設定の変更を監視</a>する方法を提供しています。
+
+
+すべてのアプリは、ユーザーがデータセーバーを有効にしているかどうかを確認し、フォアグラウンドおよびバックグラウンドでのデータ使用を制限する必要があります。
+</p>
+
+
+<h2 id="vulkan">Vulkan API</h2>
+
+<p>
+ Android N では、新しい 3D レンダリング API である <a href="http://www.khronos.org/vulkan" class="external-link">Vulkan™</a> がプラットフォームに統合されています。<a href="https://www.khronos.org/opengles/" class="external-link">OpenGL™ ES</a> と同様に、Vulkan は Khronos グループによって管理されている 3D グラフィックおよびレンダリングのオープン スタンダードです。
+
+
+
+</p>
+
+<p>
+ Vulkan は、ドライバの CPU オーバーヘッドを最小化するため、およびアプリケーションが GPU の動作をより直接的に制御できるように設計されています。
+また、Vulkan は、複数のスレッドが作業を実行できるようにする(コマンド バッファの作成を同時に行うなど)ことによって、より優れた並列処理が可能です。
+
+
+</p>
+
+<p>
+ Vulkan 開発ツールおよびライブラリは、Android NDK に含まれています。次のようなものが含まれます。
+
+</p>
+
+<ul>
+ <li>ヘッダー
+ </li>
+
+ <li>検証レイヤ(デバッグ ライブラリ)
+ </li>
+
+ <li>SPIR-V シェーダー コンパイラー
+ </li>
+
+ <li>SPIR-V シェーダーのランタイム コンパイル ライブラリ
+ </li>
+</ul>
+
+<p>
+ Vulkan は、Nexus 5X、Nexus 6P、Nexus Player などの Vulkan 対応ハードウェアを備えた端末上のアプリでのみ利用できます。
+Vulkan を可能な限りより多くの端末に導入するためにパートナーと緊密に協力し合っています。
+
+</p>
+
+<p>
+ 詳細については、<a href="{@docRoot}ndk/guides/graphics/index.html">API ドキュメント</a>をご覧ください。
+</p>
+
+<h2 id="tile_api">クイック設定タイル API</h2>
+
+
+<div style="float:right;max-width:320px">
+<img src="{@docRoot}images/android-7.0/quicksettings.png" style="padding-left:1.5em;">
+
+<p class="img-caption" style="padding-left:2em;">
+ <strong>図 5.</strong> 通知シェードにあるクイック設定タイル
+</p>
+
+
+ </div><p>クイック設定は、通知シェードから主要な設定とアクションを直接公開するための一般的で簡単な方法です。
+Android N では、クイック設定の範囲が拡大され、さらに使いやすく便利な機能になっています。
+ </p>
+
+<p>クイック設定タイル用のスペースが広くなったので、ユーザーは、左または右にスワイプして、ページ分割された表示領域でこれらのタイルにアクセスできます。
+また、ユーザーは、表示するクイック設定タイルとその表示場所を制御できるようになっています。ユーザーはタイルをドラッグ アンド ドロップして、追加または移動できます。
+
+ </p>
+
+<p>Android N では、デベロッパーが独自のクイック設定タイルを定義できる新しい API が追加されており、ユーザーはこの API を通じて、アプリの主なコントロールとアクションに簡単にアクセスできます。
+</p>
+
+<p>
+ クイック設定タイルは、緊急に必要な、または頻繁に使用されるコントロールやアクション用に用意されたものであり、アプリを起動するためのショートカットとして使用するべきではありません。
+
+
+</p>
+
+<p>
+ タイルの定義が完了すると、ユーザーにタイルを公開できるようになります。ユーザーはタイルをドラッグ アンド ドロップするだけで、クイック設定にタイルを追加できます。
+
+</p>
+
+<p>
+ アプリタイルを作成する方法については、ダウンロード可能な <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API リファレンス</a>に掲載されている <code>android.service.quicksettings.Tile</code> のドキュメントをご覧ください。
+
+</p>
+
+
+
+<h2 id="number-blocking">電話番号のブロック</h2>
+
+<p>Android N では、プラットフォームで電話番号のブロックがサポートされており、サービス プロバイダがブロックされた電話番号のリストを保持するためのフレームワーク API が提供されています。
+デフォルトの SMS アプリ、デフォルトの電話アプリ、携帯通信会社アプリは、ブロックされた電話番号のリストを読み込んだり、このリストに書き込んだりできます。
+
+その他のアプリはこのリストにアクセスできません。</p>
+
+<p>Android では、電話番号のブロックをプラットフォームの標準の機能にすることにより、幅広い端末で電話番号をブロックできるようにする一貫した方法がアプリに提供されています。
+
+その他にアプリは次のような機能も利用できます。</p>
+
+<ul>
+ <li> ブロックされた電話番号は、テキスト メッセージでもブロックされる
+ <li> ブロックされた電話番号は、リセットした端末や、バックアップおよびリストア機能で移行したデバイスでも保持される
+
+ <li> 複数のアプリが同じブロックリストを使用できる
+</ul>
+
+<p>また、Android に携帯通信会社のアプリが組み込まれていると、携帯通信会社は端末上のブロックリストを読み込んで迷惑な電話やテキスト メッセージをサービス側でブロックできます。これによって、VOIP エンドポイントや転送電話などいかなる媒体を介しても、ブロックされた番号はユーザーに到達できなくなります。
+
+
+</p>
+
+<p>
+ 詳細については、ダウンロード可能な <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API リファレンス</a>の <code>android.provider.BlockedNumberContract</code> をご覧ください。
+
+
+</p>
+
+<h2 id="call_screening">通話スクリーニング</h2>
+
+<p>
+ Android N では、デフォルトの電話アプリで着信をスクリーニングできます。新しい <code>CallScreeningService</code> を実装することによって、電話アプリは着信をスクリーニングします。これにより、電話アプリは着信する電話の {@link android.telecom.Call.Details Call.Details} に基づいて次のようなアクションを実行できます。
+
+
+
+</p>
+
+<ul>
+ <li> 着信を拒否する
+ <li> 着信を通話履歴に含めない
+ <li> 着信通知をユーザーに表示しない
+</ul>
+
+<p>
+ 詳細については、ダウンロード可能な <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API リファレンス</a>の <code>android.telecom.CallScreeningService</code> をご覧ください。
+
+
+</p>
+
+
+<h2 id="multi-locale_languages">マルチロケールのサポートと言語の追加</h2>
+
+
+<p>Android N では、[Settings] で<strong>マルチロケール</strong>を選択できるようになり、複数言語を使用するユーザーへのサポートが強化されました。
+アプリで新しい API を使用して、ユーザーが選択したロケールを取得すると、複数のロケールを設定しているユーザーに対してより洗練されたユーザー エクスペリエンスを提供できます。たとえば、検索結果を複数の言語で表示したり、ユーザーが理解している言語のウェブページでは翻訳の提案を行わないようにしたりすることが可能になります。
+
+
+
+</p>
+
+<p>また、Android N では、マルチロケールのサポートに加えて、ユーザーが利用できる言語が追加されています。
+英語、スペイン語、フランス語、アラビア語などの一般的な言語に対して、それぞれ 25 以上のバリエーションが提供されます。
+100 以上の新しい言語も部分的にサポートされています。
+</p>
+
+<p>アプリは、<code>LocaleList.GetDefault()</code> を呼び出すことにより、ユーザーが設定したロケールのリストを取得できます。
+Android N では、ロケール数の増加に対応するために、リソースを解決する方法が変更されています。
+この新しいリソース解決ロジックでアプリが想定どおりに動作することをテストおよび確認してください。
+</p>
+
+<p>新しいリソース解決動作と順守する必要のあるベスト プラクティスの詳細については、<a href="{@docRoot}preview/features/multilingual-support.html">複数言語のサポート</a>をご覧ください。
+</p>
+
+
+<h2 id="emoji">新しい絵文字</h2>
+
+<p>
+ Android N では、肌色の異なる絵文字や異体字セレクターのサポートなど、絵文字の追加と絵文字関連機能が導入されています。
+
+アプリで絵文字をサポートする場合は、以下のガイドラインに従い、これらの絵文字関連機能を利用します。
+
+</p>
+
+<ul>
+ <li>
+ <strong>絵文字を挿入する前に端末に絵文字が含まれていることを確認する。</strong>
+ システム フォントで表示される絵文字を確認するには、{@link android.graphics.Paint#hasGlyph(String)} メソッドを使用します。
+
+ </li>
+ <li>
+ <strong>絵文字が異体字セレクターをサポートしていることを確認する。</strong>
+ 異体字セレクターを使用すると、特定の絵文字をカラーまたは白黒で表示できます。
+
+ アプリは、モバイル端末では白黒よりもカラーで絵文字を表示する必要があります。ただし、アプリでテキスト メッセージを使用して絵文字を表示する場合は、白黒バージョンを使用する必要があります。
+
+ 絵文字に異体字があるかどうかを確認するには、異体字セレクターを使用します。
+ 異体字のある文字の完全なリストについては、<a class="external-link" href="http://www.unicode.org/Public/9.0.0/ucd/StandardizedVariants-9.0.0d1.txt">異体字に関する Unicode ドキュメント</a>の<em>絵文字異体字シーケンス</em> セクションを確認してください。
+
+
+
+ </li>
+ <li>
+ <strong>絵文字が肌色をサポートしていることを確認する。</strong>Android N では、レンダリングされる絵文字の肌色を好みの色に変更できます。
+キーボード アプリでは、肌色が複数ある絵文字をわかりやすく表示して、ユーザーが好みの肌色を選択できるようにする必要があります。
+
+肌色修飾子を持つシステムの絵文字を確認するには、{@link android.graphics.Paint#hasGlyph(String)} メソッドを使用します。
+
+肌色を使用する絵文字を確認するには、<a class="external-link" href="http://unicode.org/emoji/charts/full-emoji-list.html">Unicode ドキュメント</a>をご覧ください。
+
+
+ </li>
+</ul>
+
+
+<h2 id="icu4">Android の ICU4J API</h2>
+
+<p>
+ Android N では、Android フレームワーク内で <a href="http://site.icu-project.org/">ICU4J</a> API のサブセットが提供されており、<code>android.icu</code> パッケージにあります。
+移行は簡単で、ほとんどの場合、名前空間を <code>com.java.icu</code> から <code>android.icu</code> に変更するだけです。
+
+アプリで ICU4J バンドルを既に使用している場合は、Android フレームワークで提供されている <code>android.icu</code> API に移行すると、APK サイズを大幅に削減できます。
+
+
+</p>
+
+<p>
+ Android ICU4J API の詳細については、<a href="{@docRoot}preview/features/icu4j-framework.html">ICU4J のサポート</a>をご覧ください。
+</p>
+
+
+
+<h2 id="gles_32">OpenGL™ ES 3.2 API</h2>
+
+<p>Android N では、OpenGL ES 3.2 用の以下のようなフレームワーク インターフェースとプラットフォーム サポートが追加されています。</p>
+
+<ul>
+ <li> <code>EXT_texture_sRGB_decode</code> を除く <a class="external-link" href="https://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">Android エクステンション パック</a></a>(AEP)のすべての拡張機能
+
+ <li> HDR および遅延シェーディング用の浮動小数点フレームバッファ
+ <li> 一括処理とストリーミングを向上させるための BaseVertex 描画呼び出し
+ <li> WebGL のオーバーヘッドを低減するための堅牢なバッファ アクセス コントロール
+</ul>
+
+<p>Android N の OpenGL ES 3.2 用のフレームワーク API は、<code>GLES32</code> クラスで提供されます。
+OpenGL ES 3.2 を使用する場合、<code><uses-feature></code> タグと <code>android:glEsVersion</code> 属性を使用してマニフェスト ファイルで要件を宣言する必要があります。
+
+ </p>
+
+<p>端末でサポートされる OpenGL ES のバージョンを実行時に確認する方法など、OpenGL ES の使用方法については、<a href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL ES API ガイド</a>をご覧ください。
+</p>
+
+
+<h2 id="android_tv_recording">Android TV の録画機能</h2>
+
+<p>Android N では、新しい recording API を介して Android TV 入力サービスからコンテンツを録画して再生する機能が追加されています。
+TV 入力サービスでは、録画できるチャンネル データや録画したセッションを保存する方法の制御、ユーザーによる録画されたコンテンツの操作の管理を行うことができます。このサービスは、既存の time-shifting API を使用して構築されています。
+
+ </p>
+
+<p>詳細については、<a href="{@docRoot}preview/features/tv-recording-api.html">Android TV Recording API</a> をご覧ください。</p>
+
+
+<h2 id="android_for_work">Android for Work</h2>
+
+<p>Android for Work は、Android N を実行している端末に多くの新しい機能と API を追加するものです。主要な機能の一部を以下に紹介します。変更点の完全なリストについては、<a href="{@docRoot}preview/features/afw.html">Android for Work のアップデート</a>をご覧ください。
+
+</p>
+
+<h3 id="work_profile_security_challenge">仕事用プロファイルによるセキュリティ確認 </h3>
+
+<p>
+ N SDK を対象としているプロファイル オーナーは、仕事用プロファイルで実行しているアプリで個別にセキュリティ確認を行うよう指定することができます。
+
+ユーザーが仕事用アプリを開こうとすると、仕事用プロファイル用のセキュリティ確認画面が表示されます。
+セキュリティの確認に成功すると、仕事用プロファイルのロックが解除され、必要に応じて暗号化も解除されます。
+プロファイル オーナーは、<code>ACTION_SET_NEW_PASSWORD</code> でユーザーに仕事用プロファイル用のセキュリティ確認を設定するように求めたり、<code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> でユーザーに端末のロックを設定するように求めたりします。
+
+
+
+</p>
+
+<p>
+ プロファイル オーナーは、<code>setPasswordQuality()</code>、<code>setPasswordMinimumLength()</code>、および関連するメソッドを使用して、仕事用プロファイル用のセキュリティ確認に個別のパスコード ポリシー(PIN に必要な長さや、指紋によるプロファイルのロック解除が可能かどうかなど)を設定できます。
+
+
+また、新しい <code>getParentProfileInstance()</code> メソッドが返す <code>DevicePolicyManager</code> インスタンスを使用して端末のロックを設定できます。
+
+
+ さらに、新しい <code>setOrganizationColor()</code> メソッドおよび <code>setOrganizationName()</code> メソッドを使用して仕事用プロファイル用のセキュリティ確認画面をカスタマイズすることができます。
+
+
+</p>
+<h3 id="turn_off_work">ワークモードのオフ </h3>
+
+<p>ユーザーは、仕事用プロファイルがある端末でワークモードを切り替えることができます。ワークモードがオフになると、管理されているユーザーが一時的にシャットダウンされ、仕事用プロファイルのアプリ、バックグラウンドでの同期、通知が無効になります。
+
+これには、プロファイル オーナーのアプリが含まれます。
+また、ワークモードがオフになると、仕事用アプリを起動できないことをユーザーに示すステータス アイコンが表示されたままになります。
+ランチャーは、仕事用アプリとウィジェットにアクセスできないことを示します。
+ </p>
+
+<h3 id="always_on_vpn">Always on VPN </h3>
+
+<p>デバイス オーナーとプロファイル オーナーは、指定した VPN を介して仕事用アプリが常時接続するように設定できます。
+端末が起動すると、システムは VPN を自動的に開始します。
+</p>
+
+<p>
+ <code>setAlwaysOnVpnPackage()</code> と <code>getAlwaysOnVpnPackage()</code> は新しい <code>DevicePolicyManager</code> のメソッドです。
+
+
+</p>
+
+<p>システムがアプリの介入なしに VPN サービスを直接バインドするため、Always on VPN の新しいエンドポイントは VPN クライアント側で処理する必要があります。
+以前と同じように、システムへのサービスの通知はインテント フィルタのマッチング アクション <code>android.net.VpnService</code> で行います。
+
+ </p>
+
+<p>
+ プライマリ ユーザーは、<strong>[Settings] > [More] > [Vpn]</strong> から、<code>VPNService</code> のメソッドを実装した Always on VPN クライアントを手動で設定することもできます。
+
+
+</p>
+
+<h3 id="custom_provisioning">カスタマイズされたプロビジョニング</h3>
+
+<p>
+ アプリでは、コーポレート・カラーやロゴを含むプロファイル オーナーとデバイス オーナーのプロビジョニング フローをカスタマイズできます。<code>DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR</code> はフローカラーをカスタマイズします。<code>DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI</code> は、コーポレート ロゴを含むフローをカスタマイズします。
+
+
+
+
+</p>
+
+<h2 id="accessibility_enhancements">ユーザー補助機能の強化</h2>
+
+<p>Android N では、新しい端末のセットアップのオープニング画面に [Vision Settings] が直接表示されます。
+これにより、ユーザーは、ズーム操作、フォントサイズ、ディスプレイ サイズ、TalkBack など、端末のユーザー補助機能を簡単に見つけて設定できるようになっています。
+
+ </p>
+
+<p>このようなユーザー補助機能が目立つ場所に配置されたため、ユーザーがこれらの機能を有効にしてアプリを試用する可能性が高まりました。
+これらの設定を有効にして、アプリを事前にテストするようにしてください。
+これらの設定は、[Settings] > [Accessibility] で有効にできます。
+</p>
+
+<p>Android N では、ユーザー補助機能サービスにより、運動障害のあるユーザーが画面をタップすることを支援できます。
+この新しい API を使用すると、顔追跡、視線追跡、ポイント スキャンなどの機能を備えたサービスを構築して、これらのユーザーのニーズに対応することができます。
+
+</p>
+
+<p>詳細については、ダウンロード可能な <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API リファレンス</a>の <code>android.accessibilityservice.GestureDescription</code> をご覧ください。
+</p>
+
+
+<h2 id="direct_boot">ダイレクト ブート</h2>
+
+<p>ダイレクト ブートは端末のスタートアップ時間を短縮し、予期しない再起動後でも、登録されたアプリの一部の機能が使用できるようにします。たとえば、ユーザーの就寝中に暗号化された端末が再起動した場合でも、登録したアラーム、メッセージ、電話の着信をユーザーに通常どおり通知することができます。
+
+
+
+また、再起動後にユーザー補助機能サービスをすぐに使用することもできます。
+</p>
+
+<p>ダイレクト ブートでは、Android N のファイルベースの暗号化を活用して、システムとアプリのデータに対してきめ細かい暗号化ポリシーを有効にします。システムは、一部のシステムデータと明示的に登録されたアプリデータに端末暗号化ストアを使用します。
+
+
+デフォルトでは、他のすべてのシステムデータ、ユーザーデータ、アプリ、アプリデータには、認証情報暗号化ストアが使用されます。
+ </p>
+
+<p>システムは起動時に端末暗号化データのみにアクセスできる制限モードになります。この状態では、アプリやデータへの一般的なアクセスは許可されません。このモードで実行する必要のあるコンポーネントがある場合、マニフェストにフラグを設定することでコンポーネントを登録できます。
+
+
+再起動後、システムは、<code>LOCKED_BOOT_COMPLETED</code> インテントをブロードキャストすることにより、登録済みのコンポーネントをアクティベートします。
+
+システムは、ロック解除する前に、登録済みの端末暗号化アプリデータを利用できるようにします。
+他のすべてのデータは、ユーザーがロック画面の認証情報を確認して暗号化を解除するまで利用できません。
+ </p>
+
+詳細については、<a href="{@docRoot}preview/features/direct-boot.html">ダイレクト ブート</a>をご覧ください。</p>
+</p>
+
+
+<h2 id="key_attestation">キーの構成証明</h2>
+
+<p>ハードウェアがサポートするキーストアは、Android 端末で暗号化キーを作成、格納、使用するためのより安全な方法を提供します。
+このキーストアは、Linux カーネル、Android の潜在的な脆弱性、ルート権限を取得された端末からの抽出からキーを保護します。
+
+</p>
+
+<p>ハードウェアがサポートするキーストアの使用をさらに簡単かつ安全にするために、Android N では、キーの構成証明が導入されています。
+アプリや別の端末は、キーの構成証明を使用して RSA または EC キーペアがハードウェアでサポートされているかどうか、キーペアのプロパティはどのようなものか、使用方法や有効性にどのような制限が適用されるかを積極的に確認することができます。
+
+
+ </p>
+
+<p>アプリや別の端末のサービスは、有効な構成証明キーによって署名された X.509 構成証明書を通じて、キーペアについての情報をリクエストできます。
+
+この構成証明キーは、出荷前に端末のハードウェアがサポートするキーストアに挿入される ECDSA 署名キーです。したがって、有効な構成証明キーによって署名される構成証明書により、ハードウェアがサポートするキーストアの存在に加えて、そのキーストアのキーペアの詳細が確認されます。
+
+
+
+</p>
+
+<p>端末が Android の安全な公式ファクトリー イメージを使用していることを確認するために、キーの構成証明では、端末の<a class="external-link" href="https://source.android.com/security/verifiedboot/verified-boot.html#bootloader_requirements">ブートローダー</a>が以下の情報を <a class="external-link" href="https://source.android.com/security/trusty/index.html">Trusted Execution Environment(TEE)</a>に提供することが要求されます。
+
+
+</p>
+
+<ul>
+<li>端末にインストールされる OS のバージョンとパッチレベル</li>
+<li><a href="https://source.android.com/security/verifiedboot/index.html" class="external-link">セキュアブート</a>の公開キーとロック ステータス</li>
+ </ul>
+
+<p>ハードウェアがサポートするキーストアの機能の詳細については、<a href="https://source.android.com/security/keystore/" class="external-link">ハードウェアがサポートするキーストア</a>に関するガイドをご覧ください。
+</p>
+
+<p>Android N では、キーの構成証明に加えて、指紋にバインドされたキーが導入されています。このキーは、指紋を登録しても無効になることはありません。
+</p>
+
+<h2 id="network_security_config">ネットワーク セキュリティ構成</h2>
+
+<p>Android N では、エラーが発生しやすいプログラムによる従来の API(X509TrustManager など)ではなく、宣言型のネットワーク セキュリティ構成を使用することにより、コードを変更することなく、セキュアな(HTTPS、TLS)接続の動作をアプリで安全にカスタマイズできます。<em></em>
+
+
+</p>
+
+ <p>以下の機能がサポートされます。</p>
+<ul>
+<li><b>カスタム トラスト アンカー。</b>アプリのセキュアな接続にどの証明機関(CA)を信頼するかをカスタマイズできます。
+たとえば、特定の自己署名証明書や制限された一連の公的 CA を信頼できます。
+
+</li>
+<li><b>デバッグ限定のオーバーライド。</b>アプリのデベロッパーは、インストール ベースに対する追加リスクなしに、アプリのセキュアな接続を安全にデバッグできます。
+
+
+</li>
+<li><b>クリアテキスト トラフィックのオプトアウト。</b>クリアテキスト トラフィックの意図しない使用からアプリを保護できます。
+</li>
+<li><b>証明書のピン留め。</b>アプリのセキュアな接続で信頼するサーバーキーを制限できる高度な機能です。
+</li>
+</ul>
+
+<p>詳細については、<a href="{@docRoot}preview/features/security-config.html">ネットワーク セキュリティ構成</a>をご覧ください。
+</p>
+
+<h2 id="default_trusted_ca">既定の信頼される証明機関</h2>
+
+<p>既定では、Android N 用アプリは、システムが提供する証明書のみを信頼し、ユーザーが追加した証明機関(CA)を信頼しません。
+ユーザーが追加した CA を信頼する必要がある Android N 向けのアプリは、<a href="{@docRoot}preview/features/security-config.html">ネットワーク セキュリティ構成</a>を使用して、ユーザー CA を信頼する方法を指定する必要があります。
+
+
+</p>
+
+<h2 id="apk_signature_v2">APK 署名スキーム v2</h2>
+
+<p>
+ Android N では、APK 署名スキーム v2 というアプリのインストール時間を高速化したり、APK ファイルに無許可の変更が行われないようにしたりする新しいアプリ署名スキームが導入されています。
+
+既定では、Android Studio 2.2 と Gradle 2.2 用の Android プラグインで APK 署名スキーム v2 と従来の署名スキーム(JAR 署名を使用する)の両方を使用してアプリに署名します。
+
+
+</p>
+
+<p>
+ APK 署名スキーム v2 をアプリに適用することをお勧めしますが、この新しいスキームは必須ではありません。
+APK 署名スキーム v2 を使用するときにアプリが正しくビルドされていない場合は、この新しいスキームを無効にできます。
+無効化プロセスにより、Android Studio 2.2 と Gradle 2.2 用の Android プラグインでアプリへの署名に従来の署名スキームのみが使用されるようになります。
+
+従来のスキームのみを使用して署名するには、モジュール レベルの <code>build.gradle</code> ファイルを開き、<code>v2SigningEnabled false</code> という行をリリース用署名構成に追加します。
+
+
+
+</p>
+
+<pre>
+ android {
+ ...
+ defaultConfig { ... }
+ signingConfigs {
+ release {
+ storeFile file("myreleasekey.keystore")
+ storePassword "password"
+ keyAlias "MyReleaseKey"
+ keyPassword "password"
+ <strong>v2SigningEnabled false</strong>
+ }
+ }
+ }
+</pre>
+
+<p class="caution"><strong>警告:</strong> APK 署名スキーム v2 を使用してアプリに署名し、さらにアプリに変更を加える場合、アプリの署名は無効になります。
+
+そのため、APK 署名スキーム v2 を使用してアプリに署名する場合は、署名後ではなく署名前に <code>zipalign</code> などのツールを使用します。
+
+</p>
+
+<p>
+ 詳細については、Android Studio で<a href="{@docRoot}studio/publish/app-signing.html#release-mode">アプリに署名する</a>方法や、Gradle 用の Android プラグインを使用して<a href="{@docRoot}studio/build/build-variants.html#signing">アプリへの署名用ビルドファイルを構成する</a>方法を説明する Android Studio ドキュメントをご覧ください。
+
+
+
+</p>
+
+<h2 id="scoped_directory_access">特定のディレクトリへのアクセス</h2>
+
+<p>Android N では、アプリで新しい API を使用して、SD カードなどのリムーバブル メディア上のディレクトリといった特定の<a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">外部ストレージ</a> ディレクトリへのアクセスをリクエストできるようになりました。
+
+この新しい API は、アプリが <code>Pictures</code> ディレクトリなどの標準の外部ストレージ ディレクトリにアクセスする方法を大幅に簡略化します。
+写真アプリなどのアプリでは、<code>READ_EXTERNAL_STORAGE</code> の代わりに、この API ですべてのストレージ ディレクトリやストレージ アクセス フレームワークにアクセスできるため、ユーザーはそのディレクトリに移動できます。
+
+
+
+</p>
+
+<p>また、この新しい API は、ユーザーがアプリに外部ストレージへのアクセスを付与するステップを簡素化します。
+この新しい API を使用する場合、アプリがどのディレクトリへのアクセス許可を求めているかをわかりやすく説明するシンプルな UI が使用されます。
+
+</p>
+
+<p>詳細については、<a href="{@docRoot}preview/features/scoped-folder-access.html">特定のディレクトリへのアクセス</a>に関するデベロッパー向けドキュメントをご覧ください。
+
+</p>
+
+<h2 id="keyboard_shortcuts_helper">キーボード ショートカット ヘルパー</h2>
+
+<p>
+Android N では、ユーザーは Alt キー + / キーを同時に押して<em>キーボード ショートカット</em>画面をトリガーできます。この画面には、システムとアプリから使用できるすべてのショートカットが表示されます。
+
+これらは使用可能な場合はアプリのメニューから自動的に取得されますが、デベロッパーは独自に微調整したショートカットのリストを画面に表示することもできます。
+
+ダウンロード可能な <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API リファレンス</a>で説明するように、新しい <code>Activity.onProvideKeyboardShortcuts()</code> メソッドをオーバーライドしてこれを実行することができます。
+
+
+</p>
+
+<p>
+アプリ内のどこででもキーボード ショートカット ヘルパーをトリガーするには、関連アクティビティの {@code Activity.requestKeyboardShortcutsHelper()} を呼び出します。
+
+</p>
+
+<h2 id="sustained_performance_api">パフォーマンス維持 API</h2>
+
+<p>
+長時間実行するアプリではパフォーマンスが大幅に変動する可能性があります。これは、端末のコンポーネントがその温度制限に達するとシステムによりシステムオンチップ エンジンが抑制されるためです。
+
+この変動は、高性能で長時間実行するアプリを作成するアプリのデベロッパーの移動目標となります。
+
+</p>
+
+<p>
+これらの制限に対処するために、Android N には、<em>パフォーマンス維持モード</em>のサポートが含まれており、OEM は長時間実行するアプリに端末のパフォーマンスに関するヒントを提供することができます。
+
+アプリのデベロッパーはこれらのヒントを使用して、長時間にわたる予測可能な一定レベルの端末のパフォーマンスに合わせてアプリを調整できます。
+
+
+</p>
+
+<p>
+アプリのデベロッパーが N Developer Preview でこの新しい API を試すことができるのは、Nexus 6P 端末上でのみです。
+この機能を使用するには、パフォーマンス維持モードで実行するウィンドウにパフォーマンス維持ウィンドウ フラグを設定します。
+
+このフラグは {@code Window.setSustainedPerformanceMode()} メソッドを使用して設定します。
+このウィンドウがフォーカスされていない場合、このモードは自動的に無効になります。
+
+</p>
+
+<h2 id="vr">VR サポート</h2>
+
+<p>
+Android N には、新しい VR モードのためのプラットフォーム サポートと最適化が追加され、デベロッパーは高品質モバイル端末 VR 体験をユーザーのために生み出すことができます。
+多数のパフォーマンス強化があり、VR アプリ用の CPU コアへの排他アクセスが含まれます。アプリでは、VR 用に動作するインテリジェントなヘッド トラッキングやステレオ方式の通知を利用できます。
+
+
+最も重要な点は、Android N によって大幅に遅延の少ないグラフィックが実現される点です。
+Android N 向け VR アプリのビルドの詳細については、<a href="https://developers.google.com/vr/android/">Google VR SDK for Android</a> を参照してください。
+
+</p>
+
+
+<h2 id="print_svc">印刷サービス機能の強化</h2>
+
+<p>
+ Android N では、印刷サービスのデベロッパーが、各プリンターや印刷ジョブに関する追加情報を公開できるようになりました。
+
+</p>
+
+<p>
+ 各プリンターを一覧表示する場合、印刷サービスでは以下の 2 つの方法で各プリンターのアイコンを設定できます。
+
+</p>
+
+<ul>
+ <li><code>PrinterInfo.Builder.setResourceIconId()</code> を呼び出すことにより、リソース ID からアイコンを設定できます
+
+ </li>
+
+ <li><code>PrinterInfo.Builder.setHasCustomPrinterIcon()</code> を呼び出して、<code>android.printservice.PrinterDiscoverySession.onRequestCustomPrinterIcon()</code> を使用してアイコンがリクエストされた場合のコールバックを設定することにより、ネットワークからアイコンを表示できます
+
+
+
+ </li>
+</ul>
+
+<p>
+ また、追加情報を表示する各プリンターのアクティビティを提供する場合は、<code>PrinterInfo.Builder.setInfoIntent()</code> を呼び出します。
+
+</p>
+
+<p>
+ 印刷ジョブ通知に印刷ジョブの進捗状況やステータスを表示する場合は、<code>android.printservice.PrintJob.setProgress()</code> と <code>android.printservice.PrintJob.setStatus()</code> をそれぞれ呼び出します。
+
+
+
+</p>
+
+<p>
+ これらのメソッドの詳細については、ダウンロード可能な <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API リファレンス</a>をご覧ください。
+</p>
+
+<h2 id="framemetrics_api">FrameMetricsListener API</h2>
+
+<p>
+FrameMetricsListener API を使用すると、アプリでその UI レンダリング パフォーマンスを監視できます。
+この API は、アプリの現在のウィンドウのフレーム タイミング情報を転送するストリーミング Pub / Sub API を公開することにより、この機能を提供します。
+返されるデータは、<code><a href="{@docRoot}tools/help/shell.html#shellcommands">adb shell</a>
+dumpsys gfxinfo framestats</code> によって表示される内容と同じですが、過去の 120 フレームに制限されません。
+
+</p>
+
+<p>
+FrameMetricsListener を使用すると、USB 接続を使用せずに、本番環境のインタラクション レベルの UI パフォーマンスを計測できます。
+この API により、{@code adb shell dumpsys gfxinfo} を実行するより粒度の高いデータの収集が可能になります。
+
+アプリの特定のインタラクション データを収集できるため、この粒度の高さが可能となります。アプリのパフォーマンス全体の包括的な概要を取得したり、包括的な状態を明確にしたりする必要はありません。
+
+
+この機能を使用して、パフォーマンス データを収集したり、アプリでの実際のユースケースにおける UI パフォーマンスの低下を検出したりすることができます。
+
+
+</p>
+
+<p>
+ウィンドウを監視するには、<code>FrameMetricsListener.onMetricsAvailable()</code> コールバック メソッドを実装して、これを対象のウィンドウに登録します。
+詳細については、ダウンロード可能な <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API リファレンス</a>の {@code FrameMetricsListener} クラスのドキュメントをご覧ください。
+
+
+</p>
+
+<p>
+この API は {@code FrameMetrics} オブジェクトを提供します。これには、レンダリング サブシステムがフレーム ライフサイクル内のさまざまなマイルストーンで報告するタイミング データが含まれます。サポートされているメトリックは、{@code UNKNOWN_DELAY_DURATION}、{@code INPUT_HANDLING_DURATION}、{@code ANIMATION_DURATION}、{@code LAYOUT_MEASURE_DURATION}、{@code DRAW_DURATION}、{@code SYNC_DURATION}、{@code COMMAND_ISSUE_DURATION}、{@code SWAP_BUFFERS_DURATION}、{@code TOTAL_DURATION}、{@code FIRST_DRAW_FRAME} です。
+
+
+
+
+
+
+</p>
+
+
+<h2 id="virtual_files">仮想ファイル</h2>
+
+<p>
+ 旧バージョンの Android では、アプリはストレージ アクセス フレームワークを使用して、ユーザーが Google ドライブなどのクラウド ストレージ アカウントからファイルを選択できるようにしていました。
+
+ただし、バイトコードの直接表現がなかったファイルを表示する方法はありませんでした。すべてのファイルは入力ストリームの提供が必要でした。
+
+
+</p>
+
+<p>
+ Android N では、ストレージ アクセス フレームワークに<em>仮想ファイル</em>の概念が追加されています。
+仮想ファイル機能を使用すると、バイトコードの直接表現がなくても、{@link android.content.Intent#ACTION_VIEW} インテントで使用できるドキュメント URI を {@link android.provider.DocumentsProvider} で返すことができます。
+
+
+また、Android N では、ユーザー ファイル(仮想またはそれ以外)に別の形式を提供できます。
+
+</p>
+
+<p>
+ アプリで仮想ドキュメントの URI を取得するには、{@link android.content.Intent} を作成してからファイル ピッカーの UI を開きます。
+アプリでは {@link android.content.ContentResolver#openInputStream(Uri) openInputStream()} メソッドを使用して仮想ファイルを直接開くことができないため、{@link android.content.Intent#CATEGORY_OPENABLE} カテゴリが含まれている場合はどの仮想ファイルも受信されません。
+
+
+
+
+</p>
+
+<p>
+ ユーザーが選択した後で、{@link android.app.Activity#onActivityResult onActivityResult()} メソッドが呼び出されます。
+
+ 以下のコード スニペットに示すように、アプリは仮想ファイルの URI と入力ストリームを取得できます。
+
+</p>
+
+<pre>
+ // Other Activity code ...
+
+ final static private int REQUEST_CODE = 64;
+
+ // We listen to the OnActivityResult event to respond to the user's selection.
+ @Override
+ public void onActivityResult(int requestCode, int resultCode,
+ Intent resultData) {
+ try {
+ if (requestCode == REQUEST_CODE &&
+ resultCode == Activity.RESULT_OK) {
+
+ Uri uri = null;
+
+ if (resultData != null) {
+ uri = resultData.getData();
+
+ ContentResolver resolver = getContentResolver();
+
+ // Before attempting to coerce a file into a MIME type,
+ // check to see what alternative MIME types are available to
+ // coerce this file into.
+ String[] streamTypes =
+ resolver.getStreamTypes(uri, "*/*");
+
+ AssetFileDescriptor descriptor =
+ resolver.openTypedAssetFileDescriptor(
+ uri,
+ streamTypes[0],
+ null);
+
+ // Retrieve a stream to the virtual file.
+ InputStream inputStream = descriptor.createInputStream();
+ }
+ }
+ } catch (Exception ex) {
+ Log.e("EXCEPTION", "ERROR: ", ex);
+ }
+ }
+</pre>
+
+<p>
+ ユーザー ファイルへのアクセスの詳細については、<a href="{@docRoot}guide/topics/providers/document-provider.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
new file mode 100644
index 0000000..7c5fe5d
--- /dev/null
+++ b/docs/html-intl/intl/ja/about/versions/nougat/index.jd
@@ -0,0 +1,110 @@
+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
+
+<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-8of16" style="padding-left:2em">
+ <h1 class="dac-hero-title">Android 7.0 Nougat</h1>
+ <p class="dac-hero-description">
+ Android Nougat が正式リリースされる前に、
+ Nexus や他の端末で事前に<strong>アプリの動作をご確認いただけます</strong>。新しいシステム動作をサポートして、<strong>電力やメモリの使用量を削減しましょう</strong>。
+
+ <strong>マルチ ウィンドウ UI</strong> や<strong>ダイレクト リプライ通知</strong>などの機能も利用して、アプリを拡張してみてください。
+
+ </p>
+
+ <a class="dac-hero-cta" href="{@docRoot}about/versions/nougat/android-7.0.html">
+ <span class="dac-sprite dac-auto-chevron"></span>
+ スタートガイド
+ </a>
+ </div>
+ <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></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>
+</section>
+
+
+<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://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/dev-community">
+ <i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
+ 開発者コミュニティに参加
+ </a>
+ </li>
+ </ul>
+ </div><!-- end .wrap -->
+</div><!-- end .dac-actions -->
+
+<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"
+ data-query="type:blog+tag:androidn+tag:featured, type:youtube+tag:androidn+tag:featured"
+ data-sortOrder="-timestamp"
+ data-cardSizes="6x6"
+ data-items-per-page="6"
+ data-maxResults="15"
+ data-initial-results="3"></div>
+</div></section>
+
+<section class="dac-section dac-gray" id="videos"><div class="wrap">
+ <h1 class="dac-section-title">Videos</h1>
+ <div class="dac-section-subtitle">
+ 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: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>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ja/preview/j8-jack.jd b/docs/html-intl/intl/ja/guide/platform/j8-jack.jd
similarity index 100%
rename from docs/html-intl/intl/ja/preview/j8-jack.jd
rename to docs/html-intl/intl/ja/guide/platform/j8-jack.jd
diff --git a/docs/html-intl/intl/ja/guide/topics/ui/multi-window.jd b/docs/html-intl/intl/ja/guide/topics/ui/multi-window.jd
new file mode 100644
index 0000000..a8df89d
--- /dev/null
+++ b/docs/html-intl/intl/ja/guide/topics/ui/multi-window.jd
@@ -0,0 +1,589 @@
+page.title=マルチ ウィンドウのサポート
+page.metaDescription=複数のアプリを同時に表示するための Android N の新しいサポート。
+page.keywords="multi-window", "android N", "split screen", "free-form"
+
+@jd:body
+
+<div id="tb-wrapper">
+ <div id="tb">
+ <h2>このドキュメントの内容</h2>
+ <ol>
+ <li><a href="#overview">概要</a></li>
+ <li><a href="#lifecycle">マルチ ウィンドウ ライフサイクル</a></li>
+ <li><a href="#configuring">マルチ ウィンドウ モード向けアプリを構成する</a>
+</li>
+ <li><a href="#running">マルチ ウィンドウ モードでアプリを実行する</a></li>
+ <li><a href="#testing">アプリのマルチ ウィンドウ サポートをテストする</a></li>
+ </ol>
+ <h2>関連ドキュメント</h2>
+ <ol>
+ <li><a class="external-link" href="https://github.com/googlesamples/android-MultiWindowPlayground">マルチ ウィンドウ Playground のサンプルアプリ</a>
+</li>
+ <li><a class="external-link" href="https://medium.com/google-developers/5-tips-for-preparing-for-multi-window-in-android-n-7bed803dda64">Android N でマルチ ウィンドウを準備するための 5 つのヒント</a></li>
+ </ol>
+ </div>
+</div>
+
+<p>
+ Android N には、複数のアプリを同時に表示するためのサポートが追加されています。
+ハンドヘルド端末で、分割画面モードにして、2 つのアプリを並べて実行したり、重ねて表示したりできます。<em></em>
+TV 端末で、アプリがピクチャ イン ピクチャ モードで動画を再生しているときに、ユーザーは別のアプリを操作できます。<em></em>
+
+
+</p>
+
+<p>
+ N Preview SDK でアプリをビルドする場合、アプリがマルチ ウィンドウ ディスプレイを処理をする方法を設定できます。
+たとえば、アクティビティの最小許容ディメンションを指定できます。
+また、アプリに対してマルチ ウィンドウ ディスプレイを無効にし、アプリを全画面モードのみで表示することもできます。
+
+
+</p>
+
+<h2 id="overview">概要</h2>
+
+<p>
+ Android N では、複数のアプリが画面を同時に共有できます。たとえば、ユーザーは画面を分割し、ウェブページを左側の画面に表示しながら、右側の画面でメールを作成することができます。
+
+ユーザー エクスペリエンスは端末によって異なります。
+
+</p>
+
+<ul>
+ <li>Android N を実行しているハンドヘルド端末は、分割画面モードに対応しています。
+このモードでは、画面で 2 つのアプリが実行され、これらのアプリを並べて、または重ねて表示できます。
+ユーザーは、2 つのアプリを分離している分割線をドラッグして、1 つのアプリを拡大し、もう 1 つのアプリを縮小することができます。
+
+ </li>
+
+ <li>Android N を実行している Nexus Player で、アプリを<a href="picture-in-picture.html">ピクチャ イン ピクチャ モード</a>にすると、アプリにコンテンツを表示したまま、ユーザーは他のアプリをブラウジングまたは操作することができます。
+
+
+
+ </li>
+
+ <li>より大きい画面の端末のメーカーは、ユーザーが各アクティビティのサイズを自由に変更できるフリーフォーム モードを有効にすることもできます。
+メーカーがこの機能を有効にした場合、端末では、分割画面モードに加えて、フリーフォーム モードが利用できます。
+
+
+ </li>
+</ul>
+
+<img src="{@docRoot}images/android-7.0/mw-splitscreen.png" alt="" width="650" srcset="{@docRoot}images/android-7.0/mw-splitscreen.png 1x,
+ {@docRoot}images/android-7.0/mw-splitscreen_2x.png 2x," id="img-split-screen" />
+<p class="img-caption">
+ <strong>図 1.</strong> 分割画面モードで並べて実行されている 2 つのアプリ。
+</p>
+
+<p>
+ ユーザーは、次の方法でマルチ ウィンドウ モードに切り替えることができます。
+</p>
+
+<ul>
+ <li>ユーザーは <a href="{@docRoot}guide/components/recents.html">[Overview] 画面</a>を開いているときに、アクティビティのタイトルを長押ししてから、そのアクティビティを画面の強調表示された部分にドラッグすることにより、アクティビティをマルチ ウィンドウ モードにすることができます。
+
+
+
+ </li>
+
+ <li>ユーザーが [Overview] ボタンを長押しすると、現在のアクティビティがマルチ ウィンドウ モードになり、[Overview] 画面が開くので、ユーザーは、画面で共有する別のアクティビティを選択できるようになります。
+
+
+ </li>
+</ul>
+
+<p>
+ ユーザーは、複数のアクティビティが画面を共有しているときに、データを 1 つのアクティビティから別のアクティビティに<a href="{@docRoot}guide/topics/ui/drag-drop.html">ドラッグ&ドロップ</a>できます
+
+(以前は、単一のアクティビティ内でのみデータをドラッグ&ドロップできました)。
+
+</p>
+
+<h2 id="lifecycle">マルチ ウィンドウ ライフサイクル</h2>
+
+<p>
+ マルチ ウィンドウ モードは、<a href="{@docRoot}training/basics/activity-lifecycle/index.html">アクティビティのライフサイクル</a>を変更しません。
+
+</p>
+
+<p>
+ マルチ ウィンドウ モードでは、ユーザーが直前に操作したアクティビティのみが任意の時点でアクティブになります。
+このアクティビティは、トップ レベルにあると見なされます。<em></em>
+ 他のすべてのアクティビティは、表示されていても一時停止状態になっています。
+ ただし、一時停止状態ではあるが、表示されているこれらのアクティビティには、表示されていないアクティビティよりも高い優先度が付与されます。
+ユーザーが一時停止状態のアクティビティのいずれかを操作した場合、そのアクティビティが再開され、前のトップ レベルのアクティビティが一時停止します。
+
+
+</p>
+
+<p class="note">
+ <strong>注:</strong>マルチ ウィンドウ モードでは、アプリが一時停止状態になっても、そのアプリを表示したままにすることができます。
+アプリは、一時停止していても、アクティビティを続行する必用がある場合があります。
+たとえば、一時停止モードになっているが、表示されている動画再生アプリは、動画の表示を継続する必要があります。
+そのため、動画を再生するアクティビティが {@link android.app.Activity#onPause onPause()} ハンドラで動画を一時停止しないようにすることをお勧めします。
+
+<em></em>
+ その代わり、これらのアクティビティは {@link android.app.Activity#onStop
+ onStop()} で動画を一時停止し、{@link android.app.Activity#onStart
+ onStart()} で動画の再生を再開する必要があります。
+</p>
+
+<p>
+ <a href="{@docRoot}guide/topics/resources/runtime-changes.html">実行時の変更の処理</a>で指定したように、ユーザーがアプリをマルチ ウィンドウ モードにすると、アクティビティに構成の変更が通知されます。
+
+これは、ユーザーがアプリのサイズを変更するか、アプリを全画面モードに戻した場合にも行われます。
+
+ 基本的に、この構成の変更は、端末が縦表示から横表示に切り替えられたことをアプリに通知する場合と同じ影響(端末のディメンションが変更された場合を除いて)をアクティビティのライフサイクルに及ぼします。
+
+
+<a href="{@docRoot}guide/topics/resources/runtime-changes.html">実行時の変更の処理</a>で説明したように、アクティビティは構成の変更を処理することができます。または、システムによってアクティビティを破棄し、新しいディメンションでアクティビティを再作成することもできます。
+
+
+
+</p>
+
+<p>
+ ユーザーがウィンドウのサイズを変更して、高さや幅を拡大した場合、ユーザー操作に一致するようにアクティビティのサイズが変更され、必要に応じて、<a href="{@docRoot}guide/topics/resources/runtime-changes.html">実行時の変更</a>が発行されます。
+
+アプリで新しく表示された領域を描画するまでに時間がかかる場合、{@link
+ android.R.attr#windowBackground windowBackground} 属性またはデフォルトの
+<code>windowBackgroundFallback</code> システム属性によって指定された色でこれらの領域が一時的に塗りつぶされます。
+
+</p>
+
+<h2 id="configuring">マルチ ウィンドウ モード向けアプリを構成する</h2>
+
+<p>
+ アプリが Android N をターゲットにしている場合は、アプリのアクティビティがマルチ ウィンドウ ディスプレイをサポートする方法や、このサポートを行うかどうかを決めることができます。
+サイズとレイアウトを制御するための属性をマニフェストに設定できます。
+
+ ルート アクティビティ属性の設定は、タスクスタック内のすべてのアクティビティに適用されます。
+たとえば、ルート アクティビティにより
+<code>android:resizeableActivity</code> が true に設定されると、タスク スタック内のすべてのアクティビティのサイズを変更できるようになります。
+
+</p>
+
+<p class="note">
+ <strong>注:</strong>Android N より前の SDK バージョンでマルチ オリエンテーション アプリをビルドして、そのアプリをマルチ ウィンドウ モードで使用する場合は、アプリのサイズが強制的に変更されます。
+
+アプリに予想外の動作が発生する場合があることをユーザーに警告するダイアログ ボックスが表示されます。
+システムは、画面の向きが固定されたアプリのサイズを変更しません。ユーザーがマルチ ウィンドウ モードで画面の向きが固定されたアプリを開こうとすると、そのアプリが全画面で表示されます。<em></em>
+
+
+
+</p>
+
+<h4 id="resizeableActivity">android:resizeableActivity</h4>
+<p>
+ マルチ ウィンドウ ディスプレイを有効または無効にするには、この属性をマニフェストの <code><activity></code> ノードまたは
+<code><application></code> ノードに設定します。
+
+</p>
+
+<pre>
+android:resizeableActivity=["true" | "false"]
+</pre>
+
+<p>
+ この属性が true に設定されている場合、アクティビティを分割画面モードまたはフリーフォーム モードで起動できます。
+この属性が false に設定されている場合、アクティビティはマルチ ウィンドウ モードをサポートしません。
+この値が false のとき、ユーザーがアクティビティをマルチ ウィンドウ モードで起動しようとすると、アクティビティが全画面で表示されます。
+
+
+</p>
+
+<p>
+ アプリが Android N をターゲットにしているが、この属性の値が指定されていない場合、属性の値がデフォルトの true になります。
+
+</p>
+
+<h4 id="supportsPictureInPicture">android:supportsPictureInPicture</h4>
+
+<p>
+ この属性をマニフェストの <code><activity></code> ノードに設定すると、アクティビティがピクチャ イン ピクチャ ディスプレイをサポートするかどうかを示すことができます。
+<code>android:resizeableActivity</code> が false の場合、この属性は無視されます。
+
+</p>
+
+<pre>
+android:supportsPictureInPicture=["true" | "false"]
+</pre>
+
+<h3 id="layout">レイアウト属性</h3>
+
+<p>
+ Android N では、<code><layout></code> マニフェスト要素により、マルチ ウィンドウ モードでのアクティビティの動作に影響を及ぼすいくつかの属性がサポートされています。
+
+
+</p>
+
+<dl>
+ <dt>
+ <code>android:defaultWidth</code>
+ </dt>
+
+ <dd>
+ フリーフォーム モードで起動されたときのアクティビティのデフォルトの幅です。
+ </dd>
+
+ <dt>
+ <code>android:defaultHeight</code>
+ </dt>
+
+ <dd>
+ フリーフォーム モードで起動されたときのアクティビティのデフォルトの高さです。
+ </dd>
+
+ <dt>
+ <code>android:gravity</code>
+ </dt>
+
+ <dd>
+ フリーフォーム モードで起動されたときのアクティビティの初期配置です。適切な値については、
+{@link android.view.Gravity} のリファレンスをご覧ください。
+ </dd>
+
+ <dt>
+ <code>android:minimalHeight</code>、<code>android:minimalWidth</code>
+ </dt>
+
+ <dd>
+ 分割画面モードおよびフリーフォーム モードでのアクティビティの最小の高さと幅です。
+ユーザーが分割画面モードの分割線を移動して、アクティビティを指定された最小ディメンションよりも小さくすると、アクティビティはユーザーがリクエストしたサイズにトリミングされます。
+
+
+ </dd>
+</dl>
+
+<p>
+ たとえば、次のコードは、アクティビティがフリーフォーム モードで表示されているときに、アクティビティのデフォルトのサイズと位置、およびその最小サイズを指定する方法を示しています。
+
+
+</p>
+
+<pre>
+<activity android:name=".MyActivity">
+ <layout android:defaultHeight="500dp"
+ android:defaultWidth="600dp"
+ android:gravity="top|end"
+ android:minimalHeight="450dp"
+ android:minimalWidth="300dp" />
+</activity>
+</pre>
+
+<h2 id="running">マルチ ウィンドウ モードでアプリを実行する</h2>
+
+<p>
+ Android N では、マルチ ウィンドウ モードで実行できるアプリをサポートするための新しい機能が導入されています。
+
+</p>
+
+<h3 id="disabled-features">マルチ ウィンドウ モードで無効になる機能</h3>
+
+<p>
+ 端末がマルチ ウィンドウ モードになっている場合、特定の機能は、端末の画面を他のアクティビティやアプリと共有する場合があるアクティビティに対して機能しないため、これらの機能は無効なるか、無視されます。
+
+これらの機能には、次のものが含まれます。
+
+<ul>
+ <li><a href="{@docRoot}training/system-ui/index.html">システム UI</a> の一部のカスタマイズ オプションは無効になります。たとえば、アプリが全画面モードで実行されていない場合、アプリのステータスバーを非表示にできません。
+
+
+ </li>
+
+ <li>システムは、<code><a href=
+ "{@docRoot}guide/topics/manifest/activity-element.html#screen"
+ >android:screenOrientation</a></code> 属性に加えられた変更を無視します。
+ </li>
+</ul>
+
+<h3 id="change-notification">マルチ ウィンドウの変更通知とクエリ</h3>
+
+<p>
+ マルチ ウィンドウ ディスプレイをサポートするために、次の新しいメソッドが {@link android.app.Activity} クラスに追加されています。
+各メソッドの詳細については、<a href="{@docRoot}preview/setup-sdk.html#docs-dl">N Preview SDK リファレンス</a>をご覧ください。
+
+
+</p>
+
+<dl>
+ <dt>
+ <code>Activity.isInMultiWindowMode()</code>
+ </dt>
+
+ <dd>
+ アクティビティがマルチ ウィンドウ モードで実行されているかどうかを判別するために呼び出します。
+ </dd>
+
+ <dt>
+ <code>Activity.isInPictureInPictureMode()</code>
+ </dt>
+
+ <dd>
+ アクティビティがピクチャ イン ピクチャ モードで実行されているかどうかを判別するために呼び出します。
+
+ <p class="note">
+ <strong>注:</strong>ピクチャ イン ピクチャ モードは、マルチ ウィンドウ モードの特別な形態です。
+<code>myActivity.isInPictureInPictureMode()</code> が true を返す場合は、<code>myActivity.isInMultiWindowMode()</code> も true を返します。
+
+
+ </p>
+ </dd>
+
+ <dt>
+ <code>Activity.onMultiWindowModeChanged()</code>
+ </dt>
+
+ <dd>
+ アクティビティがマルチ ウィンドウ モードになるか、マルチ ウィンドウ モードではなくなると、常にこのメソッドが呼び出されます。
+アクティビティがマルチ ウィンドウ モードになると、このメソッドに true 値が渡され、アクティビティがマルチ ウィンドウ モードではなくなると、このメソッドに false 値が渡されます。
+
+
+ </dd>
+
+ <dt>
+ <code>Activity.onPictureInPictureModeChanged()</code>
+ </dt>
+
+ <dd>
+ アクティビティがピクチャ イン ピクチャ モードになるか、ピクチャ イン ピクチャ モードではなくなると、常にこのメソッドが呼び出されます。
+アクティビティがピクチャ イン ピクチャ モードになると、このメソッドに true 値が渡され、アクティビティがピクチャ イン ピクチャ モードではなくなると、このメソッドに false 値が渡されます。
+
+
+ </dd>
+</dl>
+
+<p>
+ また、これらの各メソッドの {@link android.app.Fragment} バージョンがあります。たとえば、<code>Fragment.isInMultiWindowMode()</code> です。
+
+</p>
+
+<h3 id="entering-pip">ピクチャ イン ピクチャ モードにする</h3>
+
+<p>
+ アクティビティをピクチャ イン ピクチャ モードにするには、新しいメソッド
+<code>Activity.enterPictureInPictureMode()</code> を呼び出します。端末がピクチャ イン ピクチャ モードをサポートしない場合、このメソッドの効果はありません。
+詳細については、<a href="picture-in-picture.html">ピクチャ イン ピクチャ</a>に関するドキュメントをご覧ください。
+
+</p>
+
+<h3 id="launch">マルチ ウィンドウ モードで新しいアクティビティを起動する</h3>
+
+<p>
+ 新しいアクティビティを起動するときに、可能であれば、新しいアクティビティを現在のアクティビティの隣に表示する必用があるかどうかをシステムに示すことができます。
+そうするには、フラグ
+<code>Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT</code> を使用します。
+このフラグを渡すと、次の動作がリクエストされます。
+
+</p>
+
+<ul>
+ <li>端末が分割画面モードになっている場合、システムは、起動しているアクティビティの隣に新しいアクティビティを作成しようとするので、これらの 2 つのアクティビティが画面を共有します。
+
+システムでは、この操作の実行が保証されるわけではありませんが、可能であれば、アクティビティが並べて表示されます。
+
+ </li>
+
+ <li>端末が分割画面モードではない場合、このフラグの効果はありません。
+ </li>
+</ul>
+
+<p>
+ 端末がフリーフォーム モードになっている場合、新しいアクティビティを起動するときに、
+<code>ActivityOptions.setLaunchBounds()</code> を呼び出すことにより、新しいアクティビティのディメンションと画面上での位置を指定することができます。
+端末がマルチ ウィンドウ モードではない場合、このメソッドの効果はありません。
+
+</p>
+
+<p class="note">
+ <strong>注:</strong>タスクスタック内でアクティビティを起動すると、画面上のアクティビティが起動したアクティビティに置き換えられ、すべてのマルチ ウィンドウ プロパティが継承されます。
+
+マルチ ウィンドウ モードで新しいアクティビティを別個の画面として起動する場合は、新しいアクティビティを新しいタスクスタックで起動する必要があります。
+
+</p>
+
+<h3 id="dnd">ドラッグ&ドロップのサポート</h3>
+
+<p>
+ ユーザーは、2 つのアクティビティが画面を共有しているときに、データを 1 つのアクティビティから別のアクティビティに<a href="{@docRoot}guide/topics/ui/drag-drop.html">ドラッグ&ドロップ</a>できます
+
+(以前は、単一のアクティビティ内でのみデータをドラッグ&ドロップできました)。
+そのため、アプリがドラッグ&ドロップをサポートしていない場合は、ドラッグ&ドロップ機能をアプリに追加する必要があります。
+
+</p>
+
+<p>
+ N Preview SDK では、異なるアプリ間のドラッグ&ドロップをサポートするために、<a href="{@docRoot}reference/android/view/package-summary.html"><code>android.view</code></a> パッケージが拡張されています。
+次のクラスとメソッドの詳細については、<a href="{@docRoot}preview/setup-sdk.html#docs-dl">N Preview SDK リファレンス</a>をご覧ください。
+
+
+</p>
+
+<dl>
+ <dt>
+ <code>android.view.DropPermissions</code>
+ </dt>
+
+ <dd>
+ ドロップを受け取るアプリに付与されるパーミッションの指定を処理するトークン オブジェクトです。
+
+ </dd>
+
+ <dt>
+ <code>View.startDragAndDrop()</code>
+ </dt>
+
+ <dd>
+ {@link android.view.View#startDrag View.startDrag()} の新しいエイリアスです。異なるアクティビティ間のドラッグ&ドロップを有効にするには、新しいフラグ
+<code>View.DRAG_FLAG_GLOBAL</code> を渡します。
+URI パーミッションを受け取る側のアクティビティに付与する必要がある場合、必要に応じて、新しいフラグ
+<code>View.DRAG_FLAG_GLOBAL_URI_READ</code> または
+<code>View.DRAG_FLAG_GLOBAL_URI_WRITE</code> を渡します。
+
+ </dd>
+
+ <dt>
+ <code>View.cancelDragAndDrop()</code>
+ </dt>
+
+ <dd>
+ 実行中のドラッグ操作をキャンセルします。ドラッグ操作を開始したアプリだけが呼び出せます。
+
+ </dd>
+
+ <dt>
+ <code>View.updateDragShadow()</code>
+ </dt>
+
+ <dd>
+ 実行中のドラッグ操作のドラッグ シャドウを置き換えます。ドラッグ操作を開始したアプリだけが呼び出せます。
+
+ </dd>
+
+ <dt>
+ <code>Activity.requestDropPermissions()</code>
+ </dt>
+
+ <dd>
+ {@link android.view.DragEvent} に含まれる {@link
+ android.content.ClipData} で渡されるコンテンツ URI のパーミッションをリクエストします。
+ </dd>
+</dl>
+
+<h2 id="testing">アプリのマルチ ウィンドウ サポートをテストする</h2>
+
+<p>
+ ユーザーが Android N を実行している端末をマルチ ウィンドウ モードにしてアプリの起動を試みる場合に備えて、Android N 向けにアプリをアップデートするかどうかに関係なく、アプリがマルチ ウィンドウ モードでどのように動作するかを確認する必要があります。
+
+
+</p>
+
+<h3 id="configuring">テスト端末の構成</h3>
+
+<p>
+ Android N を端末にインストールすると、分割画面モードが自動的にサポートされます。
+
+</p>
+
+<h3 id="test-non-n">アプリが N Preview SDK でビルドされていない場合</h3>
+
+<p>
+ アプリが N Preview SDK でビルドされていないときに、ユーザーがマルチ ウィンドウ モードでそのアプリを使用しようとすると、アプリが画面の向きの固定を宣言しない限り、アプリのサイズが強制的に変更されます。
+
+
+</p>
+
+<p>
+ アプリが画面の向きの固定を宣言しない場合、Android N を実行している端末でアプリを起動し、アプリを分割画面モードにすることを試みる必要があります。
+
+アプリのサイズが強制的に変更されたときに、ユーザー エクスペリエンスが許容範囲内にあることを確認してください。
+
+</p>
+
+<p>
+ アプリが画面の向きの固定を宣言する場合、アプリをマルチ ウィンドウ モードにすることを試みる必要があります。
+アプリをマルチ ウィンドウ モードにすることを試みたとき、アプリが全画面モードのままであることを確認してください。
+
+</p>
+
+<h3 id="test-mw">マルチ ウィンドウ モードをサポートする場合</h3>
+
+<p>
+ アプリが N Preview SDK でビルドされていて、マルチ ウィンドウ モードが無効になっていない場合、分割画面モードとフリーフォーム モードの両方で次の動作を確認してください。
+
+
+</p>
+
+<ul>
+ <li>アプリを全画面モードで起動してから、[Overview] ボタンを長押しして、マルチ ウィンドウ モードに切り替えます。
+モードが適切に切り替わることを確認します。
+ </li>
+
+ <li>アプリをマルチ ウィンドウ モードで直接起動し、アプリが適切に起動することを確認します。
+[Overview] ボタンを押すと、アプリをマルチ ウィンドウ モードで起動できます。次に、アプリのタイトルバーを長押しし、アプリを画面上の強調表示された領域のいずれかにドラッグします。
+
+
+ </li>
+
+ <li>分割画面モードで分割線をドラッグして、アプリのサイズを変更します。
+ アプリがクラッシュせずに、アプリのサイズが変更され、必要な UI 要素が表示されることを確認します。
+
+ </li>
+
+ <li>アプリの最小ディメンションを指定している場合、アプリのサイズをそれらのディメンション以下にすることを試みてください。
+アプリのサイズを指定最小ディメンションよりも小さくできないことを確認してください。
+
+ </li>
+
+ <li>すべてのテストを通じて、アプリのパフォーマンスが許容範囲内にあることを確認してください。たとえば、アプリのサイズを変更した後、UI の更新に大きな遅延がないことを確認してください。
+
+
+ </li>
+</ul>
+
+<h4 id="test-checklist">チェックリストのテスト</h4>
+
+<p>
+ アプリのパフォーマンスをマルチ ウィンドウ モードで確認するには、以下の操作を試みてください。
+特に記載のない限り、分割画面モードとマルチ ウィンドウ モードの両方でこれらの操作を試みる必要があります。
+
+</p>
+
+<ul>
+ <li>マルチ ウィンドウ モードを有効にしてから無効にします。
+ </li>
+
+ <li>1 つのアプリから別のアプリに切り替えたとき、最初のアプリの動作が適切であり、表示されているが、アクティブになっていないことを確認します。
+たとえば、アプリが動画を再生している場合、ユーザーが別のアプリを操作しているときに、アプリで動画の再生が継続していることを確認します。
+
+
+ </li>
+
+ <li>分割画面モードで分割線を移動して、アプリの拡大および縮小を試みてください。
+アプリを並べて表示しているときと重ねて表示しているときの両方でこれらの操作を試みてください。
+アプリがクラッシュせず、基本的な機能が表示され、サイズ変更の操作に時間がかかり過ぎないことを確認します。
+
+
+ </li>
+
+ <li>続けざまにサイズ変更の操作を行います。アプリがクラッシュしたり、メモリリークが発生したりしないことを確認します。
+アプリのメモリリークをチェックする方法の詳細については、<a href="{@docRoot}tools/debugging/debugging-memory.html">RAM の使用状況を調査する</a>をご覧ください。
+
+
+ </li>
+
+ <li>さまざまなウィンドウ構成でアプリを通常の方法で使用し、アプリが適切に動作することを確認します。
+テキストが読み取り可能であり、UI 要素が操作に支障をきたすほど小さくないことを確認します。
+
+ </li>
+</ul>
+
+<h3 id="test-disabled-mw">マルチ ウィンドウのサポートを無効にしている場合</h3>
+
+<p>
+
+<code>android:resizableActivity="false"</code> を設定して、マルチ ウィンドウのサポートを無効にした場合は、Android N を実行している端末でアプリを起動し、アプリをフリーフォーム モードおよび分割画面モードにすることを試みる必要があります。
+
+アプリをマルチ ウィンドウ モードにすることを試みたとき、アプリが全画面モードのままであることを確認してください。
+
+</p>
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/_book.yaml b/docs/html-intl/intl/ja/preview/_book.yaml
deleted file mode 100644
index 5f1e18f..0000000
--- a/docs/html-intl/intl/ja/preview/_book.yaml
+++ /dev/null
@@ -1,342 +0,0 @@
-toc:
-- title: プログラム概要
- path: /preview/overview.html
- path_attributes:
- - name: es-lang
- value: Información general del programa
- - name: in-lang
- value: Ikhtisar Program
- - name: ja-lang
- value: プログラム概要
- - name: ko-lang
- value: 프로그램 개요
- - name: pt-br-lang
- value: Visão geral do programa
- - name: ru-lang
- value: Обзор программы
- - name: vi-lang
- value: Tổng quan về Chương trình
- - name: zh-cn-lang
- value: 计划概览
- - name: zh-tw-lang
- value: 程式總覽
-
-- title: サポートとリリースノート
- path: /preview/support.html
-
-- title: Preview のセットアップ
- path: /preview/setup-sdk.html
- path_attributes:
- - name: es-lang
- value: Configurar el SDK de la versión preliminar
- - name: in-lang
- value: Menyiapkan Preview
- - name: ja-lang
- value: Preview SDK のセットアップ
- - name: ko-lang
- value: 미리 보기 SDK 설정하기
- - name: pt-br-lang
- value: Configuração do Preview SDK
- - name: ru-lang
- value: Настройка пакета SDK Preview
- - name: vi-lang
- value: Kiểm thử trên Thiết bị
- - name: zh-cn-lang
- value: 设置预览版 SDK
- - name: zh-tw-lang
- value: 設定預覽版 SDK
-
-- title: 端末上でのテスト
- path: /preview/download.html
- path_attributes:
- - name: es-lang
- value: Pruebe en un dispositivo
- - name: in-lang
- value: Menguji pada Perangkat
- - name: ja-lang
- value: デバイス上でテストする
- - name: ko-lang
- value: 기기에서 테스트
- - name: pt-br-lang
- value: Testar em um dispositivo
- - name: ru-lang
- value: Тестирование на устройстве
- - name: vi-lang
- value: Kiểm thử trên Thiết bị
- - name: zh-cn-lang
- value: 在设备上测试
- - name: zh-tw-lang
- value: 在裝置上測試
-
-- title: 動作の変更点
- path: /preview/behavior-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: 行為變更
- section:
- - title: バックグラウンド処理の最適化
- path: /preview/features/background-optimization.html
- path_attributes:
- - name: es-lang
- value: Optimizaciones en segundo plano
- - name: in-lang
- value: Optimisasi Latar Belakang
- - name: ja-lang
- value: バックグラウンド処理の最適化
- - name: ko-lang
- value: 백그라운드 최적화
- - name: pt-br-lang
- value: Otimizações em segundo plano
- - name: ru-lang
- value: Оптимизация фоновых процессов
- - name: vi-lang
- value: Tối ưu hóa Chạy ngầm
- - name: zh-cn-lang
- value: 后台优化
- - name: zh-tw-lang
- value: 背景最佳化
- - title: 言語とロケール
- path: /preview/features/multilingual-support.html
- path_attributes:
- - name: es-lang
- value: Idioma y configuración regional
- - name: in-lang
- value: Bahasa dan Lokal
- - name: ja-lang
- value: 言語とロケール
- - name: ko-lang
- value: 언어 및 로케일
- - name: pt-br-lang
- value: Idioma e localidade
- - name: ru-lang
- value: Язык и языковой стандарт
- - name: vi-lang
- value: Ngôn ngữ và Bản địa
- - name: zh-cn-lang
- value: 语言和区域设置
- - name: zh-tw-lang
- value: 語言和地區設定
-
-- title: Android N for Developers
- path: /preview/api-overview.html
- 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 總覽
- section:
- - title: マルチ ウィンドウのサポート
- path: /preview/features/multi-window.html
- path_attributes:
- - name: es-lang
- value: Compatibilidad con ventanas múltiples
- - name: in-lang
- value: Dukungan Multi-Jendela
- - name: ja-lang
- value: マルチ ウィンドウのサポート
- - name: ko-lang
- value: 다중 창 지원
- - name: pt-br-lang
- value: Suporte a várias janelas
- - name: ru-lang
- value: Поддержка многооконного режима
- - name: vi-lang
- value: Hỗ trợ đa cửa sổ
- - name: zh-cn-lang
- value: 多窗口支持
- - name: zh-tw-lang
- value: 多視窗支援
- - title: 通知
- path: /preview/features/notification-updates.html
- path_attributes:
- - name: es-lang
- value: Notificaciones
- - name: in-lang
- value: Pemberitahuan
- - name: ja-lang
- value: 通知
- - name: ko-lang
- value: 알림
- - name: pt-br-lang
- value: Notificações
- - name: ru-lang
- value: Уведомления
- - name: vi-lang
- value: Thông báo
- - name: zh-cn-lang
- value: 通知
- - name: zh-tw-lang
- value: 通知
- - title: データセーバー
- path: /preview/features/data-saver.html
- - title: TV の録画機能
- path: /preview/features/tv-recording-api.html
- path_attributes:
- - name: es-lang
- value: Grabación de TV
- - name: in-lang
- value: Perekaman TV
- - name: ja-lang
- value: TV の録画
- - name: ko-lang
- value: TV 녹화
- - name: pt-br-lang
- value: Gravação para TV
- - name: ru-lang
- value: Запись ТВ
- - name: vi-lang
- value: Ghi lại TV
- - name: zh-cn-lang
- value: TV 录制
- - name: zh-tw-lang
- value: 電視錄製
- - title: ネットワーク セキュリティ構成
- path: /preview/features/security-config.html
- path_attributes:
- - name: es-lang
- value: Configuración de seguridad de la red
- - name: ja-lang
- value: ネットワーク セキュリティ構成
- - name: ko-lang
- value: 네트워크 보안 구성
- - name: pt-br-lang
- value: Configurações de segurança de rede
- - name: ru-lang
- value: Конфигурация сетевой безопасности
- - name: vi-lang
- value: Cấu hình Bảo mật mạng
- - name: zh-cn-lang
- value: 网络安全配置
- - name: zh-tw-lang
- value: 網路安全性設定
- - title: ICU4J のサポート
- path: /preview/features/icu4j-framework.html
- path_attributes:
- - name: es-lang
- value: API de ICU4J del framework de Android
- - name: in-lang
- value: ICU4J Android Framework API
- - name: ja-lang
- value: ICU4J Android フレームワーク API
- - name: ko-lang
- value: ICU4J Android 프레임워크 API
- - name: pt-br-lang
- value: APIs de estrutura do Android para ICU4J
- - name: ru-lang
- value: API-интерфейсы ICU4J в платформе Android
- - name: vi-lang
- value: API Khuôn khổ Android ICU4J
- - name: zh-cn-lang
- value: ICU4J Android 框架 API
- - name: zh-tw-lang
- value: ICU4J Android 架構 API
- - title: Java 8 の言語機能
- path: /preview/j8-jack.html
- path_attributes:
- - name: es-lang
- value: Funciones del lenguaje Java 8
- - name: in-lang
- value: Fitur Bahasa Java 8
- - name: ja-lang
- value: Java 8 の機能
- - name: ko-lang
- value: Java 8 언어 기능
- - name: pt-br-lang
- value: Recursos de linguagem do Java 8
- - name: ru-lang
- value: Возможности языка Java 8
- - name: vi-lang
- value: Tính năng của Ngôn ngữ Java 8
- - name: zh-cn-lang
- value: Java 8 语言功能
- - name: zh-tw-lang
- value: Java 8 語言功能
- - title: Android for Work のアップデート
- path: /preview/features/afw.html
- - title: 特定のディレクトリへのアクセス
- path: /preview/features/scoped-folder-access.html
- path_attributes:
- - name: es-lang
- value: Acceso a directorios determinados
- - name: ja-lang
- value: 特定のディレクトリへのアクセス
- - name: ko-lang
- value: 범위가 지정된 디렉터리 액세스
- - name: pt-br-lang
- value: Acesso a diretórios com escopo
- - name: ru-lang
- value: Доступ к выделенным каталогам
- - name: vi-lang
- value: Truy cập Thư mục theo Phạm vi
- - name: zh-cn-lang
- value: 作用域目录访问
- - name: zh-tw-lang
- value: 限定範圍目錄存取
-
-- title: サンプル
- path: /preview/samples.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: 使用許諾契約
- path: /preview/license.html
- path_attributes:
- - name: es-lang
- value: Contrato de licencia
- - name: ja-lang
- value: 使用許諾契約
- - name: ko-lang
- value: 라이선스 계약
- - name: pt-br-lang
- value: Contrato de licença
- - name: ru-lang
- value: Лицензионное соглашение
- - name: zh-cn-lang
- value: 许可协议
- - name: zh-tw-lang
- value: 授權協議
diff --git a/docs/html-intl/intl/ja/preview/api-overview.jd b/docs/html-intl/intl/ja/preview/api-overview.jd
deleted file mode 100644
index d967a67..0000000
--- a/docs/html-intl/intl/ja/preview/api-overview.jd
+++ /dev/null
@@ -1,1039 +0,0 @@
-page.title=Android N for Developers
-meta.tags="preview", "androidn"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-apis_2x.png
-@jd:body
-
-
-
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>主なデベロッパー機能</h2>
- <ol>
- <ul style="list-style-type:none;">
- <li><a href="#multi-window_support">マルチ ウィンドウのサポート</a></li>
- <li><a href="#notification_enhancements">通知</a></li>
- <li><a href="#jit_aot">JIT / AOT コンパイル</a></li>
- <li><a href="#quick_path_to_app_install">アプリの高速インストール</a></li>
- <li><a href="#doze_on_the_go">どこでも機能する Doze</a></li>
- <li><a href="#background_optimizations">バックグラウンド処理の最適化</a></li>
- <li><a href="#data_saver">データセーバー</a></li>
- <li><a href="#vulkan">Vulkan API</a></li>
- <li><a href="#tile_api">クイック設定タイル API</a></li>
- <li><a href="#number-blocking">電話番号のブロック</a></li>
- <li><a href="#call_screening">通話スクリーニング</a></li>
- <li><a href="#multi-locale_languages">ロケールと言語</a></li>
- <li><a href="#emoji">新しい絵文字</a></li>
- <li><a href="#icu4">Android の ICU4J API</a></li>
- <li><a href="#gles_32">OpenGL ES 3.2 API</a></li>
- <li><a href="#android_tv_recording">Android TV の録画機能</a></li>
- <li><a href="#android_for_work">Android for Work</a></li>
- <li><a href="#accessibility_enhancements">ユーザー補助機能</a></li>
- <li><a href="#direct_boot">ダイレクト ブート</a></li>
- <li><a href="#key_attestation">キーの構成証明</a></li>
- <li><a href="#network_security_config">ネットワーク セキュリティ構成</a></li>
- <li><a href="#default_trusted_ca">既定の信頼される証明機関</a></li>
- <li><a href="#apk_signature_v2">APK 署名スキーム v2</a></li>
- <li><a href="#scoped_directory_access">特定のディレクトリへのアクセス</a></li>
- <li><a href="#keyboard_shortcuts_helper">キーボード ショートカット ヘルパー</a></li>
- <li><a href="#sustained_performance_api">パフォーマンス維持 API</a></li>
- <li><a href="#vr">VR サポート</a></li>
- <li><a href="#print_svc">印刷サービス機能の強化</a></li>
- <li><a href="#virtual_files">仮想ファイル</a></li>
- <li><a href="#framemetrics_api">FrameMetricsListener API</a></li>
- </ol>
-</div>
-</div>
-
-
-
-<p>Android N は現在も開発中ですが、N Developer Preview の一部として Android N を試用できます。
-以下のセクションでは、デベロッパー向けの新しい機能の一部を紹介しています。
- </p>
-
-<p>
- <a href="{@docRoot}preview/behavior-changes.html">動作の変更点</a>を確認して、プラットフォームの変更がアプリに影響を及ぼす可能性のある領域について把握してください。また、デベロッパー ガイドを参照して主な機能について詳しく学習し、<a href="{@docRoot}preview/setup-sdk.html#docs-dl">API リファレンス</a>をダウンロードして、新しい API の詳細を理解してください。
-
-
-
-</p>
-
-<h2 id="multi-window_support">マルチ ウィンドウのサポート</h2>
-
-
-<p>Android N では、多くのユーザーから求められていたマルチタスク機能がプラットフォームに新しく導入されました。つまり、マルチ ウィンドウがサポートされるようになりました。
- </p>
-
- <p>ユーザーは同時に 2 つのアプリを画面に開くことができます。 </p>
- <ul>
- <li>Android N が動作している携帯端末やタブレットでは、分割画面モードで 2 つのアプリを左右や上下に並べて実行できます。
-
-また、2 つのアプリの間にある分割線をドラッグしてアプリのサイズを変更することもできます。
- </li>
-
-<li>Android TV 端末では、アプリを<a href="{@docRoot}preview/features/picture-in-picture.html">ピクチャ イン ピクチャ モード</a>にすると、アプリにコンテンツを表示したまま、他のアプリをブラウジングまたは操作することができます。
-
-</li>
- </ul>
-
-<div class="col-4of10">
-<img src="{@docRoot}preview/images/mw-portrait.png" alt="" style="height:460px;padding-left:1em;" id="img-split-screen" />
-<p class="img-caption">
- <strong>図 1.</strong> 分割画面モードで実行されているアプリ
-</p>
-
- </div>
-
-<p>特にタブレットや大画面の端末では、マルチ ウィンドウのサポートにより、ユーザーを引き付ける新しい方法が提供されます。
-アプリでドラッグ アンド ドロップを有効にすると、ユーザーはアプリとの間でコンテンツを簡単にドラッグすることができるので、快適な使い心地を実現することができます。
-
- </p>
-
-<p>マルチ ウィンドウのサポートをアプリに追加して、マルチ ウィンドウ ディスプレイを処理する方法を設定するのは簡単です。
-たとえば、アクティビティの最小許容ディメンションを指定すると、ユーザーはアクティビティをそのサイズより小さく変更できなくなります。
-
-また、アプリに対してマルチ ウィンドウ ディスプレイを無効にし、アプリを全画面モードのみで表示することもできます。
-</p>
-
-<p>
- 詳細については、<a href="{@docRoot}preview/features/multi-window.html">マルチ ウィンドウのサポート</a>に関するデベロッパー向けドキュメントをご覧ください。
-
-</p>
-
-<h2 id="notification_enhancements">通知の機能強化</h2>
-
-<p>Android N では、通知が再設計されており、さらに使いやすくなっています。
-次のような点が変更されました。</p>
-
-<ul>
- <li>
- <strong>テンプレートのアップデート</strong>:通知テンプレートは、ヒーロー イメージやアバターを中心としたデザインにアップデートされています。
-デベロッパーは、コードに最小限の変更を加えるだけで、この新しいテンプレートを活用できます。
-
- </li>
-
- <li>
- <strong>メッセージ スタイルのカスタマイズ</strong>:<code>MessageStyle</code> クラスを使用して、通知に関連付けられているさらに多くのユーザー インターフェース ラベルをカスタマイズできます。
-
-メッセージ、会話、タイトル、コンテンツ ビューを設定できます。
-
- </li>
-
- <li>
- <strong>バンドル通知</strong>:メッセージをグループ化できます。たとえば、メッセージをトピックごとにグループ化して、各グループを表示できます。
-ユーザーは、各グループに対して、消去やアーカイブといったアクションを実行できます。
-Android Wear 向けの通知を実装したことがある場合は、このモデルはおなじみでしょう。
-
-
- </li>
-
- <li>
- <strong>ダイレクト リプライ</strong>:Android システムでは、インライン リプライがサポートされています。リアルタイム通信アプリを使用しているユーザーは、通知インターフェース内で直接 SMS やテキスト メッセージにすばやく応答できます。
-
-
- </li>
-
- <li>
- <strong>カスタムビュー</strong>:2 つの新しい API を使用すると、通知でカスタムビューを使用するときに、通知ヘッダーやアクションなどのシステム デコレーションを活用できます。
-
-
- </li>
-</ul>
-
-<div class="col-4of12">
- <img src="{@docRoot}preview/images/notifications-1.png" alt="" style="padding:.5em;max-width:226px">
-</div>
-
-<div class="col-4of12">
- <img src="{@docRoot}preview/images/notifications-3.png" alt="" style="padding:.5em;max-width:226px">
-</div>
-
-<div class="col-4of12">
- <img src="{@docRoot}preview/images/notifications-2.png" alt="" style="padding:.5em;max-width:226px">
-</div>
-
-
-<p class="img-caption">
- <strong>図 2.</strong> バンドル通知とダイレクト リプライ
-</p>
-
-<p>以上の新しい機能を実装する方法の詳細については、<a href="{@docRoot}preview/features/notification-updates.html">通知</a>に関するガイドをご覧ください。
-
-</p>
-
-
-
-<h2 id="jit_aot">プロファイルに基づいた JIT / AOT コンパイル</h2>
-
-<p>Android N では、コード プロファイリングにも対応した Just in Time(JIT)コンパイラーが ART に追加されており、Android アプリを実行するときのパフォーマンスが向上しています。
-
-JIT コンパイラーは、ART で現在使用されている Ahead of Time(AOT)コンパイラーを補完するものであり、ランタイム パフォーマンスの向上、ストレージ スペースの削減、アプリとシステムのアップデートの高速化に貢献します。
-
-</p>
-
-<p>プロファイルに基づいたコンパイルを使用すると、アプリの実際の使用方法や端末上での状態に応じて、ART が各アプリの AOT / JIT コンパイルを管理します。
-たとえば、ART は各アプリのホット メソッドのプロファイルを維持し、これらのメソッドをプリコンパイルしてキャッシュに保存することにより、パフォーマンスを最適化します。
-
-また、アプリの他の部分は、実際に使用されるときまでコンパイルされません。
-</p>
-
-<p>プロファイルに基づいたコンパイルは、アプリの主要部分のパフォーマンスを向上させ、関連するバイナリなど、アプリの全体的な RAM 使用量を削減します。
-
-この機能は、メモリが少ない端末で特に重要です。</p>
-
-<p>ART は、端末の電池への影響が最小限になるようにプロファイルに基づいたコンパイルを管理します。
-端末がアイドル状態および充電中のときにのみ、プリコンパイルが事前に実行されるため、時間と電池が節約できます。
-</p>
-
-<h2 id="quick_path_to_app_install">アプリの高速インストール</h2>
-
-<p>ART の JIT コンパイラーの最も明確な利点の 1 つは、アプリのインストールとシステム アップデートの速度です。
-Android 6.0 では最適化とインストールの実行に数分かかっていたサイズの大きいアプリでも、数秒でインストールできるようになりました。
-
-最適化のステップが不要になったため、システム アップデートも高速化されています。 </p>
-
-<h2 id="doze_on_the_go">どこでも機能する Doze</h2>
-
-<p>Android 6.0 では Doze システムモードが導入されています。これにより、端末が机に置かれているときや引き出しに収められているときなどのアイドル時にアプリの CPU とネットワーク通信の実行を保留し、電池を節約します。
-
- </p>
-
-<p>Android N では Doze が改良され、外出中でも電池を節約できるようになっています。画面をしばらくオフにしたり端末を電源から抜いたりすると、Doze により、通常の CPU およびネットワーク制限の一部がアプリに適用されます。つまり、端末をポケットに入れて持ち歩いているときでも電池を節約できます。
-
-
-
-</p>
-
-
-<img src="/preview/images/doze-diagram-1.png" alt="" id="figure1" />
-<p class="img-caption">
- <strong>図 3.</strong> Doze により、端末が静止していないときでも制限が適用され、電池の寿命が延長される
-
-</p>
-
-
-<p>端末が電池で動作しているときに画面をしばらくオフにすると、Doze はネットワーク アクセスを制限し、ジョブと同期を保留します。
-アプリはメンテナンス ウィンドウと呼ばれる短い時間にネットワークにアクセスしたり、保留中のジョブや同期を実行したりします。
-
-画面をオンにするか、端末を電源に接続すると、端末の Doze モードは解除されます。
-</p>
-
-<p>電池で動作している端末が再び静止状態になり、画面がしばらくオフになると、Doze は完全な CPU およびネットワーク制限を {@link
-android.os.PowerManager.WakeLock}、{@link android.app.AlarmManager} アラーム、GPS / Wi-Fi スキャンに適用します。
-
-</p>
-
-<p>アプリを Doze に対応させるためのベスト プラクティスは端末を持ち歩いているかどうかには関係ありません。そのため、Doze が適切に処理されるようにアプリを既にアップデートしている場合は、追加の対応は必要ありません。
-
-そうでない場合は、<a href="{@docRoot}training/monitoring-device-state/doze-standby.html#assessing_your_app">アプリの Doze 対応</a>を行ってください。
-</p>
-
-<h2 id="background_optimizations">Project Svelte:バックグラウンド処理の最適化</h2>
-
-<p>Project Svelte は、Android エコシステムのさまざまな端末でシステムやアプリによる RAM の使用を最小限にする取り組みです。
-Android N での Project Svelte は、アプリをバックグラウンドで実行する方法を最適化することに重点を置いています。
- </p>
-
-<p>ほとんどのアプリでは、バックグラウンド処理が非常に重要になります。バックグラウンド処理を適切に実行すると、状況に応じて高速に実行できるなどユーザー エクスペリエンスが大幅に向上します。バックグラウンド処理が不適切な場合は、RAM(と電池)が必要以上に消費され、他のアプリのシステム パフォーマンスに影響を及ぼす可能性があります。
-
-
- </p>
-
-<p>Android 5.0 以降では、ユーザーに適した方法でバックグラウンド処理を実行する {@link android.app.job.JobScheduler} が推奨されています。
-
-これによって、メモリ、電源、接続の状態に基づいてシステムを最適化しながら、アプリでジョブをスケジュールできます。
-JobScheduler はシンプルな制御を提供するため、すべてのアプリで JobScheduler を使用することが効果的です。
- </p>
-
-<p>
- もう 1 つの適切な選択肢は、Google Play サービスの一部である <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager"><code>GCMNetworkManager</code></a> です。この機能も同様のジョブ スケジュール機能を提供しますが、こちらは以前のバージョンの Android とも互換性があります。
-
-
-
-</p>
-
-<p>さらに多くのユースケースに対応するために、<code>JobScheduler</code> と <code>GCMNetworkManager</code> の拡張は継続されています。たとえば、Android N では、コンテンツ プロバイダの変更に基づいてバックグラウンド処理をスケジュールできるようになりました。
-
-
-また、特にメモリの少ない端末でシステム パフォーマンスを低下させる可能性のある一部の古いパターンの廃止も開始されています。
-
-</p>
-
-<p>一般的に使用される暗黙的なブロードキャストである
-{@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}、{@link
- android.hardware.Camera#ACTION_NEW_PICTURE}、{@link
- android.hardware.Camera#ACTION_NEW_VIDEO} は複数のアプリのバックグラウンド処理を同時に起動するので、メモリと電池に負荷をかける可能性があります。そのため、Android N では、この 3 つのブロードキャストが削除されています。
-アプリがこれらのブロードキャストを受信する場合は、N Developer Preview を使用して、<code>JobScheduler</code> とそれに関連する API に移行してください。
-
- </p>
-
-<p>
- 詳細については、<a href="{@docRoot}preview/features/background-optimization.html">バックグラウンド処理の最適化</a>に関するドキュメントをご覧ください。
-
-</p>
-
-
-<h2 id="data_saver">データセーバー</h2>
-
-<div class="col-5of12" style="margin-right:1.5em;">
-<img src="{@docRoot}preview/images/datasaver.png" style="border:2px solid #ddd">
-
-<p class="img-caption" style="padding-right:2em;">
- <strong>図 4.</strong> [Settings] でのデータセーバー
-</p>
- </div>
-
-<p>一般的に、モバイル端末のライフサイクル全体では、モバイルデータ通信プランのコストが端末自体のコストを上回ります。
-多くのユーザーにとって、モバイルデータ通信は、節約する必要のある高価なリソースです。
- </p>
-
-<p>Android N では、ローミング、課金サイクルの終了近く、または短期間のデータパックであるかどうかに関係なく、アプリによるモバイルデータ通信の使用を削減する新しいシステム サービスであるデータセーバー モードが導入されています。
-
-データセーバーを使用すると、アプリによるモバイルデータ通信の使用方法をユーザーが制御できます。また、デベロッパーは、データセーバーがオンのときに、より効率よく通信するサービスを提供できるようになります。
-
- </p>
-
-<p>ユーザーが [<strong>Settings</strong>] でデータセーバーを有効にし、端末が従量制課金ネットワークに接続されている場合、システムは、ストリーミングのビットレートを制限したり、画質を低下させたり、オプティミスティックなプレキャッシングを保留したりすることにより、バックグラウンドでのデータ使用をブロックし、フォアグラウンドでのデータ使用をなるべく抑えるようにアプリに指示します。
-
-
-
-ユーザーは特定のアプリをホワイトリストに登録することにより、データセーバーがオンになっているときでも、バックグラウンドで従量制データ通信を使用できます。
-</p>
-
-<p>Android N は {@link android.net.ConnectivityManager} を拡張することで、<a href="{@docRoot}preview/features/data-saver.html#status">ユーザーのデータセーバー設定を取得</a>する方法と、<a href="{@docRoot}preview/features/data-saver.html#monitor-changes">設定の変更を監視</a>する方法を提供しています。
-
-
-すべてのアプリは、ユーザーがデータセーバーを有効にしているかどうかを確認し、フォアグラウンドおよびバックグラウンドでのデータ使用を制限する必要があります。
-</p>
-
-
-<h2 id="vulkan">Vulkan API</h2>
-
-<p>
- Android N では、新しい 3D レンダリング API である <a href="http://www.khronos.org/vulkan" class="external-link">Vulkan™</a> がプラットフォームに統合されています。<a href="https://www.khronos.org/opengles/" class="external-link">OpenGL™ ES</a> と同様に、Vulkan は Khronos グループによって管理されている 3D グラフィックおよびレンダリングのオープン スタンダードです。
-
-
-
-</p>
-
-<p>
- Vulkan は、ドライバの CPU オーバーヘッドを最小化するため、およびアプリケーションが GPU の動作をより直接的に制御できるように設計されています。
-また、Vulkan は、複数のスレッドが作業を実行できるようにする(コマンド バッファの作成を同時に行うなど)ことによって、より優れた並列処理が可能です。
-
-
-</p>
-
-<p>
- Vulkan 開発ツールおよびライブラリは、Android NDK に含まれています。次のようなものが含まれます。
-
-</p>
-
-<ul>
- <li>ヘッダー
- </li>
-
- <li>検証レイヤ(デバッグ ライブラリ)
- </li>
-
- <li>SPIR-V シェーダー コンパイラー
- </li>
-
- <li>SPIR-V シェーダーのランタイム コンパイル ライブラリ
- </li>
-</ul>
-
-<p>
- Vulkan は、Nexus 5X、Nexus 6P、Nexus Player などの Vulkan 対応ハードウェアを備えた端末上のアプリでのみ利用できます。
-Vulkan を可能な限りより多くの端末に導入するためにパートナーと緊密に協力し合っています。
-
-</p>
-
-<p>
- 詳細については、<a href="{@docRoot}ndk/guides/graphics/index.html">API ドキュメント</a>をご覧ください。
-</p>
-
-<h2 id="tile_api">クイック設定タイル API</h2>
-
-
-<div style="float:right;max-width:320px">
-<img src="{@docRoot}preview/images/quicksettings.png" style="padding-left:1.5em;">
-
-<p class="img-caption" style="padding-left:2em;">
- <strong>図 5.</strong> 通知シェードにあるクイック設定タイル
-</p>
-
-
- </div><p>クイック設定は、通知シェードから主要な設定とアクションを直接公開するための一般的で簡単な方法です。
-Android N では、クイック設定の範囲が拡大され、さらに使いやすく便利な機能になっています。
- </p>
-
-<p>クイック設定タイル用のスペースが広くなったので、ユーザーは、左または右にスワイプして、ページ分割された表示領域でこれらのタイルにアクセスできます。
-また、ユーザーは、表示するクイック設定タイルとその表示場所を制御できるようになっています。ユーザーはタイルをドラッグ アンド ドロップして、追加または移動できます。
-
- </p>
-
-<p>Android N では、デベロッパーが独自のクイック設定タイルを定義できる新しい API が追加されており、ユーザーはこの API を通じて、アプリの主なコントロールとアクションに簡単にアクセスできます。
-</p>
-
-<p>
- クイック設定タイルは、緊急に必要な、または頻繁に使用されるコントロールやアクション用に用意されたものであり、アプリを起動するためのショートカットとして使用するべきではありません。
-
-
-</p>
-
-<p>
- タイルの定義が完了すると、ユーザーにタイルを公開できるようになります。ユーザーはタイルをドラッグ アンド ドロップするだけで、クイック設定にタイルを追加できます。
-
-</p>
-
-<p>
- アプリタイルを作成する方法については、ダウンロード可能な <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API リファレンス</a>に掲載されている <code>android.service.quicksettings.Tile</code> のドキュメントをご覧ください。
-
-</p>
-
-
-
-<h2 id="number-blocking">電話番号のブロック</h2>
-
-<p>Android N では、プラットフォームで電話番号のブロックがサポートされており、サービス プロバイダがブロックされた電話番号のリストを保持するためのフレームワーク API が提供されています。
-デフォルトの SMS アプリ、デフォルトの電話アプリ、携帯通信会社アプリは、ブロックされた電話番号のリストを読み込んだり、このリストに書き込んだりできます。
-
-その他のアプリはこのリストにアクセスできません。</p>
-
-<p>Android では、電話番号のブロックをプラットフォームの標準の機能にすることにより、幅広い端末で電話番号をブロックできるようにする一貫した方法がアプリに提供されています。
-
-その他にアプリは次のような機能も利用できます。</p>
-
-<ul>
- <li> ブロックされた電話番号は、テキスト メッセージでもブロックされる
- <li> ブロックされた電話番号は、リセットした端末や、バックアップおよびリストア機能で移行したデバイスでも保持される
-
- <li> 複数のアプリが同じブロックリストを使用できる
-</ul>
-
-<p>また、Android に携帯通信会社のアプリが組み込まれていると、携帯通信会社は端末上のブロックリストを読み込んで迷惑な電話やテキスト メッセージをサービス側でブロックできます。これによって、VOIP エンドポイントや転送電話などいかなる媒体を介しても、ブロックされた番号はユーザーに到達できなくなります。
-
-
-</p>
-
-<p>
- 詳細については、ダウンロード可能な <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API リファレンス</a>の <code>android.provider.BlockedNumberContract</code> をご覧ください。
-
-
-</p>
-
-<h2 id="call_screening">通話スクリーニング</h2>
-
-<p>
- Android N では、デフォルトの電話アプリで着信をスクリーニングできます。新しい <code>CallScreeningService</code> を実装することによって、電話アプリは着信をスクリーニングします。これにより、電話アプリは着信する電話の {@link android.telecom.Call.Details Call.Details} に基づいて次のようなアクションを実行できます。
-
-
-
-</p>
-
-<ul>
- <li> 着信を拒否する
- <li> 着信を通話履歴に含めない
- <li> 着信通知をユーザーに表示しない
-</ul>
-
-<p>
- 詳細については、ダウンロード可能な <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API リファレンス</a>の <code>android.telecom.CallScreeningService</code> をご覧ください。
-
-
-</p>
-
-
-<h2 id="multi-locale_languages">マルチロケールのサポートと言語の追加</h2>
-
-
-<p>Android N では、[Settings] で<strong>マルチロケール</strong>を選択できるようになり、複数言語を使用するユーザーへのサポートが強化されました。
-アプリで新しい API を使用して、ユーザーが選択したロケールを取得すると、複数のロケールを設定しているユーザーに対してより洗練されたユーザー エクスペリエンスを提供できます。たとえば、検索結果を複数の言語で表示したり、ユーザーが理解している言語のウェブページでは翻訳の提案を行わないようにしたりすることが可能になります。
-
-
-
-</p>
-
-<p>また、Android N では、マルチロケールのサポートに加えて、ユーザーが利用できる言語が追加されています。
-英語、スペイン語、フランス語、アラビア語などの一般的な言語に対して、それぞれ 25 以上のバリエーションが提供されます。
-100 以上の新しい言語も部分的にサポートされています。
-</p>
-
-<p>アプリは、<code>LocaleList.GetDefault()</code> を呼び出すことにより、ユーザーが設定したロケールのリストを取得できます。
-Android N では、ロケール数の増加に対応するために、リソースを解決する方法が変更されています。
-この新しいリソース解決ロジックでアプリが想定どおりに動作することをテストおよび確認してください。
-</p>
-
-<p>新しいリソース解決動作と順守する必要のあるベスト プラクティスの詳細については、<a href="{@docRoot}preview/features/multilingual-support.html">複数言語のサポート</a>をご覧ください。
-</p>
-
-
-<h2 id="emoji">新しい絵文字</h2>
-
-<p>
- Android N では、肌色の異なる絵文字や異体字セレクターのサポートなど、絵文字の追加と絵文字関連機能が導入されています。
-
-アプリで絵文字をサポートする場合は、以下のガイドラインに従い、これらの絵文字関連機能を利用します。
-
-</p>
-
-<ul>
- <li>
- <strong>絵文字を挿入する前に端末に絵文字が含まれていることを確認する。</strong>
- システム フォントで表示される絵文字を確認するには、{@link android.graphics.Paint#hasGlyph(String)} メソッドを使用します。
-
- </li>
- <li>
- <strong>絵文字が異体字セレクターをサポートしていることを確認する。</strong>
- 異体字セレクターを使用すると、特定の絵文字をカラーまたは白黒で表示できます。
-
- アプリは、モバイル端末では白黒よりもカラーで絵文字を表示する必要があります。ただし、アプリでテキスト メッセージを使用して絵文字を表示する場合は、白黒バージョンを使用する必要があります。
-
- 絵文字に異体字があるかどうかを確認するには、異体字セレクターを使用します。
- 異体字のある文字の完全なリストについては、<a class="external-link" href="http://www.unicode.org/Public/9.0.0/ucd/StandardizedVariants-9.0.0d1.txt">異体字に関する Unicode ドキュメント</a>の<em>絵文字異体字シーケンス</em> セクションを確認してください。
-
-
-
- </li>
- <li>
- <strong>絵文字が肌色をサポートしていることを確認する。</strong>Android N では、レンダリングされる絵文字の肌色を好みの色に変更できます。
-キーボード アプリでは、肌色が複数ある絵文字をわかりやすく表示して、ユーザーが好みの肌色を選択できるようにする必要があります。
-
-肌色修飾子を持つシステムの絵文字を確認するには、{@link android.graphics.Paint#hasGlyph(String)} メソッドを使用します。
-
-肌色を使用する絵文字を確認するには、<a class="external-link" href="http://unicode.org/emoji/charts/full-emoji-list.html">Unicode ドキュメント</a>をご覧ください。
-
-
- </li>
-</ul>
-
-
-<h2 id="icu4">Android の ICU4J API</h2>
-
-<p>
- Android N では、Android フレームワーク内で <a href="http://site.icu-project.org/">ICU4J</a> API のサブセットが提供されており、<code>android.icu</code> パッケージにあります。
-移行は簡単で、ほとんどの場合、名前空間を <code>com.java.icu</code> から <code>android.icu</code> に変更するだけです。
-
-アプリで ICU4J バンドルを既に使用している場合は、Android フレームワークで提供されている <code>android.icu</code> API に移行すると、APK サイズを大幅に削減できます。
-
-
-</p>
-
-<p>
- Android ICU4J API の詳細については、<a href="{@docRoot}preview/features/icu4j-framework.html">ICU4J のサポート</a>をご覧ください。
-</p>
-
-
-
-<h2 id="gles_32">OpenGL™ ES 3.2 API</h2>
-
-<p>Android N では、OpenGL ES 3.2 用の以下のようなフレームワーク インターフェースとプラットフォーム サポートが追加されています。</p>
-
-<ul>
- <li> <code>EXT_texture_sRGB_decode</code> を除く <a class="external-link" href="https://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">Android エクステンション パック</a></a>(AEP)のすべての拡張機能
-
- <li> HDR および遅延シェーディング用の浮動小数点フレームバッファ
- <li> 一括処理とストリーミングを向上させるための BaseVertex 描画呼び出し
- <li> WebGL のオーバーヘッドを低減するための堅牢なバッファ アクセス コントロール
-</ul>
-
-<p>Android N の OpenGL ES 3.2 用のフレームワーク API は、<code>GLES32</code> クラスで提供されます。
-OpenGL ES 3.2 を使用する場合、<code><uses-feature></code> タグと <code>android:glEsVersion</code> 属性を使用してマニフェスト ファイルで要件を宣言する必要があります。
-
- </p>
-
-<p>端末でサポートされる OpenGL ES のバージョンを実行時に確認する方法など、OpenGL ES の使用方法については、<a href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL ES API ガイド</a>をご覧ください。
-</p>
-
-
-<h2 id="android_tv_recording">Android TV の録画機能</h2>
-
-<p>Android N では、新しい recording API を介して Android TV 入力サービスからコンテンツを録画して再生する機能が追加されています。
-TV 入力サービスでは、録画できるチャンネル データや録画したセッションを保存する方法の制御、ユーザーによる録画されたコンテンツの操作の管理を行うことができます。このサービスは、既存の time-shifting API を使用して構築されています。
-
- </p>
-
-<p>詳細については、<a href="{@docRoot}preview/features/tv-recording-api.html">Android TV Recording API</a> をご覧ください。</p>
-
-
-<h2 id="android_for_work">Android for Work</h2>
-
-<p>Android for Work は、Android N を実行している端末に多くの新しい機能と API を追加するものです。主要な機能の一部を以下に紹介します。変更点の完全なリストについては、<a href="{@docRoot}preview/features/afw.html">Android for Work のアップデート</a>をご覧ください。
-
-</p>
-
-<h3 id="work_profile_security_challenge">仕事用プロファイルによるセキュリティ確認 </h3>
-
-<p>
- N SDK を対象としているプロファイル オーナーは、仕事用プロファイルで実行しているアプリで個別にセキュリティ確認を行うよう指定することができます。
-
-ユーザーが仕事用アプリを開こうとすると、仕事用プロファイル用のセキュリティ確認画面が表示されます。
-セキュリティの確認に成功すると、仕事用プロファイルのロックが解除され、必要に応じて暗号化も解除されます。
-プロファイル オーナーは、<code>ACTION_SET_NEW_PASSWORD</code> でユーザーに仕事用プロファイル用のセキュリティ確認を設定するように求めたり、<code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> でユーザーに端末のロックを設定するように求めたりします。
-
-
-
-</p>
-
-<p>
- プロファイル オーナーは、<code>setPasswordQuality()</code>、<code>setPasswordMinimumLength()</code>、および関連するメソッドを使用して、仕事用プロファイル用のセキュリティ確認に個別のパスコード ポリシー(PIN に必要な長さや、指紋によるプロファイルのロック解除が可能かどうかなど)を設定できます。
-
-
-また、新しい <code>getParentProfileInstance()</code> メソッドが返す <code>DevicePolicyManager</code> インスタンスを使用して端末のロックを設定できます。
-
-
- さらに、新しい <code>setOrganizationColor()</code> メソッドおよび <code>setOrganizationName()</code> メソッドを使用して仕事用プロファイル用のセキュリティ確認画面をカスタマイズすることができます。
-
-
-</p>
-<h3 id="turn_off_work">ワークモードのオフ </h3>
-
-<p>ユーザーは、仕事用プロファイルがある端末でワークモードを切り替えることができます。ワークモードがオフになると、管理されているユーザーが一時的にシャットダウンされ、仕事用プロファイルのアプリ、バックグラウンドでの同期、通知が無効になります。
-
-これには、プロファイル オーナーのアプリが含まれます。
-また、ワークモードがオフになると、仕事用アプリを起動できないことをユーザーに示すステータス アイコンが表示されたままになります。
-ランチャーは、仕事用アプリとウィジェットにアクセスできないことを示します。
- </p>
-
-<h3 id="always_on_vpn">Always on VPN </h3>
-
-<p>デバイス オーナーとプロファイル オーナーは、指定した VPN を介して仕事用アプリが常時接続するように設定できます。
-端末が起動すると、システムは VPN を自動的に開始します。
-</p>
-
-<p>
- <code>setAlwaysOnVpnPackage()</code> と <code>getAlwaysOnVpnPackage()</code> は新しい <code>DevicePolicyManager</code> のメソッドです。
-
-
-</p>
-
-<p>システムがアプリの介入なしに VPN サービスを直接バインドするため、Always on VPN の新しいエンドポイントは VPN クライアント側で処理する必要があります。
-以前と同じように、システムへのサービスの通知はインテント フィルタのマッチング アクション <code>android.net.VpnService</code> で行います。
-
- </p>
-
-<p>
- プライマリ ユーザーは、<strong>[Settings] > [More] > [Vpn]</strong> から、<code>VPNService</code> のメソッドを実装した Always on VPN クライアントを手動で設定することもできます。
-
-
-</p>
-
-<h3 id="custom_provisioning">カスタマイズされたプロビジョニング</h3>
-
-<p>
- アプリでは、コーポレート・カラーやロゴを含むプロファイル オーナーとデバイス オーナーのプロビジョニング フローをカスタマイズできます。<code>DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR</code> はフローカラーをカスタマイズします。<code>DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI</code> は、コーポレート ロゴを含むフローをカスタマイズします。
-
-
-
-
-</p>
-
-<h2 id="accessibility_enhancements">ユーザー補助機能の強化</h2>
-
-<p>Android N では、新しい端末のセットアップのオープニング画面に [Vision Settings] が直接表示されます。
-これにより、ユーザーは、ズーム操作、フォントサイズ、ディスプレイ サイズ、TalkBack など、端末のユーザー補助機能を簡単に見つけて設定できるようになっています。
-
- </p>
-
-<p>このようなユーザー補助機能が目立つ場所に配置されたため、ユーザーがこれらの機能を有効にしてアプリを試用する可能性が高まりました。
-これらの設定を有効にして、アプリを事前にテストするようにしてください。
-これらの設定は、[Settings] > [Accessibility] で有効にできます。
-</p>
-
-<p>Android N では、ユーザー補助機能サービスにより、運動障害のあるユーザーが画面をタップすることを支援できます。
-この新しい API を使用すると、顔追跡、視線追跡、ポイント スキャンなどの機能を備えたサービスを構築して、これらのユーザーのニーズに対応することができます。
-
-</p>
-
-<p>詳細については、ダウンロード可能な <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API リファレンス</a>の <code>android.accessibilityservice.GestureDescription</code> をご覧ください。
-</p>
-
-
-<h2 id="direct_boot">ダイレクト ブート</h2>
-
-<p>ダイレクト ブートは端末のスタートアップ時間を短縮し、予期しない再起動後でも、登録されたアプリの一部の機能が使用できるようにします。たとえば、ユーザーの就寝中に暗号化された端末が再起動した場合でも、登録したアラーム、メッセージ、電話の着信をユーザーに通常どおり通知することができます。
-
-
-
-また、再起動後にユーザー補助機能サービスをすぐに使用することもできます。
-</p>
-
-<p>ダイレクト ブートでは、Android N のファイルベースの暗号化を活用して、システムとアプリのデータに対してきめ細かい暗号化ポリシーを有効にします。システムは、一部のシステムデータと明示的に登録されたアプリデータに端末暗号化ストアを使用します。
-
-
-デフォルトでは、他のすべてのシステムデータ、ユーザーデータ、アプリ、アプリデータには、認証情報暗号化ストアが使用されます。
- </p>
-
-<p>システムは起動時に端末暗号化データのみにアクセスできる制限モードになります。この状態では、アプリやデータへの一般的なアクセスは許可されません。このモードで実行する必要のあるコンポーネントがある場合、マニフェストにフラグを設定することでコンポーネントを登録できます。
-
-
-再起動後、システムは、<code>LOCKED_BOOT_COMPLETED</code> インテントをブロードキャストすることにより、登録済みのコンポーネントをアクティベートします。
-
-システムは、ロック解除する前に、登録済みの端末暗号化アプリデータを利用できるようにします。
-他のすべてのデータは、ユーザーがロック画面の認証情報を確認して暗号化を解除するまで利用できません。
- </p>
-
-詳細については、<a href="{@docRoot}preview/features/direct-boot.html">ダイレクト ブート</a>をご覧ください。</p>
-</p>
-
-
-<h2 id="key_attestation">キーの構成証明</h2>
-
-<p>ハードウェアがサポートするキーストアは、Android 端末で暗号化キーを作成、格納、使用するためのより安全な方法を提供します。
-このキーストアは、Linux カーネル、Android の潜在的な脆弱性、ルート権限を取得された端末からの抽出からキーを保護します。
-
-</p>
-
-<p>ハードウェアがサポートするキーストアの使用をさらに簡単かつ安全にするために、Android N では、キーの構成証明が導入されています。
-アプリや別の端末は、キーの構成証明を使用して RSA または EC キーペアがハードウェアでサポートされているかどうか、キーペアのプロパティはどのようなものか、使用方法や有効性にどのような制限が適用されるかを積極的に確認することができます。
-
-
- </p>
-
-<p>アプリや別の端末のサービスは、有効な構成証明キーによって署名された X.509 構成証明書を通じて、キーペアについての情報をリクエストできます。
-
-この構成証明キーは、出荷前に端末のハードウェアがサポートするキーストアに挿入される ECDSA 署名キーです。したがって、有効な構成証明キーによって署名される構成証明書により、ハードウェアがサポートするキーストアの存在に加えて、そのキーストアのキーペアの詳細が確認されます。
-
-
-
-</p>
-
-<p>端末が Android の安全な公式ファクトリー イメージを使用していることを確認するために、キーの構成証明では、端末の<a class="external-link" href="https://source.android.com/security/verifiedboot/verified-boot.html#bootloader_requirements">ブートローダー</a>が以下の情報を <a class="external-link" href="https://source.android.com/security/trusty/index.html">Trusted Execution Environment(TEE)</a>に提供することが要求されます。
-
-
-</p>
-
-<ul>
-<li>端末にインストールされる OS のバージョンとパッチレベル</li>
-<li><a href="https://source.android.com/security/verifiedboot/index.html" class="external-link">セキュアブート</a>の公開キーとロック ステータス</li>
- </ul>
-
-<p>ハードウェアがサポートするキーストアの機能の詳細については、<a href="https://source.android.com/security/keystore/" class="external-link">ハードウェアがサポートするキーストア</a>に関するガイドをご覧ください。
-</p>
-
-<p>Android N では、キーの構成証明に加えて、指紋にバインドされたキーが導入されています。このキーは、指紋を登録しても無効になることはありません。
-</p>
-
-<h2 id="network_security_config">ネットワーク セキュリティ構成</h2>
-
-<p>Android N では、エラーが発生しやすいプログラムによる従来の API(X509TrustManager など)ではなく、宣言型のネットワーク セキュリティ構成を使用することにより、コードを変更することなく、セキュアな(HTTPS、TLS)接続の動作をアプリで安全にカスタマイズできます。<em></em>
-
-
-</p>
-
- <p>以下の機能がサポートされます。</p>
-<ul>
-<li><b>カスタム トラスト アンカー。</b>アプリのセキュアな接続にどの証明機関(CA)を信頼するかをカスタマイズできます。
-たとえば、特定の自己署名証明書や制限された一連の公的 CA を信頼できます。
-
-</li>
-<li><b>デバッグ限定のオーバーライド。</b>アプリのデベロッパーは、インストール ベースに対する追加リスクなしに、アプリのセキュアな接続を安全にデバッグできます。
-
-
-</li>
-<li><b>クリアテキスト トラフィックのオプトアウト。</b>クリアテキスト トラフィックの意図しない使用からアプリを保護できます。
-</li>
-<li><b>証明書のピン留め。</b>アプリのセキュアな接続で信頼するサーバーキーを制限できる高度な機能です。
-</li>
-</ul>
-
-<p>詳細については、<a href="{@docRoot}preview/features/security-config.html">ネットワーク セキュリティ構成</a>をご覧ください。
-</p>
-
-<h2 id="default_trusted_ca">既定の信頼される証明機関</h2>
-
-<p>既定では、Android N 用アプリは、システムが提供する証明書のみを信頼し、ユーザーが追加した証明機関(CA)を信頼しません。
-ユーザーが追加した CA を信頼する必要がある Android N 向けのアプリは、<a href="{@docRoot}preview/features/security-config.html">ネットワーク セキュリティ構成</a>を使用して、ユーザー CA を信頼する方法を指定する必要があります。
-
-
-</p>
-
-<h2 id="apk_signature_v2">APK 署名スキーム v2</h2>
-
-<p>
- Android N では、APK 署名スキーム v2 というアプリのインストール時間を高速化したり、APK ファイルに無許可の変更が行われないようにしたりする新しいアプリ署名スキームが導入されています。
-
-既定では、Android Studio 2.2 と Gradle 2.2 用の Android プラグインで APK 署名スキーム v2 と従来の署名スキーム(JAR 署名を使用する)の両方を使用してアプリに署名します。
-
-
-</p>
-
-<p>
- APK 署名スキーム v2 をアプリに適用することをお勧めしますが、この新しいスキームは必須ではありません。
-APK 署名スキーム v2 を使用するときにアプリが正しくビルドされていない場合は、この新しいスキームを無効にできます。
-無効化プロセスにより、Android Studio 2.2 と Gradle 2.2 用の Android プラグインでアプリへの署名に従来の署名スキームのみが使用されるようになります。
-
-従来のスキームのみを使用して署名するには、モジュール レベルの <code>build.gradle</code> ファイルを開き、<code>v2SigningEnabled false</code> という行をリリース用署名構成に追加します。
-
-
-
-</p>
-
-<pre>
- android {
- ...
- defaultConfig { ... }
- signingConfigs {
- release {
- storeFile file("myreleasekey.keystore")
- storePassword "password"
- keyAlias "MyReleaseKey"
- keyPassword "password"
- <strong>v2SigningEnabled false</strong>
- }
- }
- }
-</pre>
-
-<p class="caution"><strong>警告:</strong> APK 署名スキーム v2 を使用してアプリに署名し、さらにアプリに変更を加える場合、アプリの署名は無効になります。
-
-そのため、APK 署名スキーム v2 を使用してアプリに署名する場合は、署名後ではなく署名前に <code>zipalign</code> などのツールを使用します。
-
-</p>
-
-<p>
- 詳細については、Android Studio で<a href="{@docRoot}studio/publish/app-signing.html#release-mode">アプリに署名する</a>方法や、Gradle 用の Android プラグインを使用して<a href="{@docRoot}studio/build/build-variants.html#signing">アプリへの署名用ビルドファイルを構成する</a>方法を説明する Android Studio ドキュメントをご覧ください。
-
-
-
-</p>
-
-<h2 id="scoped_directory_access">特定のディレクトリへのアクセス</h2>
-
-<p>Android N では、アプリで新しい API を使用して、SD カードなどのリムーバブル メディア上のディレクトリといった特定の<a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">外部ストレージ</a> ディレクトリへのアクセスをリクエストできるようになりました。
-
-この新しい API は、アプリが <code>Pictures</code> ディレクトリなどの標準の外部ストレージ ディレクトリにアクセスする方法を大幅に簡略化します。
-写真アプリなどのアプリでは、<code>READ_EXTERNAL_STORAGE</code> の代わりに、この API ですべてのストレージ ディレクトリやストレージ アクセス フレームワークにアクセスできるため、ユーザーはそのディレクトリに移動できます。
-
-
-
-</p>
-
-<p>また、この新しい API は、ユーザーがアプリに外部ストレージへのアクセスを付与するステップを簡素化します。
-この新しい API を使用する場合、アプリがどのディレクトリへのアクセス許可を求めているかをわかりやすく説明するシンプルな UI が使用されます。
-
-</p>
-
-<p>詳細については、<a href="{@docRoot}preview/features/scoped-folder-access.html">特定のディレクトリへのアクセス</a>に関するデベロッパー向けドキュメントをご覧ください。
-
-</p>
-
-<h2 id="keyboard_shortcuts_helper">キーボード ショートカット ヘルパー</h2>
-
-<p>
-Android N では、ユーザーは Alt キー + / キーを同時に押して<em>キーボード ショートカット</em>画面をトリガーできます。この画面には、システムとアプリから使用できるすべてのショートカットが表示されます。
-
-これらは使用可能な場合はアプリのメニューから自動的に取得されますが、デベロッパーは独自に微調整したショートカットのリストを画面に表示することもできます。
-
-ダウンロード可能な <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API リファレンス</a>で説明するように、新しい <code>Activity.onProvideKeyboardShortcuts()</code> メソッドをオーバーライドしてこれを実行することができます。
-
-
-</p>
-
-<p>
-アプリ内のどこででもキーボード ショートカット ヘルパーをトリガーするには、関連アクティビティの {@code Activity.requestKeyboardShortcutsHelper()} を呼び出します。
-
-</p>
-
-<h2 id="sustained_performance_api">パフォーマンス維持 API</h2>
-
-<p>
-長時間実行するアプリではパフォーマンスが大幅に変動する可能性があります。これは、端末のコンポーネントがその温度制限に達するとシステムによりシステムオンチップ エンジンが抑制されるためです。
-
-この変動は、高性能で長時間実行するアプリを作成するアプリのデベロッパーの移動目標となります。
-
-</p>
-
-<p>
-これらの制限に対処するために、Android N には、<em>パフォーマンス維持モード</em>のサポートが含まれており、OEM は長時間実行するアプリに端末のパフォーマンスに関するヒントを提供することができます。
-
-アプリのデベロッパーはこれらのヒントを使用して、長時間にわたる予測可能な一定レベルの端末のパフォーマンスに合わせてアプリを調整できます。
-
-
-</p>
-
-<p>
-アプリのデベロッパーが N Developer Preview でこの新しい API を試すことができるのは、Nexus 6P 端末上でのみです。
-この機能を使用するには、パフォーマンス維持モードで実行するウィンドウにパフォーマンス維持ウィンドウ フラグを設定します。
-
-このフラグは {@code Window.setSustainedPerformanceMode()} メソッドを使用して設定します。
-このウィンドウがフォーカスされていない場合、このモードは自動的に無効になります。
-
-</p>
-
-<h2 id="vr">VR サポート</h2>
-
-<p>
-Android N には、新しい VR モードのためのプラットフォーム サポートと最適化が追加され、デベロッパーは高品質モバイル端末 VR 体験をユーザーのために生み出すことができます。
-多数のパフォーマンス強化があり、VR アプリ用の CPU コアへの排他アクセスが含まれます。アプリでは、VR 用に動作するインテリジェントなヘッド トラッキングやステレオ方式の通知を利用できます。
-
-
-最も重要な点は、Android N によって大幅に遅延の少ないグラフィックが実現される点です。
-Android N 向け VR アプリのビルドの詳細については、<a href="https://developers.google.com/vr/android/">Google VR SDK for Android</a> を参照してください。
-
-</p>
-
-
-<h2 id="print_svc">印刷サービス機能の強化</h2>
-
-<p>
- Android N では、印刷サービスのデベロッパーが、各プリンターや印刷ジョブに関する追加情報を公開できるようになりました。
-
-</p>
-
-<p>
- 各プリンターを一覧表示する場合、印刷サービスでは以下の 2 つの方法で各プリンターのアイコンを設定できます。
-
-</p>
-
-<ul>
- <li><code>PrinterInfo.Builder.setResourceIconId()</code> を呼び出すことにより、リソース ID からアイコンを設定できます
-
- </li>
-
- <li><code>PrinterInfo.Builder.setHasCustomPrinterIcon()</code> を呼び出して、<code>android.printservice.PrinterDiscoverySession.onRequestCustomPrinterIcon()</code> を使用してアイコンがリクエストされた場合のコールバックを設定することにより、ネットワークからアイコンを表示できます
-
-
-
- </li>
-</ul>
-
-<p>
- また、追加情報を表示する各プリンターのアクティビティを提供する場合は、<code>PrinterInfo.Builder.setInfoIntent()</code> を呼び出します。
-
-</p>
-
-<p>
- 印刷ジョブ通知に印刷ジョブの進捗状況やステータスを表示する場合は、<code>android.printservice.PrintJob.setProgress()</code> と <code>android.printservice.PrintJob.setStatus()</code> をそれぞれ呼び出します。
-
-
-
-</p>
-
-<p>
- これらのメソッドの詳細については、ダウンロード可能な <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API リファレンス</a>をご覧ください。
-</p>
-
-<h2 id="framemetrics_api">FrameMetricsListener API</h2>
-
-<p>
-FrameMetricsListener API を使用すると、アプリでその UI レンダリング パフォーマンスを監視できます。
-この API は、アプリの現在のウィンドウのフレーム タイミング情報を転送するストリーミング Pub / Sub API を公開することにより、この機能を提供します。
-返されるデータは、<code><a href="{@docRoot}tools/help/shell.html#shellcommands">adb shell</a>
-dumpsys gfxinfo framestats</code> によって表示される内容と同じですが、過去の 120 フレームに制限されません。
-
-</p>
-
-<p>
-FrameMetricsListener を使用すると、USB 接続を使用せずに、本番環境のインタラクション レベルの UI パフォーマンスを計測できます。
-この API により、{@code adb shell dumpsys gfxinfo} を実行するより粒度の高いデータの収集が可能になります。
-
-アプリの特定のインタラクション データを収集できるため、この粒度の高さが可能となります。アプリのパフォーマンス全体の包括的な概要を取得したり、包括的な状態を明確にしたりする必要はありません。
-
-
-この機能を使用して、パフォーマンス データを収集したり、アプリでの実際のユースケースにおける UI パフォーマンスの低下を検出したりすることができます。
-
-
-</p>
-
-<p>
-ウィンドウを監視するには、<code>FrameMetricsListener.onMetricsAvailable()</code> コールバック メソッドを実装して、これを対象のウィンドウに登録します。
-詳細については、ダウンロード可能な <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API リファレンス</a>の {@code FrameMetricsListener} クラスのドキュメントをご覧ください。
-
-
-</p>
-
-<p>
-この API は {@code FrameMetrics} オブジェクトを提供します。これには、レンダリング サブシステムがフレーム ライフサイクル内のさまざまなマイルストーンで報告するタイミング データが含まれます。サポートされているメトリックは、{@code UNKNOWN_DELAY_DURATION}、{@code INPUT_HANDLING_DURATION}、{@code ANIMATION_DURATION}、{@code LAYOUT_MEASURE_DURATION}、{@code DRAW_DURATION}、{@code SYNC_DURATION}、{@code COMMAND_ISSUE_DURATION}、{@code SWAP_BUFFERS_DURATION}、{@code TOTAL_DURATION}、{@code FIRST_DRAW_FRAME} です。
-
-
-
-
-
-
-</p>
-
-
-<h2 id="virtual_files">仮想ファイル</h2>
-
-<p>
- 旧バージョンの Android では、アプリはストレージ アクセス フレームワークを使用して、ユーザーが Google ドライブなどのクラウド ストレージ アカウントからファイルを選択できるようにしていました。
-
-ただし、バイトコードの直接表現がなかったファイルを表示する方法はありませんでした。すべてのファイルは入力ストリームの提供が必要でした。
-
-
-</p>
-
-<p>
- Android N では、ストレージ アクセス フレームワークに<em>仮想ファイル</em>の概念が追加されています。
-仮想ファイル機能を使用すると、バイトコードの直接表現がなくても、{@link android.content.Intent#ACTION_VIEW} インテントで使用できるドキュメント URI を {@link android.provider.DocumentsProvider} で返すことができます。
-
-
-また、Android N では、ユーザー ファイル(仮想またはそれ以外)に別の形式を提供できます。
-
-</p>
-
-<p>
- アプリで仮想ドキュメントの URI を取得するには、{@link android.content.Intent} を作成してからファイル ピッカーの UI を開きます。
-アプリでは {@link android.content.ContentResolver#openInputStream(Uri) openInputStream()} メソッドを使用して仮想ファイルを直接開くことができないため、{@link android.content.Intent#CATEGORY_OPENABLE} カテゴリが含まれている場合はどの仮想ファイルも受信されません。
-
-
-
-
-</p>
-
-<p>
- ユーザーが選択した後で、{@link android.app.Activity#onActivityResult onActivityResult()} メソッドが呼び出されます。
-
- 以下のコード スニペットに示すように、アプリは仮想ファイルの URI と入力ストリームを取得できます。
-
-</p>
-
-<pre>
- // Other Activity code ...
-
- final static private int REQUEST_CODE = 64;
-
- // We listen to the OnActivityResult event to respond to the user's selection.
- @Override
- public void onActivityResult(int requestCode, int resultCode,
- Intent resultData) {
- try {
- if (requestCode == REQUEST_CODE &&
- resultCode == Activity.RESULT_OK) {
-
- Uri uri = null;
-
- if (resultData != null) {
- uri = resultData.getData();
-
- ContentResolver resolver = getContentResolver();
-
- // Before attempting to coerce a file into a MIME type,
- // check to see what alternative MIME types are available to
- // coerce this file into.
- String[] streamTypes =
- resolver.getStreamTypes(uri, "*/*");
-
- AssetFileDescriptor descriptor =
- resolver.openTypedAssetFileDescriptor(
- uri,
- streamTypes[0],
- null);
-
- // Retrieve a stream to the virtual file.
- InputStream inputStream = descriptor.createInputStream();
- }
- }
- } catch (Exception ex) {
- Log.e("EXCEPTION", "ERROR: ", ex);
- }
- }
-</pre>
-
-<p>
- ユーザー ファイルへのアクセスの詳細については、<a href="{@docRoot}guide/topics/providers/document-provider.html">ストレージ アクセス フレームワークのガイド</a>をご覧ください。
-
-
-</p>
diff --git a/docs/html-intl/intl/ja/preview/behavior-changes.jd b/docs/html-intl/intl/ja/preview/behavior-changes.jd
deleted file mode 100644
index c112504c..0000000
--- a/docs/html-intl/intl/ja/preview/behavior-changes.jd
+++ /dev/null
@@ -1,610 +0,0 @@
-page.title=動作の変更点
-page.keywords=preview,sdk,compatibility
-meta.tags="preview", "compatibility"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-changes_2x.png
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>このドキュメントの内容</h2>
-
-<ol>
- <li><a href="#perf">パフォーマンスの向上</a>
- <ol>
- <li><a href="#doze">Doze</a></li>
- <li><a href="#bg-opt">バックグラウンド処理の最適化</a></li>
- </ol>
- </li>
- <li><a href="#perm">パーミッションの変更</a>
- </li>
- <li><a href="#sharing-files">アプリ間のファイルの共有</a></li>
- <li><a href="#accessibility">ユーザー補助機能の改善</a>
- <ol>
- <li><a href="#screen-zoom">画面のズーム</a></li>
- <li><a href="#vision-settings">セットアップ ウィザードの [Vision Settings]</a></li>
- </ol>
- </li>
- <li><a href="#ndk">プラットフォーム ライブラリにリンクした NDK アプリ</a></li>
- <li><a href="#afw">Android for Work</a></li>
- <li><a href="#annotations">アノテーションの保持</a></li>
- <li><a href="#other">その他の重要事項</a></li>
-</ol>
-
-<h2>関連ドキュメント</h2>
-<ol>
- <li><a href="{@docRoot}preview/api-overview.html">Android N API の概要</a>
-</li>
-</ol>
-
-</div>
-</div>
-
-
-<p>
- 新しい機能に加えて、Android N では、さまざまなシステムおよび API の動作が変更されています。
-このドキュメントでは、アプリ開発において把握しておくべき主な変更点について説明します。
-
-
-</p>
-
-<p>
- 過去に Android 向けのアプリを公開したことがある場合は、そのアプリが今回のプラットフォームの変更による影響を受ける可能性があることに注意してください。
-
-</p>
-
-
-<h2 id="perf">電池とメモリ</h2>
-
-<p>
-Android N では、端末の電池寿命を改善したり、RAM の使用量を削減したりするために、システムの動作がいくつか変更されています。
-これらの変更は、システム リソースへのアプリのアクセスに加え、特定の暗黙的インテントを介して他のアプリとやり取りする方法に影響を及ぼす可能性があります。
-
-
-</p>
-
-<h3 id="doze">Doze</h3>
-
-<p>
- Android 6.0(API レベル 23)で Doze が導入されました。これは、ユーザーが端末を電源と接続せずに静止状態にし、画面をオフにすると、CPU とネットワークのアクティビティを保留して電池寿命を改善するものです。
-
-Android N では、Doze が改良されています。端末を電源と接続せずに画面をオフにすると、端末が静止していなくても(たとえば、ユーザーが携帯端末をポケットに入れて持ち歩いている場合)、CPU およびネットワーク制限のサブセットがアプリに適用されます。
-
-
-
-</p>
-
-
-<img src="{@docRoot}preview/images/doze-diagram-1.png" alt="" height="251px" id="figure1" />
-<p class="img-caption">
- <strong>図 1.</strong> Doze が第 1 レベルのシステム アクティビティ制限を適用して、電池寿命を改善
-
-</p>
-
-<p>
- 端末が電池電源で動作しているときに画面をしばらくオフにすると、端末は Doze モードになり、制限の最初のサブセットが適用されます。
-これにより、アプリのネットワーク アクセスが切断されてジョブと同期が保留されます。
-端末が Doze モードに入った後、しばらくの間静止状態になると、残りの Doze 制限が {@link android.os.PowerManager.WakeLock}、{@link android.app.AlarmManager} アラーム、GPS、Wi-Fi スキャンに適用されます。
-
-
-適用される Doze 制限が一部であるか完全なものであるかには関係なく、端末は Doze モードから短時間抜け出し、メンテナンス ウィンドウと呼ばれる状態になります。このとき、アプリはネットワーク アクセスを許可され、保留されたジョブや同期を実行することができます。
-
-
-
-</p>
-
-
-<img src="{@docRoot}preview/images/doze-diagram-2.png" alt="" id="figure2" />
-<p class="img-caption">
- <strong>図 2.</strong> 端末がしばらくの間静止状態になると、Doze が第 2 レベルのシステム アクティビティ制限を適用する
-
-</p>
-
-<p>
- 画面をオンにするか、端末を電源に接続すると、Doze モードは解除され、これらの処理の制限は適用されなくなります。
-<a href="{@docRoot}training/monitoring-device-state/doze-standby.html">Doze とアプリ スタンバイ用に最適化する</a>で説明したように、今回追加された動作は、Android 6.0(API レベル 23)で導入された以前のバージョンの Doze にアプリを対応させるための推奨事項とベスト プラクティスには影響を及ぼしません。
-
-
-
-メッセージの送受信に Google Cloud Messaging(GCM)を使用するなどの推奨事項を引き続き順守して、追加の Doze 動作に対応するためにアップデートを計画する必要があります。
-
-
-
-</p>
-
-
-<h3 id="bg-opt">Project Svelte:バックグラウンド処理の最適化</h3>
-
-<p>
- Android N では、メモリ使用量と消費電力を最適化するために、3 つの暗黙的なブロードキャストが削除されています。
-この変更が必要になるのは、暗黙的なブロードキャストが行われると、バックグラウンドでブロードキャストをリッスンするように登録されているアプリが頻繁に起動されるためです。
-
-これらのブロードキャストを削除すると端末のパフォーマンスとユーザー エクスペリエンスが大幅に向上します。
-
-</p>
-
-<p>
- モバイル端末では、Wi-Fi とモバイルデータ間を移動するときなど、接続が頻繁に変化します。
-現在のアプリでは、暗黙的な {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION} ブロードキャストのレシーバーをマニフェストに登録することにより、接続の変化を監視できるようになっています。
-
-多くのアプリがこのブロードキャストを受信する登録を行っているので、一度ネットワークの切り替えが起こるだけですべてのアプリがアクティブになり、ブロードキャストが同時に処理されます。
-
-
-</p>
-
-<p>
- 同様に、旧バージョンの Android では、暗黙的な {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} ブロードキャストと {@link
- android.hardware.Camera#ACTION_NEW_VIDEO} ブロードキャストをカメラなどの他のアプリから受信するよう登録できました。
-ユーザーがカメラアプリで写真を撮ると、これらのアプリがアクティブになり、ブロードキャストが処理されます。
-
-</p>
-
-<p>
- Android N では、こういった問題を緩和するために、以下の最適化手法が適用されます。
-
-</p>
-
-<ul>
- <li>Android N 向けのアプリは、{@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION} ブロードキャストを受信しません。これは、アプリにこれらのイベントの通知をリクエストするマニフェスト エントリがある場合も同様です。
-実行されているアプリが {@link android.content.BroadcastReceiver} で通知をリクエストした場合は、メインスレッドで {@code CONNECTIVITY_CHANGE} を引き続きリッスンできます。
-
-
- </li>
-
- <li>アプリは、{@link
- android.hardware.Camera#ACTION_NEW_PICTURE} ブロードキャストまたは {@link
- android.hardware.Camera#ACTION_NEW_VIDEO} ブロードキャストを送受信できません。この最適化は、Android N 向けのアプリだけでなく、すべてのアプリに影響を及ぼします。
-
- </li>
-</ul>
-
-<p>アプリでこれらのインテントのいずれかを使用する場合は、Android N 端末を適切にターゲットにできるよう可能な限りインテントとの依存性を削除する必要があります。
-
- Android フレームワークは、これらの暗黙的なブロードキャストの必要性を軽減するいくつかのソリューションを提供します。
-たとえば、{@link
- android.app.job.JobScheduler} API は、従量制ではないネットワークへの接続など、指定された条件のときに、ネットワーク操作をスケジュールするための堅牢なメカニズムを提供します。
-
-また、{@link
- android.app.job.JobScheduler} を使用して、コンテンツ プロバイダの変更に対応することもできます。
-</p>
-
-<p>
- N でのバックグラウンド処理の最適化や、アプリで必要となる対応の詳細については、<a href="{@docRoot}preview/features/background-optimization.html">バックグラウンド処理の最適化</a>をご覧ください。
-
-
-</p>
-
-<h2 id="perm">パーミッションの変更</h2>
-
-<p>
- Android N では、アプリに影響を及ぼす可能性のあるパーミッションが変更されています。
-</p>
-
-<h3 id="permfilesys">ファイル システムのパーミッションの変更</h3>
-
-<p>
- プライベート ファイルのセキュリティを強化するために、Android N 以降向けのアプリのプライベート ディレクトリにはアクセス制限があります(<code>0700</code>)。
-
- この設定により、サイズや存在など、プライベート ファイルのメタデータの漏洩を防ぐことができます。
-このパーミッションの変更には、以下のような複数の副作用があります。
-</p>
-
-<ul>
- <li>
- プライベート ファイルの所有者はこのファイル パーミッションを緩和することができず、{@link android.content.Context#MODE_WORLD_READABLE} や {@link android.content.Context#MODE_WORLD_WRITEABLE} を使用してこれを実行しようとすると、{@link java.lang.SecurityException} がトリガーされます。
-
-
-
-
- <p class="note">
- <strong>注:</strong>現在のところ、この制限は完全には適用されていません。
- アプリはネイティブ API や {@link java.io.File File} API を使用して、プライベート ディレクトリのパーミッションを変更できる場合があります。
-ただし、プライベート ディレクトリのパーミッションを緩和できないようにすることをお勧めします。
-
- </p>
- </li>
- <li>
- パッケージ ドメイン以外の <code>file://</code> URI を渡すと、レシーバーがアクセスできないパスになる可能性があります。
-そのため、<code>file://</code> URI を渡そうとすると、<code>FileUriExposedException</code> がトリガーされます。
-
-プライベート ファイルのコンテンツの共有には、{@link
- android.support.v4.content.FileProvider} を使用することをお勧めします。
-
- </li>
- <li>
- {@link android.app.DownloadManager} では、ファイル名でプライベートに保存されたファイルを共有することはできなくなりました。
-以前のアプリで {@link
- android.app.DownloadManager#COLUMN_LOCAL_FILENAME} にアクセスした場合、このパスにアクセスできないことがあります。
-Android N 以降向けのアプリが、{@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME} にアクセスしようとすると、{@link java.lang.SecurityException} がトリガーされます。
-
-
-
- ダウンロードの場所を {@link
- android.app.DownloadManager.Request#setDestinationInExternalFilesDir
- DownloadManager.Request.setDestinationInExternalFilesDir()} や {@link
- android.app.DownloadManager.Request#setDestinationInExternalPublicDir
- DownloadManager.Request.setDestinationInExternalPublicDir()} を使用してパブリックな場所に設定する以前のアプリは、{@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME} でこのパスにアクセスできますが、このメソッドは使用しないことをお勧めします。
-
-
-
-
-
-{@link android.app.DownloadManager} で公開されているファイルへのアクセスには、{@link android.content.ContentResolver#openFileDescriptor
- ContentResolver.openFileDescriptor()} を使用することをお勧めします。
-
-
- </li>
-</ul>
-
-<h2 id="sharing-files">アプリ間のファイルの共有</h2>
-
-<p>
-Android N 向けのアプリでは、Android フレームワークにより、アプリ以外の {@code file://} URI の公開を禁止する {@link android.os.StrictMode} API ポリシーが適用されます。
-
-ファイル URI を含むインテントがアプリからなくなると、{@code FileUriExposedException} 例外によりアプリはエラーになります。
-
-</p>
-
-<p>
-アプリ間でファイルを共有するには、{@code content://} URI を送信して、この URI に一時的なアクセス パーミッションを付与する必要があります。
-このパーミッションを付与する最も簡単な方法は、{@link android.support.v4.content.FileProvider} クラスを使用することです。
-パーミッションとファイルの共有の詳細については、<a href="{@docRoot}training/secure-file-sharing/index.html">ファイルの共有</a>をご覧ください。
-
-
-</p>
-
-<h2 id="accessibility">ユーザー補助機能の改善</h2>
-
-<p>
- Android N には、低視力のユーザーまたは視覚障害のあるユーザー向けのプラットフォームのユーザビリティを改善するための変更がいくつか追加されています。
-通常は、これらの変更によってアプリのコードを変更する必要はありませんが、この機能について理解し、アプリでテストして、ユーザー エクスペリエンスに与える潜在的な影響を評価する必要があります。
-
-
-
-</p>
-
-
-<h3 id="screen-zoom">画面のズーム</h3>
-
-<p>
- Android N では、<strong>ディスプレイ サイズ</strong>を設定して、画面上のすべての要素を拡大または縮小することができるので、視覚障害のあるユーザーに対する端末のユーザー補助機能が向上しています。
-
-ユーザーは、一般的な中くらいのサイズの携帯端末 Nexus 4 の幅である <a href="http://developer.android.com/guide/topics/resources/providing-resources.html">sw320dp</a> の画面最小幅を超えて画面をズームできません。
-
-
-</p>
-
-<div class="cols">
-
-<div class="col-6">
- <img src="{@docRoot}preview/images/screen-zoom-1.png" alt="" height="XXX" id="figure1" />
-</div>
-<div class="col-6">
- <img src="{@docRoot}preview/images/screen-zoom-2.png" alt="" height="XXX" id="figure1" />
-</div>
-
-</div> <!-- end cols -->
-<p class="img-caption">
- <strong>図 3.</strong> 右側の画面では、Android N システム イメージを実行している端末のディスプレイ サイズを拡大している
-
-</p>
-
-
-<p>
- 端末の画面密度が変更されると、以下の方法で実行中のアプリに通知されます。
-
-</p>
-
-<ul>
- <li>アプリが API レベル 23 以前をターゲットにしている場合は、すべてのバックグラウンド処理が自動的に強制終了します。
-つまり、ユーザーがそのようなアプリから移動して [<em>Settings</em>] 画面を開き、<strong>ディスプレイ サイズ</strong>の設定を変更すると、メモリ不足の場合と同じように、アプリが強制終了します。
-
-
-アプリになんらかのフォアグラウンド処理がある場合は、<a href="{@docRoot}guide/topics/resources/runtime-changes.html">実行時の変更の処理</a>に記載されている設定変更の処理が通知されます。これは、端末の画面の向きが変わったときの処理と同様です。
-
-
-
- </li>
-
- <li>アプリが Android N をターゲットにしている場合、<a href="{@docRoot}guide/topics/resources/runtime-changes.html">実行時の変更の処理</a>に記載されているように、すべての処理(フォアグラウンド処理およびバックグラウンド処理)に対して設定変更が通知されます。
-
-
-
- </li>
-</ul>
-
-<p>
- Android のベスト プラクティスに従っているほとんどのアプリでは、この機能をサポートするための変更を加える必要はありません。
-以下の点は確認する必要があります。
-</p>
-
-<ul>
- <li>画面幅 <code><a href=
- "{@docRoot}guide/topics/resources/providing-resources.html">sw320dp</a></code> の端末でアプリをテストして、適切に機能することを確認します。
-
- </li>
-
- <li>端末設定が変更された場合、キャッシュ済みのビットマップやネットワークからロードされるリソースなど、画面密度に依存するキャッシュ情報を更新してください。
-
-また、アプリが一時停止状態から再開された場合は、設定変更をチェックしてください。
-
- <p class="note">
- <strong>注:</strong>設定に依存したデータをキャッシュに保存する場合は、そのデータ用の適切な画面サイズやピクセル密度など、関連するメタデータを含めることをお勧めします。
-
-このメタデータを保存しておくと、設定を変更した後、キャッシュ データを更新する必要があるかどうかを決定できます。
-
-
- </p>
- </li>
-
- <li>ピクセル単位は画面密度に対応しないため、ピクセル単位で寸法を指定することは避けてください。
-その代わり、<a href="{@docRoot}guide/practices/screens_support.html">密度非依存ピクセル</a>(<code>dp</code>)単位で寸法を指定します。
-
- </li>
-</ul>
-
-<h3 id="vision-settings">セットアップ ウィザードの [Vision Settings]</h3>
-
-<p>
- Android N には、オープニング画面に [Vision Settings] が追加されています。ユーザーはこれを使用して、新しい端末で以下のユーザー補助機能設定を設定できます。
-
- <strong>ズーム操作</strong>、<strong>フォントサイズ</strong>、<strong>ディスプレイ サイズ</strong>、<strong>TalkBack</strong>。
-この変更により、さまざまな画面設定に関連するバグが顕在化する可能性があります。
-この機能が及ぼす影響を評価するには、これらの設定を有効にしてアプリをテストする必要があります。
-
-設定は、<strong>[Settings] > [Accessibility]</strong> にあります。
-
-</p>
-
-<h2 id="ndk">プラットフォーム ライブラリにリンクした NDK アプリ</h2>
-
-<p>
- Android N では、非パブリック API のロードを防止するために、名前空間が変更されています。
- NDK を使用する場合、Android プラットフォームのパブリック API のみを使用する必要があります。
-Android の次の公式リリースで非パブリック API を使用すると、アプリがクラッシュする可能性があります。
-
-</p>
-
-<p>
- 非パブリック API を使用していることを警告するために、アプリが非パブリック API を呼び出すと、Android N 端末で実行されているアプリは logcat 出力でエラーを生成します。
-
- この状態を認識してもらえるよう、このエラーはメッセージとして端末の画面にも表示されます。
-アプリのコードを確認して、非パブリック プラットフォーム API を削除し、プレビュー端末またはエミュレータを使用して、アプリを十分にテストしてください。
-
-
-</p>
-
-<p>
- アプリがプラットフォーム ライブラリに依存している場合は、NDK ドキュメントにある一般的な修正例を参照して、共通のプライベート API をそれと同等の機能を持つパブリック API に置き換えます。
-
- 特に、<code>libpng</code> など、プラットフォームに含まれていて NDK には含まれていないライブラリをアプリで使用している場合、気付かないうちにプラットフォーム ライブラリにリンクしていることがあります。
-
-この場合、APK にリンク対象のすべての .so ファイルが含まれていることを確認します。
-
-</p>
-
-<p class="caution">
- <strong>警告:</strong>サードパーティのライブラリの中には非パブリック API にリンクしているものもあります。
-アプリがこれらのライブラリを使用している場合、Android の次の公式リリースでアプリを実行すると、アプリがクラッシュする可能性があります。
-
-</p>
-
-<p>
- NDK に含まれていないネイティブ ライブラリは Android のリリース版が変わると変更または削除される場合があるため、アプリでは、こういったライブラリへの依存やその使用を避けてください。
-
-OpenSSL から BoringSSL への移行は、そのような変更の一例です。
- また、NDK に含まれていないプラットフォーム ライブラリには互換性要件がないため、端末によって互換性レベルが異なる場合があります。
-
-古い端末で非 NDK ライブラリにアクセスする必要がある場合は、Android API レベルに応じてロードしてください。
-
-</p>
-
-<p>
- こうしたタイプの問題の診断を支援するために、Android N でアプリをビルドするときに発生する可能性のある Java および NDK のエラーの例を以下に示します。
-
-</p>
-
-<p>Java のエラー例</p>
-<pre class="no-pretty-print">
-java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so"
- is not accessible for the namespace "classloader-namespace"
-</pre>
-
-<p>NDK のエラー例</p>
-<pre class="no-pretty-print">
-dlopen failed: cannot locate symbol "__system_property_get" referenced by ...
-</pre>
-
-
-<p>
- こうしたタイプのエラーが発生しているアプリの典型的な修正例を以下に示します。
-</p>
-
-<ul>
- <li>libandroid_runtime.so の getJavaVM と getJNIEnv を使用している場合は、標準の JNI 関数に置き換えることができます。
-
-<pre class="no-pretty-print">
-AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h>
-AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or
-JavaVM::AttachCurrentThread from <jni.h>.
-</pre>
- </li>
-
- <li>{@code libcutils.so} の {@code property_get} シンボルを使用している場合は、public {@code alternative __system_property_get} に置き換えることができます。
-
- これを行うには、次の include 文とともに {@code __system_property_get} を使用します。
-<pre>
-#include <sys/system_properties.h>
-</pre>
- </li>
-
- <li>{@code libcrypto.so} の {@code SSL_ctrl} シンボルを使用している場合は、ローカル版のアプリに置き換える必要があります。
-たとえば、{@code .so} ファイルに {@code libcyrpto.a} を静的にリンクするか、BoringSSL や OpenSSL の {@code libcrypto.so} をアプリに動的に含める必要があります。
-
-
- </li>
-</ul>
-
-<h2 id="afw">Android for Work</h2>
-<p>
- Android N には、証明書のインストール、パスワードの再設定、セカンダリ ユーザーの管理、端末識別子へのアクセスなど、Android for Work をターゲットにしているアプリに対する変更が含まれています。
-
-Android for Work 環境向けのアプリをビルドしている場合、これらの変更点を確認し、変更に応じてアプリを修正する必要があります。
-
-
-</p>
-
-<ul>
- <li>DPC が代理証明書を設定する前に、代理証明書インストーラをインストールする必要があります。
-また、プロファイルと N SDK をターゲットにしているデバイス オーナー アプリに対して、デバイス ポリシー コントローラ(DPC)が <code>DevicePolicyManager.setCertInstallerPackage()</code> を呼び出す前に代理証明書インストーラをインストールする必要があります。
-
-
-このインストーラがインストールされていない場合、<code>IllegalArgumentException</code> がスローされます。
-
-
- </li>
-
- <li>端末管理者向けのパスワードの再設定制限がプロファイル オーナーに適用されます。
-端末管理者は、{@code DevicePolicyManager.resetPassword()} を使用して、既に設定されているパスワードを削除または変更できなくなりました。
-
-端末管理者は、端末にパスワード、PIN、またはパターンが設定されていない場合のみ、パスワードを設定できます。
-
- </li>
-
- <li>デバイス オーナーとプロファイル オーナーは、制限が設定されている場合でもアカウントを管理することができます。
-デバイス オーナーとプロファイル オーナーは、<code>DISALLOW_MODIFY_ACCOUNTS</code> ユーザー制限が適用されている場合でもアカウント管理 API を呼び出すことができます。
-
- </li>
-
- <li>デバイス オーナーによるセカンダリ ユーザーの管理がさらに簡単になりました。端末がデバイス オーナー モードで実行されている場合は、<code>DISALLOW_ADD_USER</code> 制限が自動的に設定されます。
-
-これにより、管理されていないセカンダリ ユーザーが作成されることを防ぐことができます。
-また、<code>CreateUser()</code> メソッドと <code>createAndInitializeUser()</code> メソッドは廃止され、新しい <code>DevicePolicyManager.createAndManageUser()</code> メソッドに置き換えられました。
-
-
- </li>
-
- <li>デバイス オーナーは、端末識別子にアクセスできます。また、デバイス オーナーは <code>DevicePolicyManagewr.getWifiMacAddress()</code> を使用して、端末の Wi-Fi MAC アドレスにもアクセスできます。
-
-端末で Wi-Fi が有効にされたことがない場合、このメソッドは {@code null} 値を返します。
-
- </li>
-
- <li>ワークモード設定により、仕事用アプリへのアクセスが制御されます。ワークモードがオフになると、システム ランチャーは仕事用アプリをグレーアウトしてこれらが利用できないことを示します。
-ワークモードが再度有効になると、通常の動作が復元されます。
-
-</ul>
-
-<p>
- Android N での Android for Work の変更の詳細については、<a href="{@docRoot}preview/features/afw.html">Android for Work のアップデート</a>をご覧ください。
-
-</p>
-
-<h2 id="annotations">アノテーションの保持</h2>
-
-<p>
-Android N では、アノテーションの表示が無視されていたバグを修正しています。この問題は、ランタイムがこれまでできなかったアノテーションへのアクセスを可能にしました。
-
-これらのアノテーションは以下のとおりです。
-</p>
-
-<ul>
- <li>{@code VISIBILITY_BUILD}:ビルド時にのみ表示されます。</li>
- <li>{@code VISIBILITY_SYSTEM}:実行時に表示されますが、基幹システムにのみ表示されます。
-</li>
-</ul>
-
-<p>
-アプリでこの動作を利用している場合は、実行時に表示されるアノテーションに保持ポリシーを追加してください。
-これは {@code @Retention(RetentionPolicy.RUNTIME)} を使用して実行できます。
-</p>
-
-<h2 id="other">その他の重要事項</h2>
-
-<ul>
-<li>Android N 上で低い API レベルをターゲットにしたアプリが実行されている場合、ユーザーがディスプレイ サイズを変更すると、アプリのプロセスは強制終了されます。
-アプリは、このシナリオを適切に処理する必要があります。
-適切に処理しないと、ユーザーが [Recents] からアプリを復元したときに、アプリがクラッシュします。
-
-
-<p>
-アプリをテストして、この動作が発生しないようにしてください。DDMS でアプリを手動で強制終了させて同様のクラッシュを発生させることにより、アプリのテストを行うことができます。
-
-
-
-</p>
-
-<p>
-N 以上をターゲットにしたアプリは、画面密度の変更時に自動的に強制終了しませんが、設定変更への対応が不十分なままである可能性があります。
-
-</p>
-</li>
-
-<li>
-Android N 上のアプリは設定変更を適切に処理し、次回の起動時にクラッシュしないようにする必要があります。
-フォントのサイズを変更([<strong>Setting</strong>] > [<strong>Display</strong>] > [<strong>Font size</strong>])した後に [Recents] からアプリを復元すると、アプリの動作を確認できます。
-
-
-
-</li>
-
-<li>
-旧バージョンの Android では、バグにより、メインスレッドの TCP ソケットへの書き込みを厳格モード違反として報告していませんでした。
-Android N ではこのバグが修正されています。この動作を表示するアプリから {@code android.os.NetworkOnMainThreadException} がスローされるようになりました。通常、メインスレッドでネットワーク操作を実行することはお勧めできません。それは、これらの操作は一般的に ANR やジャンクを引き起こす大幅なテイル レイテンシが発生するためです。
-
-
-
-</li>
-
-<li>
-メソッドの {@code Debug.startMethodTracing()} ファミリーが、SD カードのトップレベルではなく、共有ストレージ上のパッケージ固有のディレクトリの storing output にデフォルト設定されました。
-
-
-つまり、これらの API を使用するためにアプリで {@code WRITE_EXTERNAL_STORAGE} パーミッションをリクエストする必要はありません。
-</li>
-
-<li>
-多くのプラットフォーム API は、{@link android.os.Binder} トランザクションで送信される大きなペイロードをチェックし、暗黙的にログ記録したり、削除したりするのではなく {@code TransactionTooLargeExceptions} を {@code RuntimeExceptions} として再度スローするようになりました。
-
-
-一般的な例としては、{@link android.app.Activity#onSaveInstanceState Activity.onSaveInstanceState()} で大量のデータを格納することです。これにより、アプリが Android N をターゲットにしている場合は、{@code ActivityThread.StopInfo} で {@code RuntimeException} がスローされます。
-
-
-
-
-</li>
-
-<li>
-アプリが {@link java.lang.Runnable} タスクを {@link android.view.View} に渡し、{@link android.view.View} がウィンドウにアタッチされない場合は、{@link java.lang.Runnable} タスクと {@link android.view.View} がキューに入れられます。{@link java.lang.Runnable} タスクは {@link android.view.View} がウィンドウにアタッチされるまで実行されません。
-
-
-
-
-
-この動作は以下のバグを修正します。
-<ul>
- <li>対象ウィンドウの UI スレッド以外のスレッドからアプリが {@link android.view.View} に渡すと、結果として不適切なスレッドで {@link java.lang.Runnable} が実行される可能性があります。
-
- </li>
- <li>{@link java.lang.Runnable} タスクがルーパー スレッド以外のスレッドから渡されると、アプリは {@link java.lang.Runnable} タスクを公開できました。
-</li>
-</ul>
-</li>
-
-<li>
-{@link android.Manifest.permission#DELETE_PACKAGES DELETE_PACKAGES} パーミッションを持つ Android N 上のアプリが、別のアプリがインストールしたパッケージを削除しようとすると、ユーザー確認が要求されます。
-
-
-このシナリオでは、アプリが {@link android.content.pm.PackageInstaller#uninstall PackageInstaller.uninstall()} を呼び出した場合は、{@link android.content.pm.PackageInstaller#STATUS_PENDING_USER_ACTION STATUS_PENDING_USER_ACTION} をリターン ステータスとしてみなす必要があります。
-
-
-
-</li>
-
-</ul>
-
diff --git a/docs/html-intl/intl/ja/preview/download-ota.jd b/docs/html-intl/intl/ja/preview/download-ota.jd
deleted file mode 100644
index 835597b..0000000
--- a/docs/html-intl/intl/ja/preview/download-ota.jd
+++ /dev/null
@@ -1,332 +0,0 @@
-page.title=端末の OTA イメージの適用
-
-@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 「Android 互換」とは、(i)Android 互換ウェブサイト(http://source.android.com/compatibility)に掲載されており、随時アップデートされる可能性がある Android Compatibility Definition ドキュメントに準拠し、かつ(ii)Android Compatibility Test Suite(CTS)に合格した任意の Android 実装を指します。
-
-1.4 「Google」とは、1600 Amphitheatre Parkway, Mountain View, CA 94043, United States に主たる事業所を有するデラウェア州法人である Google Inc. を意味します。
-
-2. 本契約への同意
-
-2.1 Peview を使用するためには、本契約に同意する必要があります。本契約に同意しない場合は Preview を使用できません。
-
-2.2 同意するかまたは Preview を使用するためにクリックすると、本契約に同意したことになります。
-
-2.3 米国またはその他の国(デベロッパーが居住している国かまたはデベロッパーが Preview を使用する国を含む)の法律により Preview の使用を禁止されている人である場合、Preview を使用することも、使用許諾契約に同意することもできません。
-
-2.4 雇用主またはその他の事業体を代表または代理して本契約に拘束されることに同意し Preview を企業または組織の内部で使用する場合、担当者の雇用主またはその他の事業体を本契約に法的に拘束する完全な法的権限を有していることを表明および保証するものとします。担当者が必要な権限を有していない場合は、担当者の雇用主またはその他の事業体を代表または代理して、本契約に同意することも、Preview を使用することもできません。
-
-3. Google からの Preview ライセンス
-
-3.1 本契約の規定に従い、Google は Android 実装と互換性のあるアプリの開発に Preview を使用するための、限定的で、世界規模の、ロイヤリティ フリーな、譲渡不可、非排他的、サブライセンス不可なライセンスを付与するものとします。
-
-3.2 本 Preview は、別のプラットフォーム(Android 実装と互換性のないものも含む)のアプリの開発や別の SDK の開発には使用できません。本 Preview をその目的で使用しない場合は、Android 実装と互換性のないものを含め、自由に別のプラットフォームのアプリの開発を行うことができます。
-
-3.3 Preview に関するすべての法的権利、所有権、利益(Preview に含まれる知的財産権を含む)は Google またはサードパーティが所有するものとします。「知的財産権」とは、特許法、著作権法、営業秘密法、商標法、不当競争防止法に基づいて発生するすべての権利、およびその他のすべての所有権を意味します。デベロッパーに明示的に付与されていない権利は、すべて Google が所有します。
-
-3.4 本契約で明示的に許可されている目的以外においては、Preview を使用できません。当該のサードパーティのライセンスで必要とされる場合を除き、デベロッパーは、(a)Preview または Preview の一部をコピー(バックアップ目的を除く)、修正、改造、再配布、逆コンパイル、リバース エンジニアリング、逆アセンブルまたは派生物の作成、または(b)モバイル ハンドセットまたは個人用コンピュータ以外のハードウェア端末への Preview の読み込み、Preview と他のソフトウェアとの結合、または 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">
-
-<p>
- このページでは、無線(OTA)端末イメージへのリンクを提供し、OTA アップデートを端末に手動で適用する方法を説明しています。
-この手順は、Android ベータ版プログラムにより OTA アップデートが配信されたが、アップデートをインストールした後に起動しない端末を復元する際に役立ちます。
-
-
-</p>
-
-<h2 id="install-ota">OTA イメージのインストール</h2>
-
-<p></p>
-
-<p>端末に OTA パッケージをインストールするには:</p>
-
-<ol>
- <li>以下の表の OTA 端末イメージをダウンロードします。</li>
- <li>復旧モードで端末を再起動します。Nexus 端末をこのモードにする方法については、<a href="https://support.google.com/nexus/answer/4596836">Nexus を工場出荷時設定にリセットする</a>を参照してください。
-
-
-
- </li>
- <li>端末で [<strong>ADB sideload</strong>] を選択します。</li>
- <li>Android 開発環境がロードされ、Android Debug Bridge(adb)ツールがインストールされたコンピュータに端末を接続します。
-</li>
- <li>以下のコマンドを実行します。
- <pre>adb sideload <em><ota-package></em></pre>
- </li>
-</ol>
-
-
-
-<h2 id="ota-images">端末の OTA イメージ</h2>
-
-<table>
- <tr>
- <th scope="col">端末</th>
- <th scope="col">ダウンロード / チェックサム</th>
- </tr>
-
- <tr id="bullhead">
- <td>Nexus 5X <br>"bullhead"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >bullhead-ota-npd90g-0a874807.zip</a><br>
- MD5: 4b83b803fac1a6eec13f66d0afc6f46e<br>
- SHA-1: a9920bcc8d475ce322cada097d085448512635e2
- </td>
- </tr>
-
- <tr id="shamu">
- <td>Nexus 6 <br>"shamu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >shamu-ota-npd90g-06f5d23d.zip</a><br>
- MD5: 513570bb3a91878c2d1a5807d2340420<br>
- SHA-1: 2d2f40636c95c132907e6ba0d10b395301e969ed
- </td>
- </tr>
-
- <tr id="angler">
- <td>Nexus 6P <br>"angler"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >angler-ota-npd90g-5baa69c2.zip</a><br>
- MD5: 096fe26c5d50606a424d2f3326c0477b<br>
- SHA-1: 468d2e7aea444505513ddc183c85690c00fab0c1
- </td>
- </tr>
-
- <tr id="volantis">
- <td>Nexus 9 <br>"volantis"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantis-ota-npd90g-c04785e1.zip</a><br>
- MD5: 6aecd3b0b3a839c5ce1ce4d12187b03e<br>
- SHA-1: 31633180635b831e59271a7d904439f278586f49
- </td>
- </tr>
-
- <tr id="volantisg">
- <td>Nexus 9G <br>"volantisg"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantisg-ota-npd90g-c56aa1b0.zip</a><br>
- MD5: 0493fa79763d67bcdde8007299e1888d<br>
- SHA-1: f709daf81968a1b27ed41fe40d42e0d106f3c494
- </td>
- </tr>
-
- <tr id="fugu">
- <td>Nexus Player <br>"fugu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >fugu-ota-npd90g-3a0643ae.zip</a><br>
- MD5: 9c38b6647fe5a4f2965196b7c409f0f7<br>
- SHA-1: 77c6fb05191f0c2ae0956bae18f1c80b2f922f05
- </td>
- </tr>
-
- <tr id="ryu">
- <td>Pixel C <br>"ryu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >ryu-ota-npd90g-ec931914.zip</a><br>
- MD5: 4c6135498ca156a9cdaf443ddfdcb2ba<br>
- SHA-1: 297cc9a204685ef5507ec087fc7edf5b34551ce6
- </td>
- </tr>
-
- <tr id="seed">
- <td>General Mobile 4G (Android One) <br>"seed"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >seed_l8150-ota-npd90g-dcb0662d.zip</a><br>
- MD5: f40ea6314a13ea6dd30d0e68098532a2<br>
- SHA-1: 11af10b621f4480ac63f4e99189d61e1686c0865
- </td>
- </tr>
-
-</table>
-
-
- </div><!-- landing -->
-
-</div><!-- relative wrapper -->
-
-
-
-<script>
- var urlRoot = "http://storage.googleapis.com/androiddevelopers/shareables/preview/ota/";
- 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/download.jd b/docs/html-intl/intl/ja/preview/download.jd
deleted file mode 100644
index 52f7ae4..0000000
--- a/docs/html-intl/intl/ja/preview/download.jd
+++ /dev/null
@@ -1,544 +0,0 @@
-page.title=端末上でのテスト
-meta.tags="preview", "nexus","system image"
-page.tags="preview", "androidn"
-page.image=images/cards/card-n-downloads_2x.png
-
-@jd:body
-
-<div style="position:relative; min-height:600px">
-
- <div class="wrap" id="tos" style="position:absolute;display:none;width:inherit;">
-
- <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 「Android 互換」とは、(i)Android 互換ウェブサイト(http://source.android.com/compatibility)に掲載されており、随時アップデートされる可能性がある Android Compatibility Definition ドキュメントに準拠し、かつ(ii)Android Compatibility Test Suite(CTS)に合格した任意の Android 実装を指します。
-
-1.4 「Google」とは、1600 Amphitheatre Parkway, Mountain View, CA 94043, United States に主たる事業所を有するデラウェア州法人である Google Inc. を意味します。
-
-2. 本契約への同意
-
-2.1 Peview を使用するためには、本契約に同意する必要があります。本契約に同意しない場合は Preview を使用できません。
-
-2.2 同意するかまたは Preview を使用するためにクリックすると、本契約に同意したことになります。
-
-2.3 米国またはその他の国(デベロッパーが居住している国かまたはデベロッパーが Preview を使用する国を含む)の法律により Preview の使用を禁止されている人である場合、Preview を使用することも、使用許諾契約に同意することもできません。
-
-2.4 雇用主またはその他の事業体を代表または代理して本契約に拘束されることに同意し Preview を企業または組織の内部で使用する場合、担当者の雇用主またはその他の事業体を本契約に法的に拘束する完全な法的権限を有していることを表明および保証するものとします。担当者が必要な権限を有していない場合は、担当者の雇用主またはその他の事業体を代表または代理して、本契約に同意することも、Preview を使用することもできません。
-
-3. Google からの Preview ライセンス
-
-3.1 本契約の規定に従い、Google は Android 実装と互換性のあるアプリの開発に Preview を使用するための、限定的で、世界規模の、ロイヤリティ フリーな、譲渡不可、非排他的、サブライセンス不可なライセンスを付与するものとします。
-
-3.2 本 Preview は、別のプラットフォーム(Android 実装と互換性のないものも含む)のアプリの開発や別の SDK の開発には使用できません。本 Preview をその目的で使用しない場合は、Android 実装と互換性のないものを含め、自由に別のプラットフォームのアプリの開発を行うことができます。
-
-3.3 Preview に関するすべての法的権利、所有権、利益(Preview に含まれる知的財産権を含む)は Google またはサードパーティが所有するものとします。「知的財産権」とは、特許法、著作権法、営業秘密法、商標法、不当競争防止法に基づいて発生するすべての権利、およびその他のすべての所有権を意味します。デベロッパーに明示的に付与されていない権利は、すべて Google が所有します。
-
-3.4 本契約で明示的に許可されている目的以外においては、Preview を使用できません。当該のサードパーティのライセンスで必要とされる場合を除き、デベロッパーは、(a)Preview または Preview の一部をコピー(バックアップ目的を除く)、修正、改造、再配布、逆コンパイル、リバース エンジニアリング、逆アセンブルまたは派生物の作成、または(b)モバイル ハンドセットまたは個人用コンピュータ以外のハードウェア端末への Preview の読み込み、Preview と他のソフトウェアとの結合、または 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="#device-preview">ハードウェア端末をセットアップする</a>
- <ol>
- <li><a href="#ota">OTA アップデートを取得する</a></li>
- <li><a href="#flash">手動で端末への書き込みを行う</a></li>
- <li><a href="#revertDevice">アンインストールする</a></li>
- </ol>
- </li>
- <li><a href="#setupAVD">エミュレータをセットアップする</a></li>
- </ol>
- </div>
-</div>
-
-<p>
- 新しいプラットフォーム上でアプリを実行してテストするには、Android N のランタイム環境をセットアップする必要があります。
-これを行うには、以下のいずれかの方法を使用します。
-</p>
-
-<ul>
- <li>Android N をサポート対象のハードウェア端末にインストールする。</li>
- <li>Android N が動作する Android エミュレータをセットアップする。</li>
-</ul>
-
-<p>
- 既存の APK とハードウェア端末またはエミュレータがあれば、新しいプラットフォーム上でアプリの基本的な互換性テストを実施できます。
-
-基本的なテストのために開発環境全体をアップデートする必要はありません。
-
-</p>
-
-<p>
- アプリを Android N 向けに修正したり、Android N の API を使用したりする場合は、Android N 用にアップデートされた開発環境をセットアップする必要があります。詳細は <a href="{@docRoot}preview/setup-sdk.html">Android N 向けの開発準備</a>の説明をご覧ください。
-
-
-
-</p>
-
-
-<h2 id="device-preview">ハードウェア端末をセットアップする</h2>
-
-<p>
- N Developer Preview は、携帯端末やタブレット、テレビなど、アプリのテストに使用するさまざまなハードウェア端末のシステム アップデートに対応しています。
-
-</p>
-
-<p>
- 対象機種をお持ちの場合は、以下のいずれかの方法で Developer Preview マイルストーン ビルドにアップデートできます。
-
-</p>
-
-<ul>
- <li><a href="https://g.co/androidbeta">Android ベータ版プログラム</a>により<strong>自動 OTA アップデートを受信するために端末を登録する</strong>
-登録した端末は、N Developer Preview のマイルストーン ビルドごとに、定期的に無線(OTA)アップデートを受信できます。
-既存の環境から N Developer Preview のさまざまなリリースへシームレスに移行できるため、このベータ版プログラムに登録することをお勧めします。
-
-</li>
- <li><strong>Developer Preview のシステム イメージをダウンロードして、端末に書き込む</strong>
- 手動で書き込みをした端末には、OTA アップデートが自動で配信されません。ただし、端末を Android ベータ版プログラムに登録すれば、OTA アップデートを取得できるようになります。
- </li>
-</ul>
-
-<h3 id="ota">自動 OTA アップデートを受信するために端末を登録する</h3>
-
-<p>
- 対象機種(以下のダウンロードの表をご覧ください)をお持ちの場合は、<a href="https://g.co/androidbeta">Android ベータ版プログラム</a>に端末を登録すると、Android のプレビュー版への OTA アップデートを受信できます。
-
-正式なシステム アップデートと同様に、OTA アップデートのダウンロードや端末の更新は自動で行われます。
-
-
-</p>
-
-<p>
- 端末はいつでも登録解除できます。その端末で利用可能な Android の最新の実稼働向けバージョン(Android 6.0 Marshmallow など)への OTA アップデートが端末に配信されます。
-
-アップデート時はオールリセットされ、端末上のユーザーデータは削除されます。
-端末の登録解除前には、<strong>重要なデータをバックアップ</strong>しておいてください。
-
-</p>
-
-<p>
- 詳細情報や端末の登録方法については、<a href="https://g.co/androidbeta">Android ベータ版プログラム</a>のウェブサイトをご覧ください。
-
-</p>
-
-<p class="note"><strong>注:</strong>
- 登録を解除すると端末はオールリセットされるので、重要なデータはあらかじめバックアップしておいてください。
-
-</p>
-
-<h3 id="flash">手動で端末への書き込みを行う</h3>
-
-<p>
- 最新の Developer Preview のシステム イメージはいつでもダウンロードして、手動で端末に書き込むことができます。
-テスト端末用のシステム イメージは、以下の表からダウンロード可能です。
-テスト環境を詳細に管理したり、自動テストなどで頻繁に再インストールが必要な場合は、このように手動で端末に書き込みをする方法が便利です。
-
-
-</p>
-
-<!-- You can flash by ota or system image --><p>
- 端末にシステム イメージをインストールすると、<strong>端末からすべてのデータが削除</strong>されるため、あらかじめデータをバックアップしておいてください。
-
-</p>
-
-<p>
- 端末上のデータをバックアップして、ご自身の端末用のシステム イメージを以下からダウンロードした後、<a href="https://developers.google.com/android/nexus/images#instructions">developers.google.com/android</a> の手順に従って端末にイメージを書き込みます。
-
-
-</p>
-
-<p>
- 手動でシステム イメージを書き込んだ端末には、以降の Developer Preview マイルストーン ビルドへの <strong>OTA アップデートが自動配信されません</strong>。
-
-そのため Developer Preview マイルストーンごとに環境を最新にして、新しいシステム イメージを書き込む必要があります。
-
-</p>
-
-<p>
- 手動で端末に書き込みを行った後でも、<a href="https://g.co/androidbeta">Android ベータ版プログラム</a>に端末を登録すれば OTA アップデートを受信できるようになります。
-
-次のプレビュー版への OTA アップデートを受信したい方は、いつでも端末登録が可能です。
-
-</p>
-
-<table>
- <tr>
- <th scope="col">端末</th>
- <th scope="col">ダウンロード / チェックサム</th>
- </tr>
-
- <tr id="bullhead">
- <td>Nexus 5X <br>"bullhead"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >bullhead-npd90g-factory-7a0ca1bc.tgz</a><br>
- MD5: e7a9a3061335c1e0c8be2588f13290af<br>
- SHA-1: 7a0ca1bcfa51bbefde34243603bc79c7dec214a1
- </td>
- </tr>
-
- <tr id="shamu">
- <td>Nexus 6 <br>"shamu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >shamu-npd90g-factory-f7a4e3a9.tgz</a><br>
- MD5: 2fb572ddcfca67bb1d741be97492a9ed<br>
- SHA-1: f7a4e3a96c797827492998e855c8f9efbfc8559a
- </td>
- </tr>
-
- <tr id="angler">
- <td>Nexus 6P <br>"angler"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >angler-npd90g-factory-cd9ac81e.tgz</a><br>
- MD5: 2370c30f3ef1d0684c1de5216a5d90fe<br>
- SHA-1: cd9ac81ec7f4a646ac6054eecbf2ea4c4b89b054
- </td>
- </tr>
-
- <tr id="volantis">
- <td>Nexus 9 <br>"volantis"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantis-npd90g-factory-41b55406.tgz</a><br>
- MD5: cefa78950141da2a7c75e887717e3c8f<br>
- SHA-1: 41b554060263a7ef16e4be8422cbd6caca26e00f
- </td>
- </tr>
-
- <tr id="volantisg">
- <td>Nexus 9G <br>"volantisg"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantisg-npd90g-factory-610492be.tgz</a><br>
- MD5: 2f36dc0d0fab02ab78be500677ec239f<br>
- SHA-1: 610492bedfc4127023040ecb2c89239a78a900ad
- </td>
- </tr>
-
- <tr id="fugu">
- <td>Nexus Player <br>"fugu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >fugu-npd90g-factory-0fe95694.tgz</a><br>
- MD5: f4cb48f919e4c29c631de21416c612e2<br>
- SHA-1: 0fe95694e7bc41e4c3ac0e4438cd77102a0aa8b4
- </td>
- </tr>
-
- <tr id="ryu">
- <td>Pixel C <br>"ryu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >ryu-npd90g-factory-f4da981c.tgz</a><br>
- MD5: d9f0e40b6c20d274831e8a7d285fd887<br>
- SHA-1: f4da981c70576133321e2858e52fe2c990e68a75
- </td>
- </tr>
-
- <tr id="seed">
- <td>General Mobile 4G (Android One) <br>"seed"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >seed_l8150-npd90g-factory-48f59c99.tgz</a><br>
- MD5: 0ed565c509594072822d71c65b48ec8e<br>
- SHA-1: 48f59c99ac43d1cd2f5656a283bb9868581663a8
- </td>
- </tr>
-
-</table>
-
-<h3 id="revertDevice">プレビュー版を端末からアンインストールする</h3>
-
-<p>
- 以下のいずれかの方法で、プレビュー版を端末からアンインストールできます。
- </p>
- <ul>
- <li><strong>工場出荷時仕様のシステム イメージを取得</strong>して、手動で端末に書き込みます。
-
- <ul>
- <li><strong>Nexus 端末と Pixel C 端末</strong>については、Nexus 端末の<a href="http://developers.google.com/android/nexus/images">ファクトリー イメージ</a>のページを参照してダウンロードしてください。
-
- </li>
- <li><strong>他の端末</strong>については、端末メーカーに直接お問い合わせください。
-その他の端末については、直接端末メーカーにお問い合わせください。Android ベータ版プログラムの対象機種については、端末をプログラムに登録した後、登録を解除することができます(詳細は以下をご覧ください)。
-
-</li>
- </ul>
- </li>
- <li><strong>Android ベータ版プログラムから端末を登録解除します。</strong>Android ベータ版プログラムへの端末の登録を解除します。<a href="https://g.co/androidbeta">Android ベータ版プログラム</a>に登録中の端末は、その種類のよらず、簡単に登録を解除することができます。
-
-
- <p>
- その端末で利用可能な Android の最新の実稼働向けバージョン(Android 6.0 Marshmallow など)への OTA アップデートが端末に配信されます。
-
- アップデート時はオールリセットされ、端末上のユーザーデータは削除されます。
-端末の登録解除前には、<strong>重要なデータをバックアップ</strong>しておいてください。
-
- </p>
- </li>
-</ul>
-
-<p class="note"><strong>注:</strong>
- プログラムの終了前に Developer Preview のシステム イメージをアンインストールすると、端末はオールリセットされ、すべてのユーザーデータが削除されます。
-
-
-</p>
-
-
-<h2 id="setupAVD">エミュレータをセットアップする</h2>
-
-<p>Android エミュレータで Android N Preview を実行するには、Android N Preview SDK をダウンロードして、エミュレータ用の仮想端末を準備する必要があります。
-
-</p>
-
-<p>まずは以下の手順で Android N Preview SDK をダウンロードします(既に <a href="{@docRoot}preview/setup-sdk.html">Android N 向けの開発準備</a>でダウンロード済みの場合は、この手順は飛ばしてください)。
-
-
-
-<ol>
- <li>Android Studio で設定ダイアログを開きます(Windows、Linux では <strong>[File] > [Settings]</strong>、Mac では <strong>[Android Studio] > [Preferences]</strong>)。
-
-左側のパネルで、<strong>[Appearance & Behavior] > [System Settings] > [Android SDK]</strong> を選択します。
-
-
-
- <li>[<strong>SDK Platforms</strong>] タブをクリックして、[<strong>Android N Preview</strong>] チェック ボックスを選択します。
-</li>
-
- <li>[<strong>SDK Tools</strong>] タブをクリックして、[<strong>Android SDK Build Tools</strong>]、[<strong>Android SDK Platform-Tools</strong>]、[<strong>Android SDK Tools</strong>] のチェック ボックスをオンにします。
-
-
-
- </li>
-
- <li>[<strong>OK</strong>] をクリックして、インストールするパッケージの使用許諾に同意します。
-
- </li>
-</ol>
-
-<p>これで <strong>Android SDK Built-Tools 24.0 0 rc1</strong>、<strong>Platform-Tools 24.0.0 rc1</strong>、<strong>SDK Tools 25.0.9</strong> がインストールされます。SDK Tools を 25.0.9 にアップデートしないと、Android N の x86_64 システム イメージは動作しません。
-
-
-</p>
-
-
-<p>次に Android N のシステム イメージを使用して仮想端末を作成します。</p>
-
-<ol>
- <li><strong>[Tools] > [Android] > [AVD Manager]</strong> を選択して、AVD Manager を起動します。
-</li>
- <li>[<strong>Create Virtual Device</strong>] をクリックします。</li>
- <li>Nexus 5X、Nexus 6P、Nexus 9、Android TV などの端末を選択して、[<strong>Next</strong>] をクリックします。
-</li>
- <li><strong>N</strong> システム イメージ(<strong>x86</strong> ABI)を選択して [<strong>Next</strong>] をクリックします
-
- (現時点で Android N Preview の Android エミュレータに対応しているのは x86 システム イメージだけです)。
-
- <li>残りの AVD 設定を終えたら [<strong>Finish</strong>] をクリックします。
-</li>
-</ol>
-
-<p>これで Android N Preview AVD で Android エミュレータを起動できます。</p>
-
-<p>
-<a href="http://tools.android.com/tech-docs/emulator">Android Emulator 2.0 Beta</a> に対応した Android Studio 2.1 のプレビュー版をインストールすると、Android Studio 1.5 よりもパフォーマンスが格段に向上し、Android エミュレータをより快適にお使いいただけます。
-
-
-</p>
-
-<p>仮想端末の作成については、<a href="{@docRoot}tools/devices/index.html">仮想端末を管理する</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/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/afw.jd b/docs/html-intl/intl/ja/preview/features/afw.jd
deleted file mode 100644
index 8e73298..0000000
--- a/docs/html-intl/intl/ja/preview/features/afw.jd
+++ /dev/null
@@ -1,552 +0,0 @@
-page.title=Android for Work のアップデート
-page.metaDescription=Android N の新しい Android for Work の API と機能。
-page.keywords="android for work", "android N", "enterprise", "QR code"
-
-@jd:body
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>このドキュメントの内容</h2>
- <ol>
- <li><a href="#qr">QR コードのプロビジョニング</a>
-</li>
-
- <li><a href="#sec-challenge">仕事用プロファイルによるセキュリティ確認</a>
-</li>
-
- <li><a href="#suspend">アプリへのアクセスを無効にする</a>
-</li>
-
- <li><a href="#toggle-work">ワークモードの切り替え</a>
-</li>
-
- <li><a href="#always-on-vpn">Always On VPN</a>
-</li>
-
- <li><a href="#contacts">仕事用プロファイルと連絡先の統合</a>
-</li>
-
- <li><a href="#remote-reboot">リモートでの再起動</a>
-</li>
-
- <li><a href="#disable-roaming">データローミングを無効にする</a>
-</li>
-
- <li><a href="#process-logging">企業によるプロセスのログ記録</a>
-</li>
-
- <li><a href="#bug-reports">リモートでのバグレポート</a>
-</li>
-
- <li><a href="#remove-cert">クライアント証明書を削除する</a>
-</li>
-
- <li><a href="#grant-cert-on-install">インストール時にクライアント証明書へのアクセス権を付与する</a>
-</li>
-
- <li><a href="#ui-policy">システムの UI ポリシーの透明性</a>
-</li>
-
- <li><a href="#restrictions-mgmt">アプリ制限の管理の強化</a>
-</li>
-
- <li><a href="#location-off">位置情報のオフへの切り替え</a>
-</li>
-
- <li><a href="#custom-provisioning">カスタマイズされたプロビジョニング</a>
-</li>
-
- <li><a href="#multi-wifi-ca">複数の Wi-Fi 用の CA 証明書
-</a></li>
-
- <li><a href="#custom-lock">カスタマイズされたロック画面のメッセージ</a>
-</li>
-
- <li><a href="#work-connectionservice">仕事用プロファイルの ConnectionService</a>
-</li>
-
- <li><a href="#lock-wp">壁紙をロックダウンする</a>
-</li>
-
- <li><a href="#lock-user-icon">ユーザー アイコンをロックダウンする</a>
-</li>
-
- <li><a href="#health-monitoring">端末の状態の監視</a>
-</li>
-
- </ol>
-
- <h2>関連ドキュメント</h2>
- <ul>
- <li><a href="{@docRoot}preview/setup-sdk.html#docs-dl">N Preview SDK リファレンス</a>
-</li>
- </ul>
- </div>
-</div>
-
-<p>このドキュメントでは、Android N で提供されている新しい Android for Work の機能について説明します。
-</p>
-
-<h2 id="qr">QR コードのプロビジョニング</h2>
-
-<p>
- Android for Work では、企業が責任を負う端末のプロビジョニングに QR コードを使用できるようになりました。
-セットアップ ウィザードを使用すると、QR コードをスキャンして端末をプロビジョニングできます。
-
-</p>
-
-<h2 id="sec-challenge">仕事用プロファイルによるセキュリティ確認</h2>
-
-<p>
- プロファイル オーナーは、仕事用プロファイルで実行しているアプリに対してセキュリティ確認を指定するようユーザーに要求できます。
-ユーザーが仕事用アプリを開こうとすると、セキュリティ確認画面が表示されます。
-ユーザーがセキュリティの確認に成功すると、仕事用プロファイルのロックが解除され、必要に応じて暗号化も解除されます。
-
-
-</p>
-
-<p>
- プロファイル オーナーが {@link
- android.app.admin.DevicePolicyManager#ACTION_SET_NEW_PASSWORD} インテントを送信すると、ユーザーはセキュリティ確認をセットアップするよう求められます。
-また、プロファイル オーナーは、<code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> インテントを送信して、ユーザーに端末のロックを設定するよう求めることもできます。
-
-
-</p>
-
-<p>
- プロファイル オーナーは仕事用プロファイル用のセキュリティ確認に、他の端末のパスワード ポリシーとは異なるパスワード ポリシーを設定できます。
-たとえば、端末の確認応答の最小長は、他のパスワードに必要な長さと異なっていてもかまいません。
-
-プロファイル オーナーがこの確認のポリシーを設定する場合は、通常 {@link
- android.app.admin.DevicePolicyManager#setPasswordQuality
- setPasswordQuality()} や {@link
- android.app.admin.DevicePolicyManager#setPasswordMinimumLength
- setPasswordMinimumLength()} など、{@link android.app.admin.DevicePolicyManager} メソッドを使用して設定します。
-
-また、新しい <code>DevicePolicyManager.getParentProfileInstance()</code> メソッドが返す {@link android.app.admin.DevicePolicyManager} インスタンスを使用して端末のロックを設定することもできます。
-
-
-さらに、{@link android.app.admin.DevicePolicyManager} クラスの新しい <code>setOrganizationColor()</code> メソッドおよび <code>setOrganizationName()</code> メソッドを使用して仕事用プロファイル用のセキュリティ確認画面をカスタマイズすることができます。
-
-
-
-</p>
-
-<p>
- 新しいメソッドと定数の詳細については、<a href="{@docRoot}preview/setup-sdk.html#docs-dl">N Preview SDK リファレンス</a>の<code>DevicePolicyManager</code> リファレンス ページをご覧ください。
-
-</p>
-
-<h2 id="suspend">アプリへのアクセスを無効にする</h2>
-
-<p>
- デバイス オーナーとプロファイル オーナーは、新しい <code>DevicePolicyManager.setPackagesSuspended()</code> メソッドを呼び出して、パッケージへのアクセスを一時的に停止することができます。
-
-オーナーがパッケージを再度有効にする場合は、同じメソッドを使用できます。
-</p>
-
-<p>
- パッケージが停止されている場合は、アクティビティを開始できないため、パッケージへの通知は行われず、<a href="{@docRoot}guide/components/recents.html">オーバービュー画面</a>のアプリのエントリは非表示になります。
-
- 停止されているパッケージは<a href="{@docRoot}guide/components/recents.html">オーバービュー画面</a>に表示されず、ダイアログ(トーストや Snackbar を含む)を表示することはできません。
-また、音声を再生したり、端末を振動させたりすることもできません。
-
-</p>
-
-<p>
- ランチャーは、アプリが現在利用できないことを示すために、アプリのアイコンをグレーでレンダリングするなど、停止されているアプリにひと目でわかる UI を適用する必要があります。
-
-ランチャーは、新しい <code>DevicePolicyManager.getPackageSuspended()</code> メソッドを呼び出してアプリが停止されているかどうかを確認できます。
-
-</p>
-
-<h2 id="toggle-work">ワークモードの切り替え</h2>
-
-<p>
- デュアル プロファイル端末では、ユーザーはワークモードのオンとオフを切り替えることができます。ワークモードがオフの場合は、管理されているプロファイルが一時的にシャットダウンされます。
-仕事用プロファイルのアプリ、バックグラウンドでの同期、通知がすべて無効になります。これにはプロファイル オーナーのアプリも含まれます。
-
-また、仕事用プロファイルが無効にされている場合は、仕事用アプリを起動できないことをユーザーに示すステータス アイコンが表示されたままになります。
-
-システム ランチャーは、仕事用アプリとウィジェットにアクセスできないことを示します。
-
-</p>
-
-<h2 id="always-on-vpn">Always On VPN</h2>
-
-<p>
- デバイス オーナーとプロファイル オーナーは、指定した VPN を介して仕事用アプリが常時ネットワークに接続することを要求できます。
-オーナーがこの要件を設定すると、端末は起動時に対象の VPN を自動的に開始します。
-
-</p>
-
-<p>
- オーナーは、新しい <code>DevicePolicyManager.setAlwaysOnVpnPackage()</code> メソッドを呼び出して VPN を使用することを要求できます。
-オーナーが VPN 要件を設定しているかどうかを確認するには、新しい <code>DevicePolicyManager.GetAlwaysOnVpnPackage()</code> メソッドを呼び出します。
-
-
-</p>
-
-<p>
- システムがアプリの介入なしに VPN サービスを直接バインドできるため、常時接続 VPN の新しいエントリ ポイントは VPN クライアント側で処理する必要があります。
-以前と同様に、アクティブなサービスを見つけるには、アクション {@link android.net.VpnService android.net.VpnService} に一致するインテント フィルタを使用します。
-
-
-</p>
-
-<p>
- ユーザーは {@link
- android.net.VpnService} を実装する常時接続 VPN クライアントを、<strong>[Settings] > [More] > [VPN]</strong> 画面を使用して手動で設定できます。
-
-</p>
-
-<h2 id="contacts">仕事用プロファイルと連絡先の統合</h2>
-
-<p>
- プロファイル オーナーは、プライマリ ユーザーの仕事用連絡先のローカル検索やディレクトリ検索を許可することができます。
-たとえば、ユーザーは個人用電話アプリや連絡先アプリから個人用と仕事用の両方のディレクトリの連絡先にアクセスできます(プロファイル管理者によって許可されている場合)。
-
-
-</p>
-
-<p>
- 連絡先プロバイダを活用するデベロッパーは、ポリシーで許可されている場合、Enterprise Contacts API を使用してプライマリ ユーザーの仕事用プロファイルのディレクトリのエントリにアクセスできます。
-
-
-</p>
-
-<ul>
- <li><code>ContactsContract.Contacts.ENTERPRISE_CONTENT_FILTER_URI</code>
- </li>
-
- <li><code>ContactsContract.Phone.ENTERPRISE_CONTENT_FILTER_URI</code>
- </li>
-
- <li><code>ContactsContract.Email.ENTERPRISE_CONTENT_FILTER_URI</code>
- </li>
-
- <li><code>ContactsContract.Callable.ENTERPRISE_CONTENT_FILTER_URI</code>
- </li>
-
- <li><code>ContactsContract.Directory.ENTERPRISE_CONTENT_URI</code>
- </li>
-
- <li><code>ContactsContract.Directory.isEntepriseDirectoryId()</code>
- </li>
-</ul>
-
-<p>
- プロファイル オーナーは、以下の新しいメソッドを使用して、プライマリ ユーザーの仕事用連絡先の表示を制御できます。
-
-</p>
-
-<ul>
- <li>
- <code>DevicePolicyManager.setCrossProfileContactsSearchDisabled()</code>
- </li>
-
- <li>
- <code>DevicePolicyManager.getCrossProfileContactsSearchDisabled()</code>
- </li>
-</ul>
-
-<h2 id="remote-reboot">リモートでの再起動</h2>
-
-<p>
- デバイス オーナーは、端末をリモートで再起動できます。エンクロージャ内のパブリックな場所にデプロイされている端末は、電源ボタンにアクセスできないようにすることができる場合があります。
-端末を再起動する必要がある場合、管理者は新しい <code>DevicePolicyManager.reboot()</code> メソッドを使用して実行することができます。
-
-
-</p>
-
-<h2 id="disable-roaming">データローミングを無効にする</h2>
-
-<p>
- デバイス オーナーがデータローミングを無効にするには、新しい {@link
- android.os.UserManager} のユーザー制限 <code>DISALLOW_DATA_ROAMING</code> を使用します。
-</p>
-
-<h2 id="process-logging">企業によるプロセスのログ記録</h2>
-
-<p>
- デバイス オーナーは、リモートで端末のアクティビティ(アプリの起動、adb アクティビティ、画面のロック解除など)を追跡することにより、疑わしいアクティビティを特定できます。
-プロセス ログはユーザーの同意は必要ありません。
-ログを取得するには、デバイス オーナーは <code>DevicePolicyManager.setSecurityLoggingEnabled()</code> を使用して端末のログ記録を有効にします。
-
-</p>
-
-<p>
- API の変更点は以下のとおりです。
-</p>
-
-<ul>
-
- <li>
- 新しいクラス <code>android.app.admin.SecurityLog</code> とそのメソッド
-
- </li>
-
- <li>
- <code>void DevicePolicyManager.setSecurityLoggingEnabled()</code>
- </li>
-
- <li>
- <code>boolean DevicePolicyManager.isSecurityLoggingEnabled()</code>
- </li>
-
- <li>
- <code>List<SecurityEvent>
- DevicePolicyManager.retrieveSecurityLogs()</code>
- </li>
-
- <li>
- <code>List<SecurityEvent>
- DevicePolicyManager.retrievePreRebootSecurityLogs()</code>
- </li>
-
- <li>
- <code>void DeviceAdminReceiver.onSecurityLogsAvailable()</code>
- </li>
-</ul>
-
-<h2 id="bug-reports">リモートでのバグレポート</h2>
-
-<p>
- デバイス オーナーは、端末の状態のダンプファイルを含むバグレポートをリモートでトリガーして取得できます。これにより、既知のインシデントや障害が発生した端末の徹底的な調査が可能になります。
-
-バグレポートの内容は詳細にわたるため、ユーザーの同意が必要になります。
-
-</p>
-
-<p>
- Android N では、この機能をサポートするために以下の API が追加されています。詳細については、<a href="{@docRoot}preview/setup-sdk.html#docs-dl">N Preview SDK リファレンス</a>をご覧ください。
-
-
-</p>
-
-<ul>
- <li>
- <code>DevicePolicyManager.requestBugreport()</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.onBugreportFailed()</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.onBugreportShared()</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.onBugreportSharingDeclined()</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.BUGREPORT_FAILURE_FAILED_COMPLETING</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.BUGREPORT_FAILURE_FILE_NO_LONGER_AVAILABLE</code>
- </li>
-</ul>
-
-<h2 id="remove-cert">クライアント証明書を削除する</h2>
-
-<p>
- プロファイル オーナーとデバイス オーナーは、{@link android.app.admin.DevicePolicyManager#installKeyPair
- installKeyPair()} によってインストールされたクライアント証明書を、新しい <code>DevicePolicyManager.removeKeyPair()</code> メソッドを呼び出して削除できるようになりました。
-
-
-</p>
-
-<h2 id="grant-cert-on-install">インストール時にクライアント証明書へのアクセス権を付与する
-</h2>
-
-<p>
- プロファイル オーナーやデバイス オーナーが、サードパーティ アプリに証明書を管理する権限を付与する場合、アプリはオーナーの介入なしに、インストールされる証明書へのアクセス権をアプリ自体に付与できます。
-
-
-</p>
-
-<p>
- 証明書を管理するための既存の API は、以下を含むように拡張されています。
-</p>
-
-<ul>
- <li><code>DevicePolicyManager.installKeyPair()</code>
- </li>
-</ul>
-
-<h2 id="ui-policy">システムの UI ポリシーの透明性</h2>
-
-<p>
- ユーザー エクスペリエンスに影響を及ぼしたり、ユーザー設定を制限したりするポリシーはユーザーに完全に公表されます。プロファイル オーナーとデバイス オーナーは、このポリシーと会社の IT 部門を関連付けることができます。
-
-IT 管理者は [Settings] の「Action not allowed」という通常のメッセージに加え、端末設定に組織固有のサポート メッセージを設定できます。これには以下の新しい {@link android.app.admin.DevicePolicyManager} メソッドを使用します。
-
-
-
-</p>
-
-<ul>
- <li>
- <code>DevicePolicyManager.setShortSupportMessage()</code>
- </li>
-
- <li>
- <code>DevicePolicyManager.setLongSupportMessage()</code>
- </li>
-</ul>
-
-<h2 id="restrictions-mgmt">アプリ制限の管理の強化</h2>
-
-<p>
- デバイス オーナーやプロファイル オーナーは、別のアプリケーションでアプリ制限を管理できるようにすることができます。これには新しい <code>DevicePolicyManager.setApplicationRestrictionsManagingPackage()</code> メソッドを使用します。
-
-
-指定されたアプリケーションは、このパーミッションが付与されているかどうかを、<code>DevicePolicyManager.isCallerApplicationRestrictionsManagingPackage()</code> を呼び出して確認できます。
-
-
-</p>
-
-<p>
- アプリ制限を管理するように指定されたアプリケーションは、対象となるユーザーやプロファイル内のパッケージに対して {@link
- android.app.admin.DevicePolicyManager#setApplicationRestrictions
- setApplicationRestrictions()} と {@link
- android.app.admin.DevicePolicyManager#getApplicationRestrictions
- getApplicationRestrictions()} を呼び出すことができます。
-</p>
-
-<h2 id="location-off">位置情報のオフへの切り替え</h2>
-
-<p>
- 個人用アプリの位置情報に継続的にアクセスしている場合、ユーザーは仕事用アプリの位置パーミッションを無効にできます。
-[Location Settings] で別の位置情報へのアクセスに切り替えると、ユーザーは位置情報の更新や、仕事用プロファイルで実行されているアプリの最新位置情報の問い合わせを拒否できます。
-
-
-</p>
-
-<p>
- トップレベルの位置情報をオフに切り替えると、プライマリ プロファイルと管理されているプロファイルの両方の位置情報へのアクセスが無効になります。
-
-</p>
-
-<h2 id="custom-provisioning">カスタマイズされたプロビジョニング</h2>
-
-<p>
- アプリでは、コーポレート・カラーやロゴを含むプロファイル オーナーとデバイス オーナーのプロビジョニング フローをカスタマイズできます。
-
-</p>
-
-<dl>
- <dt>
- <code>DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR</code>
- </dt>
-
- <dd>
- フローカラーをカスタマイズします。
- </dd>
-
- <dt>
- <code>DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI</code>
- </dt>
-
- <dd>
- コーポレート ロゴを含むフローをカスタマイズします。
- </dd>
-</dl>
-
-<h2 id="multi-wifi-ca">複数の Wi-Fi 用の CA 証明書</h2>
-
-<p>
- プロファイル オーナーとデバイス オーナーは、特定の Wi-Fi 設定に複数の CA 証明書を設定できます。
-企業の Wi-Fi ネットワークで、同じ SSID を持つ別のアクセス ポイントに別の CA を使用する場合、IT 管理者は新しい <code>setCaCertificates()</code> メソッドを使用して、関連するすべての CA を Wi-Fi 設定に含めることができます。
-
-
-
-</p>
-
-<p>
- 以下の API が追加されました。
-</p>
-
-<ul>
- <li>
- <code>WifiEnterpriseConfig.setCaCertificates()</code>
- </li>
-
- <li>
- <code>WifiEnterpriseConfig.getCaCertificates()</code>
- </li>
-</ul>
-
-<h2 id="custom-lock">カスタマイズされたロック画面のメッセージ</h2>
-
-<p>
- デバイス オーナーは、ロック画面に表示されるオーナー情報を提供できます。
- この情報は、ユーザーのロック画面のメッセージよりも優先されます(設定されている場合)。
-新しい {@link android.app.admin.DevicePolicyManager} メソッドは以下のとおりです。
-</p>
-
-<ul>
- <li>
- <code>setDeviceOwnerLockScreenInfo()</code>
- </li>
-
- <li>
- <code>getDeviceOwnerLockScreenInfo()</code>
- </li>
-</ul>
-
-<h2 id="work-connectionservice">仕事用プロファイルの ConnectionService</h2>
-
-<p>
- プロファイル オーナーは、バックエンドの呼び出し(アカウントの呼び出し)に仕事固有の {@link android.telecom.ConnectionService} を使用する仕事用電話アプリを指定できます。
-
-仕事用電話は、仕事のみの通話履歴を保持し、仕事用連絡先のみを利用します。
-電話アプリに関係なく、ユーザーには統一された着信 UI が表示されます。
-仕事用通話アカウントへの仕事用の着信は、個人用通話アカウントへの個人用の着信とは区別されます。
-
-
-</p>
-
-<p>
- 通話が仕事用の通話かどうかを確認するには、電話は新しいフラグ <code>android.telecom.Call.PROPERTY_WORK_CALL</code> を確認する必要があります。
-
-通話が仕事用の通話の場合、電話はワーク バッジを追加するなどして、これを示す必要があります。
-
-</p>
-
-<h2 id="lock-wp">壁紙をロックダウンする</h2>
-
-<p>
- 新しいユーザー制限(<code>DISALLOW_SET_WALLPAPER</code>)により、ユーザーは壁紙を変更することができません。
-デバイス オーナーやプロファイル オーナーは壁紙を変更できますが、制御するユーザーやプロファイルの壁紙のみ変更できます。
-
-たとえば、プロファイル オーナーは、親ユーザーの壁紙は変更できませんが、プライマリ プロファイルのプロファイル オーナーやデバイス オーナーは変更できます。
-
-壁紙を変更する必要があるプロファイル オーナーやデバイス オーナーは、管理するユーザーやプロファイルに壁紙があるかどうか({@link android.app.WallpaperManager#isWallpaperSupported
- isWallpaperSupported()})、壁紙の変更が許可されているかどうかを(新しい <code>WallpaperManager.isWallpaperSettingAllowed()</code> メソッドを使用して)確認する必要があります。
-
-
-
-</p>
-
-<h2 id="lock-user-icon">ユーザー アイコンをロックダウンする</h2>
-
-<p>
- 新しいユーザー制限(<code>DISALLOW_SET_USER_ICON</code>)により、ユーザーはユーザー アイコンを変更することができません。
-ユーザーのデバイス オーナーやプロファイル オーナーは、このアイコンを変更できます。
-ただし、プロファイル オーナーが変更できるのは、制御するプロファイルのユーザー アイコンのみです。
-
-</p>
-
-<h2 id="health-monitoring">端末の状態の監視</h2>
-
-<p>
- デバイス オーナーやプロファイル オーナーは、新しい <code>HardwarePropertiesManager</code> インターフェースを使用して、CPU や GPU の温度、CPU 使用率などの端末の状態に関する情報を取得できます。
-
-新しい監視インターフェースは、遠隔地で実行されている使用されていない端末の監視に特に役立ちます。
-
-
-</p>
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/data-saver.jd b/docs/html-intl/intl/ja/preview/features/data-saver.jd
deleted file mode 100644
index 6336151..0000000
--- a/docs/html-intl/intl/ja/preview/features/data-saver.jd
+++ /dev/null
@@ -1,234 +0,0 @@
-page.title=データセーバー
-metaDescription= ユーザーが有効にしたデータ使用量の最適化。
-page.keywords="android N", "data usage", "metered network"
-page.image=images/cards/card-nyc_2x.jpg
-@jd:body
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>
- このドキュメントの内容
- </h2>
-
- <ol>
- <li>
- <a href="#status">データセーバー設定の確認</a>
- <ol>
- <li>
- <a href="#request-whitelist">ホワイトリスト パーミッションの要求</a>
- </li>
- </ol>
- </li>
-
- <li>
- <a href="#monitor-changes">データセーバー設定の変更の監視</a>
-
- </li>
-
- <li>
- <a href="#testing">Android Debug Bridge コマンドを使用したテスト</a>
- </li>
- </ol>
- </div>
-</div>
-
-<p>
- スマートフォンのライフサイクル全体では、モバイルデータ通信プランのコストが端末自体のコストを簡単に上回ります。
-N Developer Preview では、ローミング、課金サイクルの終了近く、または短期間のデータパックであるかどうかに関係なく、データの使用を抑えるために端末全体でデータセーバーを有効にできます。
-
-
-</p>
-
-<p>
- ユーザーが [<strong>Settings</strong>] でデータセーバーを有効にし、端末が従量制課金ネットワークに接続されている場合、システムはバックグラウンドでのデータ使用をブロックし、フォアグラウンドでのデータ使用をなるべく抑えるようにアプリに指示します。
-
-ユーザーは特定のアプリをホワイトリストに登録することにより、データセーバーがオンになっているときでも、バックグラウンドで従量制課金接続を使用できます。
-
-
-</p>
-
-<p>
- N Developer Preview は {@link android.net.ConnectivityManager} API を拡張することで、<a href="#status">ユーザーのデータセーバー設定を取得</a>する方法と、<a href="#monitor-changes">設定の変更を監視</a>する方法を提供しています。
-
-
-アプリでユーザーがデータセーバーを有効にしているかどうかを確認し、フォアグラウンドおよびバックグラウンドでのデータ使用を抑えるようにすることをお勧めします。
-
-
-</p>
-
-<h2 id="status">
- データセーバー設定の確認
-</h2>
-
-<p>
- N Developer Preview では、アプリは {@link
- android.net.ConnectivityManager} API を使用して、どのようなデータ使用量の制限が適用されているかを確認できます。
-{@code getRestrictBackgroundStatus()} メソッドは以下のいずれかの値を返します。
-
-</p>
-
-<dl>
- <dt>
- {@code RESTRICT_BACKGROUND_STATUS_DISABLED}
- </dt>
-
- <dd>
- データセーバーは無効になっています。
- </dd>
-
- <dt>
- {@code RESTRICT_BACKGROUND_STATUS_ENABLED}
- </dt>
-
- <dd>
- ユーザーはこのアプリのデータセーバーを有効にしています。アプリはフォアグラウンドでのデータ使用を抑えるようにし、バックグラウンドでのデータ使用に対する制限を適切に処理する必要があります。
-
-
- </dd>
-
- <dt>
- {@code RESTRICT_BACKGROUND_STATUS_WHITELISTED}
- </dt>
-
- <dd>
- ユーザーはデータセーバーを有効にしていますが、アプリがホワイトリストに登録されています。アプリは、フォアグラウンドおよびバックグラウンドでのデータ使用を引き続き抑えるようにする必要があります。
-
- </dd>
-</dl>
-
-<p>
- データセーバーが無効になっている場合や、アプリがホワイトリストに登録されている場合でも、端末が従量制課金ネットワークに接続されている場合は、データ使用量を抑えることをお勧めします。
-
-以下のサンプルコードでは、アプリで使用する必要があるデータ量を確認するために、{@link
- android.net.ConnectivityManager#isActiveNetworkMetered
- ConnectivityManager.isActiveNetworkMetered()} と {@code
- ConnectivityManager.getRestrictBackgroundStatus()} を使用しています。
-
-</p>
-
-<pre>
-ConnectivityManager connMgr = (ConnectivityManager)
- getSystemService(Context.CONNECTIVITY_SERVICE);
-// Checks if the device is on a metered network
-if (connMgr.isActiveNetworkMetered()) {
- // Checks user’s Data Saver settings.
- switch (connMgr.getRestrictBackgroundStatus()) {
- case RESTRICT_BACKGROUND_STATUS_ENABLED:
- // Background data usage is blocked for this app. Wherever possible,
- // the app should also use less data in the foreground.
-
- case RESTRICT_BACKGROUND_STATUS_WHITELISTED:
- // The app is whitelisted. Wherever possible,
- // the app should use less data in the foreground and background.
-
- case RESTRICT_BACKGROUND_STATUS_DISABLED:
- // Data Saver is disabled. Since the device is connected to a
- // metered network, the app should use less data wherever possible.
- }
-} else {
- // The device is not on a metered network.
- // Use data as required to perform syncs, downloads, and updates.
-}
-</pre>
-
-<h3 id="request-whitelist">
- ホワイトリスト パーミッションの要求
-</h3>
-
-<p>
- アプリがバックグラウンドでデータを使用する必要がある場合は、アプリのパッケージ名(例: <code>package:MY_APP_ID</code>)の URI を含む <code>Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS</code> インテントを送信することでホワイトリスト パーミッションをリクエストできます。
-
-
-
-
-</p>
-
-<p>
- インテントと URI を送信すると、[<strong>Settings</strong>] アプリが起動し、アプリのデータ使用量の設定が表示されます。
-ユーザーはアプリのバックグラウンドデータを有効にするかどうかを決めることができます。
-このインテントを送信する前に、バックグラウンドでのデータ使用を有効にするために [<strong>Settings</strong>] アプリを起動するかどうかを最初にユーザーに尋ねることをお勧めします。
-
-
-
-</p>
-
-<h2 id="monitor-changes">
- データセーバー設定の変更の監視
-</h2>
-
-<p>
- アプリでデータセーバー設定の変更を監視するには、{@link
- android.content.BroadcastReceiver} を作成して {@code
- ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED} をリッスンし、レシーバーを動的に {@link android.content.Context#registerReceiver
- Context.registerReceiver()} に登録します。
-このブロードキャストを受信したアプリは、{@code
- ConnectivityManager.getRestrictBackgroundStatus()} を呼び出して、<a href="#status">新しいデータセーバー設定がそのパーミッションに影響を及ぼすかどうか</a>を確認する必要があります。
-
-
-</p>
-
-<p class="note">
- <strong>注:</strong>このブロードキャストは、{@link
- android.content.Context#registerReceiver Context.registerReceiver()} を使用してブロードキャストに動的に登録するアプリにのみ送信されます。
-マニフェストにこのブロードキャストを受信するために登録するアプリはこれらを受信しません。
-
-
-</p>
-
-<h2 id="testing">
- Android Debug Bridge コマンドを使用したテスト
-</h2>
-
-<a href="{@docRoot}tools/help/adb.html">Android Debug Bridge(ADB)</a>には、ネットワーク パーミッションの確認と設定に使用できるコマンドがいくつか用意されています。
-
-
-
-<dl>
- <dt>
- <code>$ adb shell dumpsys netpolicy</code>
- </dt>
-
- <dd>
- 現在のバックグラウンド ネットワーク全体の制限設定、ホワイトリスト内の現在のパッケージ UID、その他の既知のパッケージのネットワーク パーミッションを含むレポートが生成されます。
-
-
- </dd>
-
- <dt>
- <code>$ adb shell cmd netpolicy</code>
- </dt>
-
- <dd>
- ネットワーク ポリシー マネージャ(netpolicy)のコマンドの一覧が表示されます。
- </dd>
-
- <dt>
- <code>$ adb shell cmd netpolicy set restrict-background
- <boolean></code>
- </dt>
-
- <dd>
- <code>true</code> または <code>false</code> をそれぞれ渡したときに、データセーバー モードを有効または無効にします。
-
- </dd>
-
- <dt>
- <code>$ adb shell cmd netpolicy add restrict-background-whitelist
- <UID></code>
- </dt>
-
- <dd>
- 指定されたパッケージ UID をホワイトリストに追加し、バックグラウンドで従量制課金接続を使用できるようにします。
-
- </dd>
-
- <dt>
- <code>$ adb shell cmd netpolicy remove restrict-background-whitelist
- <UID></code>
- </dt>
-
- <dd>
- 指定されたパッケージ UID をホワイトリストから削除し、データセーバーが有効な場合でもバックグラウンドで従量制課金接続を使用できないようにします。
-
- </dd>
-</dl>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ja/preview/features/direct-boot.jd b/docs/html-intl/intl/ja/preview/features/direct-boot.jd
deleted file mode 100644
index 933e682..0000000
--- a/docs/html-intl/intl/ja/preview/features/direct-boot.jd
+++ /dev/null
@@ -1,181 +0,0 @@
-page.title=ダイレクト ブート
-page.keywords=preview,sdk,direct boot
-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="#run">ダイレクト ブート中に実行するためのアクセスを要求する</a></li>
- <li><a href="#access">端末暗号化ストレージにアクセスする</a></li>
- <li><a href="#notification">ユーザーによる端末のロック解除の通知を受信する</a></li>
- <li><a href="#migrating">既存のデータを移行する</a></li>
- <li><a href="#testing">暗号化対応アプリをテストする</a></li>
- </ol>
-</div>
-</div>
-
-<p>Android N は、電源を入れたときにユーザーが端末のロックを解除していない場合、セキュリティで保護された <i>ダイレクト ブート</i> モードで実行します。
-
-この機能をサポートするため、システムで次の 2 つの保存先を使用できるようになります。</p>
-
-<ul>
-<li><i>認証情報暗号化ストレージ。</i>これはデフォルトの保存先で、ユーザーが端末のロックを解除した後にだけ使用できます。
-</li>
-<li><i>端末暗号化ストレージ。</i>この保存先は、ダイレクト ブート モード中とユーザーが端末のロックを解除した後の両方で使用できます。
-</li>
-</ul>
-
-<p>デフォルトで、ダイレクト ブート モード中はアプリは実行されません。ダイレクト ブート モード中にアプリで操作を実行する必要がある場合、このモードで実行するアプリ コンポーネントを登録できます。
-
-ダイレクト ブート モードでアプリの実行が必要になる一般的な使用例は次のとおりです。
-</p>
-
-<ul>
-<li>アラーム クロック アプリなど、通知がスケジュールされているアプリ。
-</li>
-<li>SMS アプリなど、重要なユーザー通知を表示するアプリ。</li>
-<li>Talkback など、ユーザー補助機能サービスを提供するアプリ。</li>
-</ul>
-
-<p>ダイレクト ブート モードで実行中にアプリがデータにアクセスする必要がある場合は、端末暗号化ストレージを使用します。
-端末暗号化ストレージにはキーで暗号化されたデータが保存され、端末がセキュアブートに成功した場合にのみこのデータを使用できます。
-
-</p>
-
-<p>ユーザーの認証情報に関連付けたキーで暗号化しなければならない PIN やパスワードなどのデータには、認証情報暗号化ストレージを使用します。認証情報暗号化ストレージは、ユーザーが端末のロック解除に成功した後に使用可能になり、ユーザーが端末を再起動するまでアクセスできます。
-
-
-ユーザーが端末をロック解除した後にロック画面を有効にしても、認証情報暗号化ストレージはロックされません。
-
-</p>
-
-<h2 id="run">ダイレクト ブート中に実行するためのアクセスを要求する</h2>
-
-<p>ダイレクト ブート モード中にアプリを実行したり、端末暗号化ストレージにアクセスしたりするには、アプリ コンポーネントの登録が必要です。
-
-アプリをシステムに登録するには、コンポーネントが
-<i>暗号化対応するように指定します。</i>コンポーネントが暗号化対応するよう指定するには、マニフェスト内で
-<code>android:directBootAware</code> 属性を true に設定します。<p>
-
-<p>暗号化対応コンポーネントを登録しておくと、端末を再起動したときにシステムから
-<code>LOCKED_BOOT_COMPLETED</code> ブロードキャスト メッセージを受信できます。
-この時点で端末暗号化ストレージが使用できるようになり、ダイレクト ブート モード中にコンポーネントが実行しなければならないタスクを実行できます。たとえば、スケジュールしたアラームのトリガーなどが該当します。
-
-</p>
-
-<p>次のコード スニペットは、アプリのマニフェスト内で
-{@link android.content.BroadcastReceiver} を暗号化対応として登録し、<code>LOCKED_BOOT_COMPLETED</code> のインテント フィルタを追加する方法の例を示しています。
-</p>
-
-<pre>
-<receiver
- android:directBootAware="true" >
- ...
- <intent-filter>
- <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
- </intent-filter>
-</receiver>
-</pre>
-
-<p>ユーザーが端末のロックを解除すると、すべてのコンポーネントは端末暗号化ストレージと認証情報暗号化ストレージの両方にアクセスできます。
-</p>
-
-<h2 id="access">端末暗号化ストレージにアクセスする</h2>
-
-<p>端末暗号化ストレージにアクセスするには、
-<code>Context.createDeviceProtectedStorageContext()</code> を呼び出して追加の
-{@link android.content.Context} インスタンスを作成します。このコンテキストで実行されたストレージ API 呼び出しはすべて、端末暗号化ストレージにアクセスします。
-次の例では、端末暗号化ストレージにアクセスして既存のアプリのデータ ファイルを開きます。
-
-</p>
-
-<pre>
-Context directBootContext = appContext.createDeviceProtectedStorageContext();
-// Access appDataFilename that lives in device encrypted storage
-FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
-// Use inStream to read content...
-</pre>
-
-<p>端末暗号化ストレージは、ダイレクト ブート モード中にアクセスが必要な情報のみに使用してください。汎用的な暗号化された保存先として、端末暗号化ストレージを使用することはできません。ユーザーの個人情報や、ダイレクト ブート モード中に特に必要ではない暗号化されたデータには、認証情報暗号化ストレージを使用してください。
-
-
-
-</p>
-
-<h2 id="notification">ユーザーによる端末のロック解除の通知を受信する</h2>
-
-<p>再起動後にユーザーが端末のロックを解除すると、アプリは認証情報暗号化ストレージへのアクセスに切り替えて、ユーザーの認証情報に応じて通常のシステム サービスを使用します。
-
-</p>
-
-<p>再起動後、ユーザーが端末のロックを解除したときに通知を受信するには、実行中のコンポーネントから {@link android.content.BroadcastReceiver} を登録して、<code>ACTION_USER_UNLOCKED</code> メッセージをリッスンするようにします。
-
-または、既存の {@link android.content.Intent#ACTION_BOOT_COMPLETED
-ACTION_BOOT_COMPLETED} メッセージを受信することもできます。このメッセージは、端末が起動してユーザーが端末のロックを解除したことを示すようになりました。
-
-</p>
-
-<p>
-<code>UserManager.isUserUnlocked()</code> を呼び出して、ユーザーが端末のロックを解除したかを直接問い合わせることもできます。</p>
-
-<h2 id="migrating">既存のデータを移行する</h2>
-
-<p>ユーザーが端末をアップデートしてダイレクト ブート モードを使用できるようになると、既存のデータを端末暗号化ストレージに移行しなければならない場合があります。
-
-<code>Context.moveSharedPreferencesFrom()</code> および
-<code>Context.moveDatabaseFrom()</code> を使用すると、設定およびデータベースのデータを認証情報暗号化ストレージと端末暗号化ストレージ間で移行できます。
-</p>
-
-<p>どのデータを認証情報暗号化ストレージから端末暗号化ストレージに移行するかは、慎重に判断してください。
-パスワードや承認トークンなどのユーザーの個人情報は、端末暗号化ストレージに移行しないでください。
-
-場合によっては、この 2 つの暗号化された保存先に、データセットを振り分けて管理する必要があります。
-</p>
-
-<h2 id="testing">暗号化対応アプリをテストする</h2>
-
-<p>新しいダイレクト ブート モードを使用して、暗号化対応アプリをテストしてみましょう。ダイレクト ブートを有効にする方法は 2 つあります。
-</p>
-
-<p class="caution"><strong>警告:</strong>ダイレクト ブートを有効にすると、端末上のすべてのユーザーデータが消去されます。
-</p>
-
-<p>Android N がインストールされたサポート対象端末では、次のいずれかの方法を使用してダイレクト ブートを有効にします。
-</p>
-
-<ul>
-<li>端末で、<b>[Developer options]</b> がまだ有効になっていない場合は、次の手順で有効にします。<b>[Settings] > [About phone]</b> で <b>[Build number]</b> を 7 回タップします。
-
-[Developer options] 画面が表示されたら、<b>[Settings] > [Developer options]</b> で <b>[Convert to file encryption]</b> を選択します。
-
-</li>
-<li>次の adb shell コマンドを使用して、ダイレクト ブート モードを有効にします。
-<pre class="no-pretty-print">
-$ adb reboot-bootloader
-$ fastboot --wipe-and-use-fbe
-</pre>
-</li>
-</ul>
-
-<p>テスト端末でモードの切り替えが必要な場合、エミュレーションされたダイレクト ブート モードも使用できます。
-データが失われるおそれがありますので、EMULATED モードは開発中にのみ使用してください。
-エミュレーションされたダイレクト ブート モードを有効にするには、端末でロック パターンを設定します。ロック パターンの設定時にセキュリティで保護されたスタートアップ画面について確認メッセージが表示された場合は、[No thanks] を選択します。次に、次の adb shell コマンドを使用します。
-
-
-</p>
-
-<pre class="no-pretty-print">
-$ adb shell sm set-emulate-fbe true
-</pre>
-
-<p>エミュレーションされたダイレクト ブート モードを無効にするには、次のコマンドを使用します。</p>
-
-<pre class="no-pretty-print">
-$ adb shell sm set-emulate-fbe false
-</pre>
-
-<p>これらのコマンドを使用すると、端末が再起動されます。</p>
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/multi-window.jd b/docs/html-intl/intl/ja/preview/features/multi-window.jd
deleted file mode 100644
index dba58be..0000000
--- a/docs/html-intl/intl/ja/preview/features/multi-window.jd
+++ /dev/null
@@ -1,589 +0,0 @@
-page.title=マルチ ウィンドウのサポート
-page.metaDescription=複数のアプリを同時に表示するための Android N の新しいサポート。
-page.keywords="multi-window", "android N", "split screen", "free-form"
-
-@jd:body
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>このドキュメントの内容</h2>
- <ol>
- <li><a href="#overview">概要</a></li>
- <li><a href="#lifecycle">マルチ ウィンドウ ライフサイクル</a></li>
- <li><a href="#configuring">マルチ ウィンドウ モード向けアプリを構成する</a>
-</li>
- <li><a href="#running">マルチ ウィンドウ モードでアプリを実行する</a></li>
- <li><a href="#testing">アプリのマルチ ウィンドウ サポートをテストする</a></li>
- </ol>
- <h2>関連ドキュメント</h2>
- <ol>
- <li><a class="external-link" href="https://github.com/googlesamples/android-MultiWindowPlayground">マルチ ウィンドウ Playground のサンプルアプリ</a>
-</li>
- <li><a class="external-link" href="https://medium.com/google-developers/5-tips-for-preparing-for-multi-window-in-android-n-7bed803dda64">Android N でマルチ ウィンドウを準備するための 5 つのヒント</a></li>
- </ol>
- </div>
-</div>
-
-<p>
- Android N には、複数のアプリを同時に表示するためのサポートが追加されています。
-ハンドヘルド端末で、分割画面モードにして、2 つのアプリを並べて実行したり、重ねて表示したりできます。<em></em>
-TV 端末で、アプリがピクチャ イン ピクチャ モードで動画を再生しているときに、ユーザーは別のアプリを操作できます。<em></em>
-
-
-</p>
-
-<p>
- N Preview SDK でアプリをビルドする場合、アプリがマルチ ウィンドウ ディスプレイを処理をする方法を設定できます。
-たとえば、アクティビティの最小許容ディメンションを指定できます。
-また、アプリに対してマルチ ウィンドウ ディスプレイを無効にし、アプリを全画面モードのみで表示することもできます。
-
-
-</p>
-
-<h2 id="overview">概要</h2>
-
-<p>
- Android N では、複数のアプリが画面を同時に共有できます。たとえば、ユーザーは画面を分割し、ウェブページを左側の画面に表示しながら、右側の画面でメールを作成することができます。
-
-ユーザー エクスペリエンスは端末によって異なります。
-
-</p>
-
-<ul>
- <li>Android N を実行しているハンドヘルド端末は、分割画面モードに対応しています。
-このモードでは、画面で 2 つのアプリが実行され、これらのアプリを並べて、または重ねて表示できます。
-ユーザーは、2 つのアプリを分離している分割線をドラッグして、1 つのアプリを拡大し、もう 1 つのアプリを縮小することができます。
-
- </li>
-
- <li>Android N を実行している Nexus Player で、アプリを<a href="picture-in-picture.html">ピクチャ イン ピクチャ モード</a>にすると、アプリにコンテンツを表示したまま、ユーザーは他のアプリをブラウジングまたは操作することができます。
-
-
-
- </li>
-
- <li>より大きい画面の端末のメーカーは、ユーザーが各アクティビティのサイズを自由に変更できるフリーフォーム モードを有効にすることもできます。
-メーカーがこの機能を有効にした場合、端末では、分割画面モードに加えて、フリーフォーム モードが利用できます。
-
-
- </li>
-</ul>
-
-<img src="{@docRoot}preview/images/mw-splitscreen.png" alt="" width="650" srcset="{@docRoot}preview/images/mw-splitscreen.png 1x,
- {@docRoot}preview/images/mw-splitscreen_2x.png 2x," id="img-split-screen" />
-<p class="img-caption">
- <strong>図 1.</strong> 分割画面モードで並べて実行されている 2 つのアプリ。
-</p>
-
-<p>
- ユーザーは、次の方法でマルチ ウィンドウ モードに切り替えることができます。
-</p>
-
-<ul>
- <li>ユーザーは <a href="{@docRoot}guide/components/recents.html">[Overview] 画面</a>を開いているときに、アクティビティのタイトルを長押ししてから、そのアクティビティを画面の強調表示された部分にドラッグすることにより、アクティビティをマルチ ウィンドウ モードにすることができます。
-
-
-
- </li>
-
- <li>ユーザーが [Overview] ボタンを長押しすると、現在のアクティビティがマルチ ウィンドウ モードになり、[Overview] 画面が開くので、ユーザーは、画面で共有する別のアクティビティを選択できるようになります。
-
-
- </li>
-</ul>
-
-<p>
- ユーザーは、複数のアクティビティが画面を共有しているときに、データを 1 つのアクティビティから別のアクティビティに<a href="{@docRoot}guide/topics/ui/drag-drop.html">ドラッグ&ドロップ</a>できます
-
-(以前は、単一のアクティビティ内でのみデータをドラッグ&ドロップできました)。
-
-</p>
-
-<h2 id="lifecycle">マルチ ウィンドウ ライフサイクル</h2>
-
-<p>
- マルチ ウィンドウ モードは、<a href="{@docRoot}training/basics/activity-lifecycle/index.html">アクティビティのライフサイクル</a>を変更しません。
-
-</p>
-
-<p>
- マルチ ウィンドウ モードでは、ユーザーが直前に操作したアクティビティのみが任意の時点でアクティブになります。
-このアクティビティは、トップ レベルにあると見なされます。<em></em>
- 他のすべてのアクティビティは、表示されていても一時停止状態になっています。
- ただし、一時停止状態ではあるが、表示されているこれらのアクティビティには、表示されていないアクティビティよりも高い優先度が付与されます。
-ユーザーが一時停止状態のアクティビティのいずれかを操作した場合、そのアクティビティが再開され、前のトップ レベルのアクティビティが一時停止します。
-
-
-</p>
-
-<p class="note">
- <strong>注:</strong>マルチ ウィンドウ モードでは、アプリが一時停止状態になっても、そのアプリを表示したままにすることができます。
-アプリは、一時停止していても、アクティビティを続行する必用がある場合があります。
-たとえば、一時停止モードになっているが、表示されている動画再生アプリは、動画の表示を継続する必要があります。
-そのため、動画を再生するアクティビティが {@link android.app.Activity#onPause onPause()} ハンドラで動画を一時停止しないようにすることをお勧めします。
-
-<em></em>
- その代わり、これらのアクティビティは {@link android.app.Activity#onStop
- onStop()} で動画を一時停止し、{@link android.app.Activity#onStart
- onStart()} で動画の再生を再開する必要があります。
-</p>
-
-<p>
- <a href="{@docRoot}guide/topics/resources/runtime-changes.html">実行時の変更の処理</a>で指定したように、ユーザーがアプリをマルチ ウィンドウ モードにすると、アクティビティに構成の変更が通知されます。
-
-これは、ユーザーがアプリのサイズを変更するか、アプリを全画面モードに戻した場合にも行われます。
-
- 基本的に、この構成の変更は、端末が縦表示から横表示に切り替えられたことをアプリに通知する場合と同じ影響(端末のディメンションが変更された場合を除いて)をアクティビティのライフサイクルに及ぼします。
-
-
-<a href="{@docRoot}guide/topics/resources/runtime-changes.html">実行時の変更の処理</a>で説明したように、アクティビティは構成の変更を処理することができます。または、システムによってアクティビティを破棄し、新しいディメンションでアクティビティを再作成することもできます。
-
-
-
-</p>
-
-<p>
- ユーザーがウィンドウのサイズを変更して、高さや幅を拡大した場合、ユーザー操作に一致するようにアクティビティのサイズが変更され、必要に応じて、<a href="{@docRoot}guide/topics/resources/runtime-changes.html">実行時の変更</a>が発行されます。
-
-アプリで新しく表示された領域を描画するまでに時間がかかる場合、{@link
- android.R.attr#windowBackground windowBackground} 属性またはデフォルトの
-<code>windowBackgroundFallback</code> システム属性によって指定された色でこれらの領域が一時的に塗りつぶされます。
-
-</p>
-
-<h2 id="configuring">マルチ ウィンドウ モード向けアプリを構成する</h2>
-
-<p>
- アプリが Android N をターゲットにしている場合は、アプリのアクティビティがマルチ ウィンドウ ディスプレイをサポートする方法や、このサポートを行うかどうかを決めることができます。
-サイズとレイアウトを制御するための属性をマニフェストに設定できます。
-
- ルート アクティビティ属性の設定は、タスクスタック内のすべてのアクティビティに適用されます。
-たとえば、ルート アクティビティにより
-<code>android:resizeableActivity</code> が true に設定されると、タスク スタック内のすべてのアクティビティのサイズを変更できるようになります。
-
-</p>
-
-<p class="note">
- <strong>注:</strong>Android N より前の SDK バージョンでマルチ オリエンテーション アプリをビルドして、そのアプリをマルチ ウィンドウ モードで使用する場合は、アプリのサイズが強制的に変更されます。
-
-アプリに予想外の動作が発生する場合があることをユーザーに警告するダイアログ ボックスが表示されます。
-システムは、画面の向きが固定されたアプリのサイズを変更しません。ユーザーがマルチ ウィンドウ モードで画面の向きが固定されたアプリを開こうとすると、そのアプリが全画面で表示されます。<em></em>
-
-
-
-</p>
-
-<h4 id="resizeableActivity">android:resizeableActivity</h4>
-<p>
- マルチ ウィンドウ ディスプレイを有効または無効にするには、この属性をマニフェストの <code><activity></code> ノードまたは
-<code><application></code> ノードに設定します。
-
-</p>
-
-<pre>
-android:resizeableActivity=["true" | "false"]
-</pre>
-
-<p>
- この属性が true に設定されている場合、アクティビティを分割画面モードまたはフリーフォーム モードで起動できます。
-この属性が false に設定されている場合、アクティビティはマルチ ウィンドウ モードをサポートしません。
-この値が false のとき、ユーザーがアクティビティをマルチ ウィンドウ モードで起動しようとすると、アクティビティが全画面で表示されます。
-
-
-</p>
-
-<p>
- アプリが Android N をターゲットにしているが、この属性の値が指定されていない場合、属性の値がデフォルトの true になります。
-
-</p>
-
-<h4 id="supportsPictureInPicture">android:supportsPictureInPicture</h4>
-
-<p>
- この属性をマニフェストの <code><activity></code> ノードに設定すると、アクティビティがピクチャ イン ピクチャ ディスプレイをサポートするかどうかを示すことができます。
-<code>android:resizeableActivity</code> が false の場合、この属性は無視されます。
-
-</p>
-
-<pre>
-android:supportsPictureInPicture=["true" | "false"]
-</pre>
-
-<h3 id="layout">レイアウト属性</h3>
-
-<p>
- Android N では、<code><layout></code> マニフェスト要素により、マルチ ウィンドウ モードでのアクティビティの動作に影響を及ぼすいくつかの属性がサポートされています。
-
-
-</p>
-
-<dl>
- <dt>
- <code>android:defaultWidth</code>
- </dt>
-
- <dd>
- フリーフォーム モードで起動されたときのアクティビティのデフォルトの幅です。
- </dd>
-
- <dt>
- <code>android:defaultHeight</code>
- </dt>
-
- <dd>
- フリーフォーム モードで起動されたときのアクティビティのデフォルトの高さです。
- </dd>
-
- <dt>
- <code>android:gravity</code>
- </dt>
-
- <dd>
- フリーフォーム モードで起動されたときのアクティビティの初期配置です。適切な値については、
-{@link android.view.Gravity} のリファレンスをご覧ください。
- </dd>
-
- <dt>
- <code>android:minimalHeight</code>、<code>android:minimalWidth</code>
- </dt>
-
- <dd>
- 分割画面モードおよびフリーフォーム モードでのアクティビティの最小の高さと幅です。
-ユーザーが分割画面モードの分割線を移動して、アクティビティを指定された最小ディメンションよりも小さくすると、アクティビティはユーザーがリクエストしたサイズにトリミングされます。
-
-
- </dd>
-</dl>
-
-<p>
- たとえば、次のコードは、アクティビティがフリーフォーム モードで表示されているときに、アクティビティのデフォルトのサイズと位置、およびその最小サイズを指定する方法を示しています。
-
-
-</p>
-
-<pre>
-<activity android:name=".MyActivity">
- <layout android:defaultHeight="500dp"
- android:defaultWidth="600dp"
- android:gravity="top|end"
- android:minimalHeight="450dp"
- android:minimalWidth="300dp" />
-</activity>
-</pre>
-
-<h2 id="running">マルチ ウィンドウ モードでアプリを実行する</h2>
-
-<p>
- Android N では、マルチ ウィンドウ モードで実行できるアプリをサポートするための新しい機能が導入されています。
-
-</p>
-
-<h3 id="disabled-features">マルチ ウィンドウ モードで無効になる機能</h3>
-
-<p>
- 端末がマルチ ウィンドウ モードになっている場合、特定の機能は、端末の画面を他のアクティビティやアプリと共有する場合があるアクティビティに対して機能しないため、これらの機能は無効なるか、無視されます。
-
-これらの機能には、次のものが含まれます。
-
-<ul>
- <li><a href="{@docRoot}training/system-ui/index.html">システム UI</a> の一部のカスタマイズ オプションは無効になります。たとえば、アプリが全画面モードで実行されていない場合、アプリのステータスバーを非表示にできません。
-
-
- </li>
-
- <li>システムは、<code><a href=
- "{@docRoot}guide/topics/manifest/activity-element.html#screen"
- >android:screenOrientation</a></code> 属性に加えられた変更を無視します。
- </li>
-</ul>
-
-<h3 id="change-notification">マルチ ウィンドウの変更通知とクエリ</h3>
-
-<p>
- マルチ ウィンドウ ディスプレイをサポートするために、次の新しいメソッドが {@link android.app.Activity} クラスに追加されています。
-各メソッドの詳細については、<a href="{@docRoot}preview/setup-sdk.html#docs-dl">N Preview SDK リファレンス</a>をご覧ください。
-
-
-</p>
-
-<dl>
- <dt>
- <code>Activity.isInMultiWindowMode()</code>
- </dt>
-
- <dd>
- アクティビティがマルチ ウィンドウ モードで実行されているかどうかを判別するために呼び出します。
- </dd>
-
- <dt>
- <code>Activity.isInPictureInPictureMode()</code>
- </dt>
-
- <dd>
- アクティビティがピクチャ イン ピクチャ モードで実行されているかどうかを判別するために呼び出します。
-
- <p class="note">
- <strong>注:</strong>ピクチャ イン ピクチャ モードは、マルチ ウィンドウ モードの特別な形態です。
-<code>myActivity.isInPictureInPictureMode()</code> が true を返す場合は、<code>myActivity.isInMultiWindowMode()</code> も true を返します。
-
-
- </p>
- </dd>
-
- <dt>
- <code>Activity.onMultiWindowModeChanged()</code>
- </dt>
-
- <dd>
- アクティビティがマルチ ウィンドウ モードになるか、マルチ ウィンドウ モードではなくなると、常にこのメソッドが呼び出されます。
-アクティビティがマルチ ウィンドウ モードになると、このメソッドに true 値が渡され、アクティビティがマルチ ウィンドウ モードではなくなると、このメソッドに false 値が渡されます。
-
-
- </dd>
-
- <dt>
- <code>Activity.onPictureInPictureModeChanged()</code>
- </dt>
-
- <dd>
- アクティビティがピクチャ イン ピクチャ モードになるか、ピクチャ イン ピクチャ モードではなくなると、常にこのメソッドが呼び出されます。
-アクティビティがピクチャ イン ピクチャ モードになると、このメソッドに true 値が渡され、アクティビティがピクチャ イン ピクチャ モードではなくなると、このメソッドに false 値が渡されます。
-
-
- </dd>
-</dl>
-
-<p>
- また、これらの各メソッドの {@link android.app.Fragment} バージョンがあります。たとえば、<code>Fragment.isInMultiWindowMode()</code> です。
-
-</p>
-
-<h3 id="entering-pip">ピクチャ イン ピクチャ モードにする</h3>
-
-<p>
- アクティビティをピクチャ イン ピクチャ モードにするには、新しいメソッド
-<code>Activity.enterPictureInPictureMode()</code> を呼び出します。端末がピクチャ イン ピクチャ モードをサポートしない場合、このメソッドの効果はありません。
-詳細については、<a href="picture-in-picture.html">ピクチャ イン ピクチャ</a>に関するドキュメントをご覧ください。
-
-</p>
-
-<h3 id="launch">マルチ ウィンドウ モードで新しいアクティビティを起動する</h3>
-
-<p>
- 新しいアクティビティを起動するときに、可能であれば、新しいアクティビティを現在のアクティビティの隣に表示する必用があるかどうかをシステムに示すことができます。
-そうするには、フラグ
-<code>Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT</code> を使用します。
-このフラグを渡すと、次の動作がリクエストされます。
-
-</p>
-
-<ul>
- <li>端末が分割画面モードになっている場合、システムは、起動しているアクティビティの隣に新しいアクティビティを作成しようとするので、これらの 2 つのアクティビティが画面を共有します。
-
-システムでは、この操作の実行が保証されるわけではありませんが、可能であれば、アクティビティが並べて表示されます。
-
- </li>
-
- <li>端末が分割画面モードではない場合、このフラグの効果はありません。
- </li>
-</ul>
-
-<p>
- 端末がフリーフォーム モードになっている場合、新しいアクティビティを起動するときに、
-<code>ActivityOptions.setLaunchBounds()</code> を呼び出すことにより、新しいアクティビティのディメンションと画面上での位置を指定することができます。
-端末がマルチ ウィンドウ モードではない場合、このメソッドの効果はありません。
-
-</p>
-
-<p class="note">
- <strong>注:</strong>タスクスタック内でアクティビティを起動すると、画面上のアクティビティが起動したアクティビティに置き換えられ、すべてのマルチ ウィンドウ プロパティが継承されます。
-
-マルチ ウィンドウ モードで新しいアクティビティを別個の画面として起動する場合は、新しいアクティビティを新しいタスクスタックで起動する必要があります。
-
-</p>
-
-<h3 id="dnd">ドラッグ&ドロップのサポート</h3>
-
-<p>
- ユーザーは、2 つのアクティビティが画面を共有しているときに、データを 1 つのアクティビティから別のアクティビティに<a href="{@docRoot}guide/topics/ui/drag-drop.html">ドラッグ&ドロップ</a>できます
-
-(以前は、単一のアクティビティ内でのみデータをドラッグ&ドロップできました)。
-そのため、アプリがドラッグ&ドロップをサポートしていない場合は、ドラッグ&ドロップ機能をアプリに追加する必要があります。
-
-</p>
-
-<p>
- N Preview SDK では、異なるアプリ間のドラッグ&ドロップをサポートするために、<a href="{@docRoot}reference/android/view/package-summary.html"><code>android.view</code></a> パッケージが拡張されています。
-次のクラスとメソッドの詳細については、<a href="{@docRoot}preview/setup-sdk.html#docs-dl">N Preview SDK リファレンス</a>をご覧ください。
-
-
-</p>
-
-<dl>
- <dt>
- <code>android.view.DropPermissions</code>
- </dt>
-
- <dd>
- ドロップを受け取るアプリに付与されるパーミッションの指定を処理するトークン オブジェクトです。
-
- </dd>
-
- <dt>
- <code>View.startDragAndDrop()</code>
- </dt>
-
- <dd>
- {@link android.view.View#startDrag View.startDrag()} の新しいエイリアスです。異なるアクティビティ間のドラッグ&ドロップを有効にするには、新しいフラグ
-<code>View.DRAG_FLAG_GLOBAL</code> を渡します。
-URI パーミッションを受け取る側のアクティビティに付与する必要がある場合、必要に応じて、新しいフラグ
-<code>View.DRAG_FLAG_GLOBAL_URI_READ</code> または
-<code>View.DRAG_FLAG_GLOBAL_URI_WRITE</code> を渡します。
-
- </dd>
-
- <dt>
- <code>View.cancelDragAndDrop()</code>
- </dt>
-
- <dd>
- 実行中のドラッグ操作をキャンセルします。ドラッグ操作を開始したアプリだけが呼び出せます。
-
- </dd>
-
- <dt>
- <code>View.updateDragShadow()</code>
- </dt>
-
- <dd>
- 実行中のドラッグ操作のドラッグ シャドウを置き換えます。ドラッグ操作を開始したアプリだけが呼び出せます。
-
- </dd>
-
- <dt>
- <code>Activity.requestDropPermissions()</code>
- </dt>
-
- <dd>
- {@link android.view.DragEvent} に含まれる {@link
- android.content.ClipData} で渡されるコンテンツ URI のパーミッションをリクエストします。
- </dd>
-</dl>
-
-<h2 id="testing">アプリのマルチ ウィンドウ サポートをテストする</h2>
-
-<p>
- ユーザーが Android N を実行している端末をマルチ ウィンドウ モードにしてアプリの起動を試みる場合に備えて、Android N 向けにアプリをアップデートするかどうかに関係なく、アプリがマルチ ウィンドウ モードでどのように動作するかを確認する必要があります。
-
-
-</p>
-
-<h3 id="configuring">テスト端末の構成</h3>
-
-<p>
- Android N を端末にインストールすると、分割画面モードが自動的にサポートされます。
-
-</p>
-
-<h3 id="test-non-n">アプリが N Preview SDK でビルドされていない場合</h3>
-
-<p>
- アプリが N Preview SDK でビルドされていないときに、ユーザーがマルチ ウィンドウ モードでそのアプリを使用しようとすると、アプリが画面の向きの固定を宣言しない限り、アプリのサイズが強制的に変更されます。
-
-
-</p>
-
-<p>
- アプリが画面の向きの固定を宣言しない場合、Android N を実行している端末でアプリを起動し、アプリを分割画面モードにすることを試みる必要があります。
-
-アプリのサイズが強制的に変更されたときに、ユーザー エクスペリエンスが許容範囲内にあることを確認してください。
-
-</p>
-
-<p>
- アプリが画面の向きの固定を宣言する場合、アプリをマルチ ウィンドウ モードにすることを試みる必要があります。
-アプリをマルチ ウィンドウ モードにすることを試みたとき、アプリが全画面モードのままであることを確認してください。
-
-</p>
-
-<h3 id="test-mw">マルチ ウィンドウ モードをサポートする場合</h3>
-
-<p>
- アプリが N Preview SDK でビルドされていて、マルチ ウィンドウ モードが無効になっていない場合、分割画面モードとフリーフォーム モードの両方で次の動作を確認してください。
-
-
-</p>
-
-<ul>
- <li>アプリを全画面モードで起動してから、[Overview] ボタンを長押しして、マルチ ウィンドウ モードに切り替えます。
-モードが適切に切り替わることを確認します。
- </li>
-
- <li>アプリをマルチ ウィンドウ モードで直接起動し、アプリが適切に起動することを確認します。
-[Overview] ボタンを押すと、アプリをマルチ ウィンドウ モードで起動できます。次に、アプリのタイトルバーを長押しし、アプリを画面上の強調表示された領域のいずれかにドラッグします。
-
-
- </li>
-
- <li>分割画面モードで分割線をドラッグして、アプリのサイズを変更します。
- アプリがクラッシュせずに、アプリのサイズが変更され、必要な UI 要素が表示されることを確認します。
-
- </li>
-
- <li>アプリの最小ディメンションを指定している場合、アプリのサイズをそれらのディメンション以下にすることを試みてください。
-アプリのサイズを指定最小ディメンションよりも小さくできないことを確認してください。
-
- </li>
-
- <li>すべてのテストを通じて、アプリのパフォーマンスが許容範囲内にあることを確認してください。たとえば、アプリのサイズを変更した後、UI の更新に大きな遅延がないことを確認してください。
-
-
- </li>
-</ul>
-
-<h4 id="test-checklist">チェックリストのテスト</h4>
-
-<p>
- アプリのパフォーマンスをマルチ ウィンドウ モードで確認するには、以下の操作を試みてください。
-特に記載のない限り、分割画面モードとマルチ ウィンドウ モードの両方でこれらの操作を試みる必要があります。
-
-</p>
-
-<ul>
- <li>マルチ ウィンドウ モードを有効にしてから無効にします。
- </li>
-
- <li>1 つのアプリから別のアプリに切り替えたとき、最初のアプリの動作が適切であり、表示されているが、アクティブになっていないことを確認します。
-たとえば、アプリが動画を再生している場合、ユーザーが別のアプリを操作しているときに、アプリで動画の再生が継続していることを確認します。
-
-
- </li>
-
- <li>分割画面モードで分割線を移動して、アプリの拡大および縮小を試みてください。
-アプリを並べて表示しているときと重ねて表示しているときの両方でこれらの操作を試みてください。
-アプリがクラッシュせず、基本的な機能が表示され、サイズ変更の操作に時間がかかり過ぎないことを確認します。
-
-
- </li>
-
- <li>続けざまにサイズ変更の操作を行います。アプリがクラッシュしたり、メモリリークが発生したりしないことを確認します。
-アプリのメモリリークをチェックする方法の詳細については、<a href="{@docRoot}tools/debugging/debugging-memory.html">RAM の使用状況を調査する</a>をご覧ください。
-
-
- </li>
-
- <li>さまざまなウィンドウ構成でアプリを通常の方法で使用し、アプリが適切に動作することを確認します。
-テキストが読み取り可能であり、UI 要素が操作に支障をきたすほど小さくないことを確認します。
-
- </li>
-</ul>
-
-<h3 id="test-disabled-mw">マルチ ウィンドウのサポートを無効にしている場合</h3>
-
-<p>
-
-<code>android:resizableActivity="false"</code> を設定して、マルチ ウィンドウのサポートを無効にした場合は、Android N を実行している端末でアプリを起動し、アプリをフリーフォーム モードおよび分割画面モードにすることを試みる必要があります。
-
-アプリをマルチ ウィンドウ モードにすることを試みたとき、アプリが全画面モードのままであることを確認してください。
-
-</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/ja/preview/features/picture-in-picture.jd b/docs/html-intl/intl/ja/preview/features/picture-in-picture.jd
deleted file mode 100644
index 0bb4a75..0000000
--- a/docs/html-intl/intl/ja/preview/features/picture-in-picture.jd
+++ /dev/null
@@ -1,213 +0,0 @@
-page.title=ピクチャ イン ピクチャ
-page.keywords=preview,sdk,PIP,Picture-in-picture
-page.tags=androidn
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>このドキュメントの内容</h2>
-<ol>
- <li><a href="#declaring">アクティビティがピクチャ イン ピクチャをサポートしていることを宣言する
-</a></li>
- <li><a href="#pip_button">アクティビティをピクチャ イン ピクチャに切り替える</a>
-</li>
- <li><a href="#handling_ui">ピクチャ イン ピクチャの実行中に UI を処理する</a>
-</li>
- <li><a href="#continuing_playback">ピクチャ イン ピクチャの実行中に動画の再生を続行する
-</a></li>
- <li><a href="#single_playback">ピクチャ イン ピクチャで単一の再生アクティビティを使用する
-</a></li>
- <li><a href="#best">ベスト プラクティス</a></li>
-</ol>
-
-<h2>関連ドキュメント</h2>
-<ol>
- <li><a href="{@docRoot}preview/features/multi-window.html">マルチ ウィンドウのサポート
-</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>Android N では、Android TV ユーザーは、アプリを操作するときに画面の隅に固定されたウィンドウで動画を視聴できるようになりました。
-
-ピクチャ イン ピクチャ(PIP)モードを使用すると、アプリはバックグランドで別のアクティビティを続けながら、固定されたウィンドウで動画アクティビティを実行できるようになります。
-
-PIP ウィンドウでは、アプリの使用中にマルチタスクを実行できます。これにより、ユーザーの作業効率が向上します。
-</p>
-
-<p>アプリで、PIP モードをトリガーするタイミングを決めることができます。次に、PIP モードの開始時点の例を示します。
-</p>
-
-<ul>
-<li>ユーザーが別のコンテンツをブラウジングするために動画から別のコンテンツに切り替えると、アプリは動画を PIP モードに切り替えることができます。
-</li>
-<li>コンテンツのエピソード終了の画面が表示されている間、アプリは動画を PIP モードに切り替えることができます。
-メイン画面には、シリーズの次のエピソードに関するプロモーションや概要の情報が表示されます。
-</li>
-<li>アプリで、ユーザーが動画を視聴している間に、追加のコンテンツのキューを作成する方法を提供できます。
-メイン画面でコンテンツの選択アクティビティを表示している間に、動画は PIP モードで再生を続行できます。
-</li>
-</ul>
-
-<p>PIP ウィンドウは 240 x 135 dp で、画面の 4 つのコーナーのうちいずれかの一番上のレイヤに表示されます。表示する場所はシステムによって選択されます。
-ユーザーは PIP メニューを表示して、PIP ウィンドウを全画面表示に切り替えたり、リモコンの [<b>Home</b>] ボタンを押して PIP ウィンドウを閉じたりすることができます。
-
-別の動画がメイン画面で再生を開始すると、PIP ウィンドウは自動的に閉じます。
-
-最近使ったアプリから PIP ウィンドウを閉じることもできます。</p>
-
-<img src="{@docRoot}preview/images/pip-active.png" />
-<p class="img-caption"><strong>図 1.</strong> ユーザーがメイン画面でコンテンツを閲覧中に画面の隅に表示されるピクチャ イン ピクチャの動画
-
-</p>
-
-<p>PIP では、Android N で使用可能なマルチウィンドウ API を活用し、固定された動画オーバーレイ ウィンドウを表示します。
-PIP をアプリに追加するには、PIP をサポートするアクティビティを登録し、必要に応じてアクティビティを PIP モードに切り替えて、UI 要素を非表示にして、アクティビティが PIP モードを開始しても動画の再生が続行されるようにします。
-
-
-</p>
-
-<h2 id="declaring">アクティビティがピクチャ イン ピクチャをサポートしていることを宣言する</h2>
-
-<p>デフォルトでは、システムはアプリの PIP を自動的にサポートしません。アプリで PIP をサポートする場合、マニフェストで
-<code>android:supportsPictureInPicture</code> および
-<code>android:resizeableActivity</code> を <code>true</code> に設定して、動画アクティビティを登録します。
-
-また、アクティビティがレイアウトの設定変更を処理するように指定して、PIP モードの遷移中にレイアウト変更が発生しても、アクティビティが再開しないようにします。
-
-</p>
-
-<pre>
-<activity android:name="VideoActivity"
- android:resizeableActivity="true"
- android:supportsPictureInPicture="true"
- android:configChanges=
- "screenSize|smallestScreenSize|screenLayout|orientation"
- ...
-</pre>
-
-<p>アクティビティを登録する際は、PIP モードでは、アクティビティが TV 画面の小さなオーバーレイ ウィンドウに表示される点に注意してください。
-動画の再生アクティビティは、最小限の UI にすることで最高のユーザー エクスペリエンスを提供できます。
-小さな UI 要素を含むアクティビティでは、PIP モードに切り替えたときに優れたユーザー エクスペリエンスを提供できない可能性があります。PIP ウィンドウでは、その UI 要素の詳細が見えづらくなるためです。
-
-
-</p>
-
-<h2 id="pip_button">アクティビティをピクチャ イン ピクチャに切り替える</h2>
-
-アクティビティを PIP モードに切り替える必要があるときは、
-<code>Activity.enterPictureInPictureMode()</code> を呼び出します。次の例では、ユーザーがメディア コントロール バーにある専用の PIP ボタンを選択したときに、PIP モードに切り替わります。
-
-</p>
-
-<pre>
-@Override
-public void onActionClicked(Action action) {
- if (action.getId() == R.id.lb_control_picture_in_picture) {
- getActivity().enterPictureInPictureMode();
- return;
- }
- ...
-</pre>
-
-<p>メディア コントロール バーに PIP ボタンを追加すると、ユーザーが動画の再生を操作中に、簡単に PIP モードに切り替えることができます。
-</p>
-
-<img src="{@docRoot}preview/images/pip-button.png" />
-<p class="img-caption"><strong>図 1.</strong> メディア コントロール バー上の [Picture-in-picture] ボタン
-</p>
-
-<p>Android N には、新しい
-<code>PlaybackControlsRow.PictureInPictureAction</code> クラスが含まれています。このクラスは、コントロール バーの PIP アクションと PIP アイコンの使用方法を定義します。
-</p>
-
-<h2 id="handling_ui">ピクチャ イン ピクチャの実行中に UI を処理する</h2>
-
-<p>アクティビティが PIP モードを開始したら、動画の再生のみを表示する必要があります。
-アクティビティが PIP を開始する前に UI 要素を削除して、再び全画面表示に戻ったら、削除した要素を復元します。<code>Activity.onPictureInPictureModeChanged()</code> または
-<code>Fragment.onPictureInPictureModeChanged()</code> をオーバーライドして、必要に応じて UI 要素を有効または無効にします。次に例を示します。
-
-
-</p>
-
-<pre>
-@Override
-public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
- if (isInPictureInPictureMode) {
- // Hide the controls in picture-in-picture mode.
- ...
- } else {
- // Restore the playback UI based on the playback status.
- ...
- }
-}
-</pre>
-
-<h2 id="continuing_playback">ピクチャ イン ピクチャの実行中に動画の再生を続行する
-</h2>
-
-<p>アクティビティを PIP に切り替えると、システムはそのアクティビティを一時停止状態と見なして、アクティビティの <code>onPause()</code> メソッドを呼び出します。
-PIP モードによってアクティビティが一時停止になっても、動画の再生は一時停止せず、再生を続ける必要があります。
-
-アクティビティの
-<code>onPause()</code> メソッドで PIP を確認し、適切に再生を処理してください。次に例を示します。
-</p>
-
-<pre>
-@Override
-public void onPause() {
- // If called while in PIP mode, do not pause playback
- if (isInPictureInPictureMode()) {
- // Continue playback
- ...
- }
- // If paused but not in PIP, pause playback if necessary
- ...
-}
-</pre>
-
-<p>アクティビティが PIP モードを終了して全画面モードに戻ると、システムはアクティビティを再開して <code>onResume()</code> メソッドを呼び出します。
-</p>
-
-<h2 id="single_playback">ピクチャ イン ピクチャで単一の再生アクティビティを使用する
-</h2>
-
-<p>動画再生アクティビティが PIP モードのときに、ユーザーがアプリのメイン画面でコンテンツをブラウズ中に新しい動画を選択することがあります。
-全画面モードの既存の再生アクティビティで新しい動画を再生します。新しいアクティビティを起動するとユーザーが混乱する可能性があります。
-
-</p>
-
-<p>動画再生リクエストに対して単一のアクティビティが使用されるようにし、必要に応じて PIP モードの切り替えが行われるようにするには、マニフェストでアクティビティの
-<code>android:launchMode</code> を <code>singleTask</code> に設定します。
-
-</p>
-
-<pre>
-<activity android:name="VideoActivity"
- ...
- android:supportsPictureInPicture="true"
- android:launchMode="singleTask"
- ...
-</pre>
-
-<p>アクティビティで、{@link android.app.Activity#onNewIntent
-Activity.onNewIntent()} をオーバーライドして新しい動画を処理し、既存の動画再生を必要に応じて停止します。
-</p>
-
-<h2 id="best">ベスト プラクティス</h2>
-
-<p>PIP は、動画を全画面表示で再生するアクティビティに使用します。アクティビティを PIP モードに切り替えるときは、動画コンテンツ以外は何も表示しないでください。アクティビティが PIP モードを開始したタイミングを検出し、<a href="#handling_ui">ピクチャ イン ピクチャの実行中に UI を処理する</a>で説明したように、UI 要素を非表示にします。
-
-
-</p>
-
-<p>PIP ウィンドウは画面の隅にフローティング ウィンドウとして表示されるため、メイン画面のどの場所にも重要な情報を表示しないでください。PIP ウィンドウによって隠れる可能性があります。
-
-</p>
-
-<p>アクティビティが PIP モードになると、デフォルトで、入力フォーカスは失われます。PIP モードで動作中に入力イベントを受け付けるには、
-<code>MediaSession.setMediaButtonReceiver()</code> を使用します。
-</p>
diff --git a/docs/html-intl/intl/ja/preview/features/scoped-folder-access.jd b/docs/html-intl/intl/ja/preview/features/scoped-folder-access.jd
deleted file mode 100644
index e4f9ae2..0000000
--- a/docs/html-intl/intl/ja/preview/features/scoped-folder-access.jd
+++ /dev/null
@@ -1,148 +0,0 @@
-page.title=特定のディレクトリへのアクセス
-page.keywords=preview,sdk,scoped directory access
-page.tags=androidn
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>このドキュメントの内容</h2>
- <ol>
- <li><a href="#accessing">外部ストレージのディレクトリへのアクセス</a></li>
- <li><a href="#removable">リムーバブル メディアのディレクトリへのアクセス</a></li>
- <li><a href="#best">ベスト プラクティス</a></li>
- </ol>
-</div>
-</div>
-
-<p>写真アプリなどは通常、外部ストレージの特定のディレクトリ(<code>Pictures</code> ディレクトリなど)のみにアクセスする必要があります。
-外部ストレージへのアクセスに関する従来のアプローチでは、このようなアプリに目的のディレクトリへのアクセスを容易に提供できる設計にはなっていませんでした。
-
-次に例を示します。</p>
-
-<ul>
-<li>マニフェストで {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} または {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} を要求すると、外部ストレージ上のすべての公開ディレクトリにアクセスできますが、この場合、アプリが必要な場所以外にもアクセスできることになります。
-
-
-</li>
-<li><a href="{@docRoot}guide/topics/providers/document-provider.html">ストレージ アクセス フレームワーク</a>を使用すると、通常、ユーザーはシステム UI を使用してディレクトリを選択できますが、アプリが常に同じ外部ディレクトリにアクセスする場合、この選択は不要です。
-
-
-
-</li>
-</ul>
-
-<p>Android N では、一般的な外部ストレージ ディレクトリにアクセスできる、新しいシンプルな API を提供します。
- </p>
-
-<h2 id="accessing">外部ストレージのディレクトリへのアクセス</h2>
-
-<p><code>StorageManager</code> クラスを使用して、適切な
-<code>StorageVolume</code> インスタンスを取得します。次に、そのインスタンスの
-<code>StorageVolume.createAccessIntent()</code> メソッドを呼び出して、インテントを作成します。このインテントを使用して、外部ストレージのディレクトリにアクセスします。
-リムーバブル メディア ボリュームなど、使用できるすべてのボリュームのリストを取得するには、<code>StorageManager.getVolumesList()</code> を使用します。
-
-</p>
-
-<p>特定のファイルに関する情報がある場合は、
-<code>StorageManager.getStorageVolume(File)</code> を使用して、そのファイルを含む
-<code>StorageVolume</code> を取得します。この <code>StorageVolume</code> で
-<code>createAccessIntent()</code> を呼び出し、このファイルの外部ストレージ ディレクトリにアクセスします。
-</p>
-
-<p>
-外部 SD カードなどのセカンダリ ボリュームで、
-<code>StorageVolume.createAccessIntent()</code> を呼び出すときに null を渡し、特定のディレクトリではなくボリューム全体へのアクセスをリクエストします。プライマリ ボリュームに null を渡すか、無効なディレクトリ名を渡すと、
-<code>StorageVolume.createAccessIntent()</code> は null を返します。
-
-
-</p>
-
-<p>次のコード スニペットは、プライマリ共有ストレージの
-<code>Pictures</code> ディレクトリを開く方法の例を示しています。</p>
-
-<pre>
-StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
-StorageVolume volume = sm.getPrimaryVolume();
-Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
-startActivityForResult(intent, request_code);
-</pre>
-
-<p>システムは外部ディレクトリへのアクセスの付与を試行し、必要に応じてシンプルな UI で、ユーザーにアクセスを確認します。
-</p>
-
-<img src="{@docRoot}preview/images/scoped-folder-access-framed.png" srcset="{@docRoot}preview/images/scoped-folder-access-framed.png 1x,
-{@docRoot}preview/images/scoped-folder-access-framed_2x.png 2x" />
-<p class="img-caption"><strong>図 1.</strong> Pictures ディレクトリへのアクセスを要求するアプリ
-</p>
-
-<p>ユーザーがアクセスを付与すると、
-<code>Activity.RESULT_OK</code> の結果コードと、URI を含むインテント データを指定して、
-<code>onActivityResult()</code> のオーバーライドを呼び出します。提供された URI を使用して、ディレクトリの情報にアクセスします。これは、<a href="{@docRoot}guide/topics/providers/document-provider.html">ストレージ アクセス フレームワーク</a>で返された URI を使用する場合と同様です。
-
-
-
-</p>
-
-<p>ユーザーがアクセスを付与しなかった場合は、
-<code>Activity.RESULT_CANCELED</code> の結果コードと、null のインテント データを指定して、
-<code>onActivityResult()</code> のオーバーライドを呼び出します。</p>
-
-<p class="note"><b>注</b>:特定の外部ディレクトリへのアクセスを取得すると、そのディレクトリ内のサブディレクトリへのアクセスも取得します。
-</p>
-
-<h2 id="removable">リムーバブル メディアのディレクトリへのアクセス</h2>
-
-<p>特定のディレクトリへのアクセスを使用してリムーバブル メディア上のディレクトリにアクセスするには、まず {@link android.os.Environment#MEDIA_MOUNTED} 通知をリッスンする {@link android.content.BroadcastReceiver} を追加します。次に例を示します。
-
-</p>
-
-<pre>
-<receiver
- android:name=".MediaMountedReceiver"
- android:enabled="true"
- android:exported="true" >
- <intent-filter>
- <action android:name="android.intent.action.MEDIA_MOUNTED" />
- <data android:scheme="file" />
- </intent-filter>
-</receiver>
-</pre>
-
-<p>ユーザーが SD カードなどのリムーバブル メディアをマウントすると、システムは
-{@link android.os.Environment#MEDIA_MOUNTED} 通知を送信します。この通知は、インテント データ内の <code>StorageVolume</code> オブジェクトを提供します。このオブジェクトを使用して、リムーバブル メディア上のディレクトリにアクセスできます。
-
-次の例では、リムーバブル メディア上の <code>Pictures</code> ディレクトリにアクセスします。
-</p>
-
-<pre>
-// BroadcastReceiver has already cached the MEDIA_MOUNTED
-// notification Intent in mediaMountedIntent
-StorageVolume volume = (StorageVolume)
- mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
-volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
-startActivityForResult(intent, request_code);
-</pre>
-
-<h2 id="best">ベスト プラクティス</h2>
-
-<p>外部ディレクトリのアクセス URI はできる限り保持してください。そうすれば、ユーザーに何度もアクセス要求をする必要がなくなります。
-ユーザーがアクセスを付与したら、ディレクトリのアクセス URI を指定して
-<code>getContentResolver().takePersistableUriPermssion()</code> を呼び出します。
-システムが URI を保持し、以降のアクセス要求では <code>RESULT_OK</code> を返して、ユーザーに確認の UI を表示しません。
-
-</p>
-
-<p>ユーザーが外部ディレクトリへのアクセスを拒否した直後に、またアクセスをリクエストしないようにしてください。
-何度もアクセスを要求すると、ユーザー エクスペリエンスが低下します。
-リクエストがユーザーにより拒否され、アプリが再度アクセスをリクエストすると、UI に [<b>Don't ask again</b>] チェックボックスが表示されます。
-</p>
-
-<img src="{@docRoot}preview/images/scoped-folder-access-dont-ask.png" srcset="{@docRoot}preview/images/scoped-folder-access-dont-ask.png 1x,
-{@docRoot}preview/images/scoped-folder-access-dont-ask_2x.png 2x" />
-<p class="img-caption"><strong>図 1.</strong> リムーバブル メディアへのアクセスに対して 2 回目のリクエストを行うアプリ。
-</p>
-
-<p>ユーザーが [<b>Don't ask again</b>] を選択してリクエストを拒否すると、特定のディレクトリに対するアプリからの今後のすべてのリクエストは自動的に拒否され、リクエストに関する UI は表示されなくなります。
-
-</p>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ja/preview/features/security-config.jd b/docs/html-intl/intl/ja/preview/features/security-config.jd
deleted file mode 100644
index 1fbfe72..0000000
--- a/docs/html-intl/intl/ja/preview/features/security-config.jd
+++ /dev/null
@@ -1,747 +0,0 @@
-page.title=ネットワーク セキュリティ構成
-page.keywords=androidn,security,network
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>このドキュメントの内容</h2>
-<ol>
- <li><a href="#manifest">セキュリティ構成ファイルの追加</a></li>
- <li><a href="#CustomTrust">信頼できる CA のカスタマイズ</a>
- <ol>
- <li><a href="#ConfigCustom">カスタムの CA の設定</a></li>
- <li><a href="#LimitingCas">信頼できる CA の制限</a></li>
- <li><a href="#TrustingAdditionalCas">信頼できる CA の追加</a></li>
- </ol>
- </li>
- <li><a href="#TrustingDebugCa">デバッグ限定の CA</a></li>
- <li><a href="#UsesCleartextTraffic">クリアテキスト トラフィックのオプトアウト</a></li>
- <li><a href="#CertificatePinning">証明書のピン留め</a></li>
- <li><a href="#ConfigInheritance">構成の継承の動作</a></li>
- <li><a href="#FileFormat">構成ファイルの形式</a></li>
-</ol>
-</div>
-</div>
-
-
-<p>
- Android N には、ネットワーク セキュリティ構成機能が含まれています。これにより、アプリのコードを修正しなくても、安全な宣言型構成ファイルで、アプリのネットワーク セキュリティの設定をカスタマイズできます。
-
-これらの設定は、特定のドメインおよび特定のアプリに対して構成できます。
-主な機能は次のとおりです。
-
-</p>
-
-<ul>
- <li>
- <b>カスタム トラスト アンカー:</b>アプリのセキュアな接続にどの証明機関(CA)を信頼するかをカスタマイズできます。
-たとえば、特定の自己署名証明書や制限された一連の公的 CA を信頼できます。
-
-
- </li>
-
- <li>
- <b>デバッグのみのオーバーライド:</b>インストール ベースに対する追加リスクなしに、アプリのセキュアな接続を安全にデバッグできます。
-
- </li>
-
- <li>
- <b>クリアテキスト トラフィックのオプトアウト:</b>クリアテキスト トラフィックの意図しない使用からアプリを保護できます。
-
- </li>
-
- <li>
- <b>証明書のピン留め:</b>アプリのセキュアな接続を特定の証明書に制限します。
-
- </li>
-</ul>
-
-
-<h2 id="manifest">セキュリティ構成ファイルの追加</h2>
-
-<p>
- ネットワーク セキュリティ構成機能は、XML ファイルを使用します。このファイルで、アプリの設定を指定できます。
-アプリのマニフェストに、このファイルを指すエントリを含める必要があります。
-次のコードはマニフェストからの抜粋で、このエントリの作成方法を示しています。
-
-</p>
-
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<manifest ... >
- <application ... >
- <meta-data android:name="android.security.net.config"
- android:resource="@xml/network_security_config" />
- ...
- </application>
-</manifest>
-</pre>
-
-<h2 id="CustomTrust">信頼できる CA のカスタマイズ</h2>
-
-<p>
- アプリで、プラットフォームのデフォルトの設定ではなく、カスタマイズした一連の CA を信頼することが必要な場合があります。
-主な理由は次のとおりです。
-</p>
-
-<ul>
- <li>カスタムの証明機関(自己署名、社内の CA で発行など)を使用してホストに接続する。
-
- </li>
-
- <li>プレインストールされたすべての CA ではなく、信頼する一部の CA のみに制限する。
-
- </li>
-
- <li>システムに含まれていない追加の CA を信頼する。
- </li>
-</ul>
-
-<p>
- デフォルトで、すべてのアプリのセキュアな接続(TLS、HTTPS など)は、システムにプレインストールされた CA を信頼し、API レベル 23(Android M)以下をターゲットにしたアプリは、ユーザーが追加した CA も信頼します。
-
-アプリは {@code base-config}(アプリ全体のカスタマイズ)または {@code domain-config} (ドメイン単位のカスタマイズ)を使用して、独自の接続をカスタマイズすることもできます。
-
-
-
-</p>
-
-
-<h3 id="ConfigCustom">カスタムの CA の設定</h3>
-
-<p>
- 自己署名 SSL 証明書を使用するホストか、または信頼できる非パブリック CA(社内の CA など)によって SSL 証明書が発行されているホストに接続するケースで説明します。
-
-
-</p>
-
-<p>
- <code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">example.com</domain>
- <trust-anchors>
- <certificates src="@raw/my_ca"/>
- </trust-anchors>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-<p>
- PEM または DER 形式で、自己署名または非パブリック CA 証明書を
-{@code res/raw/my_ca} に追加します。
-</p>
-
-
-<h3 id="LimitingCas">信頼できる CA の制限</h3>
-
-<p>
- システムによって信頼されているすべての CA をアプリで信頼したくない場合は、信頼する CA を制限できます。
-これにより、他の CA が発行した偽造証明書からアプリを保護できます。
-
-</p>
-
-<p>
- 信頼できる CA を制限するための設定は、特定のドメインで<a href="#TrustingACustomCa">カスタムの CA を信頼する</a>設定と似ています。ただし、リソースで複数の CA を指定できる点が異なります。
-
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">secure.example.com</domain>
- <domain includeSubdomains="true">cdn.example.com</domain>
- <trust-anchors>
- <certificates src="@raw/trusted_roots"/>
- </trust-anchors>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-<p>
- PEM または DER 形式で、信頼できる CA を {@code res/raw/trusted_roots} に追加します。
- PEM 形式を使用する場合、そのファイルには PEM データのみを含めるようにして、余分なテキストを含めないでください。<em></em>
-1 つだけでなく複数の
-<a href="#certificates"><code><certificates></code></a> 要素を指定できます。
-
-</p>
-
-
-<h3 id="TrustingAdditionalCas">
- 信頼できる CA の追加
-</h3>
-
-<p>
- システムで信頼されていない CA を、アプリが追加で信頼しなければならない場合があります。これは、システムに CA がまだ組み込まれていなかったり、CA が Android システムに組み込まれるための要件を満たしていないことが原因です。
-
-CA を追加するには、アプリの構成で複数の証明書ソースを指定します。
-
-
-</p>
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <base-config>
- <trust-anchors>
- <certificates src="@raw/extracas"/>
- <certificates src="system"/>
- </trust-anchors>
- </base-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="TrustingDebugCa">デバッグ用の CA の構成</h2>
-
-<p>
- HTTPS で接続するアプリをデバッグするときは、運用サーバーの SSL 証明書がインストールされていないローカルの開発サーバーへの接続が必要になります。
-
-アプリのコードを変更せずにこの接続をサポートするには
-
- <i>、</i> {@code debug-overrides} を使用して、<a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a> が {@code true} の場合にのみ信頼されるデバッグ限定の CA を指定できます。
-
-通常、IDE およびビルド ツールによって、非リリース ビルドには自動的にこのフラグが設定されます。
-
-</p>
-
-<p>
- この方法は、通常の条件付きコードよりも安全です。セキュリティ対策として、アプリ ストアでは debuggable とマークされたアプリは拒否されるからです。
-
-
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <debug-overrides>
- <trust-anchors>
- <certificates src="@raw/debug_cas"/>
- </trust-anchors>
- </debug-overrides>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="UsesCleartextTraffic">クリアテキスト トラフィックのオプトアウト</h2>
-
-<p>
- アプリケーションで、セキュアな接続のみを使用して接続する場合、それらの接続先に対して(HTTPS ではなく暗号化されていない HTTP プロトコルを使用する)クリアテキストのサポートを除外できます。
-
-このオプションにより、バックエンド サーバーなど外部ソースが提供する URL の変更によって、アプリで思わぬパフォーマンスの低下が発生するのを防ぐことができます。
-
-
- 詳細については、{@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted
- NetworkSecurityPolicy.isCleartextTrafficPermitted()} をご覧ください。
-</p>
-
-<p>
- たとえば、アプリで {@code
- secure.example.com} へのすべての接続には常に HTTPS を使用して、機密性の高いトラフィックを有害なネットワークから保護することが必要な場合があります。
-
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config usesCleartextTraffic="false">
- <domain includeSubdomains="true">secure.example.com</domain>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="CertificatePinning">証明書のピン留め</h2>
-
-<p>
- 通常、アプリはプレインストールされたすべての CA を信頼します。これらの CA が偽造証明書を発行すると、アプリは MiTM 攻撃のリスクにさらされます。
-
-アプリによっては、信頼する CA を制限するか証明書をピン留めすることで、受け入れる証明書を制限できます。
-
-</p>
-
-<p>
- 証明書をピン留めするには、公開鍵のハッシュによって証明書のセットを指定します(X.509 証明書の SubjectPublicKeyInfo)。
-証明書チェーンが有効になるのは、証明書チェーンに 1 つ以上のピン留めされた公開鍵が含まれている場合のみです。
-
-
-</p>
-
-<p>
- 証明書のピン留めを使用するときは、必ずバックアップの鍵を含めてください。そうすれば、新しい鍵に切り替えたり、CA を変更したりする必要が生じた場合に(CA 証明書またはその CA の中間証明書にピン留めしていても)、アプリの接続が影響を受けることはありません。
-
-
-そうしないと、接続を復元するためにアプリにアップデートをプッシュしなければならなくなります。
-
-</p>
-
-<p>
- また、ピン留めの有効期限を設定することもできます。その有効期限を過ぎると、ピン留めが無効になります。
-これにより、アップデートされていないアプリの接続の問題を防ぐことができます。
-ただし、ピン留めに有効期限を設定すると、ピン留めを回避できるようになります。
-
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">example.com</domain>
- <pin-set expiration="2018-01-01">
- <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
- <!-- backup pin -->
- <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
- </pin-set>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="ConfigInheritance">構成の継承の動作</h2>
-
-<p>
- 固有の構成で設定されていない値は、継承されます。この動作により、より複雑な構成が可能になるうえ、構成ファイルの読みやすさを維持できます。
-
-</p>
-
-<p>
- 固有のエントリに値が設定されていない場合、その次に汎用的なエントリの値が使用されます。
-{@code domain-config} で設定されていない値は、ネストされている場合は親の {@code domain-config} から、ネストされていない場合は {@code
- base-config} から取得されます。
-{@code base-config} で設定されていない値には、プラットフォームの既定値を使用します。
-
-</p>
-
-<p>
- たとえば、{@code
- example.com} のサブドメインに対するすべての接続で、CA のカスタム セットを使用する必要があるケースを考えてみましょう。また、これらのドメインに対するクリアテキストのトラフィックは、{@code
- secure.example.com} に接続する場合を除いて許可します。<em></em>
-{@code example.com} の構成で {@code
- secure.example.com} の構成をネストすることで、
-{@code trust-anchors} の重複を回避できます。
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">example.com</domain>
- <trust-anchors>
- <certificates src="@raw/my_ca"/>
- </trust-anchors>
- <domain-config cleartextTrafficPermitted="false">
- <domain includeSubdomains="true">secure.example.com</domain>
- </domain-config>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="FileFormat">構成ファイルの形式</h2>
-
-<p>
- ネットワーク セキュリティ構成機能では、XML ファイル形式を使用します。
- ファイルの全体的な構造については、次のコード サンプルをご覧ください。
-</p>
-
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <base-config>
- <trust-anchors>
- <certificates src="..."/>
- ...
- </trust-anchors>
- </base-config>
-
- <domain-config>
- <domain>android.com</domain>
- ...
- <trust-anchors>
- <certificates src="..."/>
- ...
- </trust-anchors>
- <pin-set>
- <pin digest="...">...</pin>
- ...
- </pin-set>
- </domain-config>
- ...
- <debug-overrides>
- <trust-anchors>
- <certificates src="..."/>
- ...
- </trust-anchors>
- </debug-overrides>
-</network-security-config>
-</pre>
-
-<p>
- 次のセクションでは、このファイル形式の構文とその他の詳細について説明します。
-
-</p>
-
-<h3 id="network-security-config">
- <network-security-config>
-</h3>
-
-<dl class="xml">
- <dt>
- 含めることのできる要素:
- </dt>
-
- <dd>
- 0 または 1 つの <code><a href="#base-config"><base-config></a></code><br>
- 任意の数の <code><a href=
- "#domain-config"><domain-config></a></code><br>
- 0 または 1 つの <code><a href="#debug-overrides"><debug-overrides></a></code>
- </dd>
-</dl>
-
-<h3 id="base-config">
- <base-config>
-</h3>
-
-<dl class="xml">
- <dt>
- 構文:
- </dt>
-</dl>
-
-<pre class="stx">
-<base-config <a href=
-"#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
- ...
-</base-config>
-</pre>
-<dl class="xml">
- <dt>
- 含めることのできる要素:
- </dt>
-
- <dd>
- <code><a href="#trust-anchors"><trust-anchors></a></code>
- </dd>
-
- <dt>
- 説明:
- </dt>
-
- <dd>
- <a href="#domain-config"><code>domain-config</code></a> に含まれていない接続先に対するすべての接続に使用される、デフォルトの構成。
-
-
-<p>
- 設定されていない値はすべて、プラットフォームの既定値を使用します。API レベル 24 以上をターゲットにしたアプリのデフォルトの構成は次のとおりです。
-
-</p>
-
-<pre>
-<base-config usesCleartextTraffic="true">
- <trust-anchors>
- <certificates src="system" />
- </trust-anchors>
-</base-config>
-</pre>
-API レベル 23 以下をターゲットにしたアプリのデフォルトの構成は次のとおりです。
-<pre>
-<base-config usesCleartextTraffic="true">
- <trust-anchors>
- <certificates src="system" />
- <certificates src="user" />
- </trust-anchors>
-</base-config>
-</pre>
-
- </dd>
-</dl>
-
-<h3 id="domain-config"><domain-config></h3>
-<dl class="xml">
-<dt>構文:</dt>
-<dd>
-<pre class="stx"><domain-config <a href="#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
- ...
-</domain-config></pre>
-</dd>
-
-<dt>含めることのできる要素:</dt>
-
-<dd>
-1 つ以上の <code><a href="#domain"><domain></a></code>
-<br/>0 または 1 つの <code><a href="#trust-anchors"><trust-anchors></a></code>
-<br/>0 または 1 つの <code><a href="#pin-set"><pin-set></code></a>
-<br/>任意の数のネストされた <code><domain-config></code></dd>
-
-<dt>説明</dt>
-<dd>固有の接続先への接続に使用される構成です。{@code domain} 要素の定義に従います。
-
-<p>複数の {@code domain-config} 要素で接続先を指定している場合は、最も具体的な(長い)マッチング ドメイン ルールを持つ構成が採用されます。
-</p></dd>
-</dl>
-
-
-<h3 id="domain"><domain></h3>
-
-<dl class="xml">
- <dt>
- 構文:
- </dt>
-
- <dd>
- <pre class="stx">
-<domain includeSubdomains=["true" | "false"]>example.com</domain>
-</pre>
- </dd>
-
- <dt>
- 属性:
- </dt>
-
- <dd>
- <dl class="attr">
- <dt>
- {@code includeSubdomains}
- </dt>
-
- <dd>
- {@code "true"} の場合、このドメイン ルールはドメインおよびすべてのサブドメイン(サブドメインのサブドメインも含む)に一致します。そうでない場合、このルールは完全一致のみに適用されます。
-
-
- </dd>
- </dl>
- </dd>
-
- <dt>
- 説明:
- </dt>
-</dl>
-
-<h3 id="debug-overrides"><debug-overrides></h3>
-
-<dl class="xml">
- <dt>
- 構文:
- </dt>
-
- <dd>
- <pre class="stx">
-<debug-overrides>
- ...
-</debug-overrides>
-</pre>
- </dd>
-
- <dt>
- 含めることのできる要素:
- </dt>
-
- <dd>
- 0 または 1 つの <code><a href="#trust-anchors"><trust-anchors></a></code>
- </dd>
-
- <dt>
- 説明:
- </dt>
-
- <dd>
- オーバーライドは、<a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a> が {@code "true"} の場合に適用されます。これは通常、IDE およびビルド ツールで生成された非リリース ビルドに使用します。
-
-{@code
- debug-overrides} で指定されたトラスト アンカーは、その他すべての構成に追加されます。サーバーの証明書チェーンでデバッグ限定のトラスト アンカーのいずれかを使用するときは、証明書のピン留めは実行されません。
-
-<a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a> が {@code "false"} の場合、このセクションは完全に無視されます。
-
- </dd>
-</dl>
-
-<h3 id="trust-anchors"><trust-anchors></h3>
-<dl class="xml">
- <dt>
- 構文:
- </dt>
-
- <dd>
- <pre class="stx">
-<trust-anchors>
-...
-</trust-anchors>
-</pre>
- </dd>
-
- <dt>
- 含めることのできる要素:
- </dt>
-
- <dd>
- 任意の数の <code><a href="#certificates"><certificates></a></code>
- </dd>
-
- <dt>
- 説明:
- </dt>
-
- <dd>
- セキュアな接続に使用するトラスト アンカーのセット。
- </dd>
-</dl>
-
-
-<h3 id="certificates"><certificates></h3>
-<dl class="xml">
-<dt>構文:</dt>
-<dd><pre class="stx"><certificates src=["system" | "user" | "<i>raw resource</i>"]
- overridePins=["true" | "false"] />
-</pre></dd>
-<dt>説明:</dt>
-<dd>{@code trust-anchors} 要素の X.509 証明書のセットです。</dd>
-
-<dt>属性:</dt>
-<dd><dl class="attr">
-<dt>{@code src}</dt>
-<dd>
-CA 証明書のソースには、次のいずれかを指定します。
-<ul>
- <li>X.509 証明書を含むファイルを指す未加工のリソース ID。
- 証明書は、DER または PEM 形式でエンコードする必要があります。PEM 証明書の場合、ファイルには PEM 以外の余分なデータ(コメントなど)を含めないでください。
-<em></em>
-
- </li>
-
- <li>{@code "system"}: プレインストールされたシステムの CA 証明書
- </li>
-
- <li>{@code "user"}: ユーザーが追加した CA 証明書
- </li>
-</ul>
-</dd>
-
-<dt>{@code overridePins}</dt>
-<dd>
- <p>
- ソースから取得した CA が証明書のピン留めを回避するかどうかを指定します。{@code
- "true"} の場合、証明書チェーンはこのソースから取得したいずれかの CA を使用して作成され、ピン留めは実行されません。
-この設定は、CA をデバッグしたり、アプリのセキュアなトラフィックでユーザーの MiTM の許可をサポートするために役立ちます。
-
- </p>
-
- <p>
- デフォルトは {@code "false"} です。ただし、{@code debug-overrides} 要素で指定された場合の既定値は {@code "true"} です。
-
- </p>
-</dd>
-</dl>
-</dd>
-
-
-<h3 id="pin-set"><pin-set></h3>
-
-<dl class="xml">
- <dt>
- 構文:
- </dt>
-
- <dd>
-<pre class="stx">
-<pin-set expiration="date">
-...
-</pin-set>
-</pre>
- </dd>
-
- <dt>
- 含めることのできる要素:
- </dt>
-
- <dd>
- 任意の数の <code><a href="#pin"><pin></a></code>
- </dd>
-
- <dt>
- 説明:
- </dt>
-
- <dd>
- 公開鍵のピンのセットです。セキュアな接続を信頼するには、信頼チェーン内の公開鍵一式のうちどれかが、ピンのセットに含まれている必要があります。
-ピンの形式については、
-<code><a href="#pin"><pin></a></code> をご覧ください。
- </dd>
-
- <dt>
- 属性:
- </dt>
-
- <dd>
- <dl class="attr">
- <dt>
- {@code expiration}
- </dt>
-
- <dd>
- {@code yyyy-MM-dd} 形式のピン留めの有効期限、つまりピン留めを無効にする日付です。
-この属性が設定されていない場合、ピン留めの有効期限はありません。
-
- <p>
- 有効期限を設定しておくと、ユーザーがアプリのアップデートを無効にしているなどの原因で、ピンのセットのアップデートを取得していないアプリで、アプリの接続上の問題を回避できます。
-
-
- </p>
- </dd>
- </dl>
- </dd>
-</dl>
-
-<h3 id="pin"><pin></h3>
-<dl class="xml">
- <dt>
- 構文:
- </dt>
-
- <dd>
-<pre class="stx">
-<pin digest=["SHA-256"]>base64 encoded digest of X.509
- SubjectPublicKeyInfo (SPKI)</pin>
-</pre>
- </dd>
-
- <dt>
- 属性:
- </dt>
-
- <dd>
- <dl class="attr">
- <dt>
- {@code digest}
- </dt>
-
- <dd>
- PIN の生成にはダイジェスト アルゴリズムが使用されます。現在サポートされているのは
-{@code "SHA-256"} のみです。
- </dd>
- </dl>
- </dd>
-</dl>
diff --git a/docs/html-intl/intl/ja/preview/features/tv-recording-api.jd b/docs/html-intl/intl/ja/preview/features/tv-recording-api.jd
deleted file mode 100644
index bf5f9a9..0000000
--- a/docs/html-intl/intl/ja/preview/features/tv-recording-api.jd
+++ /dev/null
@@ -1,142 +0,0 @@
-page.title=TV の録画機能
-page.keywords=preview,sdk,tv,recording
-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="#supporting">録画のサポートを示す</a></li>
- <li><a href="#recording">セッションを録画する</a></li>
- <li><a href="#errors">録画のエラーを処理する</a></li>
- <li><a href="#sessions">録画したセッションを管理する</a></li>
- <li><a href="#best">ベスト プラクティス</a></li>
- </ol>
-</div>
-</div>
-
-<p>TV の入力サービスを使用すると、ユーザーは time-shifting API を介してチャンネルの再生を一時停止および再開できます。
-Android N では、録画したセッションを複数保存できるようにして、タイムシフティング機能を拡張しています。
-</p>
-
-<p>ユーザーはあらかじめ録画をスケジュールできます。また、プログラムを視聴しながら録画を開始することもできます。
-システムが録画を保存すると、システムの TV アプリで録画をブラウジング、管理、再生できます。
-</p>
-
-<p>TV 入力サービスで録画機能を提供する場合は、アプリが録画をサポートしていることをシステムに示し、プログラムの録画機能を実装し、録画中に発生したエラーを処理および通知し、録画したセッションを管理する必要があります。
-
-
-</p>
-
-<p class="note"><strong>注:</strong>ライブチャンネル アプリでは、録画を作成したり録画にアクセスするための機能はまだ提供されていません。
-ライブチャンネル アプリに変更が行われるまで、TV 入力サービスの録画機能を完全にテストすることは難しい場合があります。
-
-</p>
-
-<h2 id="supporting">録画のサポートを示す</h2>
-
-<p>TV 入力サービスで録画をサポートしていることをシステムに示すには、サービス メタデータ XML ファイル内の <code>android:canRecord</code> 属性を <code>true</code> に設定します。
-
-
-</p>
-
-<pre>
-<tv-input xmlns:android="http://schemas.android.com/apk/res/android"
- <b>android:canRecord="true"</b>
- android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />
-</pre>
-
-<p>サービス メタデータ ファイルの詳細については、<a href="{@docRoot}training/tv/tif/tvinput.html#manifest">マニフェストで TV 入力サービスを宣言する</a>をご覧ください。
-
-
-</p>
-
-<p>また、以下のステップを使用して、コードで録画機能のサポートを示すことができます。
-</p>
-
-<ol>
-<li><code>TvInputService.onCreate()</code> メソッドで、<code>TvInputInfo.Builder</code> クラスを使用して新しい
-<code>TvInputInfo</code> オブジェクトを作成します。
-</li>
-<li>新しい <code>TvInputInfo</code> オブジェクトを作成するときは、
-<code>setCanRecord(true)</code> を呼び出してから、<code>build()</code> を呼び出して、サービスが録画をサポートしていることを示します。
-</li>
-<li>
-<code>TvInputManager.updateTvInputInfo()</code> を呼び出してシステムに <code>TvInputInfo</code> オブジェクトを登録します。</li>
-</ol>
-
-<h2 id="recording">セッションを録画する</h2>
-
-<p>TV 入力サービスで録画機能のサポートを登録した後、システムがアプリの録画機能の実装にアクセスする必要があるときに、
-<code>TvInputService.onCreateRecordingSession()</code> を呼び出します。
-
-独自の
-<code>TvInputService.RecordingSession</code> サブクラスを実装し、<code>onCreateRecordingSession()</code> コールバックが発生したときに返します。
-
-このサブクラスは、正しいチャンネル データへの切り替え、要求されたデータの録画、録画のステータスおよびエラーのシステムへの通知を処理します。
-
-</p>
-
-<p>システムが <code>RecordingSession.onTune()</code> を呼び出すと、チャンネル URI を渡して、URI で指定されたチャンネルに合わせます。
-<code>notifyTuned()</code> を呼び出して、アプリが目的のチャンネルに合わせたことをシステムに通知します。または、アプリが適切なチャンネルに合わせることができなかった場合は、
-<code>notifyError()</code> を呼び出します。
-
-</p>
-
-<p>次に、システムは <code>RecordingSession.onStartRecording()</code> コールバックを呼び出します。
-アプリは直ちに録画を開始する必要があります。システムはこのコールバックを呼び出すときに、これから録画するプログラムに関する情報を含む URI を提供します。
-
-録画が完了したら、このデータを <code>RecordedPrograms</code> データ テーブルにコピーする必要があります。
-</p>
-
-<p>最後に、システムが <code>RecordingSession.onStopRecording()</code> を呼び出します。この時点で、アプリは録画を直ちに停止する必要があります。
-また、<code>RecordedPrograms</code> テーブルのエントリも作成する必要があります。
-このエントリは、
-<code>RecordedPrograms.COLUMN_RECORDING_DATA_URI</code> 列に録画したセッション データの URI を設定し、システムが最初に
-<code>onStartRecording()</code> を呼び出したときに提供したプログラム情報がすべて含まれている必要があります。
-
-</p>
-
-<p><code>RecordedPrograms</code> テーブルへのアクセス方法の詳細については、<a href="#sessions">録画したセッションを管理する</a>をご覧ください。
-</p>
-
-<h2 id="errors">録画のエラーを処理する</h2>
-
-<p>録画中にエラーが発生し、録画したデータのレンダリングができない場合は、<code>RecordingSession.notifyError()</code> を呼び出してシステムに通知します。同様に、録画セッションの作成後に <code>notifyError()</code> を呼び出して、アプリがセッションを録画できないことをシステムに通知することもできます。
-
-
-</p>
-
-<p>録画中にエラーが発生したにもかかわらず、一部の録画を再生できるようにしてユーザーに提供したい場合は、
-<code>RecordingSession.notifyRecordingStopped()</code> を呼び出すと、システムで部分的なセッションを使用できるようになります。
-
-</p>
-
-<h2 id="sessions">録画したセッションを管理する</h2>
-
-<p>システムは、すべての録画可能チャンネル アプリで録画したすべてのセッションの情報を、<code>TvContract.RecordedPrograms</code>
-コンテンツ プロバイダ テーブルに保持します。
-この情報は、
-<code>RecordedPrograms.Uri</code> コンテンツ URI を使用してアクセスできます。コンテンツ プロバイダ API を使用して、このテーブルのエントリの読み取り、追加、削除が可能です。
-</p>
-
-<p>コンテンツ プロバイダのデータの操作方法については、<a href="{@docRoot}guide/topics/providers/content-provider-basics.html">コンテンツ プロバイダの基本</a>をご覧ください。
-
-</p>
-
-<h2 id="best">ベスト プラクティス</h2>
-
-<p>TV 端末のストレージには上限があるため、録画したセッションを保存するためにストレージを割り当てるときは、十分に検討してください。
-録画したセッションを保存する容量が不足している場合は、
-<code>RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)</code> を使用します。
-</p>
-
-<p>ユーザーが録画を開始すると、できるだけ速やかにデータの録画を開始する必要があります。
-録画を円滑に開始するには、システムが
-<code>onCreateRecordingSession()</code> コールバックを呼び出したときにストレージ容量のアクセスや割り当てなど、時間のかかるタスクをあからじめ完了しておきます。
-そうすれば、<code>onStartRecording()</code> コールバックが発生したときに直ちに録画を開始できます。
-
-</p>
diff --git a/docs/html-intl/intl/ja/preview/guide.jd b/docs/html-intl/intl/ja/preview/guide.jd
deleted file mode 100644
index f56fc66..0000000
--- a/docs/html-intl/intl/ja/preview/guide.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="qv-wrapper">
- <div id="qv">
- <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/preview/index.jd b/docs/html-intl/intl/ja/preview/index.jd
deleted file mode 100644
index 774e065..0000000
--- a/docs/html-intl/intl/ja/preview/index.jd
+++ /dev/null
@@ -1,131 +0,0 @@
-page.title=Android N Developer Preview
-page.tags="preview","developer"
-meta.tags="preview", "android"
-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">
- <div class="wrap" style="max-width:1100px;margin-top:0">
- <div class="cols dac-hero-content" style="padding-bottom:1em;">
-
- <div class="col-7of16 col-push-9of16" style="padding-left:2em">
- <h1 class="dac-hero-title">Android N Developer Preview</h1>
- <p class="dac-hero-description">
- Android N が正式リリースされる前に、
- Nexus や他の端末で事前に<strong>アプリの動作をご確認いただけます</strong>。新しいシステム動作をサポートして、<strong>電力やメモリの使用量を削減しましょう</strong>。
-
- <strong>マルチ ウィンドウ UI</strong> や<strong>ダイレクト リプライ通知</strong>などの機能も利用して、アプリを拡張してみてください。
-
- </p>
-
- <a class="dac-hero-cta" href="{@docRoot}preview/overview.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>-->
- </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>
- </div>
- <div class="dac-section dac-small">
- <div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/resources"
- data-cardSizes="6x2"
- data-maxResults="6"></div>
- </div>
- </div>
-</section>
-
-<div id="useUpdatedTemplates" style="display:none" 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>
- </a>
- <ul class="dac-actions">
- <li class="dac-action">
- <a class="dac-action-link" href="https://developer.android.com/preview/bug">
- <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>
- 開発者コミュニティに参加</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"
- data-query="type:blog+tag:androidn+tag:featured, type:youtube+tag:androidn+tag:featured"
- data-sortOrder="-timestamp"
- data-cardSizes="6x6"
- data-items-per-page="6"
- data-maxResults="15"
- data-initial-results="3"></div>
-</div></section>
-
-<section class="dac-section dac-gray"><div class="wrap">
- <h1 class="dac-section-title">リソース</h1>
- <div class="dac-section-subtitle">
- Android N 向けにアプリを開発する上で役立つ必須情報をご提供します。
- </div>
-
- <div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/more"
- data-cardSizes="6x6"
- data-items-per-page="6"
- data-maxResults="15"
- data-initial-results="6"></div>
-
- </div>
-</section>
-
diff --git a/docs/html-intl/intl/ja/preview/license.jd b/docs/html-intl/intl/ja/preview/license.jd
deleted file mode 100644
index 64275cd..0000000
--- a/docs/html-intl/intl/ja/preview/license.jd
+++ /dev/null
@@ -1,145 +0,0 @@
-page.title=使用許諾契約
-
-@jd:body
-
-<p>
-Android SDK Preview をインストールする前に、次の利用規約に同意する必要があります。
-以下に記載するとおり、これは、Android SDK のプレビュー バージョンであり、変更される可能性があります。デベロッパーご自身の責任においてご使用ください。Android SDK Preview は安定したリリースではなく、お使いのコンピュータ システム、端末、データに深刻な影響を与える可能性のあるエラーまたは欠陥が含まれている場合があります。
-</p>
-
-<p>
-以下は、Android SDK Preview の使用許諾契約です(以下「本契約」)。
-</p>
-<div class="sdk-terms" style="height:auto;border:0;padding:0;width:700px">
-1. はじめに
-
-1.1 Android SDK Preview(以下、本契約で「Preview」という。具体的には利用可能な場合には Android システム ファイル、パッケージ型 API、Preview ライブラリ ファイルを含む)は、本契約の規定に従ってライセンス許可されます。本契約では、デベロッパーの Preview の使用に関して、デベロッパーと Google の間で法的拘束力のある契約を結びます。
-
-1.2 「Android」とは、Android オープンソース プロジェクト(http://source.android.com/ にて随時更新)にて利用可能な、端末向けの Android ソフトウェア スタックを意味します。
-
-1.3 「Android 互換」とは、(i)Android 互換ウェブサイト(http://source.android.com/compatibility)に掲載されており、随時アップデートされる可能性がある Android Compatibility Definition ドキュメントに準拠し、かつ(ii)Android Compatibility Test Suite(CTS)に合格した任意の Android 実装を指します。
-
-1.4 「Google」とは、1600 Amphitheatre Parkway, Mountain View, CA 94043, United States に主たる事業所を有するデラウェア州法人である Google Inc. を意味します。
-
-2. 本契約への同意
-
-2.1 Peview を使用するためには、本契約に同意する必要があります。本契約に同意しない場合は Preview を使用できません。
-
-2.2 同意するかまたは Preview を使用するためにクリックすると、本契約に同意したことになります。
-
-2.3 米国またはその他の国(デベロッパーが居住している国かまたはデベロッパーが Preview を使用する国を含む)の法律により Preview の使用を禁止されている人である場合、Preview を使用することも、使用許諾契約に同意することもできません。
-
-2.4 雇用主またはその他の事業体を代表または代理して本契約に拘束されることに同意し Preview を企業または組織の内部で使用する場合、担当者の雇用主またはその他の事業体を本契約に法的に拘束する完全な法的権限を有していることを表明および保証するものとします。担当者が必要な権限を有していない場合は、担当者の雇用主またはその他の事業体を代表または代理して、本契約に同意することも、Preview を使用することもできません。
-
-3. Google からの Preview ライセンス
-
-3.1 本契約の規定に従い、Google は Android 実装と互換性のあるアプリの開発に Preview を使用するための、限定的で、世界規模の、ロイヤリティ フリーな、譲渡不可、非排他的、サブライセンス不可なライセンスを付与するものとします。
-
-3.2 本 Preview は、別のプラットフォーム(Android 実装と互換性のないものも含む)のアプリの開発や別の SDK の開発には使用できません。本 Preview をその目的で使用しない場合は、Android 実装と互換性のないものを含め、自由に別のプラットフォームのアプリの開発を行うことができます。
-
-3.3 Preview に関するすべての法的権利、所有権、利益(Preview に含まれる知的財産権を含む)は Google またはサードパーティが所有するものとします。「知的財産権」とは、特許法、著作権法、営業秘密法、商標法、不当競争防止法に基づいて発生するすべての権利、およびその他のすべての所有権を意味します。デベロッパーに明示的に付与されていない権利は、すべて Google が所有します。
-
-3.4 本契約で明示的に許可されている目的以外においては、Preview を使用できません。当該のサードパーティのライセンスで必要とされる場合を除き、デベロッパーは、(a)Preview または Preview の一部をコピー(バックアップ目的を除く)、修正、改造、再配布、逆コンパイル、リバース エンジニアリング、逆アセンブルまたは派生物の作成、または(b)モバイル ハンドセットまたは個人用コンピュータ以外のハードウェア端末への Preview の読み込み、Preview と他のソフトウェアとの結合、または 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>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ja/preview/overview.jd b/docs/html-intl/intl/ja/preview/overview.jd
deleted file mode 100644
index e14b5fb..0000000
--- a/docs/html-intl/intl/ja/preview/overview.jd
+++ /dev/null
@@ -1,440 +0,0 @@
-page.title=プログラム概要
-page.metaDescription= 次期 Android バージョン用のアプリを準備しましょう。
-page.image=images/cards/card-n-overview_2x.png
-meta.tags="preview", "developer", "android"
-page.tags="preview", "developer", "android"
-
-@jd:body
-<!--
-<div class="cols" style=
-"background-color:#f2daf5; padding: 5px 0;margin-bottom:1em; text-align:center;">
-<h3>
- Developer Preview 3 is now available
- </h3>
- <p>Includes final SDK and near-final system images</p>
- <div style="margin:auto 1em">
- <ul class="dac-section-links">
- <li class="dac-section-link">
- <a href="{@docRoot}preview/support.html#preview3-notes">
- <span class="dac-sprite dac-auto-chevron"></span>
- Read the Notes</a>
- </li>
-
- <li class="dac-section-link">
- <a href="{@docRoot}preview/support.html#preview3-get">
- <span class="dac-sprite dac-auto-chevron"></span>
- Get the Update</a>
- </li>
-
- <li class="dac-section-link">
- <a href="https://code.google.com/p/android-developer-preview/">
- <span class="dac-sprite dac-auto-chevron"></span>
- Report Issues</a>
- </li>
- </ul>
- </div>
-</div>
--->
-
-<p>
- <strong>Android N Developer Preview</strong> では、Android の次のバージョンでアプリをテストして最適化するためのすべてを備えています。
-
-N Developer Preview ツールをダウンロードするだけで、無料ですぐにご利用いただけます。
-
-</p>
-
-
-
-
-
-
-
-<div style="background-color:#eceff1;padding:1em;">
-<div class="wrap">
- <div class="cols">
- <div class="col-4of12">
- <h5>
- ハードウェアとエミュレータのイメージ
- </h5>
-
- <p>
- さまざまな端末やエミュレータでアプリを実行してテストできます。
-
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- 最新のプラットフォームのコード
- </h5>
-
- <p>
- プレビュー期間は毎月アップデートされるので、最新のプラットフォームで変更された箇所のテストを実施できます。
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- デベロッパー不具合の優先
- </h5>
-
- <p>
- 最初の数週間でデベロッパーから報告された問題に優先的に対応するので、テストの実施とフィードバックはお早めにお願いします。
-
- </p>
- </div>
-
- </div>
-
- <div class="cols">
-
-
- <div class="col-4of12">
- <h5>
- 新しい動作や機能
- </h5>
-
- <p>
- 新しいプラットフォーム動作への対応や、新機能を利用した開発を早い段階で開始できます。
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- OTA 配信によるアップデート
- </h5>
-
- <p>
- Android ベータ版プログラムによるサポート対象端末の無線でのシームレスなアップデートに対応しています。
-そのため、イメージを書き込む必要がありません。
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- フィードバックとサポート
- </h5>
-
- <p>
- <a href="{@docRoot}preview/bug">Issue Tracker</a> で問題を報告し、フィードバックをお送りください。
-<a href="{@docRoot}preview/dev-community">N デベロッパー コミュニティ</a>では、他のデベロッパーと情報交換をすることができます。
-
-
- </p>
- </div>
- </div>
-</div>
-</div>
-
-<!--
-<p>New in the Android N Developer Preview: </p>
-
-<ul>
- <li> Accompanying Android Beta Program for consumers, starting later in the preview</li>
- <li> More supported devices, including devices from OEM partners</li>
- <li> Seamless OTAs for your devices, from initial release to final N release without flashing</li>
-</ul>
--->
-
-<h2 id="timeline">スケジュールとアップデート</h2>
-<img src="{@docRoot}images/n-preview-updates_2x.png">
-
-<p>
- N Developer Preview の対象期間は、2016 年 3 月 9 日から AOSP と OEM 向けの Android N の正式リリース(2016 年の第 3 四半期を予定)までの間です。
-
-</p>
-
-<p>
- 主要な開発マイルストーンでアップデートをリリースしますので、開発やテスト用の環境としてご利用ください。
-アップデートの間隔は基本的には各月(4 週から 6 週に 1 回)の予定です。
-マイルストーンについては、以下をご覧ください。
-</p>
-
-<ul>
- <li><strong><a href="{@docRoot}preview/support.html#dp1">Preview 1</a></strong>(初回リリース、アルファ版)</li>
- <li><strong><a href="{@docRoot}preview/support.html#dp2">Preview 2</a></strong>(追加アップデート、アルファ版)</li>
- <li><strong><a href="{@docRoot}preview/support.html#dp3">Preview 3</a></strong>(追加アップデート、ベータ版)</li>
- <li><strong>Preview 4</strong>(最終版の API と正式な SDK、Google Play への公開)</li>
- <li><strong>Preview 5</strong>(最終テスト用の最終版とほぼ同じシステム イメージ)</li>
- <li>AOSP とエコシステムへの<strong>最終リリース</strong></li>
-</ul>
-
-<p>
- 各アップデートには、SDK ツールとプレビュー版のシステム イメージ、エミュレータ、参考資料、API の差分情報が含まれます。
-
-</p>
-
-<p>
- <strong>最初の 3 つのプレビュー マイルストーン</strong>では、<strong>初期段階のテストや開発用の環境</strong>を提供します。それを利用して既存のアプリにおける互換性の問題を特定し、新規プラットフォームへの移行や主な作業計画を立ててください。
-
-
-この期間は各種機能や API、ファイル互換性の問題など、あらゆるフィードバックを受け付けている貴重な期間です。ぜひ <a href="{@docRoot}preview/bug">Issue Tracker</a> を使用して、皆様のご意見をお聞かせください。
-
-
-いただいたフィードバックをもとに、一部の API を改善してアップデートで提供する予定です。
-</p>
-
-<p>
- <strong>Preview 4 と 5</strong> には、開発に使用する <strong>Android N の最終版の API と SDK</strong>、システム動作や機能のテストに使用する最終版とほぼ同じシステム イメージが含まれます。
-
-この時点で Android N の標準 API レベルが確定します。
-以後は既存アプリの最終的な互換性テストを開始し、Android N の API や機能を使った新しいコードを改善できるようになります。
-
-</p>
-
-<p>
- さらに Preview 4 以降では、正式な API レベルの Android N を搭載している<strong>端末にアプリを公開</strong>できるようになります(Android ベータ版プログラムにオプトインしたユーザーの端末などが対象)。
-
-なお、アプリは Google Play のアルファ版やベータ版のチャネルで先に配信できるので、ストア全体に公開する前に、Android ベータ版のユーザーに事前にアプリをテストしてもらうことが可能です。
-
-
-
-</p>
-
-<p>
- Android N でテストや開発を行う場合、プレビューのアップデートがリリースされるたびに<strong>開発環境を最新の状態に更新する</strong>ことを強くお勧めします。
-
-その際はテスト用の端末を Android ベータ版プログラムに登録して、マイルストーンごとに<strong>無線(OTA)でアップデート</strong>を取得するようにしておくと便利です。
-
-もしくはプレビュー イメージを手動でダウンロードして書き込むこともできます。
-
-</p>
-
-<p>
- プレビュー アップデートをご利用いただけるようになった際は <a href="http://android-developers.blogspot.com/">Android デベロッパー ブログ</a>、本サイト、<a href="{@docRoot}preview/dev-community">Android N デベロッパー コミュニティ</a>でお知らせします。
-
-
-</p>
-
-
-<h2 id="preview_tools">N Developer Preview の概要</h2>
-
-<p>
- N Developer Preview は、既存のアプリをさまざまな画面サイズ、ネットワーク テクノロジー、CPU や GPU チップセット、ハードウェア アーキテクチャでテストするために必要なものをすべて備えています。
-
-
-</p>
-
-<h3 id="sdk_tools">SDK ツール</h3>
-
-<p>各コンポーネントは <a href="{@docRoot}studio/intro/update.html">Android Studio</a> の SDK Manager を使ってダウンロードできます。</p>
-
-<ul>
- <li> N Developer Preview の <strong>SDK とツール</strong>
- <li> N Developer Preview の<strong>エミュレータ システム イメージ</strong>(32 ビット版と 64 ビット版)
- <li> N Developer Preview の <strong>Android TV 版エミュレータ システム イメージ</strong>(32 ビット版)
- <li> N Developer Preview サポート ライブラリ(新規アプリのテンプレート用)
-</ul>
-
-<p>
- 上記のツールは、必要に応じて各マイルストーンでアップデートします。
-</p>
-
-<h3 id="hardware_system_images">ハードウェアのシステム イメージ</h3>
-
-<p>
- N Developer Preview に含まれる Nexus などのハードウェアのシステム イメージを使用すると、実機でテストや開発ができます。
-ハードウェア イメージの一覧は、<a href="{@docRoot}preview/download.html">端末イメージ</a>のページでご確認ください。
-
-</p>
-
-<p>
- これらの端末用のシステム イメージは、各マイルストーンでアップデートします。アップデートされたシステム イメージは、何度でもダウンロードしてテスト用の端末に手動で書き込むことができます。
-
-自動化されたテスト環境では、繰り返し端末に再書き込みをする必要があるので、この方法は特に便利です。
-
-
-</p>
-
-<p class="note"><strong>注</strong>:
- 昨年のプレビュー版と同様に、<strong>手動で書き込みをした端末は OTA アップデートを取得できなくなります</strong>。
-そのため、今年は端末を Android ベータ版プログラムに登録して、OTA を取得するようにしてください。詳細は次のセクションに記載しています。
-
-</p>
-
-<h3 id="android_beta">Android ベータ版プログラムによる OTA アップデート</h3>
-
-<p>
- Android N は、新たに無線(OTA)アップデート プログラムに対応しています。このプログラムに登録している端末には、Android N の最新プレビュー版へのアップデートが直接自動配信されます。
-
-登録は無料で、Google アカウントに登録済みの対象端末を所有していれば誰でもご利用いただけます。
-
-</p>
-
-<p>
- このプログラムに登録するには、まず <a href="https://g.co/androidbeta">Android ベータ版プログラム</a>のサイトにアクセスします。
-このサイトには、Android ベータ版プログラムに登録可能なアカウントに登録済みの端末がすべて表示されます。
-
-
-</p>
-
-<ol>
- <li> Android N のアップデートを取得する端末を選択します。
- <li> [Enroll] をクリックして利用規約を読み、合意したら [OK] をクリックします。
-</ol>
-
-<p>
- 登録が完了すると、すぐに端末にアップデートが配信されます。ほとんどの場合、Android N に移行する際にデータのオールリセットは不要ですが、端末の登録前には大事なデータをバックアップしておくことをお勧めします。
-
-
-
-</p>
-
-<p>
- 端末にアップデートが配信されたら、できるだけ早めにダウンロードしてインストールするようにしてください。
-そうすることで常に最新のシステム UI や動作、API、さまざまな機能の変更点を把握できます。
-
-</p>
-
-<p>
- Developer Preview の終了時には、登録端末に Android N の正式リリース版へのアップデートが配信されます。
-
-</p>
-
-<p>
- 端末はいつでも Android ベータ版プログラムのサイトから Android ベータ版プログラムへの登録を解除できます。
-登録を解除する前には、端末のデータを必ずバックアップしておいてください。
-
-</p>
-
- <p class="note"><strong>注</strong>:
- 登録を解除すると、<strong>端末はファクトリー リセットされ</strong>、Android 6.0 Marshmallow の最新バージョンになります(端末を登録する前のバージョンに戻るとは限りません)。
-
-
-確実にクリーン インストールを行うため、連絡先やメッセージ、写真などの端末上のデータは削除されます。
-
-
-</p>
-
-<h3 id="documentation_and_sample_code">ドキュメントとサンプルコード</h3>
-
-<p>
- Developer Preview サイトにあるドキュメントで、Android N の詳細をご確認いただけます。
-
-</p>
-
-<ul>
- <li> <a href="{@docRoot}preview/setup-sdk.html">Android N 向けの開発準備</a>では、はじめの手順をステップごとに説明しています。
-
-</li>
- <li> <a href="{@docRoot}preview/behavior-changes.html">動作の変更点</a>には、集中的にテストを実施すべき箇所が記載されています。
-</li>
- <li> 新規 API に関するドキュメントには、<a href="{@docRoot}preview/api-overview.html">API 概要</a>、ダウンロード可能な <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API リファレンス</a>などが含まれています。また、マルチ ウィンドウのサポート、バンドル通知、マルチロケールのサポートなどの主要機能についての詳細なデベロッパー ガイドも含まれています。
-
-
-
- <li> <a href="{@docRoot}preview/samples.html">サンプルコード</a>では、パーミッションや他の新機能の使用方法を確認できます。
-
- <li> 現行バージョンの N Developer Preview の<a href="{@docRoot}preview/support.html#release-notes">リリースノート</a>では、変更履歴や差分レポートなどを確認できます。
-
-
-</ul>
-
-<h4 id="reference">ダウンロード可能な API リファレンス</h4>
-
-<p>
- 初期のプレビュー アップデートでは、<a href="{@docRoot}preview/setup-sdk.html#docs-dl">Android N プラットフォーム用の API リファレンス</a>の最新版を個別の zip アーカイブとしてダウンロードできます。
-
-このリファレンスには差分レポートも含まれているので、API 23 や以前のアップデートからの API の変更点をご確認いただけます。
-
-
-</p>
-
-<p>
- Android N の API が最終決定して正式な API レベルが割り当てられた時点で、API リファレンスを <a href="https://developer.android.com">https://developer.android.com</a> で公開します。
-
-</p>
-
-<h3 id="support_resources">
- サポート リソース
-</h3>
-
-<p>
- N Developer Preview のテスト中や開発中は、以下の方法で不具合の報告やフィードバックの送信を行ってください。
-
-</p>
-
-<ul>
- <li> <strong>主なフィードバック手段</strong>は、<a href="https://code.google.com/p/android-developer-preview/">N Developer Preview Issue Tracker</a> です。
-Issue Tracker を使うと、バグやパフォーマンスの問題、一般的なフィードバックを報告できます。
-さらに、<a href="{@docRoot}preview/bugs">既知の問題</a>や、その回避方法もご確認いただけます。
-
-報告いただいた問題は常に最新の情報に更新されるので、重要度が判定されたり、問題が Android エンジニア チームに引き継がれたことを確認できます。
- </li>
- <li> <a href="{@docRoot}preview/dev-community">Android N デベロッパー コミュニティ</a>は、Android N に携わっている<strong>デベロッパー同士がつながる</strong> Google+ のコミュニティです。Android N について意見交換をしたり、疑問点を解消したりする場としてご活用ください。Google はこのコミュニティを管理し、必要に応じて回答やアドバイスをします。
-
-
-
-</li>
-</ul>
-
-<h3 id="targeting">ターゲット、プレビュー API、公開</h3>
-
-<p>
- N Developer Preview では開発専用のシステムと、<strong>標準 API レベルを持たない</strong> Android ライブラリを提供します。
-アプリのテストで互換動作を除外する場合(強く推奨します)、アプリの <code><a href=
- "{@docRoot}preview/setup-sdk.html#create-update">targetSdkVersion</a></code> を <code>“N”</code> に設定することで Android N の プレビュー版を対象にすることができます。
-
-
-
-
-</p>
-
-<p>
- Android N Developer Preview では、<strong>プレビュー API</strong> を提供しています。この API は、2016 年の第 3 四半期に予定している最終版 SDK のリリースまで正式版ではありません。
-
-そのため、プログラム開始後の数週間は特に、<strong>軽微な API 変更が発生することが予想されます</strong>。
-
-変更点の概要については、Android N Developer Preview がアップデートされるたびにお知らせします。
-
-</p>
-
-<p class="note">
- <strong>注</strong>:プレビュー API は変更される可能性がありますが、システムの基幹にかかわる機能には変更はありませんので、すぐにテストしていただけます。
-
-
-</p>
-
-<p>
- Google Play では <strong>N Developer Preview を対象としたアプリの公開を禁止しています</strong>。
-Android N の最終版 SDK がリリースされてからは、正式な Android N の API レベルを対象にして、アルファ版またはベータ版のリリース チャンネルでアプリを Google Play に公開できます。
-
-それまでは、Android N 向けのアプリをテスターに配信する場合は、電子メールで送付するか、自身のサイトから直接ダウンロードしてもらうようにしてください。
-
-
-</p>
-
-<p>
- AOSP と OEM 向けの Android N のフルリリースは 2016 年度の第 3 四半期を予定しています。その後は、Android N 向けのアプリを Google Play の公式リリース チャンネルで公開いただけます。
-
-
-</p>
-
-
-<h2 id="how_to_get_started">開始するには</h2>
-
-<p>
- 以下の手順で Android N を使用したアプリのテストを開始できます。
-</p>
-
-<ol>
- <li> <a href="{@docRoot}preview/api-overview.html">API 概要</a>や<a href="{@docRoot}preview/behavior-changes.html">動作の変更点</a>を参照して、新機能や自身のアプリへの影響をご確認ください。
-
-特に新しい<a href="{@docRoot}preview/features/notification-updates.html">通知</a>機能と<a href="{@docRoot}preview/features/multi-window.html">マルチ ウィンドウ</a>機能について把握しておくことをお勧めします。
-
-</li>
- <li> <a href="{@docRoot}preview/setup-sdk.html">Preview SDK のセットアップ</a>手順に従い、ご利用の環境をセットアップしてテスト用端末の設定をします。
-</li>
- <li> <a href="https://developers.google.com/android/nexus/images">書き込み手順</a>に従い、最新の Android N のシステム イメージを自身の端末に書き込みます。
- </li>
- <li> <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API リファレンス</a>や <a href="{@docRoot}preview/samples.html">Android N のサンプル</a>を参考に API の新機能についてのインサイトを得て、それらを自身のアプリに利用する方法をご検討ください。
-
-
- <li> <a href="{@docRoot}preview/dev-community">Android N デベロッパー コミュニティ</a>に参加すると、最新のニュースを入手でき、新しいプラットフォームを利用している開発者同士で交流ができます。
-
-</li>
-</ol>
-
-<p>
- Android N Developer Preview プログラムへの参加をお待ちしています。
-</p>
diff --git a/docs/html-intl/intl/ja/preview/preview_toc.cs b/docs/html-intl/intl/ja/preview/preview_toc.cs
deleted file mode 100644
index 4b22608..0000000
--- a/docs/html-intl/intl/ja/preview/preview_toc.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-<ul id="nav">
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/overview.html" es-lang="Información general del programa" in-lang="Ikhtisar Program" ja-lang="プログラム概要" ko-lang="프로그램 개요" pt-br-lang="Visão geral do programa" ru-lang="Обзор программы" vi-lang="Tổng quan về Chương trình" zh-cn-lang="计划概览" zh-tw-lang="程式總覽">プログラム概要</a></div>
- </li>
-
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/support.html">サポートとリリースノート</a></div>
- </li>
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/setup-sdk.html" es-lang="Configurar el SDK de la versión preliminar" in-lang="Menyiapkan Preview" ja-lang="Preview SDK のセットアップ" ko-lang="미리 보기 SDK 설정하기" pt-br-lang="Configuração do Preview SDK" ru-lang="Настройка пакета SDK Preview" vi-lang="Kiểm thử trên Thiết bị" zh-cn-lang="设置预览版 SDK" zh-tw-lang="設定預覽版 SDK">Preview のセットアップ</a></div>
- </li>
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/download.html" es-lang="Pruebe en un dispositivo" in-lang="Menguji pada Perangkat" ja-lang="デバイス上でテストする" ko-lang="기기에서 테스트" pt-br-lang="Testar em um dispositivo" ru-lang="Тестирование на устройстве" vi-lang="Kiểm thử trên Thiết bị" zh-cn-lang="在设备上测试" zh-tw-lang="在裝置上測試">端末上でのテスト</a></div>
- </li>
-
-
- <li class="nav-section">
- <div class="nav-section-header"><a href="<?cs var:toroot ?>preview/behavior-changes.html" es-lang="Cambios en los comportamientos" in-lang="Perubahan Perilaku" ja-lang="動作の変更点" ko-lang="동작 변경" pt-br-lang="Mudanças de comportamento" ru-lang="Изменения в работе" vi-lang="Các thay đổi Hành vi" zh-cn-lang="行为变更" zh-tw-lang="行為變更">動作の変更点</a></div>
- <ul>
- <li><a href="<?cs var:toroot ?>preview/features/background-optimization.html" es-lang="Optimizaciones en segundo plano" in-lang="Optimisasi Latar Belakang" ja-lang="バックグラウンド処理の最適化" ko-lang="백그라운드 최적화" pt-br-lang="Otimizações em segundo plano" ru-lang="Оптимизация фоновых процессов" vi-lang="Tối ưu hóa Chạy ngầm" zh-cn-lang="后台优化" zh-tw-lang="背景最佳化">バックグラウンド処理の最適化</a></li>
- <li><a href="<?cs var:toroot ?>preview/features/multilingual-support.html" es-lang="Idioma y configuración regional" in-lang="Bahasa dan Lokal" ja-lang="言語とロケール" ko-lang="언어 및 로케일" pt-br-lang="Idioma e localidade" ru-lang="Язык и языковой стандарт" vi-lang="Ngôn ngữ và Bản địa" zh-cn-lang="语言和区域设置" zh-tw-lang="語言和地區設定">言語とロケール</a></li>
- </ul>
- </li>
-
- <li class="nav-section">
- <div class="nav-section-header"><a href="<?cs var:toroot ?>preview/api-overview.html" es-lang="Información general de la API" in-lang="Android N untuk Pengembang" ja-lang="API の概要" ko-lang="API 개요" pt-br-lang="Visão geral da API" ru-lang="Обзор API-интерфейсов" vi-lang="Android N cho Nhà phát triển" zh-cn-lang="API 概览" zh-tw-lang="API 總覽">Android N for Developers</a></div>
- <ul>
-
- <li><a href="<?cs var:toroot ?>preview/features/multi-window.html" es-lang="Compatibilidad con ventanas múltiples" in-lang="Dukungan Multi-Jendela" ja-lang="マルチ ウィンドウのサポート" ko-lang="다중 창 지원" pt-br-lang="Suporte a várias janelas" ru-lang="Поддержка многооконного режима" vi-lang="Hỗ trợ đa cửa sổ" zh-cn-lang="多窗口支持" zh-tw-lang="多視窗支援">マルチ ウィンドウのサポート</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/notification-updates.html" es-lang="Notificaciones" in-lang="Pemberitahuan" ja-lang="通知" ko-lang="알림" pt-br-lang="Notificações" ru-lang="Уведомления" vi-lang="Thông báo" zh-cn-lang="通知" zh-tw-lang="通知">通知</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/data-saver.html">データセーバー</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/tv-recording-api.html" es-lang="Grabación de TV" in-lang="Perekaman TV" ja-lang="TV の録画" ko-lang="TV 녹화" pt-br-lang="Gravação para TV" ru-lang="Запись ТВ" vi-lang="Ghi lại TV" zh-cn-lang="TV 录制" zh-tw-lang="電視錄製">TV の録画機能</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/security-config.html" es-lang="Configuración de seguridad de la red" in-lang="Network Security Configuration" ja-lang="ネットワーク セキュリティ構成" ko-lang="네트워크 보안 구성" pt-br-lang="Configurações de segurança de rede" ru-lang="Конфигурация сетевой безопасности" vi-lang="Cấu hình Bảo mật mạng" zh-cn-lang="网络安全配置" zh-tw-lang="網路安全性設定">ネットワーク セキュリティ構成</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/icu4j-framework.html" es-lang="API de ICU4J del framework de Android" in-lang="ICU4J Android Framework API" ja-lang="ICU4J Android フレームワーク API" ko-lang="ICU4J Android 프레임워크 API" pt-br-lang="APIs de estrutura do Android para ICU4J" ru-lang="API-интерфейсы ICU4J в платформе Android" vi-lang="API Khuôn khổ Android ICU4J" zh-cn-lang="ICU4J Android 框架 API" zh-tw-lang="ICU4J Android 架構 API">ICU4J のサポート</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/j8-jack.html" es-lang="Funciones del lenguaje Java 8" in-lang="Fitur Bahasa Java 8" ja-lang="Java 8 の機能" ko-lang="Java 8 언어 기능" pt-br-lang="Recursos de linguagem do Java 8" ru-lang="Возможности языка Java 8" vi-lang="Tính năng của Ngôn ngữ Java 8" zh-cn-lang="Java 8 语言功能" zh-tw-lang="Java 8 語言功能">Java 8 の言語機能</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/afw.html">Android for Work のアップデート</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/scoped-folder-access.html" es-lang="Acceso a directorios determinados" in-lang="Scoped Directory Access" ja-lang="特定のディレクトリへのアクセス" ko-lang="범위가 지정된 디렉터리 액세스" pt-br-lang="Acesso a diretórios com escopo" ru-lang="Доступ к выделенным каталогам" vi-lang="Truy cập Thư mục theo Phạm vi" zh-cn-lang="作用域目录访问" zh-tw-lang="限定範圍目錄存取">特定のディレクトリへのアクセス</a></li>
- </ul>
- </li>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/samples.html" es-lang="Ejemplos" in-lang="Contoh" ja-lang="サンプル" ko-lang="샘플" pt-br-lang="Exemplos" ru-lang="Примеры" zh-cn-lang="示例" zh-tw-lang="範例">サンプル</a></div>
- </li>
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/license.html" es-lang="Contrato de licencia" ja-lang="使用許諾契約" ko-lang="라이선스 계약" pt-br-lang="Contrato de licença" ru-lang="Лицензионное соглашение" zh-cn-lang="许可协议" zh-tw-lang="授權協議">使用許諾契約</a></div>
- </li>
-
-</ul>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ja/preview/samples.jd b/docs/html-intl/intl/ja/preview/samples.jd
deleted file mode 100644
index ec3f9f7d..0000000
--- a/docs/html-intl/intl/ja/preview/samples.jd
+++ /dev/null
@@ -1,85 +0,0 @@
-page.title=サンプル
-page.tags="preview", "samples", "android"
-page.image=images/cards/card-n-samples_2x.png
-@jd:body
-
-<p>
- 以下は Android N のサンプルコードです。サンプルを Android Studio でダウンロードするには、<b>[File] > [Import Samples]</b> メニュー オプションを選択します。
-
-
-</p>
-
-<p class="note">
- <strong>注:</strong>以下のダウンロード可能なプロジェクトは、Gradle と Android Studio でご利用いただくために提供しています。
-
-</p>
-
-
-<h3 id="mw">マルチ ウィンドウ Playground</h3>
-<img src="{@docRoot}preview/images/sample-multiwindow.png" style="float: left; padding-right: 0.5em" height="250" width="156" />
-<p>
- このサンプルでは、自身のアプリでマルチ ウィンドウのユーザー インターフェースを使用する方法をご確認いただけます。
-
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-MultiWindowPlayground">GitHub でサンプルを入手</a>
-
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="an">アクティブ通知</h3>
-<img src="{@docRoot}preview/images/sample-activenotifications.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
-<p>
- NotificationCompat を使用して通知を送信するシンプルなサービスをご確認いただける既存のサンプルです。
-ユーザーからの未読メッセージは、それぞれ別の通知として送信されます。
-
-</p>
-<p>
- このサンプルは、Android N 向けの新たな通知機能を利用できるようにアップデートされています。
-
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-ActiveNotifications">GitHub でサンプルを入手</a>
-
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="ms">メッセージ サービス</h3>
-<img src="{@docRoot}preview/images/sample-messagingservice.png" style="float: left; padding-right: 0.5em" height="250" width="150" />
-<p>
- 1 つのアプリで表示している通知の件数を NotificationManager で取得する方法をご確認いただける既存のサンプルです。
-
-
-</p>
-<p>
- このサンプルは、Android N 向けの新たな通知機能を利用できるようにアップデートされています。
-
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-MessagingService">GitHub でサンプルを入手</a>
-
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="fbe">ダイレクト ブート</h3>
-<img src="{@docRoot}preview/images/sample-directboot.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
-<p>
- このサンプルでは、端末の暗号化ストレージ内のデータにアクセスしたり、データを保存したりする方法をご確認いただけます。この機能は端末が起動している間は常に有効です。
-
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-DirectBoot">GitHub でサンプルを入手</a>
-
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="sda">特定のディレクトリへのアクセス</h3>
-<img src="{@docRoot}preview/images/sample-scopeddirectoryaccess.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
-<p>
- このサンプルでは、より少ないパーミッションで、特定のディレクトリに対するデータの読み出しや書き込みを行う方法をご確認いただけます。
-
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-ScopedDirectoryAccess">GitHub でサンプルを入手</a>
-
-</p>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ja/preview/setup-sdk.jd b/docs/html-intl/intl/ja/preview/setup-sdk.jd
deleted file mode 100644
index 06b24ca..0000000
--- a/docs/html-intl/intl/ja/preview/setup-sdk.jd
+++ /dev/null
@@ -1,187 +0,0 @@
-page.title=Preview のセットアップ
-meta.keywords="preview", "android"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-sdk_2x.png
-
-@jd:body
-
-
-<div id="qv-wrapper">
- <div id="qv">
-<ol>
- <li><a href="#get-as13">Android Studio 2.1 を入手する</a></li>
- <li><a href="#get-sdk">Android N SDK を入手する</a>
- <ol>
- <li><a href="#docs-dl">リファレンス ドキュメント</a>
- </ol>
- </li>
- <li><a href="#java8">Java 8 JDK を入手する</a></li>
- <li><a href="#create-update">プロジェクトをアップデートまたは作成する</a></li>
- <li><a href="#next">次のステップ</a></li>
-</ol>
- </div>
-</div>
-
-<p>このページで説明しているように、Android N Preview 向けのアプリを開発するには、デベロッパー環境をアップデートする必要があります。
-</p>
-
-<p>Android N システム イメージでアプリの互換性を簡単にテストするには、<a href="{@docRoot}preview/download.html">Android N 端末でのテスト</a>に関するガイドに従ってください。
-</p>
-
-<img src="{@docRoot}preview/images/n-preview-setup.png" width="700" alt="" />
-
-
-<h2 id="get-as13">Android Studio 2.1 を入手する</h2>
-
-<p>Android N プラットフォームには、Jack と呼ばれる新しいコンパイラーが必要な <a href="{@docRoot}preview/j8-jack.html">Java 8 の言語機能</a>のサポートが追加されています。
-現在、最新バージョンの Jack は、Android Studio 2.1 のみでサポートされています。したがって、Java 8 の言語機能を使用する場合は、Android Studio 2.1 を使用してアプリをビルドする必要があります。
-
-
-それ以外の合は、Jack コンパイラーを使用する必要はありません。ただし、以下に説明するように、Android N プラットフォームに対応する設定でコンパイルを行うには、JDK 8 にアップデートする必要があります。
-
-</p>
-
-<p>既に Android Studio がインストールされている場合は、<strong>[Help] > [Check for Update]</strong>(Mac では、<strong>[Android Studio] > [Check for Updates]</strong>)をクリックして、Android Studio 2.1 以上であることを確認してください。
-
-</p>
-
-<p>Android Studio 2.1 以上がない場合は、<a href="{@docRoot}studio/">こちらから Android Studio 2.1 をダウンロード</a>してください。
-</p>
-
-
-<h2 id="get-sdk">N Preview SDK を入手する</h2>
-
-<p>Android N API を使用して開発を開始するには、次のステップに従って、Android Studio に Android N Preview SDK をインストールする必要があります。
-</p>
-
-<ol>
- <li><strong>[Tools] > [Android] > [SDK Manager]</strong> をクリックして、SDK Manager を開きます。
-</li>
-
- <li>[<strong>SDK Platforms</strong>] タブで、[<strong>Android N Preview</strong>] チェックボックスをオンにします。
-</li>
-
- <li>[<strong>SDK Tools</strong>] タブをクリックして、[<strong>Android SDK Build Tools</strong>]、[<strong>Android SDK Platform-Tools</strong>]、[<strong>Android SDK Tools</strong>] のチェック ボックスをオンにします。
-
-
-
- </li>
-
- <li>[<strong>OK</strong>] をクリックして、インストールするパッケージの使用許諾に同意します。
-
- </li>
-</ol>
-
-<h3 id="docs-dl">N Preview のリファレンス ドキュメントを入手する</h3>
-
-<p>
- Android N API に関する詳細は、N Preview のリファレンス ドキュメントに記載されています。このドキュメントは、次の表からダウンロードできます。
-
- このパッケージには、簡略化されたオフライン バージョンの Android デベロッパー ウェブサイト、Android N API のアップデートされた API リファレンス、API の比較レポートが含まれています。
-
-
-</p>
-
-<table>
- <tr>
- <th scope="col">ドキュメント</th>
- <th scope="col">チェックサム</th>
- </tr>
- <tr>
- <td style="white-space: nowrap">
- <a href="{@docRoot}shareables/preview/n-preview-3-docs.zip">n-preview-3-docs.zip</a></td>
- <td width="100%">
- MD5:19bcfd057a1f9dd01ffbb3d8ff7b8d81<br>
- SHA-1:9224bd4445cd7f653c4c294d362ccb195a2101e7
- </td>
- </tr>
-<table>
-
-
-
-<h2 id="java8">Java 8 JDK を入手する</h2>
-
-<p>Android N プラットフォームに対応する設定でアプリをコンパイルしたり、Android Studio 2.1 でいくつかのツールを使用したりするには、Java 8 Developer Kit(JDK 8)をインストールする必要があります。
-したがって、最新バージョンを持っていない場合は、すぐに JDK 8 をダウンロードしてください。
-</p>
-
-<p>その後、次のステップに従って Android Studio で JDK のバージョンを設定します。</p>
-
-<ol>
- <li>Android Studio で Android プロジェクトを開いてから、<strong>[File] > [Project Structure]</strong> を選択して、[Project Structure] ダイアログを開きます
-
-(または、<strong>[File] > [Other Settings] > [Default Project Structure]</strong> を選択すると、すべてのプロジェクトの既定値を設定できます)。
-
-
- </li>
- <li>ダイアログの左側のパネルで、[<strong>SDK Location</strong>] をクリックします。
- </li>
- <li>[<strong>JDK Location</strong>] 項目に Java 8 JDK の場所を入力し(ファイルをブラウジングするには、右側のボタンをクリックします)、[<strong>OK</strong>] をクリックします。
-
-
- </li>
-</ol>
-
-<img src="{@docRoot}preview/images/studio-jdk-location.jpg" width="700" alt="" />
-
-
-<h2 id="create-update">プロジェクトをアップデートまたは作成する</h2>
-
-<p>
- Android N API を使用するには、プロジェクトが適切に構成されている必要があります。
-</p>
-
-<p>Java 8 機能の使用を計画している場合は、<a href="{@docRoot}preview/j8-jack.html">Java 8 機能</a>を読んで、サポートされる Java 8 機能に関する情報と、プロジェクトで Jack コンパイラーを設定する方法を確認してください。
-
-
-</p>
-
-
-<h3 id="update">既存のプロジェクトをアップデートする</h3>
-
-<p>モジュールの <code>build.gradle</code> ファイルを開き、次のように値をアップデートします。
-
-
-</p>
-
-<pre>
-android {
- compileSdkVersion <strong>'android-N'</strong>
- buildToolsVersion <strong>'24.0.0-rc3'</strong>
- ...
-
- defaultConfig {
- minSdkVersion <strong>'N'</strong>
- targetSdkVersion <strong>'N'</strong>
- ...
- }
- ...
-}</pre>
-
-
-<h3 id="create">新しいプロジェクトを作成する</h3>
-
-
-<p>Android N Preview SDK を使って、開発のために新しいプロジェクトを作成するには、次のステップを実行します。</p>
-
-<ol>
- <li><strong>[File] > [New Project]</strong> をクリックし、対象とする Android 端末のページに到達するまでのステップを実行します。
-
- </li>
- <li>このページで、[<strong>Phone and Tablet</strong>] オプションを選択します。</li>
- <li>[<strong>Phone and Tablet</strong>] オプションの下にある [<strong>Minimum SDK</strong>] オプション リストで、[<strong>N:
-
-Android API 23, N Preview (Preview)</strong>] を選択します。</li>
-</ol>
-
-
-<h2 id="next">次のステップ</h2>
-
-<ul>
- <li><a href="{@docRoot}preview/download.html">Android N 端末でのテスト</a>に関するガイドに従ってください。</li>
- <li>Android N プラットフォームの詳細については、<a href="{@docRoot}preview/behavior-changes.html">動作の変更点</a>と <a href="{@docRoot}preview/api-overview.html">Android N API とその機能</a>をご覧ください。
-
-
-</li>
-</ul>
-
diff --git a/docs/html-intl/intl/ja/preview/support.jd b/docs/html-intl/intl/ja/preview/support.jd
deleted file mode 100644
index bda763d..0000000
--- a/docs/html-intl/intl/ja/preview/support.jd
+++ /dev/null
@@ -1,1188 +0,0 @@
-page.title=サポートとリリースノート
-meta.keywords="preview", "android"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-support_2x.png
-
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>このドキュメントの内容</h2>
-
-<ul>
- <li><a href="#dp3">Developer Preview 3</a>
- <ul>
- <li><a href="#general">一般的な注意事項</a></li>
- <li><a href="#new">DP3 の新機能</a></li>
- <li><a href="#ki">既知の問題</a></li>
- </ul>
- </li>
- <li><a href="#dp2">Developer Preview 2</a></li>
- <li><a href="#dp1">Developer Preview 1</a></li>
-</ul>
-
-<!--
-<h2>See Also</h2>
-<ol>
- <li></li>
-</ol>
--->
-
-</div>
-</div>
-
-<p>
- Android N Developer Preview で開発およびテストするときは、2 つの主なサポート チャンネルを使用できます。
-端末固有、システム、Google アプリのバグについては、<a href="https://developer.android.com/preview/bug">https://developer.android.com/preview/bug</a> で報告してください。
-他のアプリの問題については、デベロッパーに直接お問い合わせください。
-
-</p>
-
-<p>Android N に携わっている他のデベロッパーと問題やアイデアについて議論するには、<a href="{@docRoot}preview/dev-community">Developer Preview Google+ コミュニティ</a>にご参加ください。
-</p>
-
-<h2 id="dp3">Developer Preview 3</h2>
-
-<div class="wrap">
- <div class="cols">
- <div class="col-6of12">
- <p>
- <em>日付:2016 年 5 月<br>
- ビルド:NPD35K<br>
- エミュレータ サポート: x86 と ARM(32 / 64 ビット)<br>
- Google Play services:8.4</em>
- </p>
- </div>
- </div>
-</div>
-
-<h3 id="general">一般的な注意事項</h3>
-
-<p>
- この Developer Preview リリースは、<strong>アプリのデベロッパーやその他の初期導入者</strong>を対象とし、日常的な使用、開発、互換性テストに使用できます。
-
-このリリースに関する次の一般的な事項に注意してください。
-
-</p>
-
-<ul>
- <li>このリリースでは、サポート対象端末でさまざまな<strong>安定性に関する問題</strong>が発生する可能性があります。
-カーネルパニックやクラッシュなど、システムが不安定になる可能性があります。
-
- </li>
-
- <li>一部のアプリは、新しいプラットフォーム バージョンで<strong>期待どおりに動作しない可能性があります</strong>。
-これには、Google のアプリやその他のアプリが含まれます。
- </li>
-
- <li>Developer Preview 3 は、次の端末で <strong>互換性テストスイート(CTS)の承認</strong>を得ています。
-Nexus 5X、Nexus 6、Nexus 6P、Pixel C。CTS 承認済みビルドに依存するアプリは、これらの端末で正常に動作します(Android Pay など)。
-
-
- </li>
-
- <li>Developer Preview 3 は、<strong>次のすべてのサポート対象端末で利用できます</strong>。
-Nexus 5X、Nexus 6、Nexus 6P、Nexus 9、Nexus Player、Pixel C、General Mobile 4G(Android One)、Sony Xperia Z3(D6603 と D6653 モデル)。
-
-
-
- </li>
-</ul>
-
-
-<h3 id="new">DP3 の新機能</h3>
-
-<h4 id="">Android 用 VR モード</h4>
-
-<p>
- Android N には、新しい VR モードのためのプラットフォーム サポートと最適化が追加され、デベロッパーは高品質のモバイル端末 VR エクスペリエンスをユーザーのために生み出すことができます。
-多数のパフォーマンス強化があり、VR アプリ用の CPU コアへの排他アクセスが含まれます。
-
-アプリでは、VR 用に動作するインテリジェントなヘッド トラッキングやステレオ方式の通知を利用できます。
-最も重要な点は、Android N によって大幅に遅延の少ないグラフィックが実現されることです。
-
-</p>
-
-<p>
- 詳細については、<a href="https://developers.google.com/vr/android/">Google VR SDK for Android</a> をご覧ください。
-</p>
-
-<h4 id="">パフォーマンス維持モード</h4>
-
-<p>
- Android N には、<a href="{@docRoot}preview/api-overview.html#sustained_performance_api">パフォーマンス維持モード</a>のオプション サポートが含まれており、OEM は長時間実行されているアプリの端末パフォーマンス機能に関するヒントを示すことができます。
-
-アプリのデベロッパーは、これらのヒントを使用して、長時間にわたって予測可能で一貫性のあるレベルの端末のパフォーマンスを維持できるようにアプリを調整できます。
-
-アプリのデベロッパーが Developer Preview でこの新しい API を試すことができるのは、Nexus 6P 端末上でのみです。
-
-</p>
-
-<h4>Multiprocess WebView</h4>
-
-<p>
- Android N のバージョン 51 以降は、デベロッパー オプションの [Multiprocess WebView] が有効になっている場合、WebView は別のサンドボックス プロセスでウェブ コンテンツを実行します。
-
-WebView チームは、将来のバージョンの Android で Multiprocess WebView を有効にする前に、N での互換性やランタイム パフォーマンスに関するフィードバックを求めています。
-
-このバージョンでは、スタートアップ時間、メモリ使用量の合計、ソフトウェア レンダリング パフォーマンスの低下が予想されます。
-
-</p>
-
-<p>
- マルチプロセス モードで予想外の問題が見つかった場合は、ご報告ください。
-<a href="https://bugs.chromium.org/p/chromium/issues/entry?template=Webview%20Bugs">バグを報告</a>して WebView チームにご連絡ください。
-
-</p>
-
-<h4 id="">キーボード ショートカット ヘルパー</h4>
-
-<p>
- Android N では、ユーザーは <code>Meta+/</code> キーを押して<strong>キーボード ショートカット</strong>画面をトリガーできます。この画面には、システムとアプリから使用できるすべてのショートカットが表示されます。
-
-デベロッパーは、独自のショートカットを追加したり、アプリからショートカット画面をトリガーしたりできます。
-詳細については、<a href="{@docRoot}preview/api-overview.html#keyboard_shortcuts_helper">キーボード ショートカット ヘルパー</a>をご覧ください。
-
-</p>
-
-<h4 id="">FrameMetrics API</h4>
-
-<p>
- DP3 で導入された新しい <a href="{@docRoot}preview/api-overview.html#framemetrics_api">FrameMetrics API</a> により、アプリでその UI レンダリング パフォーマンスを監視できます。この機能は、アプリの現在のウィンドウのフレーム タイミング情報を転送するストリーミング pubsub API を公開することによって実現されます。<code>FrameMetricsListener</code> を使用して、より高い粒度で、USB 接続の必要なく、本番環境のインタラクション レベルの UI パフォーマンスを計測できます。
-
-
-
-
-
-</p>
-
-<h4 id="api-changes">機能と API の変更</h4>
-
-<dl>
- <dt>
- ランチャー ショートカットとランチャー ショートカットの API
- </dt>
-
- <dd>
- この機能は、Android の将来のリリースまで延期することを決定しました。次の Developer Preview 以降、公開 Android N API から、ランチャー ショートカットの API(ShortcutManager など)を削除することを計画しています。
-
-
- </dd>
-
- <dt>
- ページを読み込む前に WebView Javascript が実行される
- </dt>
-
- <dd>
- Android N 向けのアプリ以降、新しいページが読み込まれるときに、Javascript コンテキストがリセットされます。
-現在、コンテキストは、新しい {@link android.webkit.WebView} インスタンスで、最初に読み込まれるページに持ち越されます。
-
- Javascript を {@link
- android.webkit.WebView} に注入する予定のデベロッパーの方は、ページの読み込みが開始した後にスクリプトが実行されるようにしてください。
-
- </dd>
-
- <dt>
- 安全でないオリジンでの WebView の位置情報
- </dt>
-
- <dd>
- Android N 向けのアプリ以降、位置情報 API は安全なオリジン(HTTPS 経由)でのみ許可されます。
-このポリシーは、ユーザーが安全でない接続を使用しているときにユーザーの個人情報を保護するために設計されています。
-
- </dd>
-
- <dt>
- データセーバー
- </dt>
-
- <dd>
- Developer Preview 3 以降、アプリで、システム ダイアログを表示するためのインテントを使用できます。これにより、ユーザーはデータセーバーの免除ホワイトリストに直接アプリを追加できます。
-
-詳細については、<a href="{@docRoot}preview/api-overview.html#data_saver">データセーバーのドキュメント</a>をご覧ください。
-
- </dd>
-
- <dt>
- <a href="{@docRoot}preview/api-overview.html#number-blocking">迷惑電話のブロック</a>
- </dt>
-
- <dd>
- 許可されていないユーザーが番号をブロックまたはブロック解除しようとした場合、現在は {@link java.lang.SecurityException} が発生してエラーになります。
-以前は、{@link java.lang.UnsupportedOperationException} がスローされていました。
-
- </dd>
-
- <dt>
- <a href="{@docRoot}preview/api-overview.html#tile_api">クイック設定タイル API</a>
-
- </dt>
-
- <dd>
- 現在は、タイルモードの決定に、アクティビティのメタデータが使用されます。
- 以前は、タイルモードは <code>TileService.onTileAdded()</code> の戻り値によって決定されていました。
-詳細については、ダウンロード可能な <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API リファレンス</a>の <code>TileService.META_DATA_ACTIVE_TILE</code> をご覧ください。
-
- </dd>
-</dl>
-
-<h4 id="dp3-fixes">デベロッパーから報告された問題の修正</h4>
-
-<p>
- 次のものを含めて、デベロッパーから報告された問題が修正されました。
-</p>
-
-<ul>
- <li>Bluetooth 音声の再生が、1 曲の後で中断される(バグ <a href="https://code.google.com/p/android/issues/detail?id=206889">206889</a>)
- </li>
-
- <li>Pixel C が一貫してクラッシュする(バグ <a href="https://code.google.com/p/android/issues/detail?id=206962">206962</a>)
- </li>
-
- <li>時計とトーストの通知の問題(バグ <a href="https://code.google.com/p/android/issues/detail?id=203094">203094</a>)
- </li>
-
- <li>Pixel C を USB C ケーブル経由で MacBook Pro に接続すると、再起動します。(バグ <a href="https://code.google.com/p/android/issues/detail?id=205432">205432</a>)
-
- </li>
-
- <li>カレンダーの設定が 1 日オフセットされる(バグ <a href="https://code.google.com/p/android/issues/detail?id=203002">203002</a>)
- </li>
-
- <li>TelephonyManager.getAllCellInfo から無効なデータが戻される(バグ <a href="https://code.google.com/p/android/issues/detail?id=203022">203022</a>)
- </li>
-
- <li>Nexus 6p、Bluetooth が頻繁に接続しなくなる(バグ <a href="https://code.google.com/p/android/issues/detail?id=208062">208062</a>)
- </li>
-</ul>
-
-<p>修正された問題の一覧は、<a href="https://goo.gl/6uCKtf">Issue Tracker</a> をご覧ください。
-</p>
-
-<h3 id="ki">既知の問題</h3>
-
-<h4>ユーザー補助機能</h4>
-
-<ul>
- <li>ピッチを最大レベルに近く設定すると、TTS 出力が聞こえません。
- </li>
-
- <li>ユーザーがズーム操作や設定などの仕事用プロファイルを追加すると、ユーザー補助機能と設定が妨げられます。
-ユーザー補助機能に関連する設定を、ユーザーが後で操作すると、ユーザー補助機能の状態が復元されます。
-
- </li>
-</ul>
-
-<h4>カメラ</h4>
-
-<ul>
- <li>カメラアプリの動作が不安定で、マルチ ウィンドウ モードで起動したときなど、さまざまな状況でクラッシュします。
-
- </li>
-
- <li>パノラマモードでシャッターを続けて押すと、カメラアプリがクラッシュすることがあります。
-
- </li>
-</ul>
-
-<h4>音声</h4>
-<ul>
- <li>プラットフォームの音楽プレーヤーの問題により、一部のアプリが正常に動作しません。
-たとえば、Skype その他のアプリがこの問題の影響を受けます。
- </li>
-</ul>
-
-<h4>接続</h4>
-
-
-<ul>
- <li>Bluetooth Low Energy(BLE)周辺ロール端末がサービスをアドバタイズし、BLE セントラル ロール端末が接続すると、周辺ロール端末の接続が即座に切断されます。
-
-
- </li>
-
- <li>画面がオフになっているときに、Wi-Fi 接続が切れることがあります。
- </li>
-
- <li>RFCOMM 接続が不安定で、データが破損したり、接続が混乱することがあります。
-
- </li>
-
- <li>一部の制限された背景シナリオにおいて、アクティブ ネットワーク状態({@link android.net.NetworkInfo#getState
- NetworkInfo.getState()} と {@link android.net.NetworkInfo#getDetailedState
- NetworkInfo.getDetailedState()})によって、誤った値が戻されることがあります。
-
- </li>
-</ul>
-
-
-<h4>
- ランチャー
-</h4>
-
-<ul>
- <li>画面のオンとオフを切り替えた後、既定のランチャーの [All Apps] トレイが応答しなくなることがあります。
-この問題は、ホーム画面に戻り、[All Apps] トレイを再起動することで解決する場合があります。
-
- </li>
-</ul>
-
-<h4>
- キーボード
-</h4>
-
-<ul>
- <li>Android 6.0 以前を実行する端末を N Developer Preview にアップデートすると、Google キーボードで、絵文字やサウンド設定などの設定が保持されません。
-
-
- </li>
-
- <li>Google Indic Managed キーボードが不安定になることがあります。
- </li>
-
- <li>パスワード項目にテキストを入力するとき、ユーザーは入力言語としてロシア語を選択できるにもかかわらず、キーボードは英語のままになります。
-このため、ユーザーはロシア語のパスワードを入力できません。
-
- </li>
-</ul>
-
-<h4>
- ロケールと言語
-</h4>
-
-<ul>
- <li>右から左(RTL)のロケールを使用しているとき、端末を再起動した後に、システムが予期せず左から右(LTR)の表示に切り替わることがあります。
-
- </li>
-</ul>
-
-<h4>メディア</h4>
-
-<ul>
- <li>Nexus 9 と Nexus Player のメディア再生の信頼性が低くなり、HD 動画の再生の問題も発生します。
-
- </li>
-</ul>
-
-<h4>
- マルチ ウィンドウ モード
-</h4>
-
-<ul>
- <li>マルチ ウィンドウ モードで画面の向きを変えているときに端末がフリーズすることがあります。
- </li>
-
- <li>現在、複数のアプリにマルチ ウィンドウ モードの問題があります。
- <ul>
- <li>マルチ ウィンドウで [Settings] > [Display] > [Screen brightness] をドッキングしているときに、システム UI がクラッシュすることがあります。
-
- </li>
-
- <li>カメラアプリをマルチ ウィンドウ モードで起動すると、クラッシュすることがあります。
- </li>
-
- <li>YouTube をマルチ ウィンドウ モードで起動すると、クラッシュすることがあります。[Storage] > [Apps] > [YouTube] で YouTube アプリのデータをクリアすると、この問題を修正できることがあります。
-
-
- </li>
- </ul>
- </li>
-</ul>
-
-<h4>
- Google Play services
-</h4>
-
-<ul>
- <li>ユーザーが ASCII 範囲外の文字や数字を使用するシステム ロケールを選択した場合に、Google Play services 経由で Google Cast を使用するアプリが不安定になることがあります。
-
-
- </li>
-</ul>
-
-<h4>
- Android for Work と Google Apps のデバイス ポリシー
-</h4>
-
-<ul>
- <li>[device policy status] 画面を固定した状態で、ユーザーが端末のロックを解除すると、デバイス ポリシー アプリがクラッシュすることがあります。
-
- </li>
-
- <li>ファイルベースの暗号化を有効にして仕事用プロファイルをセットアップした後で Work をオフにした場合、再度 Work アプリにアクセスするには、ユーザーはプライマリ プロファイル画面ロックを解除する必要があります。
-
-
- </li>
-
- <li>セキュリティ パターン ロックを削除し、仕事用または個人用のアプリをマルチ ウィンドウで開くと、端末が再起動します。
-
- </li>
-
- <li>DISALLOW_VPN_CONFIG を設定すると、デバイス ポリシー クライアントによって always-on-vpn に設定され、同意を求めるダイアログが表示されます。
-
- </li>
-
- <li>VPN が always-on-vpn モードで接続されるまで、トラフィックがロックダウンされません。
- </li>
-</ul>
-
-<h4>
- 外部ストレージ
-</h4>
-
-<ul>
- <li>ユーザーがアプリを内部ストレージから適用可能な外部ストレージ(SD カードや USB 接続された端末など)に移動した場合に、そのアプリが不安定になることがあります。
-
-
- </li>
-</ul>
-
-<h4>
- Google Play での画面ズームと複数の APK
-</h4>
-
-<ul>
- <li>Android N を実行する端末で、Google Play services 9.0.83 によって、安定した画面密度ではなく、現在の画面密度が誤って報告されます。
-これらの端末で画面ズームが有効になっていると、このことによって、より小さい画面向けに設計されたマルチ APK アプリのバージョンが Google Play によって選択されることがあります。
-
-この問題は、Google Play services の次のバージョンで修正され、その後の Developer Preview リリースに含められます。
-
-
- </li>
-
- <li>Android N を実行する端末で、現在、Google Play services 9.0.83 によって、Vulkan バージョンではなく、Vulkan サポートが報告されます。
-このことによって、より高いバージョンがサポートされた端末で、より低いバージョンの Vulkan サポート向けに設計されたマルチ APK アプリのバージョンが Google Play によって選択されることがあります。
-
-現在、Google Play ストアでは、Vulkan バージョンのターゲットを使用するアプリのアップロードは受け入れていません。
-このサポートは将来 Google Play Store に追加され、次のバージョンの Google Play services で修正されます(その後の Developer Preview リリースに含められます)。Google Play services 9.0.83 のバージョンを使用するすべての N 端末は、基本的な Vulkan サポートをターゲットとするアプリのバージョンを引き続き受信します。
-
-
-
-
- </li>
-</ul>
-
-<h4 id="">通知</h4>
-
-<ul>
- <li>MessagingStyle に、送信者が null(自分)の通知が表示されません。
- </li>
-</ul>
-
-<h4 id="">デベロッパー ツール</h4>
-
-<ul>
- <li>
- JDWP デバッグを使用している間に、<code>adb</code> の接続が切断されることがあります。
- </li>
-</ul>
-
-<!-- TBA, if any
-<h4>Device-specific issues</h4>
-
-<dl>
- <dt>
- <strong>Device Name</strong>
- </dt>
-
- <dd>
- Issue 1
- </dd>
-
- <dd>
- Issue 2
- </dd>
-</dl>
-
--->
-
-
-
-
-
-
-
-<!-- DP2 Release Notes Archive -->
-
-<h2 id="dp2">Developer Preview 2</h2>
-
-<div class="wrap">
- <div class="cols">
- <div class="col-6of12">
- <p>
- <em>日付:2016 年 4 月<br>
- ビルド:NPC91K、NPC91O<br>
- エミュレータ サポート: x86 と ARM(32 / 64 ビット)<br>
- Google Play services:8.4</em>
- </p>
- </div>
- </div>
-</div>
-
-<h3 id="dp2-new">DP2 の新機能</h3>
-
-<ul>
- <li>Vulkan のプラットフォーム サポートである、新しい 3D レンダリング API により、GPU(Graphics Processor Unit)を明示的に、かつ少ないオーバーヘッドで制御でき、ドローコールの多いアプリのパフォーマンスが向上しています。
-
-詳細については、<a href="{@docRoot}ndk/guides/graphics/index.html">ドキュメント</a>をご覧ください。
-
- </li>
-
- <li>新しい連絡帳アプリの絵文字では、肌色と、新しい Unicode 9 のグリフがサポートされます。
- 肌色と新しい絵文字は、キーボードのビルドにパレット内でのこれらに対するサポートが備えられるまで、表示されません。
-非システム フォントを使用するアプリを除き、アプリでこれらの新しい絵文字を利用するための操作は必要ありません。
-IME のデベロッパーは新しい絵文字のサポートを組み込む必要があります。
-
- </li>
-
- <li>
- <a href="{@docRoot}preview/api-overview.html#launcher_shortcuts">ランチャー ショートカットの API</a>:
-アプリでは <code>ShortcutManager</code> を使用して、それ自体の中の開始点へのショートカットを、ランチャーに送信できます。
-
- </li>
-
- <li>
- <a href="{@docRoot}preview/features/multi-window.html">マルチ ウィンドウ</a>:
- アクティビティに対して個別に最小の高さと幅を指定できるようになりました。
-さらに、複数の API の名前が少し変更されました。
- </li>
-</ul>
-
-<h4 id="dp2-fixes">デベロッパーから報告された問題の修正</h4>
-
-<p>
- 次のものを含めて、デベロッパーから報告された問題が修正されました。
-</p>
-
-<ul>
- <li>隠された SSID や、非ブロードキャスト Wi-Fi に接続できません。(バグ <a href="https://code.google.com/p/android/issues/detail?id=203116">203116</a>)
- </li>
-
- <li>マイクのミュート状態がアクティビティをまたいで保持されます。(バグ <a href="https://code.google.com/p/android/issues/detail?id=205922">205922</a>)
- </li>
-
- <li>マルチ ウィンドウのフォーカスを変更すると、YouTube が停止します。(バグ <a href="https://code.google.com/p/android/issues/detail?id=203424">203424</a>)
- </li>
-
- <li>ダイレクト リプライによって、開かれているアクティビティが閉じられることがあります。(バグ <a href="https://code.google.com/p/android/issues/detail?id=204411">204411</a>)
- </li>
-
- <li>安定性に関するさまざまな修正。
- </li>
-</ul>
-
-<h3 id="dp2-general">一般的な注意事項</h3>
-
-<p>
- この Developer Preview リリースは、<strong>アプリのデベロッパーのみ</strong>を対象とし、互換性テストと初期の開発のみで使用するために開発されています。
-
- このリリースに関する次の一般的な事項に注意してください。
-</p>
-
-<ul>
-
- <li>DP2 リリースで、開発ツールのコンポーネントとサポート ライブラリがアップデートされました。
-DP2 のための開発を行う前に、Preview 開発環境をアップデートしてください。
-開発環境のセットアップの手順については、<a href="{@docRoot}preview/setup-sdk.html">Preview のセットアップ</a>をご覧ください。
-
-
- </li>
-
- <li>このリリースには、すべての端末における安定性とパフォーマンスに関するさまざまな問題があるため、特に、デベロッパー以外の方が、<strong>スマートフォンやタブレットで日常的に使用することには適していません。</strong>
-
-
- </li>
-
- <li>このリリースでは、電池寿命とパフォーマンスがまだ最適化されていません。
-
-
- <ul>
- <li>システムとアプリの<strong>パフォーマンスが、定期的に遅くなるか、不自然になることがわかっており</strong>、端末が応答しなくなることがあります。
-これらの問題は、使用時間が長くなると、より深刻化します。
-
- </li>
-
- <li>このリリースでは、画面のオンとオフのユースケースで電池寿命が短くなることがあります。
-
- </li>
- </ul>
- </li>
-
- <li>Developer Preview 2 で、一部の<strong>アプリが正常に機能しないことがあります</strong>。これには Google のアプリと、その他のアプリが含まれます。
-
- </li>
-
- <li>この早期のビルドは、<strong>互換性テストスイート(CTS)で承認されていません</strong>。
-CTS 承認済みビルドに依存するアプリは動作しません(Android Pay など)。
-
- </li>
-
- <li>このプレビュー リリースでは、次の端末をサポートしています。Nexus 5X、Nexus 6、Nexus 6P、Nexus 9、Pixel C、および General Mobile 4G(Android One)
-
-Nexus Player は近い将来サポートされます。
- </li>
-
-
- <li>DP1 と DP2 の間の API の変更に対処するために、<a href="https://github.com/googlesamples/android-testdpc/releases">TestDPC</a> がアップデートされました。
-
- </li>
-</ul>
-
-<h3 id="dp2-ki">既知の問題</h3>
-
-<h4>パフォーマンスと電池</h4>
-
-<ul>
- <li>システムとアプリのパフォーマンスが、<strong>定期的に遅くなるか、不自然になる</strong>ことがわかっており、端末が応答しなくなることがあります。
-これらの問題は、使用時間が長くなると、より深刻化します。
-
- </li>
-</ul>
-
-<h4>Google アカウント</h4>
-
-<ul>
- <li>一部の状況において、<code>AccountManagerService</code> によって Google アカウントにログインできなくなる問題が発生することがあります。
-
- </li>
-</ul>
-
-<h4>システムアップデート</h4>
-
-<ul>
- <li>DP2 にアップデートすると、即座に端末が再起動します。
- </li>
-</ul>
-
-<h4>ユーザー補助機能</h4>
-
-<ul>
- <li>ピッチを最大レベルに近く設定したときの、テキスト読み上げ(TTS)出力が聞こえない問題。
-
- </li>
-</ul>
-
-<h4>Bluetooth</h4>
-
-<ul>
- <li>Bluetooth Low Energy(LE)GATT 特性によって、誤った書き込みタイプが使用され、リモート端末に送信されません。
-これにより、一部のフィットネス端末が機能しません。
-
- </li>
-</ul>
-
-<h4>セットアップ ウィザード</h4>
-
-<ul>
- <li>セットアップ ウィザードで、[Your Google Account] から、新しい端末(または新しくリセットされた端末)にデータを復元するオプションが動作しません。
-セットアップ ウィザードで [another Android device] を選択して既存の端末からデータを復元するか、新しい端末としてセットアップする必要があります。
-
-
- </li>
-</ul>
-
-<h4>OEM ロック解除</h4>
-
-<ul>
- <li>一部の端末では、DP2 の実行中、[Developer Options] の [<strong>Enable OEM unlock</strong>] がグレー表示されます。
-<br>
- <strong>回避策:</strong><a href="https://www.google.com/android/beta" class="external-link">www.google.com/android/beta</a> にアクセスし、Android ベータ版プログラムを導入します(まだ導入していない場合)。
-
-その後削除して、ダウングレード OTA を受け入れます。
-削除の結果、端末は Android 6.0 にダウングレードされます。これで、[Developer Options] の [<strong>Enable OEM unlock</strong>] を選択できるようになります。
-
-端末をダウングレードすると、個人データは消去されます。ただし、ブートローダーをロック解除したとしても、やはりこのデータは消去されます。
-
- </li>
-</ul>
-
-<h4>Android for Work</h4>
-
-<ul>
- <li>仕事用のセキュリティ確認
- <ul>
- <li>N に移行した後、またはユーザーが仕事用プロファイルを作成した後、ユーザーが自分のパターン、PIN またはパスワードを変更するか、仕事用のセキュリティ確認をセットアップするまで、プロファイルでキーストアにキーを作成できません。
-
-
- </li>
-
- <li>ダイレクト ブート モードで、端末にパスコード制限を適用すると、端末がロックされている場合でも、仕事用プロファイルがロック解除されます。
-
- これにより、端末ロック画面によって保護される必要がある場合にも、仕事用プロファイルにアクセスできるようになります。
-
- </li>
- </ul>
- </li>
-
- <li>Always On VPN
- <ul>
- <li>Always On VPN モードがオンで、VPN が使用できない場合、アプリが通常のネットワークで接続します。
-VPN 接続を使用できない場合、アプリはオフラインである必要があります。
-
- </li>
-
- <li>Always On モードがオンになっているとき、端末が再起動してダイレクト ブート モードになった後は、ユーザーがセキュリティ保護されたロック画面をロック解除した後でも、VPN 接続が確立されません。
-
-
- </li>
- </ul>
- </li>
-
- <li>パッケージの停止
- <ul>
- <li>[Telephone disabled] ダイアログが表示されているにもかかわらず電話をかけるなど、予期しない動作が発生する可能性がある場合、端末管理者は、重要なシステム パッケージを停止できます。
-
-
- </li>
- </ul>
- </li>
-
- <li>その他
- <ul>
- <li>{@link
- android.os.UserManager#DISALLOW_MOUNT_PHYSICAL_MEDIA} が true に設定されていると、ユーザーが SD カードなどの物理メディアを挿入したときに、Settings アプリが起動時にクラッシュします。
-
- </li>
-
- <li>仕事用プロファイルでの最初のチェックが完了するまで数分かかります。
-
- </li>
- </ul>
- </li>
-</ul>
-
-<h4 id="vulkan">Vulkan</h4>
-
-<ul>
- <li>Nexus 5X/6P</li>
- <ul>
- <li>バインド番号と、ゼロでない最初のバインド番号のギャップにより、{@code vkCreateGraphicsPipeline()} が失敗します。
-</li>
- <li>Vulkan によって、投影されたテクスチャ座標に関する誤ったサンプリング動作が示されます。</li>
- <li>multithreadCmdBuffer サンプルで、N-DP2 ドライバを使用して {@code vkCmdClearColorImage()} を実行すると、クラッシュします。
-</li>
- <li>{@code vkGetPhysicalDeviceFormatProperties()} からの戻り値で、{@code VkFormatProperties::linearTilingFeatures} の値が設定されず、結果として 0 の値が取得されます。
-
-</li>
- <li>Vulkan 浮動小数点フレーム バッファの添付ファイルが正しく処理されません。</li>
- </ul>
- <li>Nexus Player</li>
- <ul>
- <li>SPIR-V シェーダーによって、ドライバ アサートがトリガーされることがあります。</li>
- <li>一部のパイプライン構成によって {@code vkCreateGraphicsPipeline()} がクラッシュすることがあります。
-</li>
- </ul>
-</ul>
-
-<h4>端末固有の問題</h4>
-
-<dl>
- <dt>
- <strong>Android One</strong>
- </dt>
-
- <dd>
- 端末がスロット 1 からスロット 2 SIM に切り替わったときに、データ接続が失敗します。
- </dd>
-
- <dt>
- <strong>Pixel C</strong>
- </dt>
-
- <dd>
- 音声検索の [Always On] オプションを切り替えることができません。
- </dd>
-
- <dt>
- <strong>Nexus 6</strong>
- </dt>
-
- <dd>
- HDR+ フォトを除き、カメラの縦向きの写真が破損します。
-
- </dd>
-
- <dt>
- <strong>Nexus Player</strong>
- </dt>
-
- <dd>
- Nexus Player で、Netflix HD コンテンツの再生が失敗することがあります。
- </dd>
-
- <dd>
- 動的な動画の解像度変更に依存するすべてのアプリが、Nexus Player で失敗することがあります。
-
- </dd>
-
- <dd>
- VP9 動画コーデックを使用するすべてのアプリが、Nexus Player で失敗することがあります。
- </dd>
-</dl>
-
-<!-- DP 1 release notes archive -->
-
-<h2 id="dp1">Developer Preview 1</h2>
-
-<div class="wrap">
- <div class="cols">
- <div class="col-6of12">
- <p>
- <em>日付:2016 年 3 月<br>
- ビルド:NPC56P、NPC56R、アップデート:NPC56W、NPC56X<br>
- エミュレータ サポート: x86 と ARM(32 / 64 ビット)<br>
- Google Play services:8.4</em>
- </p>
- </div>
- </div>
-</div>
-
-<h3 id="dp1-general">一般的な注意事項</h3>
-
-<p>
- この Developer Preview リリースは、アプリのデベロッパーのみを対象とし、互換性テストと初期の開発のみで使用するために開発されています。
-このリリースに関する次の一般的な事項に注意してください。
-
-</p>
-<ul>
- <li>このリリースには、すべての端末における安定性とパフォーマンスに関するさまざまな問題があるため、特に、デベロッパー以外の方が、<em>スマートフォンやタブレットで日常的に使用することには適していません。</em>
-
-
- </li>
-
- <li>システムとアプリのパフォーマンスが、<strong>定期的に遅くなるか、不自然になる</strong>ことがわかっており、端末が応答しなくなることがあります。
-これらの問題は、使用時間が長くなると、より深刻化します。
-
- </li>
-
- <li>このリリースでは、画面のオンとオフのユースケースで電池寿命が短くなることがあります。
-
- </li>
-
- <li>Developer Preview 1 で、一部のアプリが正常に機能しないことがあります。これには Google のアプリと、その他のアプリが含まれます。
-
- </li>
-
- <li>この早期のビルドは、互換性テストスイート(CTS)で承認されていません。CTS 承認済みビルドに依存するアプリは動作しません(Android Pay など)。
-
- </li>
-
- <li>このプレビュー リリースでは、次の端末をサポートしています。Nexus 5X、Nexus 6、Nexus 6P、Nexus 9、Nexus Player、Pixel C、および General Mobile 4G(Android One)
-
-
- </li>
-</ul>
-
-<h3 id="dp1-platform">プラットフォームの問題</h3>
-
-<h4>パフォーマンスと電池</h4>
-
-<ul>
- <li>システムとアプリのパフォーマンスが、<strong>定期的に遅くなるか、不自然になる</strong>ことがわかっており、端末が応答しなくなることがあります。
-これらの問題は、使用時間が長くなると、より深刻化します。
-
- </li>
-
- <li>このリリースでは、画面のオンとオフのユースケースで電池寿命が短くなることがあります。
-
- </li>
-</ul>
-<h4 id="dialer">電話</h4>
-
-<ul>
- <li>電話アプリではダイレクト ブートがサポートされていません。このことは、将来、N Developer Preview で対応されます。
-
- </li>
-
- <li>ボイスメールの再生が動作しません。
- </li>
-</ul>
-
-<h4>マイク</h4>
-
-<ul>
- <li>アプリの再起動をまたいで、マイクのミュート状態が誤って保持されることがあります。あるアプリでマイクをミュートし、その状態が保持されている場合は、マイクのミュート制御機能のある任意のアプリを開き、マイクのミュートを解除してください。</li>
-</ul>
-
-<h4 id="ui">システム UI</h4>
-
-<ul>
- <li>システム UI の、一部の新しいまたは変更された文字列の中に、すべての言語には翻訳されていないものがあります。
-
- </li>
-
- <li>[Overview] の UI は現在開発中であり、変更されることがあります。たとえば、ユーザーがアプリを切り替えたときに表示されるタイマーを削除する予定です。
-
-
- </li>
-
- <li>設定のコントロールとトグルが遅いか、応答しないように見えます。
- </li>
-
- <li>通知の視覚的デザインは変更されることがあります。
- </li>
-
- <li>Gmail アプリで、通知バンドルに含まれるメールの直接アーカイブが正常に動作しません。
-
- </li>
-</ul>
-
-<h4>Android for Work</h4>
-
-<ul>
- <li>仕事用のセキュリティ確認
- <ul>
- <li>N に移行した後、またはユーザーが仕事用プロファイルを作成した後、ユーザーが自分のパターン、PIN またはパスワードを変更するか、仕事用のセキュリティ確認をセットアップするまで、プロファイルでキーストアにキーを作成できません。
-
-
- </li>
-
- <li>ダイレクト ブート モードで、端末にパスコード制限を適用すると、端末がロックされている場合でも、仕事用プロファイルがロック解除されます。
-
- これにより、端末ロック画面によって保護される必要がある場合にも、仕事用プロファイルにアクセスできるようになります。
-
- </li>
-
- <li>ユーザーが誤ったパスワードと PIN を入力したときに、情報メッセージが表示されず、入力項目が消去されるのみです。
-
-この問題は指紋入力のパターンには影響しません。
- </li>
-
- <li>タブレットで、仕事用のセキュリティ確認で表示される背景が不相応に小さくなります。
-
- </li>
-
- <li>N Developer Preview にバンドルされている <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.enterprise.dmagent">Google Apps のデバイス ポリシー</a>のバージョン では、仕事用プロファイルのセキュリティ確認機能がまだサポートされていません。
-
-
- デベロッパーは、この機能をテストする場合は、代わりに <a href="https://github.com/googlesamples/android-testdpc/releases">TestDPC</a> を使用する必要があります。
-
- </li>
- </ul>
- </li>
-
- <li>Always On VPN
- <ul>
- <li>Always On VPN モードがオンで、VPN が使用できない場合、Always On ポリシーの例外として指定されていないアプリが通常のネットワークで接続します。
-
-Always On VPN ポリシーの例外として指定されていない限り、VPN 接続を使用できない場合、アプリはオフラインである必要があります。
-
- <ul>
- <li>Always On モードがオンになっているとき、端末が再起動してダイレクト ブート モードになった後は、ユーザーがセキュリティ保護されたロック画面をロック解除した後でも、VPN 接続が確立されません。
-
-
- </li>
- </ul>
- </li>
- </ul>
- </li>
-
- <li>連絡先の改善
- <ul>
- <li>Bluetooth PBAP / MAP 端末で、仕事用連絡先の発信者番号が表示されません。
-この問題は Preview の次のリリースで解決されます。
- </li>
- </ul>
- </li>
-
- <li>ワークモード
- <ul>
- <li>Google Now ランチャーで、ワークモードがオンかオフかが表示されません。
-また、ランチャーにはアプリの保留状態も表示されません。
- </li>
-
- <li>ユーザーがワークモードのオンとオフを切り替えた後、カレンダーなどの仕事用プロファイルのアプリ ウィジェットが表示されなくなります。
-
- </li>
- </ul>
- </li>
-
- <li>パッケージの停止
- </li>
-
- <li>[Telephone disabled] ダイアログが表示されているにもかかわらず電話をかけるなど、予期しない動作が発生する可能性がある場合、端末管理者は、重要なシステム パッケージを停止できます。
-
-
- </li>
-
- <li>その他
- <ul>
- <li>{@link
- android.os.UserManager#DISALLOW_MOUNT_PHYSICAL_MEDIA} が true に設定されていると、ユーザーが SD カードなどの物理メディアを挿入したときに、Settings アプリが起動時にクラッシュします。
-
- </li>
-
- <li>ユーザーがアプリをアンインストールした後で再インストールしたときに、{@code DPM.setPackagesSuspended} 状態が保持されません。
-アンインストールと再インストールの後、アプリが停止されたままになるか、停止されたアプリはアンインストール可能にならないかのいずれかである必要があります。
-
-
- </li>
-
- <li>仕事用プロファイルでの最初のチェックが完了するまで数分かかります。
-これにより、端末が Play EMM API によって認識されるまでに、通常よりも長い時間がかかる場合があります。
-
- </li>
-
- <li>仕事用プロファイル アプリからの通知が、個人プロファイルにインストールされた通知リスナによって認識されません。
-その結果、通知が期待どおりに表示されません。
-
- </li>
-
- </ul>
- </li>
-</ul>
-
-<h4 >キーボード</h4>
-
-<ul>
- <li>キーボードと Android 端末の間の Bluetooth ペア設定が不安定になることがあります。
- </li>
-</ul>
-
-<h4 >動画</h4>
-
-<ul>
-<li>動画の再生が遅延したり中断されたりします。</li>
-</ul>
-
-<h4>Wi-Fi</h4>
-
-<ul>
- <li>Wi-Fi に対して行われたリファクタリングにより、API のコーナーケースの動作が変化する場合があります。
-特に、特定のネットワークへの接続や、ネットワークへの再接続を試みるアプリについては、再テストの必要があります。
-
- </li>
-
- <li>以前の DHCP クライアントがプラットフォームから削除されました。プラットフォームでサポートされる DHCP は、M で導入された DHCP クライアントのみとなります。
-
- </li>
-</ul>
-
-<h4>ダイレクト ブート</h4>
-
-<ul>
- <li>NFC は最初にロック解除するまで機能しません。
- <ul>
- <li>Bluetooth が有効なスマートフォンを再起動したときに、Bluetooth が自動的にオンになりません。
-手動で Bluetooth を再度有効にする必要があります。
- </li>
-
- <li>一部の状況において、電話やメッセージに対して既定の着信音が鳴りません。
-この動作は、1 つの例外(と回避策)を除き、次の N Preview リリースで修正されます。
-
- </li>
-
- <li>ワイプされた直後でない端末、つまり、ダイレクト ブート モードに設定された後で少なくとも 1 回起動された端末では、既定の通知着信音が鳴りません。
-
-ユーザーは、[Settings] から手動で着信音を選択することで、この問題を回避できます。
-
- </li>
-
- <li>ダイレクト ブートは、N Developer Preview ビルドが実行される端末では、既定で有効になっていません。
-テストや開発のためにダイレクト ブートを有効にするには、[Developer Options] に移動して [Convert to File Encryption] をタップします。
-
- この Developer Preview では、このことを行うには、ファクトリ リセットによって再パーティション化し、端末をファイルベースの暗号化向けにリフォーマットする必要があります。
-
- </li>
- </ul>
- </li>
-</ul>
-
-<h4>Android TV のピクチャ イン ピクチャ</h4>
-
-<ul>
- <li>[Recents] の UI における PIP 統合は最終版ではなく、変更されることがあります。
-
- <ul>
- <li>PIP ウィンドウのアニメーションが滑らかではありません。Preview の将来のリリースで、このことが改善されます。
-
- </li>
- </ul>
- </li>
-
- <li style="list-style: none">Preview の将来のリリースで、PIP の視覚的デザインとレイアウトの整列が改善されます。
-
- </li>
-</ul>
-
-<h4>バグ報告</h4>
-
-<ul>
- <li>バグ報告は必ずしも正常に完了しません(回避策として、内部ストレージのバグ報告ドキュメント プロバイダからアクセスできるようになっている場合があります)。
-
-
- </li>
-</ul>
-
-<h4>マルチ ウィンドウでの分割画面</h4>
-
-<ul>
- <li>分割画面モードにすると、アプリがクラッシュし、予期しない UI 動作が発生することがあります。
-これらはアプリの問題であり、アプリのデベロッパーが修正する必要があります。
-
- </li>
-
- <li>Android プラットフォームの N より前のバージョンをターゲットとするアプリは、複数回表示される分割画面トーストが動作しません。
-
- </li>
-
- <li>画面の向きが固定されたアプリを使用しているときに [Overview] ボタンを長押しすると、アプリに予期しない動作が発生します。
-
- </li>
-
- <li>サイズ変更中にアプリの表示がちらつくことがあります。
- </li>
-
- <li>アニメーションはまだ完成していません。
- </li>
-</ul>
-
-<h4>入力方法</h4>
-
-<ul>
- <li><b>システム言語を使用している</b>ときに、Google キーボードが予期せず汎用的な Google キーボードにフォールバックしますが、Google キーボードではシステム言語設定で選択されている言語がいずれもサポートされていません。
-
-米国英語にフォールバックする必要があります。
-
- <p>
- Google キーボードでサポートされる、少なくとも 1 つの言語を追加することで、この問題を回避できます。
-
- </p>
- </li>
-</ul>
-
-<h4>ユーザー補助機能</h4>
-
-<ul>
- <li>TalkBack で通知、クイック設定タイル、マルチ ウィンドウ表示などの機能に問題が発生し、システムがクラッシュするか、TalkBack からの音声フィードバックがなくなります。
-
-Preview の将来のリリースで、この問題に対処します。
-
- </li>
-</ul>
-
-<h3 id="dp1-device-sp">端末固有のノートと問題</h3>
-
-<h4>Nexus Player</h4>
-<ul>
- <li>このリリースの Preview の Nexus Player では、動画再生、アプリの互換性と安定性の問題が発生することがあります。
-
- </li>
-</ul>
-
-<h4>Pixel C</h4>
-<ul>
-<li>マルチ ウィンドウのサイズ変更によってクラッシュが発生することがあります。</li>
-</ul>
-
-<h4>Nexus 9</h4>
-<ul>
-<li>Nexus 9 の端末が、Android ベータ版プログラムを経由して over-the-air(OTA)アップデートを受信した後、起動しません。
-OTA イメージを手動でインストールすると、この問題が解決することがあります。
-詳細については、<a href="{@docRoot}preview/download-ota.html">端末の OTA イメージの適用</a> をご覧ください。
-
-</li>
-</ul>
-
diff --git a/docs/html-intl/intl/ja/training/articles/direct-boot.jd b/docs/html-intl/intl/ja/training/articles/direct-boot.jd
new file mode 100644
index 0000000..eaa684c7
--- /dev/null
+++ b/docs/html-intl/intl/ja/training/articles/direct-boot.jd
@@ -0,0 +1,181 @@
+page.title=ダイレクト ブート
+page.keywords=preview,sdk,direct boot
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>このドキュメントの内容</h2>
+ <ol>
+ <li><a href="#run">ダイレクト ブート中に実行するためのアクセスを要求する</a></li>
+ <li><a href="#access">端末暗号化ストレージにアクセスする</a></li>
+ <li><a href="#notification">ユーザーによる端末のロック解除の通知を受信する</a></li>
+ <li><a href="#migrating">既存のデータを移行する</a></li>
+ <li><a href="#testing">暗号化対応アプリをテストする</a></li>
+ </ol>
+</div>
+</div>
+
+<p>Android N は、電源を入れたときにユーザーが端末のロックを解除していない場合、セキュリティで保護された <i>ダイレクト ブート</i> モードで実行します。
+
+この機能をサポートするため、システムで次の 2 つの保存先を使用できるようになります。</p>
+
+<ul>
+<li><i>認証情報暗号化ストレージ。</i>これはデフォルトの保存先で、ユーザーが端末のロックを解除した後にだけ使用できます。
+</li>
+<li><i>端末暗号化ストレージ。</i>この保存先は、ダイレクト ブート モード中とユーザーが端末のロックを解除した後の両方で使用できます。
+</li>
+</ul>
+
+<p>デフォルトで、ダイレクト ブート モード中はアプリは実行されません。ダイレクト ブート モード中にアプリで操作を実行する必要がある場合、このモードで実行するアプリ コンポーネントを登録できます。
+
+ダイレクト ブート モードでアプリの実行が必要になる一般的な使用例は次のとおりです。
+</p>
+
+<ul>
+<li>アラーム クロック アプリなど、通知がスケジュールされているアプリ。
+</li>
+<li>SMS アプリなど、重要なユーザー通知を表示するアプリ。</li>
+<li>Talkback など、ユーザー補助機能サービスを提供するアプリ。</li>
+</ul>
+
+<p>ダイレクト ブート モードで実行中にアプリがデータにアクセスする必要がある場合は、端末暗号化ストレージを使用します。
+端末暗号化ストレージにはキーで暗号化されたデータが保存され、端末がセキュアブートに成功した場合にのみこのデータを使用できます。
+
+</p>
+
+<p>ユーザーの認証情報に関連付けたキーで暗号化しなければならない PIN やパスワードなどのデータには、認証情報暗号化ストレージを使用します。認証情報暗号化ストレージは、ユーザーが端末のロック解除に成功した後に使用可能になり、ユーザーが端末を再起動するまでアクセスできます。
+
+
+ユーザーが端末をロック解除した後にロック画面を有効にしても、認証情報暗号化ストレージはロックされません。
+
+</p>
+
+<h2 id="run">ダイレクト ブート中に実行するためのアクセスを要求する</h2>
+
+<p>ダイレクト ブート モード中にアプリを実行したり、端末暗号化ストレージにアクセスしたりするには、アプリ コンポーネントの登録が必要です。
+
+アプリをシステムに登録するには、コンポーネントが
+<i>暗号化対応するように指定します。</i>コンポーネントが暗号化対応するよう指定するには、マニフェスト内で
+<code>android:directBootAware</code> 属性を true に設定します。<p>
+
+<p>暗号化対応コンポーネントを登録しておくと、端末を再起動したときにシステムから
+<code>LOCKED_BOOT_COMPLETED</code> ブロードキャスト メッセージを受信できます。
+この時点で端末暗号化ストレージが使用できるようになり、ダイレクト ブート モード中にコンポーネントが実行しなければならないタスクを実行できます。たとえば、スケジュールしたアラームのトリガーなどが該当します。
+
+</p>
+
+<p>次のコード スニペットは、アプリのマニフェスト内で
+{@link android.content.BroadcastReceiver} を暗号化対応として登録し、<code>LOCKED_BOOT_COMPLETED</code> のインテント フィルタを追加する方法の例を示しています。
+</p>
+
+<pre>
+<receiver
+ android:directBootAware="true" >
+ ...
+ <intent-filter>
+ <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
+ </intent-filter>
+</receiver>
+</pre>
+
+<p>ユーザーが端末のロックを解除すると、すべてのコンポーネントは端末暗号化ストレージと認証情報暗号化ストレージの両方にアクセスできます。
+</p>
+
+<h2 id="access">端末暗号化ストレージにアクセスする</h2>
+
+<p>端末暗号化ストレージにアクセスするには、
+<code>Context.createDeviceProtectedStorageContext()</code> を呼び出して追加の
+{@link android.content.Context} インスタンスを作成します。このコンテキストで実行されたストレージ API 呼び出しはすべて、端末暗号化ストレージにアクセスします。
+次の例では、端末暗号化ストレージにアクセスして既存のアプリのデータ ファイルを開きます。
+
+</p>
+
+<pre>
+Context directBootContext = appContext.createDeviceProtectedStorageContext();
+// Access appDataFilename that lives in device encrypted storage
+FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
+// Use inStream to read content...
+</pre>
+
+<p>端末暗号化ストレージは、ダイレクト ブート モード中にアクセスが必要な情報のみに使用してください。汎用的な暗号化された保存先として、端末暗号化ストレージを使用することはできません。ユーザーの個人情報や、ダイレクト ブート モード中に特に必要ではない暗号化されたデータには、認証情報暗号化ストレージを使用してください。
+
+
+
+</p>
+
+<h2 id="notification">ユーザーによる端末のロック解除の通知を受信する</h2>
+
+<p>再起動後にユーザーが端末のロックを解除すると、アプリは認証情報暗号化ストレージへのアクセスに切り替えて、ユーザーの認証情報に応じて通常のシステム サービスを使用します。
+
+</p>
+
+<p>再起動後、ユーザーが端末のロックを解除したときに通知を受信するには、実行中のコンポーネントから {@link android.content.BroadcastReceiver} を登録して、<code>ACTION_USER_UNLOCKED</code> メッセージをリッスンするようにします。
+
+または、既存の {@link android.content.Intent#ACTION_BOOT_COMPLETED
+ACTION_BOOT_COMPLETED} メッセージを受信することもできます。このメッセージは、端末が起動してユーザーが端末のロックを解除したことを示すようになりました。
+
+</p>
+
+<p>
+<code>UserManager.isUserUnlocked()</code> を呼び出して、ユーザーが端末のロックを解除したかを直接問い合わせることもできます。</p>
+
+<h2 id="migrating">既存のデータを移行する</h2>
+
+<p>ユーザーが端末をアップデートしてダイレクト ブート モードを使用できるようになると、既存のデータを端末暗号化ストレージに移行しなければならない場合があります。
+
+<code>Context.moveSharedPreferencesFrom()</code> および
+<code>Context.moveDatabaseFrom()</code> を使用すると、設定およびデータベースのデータを認証情報暗号化ストレージと端末暗号化ストレージ間で移行できます。
+</p>
+
+<p>どのデータを認証情報暗号化ストレージから端末暗号化ストレージに移行するかは、慎重に判断してください。
+パスワードや承認トークンなどのユーザーの個人情報は、端末暗号化ストレージに移行しないでください。
+
+場合によっては、この 2 つの暗号化された保存先に、データセットを振り分けて管理する必要があります。
+</p>
+
+<h2 id="testing">暗号化対応アプリをテストする</h2>
+
+<p>新しいダイレクト ブート モードを使用して、暗号化対応アプリをテストしてみましょう。ダイレクト ブートを有効にする方法は 2 つあります。
+</p>
+
+<p class="caution"><strong>警告:</strong>ダイレクト ブートを有効にすると、端末上のすべてのユーザーデータが消去されます。
+</p>
+
+<p>Android N がインストールされたサポート対象端末では、次のいずれかの方法を使用してダイレクト ブートを有効にします。
+</p>
+
+<ul>
+<li>端末で、<b>[Developer options]</b> がまだ有効になっていない場合は、次の手順で有効にします。<b>[Settings] > [About phone]</b> で <b>[Build number]</b> を 7 回タップします。
+
+[Developer options] 画面が表示されたら、<b>[Settings] > [Developer options]</b> で <b>[Convert to file encryption]</b> を選択します。
+
+</li>
+<li>次の adb shell コマンドを使用して、ダイレクト ブート モードを有効にします。
+<pre class="no-pretty-print">
+$ adb reboot-bootloader
+$ fastboot --wipe-and-use-fbe
+</pre>
+</li>
+</ul>
+
+<p>テスト端末でモードの切り替えが必要な場合、エミュレーションされたダイレクト ブート モードも使用できます。
+データが失われるおそれがありますので、EMULATED モードは開発中にのみ使用してください。
+エミュレーションされたダイレクト ブート モードを有効にするには、端末でロック パターンを設定します。ロック パターンの設定時にセキュリティで保護されたスタートアップ画面について確認メッセージが表示された場合は、[No thanks] を選択します。次に、次の adb shell コマンドを使用します。
+
+
+</p>
+
+<pre class="no-pretty-print">
+$ adb shell sm set-emulate-fbe true
+</pre>
+
+<p>エミュレーションされたダイレクト ブート モードを無効にするには、次のコマンドを使用します。</p>
+
+<pre class="no-pretty-print">
+$ adb shell sm set-emulate-fbe false
+</pre>
+
+<p>これらのコマンドを使用すると、端末が再起動されます。</p>
diff --git a/docs/html-intl/intl/ja/training/articles/scoped-directory-access.jd b/docs/html-intl/intl/ja/training/articles/scoped-directory-access.jd
new file mode 100644
index 0000000..0767689
--- /dev/null
+++ b/docs/html-intl/intl/ja/training/articles/scoped-directory-access.jd
@@ -0,0 +1,148 @@
+page.title=特定のディレクトリへのアクセス
+page.keywords=preview,sdk,scoped directory access
+page.tags=androidn
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>このドキュメントの内容</h2>
+ <ol>
+ <li><a href="#accessing">外部ストレージのディレクトリへのアクセス</a></li>
+ <li><a href="#removable">リムーバブル メディアのディレクトリへのアクセス</a></li>
+ <li><a href="#best">ベスト プラクティス</a></li>
+ </ol>
+</div>
+</div>
+
+<p>写真アプリなどは通常、外部ストレージの特定のディレクトリ(<code>Pictures</code> ディレクトリなど)のみにアクセスする必要があります。
+外部ストレージへのアクセスに関する従来のアプローチでは、このようなアプリに目的のディレクトリへのアクセスを容易に提供できる設計にはなっていませんでした。
+
+次に例を示します。</p>
+
+<ul>
+<li>マニフェストで {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} または {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} を要求すると、外部ストレージ上のすべての公開ディレクトリにアクセスできますが、この場合、アプリが必要な場所以外にもアクセスできることになります。
+
+
+</li>
+<li><a href="{@docRoot}guide/topics/providers/document-provider.html">ストレージ アクセス フレームワーク</a>を使用すると、通常、ユーザーはシステム UI を使用してディレクトリを選択できますが、アプリが常に同じ外部ディレクトリにアクセスする場合、この選択は不要です。
+
+
+
+</li>
+</ul>
+
+<p>Android N では、一般的な外部ストレージ ディレクトリにアクセスできる、新しいシンプルな API を提供します。
+ </p>
+
+<h2 id="accessing">外部ストレージのディレクトリへのアクセス</h2>
+
+<p><code>StorageManager</code> クラスを使用して、適切な
+<code>StorageVolume</code> インスタンスを取得します。次に、そのインスタンスの
+<code>StorageVolume.createAccessIntent()</code> メソッドを呼び出して、インテントを作成します。このインテントを使用して、外部ストレージのディレクトリにアクセスします。
+リムーバブル メディア ボリュームなど、使用できるすべてのボリュームのリストを取得するには、<code>StorageManager.getVolumesList()</code> を使用します。
+
+</p>
+
+<p>特定のファイルに関する情報がある場合は、
+<code>StorageManager.getStorageVolume(File)</code> を使用して、そのファイルを含む
+<code>StorageVolume</code> を取得します。この <code>StorageVolume</code> で
+<code>createAccessIntent()</code> を呼び出し、このファイルの外部ストレージ ディレクトリにアクセスします。
+</p>
+
+<p>
+外部 SD カードなどのセカンダリ ボリュームで、
+<code>StorageVolume.createAccessIntent()</code> を呼び出すときに null を渡し、特定のディレクトリではなくボリューム全体へのアクセスをリクエストします。プライマリ ボリュームに null を渡すか、無効なディレクトリ名を渡すと、
+<code>StorageVolume.createAccessIntent()</code> は null を返します。
+
+
+</p>
+
+<p>次のコード スニペットは、プライマリ共有ストレージの
+<code>Pictures</code> ディレクトリを開く方法の例を示しています。</p>
+
+<pre>
+StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
+StorageVolume volume = sm.getPrimaryVolume();
+Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+</pre>
+
+<p>システムは外部ディレクトリへのアクセスの付与を試行し、必要に応じてシンプルな UI で、ユーザーにアクセスを確認します。
+</p>
+
+<img src="{@docRoot}images/android-7.0/scoped-directory-access-framed.png" srcset="{@docRoot}images/android-7.0/scoped-directory-access-framed.png 1x,
+{@docRoot}images/android-7.0/scoped-directory-access-framed_2x.png 2x" />
+<p class="img-caption"><strong>図 1.</strong> Pictures ディレクトリへのアクセスを要求するアプリ
+</p>
+
+<p>ユーザーがアクセスを付与すると、
+<code>Activity.RESULT_OK</code> の結果コードと、URI を含むインテント データを指定して、
+<code>onActivityResult()</code> のオーバーライドを呼び出します。提供された URI を使用して、ディレクトリの情報にアクセスします。これは、<a href="{@docRoot}guide/topics/providers/document-provider.html">ストレージ アクセス フレームワーク</a>で返された URI を使用する場合と同様です。
+
+
+
+</p>
+
+<p>ユーザーがアクセスを付与しなかった場合は、
+<code>Activity.RESULT_CANCELED</code> の結果コードと、null のインテント データを指定して、
+<code>onActivityResult()</code> のオーバーライドを呼び出します。</p>
+
+<p class="note"><b>注</b>:特定の外部ディレクトリへのアクセスを取得すると、そのディレクトリ内のサブディレクトリへのアクセスも取得します。
+</p>
+
+<h2 id="removable">リムーバブル メディアのディレクトリへのアクセス</h2>
+
+<p>特定のディレクトリへのアクセスを使用してリムーバブル メディア上のディレクトリにアクセスするには、まず {@link android.os.Environment#MEDIA_MOUNTED} 通知をリッスンする {@link android.content.BroadcastReceiver} を追加します。次に例を示します。
+
+</p>
+
+<pre>
+<receiver
+ android:name=".MediaMountedReceiver"
+ android:enabled="true"
+ android:exported="true" >
+ <intent-filter>
+ <action android:name="android.intent.action.MEDIA_MOUNTED" />
+ <data android:scheme="file" />
+ </intent-filter>
+</receiver>
+</pre>
+
+<p>ユーザーが SD カードなどのリムーバブル メディアをマウントすると、システムは
+{@link android.os.Environment#MEDIA_MOUNTED} 通知を送信します。この通知は、インテント データ内の <code>StorageVolume</code> オブジェクトを提供します。このオブジェクトを使用して、リムーバブル メディア上のディレクトリにアクセスできます。
+
+次の例では、リムーバブル メディア上の <code>Pictures</code> ディレクトリにアクセスします。
+</p>
+
+<pre>
+// BroadcastReceiver has already cached the MEDIA_MOUNTED
+// notification Intent in mediaMountedIntent
+StorageVolume volume = (StorageVolume)
+ mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
+volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+</pre>
+
+<h2 id="best">ベスト プラクティス</h2>
+
+<p>外部ディレクトリのアクセス URI はできる限り保持してください。そうすれば、ユーザーに何度もアクセス要求をする必要がなくなります。
+ユーザーがアクセスを付与したら、ディレクトリのアクセス URI を指定して
+<code>getContentResolver().takePersistableUriPermssion()</code> を呼び出します。
+システムが URI を保持し、以降のアクセス要求では <code>RESULT_OK</code> を返して、ユーザーに確認の UI を表示しません。
+
+</p>
+
+<p>ユーザーが外部ディレクトリへのアクセスを拒否した直後に、またアクセスをリクエストしないようにしてください。
+何度もアクセスを要求すると、ユーザー エクスペリエンスが低下します。
+リクエストがユーザーにより拒否され、アプリが再度アクセスをリクエストすると、UI に [<b>Don't ask again</b>] チェックボックスが表示されます。
+</p>
+
+<img src="{@docRoot}images/android-7.0/scoped-directory-access-dont-ask.png" srcset="{@docRoot}images/android-7.0/scoped-directory-access-dont-ask.png 1x,
+{@docRoot}images/android-7.0/scoped-directory-access-dont-ask_2x.png 2x" />
+<p class="img-caption"><strong>図 1.</strong> リムーバブル メディアへのアクセスに対して 2 回目のリクエストを行うアプリ。
+</p>
+
+<p>ユーザーが [<b>Don't ask again</b>] を選択してリクエストを拒否すると、特定のディレクトリに対するアプリからの今後のすべてのリクエストは自動的に拒否され、リクエストに関する UI は表示されなくなります。
+
+</p>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ja/training/articles/security-config.jd b/docs/html-intl/intl/ja/training/articles/security-config.jd
new file mode 100644
index 0000000..d86c547
--- /dev/null
+++ b/docs/html-intl/intl/ja/training/articles/security-config.jd
@@ -0,0 +1,747 @@
+page.title=ネットワーク セキュリティ構成
+page.keywords=androidn,security,network
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>このドキュメントの内容</h2>
+<ol>
+ <li><a href="#manifest">セキュリティ構成ファイルの追加</a></li>
+ <li><a href="#CustomTrust">信頼できる CA のカスタマイズ</a>
+ <ol>
+ <li><a href="#ConfigCustom">カスタムの CA の設定</a></li>
+ <li><a href="#LimitingCas">信頼できる CA の制限</a></li>
+ <li><a href="#TrustingAdditionalCas">信頼できる CA の追加</a></li>
+ </ol>
+ </li>
+ <li><a href="#TrustingDebugCa">デバッグ限定の CA</a></li>
+ <li><a href="#UsesCleartextTraffic">クリアテキスト トラフィックのオプトアウト</a></li>
+ <li><a href="#CertificatePinning">証明書のピン留め</a></li>
+ <li><a href="#ConfigInheritance">構成の継承の動作</a></li>
+ <li><a href="#FileFormat">構成ファイルの形式</a></li>
+</ol>
+</div>
+</div>
+
+
+<p>
+ Android N には、ネットワーク セキュリティ構成機能が含まれています。これにより、アプリのコードを修正しなくても、安全な宣言型構成ファイルで、アプリのネットワーク セキュリティの設定をカスタマイズできます。
+
+これらの設定は、特定のドメインおよび特定のアプリに対して構成できます。
+主な機能は次のとおりです。
+
+</p>
+
+<ul>
+ <li>
+ <b>カスタム トラスト アンカー:</b>アプリのセキュアな接続にどの証明機関(CA)を信頼するかをカスタマイズできます。
+たとえば、特定の自己署名証明書や制限された一連の公的 CA を信頼できます。
+
+
+ </li>
+
+ <li>
+ <b>デバッグのみのオーバーライド:</b>インストール ベースに対する追加リスクなしに、アプリのセキュアな接続を安全にデバッグできます。
+
+ </li>
+
+ <li>
+ <b>クリアテキスト トラフィックのオプトアウト:</b>クリアテキスト トラフィックの意図しない使用からアプリを保護できます。
+
+ </li>
+
+ <li>
+ <b>証明書のピン留め:</b>アプリのセキュアな接続を特定の証明書に制限します。
+
+ </li>
+</ul>
+
+
+<h2 id="manifest">セキュリティ構成ファイルの追加</h2>
+
+<p>
+ ネットワーク セキュリティ構成機能は、XML ファイルを使用します。このファイルで、アプリの設定を指定できます。
+アプリのマニフェストに、このファイルを指すエントリを含める必要があります。
+次のコードはマニフェストからの抜粋で、このエントリの作成方法を示しています。
+
+</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<manifest ... >
+ <application ... >
+ <meta-data android:name="android.security.net.config"
+ android:resource="@xml/network_security_config" />
+ ...
+ </application>
+</manifest>
+</pre>
+
+<h2 id="CustomTrust">信頼できる CA のカスタマイズ</h2>
+
+<p>
+ アプリで、プラットフォームのデフォルトの設定ではなく、カスタマイズした一連の CA を信頼することが必要な場合があります。
+主な理由は次のとおりです。
+</p>
+
+<ul>
+ <li>カスタムの証明機関(自己署名、社内の CA で発行など)を使用してホストに接続する。
+
+ </li>
+
+ <li>プレインストールされたすべての CA ではなく、信頼する一部の CA のみに制限する。
+
+ </li>
+
+ <li>システムに含まれていない追加の CA を信頼する。
+ </li>
+</ul>
+
+<p>
+ デフォルトで、すべてのアプリのセキュアな接続(TLS、HTTPS など)は、システムにプレインストールされた CA を信頼し、API レベル 23(Android M)以下をターゲットにしたアプリは、ユーザーが追加した CA も信頼します。
+
+アプリは {@code base-config}(アプリ全体のカスタマイズ)または {@code domain-config} (ドメイン単位のカスタマイズ)を使用して、独自の接続をカスタマイズすることもできます。
+
+
+
+</p>
+
+
+<h3 id="ConfigCustom">カスタムの CA の設定</h3>
+
+<p>
+ 自己署名 SSL 証明書を使用するホストか、または信頼できる非パブリック CA(社内の CA など)によって SSL 証明書が発行されているホストに接続するケースで説明します。
+
+
+</p>
+
+<p>
+ <code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/my_ca"/>
+ </trust-anchors>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+<p>
+ PEM または DER 形式で、自己署名または非パブリック CA 証明書を
+{@code res/raw/my_ca} に追加します。
+</p>
+
+
+<h3 id="LimitingCas">信頼できる CA の制限</h3>
+
+<p>
+ システムによって信頼されているすべての CA をアプリで信頼したくない場合は、信頼する CA を制限できます。
+これにより、他の CA が発行した偽造証明書からアプリを保護できます。
+
+</p>
+
+<p>
+ 信頼できる CA を制限するための設定は、特定のドメインで<a href="#TrustingACustomCa">カスタムの CA を信頼する</a>設定と似ています。ただし、リソースで複数の CA を指定できる点が異なります。
+
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">secure.example.com</domain>
+ <domain includeSubdomains="true">cdn.example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/trusted_roots"/>
+ </trust-anchors>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+<p>
+ PEM または DER 形式で、信頼できる CA を {@code res/raw/trusted_roots} に追加します。
+ PEM 形式を使用する場合、そのファイルには PEM データのみを含めるようにして、余分なテキストを含めないでください。<em></em>
+1 つだけでなく複数の
+<a href="#certificates"><code><certificates></code></a> 要素を指定できます。
+
+</p>
+
+
+<h3 id="TrustingAdditionalCas">
+ 信頼できる CA の追加
+</h3>
+
+<p>
+ システムで信頼されていない CA を、アプリが追加で信頼しなければならない場合があります。これは、システムに CA がまだ組み込まれていなかったり、CA が Android システムに組み込まれるための要件を満たしていないことが原因です。
+
+CA を追加するには、アプリの構成で複数の証明書ソースを指定します。
+
+
+</p>
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <base-config>
+ <trust-anchors>
+ <certificates src="@raw/extracas"/>
+ <certificates src="system"/>
+ </trust-anchors>
+ </base-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="TrustingDebugCa">デバッグ用の CA の構成</h2>
+
+<p>
+ HTTPS で接続するアプリをデバッグするときは、運用サーバーの SSL 証明書がインストールされていないローカルの開発サーバーへの接続が必要になります。
+
+アプリのコードを変更せずにこの接続をサポートするには
+
+ <i>、</i> {@code debug-overrides} を使用して、<a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a> が {@code true} の場合にのみ信頼されるデバッグ限定の CA を指定できます。
+
+通常、IDE およびビルド ツールによって、非リリース ビルドには自動的にこのフラグが設定されます。
+
+</p>
+
+<p>
+ この方法は、通常の条件付きコードよりも安全です。セキュリティ対策として、アプリ ストアでは debuggable とマークされたアプリは拒否されるからです。
+
+
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <debug-overrides>
+ <trust-anchors>
+ <certificates src="@raw/debug_cas"/>
+ </trust-anchors>
+ </debug-overrides>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="UsesCleartextTraffic">クリアテキスト トラフィックのオプトアウト</h2>
+
+<p>
+ アプリケーションで、セキュアな接続のみを使用して接続する場合、それらの接続先に対して(HTTPS ではなく暗号化されていない HTTP プロトコルを使用する)クリアテキストのサポートを除外できます。
+
+このオプションにより、バックエンド サーバーなど外部ソースが提供する URL の変更によって、アプリで思わぬパフォーマンスの低下が発生するのを防ぐことができます。
+
+
+ 詳細については、{@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted
+ NetworkSecurityPolicy.isCleartextTrafficPermitted()} をご覧ください。
+</p>
+
+<p>
+ たとえば、アプリで {@code
+ secure.example.com} へのすべての接続には常に HTTPS を使用して、機密性の高いトラフィックを有害なネットワークから保護することが必要な場合があります。
+
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config usesCleartextTraffic="false">
+ <domain includeSubdomains="true">secure.example.com</domain>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="CertificatePinning">証明書のピン留め</h2>
+
+<p>
+ 通常、アプリはプレインストールされたすべての CA を信頼します。これらの CA が偽造証明書を発行すると、アプリは MiTM 攻撃のリスクにさらされます。
+
+アプリによっては、信頼する CA を制限するか証明書をピン留めすることで、受け入れる証明書を制限できます。
+
+</p>
+
+<p>
+ 証明書をピン留めするには、公開鍵のハッシュによって証明書のセットを指定します(X.509 証明書の SubjectPublicKeyInfo)。
+証明書チェーンが有効になるのは、証明書チェーンに 1 つ以上のピン留めされた公開鍵が含まれている場合のみです。
+
+
+</p>
+
+<p>
+ 証明書のピン留めを使用するときは、必ずバックアップの鍵を含めてください。そうすれば、新しい鍵に切り替えたり、CA を変更したりする必要が生じた場合に(CA 証明書またはその CA の中間証明書にピン留めしていても)、アプリの接続が影響を受けることはありません。
+
+
+そうしないと、接続を復元するためにアプリにアップデートをプッシュしなければならなくなります。
+
+</p>
+
+<p>
+ また、ピン留めの有効期限を設定することもできます。その有効期限を過ぎると、ピン留めが無効になります。
+これにより、アップデートされていないアプリの接続の問題を防ぐことができます。
+ただし、ピン留めに有効期限を設定すると、ピン留めを回避できるようになります。
+
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <pin-set expiration="2018-01-01">
+ <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
+ <!-- backup pin -->
+ <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
+ </pin-set>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="ConfigInheritance">構成の継承の動作</h2>
+
+<p>
+ 固有の構成で設定されていない値は、継承されます。この動作により、より複雑な構成が可能になるうえ、構成ファイルの読みやすさを維持できます。
+
+</p>
+
+<p>
+ 固有のエントリに値が設定されていない場合、その次に汎用的なエントリの値が使用されます。
+{@code domain-config} で設定されていない値は、ネストされている場合は親の {@code domain-config} から、ネストされていない場合は {@code
+ base-config} から取得されます。
+{@code base-config} で設定されていない値には、プラットフォームの既定値を使用します。
+
+</p>
+
+<p>
+ たとえば、{@code
+ example.com} のサブドメインに対するすべての接続で、CA のカスタム セットを使用する必要があるケースを考えてみましょう。また、これらのドメインに対するクリアテキストのトラフィックは、{@code
+ secure.example.com} に接続する場合を除いて許可します。<em></em>
+{@code example.com} の構成で {@code
+ secure.example.com} の構成をネストすることで、
+{@code trust-anchors} の重複を回避できます。
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/my_ca"/>
+ </trust-anchors>
+ <domain-config cleartextTrafficPermitted="false">
+ <domain includeSubdomains="true">secure.example.com</domain>
+ </domain-config>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="FileFormat">構成ファイルの形式</h2>
+
+<p>
+ ネットワーク セキュリティ構成機能では、XML ファイル形式を使用します。
+ ファイルの全体的な構造については、次のコード サンプルをご覧ください。
+</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <base-config>
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ </base-config>
+
+ <domain-config>
+ <domain>android.com</domain>
+ ...
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ <pin-set>
+ <pin digest="...">...</pin>
+ ...
+ </pin-set>
+ </domain-config>
+ ...
+ <debug-overrides>
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ </debug-overrides>
+</network-security-config>
+</pre>
+
+<p>
+ 次のセクションでは、このファイル形式の構文とその他の詳細について説明します。
+
+</p>
+
+<h3 id="network-security-config">
+ <network-security-config>
+</h3>
+
+<dl class="xml">
+ <dt>
+ 含めることのできる要素:
+ </dt>
+
+ <dd>
+ 0 または 1 つの <code><a href="#base-config"><base-config></a></code><br>
+ 任意の数の <code><a href=
+ "#domain-config"><domain-config></a></code><br>
+ 0 または 1 つの <code><a href="#debug-overrides"><debug-overrides></a></code>
+ </dd>
+</dl>
+
+<h3 id="base-config">
+ <base-config>
+</h3>
+
+<dl class="xml">
+ <dt>
+ 構文:
+ </dt>
+</dl>
+
+<pre class="stx">
+<base-config <a href=
+"#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
+ ...
+</base-config>
+</pre>
+<dl class="xml">
+ <dt>
+ 含めることのできる要素:
+ </dt>
+
+ <dd>
+ <code><a href="#trust-anchors"><trust-anchors></a></code>
+ </dd>
+
+ <dt>
+ 説明:
+ </dt>
+
+ <dd>
+ <a href="#domain-config"><code>domain-config</code></a> に含まれていない接続先に対するすべての接続に使用される、デフォルトの構成。
+
+
+<p>
+ 設定されていない値はすべて、プラットフォームの既定値を使用します。API レベル 24 以上をターゲットにしたアプリのデフォルトの構成は次のとおりです。
+
+</p>
+
+<pre>
+<base-config usesCleartextTraffic="true">
+ <trust-anchors>
+ <certificates src="system" />
+ </trust-anchors>
+</base-config>
+</pre>
+API レベル 23 以下をターゲットにしたアプリのデフォルトの構成は次のとおりです。
+<pre>
+<base-config usesCleartextTraffic="true">
+ <trust-anchors>
+ <certificates src="system" />
+ <certificates src="user" />
+ </trust-anchors>
+</base-config>
+</pre>
+
+ </dd>
+</dl>
+
+<h3 id="domain-config"><domain-config></h3>
+<dl class="xml">
+<dt>構文:</dt>
+<dd>
+<pre class="stx"><domain-config <a href="#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
+ ...
+</domain-config></pre>
+</dd>
+
+<dt>含めることのできる要素:</dt>
+
+<dd>
+1 つ以上の <code><a href="#domain"><domain></a></code>
+<br/>0 または 1 つの <code><a href="#trust-anchors"><trust-anchors></a></code>
+<br/>0 または 1 つの <code><a href="#pin-set"><pin-set></code></a>
+<br/>任意の数のネストされた <code><domain-config></code></dd>
+
+<dt>説明</dt>
+<dd>固有の接続先への接続に使用される構成です。{@code domain} 要素の定義に従います。
+
+<p>複数の {@code domain-config} 要素で接続先を指定している場合は、最も具体的な(長い)マッチング ドメイン ルールを持つ構成が採用されます。
+</p></dd>
+</dl>
+
+
+<h3 id="domain"><domain></h3>
+
+<dl class="xml">
+ <dt>
+ 構文:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<domain includeSubdomains=["true" | "false"]>example.com</domain>
+</pre>
+ </dd>
+
+ <dt>
+ 属性:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code includeSubdomains}
+ </dt>
+
+ <dd>
+ {@code "true"} の場合、このドメイン ルールはドメインおよびすべてのサブドメイン(サブドメインのサブドメインも含む)に一致します。そうでない場合、このルールは完全一致のみに適用されます。
+
+
+ </dd>
+ </dl>
+ </dd>
+
+ <dt>
+ 説明:
+ </dt>
+</dl>
+
+<h3 id="debug-overrides"><debug-overrides></h3>
+
+<dl class="xml">
+ <dt>
+ 構文:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<debug-overrides>
+ ...
+</debug-overrides>
+</pre>
+ </dd>
+
+ <dt>
+ 含めることのできる要素:
+ </dt>
+
+ <dd>
+ 0 または 1 つの <code><a href="#trust-anchors"><trust-anchors></a></code>
+ </dd>
+
+ <dt>
+ 説明:
+ </dt>
+
+ <dd>
+ オーバーライドは、<a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a> が {@code "true"} の場合に適用されます。これは通常、IDE およびビルド ツールで生成された非リリース ビルドに使用します。
+
+{@code
+ debug-overrides} で指定されたトラスト アンカーは、その他すべての構成に追加されます。サーバーの証明書チェーンでデバッグ限定のトラスト アンカーのいずれかを使用するときは、証明書のピン留めは実行されません。
+
+<a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a> が {@code "false"} の場合、このセクションは完全に無視されます。
+
+ </dd>
+</dl>
+
+<h3 id="trust-anchors"><trust-anchors></h3>
+<dl class="xml">
+ <dt>
+ 構文:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<trust-anchors>
+...
+</trust-anchors>
+</pre>
+ </dd>
+
+ <dt>
+ 含めることのできる要素:
+ </dt>
+
+ <dd>
+ 任意の数の <code><a href="#certificates"><certificates></a></code>
+ </dd>
+
+ <dt>
+ 説明:
+ </dt>
+
+ <dd>
+ セキュアな接続に使用するトラスト アンカーのセット。
+ </dd>
+</dl>
+
+
+<h3 id="certificates"><certificates></h3>
+<dl class="xml">
+<dt>構文:</dt>
+<dd><pre class="stx"><certificates src=["system" | "user" | "<i>raw resource</i>"]
+ overridePins=["true" | "false"] />
+</pre></dd>
+<dt>説明:</dt>
+<dd>{@code trust-anchors} 要素の X.509 証明書のセットです。</dd>
+
+<dt>属性:</dt>
+<dd><dl class="attr">
+<dt>{@code src}</dt>
+<dd>
+CA 証明書のソースには、次のいずれかを指定します。
+<ul>
+ <li>X.509 証明書を含むファイルを指す未加工のリソース ID。
+ 証明書は、DER または PEM 形式でエンコードする必要があります。PEM 証明書の場合、ファイルには PEM 以外の余分なデータ(コメントなど)を含めないでください。
+<em></em>
+
+ </li>
+
+ <li>{@code "system"}: プレインストールされたシステムの CA 証明書
+ </li>
+
+ <li>{@code "user"}: ユーザーが追加した CA 証明書
+ </li>
+</ul>
+</dd>
+
+<dt>{@code overridePins}</dt>
+<dd>
+ <p>
+ ソースから取得した CA が証明書のピン留めを回避するかどうかを指定します。{@code
+ "true"} の場合、証明書チェーンはこのソースから取得したいずれかの CA を使用して作成され、ピン留めは実行されません。
+この設定は、CA をデバッグしたり、アプリのセキュアなトラフィックでユーザーの MiTM の許可をサポートするために役立ちます。
+
+ </p>
+
+ <p>
+ デフォルトは {@code "false"} です。ただし、{@code debug-overrides} 要素で指定された場合の既定値は {@code "true"} です。
+
+ </p>
+</dd>
+</dl>
+</dd>
+
+
+<h3 id="pin-set"><pin-set></h3>
+
+<dl class="xml">
+ <dt>
+ 構文:
+ </dt>
+
+ <dd>
+<pre class="stx">
+<pin-set expiration="date">
+...
+</pin-set>
+</pre>
+ </dd>
+
+ <dt>
+ 含めることのできる要素:
+ </dt>
+
+ <dd>
+ 任意の数の <code><a href="#pin"><pin></a></code>
+ </dd>
+
+ <dt>
+ 説明:
+ </dt>
+
+ <dd>
+ 公開鍵のピンのセットです。セキュアな接続を信頼するには、信頼チェーン内の公開鍵一式のうちどれかが、ピンのセットに含まれている必要があります。
+ピンの形式については、
+<code><a href="#pin"><pin></a></code> をご覧ください。
+ </dd>
+
+ <dt>
+ 属性:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code expiration}
+ </dt>
+
+ <dd>
+ {@code yyyy-MM-dd} 形式のピン留めの有効期限、つまりピン留めを無効にする日付です。
+この属性が設定されていない場合、ピン留めの有効期限はありません。
+
+ <p>
+ 有効期限を設定しておくと、ユーザーがアプリのアップデートを無効にしているなどの原因で、ピンのセットのアップデートを取得していないアプリで、アプリの接続上の問題を回避できます。
+
+
+ </p>
+ </dd>
+ </dl>
+ </dd>
+</dl>
+
+<h3 id="pin"><pin></h3>
+<dl class="xml">
+ <dt>
+ 構文:
+ </dt>
+
+ <dd>
+<pre class="stx">
+<pin digest=["SHA-256"]>base64 encoded digest of X.509
+ SubjectPublicKeyInfo (SPKI)</pin>
+</pre>
+ </dd>
+
+ <dt>
+ 属性:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code digest}
+ </dt>
+
+ <dd>
+ PIN の生成にはダイジェスト アルゴリズムが使用されます。現在サポートされているのは
+{@code "SHA-256"} のみです。
+ </dd>
+ </dl>
+ </dd>
+</dl>
diff --git a/docs/html-intl/intl/ja/training/basics/network-ops/data-saver.jd b/docs/html-intl/intl/ja/training/basics/network-ops/data-saver.jd
new file mode 100644
index 0000000..c661b65
--- /dev/null
+++ b/docs/html-intl/intl/ja/training/basics/network-ops/data-saver.jd
@@ -0,0 +1,234 @@
+page.title=データセーバー
+metaDescription= ユーザーが有効にしたデータ使用量の最適化。
+page.keywords="android N", "data usage", "metered network"
+page.image=images/cards/card-nyc_2x.jpg
+@jd:body
+
+<div id="tb-wrapper">
+ <div id="tb">
+ <h2>
+ このドキュメントの内容
+ </h2>
+
+ <ol>
+ <li>
+ <a href="#status">データセーバー設定の確認</a>
+ <ol>
+ <li>
+ <a href="#request-whitelist">ホワイトリスト パーミッションの要求</a>
+ </li>
+ </ol>
+ </li>
+
+ <li>
+ <a href="#monitor-changes">データセーバー設定の変更の監視</a>
+
+ </li>
+
+ <li>
+ <a href="#testing">Android Debug Bridge コマンドを使用したテスト</a>
+ </li>
+ </ol>
+ </div>
+</div>
+
+<p>
+ スマートフォンのライフサイクル全体では、モバイルデータ通信プランのコストが端末自体のコストを簡単に上回ります。
+N Developer Preview では、ローミング、課金サイクルの終了近く、または短期間のデータパックであるかどうかに関係なく、データの使用を抑えるために端末全体でデータセーバーを有効にできます。
+
+
+</p>
+
+<p>
+ ユーザーが [<strong>Settings</strong>] でデータセーバーを有効にし、端末が従量制課金ネットワークに接続されている場合、システムはバックグラウンドでのデータ使用をブロックし、フォアグラウンドでのデータ使用をなるべく抑えるようにアプリに指示します。
+
+ユーザーは特定のアプリをホワイトリストに登録することにより、データセーバーがオンになっているときでも、バックグラウンドで従量制課金接続を使用できます。
+
+
+</p>
+
+<p>
+ N Developer Preview は {@link android.net.ConnectivityManager} API を拡張することで、<a href="#status">ユーザーのデータセーバー設定を取得</a>する方法と、<a href="#monitor-changes">設定の変更を監視</a>する方法を提供しています。
+
+
+アプリでユーザーがデータセーバーを有効にしているかどうかを確認し、フォアグラウンドおよびバックグラウンドでのデータ使用を抑えるようにすることをお勧めします。
+
+
+</p>
+
+<h2 id="status">
+ データセーバー設定の確認
+</h2>
+
+<p>
+ N Developer Preview では、アプリは {@link
+ android.net.ConnectivityManager} API を使用して、どのようなデータ使用量の制限が適用されているかを確認できます。
+{@code getRestrictBackgroundStatus()} メソッドは以下のいずれかの値を返します。
+
+</p>
+
+<dl>
+ <dt>
+ {@code RESTRICT_BACKGROUND_STATUS_DISABLED}
+ </dt>
+
+ <dd>
+ データセーバーは無効になっています。
+ </dd>
+
+ <dt>
+ {@code RESTRICT_BACKGROUND_STATUS_ENABLED}
+ </dt>
+
+ <dd>
+ ユーザーはこのアプリのデータセーバーを有効にしています。アプリはフォアグラウンドでのデータ使用を抑えるようにし、バックグラウンドでのデータ使用に対する制限を適切に処理する必要があります。
+
+
+ </dd>
+
+ <dt>
+ {@code RESTRICT_BACKGROUND_STATUS_WHITELISTED}
+ </dt>
+
+ <dd>
+ ユーザーはデータセーバーを有効にしていますが、アプリがホワイトリストに登録されています。アプリは、フォアグラウンドおよびバックグラウンドでのデータ使用を引き続き抑えるようにする必要があります。
+
+ </dd>
+</dl>
+
+<p>
+ データセーバーが無効になっている場合や、アプリがホワイトリストに登録されている場合でも、端末が従量制課金ネットワークに接続されている場合は、データ使用量を抑えることをお勧めします。
+
+以下のサンプルコードでは、アプリで使用する必要があるデータ量を確認するために、{@link
+ android.net.ConnectivityManager#isActiveNetworkMetered
+ ConnectivityManager.isActiveNetworkMetered()} と {@code
+ ConnectivityManager.getRestrictBackgroundStatus()} を使用しています。
+
+</p>
+
+<pre>
+ConnectivityManager connMgr = (ConnectivityManager)
+ getSystemService(Context.CONNECTIVITY_SERVICE);
+// Checks if the device is on a metered network
+if (connMgr.isActiveNetworkMetered()) {
+ // Checks user’s Data Saver settings.
+ switch (connMgr.getRestrictBackgroundStatus()) {
+ case RESTRICT_BACKGROUND_STATUS_ENABLED:
+ // Background data usage is blocked for this app. Wherever possible,
+ // the app should also use less data in the foreground.
+
+ case RESTRICT_BACKGROUND_STATUS_WHITELISTED:
+ // The app is whitelisted. Wherever possible,
+ // the app should use less data in the foreground and background.
+
+ case RESTRICT_BACKGROUND_STATUS_DISABLED:
+ // Data Saver is disabled. Since the device is connected to a
+ // metered network, the app should use less data wherever possible.
+ }
+} else {
+ // The device is not on a metered network.
+ // Use data as required to perform syncs, downloads, and updates.
+}
+</pre>
+
+<h3 id="request-whitelist">
+ ホワイトリスト パーミッションの要求
+</h3>
+
+<p>
+ アプリがバックグラウンドでデータを使用する必要がある場合は、アプリのパッケージ名(例: <code>package:MY_APP_ID</code>)の URI を含む <code>Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS</code> インテントを送信することでホワイトリスト パーミッションをリクエストできます。
+
+
+
+
+</p>
+
+<p>
+ インテントと URI を送信すると、[<strong>Settings</strong>] アプリが起動し、アプリのデータ使用量の設定が表示されます。
+ユーザーはアプリのバックグラウンドデータを有効にするかどうかを決めることができます。
+このインテントを送信する前に、バックグラウンドでのデータ使用を有効にするために [<strong>Settings</strong>] アプリを起動するかどうかを最初にユーザーに尋ねることをお勧めします。
+
+
+
+</p>
+
+<h2 id="monitor-changes">
+ データセーバー設定の変更の監視
+</h2>
+
+<p>
+ アプリでデータセーバー設定の変更を監視するには、{@link
+ android.content.BroadcastReceiver} を作成して {@code
+ ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED} をリッスンし、レシーバーを動的に {@link android.content.Context#registerReceiver
+ Context.registerReceiver()} に登録します。
+このブロードキャストを受信したアプリは、{@code
+ ConnectivityManager.getRestrictBackgroundStatus()} を呼び出して、<a href="#status">新しいデータセーバー設定がそのパーミッションに影響を及ぼすかどうか</a>を確認する必要があります。
+
+
+</p>
+
+<p class="note">
+ <strong>注:</strong>このブロードキャストは、{@link
+ android.content.Context#registerReceiver Context.registerReceiver()} を使用してブロードキャストに動的に登録するアプリにのみ送信されます。
+マニフェストにこのブロードキャストを受信するために登録するアプリはこれらを受信しません。
+
+
+</p>
+
+<h2 id="testing">
+ Android Debug Bridge コマンドを使用したテスト
+</h2>
+
+<a href="{@docRoot}tools/help/adb.html">Android Debug Bridge(ADB)</a>には、ネットワーク パーミッションの確認と設定に使用できるコマンドがいくつか用意されています。
+
+
+
+<dl>
+ <dt>
+ <code>$ adb shell dumpsys netpolicy</code>
+ </dt>
+
+ <dd>
+ 現在のバックグラウンド ネットワーク全体の制限設定、ホワイトリスト内の現在のパッケージ UID、その他の既知のパッケージのネットワーク パーミッションを含むレポートが生成されます。
+
+
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy</code>
+ </dt>
+
+ <dd>
+ ネットワーク ポリシー マネージャ(netpolicy)のコマンドの一覧が表示されます。
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy set restrict-background
+ <boolean></code>
+ </dt>
+
+ <dd>
+ <code>true</code> または <code>false</code> をそれぞれ渡したときに、データセーバー モードを有効または無効にします。
+
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy add restrict-background-whitelist
+ <UID></code>
+ </dt>
+
+ <dd>
+ 指定されたパッケージ UID をホワイトリストに追加し、バックグラウンドで従量制課金接続を使用できるようにします。
+
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy remove restrict-background-whitelist
+ <UID></code>
+ </dt>
+
+ <dd>
+ 指定されたパッケージ UID をホワイトリストから削除し、データセーバーが有効な場合でもバックグラウンドで従量制課金接続を使用できないようにします。
+
+ </dd>
+</dl>
diff --git a/docs/html-intl/intl/ja/training/tv/playback/picture-in-picture.jd b/docs/html-intl/intl/ja/training/tv/playback/picture-in-picture.jd
new file mode 100644
index 0000000..1df16cd
--- /dev/null
+++ b/docs/html-intl/intl/ja/training/tv/playback/picture-in-picture.jd
@@ -0,0 +1,213 @@
+page.title=ピクチャ イン ピクチャ
+page.keywords=preview,sdk,PIP,Picture-in-picture
+page.tags=androidn
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>このドキュメントの内容</h2>
+<ol>
+ <li><a href="#declaring">アクティビティがピクチャ イン ピクチャをサポートしていることを宣言する
+</a></li>
+ <li><a href="#pip_button">アクティビティをピクチャ イン ピクチャに切り替える</a>
+</li>
+ <li><a href="#handling_ui">ピクチャ イン ピクチャの実行中に UI を処理する</a>
+</li>
+ <li><a href="#continuing_playback">ピクチャ イン ピクチャの実行中に動画の再生を続行する
+</a></li>
+ <li><a href="#single_playback">ピクチャ イン ピクチャで単一の再生アクティビティを使用する
+</a></li>
+ <li><a href="#best">ベスト プラクティス</a></li>
+</ol>
+
+<h2>関連ドキュメント</h2>
+<ol>
+ <li><a href="{@docRoot}preview/features/multi-window.html">マルチ ウィンドウのサポート
+</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>Android N では、Android TV ユーザーは、アプリを操作するときに画面の隅に固定されたウィンドウで動画を視聴できるようになりました。
+
+ピクチャ イン ピクチャ(PIP)モードを使用すると、アプリはバックグランドで別のアクティビティを続けながら、固定されたウィンドウで動画アクティビティを実行できるようになります。
+
+PIP ウィンドウでは、アプリの使用中にマルチタスクを実行できます。これにより、ユーザーの作業効率が向上します。
+</p>
+
+<p>アプリで、PIP モードをトリガーするタイミングを決めることができます。次に、PIP モードの開始時点の例を示します。
+</p>
+
+<ul>
+<li>ユーザーが別のコンテンツをブラウジングするために動画から別のコンテンツに切り替えると、アプリは動画を PIP モードに切り替えることができます。
+</li>
+<li>コンテンツのエピソード終了の画面が表示されている間、アプリは動画を PIP モードに切り替えることができます。
+メイン画面には、シリーズの次のエピソードに関するプロモーションや概要の情報が表示されます。
+</li>
+<li>アプリで、ユーザーが動画を視聴している間に、追加のコンテンツのキューを作成する方法を提供できます。
+メイン画面でコンテンツの選択アクティビティを表示している間に、動画は PIP モードで再生を続行できます。
+</li>
+</ul>
+
+<p>PIP ウィンドウは 240 x 135 dp で、画面の 4 つのコーナーのうちいずれかの一番上のレイヤに表示されます。表示する場所はシステムによって選択されます。
+ユーザーは PIP メニューを表示して、PIP ウィンドウを全画面表示に切り替えたり、リモコンの [<b>Home</b>] ボタンを押して PIP ウィンドウを閉じたりすることができます。
+
+別の動画がメイン画面で再生を開始すると、PIP ウィンドウは自動的に閉じます。
+
+最近使ったアプリから PIP ウィンドウを閉じることもできます。</p>
+
+<img src="{@docRoot}images/android-7.0/pip-active.png" />
+<p class="img-caption"><strong>図 1.</strong> ユーザーがメイン画面でコンテンツを閲覧中に画面の隅に表示されるピクチャ イン ピクチャの動画
+
+</p>
+
+<p>PIP では、Android N で使用可能なマルチウィンドウ API を活用し、固定された動画オーバーレイ ウィンドウを表示します。
+PIP をアプリに追加するには、PIP をサポートするアクティビティを登録し、必要に応じてアクティビティを PIP モードに切り替えて、UI 要素を非表示にして、アクティビティが PIP モードを開始しても動画の再生が続行されるようにします。
+
+
+</p>
+
+<h2 id="declaring">アクティビティがピクチャ イン ピクチャをサポートしていることを宣言する</h2>
+
+<p>デフォルトでは、システムはアプリの PIP を自動的にサポートしません。アプリで PIP をサポートする場合、マニフェストで
+<code>android:supportsPictureInPicture</code> および
+<code>android:resizeableActivity</code> を <code>true</code> に設定して、動画アクティビティを登録します。
+
+また、アクティビティがレイアウトの設定変更を処理するように指定して、PIP モードの遷移中にレイアウト変更が発生しても、アクティビティが再開しないようにします。
+
+</p>
+
+<pre>
+<activity android:name="VideoActivity"
+ android:resizeableActivity="true"
+ android:supportsPictureInPicture="true"
+ android:configChanges=
+ "screenSize|smallestScreenSize|screenLayout|orientation"
+ ...
+</pre>
+
+<p>アクティビティを登録する際は、PIP モードでは、アクティビティが TV 画面の小さなオーバーレイ ウィンドウに表示される点に注意してください。
+動画の再生アクティビティは、最小限の UI にすることで最高のユーザー エクスペリエンスを提供できます。
+小さな UI 要素を含むアクティビティでは、PIP モードに切り替えたときに優れたユーザー エクスペリエンスを提供できない可能性があります。PIP ウィンドウでは、その UI 要素の詳細が見えづらくなるためです。
+
+
+</p>
+
+<h2 id="pip_button">アクティビティをピクチャ イン ピクチャに切り替える</h2>
+
+アクティビティを PIP モードに切り替える必要があるときは、
+<code>Activity.enterPictureInPictureMode()</code> を呼び出します。次の例では、ユーザーがメディア コントロール バーにある専用の PIP ボタンを選択したときに、PIP モードに切り替わります。
+
+</p>
+
+<pre>
+@Override
+public void onActionClicked(Action action) {
+ if (action.getId() == R.id.lb_control_picture_in_picture) {
+ getActivity().enterPictureInPictureMode();
+ return;
+ }
+ ...
+</pre>
+
+<p>メディア コントロール バーに PIP ボタンを追加すると、ユーザーが動画の再生を操作中に、簡単に PIP モードに切り替えることができます。
+</p>
+
+<img src="{@docRoot}images/android-7.0/pip-button.png" />
+<p class="img-caption"><strong>図 1.</strong> メディア コントロール バー上の [Picture-in-picture] ボタン
+</p>
+
+<p>Android N には、新しい
+<code>PlaybackControlsRow.PictureInPictureAction</code> クラスが含まれています。このクラスは、コントロール バーの PIP アクションと PIP アイコンの使用方法を定義します。
+</p>
+
+<h2 id="handling_ui">ピクチャ イン ピクチャの実行中に UI を処理する</h2>
+
+<p>アクティビティが PIP モードを開始したら、動画の再生のみを表示する必要があります。
+アクティビティが PIP を開始する前に UI 要素を削除して、再び全画面表示に戻ったら、削除した要素を復元します。<code>Activity.onPictureInPictureModeChanged()</code> または
+<code>Fragment.onPictureInPictureModeChanged()</code> をオーバーライドして、必要に応じて UI 要素を有効または無効にします。次に例を示します。
+
+
+</p>
+
+<pre>
+@Override
+public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
+ if (isInPictureInPictureMode) {
+ // Hide the controls in picture-in-picture mode.
+ ...
+ } else {
+ // Restore the playback UI based on the playback status.
+ ...
+ }
+}
+</pre>
+
+<h2 id="continuing_playback">ピクチャ イン ピクチャの実行中に動画の再生を続行する
+</h2>
+
+<p>アクティビティを PIP に切り替えると、システムはそのアクティビティを一時停止状態と見なして、アクティビティの <code>onPause()</code> メソッドを呼び出します。
+PIP モードによってアクティビティが一時停止になっても、動画の再生は一時停止せず、再生を続ける必要があります。
+
+アクティビティの
+<code>onPause()</code> メソッドで PIP を確認し、適切に再生を処理してください。次に例を示します。
+</p>
+
+<pre>
+@Override
+public void onPause() {
+ // If called while in PIP mode, do not pause playback
+ if (isInPictureInPictureMode()) {
+ // Continue playback
+ ...
+ }
+ // If paused but not in PIP, pause playback if necessary
+ ...
+}
+</pre>
+
+<p>アクティビティが PIP モードを終了して全画面モードに戻ると、システムはアクティビティを再開して <code>onResume()</code> メソッドを呼び出します。
+</p>
+
+<h2 id="single_playback">ピクチャ イン ピクチャで単一の再生アクティビティを使用する
+</h2>
+
+<p>動画再生アクティビティが PIP モードのときに、ユーザーがアプリのメイン画面でコンテンツをブラウズ中に新しい動画を選択することがあります。
+全画面モードの既存の再生アクティビティで新しい動画を再生します。新しいアクティビティを起動するとユーザーが混乱する可能性があります。
+
+</p>
+
+<p>動画再生リクエストに対して単一のアクティビティが使用されるようにし、必要に応じて PIP モードの切り替えが行われるようにするには、マニフェストでアクティビティの
+<code>android:launchMode</code> を <code>singleTask</code> に設定します。
+
+</p>
+
+<pre>
+<activity android:name="VideoActivity"
+ ...
+ android:supportsPictureInPicture="true"
+ android:launchMode="singleTask"
+ ...
+</pre>
+
+<p>アクティビティで、{@link android.app.Activity#onNewIntent
+Activity.onNewIntent()} をオーバーライドして新しい動画を処理し、既存の動画再生を必要に応じて停止します。
+</p>
+
+<h2 id="best">ベスト プラクティス</h2>
+
+<p>PIP は、動画を全画面表示で再生するアクティビティに使用します。アクティビティを PIP モードに切り替えるときは、動画コンテンツ以外は何も表示しないでください。アクティビティが PIP モードを開始したタイミングを検出し、<a href="#handling_ui">ピクチャ イン ピクチャの実行中に UI を処理する</a>で説明したように、UI 要素を非表示にします。
+
+
+</p>
+
+<p>PIP ウィンドウは画面の隅にフローティング ウィンドウとして表示されるため、メイン画面のどの場所にも重要な情報を表示しないでください。PIP ウィンドウによって隠れる可能性があります。
+
+</p>
+
+<p>アクティビティが PIP モードになると、デフォルトで、入力フォーカスは失われます。PIP モードで動作中に入力イベントを受け付けるには、
+<code>MediaSession.setMediaButtonReceiver()</code> を使用します。
+</p>
diff --git a/docs/html-intl/intl/ja/training/tv/tif/content-recording.jd b/docs/html-intl/intl/ja/training/tv/tif/content-recording.jd
new file mode 100644
index 0000000..3c58cfd
--- /dev/null
+++ b/docs/html-intl/intl/ja/training/tv/tif/content-recording.jd
@@ -0,0 +1,142 @@
+page.title=TV の録画機能
+page.keywords=preview,sdk,tv,recording
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>このドキュメントの内容</h2>
+ <ol>
+ <li><a href="#supporting">録画のサポートを示す</a></li>
+ <li><a href="#recording">セッションを録画する</a></li>
+ <li><a href="#errors">録画のエラーを処理する</a></li>
+ <li><a href="#sessions">録画したセッションを管理する</a></li>
+ <li><a href="#best">ベスト プラクティス</a></li>
+ </ol>
+</div>
+</div>
+
+<p>TV の入力サービスを使用すると、ユーザーは time-shifting API を介してチャンネルの再生を一時停止および再開できます。
+Android N では、録画したセッションを複数保存できるようにして、タイムシフティング機能を拡張しています。
+</p>
+
+<p>ユーザーはあらかじめ録画をスケジュールできます。また、プログラムを視聴しながら録画を開始することもできます。
+システムが録画を保存すると、システムの TV アプリで録画をブラウジング、管理、再生できます。
+</p>
+
+<p>TV 入力サービスで録画機能を提供する場合は、アプリが録画をサポートしていることをシステムに示し、プログラムの録画機能を実装し、録画中に発生したエラーを処理および通知し、録画したセッションを管理する必要があります。
+
+
+</p>
+
+<p class="note"><strong>注:</strong>ライブチャンネル アプリでは、録画を作成したり録画にアクセスするための機能はまだ提供されていません。
+ライブチャンネル アプリに変更が行われるまで、TV 入力サービスの録画機能を完全にテストすることは難しい場合があります。
+
+</p>
+
+<h2 id="supporting">録画のサポートを示す</h2>
+
+<p>TV 入力サービスで録画をサポートしていることをシステムに示すには、サービス メタデータ XML ファイル内の <code>android:canRecord</code> 属性を <code>true</code> に設定します。
+
+
+</p>
+
+<pre>
+<tv-input xmlns:android="http://schemas.android.com/apk/res/android"
+ <b>android:canRecord="true"</b>
+ android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />
+</pre>
+
+<p>サービス メタデータ ファイルの詳細については、<a href="{@docRoot}training/tv/tif/tvinput.html#manifest">マニフェストで TV 入力サービスを宣言する</a>をご覧ください。
+
+
+</p>
+
+<p>また、以下のステップを使用して、コードで録画機能のサポートを示すことができます。
+</p>
+
+<ol>
+<li><code>TvInputService.onCreate()</code> メソッドで、<code>TvInputInfo.Builder</code> クラスを使用して新しい
+<code>TvInputInfo</code> オブジェクトを作成します。
+</li>
+<li>新しい <code>TvInputInfo</code> オブジェクトを作成するときは、
+<code>setCanRecord(true)</code> を呼び出してから、<code>build()</code> を呼び出して、サービスが録画をサポートしていることを示します。
+</li>
+<li>
+<code>TvInputManager.updateTvInputInfo()</code> を呼び出してシステムに <code>TvInputInfo</code> オブジェクトを登録します。</li>
+</ol>
+
+<h2 id="recording">セッションを録画する</h2>
+
+<p>TV 入力サービスで録画機能のサポートを登録した後、システムがアプリの録画機能の実装にアクセスする必要があるときに、
+<code>TvInputService.onCreateRecordingSession()</code> を呼び出します。
+
+独自の
+<code>TvInputService.RecordingSession</code> サブクラスを実装し、<code>onCreateRecordingSession()</code> コールバックが発生したときに返します。
+
+このサブクラスは、正しいチャンネル データへの切り替え、要求されたデータの録画、録画のステータスおよびエラーのシステムへの通知を処理します。
+
+</p>
+
+<p>システムが <code>RecordingSession.onTune()</code> を呼び出すと、チャンネル URI を渡して、URI で指定されたチャンネルに合わせます。
+<code>notifyTuned()</code> を呼び出して、アプリが目的のチャンネルに合わせたことをシステムに通知します。または、アプリが適切なチャンネルに合わせることができなかった場合は、
+<code>notifyError()</code> を呼び出します。
+
+</p>
+
+<p>次に、システムは <code>RecordingSession.onStartRecording()</code> コールバックを呼び出します。
+アプリは直ちに録画を開始する必要があります。システムはこのコールバックを呼び出すときに、これから録画するプログラムに関する情報を含む URI を提供します。
+
+録画が完了したら、このデータを <code>RecordedPrograms</code> データ テーブルにコピーする必要があります。
+</p>
+
+<p>最後に、システムが <code>RecordingSession.onStopRecording()</code> を呼び出します。この時点で、アプリは録画を直ちに停止する必要があります。
+また、<code>RecordedPrograms</code> テーブルのエントリも作成する必要があります。
+このエントリは、
+<code>RecordedPrograms.COLUMN_RECORDING_DATA_URI</code> 列に録画したセッション データの URI を設定し、システムが最初に
+<code>onStartRecording()</code> を呼び出したときに提供したプログラム情報がすべて含まれている必要があります。
+
+</p>
+
+<p><code>RecordedPrograms</code> テーブルへのアクセス方法の詳細については、<a href="#sessions">録画したセッションを管理する</a>をご覧ください。
+</p>
+
+<h2 id="errors">録画のエラーを処理する</h2>
+
+<p>録画中にエラーが発生し、録画したデータのレンダリングができない場合は、<code>RecordingSession.notifyError()</code> を呼び出してシステムに通知します。同様に、録画セッションの作成後に <code>notifyError()</code> を呼び出して、アプリがセッションを録画できないことをシステムに通知することもできます。
+
+
+</p>
+
+<p>録画中にエラーが発生したにもかかわらず、一部の録画を再生できるようにしてユーザーに提供したい場合は、
+<code>RecordingSession.notifyRecordingStopped()</code> を呼び出すと、システムで部分的なセッションを使用できるようになります。
+
+</p>
+
+<h2 id="sessions">録画したセッションを管理する</h2>
+
+<p>システムは、すべての録画可能チャンネル アプリで録画したすべてのセッションの情報を、<code>TvContract.RecordedPrograms</code>
+コンテンツ プロバイダ テーブルに保持します。
+この情報は、
+<code>RecordedPrograms.Uri</code> コンテンツ URI を使用してアクセスできます。コンテンツ プロバイダ API を使用して、このテーブルのエントリの読み取り、追加、削除が可能です。
+</p>
+
+<p>コンテンツ プロバイダのデータの操作方法については、<a href="{@docRoot}guide/topics/providers/content-provider-basics.html">コンテンツ プロバイダの基本</a>をご覧ください。
+
+</p>
+
+<h2 id="best">ベスト プラクティス</h2>
+
+<p>TV 端末のストレージには上限があるため、録画したセッションを保存するためにストレージを割り当てるときは、十分に検討してください。
+録画したセッションを保存する容量が不足している場合は、
+<code>RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)</code> を使用します。
+</p>
+
+<p>ユーザーが録画を開始すると、できるだけ速やかにデータの録画を開始する必要があります。
+録画を円滑に開始するには、システムが
+<code>onCreateRecordingSession()</code> コールバックを呼び出したときにストレージ容量のアクセスや割り当てなど、時間のかかるタスクをあからじめ完了しておきます。
+そうすれば、<code>onStartRecording()</code> コールバックが発生したときに直ちに録画を開始できます。
+
+</p>
diff --git a/docs/html-intl/intl/ko/about/versions/marshmallow/android-6.0-testing.jd b/docs/html-intl/intl/ko/about/versions/marshmallow/android-6.0-testing.jd
new file mode 100644
index 0000000..1222227
--- /dev/null
+++ b/docs/html-intl/intl/ko/about/versions/marshmallow/android-6.0-testing.jd
@@ -0,0 +1,190 @@
+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/android-7.0-changes.jd b/docs/html-intl/intl/ko/about/versions/nougat/android-7.0-changes.jd
new file mode 100644
index 0000000..d30048f
--- /dev/null
+++ b/docs/html-intl/intl/ko/about/versions/nougat/android-7.0-changes.jd
@@ -0,0 +1,610 @@
+page.title=동작 변경 사항
+page.keywords=preview, sdk, 호환성
+meta.tags="preview", "compatibility"
+page.tags="preview", "developer preview"
+page.image=images/cards/card-n-changes_2x.png
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>이 문서의 내용</h2>
+
+<ol>
+ <li><a href="#perf">성능 향상</a>
+ <ol>
+ <li><a href="#doze">잠자기 모드</a></li>
+ <li><a href="#bg-opt">백그라운드 최적화</a></li>
+ </ol>
+ </li>
+ <li><a href="#perm">권한 변경</a>
+ </li>
+ <li><a href="#sharing-files">앱 사이의 파일 공유</a></li>
+ <li><a href="#accessibility">접근성 향상</a>
+ <ol>
+ <li><a href="#screen-zoom">화면 확대/축소</a></li>
+ <li><a href="#vision-settings">설정 마법사의 Vision Settings</a></li>
+ </ol>
+ </li>
+ <li><a href="#ndk">플랫폼 라이브러리에 연결되는 NDK 앱</a></li>
+ <li><a href="#afw">Android for Work</a></li>
+ <li><a href="#annotations">주석 보존</a></li>
+ <li><a href="#other">기타 중요한 사항</a></li>
+</ol>
+
+<h2>참고 항목</h2>
+<ol>
+ <li><a href="{@docRoot}preview/api-overview.html">
+ Android N API 개요</a></li>
+</ol>
+
+</div>
+</div>
+
+
+<p>
+ Android N에는 새로운 기능 및 특징과 더불어
+다양한 시스템 변경 사항 및 API 동작 변경 사항이 포함되어 있습니다. 이 문서에서는
+여러분이 앱에서 숙지하고 고려해야 하는 몇 가지
+주요 변경 사항을 소개하겠습니다.
+</p>
+
+<p>
+ 이전에 Android용 앱을 게시한 적이 있으신 경우, 이와 같은
+ 플랫폼 변경으로 인해 앱이 영향을 받을 수 있다는 점을 유의하세요.
+</p>
+
+
+<h2 id="perf">배터리와 메모리</h2>
+
+<p>
+Android N에는 기기의 배터리 수명을 연장하고 RAM 사용량을 감소시키기 위한
+시스템 동작 변경 사항이 포함됩니다. 이러한 변경 사항은, 앱이 특정한 암시적 인텐트를 통해
+다른 앱과 상호 작용하는 방식과 함께, 시스템 리소스에 대한
+앱의 액세스에 영향을 미칠 수 있습니다.
+</p>
+
+<h3 id="doze">잠자기 모드</h3>
+
+<p>
+ Android 6.0(API 레벨 23)에 도입된 잠자기 모드는 사용자가 기기의
+플러그를 뽑고 정지 상태에서 화면이 꺼져 있을 때 CPU 및
+네트워크 액티비티를 지연시켜서 배터리 수명을 개선해 줍니다. Android N에서는
+기기의 플러그를 뽑고 화면이 꺼져 있는 동안
+CPU 및 네트워크 제한의 하위 세트를 적용하여 잠자기 모드를 더욱
+향상시켜 주지만, 반드시 정지 상태일 필요는 없습니다(예: 핸드셋을 사용자의 주머니에 넣고 다니는 경우).
+</p>
+
+
+<img src="{@docRoot}images/android-7.0/doze-diagram-1.png" alt="" height="251px" id="figure1" />
+<p class="img-caption">
+ <strong>그림 1.</strong> 잠자기 모드에서 배터리 수명을 개선하기 위해 첫 번째 레벨의 시스템 액티비티 제한을
+적용하는 방법에 대한 그림.
+</p>
+
+<p>
+ 기기가 배터리 전원에 연결되고 일정 시간 동안 화면이 꺼져 있는 경우
+기기가 잠자기 모드로 전환되고 첫 번째 하위 세트의 제한을 적용합니다. 기기는 앱
+네트워크 액세스를 차단하고, 작업과 동기화를 지연시킵니다. 기기가 잠자기 모드로
+전환된 후 일정 시간 동안 정지 상태에 있으면, 시스템은 잠자기 모드의 나머지 제한 사항을 {@link android.os.PowerManager.WakeLock},
+{@link android.app.AlarmManager} 알람, GPS 및 Wi-Fi 스캔에
+적용합니다. 일부 잠자기 모드 제한이
+적용되든 모든 잠자기 모드 제한이 적용되든 상관없이,
+시스템은 잠시 동안의 유지 관리 기간 중에 기기를 깨우며, 이 기간 중에는
+애플리케이션의 네트워크 액세스가 허용되고 지연된 작업/동기화가 실행됩니다.
+</p>
+
+
+<img src="{@docRoot}images/android-7.0/doze-diagram-2.png" alt="" id="figure2" />
+<p class="img-caption">
+ <strong>그림 2.</strong> 기기가 일정 시간 동안 정지 상태에 있은 후에
+잠자기 모드에서 두 번째 레벨의 시스템 액티비티 제한을 적용하는 방법에 대한 그림.
+</p>
+
+<p>
+ 화면을 활성화하거나 기기의 플러그를 꽂으면 잠자기 모드가
+종료되고 이러한 처리 제한이 제거됩니다. <a href="{@docRoot}training/monitoring-device-state/doze-standby.html">잠자기 및 앱 대기
+모드 최적화</a>에서 설명한 대로, Android 6.0(API 레벨 23)에 도입된
+이전 버전의 잠자기 모드에 맞춰 앱을 조정할 경우에는 이러한 추가적인 동작이
+권장 사항 및 모범
+사례에 영향을 미치지 않습니다. 하지만
+여전히 해당 권장 사항을 따라야 합니다. 예를 들어, GCM(Google Cloud Messaging)을 사용하여 메시지를
+송수신하고 추가적인 잠자기 모드 동작을 수용하기 위한 업데이트 계획을
+시작해야 합니다.
+</p>
+
+
+<h3 id="bg-opt">Project Svelte: 백그라운드 최적화</h3>
+
+<p>
+ Android N에서는 메모리 사용량 및 전원 소비량을 최적화하기 위해
+ 세 가지 암시적 브로드캐스트를 제거합니다. 이렇게 변경해야 하는
+이유는, 암시적 브로드캐스트는 백그라운드에서 브로드캐스트를
+수신하도록 등록된 앱을 자주 시작하기 때문입니다. 이들 브로드캐스트를 제거하면 기기 성능과 사용자 환경이
+상당히 향상될 수 있습니다.
+</p>
+
+<p>
+ 모바일 기기의 경우 연결 변경이 자주 나타납니다(예: Wi-Fi와
+ 모바일 데이터 간의 이동 시). 현재는
+암시적 {@link
+ android.net.ConnectivityManager#CONNECTIVITY_ACTION} 브로드캐스트의 수신기를
+매니페스트에 등록하여 앱이 이러한 연결 변경을 모니터링할 수 있습니다. 많은 앱들이 이 브로드캐스트를 수신하도록
+ 등록하기 때문에, 단일 네트워크 스위치가 모든 앱을 깨우고 이들 앱이 해당 브로드캐스트를
+ 동시에 처리하도록 할 수 있습니다.
+</p>
+
+<p>
+ 마찬가지로, 이전 버전의 Android에서는 앱이 다른 앱(예: 카메라)에서 암시적 {@link
+ android.hardware.Camera#ACTION_NEW_PICTURE} 및 {@link
+ android.hardware.Camera#ACTION_NEW_VIDEO} 브로드캐스트를
+수신하도록 등록할 수 있었습니다. 사용자가 카메라 앱으로 사진을 찍으면, 이들 앱이 깨어나서 해당 브로드캐스트를
+ 처리합니다.
+</p>
+
+<p>
+ 이런 문제를 완화하기 위해, Android N은 다음과 같은 최적화를
+ 적용합니다.
+</p>
+
+<ul>
+ <li>Android N을 대상으로 하는 앱은 해당 이벤트의 알림을 요청하는 매니페스트 항목이 있더라도 {@link
+ android.net.ConnectivityManager#CONNECTIVITY_ACTION} 브로드캐스트를
+수신하지 않습니다. 실행 중인
+앱은 {@link android.content.BroadcastReceiver}로 알림을 요청하면
+여전히 기본 스레드에서 {@code CONNECTIVITY_CHANGE}를 수신할 수 있습니다.
+ </li>
+
+ <li>앱은 {@link
+ android.hardware.Camera#ACTION_NEW_PICTURE} 또는 {@link
+ android.hardware.Camera#ACTION_NEW_VIDEO} 브로드캐스트를 송수신할 수 없습니다. 이 최적화는 Android N을 대상으로
+ 하는 앱뿐 아니라 모든 앱에 영향을 미칩니다.
+ </li>
+</ul>
+
+<p>앱이 이들 인텐트 중 하나라도 사용하는 경우에는,
+ Android N 기기를 올바로 대상으로 삼을 수 있도록 이들 인텐트에 대한 종속성을 최대한 빨리 제거해야 합니다.
+ Android 프레임워크는 이러한 암시적 브로드캐스트의
+ 필요성을 줄이기 위한 여러 가지 해결책을 제공합니다. 예를 들어, {@link
+ android.app.job.JobScheduler} API는 지정된 조건(예:
+고정 요금제 네트워크에 연결)이 충족될 경우 네트워크 운영을 예약할 수 있는
+강력한 메커니즘을 제공합니다. 심지어 {@link
+ android.app.job.JobScheduler}를 사용하여 콘텐츠 공급자의 변경 사항에 대응할 수도 있습니다.
+</p>
+
+<p>
+ N에서 백그라운드 최적화와 앱을 조정하는 방법에 대한 자세한 내용은
+ <a href="{@docRoot}preview/features/background-optimization.html">백그라운드 최적화</a>를
+ 참조하세요.
+</p>
+
+<h2 id="perm">권한 변경</h2>
+
+<p>
+ Android N에는 앱에 영향을 미칠 수도 있는 권한 변경이 포함되어 있습니다.
+</p>
+
+<h3 id="permfilesys">파일 시스템 권한 변경</h3>
+
+<p>
+ 개인 파일의 보안을 강화하기 위해, Android N 이상을 대상으로 하는 앱의 개인
+ 디렉터리는 액세스가 제한됩니다(<code>0700</code>).
+ 이 설정은 크기 또는
+존재 여부와 같은 개인 파일의 메타데이터 유출을 막아줍니다. 이러한 권한 변경은 여러 가지 부작용이 있습니다.
+</p>
+
+<ul>
+ <li>
+ 소유자가 개인 파일의 파일 권한을
+더 이상 완화해서는 안 되며,
+{@link android.content.Context#MODE_WORLD_READABLE} 및/또는
+{@link android.content.Context#MODE_WORLD_WRITEABLE}을 사용하여 권한을 완화하려고 시도하면
+{@link java.lang.SecurityException}이 트리거됩니다.
+ <p class="note">
+ <strong>참고:</strong> 아직까지는 이 제한이 완전히 적용되지 않습니다.
+ 앱이 여전히 기본
+API 또는 {@link java.io.File File} API를 사용하여 개인 디렉터리에 대한 권한을 수정할 수도 있습니다. 하지만
+개인 디렉터리에 대한 권한은 부득이한 경우가 아니라면 완화하지 않는 것이 좋습니다.
+ </p>
+ </li>
+ <li>
+ 패키지 도메인 외부에서 <code>file://</code> URI를 전달하면 수신기가 액세스 불가능한 경로로
+ 남아 있을 수 있습니다. 따라서
+<code>file://</code> URI를 전달하려고 시도하면
+<code>FileUriExposedException</code>이 트리거됩니다. 개인 파일의 내용을 공유하기 위해
+권장되는 방법은 {@link
+ android.support.v4.content.FileProvider}를 사용하는 것입니다.
+ </li>
+ <li>
+ {@link android.app.DownloadManager}는 비공개로
+저장된 파일을 더 이상 파일 이름별로 공유할 수 없습니다. 레거시 애플리케이션은 {@link
+ android.app.DownloadManager#COLUMN_LOCAL_FILENAME}에 액세스할 때
+액세스가 불가능한 경로가 될 수 있습니다. Android N 이상을
+대상으로 하는 앱은 {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}에 액세스할 때 {@link java.lang.SecurityException}을
+트리거합니다.
+
+
+{@link
+ android.app.DownloadManager.Request#setDestinationInExternalFilesDir
+ DownloadManager.Request.setDestinationInExternalFilesDir()} 또는
+ {@link
+ android.app.DownloadManager.Request#setDestinationInExternalPublicDir
+ DownloadManager.Request.setDestinationInExternalPublicDir()}
+을 사용하여 다운로드
+위치를 공용 위치로 설정하는 레거시 애플리케이션은
+{@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}에 있는 경로에 여전히 액세스할 수 있지만, 이
+ 메서드는 부득이한 경우가 아니라면 사용하지 않는 것이 좋습니다. {@link android.app.DownloadManager}에 의해 노출되는 파일에
+액세스하는 좋은 방법은
+{@link android.content.ContentResolver#openFileDescriptor
+ ContentResolver.openFileDescriptor()}를 사용하는 것입니다.
+ </li>
+</ul>
+
+<h2 id="sharing-files">앱 사이의 파일 공유</h2>
+
+<p>
+Android N을 대상으로 하는 앱의 경우, Android 프레임워크는 앱 외부에서 {@code file://} URI의 노출을
+금지하는 {@link android.os.StrictMode} API 정책을
+적용합니다. 파일 URI를 포함하는 인텐트가 앱을 떠나면
+{@code FileUriExposedException} 예외가 생기면서 앱에 오류가 발생합니다.
+</p>
+
+<p>
+애플리케이션 간에 파일을 공유하려면 {@code content://} URI를
+보내고 이 URI에 대해 임시 액세스 권한을 부여해야 합니다. 이 권한을 가장 쉽게 부여하는 방법은
+{@link android.support.v4.content.FileProvider} 클래스를 사용하는 방법입니다. 권한과 파일 공유에
+대한 자세한
+내용은 <a href="{@docRoot}training/secure-file-sharing/index.html">파일 공유</a>를 참조하세요.
+</p>
+
+<h2 id="accessibility">접근성 향상</h2>
+
+<p>
+ Android N에는 시력이 나쁘거나 손상된 사용자를 위해 플랫폼의
+ 사용성을 개선하기 위한 변경 사항이 포함되어 있습니다. 이러한 변경 사항에서는 일반적으로
+ 앱의 코드를 변경할 필요가 없지만, 사용자 환경에
+ 미치는 잠재적인 영향을 평가하기 위해 이들 기능을 검토하고
+ 앱으로 테스트해야 합니다.
+</p>
+
+
+<h3 id="screen-zoom">화면 확대/축소</h3>
+
+<p>
+ Android N에서는 사용자가 <strong>Display size</strong>를 설정할 수
+있으며, 이 설정에서 화면의 모든 요소를 확대하거나 축소할 수 있으므로, 시력이
+나쁜 사용자의 기기 접근성이 향상됩니다. 최소 화면 너비인 <a href="http://developer.android.com/guide/topics/resources/providing-resources.html">sw320dp</a>를 초과하는 화면은 사용자가 확대/축소할
+ 수 없으며, 이 너비는 일반적인 중간 크기 전화기인 Nexus 4의
+ 너비입니다.
+</p>
+
+<div class="cols">
+
+<div class="col-6">
+ <img src="{@docRoot}images/android-7.0/screen-zoom-1.png" alt="" height="XXX" id="figure1" />
+</div>
+<div class="col-6">
+ <img src="{@docRoot}images/android-7.0/screen-zoom-2.png" alt="" height="XXX" id="figure1" />
+</div>
+
+</div> <!-- end cols -->
+<p class="img-caption">
+ <strong>그림 3.</strong> 오른쪽 화면은 Android N 시스템 이미지가
+실행 중인 기기의 Display size를 늘릴 때의 효과를 보여줍니다.
+</p>
+
+
+<p>
+ 기기 밀도가 변경되면 시스템은 다음과 같은 방식으로 실행 중인
+ 앱에게 알립니다.
+</p>
+
+<ul>
+ <li>앱이 API 레벨 23 이하를 대상으로 하는 경우 시스템에서는
+모든 백그라운드 프로세스를 자동으로 종료합니다. 즉, 사용자가 이들
+ 앱으로부터 전환하여 <em>Settings</em> 화면을
+ 열고 <strong>Display size</strong> 설정을 변경하면, 시스템은 저용량 메모리
+ 상황에서와 동일한 방식으로 앱을 종료합니다. 앱에 포그라운드 프로세스가
+ 있는 경우, <a href="{@docRoot}guide/topics/resources/runtime-changes.html">런타임 변경 처리</a>에 설명된 대로, 시스템은
+ 마치 기기의 방향이 변경된
+ 것처럼 구성 변경을 해당 프로세스에 알립니다.
+ </li>
+
+ <li>앱이 Android N을 대상으로 하는 경우,
+<a href="{@docRoot}guide/topics/resources/runtime-changes.html">런타임 변경 처리</a>에 설명된
+대로, 구성 변경을 모든 프로세스(포그라운드 및 백그라운드)에
+알립니다.
+ </li>
+</ul>
+
+<p>
+ 앱이 Android 모범 사례를 따르기만 한다면, 대부분의 앱은 이 기능을
+ 지원하기 위해 어떠한 변경도 수행할 필요가 없습니다. 확인할 사항은 구체적으로 다음과 같습니다.
+</p>
+
+<ul>
+ <li>화면 너비가 <code><a href=
+ "{@docRoot}guide/topics/resources/providing-resources.html">sw320dp</a></code>인 기기에서 앱을 테스트하고 적절하게 작동하는지
+ 확인하세요.
+ </li>
+
+ <li>기기 구성이 변경되는 경우, 밀도에 종속된 모든 캐시된
+정보(예: 캐시된 비트맵 또는 네트워크에서 로드된 리소스)를
+업데이트하세요. 앱이 일시 정지 상태에서 다시 시작하는 경우 구성
+ 변경을 확인하세요.
+ <p class="note">
+ <strong>참고:</strong> 구성에 종속된 데이터를 캐시하는 경우,
+ 해당 데이터에 적절한 화면 크기 또는 픽셀 밀도와 같은 관련 메타데이터를
+ 포함시키는 것이 좋습니다. 이 메타데이터를 저장해 놓으면,
+ 구성이 변경된 후에 캐시된 데이터를 새로 고칠지 여부를
+ 결정할 수 있습니다.
+ </p>
+ </li>
+
+ <li>픽셀 단위는 화면 밀도에 따라
+ 변하지 않으므로, 이 단위로 치수를 지정하지 마세요. 그 대신, <a href="{@docRoot}guide/practices/screens_support.html">밀도에 독립적인 픽셀</a>(<code>dp</code>) 단위로
+ 치수를 지정하세요.
+ </li>
+</ul>
+
+<h3 id="vision-settings">설정 마법사의 Vision Settings</h3>
+
+<p>
+ Android N에는 Welcome 화면에 Vision Settings가 포함되어
+있으며, 여기서 사용자는
+ <strong>Magnification gesture</strong>, <strong>Font size</strong>,
+<strong>Display size</strong> 및 <strong>TalkBack</strong>의 접근성 설정을 새 기기에 구성할 수 있습니다. 이러한
+변경은 다른 화면 설정에 관련된 버그의 가시성을 증대시킵니다. 이 기능의 영향을 평가하려면,
+ 이들 설정을 활성화하여 앱을
+ 테스트해야 합니다. 이 설정은 <strong>Settings >
+ Accessibility</strong> 아래에 있습니다.
+</p>
+
+<h2 id="ndk">플랫폼 라이브러리에 연결되는 NDK 앱</h2>
+
+<p>
+ 비공개 API가 로드되는 것을 막기 위해 Android N에는 네임스페이스 변경이 포함되어 있습니다.
+ NDK를 사용하는 경우에는 Android 플랫폼에서
+ 공개 API를 사용해야만 합니다. Android의 다음 번 공식 릴리스에서 비공개 API를 사용하면 앱 작동이 중단될 수
+ 있습니다.
+</p>
+
+<p>
+ 비공개 API의 사용을 여러분에게 경고하기 위해, Android N 기기에서 실행
+ 중인 앱은 어떤 앱이 비공개 API를 호출할 때 logcat 출력에 오류를 생성합니다.
+ 또한, 이런 상황이 잘 인식될 수 있도록
+ 이 오류가 기기 화면에도 메시지로 표시됩니다. 여러분이 앱 코드를 검토하여
+ 비공개 플랫폼 API의 사용을 제거해야 하며, 프리뷰 기기 또는
+ 에뮬레이터를 사용하여 앱을 철저히 테스트해야 합니다.
+</p>
+
+<p>
+ 앱이 플랫폼 라이브러리에 종속된 경우, 개인 API를 이와 동등한
+ 공개 API로 바꾸기 위한 일반적인 수정 사항을 NDK 문서에서 참조하세요.
+ 또한, 자신도 모르는 사이에 플랫폼 라이브러리에
+ 연결되어 있을 수가 있으며, 특히 여러분의 앱이 사용하는 라이브러리가 플랫폼의
+ 일부(예: <code>libpng</code>)이지만 NDK의 일부가 아닌 경우에는 더 그렇습니다. 이 경우에는 연결에
+필요한 모든 .so 파일이 APK에 포함되어 있는지 확인하세요.
+</p>
+
+<p class="caution">
+ <strong>주의:</strong> 일부 타사 라이브러리가 비공개 API에
+ 연결될 수도 있습니다. 앱이 이들 라이브러리를 사용하는 경우, Android의
+ 다음 번 공식 릴리스에서 실행할 때 앱 작동이 중단될 수 있습니다.
+</p>
+
+<p>
+ 앱은 NDK에 포함되지 않은 고유 라이브러리를 사용하거나
+ 이에 종속되어서는 안 됩니다. 왜냐하면 이 라이브러리는 특정
+ Android 릴리스에서 다른 릴리스로 변경되거나 제거될 수 있기 때문입니다. OpenSSL에서 BoringSSL로의 전환은 이러한 변경의 한 예입니다.
+ 또한, NDK에 포함되지 않은
+플랫폼 라이브러리에는 호환성 요구 사항이 없기 때문에, 다른 장치에서는
+호환성 레벨이 다를 수도 있습니다. 구형 기기에 있는 비 NDK 라이브러리에 액세스해야 하는 경우
+Android API 레벨에 따라 로드를 수행하세요.
+</p>
+
+<p>
+ 이러한 유형의 문제를 진단하는 데 도움을 주기 위해, 여기서는
+ Android N으로 앱을 빌드할 때 발생할 수 있는 Java 및 NDK 오류의 몇 가지 예를 보여줍니다.
+</p>
+
+<p>Java 오류의 예:</p>
+<pre class="no-pretty-print">
+java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so"
+ is not accessible for the namespace "classloader-namespace"
+</pre>
+
+<p>NDK 오류의 예:</p>
+<pre class="no-pretty-print">
+dlopen failed: cannot locate symbol "__system_property_get" referenced by ...
+</pre>
+
+
+<p>
+ 다음은 이러한 유형의 오류가 발생한 앱의 몇 가지 일반적인 수정사항입니다.
+</p>
+
+<ul>
+ <li>libandroid_runtime.so에서 getJavaVM 및 getJNIEnv 사용은 표준
+ JNI 함수로 교체될 수 있습니다.
+<pre class="no-pretty-print">
+AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h>
+AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or
+JavaVM::AttachCurrentThread from <jni.h>.
+</pre>
+ </li>
+
+ <li>{@code libcutils.so}에서 {@code property_get} 기호 사용은 공개
+ {@code alternative __system_property_get}으로 교체될 수 있습니다.
+ 이렇게 하려면, 다음의 include와 함께 {@code __system_property_get}을 사용하세요.
+<pre>
+#include <sys/system_properties.h>
+</pre>
+ </li>
+
+ <li>{@code libcrypto.so}에서 {@code SSL_ctrl} 기호 사용은 앱
+로컬 버전으로 교체되어야 합니다. 예를 들어, {@code .so} 파일에서
+ {@code libcyrpto.a}를 정적으로 링크하거나 BoringSSL 또는 OpenSSL에서
+ {@code libcrypto.so}를 동적으로 앱에 포함시켜야 합니다.
+ </li>
+</ul>
+
+<h2 id="afw">Android for Work</h2>
+<p>
+ Android N에는 Android for Work를 대상으로 하는 앱에 대한 변경 사항이
+포함되어 있습니다. 인증서 설치, 비밀번호 재설정,
+보조 사용자 관리 및 기기 식별자 액세스에 대한 변경 사항이 이에 포함됩니다. Android for Work 환경용 앱을 빌드하는 경우에는 이러한
+ 변경 사항을 검토하고 그에 따라
+앱을 수정해야 합니다.
+</p>
+
+<ul>
+ <li>DPC가 인증서를 설정할 수 있으려면, 위임된 인증서 설치 관리자를 여러분이 먼저
+ 설치해야 합니다. N SDK를 대상으로 하는 프로필 소유자
+ 앱 및 기기 소유자 앱의 경우, 기기 정책 컨트롤러(DPC)가 <code>DevicePolicyManager.setCertInstallerPackage()</code>를 호출하기
+ 전에, 위임된 인증서 설치 관리자를 여러분이 먼저
+설치해야 합니다. 아직 설치 관리자가
+설치되지 않은 경우 시스템에서 <code>IllegalArgumentException</code>이
+발생합니다.
+ </li>
+
+ <li>이제 기기 관리자의 비밀번호 재설정 제한이 프로필 소유자에게도
+ 적용됩니다. 기기 관리자는 이미 설정된 암호를 변경하거나
+ 지우기 위해 {@code DevicePolicyManager.resetPassword()}를 더 이상 사용할
+ 수 없습니다. 기기 관리자는
+ 기기에 비밀번호, PIN 또는 패턴이 없는 경우에만 비밀번호를 설정할 수 있습니다.
+ </li>
+
+ <li>제한이 설정되어 있더라도 기기 소유자 및 프로필 소유자는
+ 계정을 관리할 수 있습니다. <code>DISALLOW_MODIFY_ACCOUNTS</code> 사용자
+ 제한이 있더라도 기기 소유자 및 프로필 소유자는 계정 관리 API를 호출할 수 있습니다.
+ </li>
+
+ <li>기기 소유자는 보조 사용자를 보다 쉽게 관리할 수 있습니다. 기기가
+기기 소유자 모드에서 실행 중인 경우 <code>DISALLOW_ADD_USER</code> 제한이
+자동으로 설정됩니다. 이렇게 하면 사용자는 관리되지 않는 보조 사용자를 생성할 수
+없습니다. 또한, <code>CreateUser()</code> 및
+ <code>createAndInitializeUser()</code> 메서드가 사용 중단되었으며, 새로운
+<code>DevicePolicyManager.createAndManageUser()</code> 메서드로 대체되었습니다.
+ </li>
+
+ <li>기기 소유자는 기기 식별자에 액세스할 수 있습니다. 기기
+소유자는 <code>DevicePolicyManagewr.getWifiMacAddress()</code>를 사용하여 기기의
+ Wi-Fi MAC 주소에 액세스할 수 있습니다. 기기에서
+Wi-Fi가 활성화된 적이 없는 경우 이 메서드는 {@code null} 값을 반환합니다.
+ </li>
+
+ <li>Work Mode 설정은 업무용 앱에 대한 액세스를 제어합니다. 작업 모드가 해제되면
+시스템 런처에서는 업무용 앱을 회색으로 표시하여 해당 앱이 사용될 수 없음을 나타냅니다. 작업 모드를
+ 다시 활성화하면 정상적인 동작이 복원됩니다.
+</ul>
+
+<p>
+ Android N에서 Android for Work의 변경 사항에 대한 자세한 내용은
+<a href="{@docRoot}preview/features/afw.html">Android for Work 업데이트</a>를 참조하세요.
+</p>
+
+<h2 id="annotations">주석 보존</h2>
+
+<p>
+Android N에서는 주석의 표시 여부가 무시되던 버그가 수정되었습니다. 이 문제로 인해 런타임이 액세스할 수 없어야 하는 주석에 액세스할 수 있었습니다.
+
+ 이러한 주석으로는 다음이 포함됩니다.
+</p>
+
+<ul>
+ <li>{@code VISIBILITY_BUILD}: 빌드 시에만 표시되어야 합니다.</li>
+ <li>{@code VISIBILITY_SYSTEM}: 런타임에
+기본 시스템에만 표시되어야 합니다.</li>
+</ul>
+
+<p>
+앱이 이 동작에 의존했다면, 런타임에 사용할 수 있어야 하는
+주석에 보존 정책을 추가하세요. {@code @Retention(RetentionPolicy.RUNTIME)}을 사용하여 추가하면 됩니다.
+</p>
+
+<h2 id="other">기타 중요한 사항</h2>
+
+<ul>
+<li>앱이 Android N에서 실행 중일 때 API 레벨이 낮고 사용자가 표시
+크기를 변경하는 경우, 해당 앱 프로세스가 종료됩니다. 앱은 이
+시나리오를 매끄럽게 처리할 수 있어야 합니다. 그렇지 않으면 사용자가 Recents에서
+앱을 복원할 때 앱 작동이 중단됩니다.
+
+<p>
+이러한 동작이 발생하지 않도록 앱을 테스트해야 합니다.
+DDMS를 통해 수동으로 앱을 종료할 때
+동일한 작동 중단을 유발시킴으로써 테스트를 수행할
+수 있습니다.
+</p>
+
+<p>
+N 이상을 대상으로 하는 앱은 밀도 변경 시에 자동으로 종료되지 않지만,
+구성 변경에는 제대로 응답하지 못할 수도 있습니다.
+</p>
+</li>
+
+<li>
+Android N에서 앱은 구성 변경을 매끄럽게 처리할 수 있어야 하며,
+이후에 시작할 때도 작동이 중단되어서는 안 됩니다. 글꼴
+크기(<strong>Setting</strong> >
+<strong>Display</strong> > <strong>Font size</strong>)를 변경하여 앱 동작을 검사한 다음, Recents에서
+앱을 복원할 수 있습니다.
+</li>
+
+<li>
+이전 버전의 Android에서는 버그 때문에, 시스템이 주 스레드에서
+TCP 소켓에 대한 쓰기를 엄격 모드 위반으로서 플래그하지 못했습니다. Android N에서는 이 버그가 수정되었습니다.
+이 동작을 보이는 앱에서는 이제 {@code android.os.NetworkOnMainThreadException}이 발생합니다.
+일반적으로, 주 스레드에서 네트워크 작업을 수행하면 일반적으로
+테일 지연 시간이 길어져 ANR 및 쟁크(jank)를 유발하므로, 이런 작업은 수행하지 않는 것이 좋습니다.
+</li>
+
+<li>
+{@code Debug.startMethodTracing()} 계열에 속하는 메서드는,
+SD 카드의 최상위 레벨에 저장하는 것이 아니라, 이제 공유 저장소의
+패키지별 디렉터리에 출력을 기본적으로
+저장합니다. 즉, 앱은 이들 API를 사용하기 위해 {@code WRITE_EXTERNAL_STORAGE} 권한을 요청할 필요가 더 이상 없습니다.
+</li>
+
+<li>
+상당수 플랫폼 API는 이제 대용량
+페이로드가 {@link android.os.Binder} 트랜잭션을 통해 전송되는 것을 확인하기 시작했으며, 시스템에서는
+이제 {@code TransactionTooLargeExceptions}를
+자동으로 로깅하거나 억제하는 대신 {@code RuntimeExceptions}로 다시 발생시킵니다. 한 가지
+공통적인 예는
+{@link android.app.Activity#onSaveInstanceState Activity.onSaveInstanceState()}에
+너무 많은 데이터를 저장하는 바람에, 앱이 Android N을 대상으로 할 때 {@code ActivityThread.StopInfo}가
+{@code RuntimeException}을 발생시키는 경우입니다.
+</li>
+
+<li>
+앱이 {@link java.lang.Runnable} 작업을 {@link android.view.View}에 게시하고
+{@link android.view.View}가
+창에 연결되지 않은 경우, 시스템에서는
+{@link android.view.View}가 있는 {@link java.lang.Runnable} 작업을 큐에 넣으며,
+{@link java.lang.Runnable} 작업은
+{@link android.view.View}가 창에 연결될 때까지
+실행되지 않습니다. 이 동작은 다음과 같은 버그를 수정합니다.
+<ul>
+ <li>의도한 창의 UI 스레드가 아닌 다른 스레드에서 {@link android.view.View}에 앱이 게시된 경우,
+결과적으로 {@link java.lang.Runnable}이 잘못된 스레드에서 실행될 수 있습니다.
+ </li>
+ <li>{@link java.lang.Runnable} 작업이 루퍼 스레드가 아닌 다른 스레드에서
+게시되었다면 해당 앱이 {@link java.lang.Runnable} 작업을 노출시킬 수도 있습니다.</li>
+</ul>
+</li>
+
+<li>
+{@link android.Manifest.permission#DELETE_PACKAGES DELETE_PACKAGES}
+권한이
+있는 Android N 상의 앱이 패키지를 삭제하려고 하지만, 해당 패키지를 다른 앱이 설치한 경우에는
+사용자의 확인이 필요합니다. 이 시나리오에서는 앱이
+{@link android.content.pm.PackageInstaller#uninstall PackageInstaller.uninstall()}을 호출할 때
+{@link android.content.pm.PackageInstaller#STATUS_PENDING_USER_ACTION STATUS_PENDING_USER_ACTION}을
+반환 상태로 예상해야 합니다.
+</li>
+
+</ul>
+
diff --git a/docs/html-intl/intl/ko/about/versions/nougat/android-7.0-samples.jd b/docs/html-intl/intl/ko/about/versions/nougat/android-7.0-samples.jd
new file mode 100644
index 0000000..1310ae7
--- /dev/null
+++ b/docs/html-intl/intl/ko/about/versions/nougat/android-7.0-samples.jd
@@ -0,0 +1,85 @@
+page.title=샘플
+page.tags="preview", "samples", "android"
+page.image=images/cards/card-n-samples_2x.png
+@jd:body
+
+<p>
+ Android N용으로 다음과 같은 코드 샘플이 제공됩니다. Android Studio에서 샘플을 다운로드하려면 <b>File > Import Samples</b> 메뉴 옵션을 선택합니다.
+
+
+</p>
+
+<p class="note">
+ <strong>참고:</strong> 이러한 다운로드 가능 프로젝트는 Gradle 및 Android Studio와 함께 사용하도록 고안되었습니다.
+
+</p>
+
+
+<h3 id="mw">다중 창 플레이그라운드</h3>
+<img src="{@docRoot}images/android-7.0/sample-multiwindow.png" style="float: left; padding-right: 0.5em" height="250" width="156" />
+<p>
+ 이 샘플은 앱으로 다중 창 사용자 인터페이스를 활용하는
+방법을 보여줍니다.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-MultiWindowPlayground">
+GitHub에서 가져오기</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="an">활성 알림</h3>
+<img src="{@docRoot}images/android-7.0/sample-activenotifications.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ 이것은 NotificationCompat를 사용하여 알림을 발송하는 간단한 서비스를 보여주는 기존 샘플입니다.
+ 각각의 읽지 않은 사용자 대화는 고유한 알림으로 발송됩니다.
+
+</p>
+<p>
+ 이 샘플은 Android N에서 사용할 수 있는 새로운 알림 기능을
+활용하도록 업데이트되었습니다.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-ActiveNotifications">
+GitHub에서 가져오기</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="ms">메시징 서비스</h3>
+<img src="{@docRoot}images/android-7.0/sample-messagingservice.png" style="float: left; padding-right: 0.5em" height="250" width="150" />
+<p>
+ NotificationManager를
+사용하여 현재 애플리케이션이 표시할 알림 개수를 지시하는
+방법을 보여주는 기존 샘플입니다.
+</p>
+<p>
+ 이 샘플은 Android N에서 사용할 수 있는 새로운 알림 기능을
+활용하도록 업데이트되었습니다.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-MessagingService">
+GitHub에서 가져오기</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="fbe">직접 부팅</h3>
+<img src="{@docRoot}images/android-7.0/sample-directboot.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ 이 샘플은 기기 암호화된 저장소에 데이터를 저장하고 액세스하는 방법을 보여줍니다.
+이 저장소는 기기가 부팅된 동안 항상 사용할 수 있습니다.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-DirectBoot">
+GitHub에서 가져오기</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="sda">범위가 지정된 디렉터리 액세스</h3>
+<img src="{@docRoot}images/android-7.0/sample-scopeddirectoryaccess.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ 이 샘플은 적은 권한을 요구하면서도
+특정 디렉터리에서 데이터를 읽고 쓰는 방법을 보여줍니다.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-ScopedDirectoryAccess">
+GitHub에서 가져오기</a>
+</p>
diff --git a/docs/html-intl/intl/ko/about/versions/nougat/android-7.0.jd b/docs/html-intl/intl/ko/about/versions/nougat/android-7.0.jd
new file mode 100644
index 0000000..11cd2b9
--- /dev/null
+++ b/docs/html-intl/intl/ko/about/versions/nougat/android-7.0.jd
@@ -0,0 +1,1039 @@
+page.title=Android N for Developers
+meta.tags="preview", "androidn"
+page.tags="preview", "developer preview"
+page.image=images/cards/card-n-apis_2x.png
+@jd:body
+
+
+
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>주요 개발자 기능</h2>
+ <ol>
+ <ul style="list-style-type:none;">
+ <li><a href="#multi-window_support">다중 창 지원</a></li>
+ <li><a href="#notification_enhancements">알림</a></li>
+ <li><a href="#jit_aot">JIT/AOT 컴파일</a></li>
+ <li><a href="#quick_path_to_app_install">앱 설치를 위한 빠른 경로</a></li>
+ <li><a href="#doze_on_the_go">이동 중 잠자기 모드</a></li>
+ <li><a href="#background_optimizations">백그라운드 최적화</a></li>
+ <li><a href="#data_saver">Data Saver</a></li>
+ <li><a href="#vulkan">Vulkan API</a></li>
+ <li><a href="#tile_api">Quick Settings 타일 API</a></li>
+ <li><a href="#number-blocking">번호 차단</a></li>
+ <li><a href="#call_screening">통화 스크리닝</a></li>
+ <li><a href="#multi-locale_languages">로케일 및 언어</a></li>
+ <li><a href="#emoji">새 이모티콘</a></li>
+ <li><a href="#icu4">Android의 ICU4J API</a></li>
+ <li><a href="#gles_32">OpenGL ES 3.2 API</a></li>
+ <li><a href="#android_tv_recording">Android TV 녹화</a></li>
+ <li><a href="#android_for_work">Android for Work</a></li>
+ <li><a href="#accessibility_enhancements">접근성</a></li>
+ <li><a href="#direct_boot">직접 부팅</a></li>
+ <li><a href="#key_attestation">Key Attestation</a></li>
+ <li><a href="#network_security_config">네트워크 보안 구성</a></li>
+ <li><a href="#default_trusted_ca">신뢰할 수 있는 기본 CA</a></li>
+ <li><a href="#apk_signature_v2">APK Signature Scheme v2</a></li>
+ <li><a href="#scoped_directory_access">범위가 지정된 디렉터리 액세스</a></li>
+ <li><a href="#keyboard_shortcuts_helper">Keyboard Shortcuts Helper</a></li>
+ <li><a href="#sustained_performance_api">지속적인 성능 API</a></li>
+ <li><a href="#vr">VR 지원</a></li>
+ <li><a href="#print_svc">인쇄 서비스 개선 사항</a></li>
+ <li><a href="#virtual_files">가상 파일</a></li>
+ <li><a href="#framemetrics_api">FrameMetricsListener API</a></li>
+ </ol>
+</div>
+</div>
+
+
+
+<p>Android N은 아직 한창 개발 중이지만, N Developer Preview를
+통해 지금 Android N을 일부 체험해 볼 수 있습니다. 아래 섹션에서는
+개발자를 위한 몇 가지 새로운 기능을 중점적으로 다룹니다. </p>
+
+<p>
+ 플랫폼 변경 사항이 앱에 영향을 미칠 수도 있는 부분에
+대해 알아보려면 <a href="{@docRoot}preview/behavior-changes.html">동작 변경 사항</a>을 살펴보고,
+ 주요 기능에 대해 자세히 알아보려면 개발자 가이드를 참조하고, 새로운 API에 대한 자세한
+내용을 보려면 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 참조</a>를 다운로드하세요.
+</p>
+
+<h2 id="multi-window_support">다중 창 지원</h2>
+
+
+<p>Android N에서 저희는 요청이 많은 새로운 멀티태스킹
+기능인 다중 창 지원을 플랫폼에 도입하고 있습니다. </p>
+
+ <p>이제 사용자가 화면에서 두 개의 앱을 동시에 열 수 있습니다. </p>
+ <ul>
+ <li>Android N이 실행되는
+전화와 태블릿에서 사용자가 화면 분할 모드에서 두 개의 앱을
+나란히 또는 상하로 실행할 수 있습니다. 또한 앱 사이에 있는 분할선을 끌어서 앱의 크기를
+조정할 수 있습니다. </li>
+
+<li>Android TV 기기에서, 앱이 <a href="{@docRoot}preview/features/picture-in-picture.html">PIP(Picture-In-Picture)
+모드</a>로 배치될 수 있으므로, 사용자가 검색을 수행하거나 다른
+앱과 상호 작용하는 중에도 앱이 계속해서 콘텐츠를 표시할 수 있습니다.</li>
+ </ul>
+
+<div class="col-4of10">
+<img src="{@docRoot}images/android-7.0/mw-portrait.png" alt="" style="height:460px;padding-left:1em;" id="img-split-screen" />
+<p class="img-caption">
+ <strong>그림 1.</strong> 화면 분할 모드에서 실행되는 앱.
+</p>
+
+ </div>
+
+<p>특히 태블릿이나 다른 대형 화면 기기에서 다중 창
+지원을 통해 새로운 방식으로 사용자를 참여시킬 수 있습니다. 또한, 앱에서 드래그 앤 드롭 기능을 활성화하여
+사용자가 편리하게 앱에서나 앱으로 콘텐츠를 드래그할
+수 있으므로, 사용자 환경이 크게 개선됩니다. </p>
+
+<p>다중 창 지원을 앱에 추가하고 다중 창이 표시되는 방식을
+구성하는 것은 매우 간단합니다. 예를 들어, 액티비티의
+최소 허용 크기를 지정하면 사용자가 액티비티의 크기를 지정된 크기보다
+작게 조정하지 못합니다. 또한, 앱에 대해 다중 창 표시를 비활성화할 수도 있으며
+ 이 경우 시스템은 전체 화면 모드에서만 앱을 표시합니다.</p>
+
+<p>
+ 자세한 내용은 <a href="{@docRoot}preview/features/multi-window.html">다중 창 지원</a>
+ 개발자 문서를 참조하세요.
+</p>
+
+<h2 id="notification_enhancements">알림 향상</h2>
+
+<p>Android N에서 저희는 알림을 더 쉽고 빠르게 사용할 수
+있도록 재설계했습니다. 몇 가지 변경 사항은 다음과 같습니다.</p>
+
+<ul>
+ <li>
+ <strong>템플릿 업데이트</strong>: 히어로 이미지와 아바타를 새롭게
+ 강조하기 위해 알림 템플릿을 업데이트하는 중입니다. 개발자는 최소한의
+ 코드 조정만으로 새로운 템플릿을 활용할 수 있습니다.
+ </li>
+
+ <li>
+ <strong>메시지 스타일 사용자 지정</strong>: <code>MessageStyle</code> 클래스를 사용하여
+ 알림과 관련된 사용자 인터페이스 레이블을 더 많이
+사용자 지정할 수 있습니다. 메시지, 대화 제목, 콘텐츠 뷰를
+ 구성할 수 있습니다.
+ </li>
+
+ <li>
+ <strong>묶음 알림</strong>: 시스템에서 메시지를 함께
+ 그룹화하고(예: 메시지 주제별로 그룹화) 해당 그룹을 표시할 수 있습니다. 사용자는
+ 이 그룹에 대해 해제 또는 보관과 같은 동작을 적절히 수행할 수 있습니다. Android
+ Wear용 알림을 구현한 적이 있으시다면 이미 이 모델도 친숙하게 느껴질
+ 것입니다.
+ </li>
+
+ <li>
+ <strong>직접 회신</strong>: 실시간 통신 앱의 경우 Android 시스템은
+ 인라인 회신을 지원하므로, 사용자가 알림 인터페이스
+ 내에서 신속하게 SMS 또는 텍스트 메시지에 직접 응답할 수 있습니다.
+ </li>
+
+ <li>
+ <strong>사용자 지정 뷰</strong>: 두 개의 새로운 API를 사용하면 알림에 사용자
+ 지정 뷰를 사용할 때 시스템 장식(예: 알림 헤더 및 액션)을
+ 활용할 수 있습니다.
+ </li>
+</ul>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-1.png" alt="" style="padding:.5em;max-width:226px">
+</div>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-3.png" alt="" style="padding:.5em;max-width:226px">
+</div>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-2.png" alt="" style="padding:.5em;max-width:226px">
+</div>
+
+
+<p class="img-caption">
+ <strong>그림 2.</strong> 묶음 알림 및 직접 회신.
+</p>
+
+<p>새로운 기능을 구현하는 방법에 대해 알아보려면
+ <a href="{@docRoot}preview/features/notification-updates.html">알림</a>
+가이드를 참조하세요.</p>
+
+
+
+<h2 id="jit_aot">프로필 가이드 방식의 JIT/AOT 컴파일</h2>
+
+<p>Android N에서 저희는 코드 프로파일링이 있는
+JIT(Just in Time) 컴파일러를 ART에 추가했습니다. 이를 통해 ART에서 Android 앱이 실행되는 동안
+그 성능을 계속 향상시킬 수 있습니다. JIT 컴파일러는 ART의 현재 AOT(Ahead of Time) 컴파일러를 보완하고
+런타임 성능을 개선하고, 저장 공간을 절약하고, 앱 업데이트와
+시스템 업데이트의 시간 단축을 도와줍니다.</p>
+
+<p>프로필 가이드 방식의 컴파일을 통해 ART는 실제 사용량과 기기의
+조건에 따라 각 앱의 AOT/JIT 컴파일을 관리할 수 있습니다. 예를 들어, ART는 최상의 성능을 위해 각 앱의 핫 메서드에 대한 프로필을
+유지 관리하고 이들 메서드를 미리 컴파일하고
+캐시할 수 있습니다. 이 경우 앱의 다른 부분들은
+실제로 사용될 때까지 컴파일되지 않고 유지됩니다.</p>
+
+<p>프로필 가이드 방식의
+컴파일은 앱의 주요 부분들의 성능을 높여줄 뿐만 아니라,
+관련 바이너리를 비롯한 앱의 전체 RAM 공간을 줄이는 데 도움이 됩니다. 이 기능은 저용량 메모리 기기에 특히 중요합니다.</p>
+
+<p>ART는 기기 배터리에 미치는 영향이 최소화되는 방식으로
+프로필 가이드 방식의 컴파일을 관리합니다. ART는 기기가 유휴 상태이고 충전 중일 때만 사전 컴파일을 수행하며,
+해당 작업을 미리 수행함으로써 시간과 배터리를 절약합니다.</p>
+
+<h2 id="quick_path_to_app_install">앱 설치를 위한 빠른 경로</h2>
+
+<p>ART의 JIT 컴파일러가 가진 가장 눈에 띄는 이점 중 하나는
+앱 설치 및 시스템 업데이트 속도가 빠르다는 것입니다. Android 6.0에서 최적화하고 설치하는 데
+몇 분이 걸리는 대용량 앱조차도 이제는 단 몇 초 만에 설치할 수
+있습니다. 또한, 더 이상 최적화 단계가 없으므로 시스템 업데이트도 더 빠르게 이루어집니다. </p>
+
+<h2 id="doze_on_the_go">이동 중 잠자기 모드...</h2>
+
+<p>Android 6.0에서는 기기가 테이블 위에 올려져 있거나 서랍 안에
+들어 있는 등의 유휴 상태일 때 앱이 CPU와 네트워크를 사용하는 작업을 지연시킴으로써 배터리를
+절약하는 시스템 모드인 잠자기 모드를 도입했습니다. </p>
+
+<p>이제 Android N에서 잠자기 모드는 한걸음 더 나아가서 이동 중에도
+배터리를 절약합니다. 화면이 일정 시간 동안 꺼져 있고 기기의 플러그가
+뽑혀 있으면 잠자기 모드는 친숙한 일부 CPU 및 네트워크 제한을 앱에 적용합니다.
+즉, 사용자가 기기를 주머니에 휴대하고 다닐 때도 배터리를
+절약할 수 있습니다.</p>
+
+
+<img src="/preview/images/doze-diagram-1.png" alt="" id="figure1" />
+<p class="img-caption">
+ <strong>그림 3.</strong> 이제 잠자기 모드는 기기가 정지 상태가 아니더라도
+배터리 수명을 개선할 수 있도록 제한을 적용합니다.
+</p>
+
+
+<p>기기의 배터리가 켜져 있는 동안 화면이 꺼지면 잠시 후에
+잠자기 모드는 네트워크 액세스를 제한하고 작업과 동기화를 지연시킵니다. 잠시 동안의 유지 관리 기간 중에
+애플리케이션의 네트워크 액세스가 허용되고
+지연된 작업/동기화가 실행됩니다. 화면을 켜거나 기기의 플러그를 꽂으면 기기가 잠자기 모드 상태에서
+벗어납니다.</p>
+
+<p>기기가 다시 일정 시간 동안 배터리로 켜져 있고 화면이 꺼진
+정지 상태가 되면, 잠자기 모드는 {@link
+android.os.PowerManager.WakeLock}, {@link android.app.AlarmManager} 알람 및
+GPS/Wi-Fi 스캔에 대해 전체 CPU 및 네트워크 제한을 적용합니다.</p>
+
+<p>앱을 잠자기 모드에 맞게 적용하는 최선의 방법은 기기가 움직이든
+움직이지 않든 동일합니다. 따라서 잠자기 모드를 효율적으로 처리하도록
+앱을 이미 업데이트했다면 모든 준비가 완료된 것입니다. 아직 업데이트하지 않았다면 지금 <a href="{@docRoot}training/monitoring-device-state/doze-standby.html#assessing_your_app">앱을 잠자기 모드에 맞춰
+조정</a>해 보세요.</p>
+
+<h2 id="background_optimizations">Project Svelte: 백그라운드 최적화</h2>
+
+<p>Project Svelte는 에코시스템에 속한 전체 Android 기기에서 시스템 및 앱에
+의해 사용되는 RAM 크기를 최소화하기 위한 지속적인 노력입니다. Android N에서 Project
+Svelte는 앱이 백그라운드에서 실행되는 방식을 최적화하는 데 초점을 맞추고 있습니다. </p>
+
+<p>백그라운드 처리는 대부분의 앱에서 필수적인 부분입니다. 백그라운드 처리가 올바로
+수행된다면 즉각적이고 빠르고 상황에 맞는 멋진 사용자 환경을 만들 수 있지만, 백그라운드
+처리가 올바로 수행되지 않는다면 RAM과 배터리를 불필요하게 소모하고
+다른 앱의 시스템 성능에 영향을 미칠 것입니다. </p>
+
+<p>Android 5.0 이후로,
+사용자가 선호하는 백그라운드 작업
+수행 방식은 {@link android.app.job.JobScheduler}였습니다. 앱은 메모리, 전원 및 연결 상태에 따라 시스템을 최적화하면서도
+작업을 예약할 수 있습니다. JobScheduler는 제어 기능과 간편성을 함께
+제공하므로, 저희는 모든 앱에서 이것을 사용하기 원합니다. </p>
+
+<p>
+ 또 한 가지 좋은 옵션은 <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
+<code>GCMNetworkManager</code></a>입니다. 이는 Google Play
+ 서비스의 일부분으로, 레거시 Android 버전에서 호환성이
+ 있는 유사한 작업 예약을 제공합니다.
+</p>
+
+<p>Google에서는 더 많은 사용 사례를 충족시키기 위해 <code>JobScheduler</code> 및
+<code>GCMNetworkManager</code>를 계속
+확장하고 있습니다. 예를 들어, 이제 Android N에서는 콘텐츠 공급자의 변화에 따라
+ 백그라운드 작업을 예약할 수 있습니다. 이와 동시에, Google에서는 특히
+저용량 메모리 기기에서 시스템 성능을 저하시킬 수
+있는 일부 오래된 패턴들을 없애기 시작했습니다.</p>
+
+<p>Android N에서 저희는 자주 사용되는 세 가지 암시적 브로드캐스트인
+ {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, {@link
+ android.hardware.Camera#ACTION_NEW_PICTURE} 및 {@link
+ android.hardware.Camera#ACTION_NEW_VIDEO}를
+제거하는 중입니다. 왜냐하면 이것들은 여러 앱의 백그라운드 프로세스를 동시에 깨워서 메모리와 배터리를 과도하게 소모시킬 수 있기 때문입니다. 앱이
+이러한 브로드캐스트를 수신한다면, N Developer Preview를
+ 활용하여 <code>JobScheduler</code> 및 관련 API로 마이그레이션하세요. </p>
+
+<p>
+ 자세한 내용은 <a href="{@docRoot}preview/features/background-optimization.html">백그라운드
+ 최적화</a> 문서를 참조하세요.
+</p>
+
+
+<h2 id="data_saver">Data Saver</h2>
+
+<div class="col-5of12" style="margin-right:1.5em;">
+<img src="{@docRoot}images/android-7.0/datasaver.png" style="border:2px solid #ddd">
+
+<p class="img-caption" style="padding-right:2em;">
+ <strong>그림 4.</strong> Settings의 Data Saver.
+</p>
+ </div>
+
+<p>모바일 기기의 수명 전체에 걸쳐, 모바일 데이터 요금제에 따른 비용이
+기기 자체의 가격보다 일반적으로 많이 듭니다. 많은 사용자들에게 모바일 데이터는
+아껴 써야 하는 값비싼 자원입니다. </p>
+
+<p>Android N에서는 새로운 시스템 서비스인 Data Saver
+모드를 도입하며, Data Saver는 로밍 시나 결제 주기가 끝날 무렵
+또는 소액 선불 데이터 팩 사용 시에 앱에 의해 사용되는 모바일 데이터 사용량을 줄여줍니다. Data Saver를 통해 사용자는 앱이
+모바일 데이터를 사용하는 방식을 제어할 수 있으며, Data Saver가 켜져 있을 때 개발자가 더 효율적인 서비스를
+제공할 수 있습니다. </p>
+
+<p>사용자가 <strong>Settings</strong>에서 Data Saver를 활성화하고
+해당 기기가 데이터 통신 네트워크에 있는 경우, 시스템은 백그라운드
+데이터 사용을 차단하고, 가능하면 스트리밍의
+비트 전송률을 제한하거나 화질을 줄이거나 낙관적 사전 캐싱을
+지연시키는 등의 방식으로 포그라운드에서 데이터를 더 적게 사용하도록 앱에게 신호를 보냅니다. 사용자는 Data Saver가 켜진 경우에도 백그라운드 데이터 통신 연결을 허용하기 위해
+특정 앱을 허용 목록에 추가할 수 있습니다.</p>
+
+<p>Android N은 {@link android.net.ConnectivityManager}를 확장하여 <a href="{@docRoot}preview/features/data-saver.html#status">사용자의
+Data Saver 기본 설정을 검색</a>하고 <a href="{@docRoot}preview/features/data-saver.html#monitor-changes">기본
+설정 변경을 모니터링</a>하는 방법을
+앱에 제공합니다. 모든 앱은 사용자가 Data Saver를 활성화했는지 여부를 확인해야 하며
+포그라운드 및 백그라운드 데이터 사용을 제한하도록 노력해야 합니다.</p>
+
+
+<h2 id="vulkan">Vulkan API</h2>
+
+<p>
+ Android N은 새로운 3D 렌더링 API인 <a href="http://www.khronos.org/vulkan" class="external-link">Vulkan™</a>을 플랫폼에 통합합니다.
+<a href="https://www.khronos.org/opengles/" class="external-link">OpenGL™
+ ES</a>와 마찬가지로, Vulkan은 Khronos Group에 의해 관리되는 3D 그래픽 및 렌더링을 위한
+ 공개 표준입니다.
+</p>
+
+<p>
+ Vulkan은 처음부터 드라이버에서 CPU 오버헤드를 최소화하도록 설계되었고,
+ 애플리케이션이 GPU 작업을 더욱 직접적으로 제어할 수 있게 해줍니다. 또한, Vulkan은
+ 멀티스레드가 명령 버퍼 생성과 같은 작업을
+한 번에 수행하도록 허용하여 병렬 처리 성능을 높입니다.
+</p>
+
+<p>
+ Vulkan 개발 도구와 라이브러리가 Android NDK에 배포되며, 그 포함 내역은
+ 다음과 같습니다.
+</p>
+
+<ul>
+ <li>헤더
+ </li>
+
+ <li>유효성 검사 계층(디버그 라이브러리)
+ </li>
+
+ <li>SPIR-V 셰이더 컴파일러
+ </li>
+
+ <li>SPIR-V 런타임 셰이더 컴파일 라이브러리
+ </li>
+</ul>
+
+<p>
+ Vulkan은 Nexus 5X, Nexus 6P 및 Nexus Player와 같은 Vulkan 지원 하드웨어가 있는 기기의
+ 앱에만 사용될 수 있습니다. Google은
+ 최대한 조속히 Vulkan을 더 많은 기기에 도입하기 위해 파트너들과 긴밀히 협력하고 있습니다.
+</p>
+
+<p>
+ 자세한 내용은 <a href="{@docRoot}ndk/guides/graphics/index.html">API 문서</a>를 참조하세요.
+</p>
+
+<h2 id="tile_api">Quick Settings 타일 API</h2>
+
+
+<div style="float:right;max-width:320px">
+<img src="{@docRoot}images/android-7.0/quicksettings.png" style="padding-left:1.5em;">
+
+<p class="img-caption" style="padding-left:2em;">
+ <strong>그림 5.</strong> 알림 창의 Quick Settings 타일.
+</p>
+
+
+ </div><p>Quick Settings는 키 설정 및 작업을 알림 창에서 직접 노출시키기
+위해 널리 사용되는 간단한 방법입니다. 더욱 유용하고 편리한 설정을
+위해 저희가 Android N에서 Quick Settings의 범위를 더욱 확장했습니다. </p>
+
+<p>Google에서는 Quick Settings 타일에 필요한 공간을 더 추가했으며,
+사용자는 페이지가 지정된 디스플레이 영역에서 왼쪽이나 오른쪽으로 스와이프하여 이들 타일에 액세스할 수 있습니다. 또한, 사용자가 Quick Settings 타일의
+모습과 표시 위치를 제어할 수 있도록 했습니다. 따라서 사용자는 끌어서 놓는 간단한 방법으로
+타일을 추가하거나 이동시킬 수 있습니다. </p>
+
+<p>또한, Android N은 개발자를 위해 새로운 API도 추가했으며
+ 이를 통해 자신만의 Quick Settings 타일을 정의할 수 있으며, 사용자가 앱에서 키 컨트롤 및 작업에 쉽게 액세스할 수 있습니다.</p>
+
+<p>
+ 빠른 설정 타일은 긴급하게 필요하거나 자주 사용되는 컨트롤 또는
+작업을 위해 예약되어 있으며, 앱을 시작하기 위한 바로가기로
+사용되어서는 안 됩니다.
+</p>
+
+<p>
+ 타일을 정의한 후에는 이 타일을 사용자에게 표시할 수 있으며, 사용자가
+ 드래그 앤 드롭하는 것만으로 이 타일을 Quick Settings에 추가할 수 있습니다.
+</p>
+
+<p>
+ 앱 타일 만들기에 대한 자세한 내용은
+다운로드 가능한 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 참조</a>에서 <code>android.service.quicksettings.Tile</code>에 대한 문서를 참조하세요.
+</p>
+
+
+
+<h2 id="number-blocking">번호 차단</h2>
+
+<p>이제 Android N에서는 플랫폼에서 번호 차단을 지원하며,
+서비스 공급자가 차단된 번호 목록을 유지 관리할 수 있도록 프레임워크 API를 제공합니다. 기본
+SMS 앱, 기본 전화 앱 및 이동통신사 앱은
+차단된 번호 목록에서 읽기와 쓰기가 가능합니다. 다른 앱은 이 목록에 액세스할 수 없습니다.</p>
+
+<p>Android에서는 번호 차단을 플랫폼의 표준 기능으로 만들어,
+광범위한 기기에서 번호를 차단하기 위한 일관된 방식을 앱에
+제공합니다. 앱에서 활용할 수 있는 기타 이점은 다음과 같습니다.</p>
+
+<ul>
+ <li> 통화에서 차단된 번호가 텍스트에서도 차단됩니다.
+ <li> 차단된 번호는 재설정 시에도 백업 및 복원 기능을 통해
+기기에서 유지될 수 있습니다.
+ <li> 여러 앱이 동일한 차단된 번호 목록을 사용할 수 있습니다.
+</ul>
+
+<p>또한 Android를 통한 이동통신사 앱 통합은 이동통신사들이 기기의
+차단된 번호 목록을 읽고 서비스측 차단을 수행할 수 있음을 의미하며,
+이를 통해 사용자들은 원치 않는 통화와 문자가
+특정 매체(예: VOIP 엔드포인트 또는 착신 전화)를 통해 자신들에게 도달하는 것을 차단할 수 있습니다.</p>
+
+<p>
+ 자세한 내용은
+ 다운로드 가능한 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API
+ 참조</a>에서 <code>android.provider.BlockedNumberContract</code>를 참조하세요.
+</p>
+
+<h2 id="call_screening">통화 스크리닝</h2>
+
+<p>
+ Android N에서는 기본 전화 앱이 수신 통화를 스크리닝하도록 허용합니다. 이를 위해
+전화 앱에는 새로운 <code>CallScreeningService</code>가 구현되며, 이를 통해 전화 앱은
+수신 통화의 {@link android.telecom.Call.Details Call.Details}에 따라
+다음과 같은 다양한 작업을 수행할 수 있습니다.
+</p>
+
+<ul>
+ <li> 수신 통화 거절
+ <li> 통화를 통화 기록에 허용하지 않음
+ <li> 통화 알림을 사용자에게 표시하지 않음
+</ul>
+
+<p>
+ 자세한 내용은
+ 다운로드 가능한 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API
+ 참조</a>에서 <code>android.telecom.CallScreeningService</code>를 참조하세요.
+</p>
+
+
+<h2 id="multi-locale_languages">다중 로케일 지원, 더 많은 언어 지원 추가</h2>
+
+
+<p>두 가지 언어로 된 사용 사례를 지원하기 위해 이제
+Android N에서는 사용자가 Settings에서 <strong>다중 로케일</strong>을 선택할 수 있습니다. 앱은 새로운
+API를 사용하여 사용자의 로케일을 가져온
+다음, 검색 결과를 여러 언어로 표시하거나 사용자가 이미 알고 있는
+언어로는 웹 페이지를 번역하지 않는 등의 더욱 정교한 사용자 환경을
+다중 로케일 사용자들에게 제공합니다.</p>
+
+<p>다중 로케일 지원과 함께 Android N에서는 또한 사용자가
+사용할 수 있는 언어의 범위도 더욱 넓혔습니다. 영어, 스페인어, 프랑스어,
+아랍어 등의 자주 사용되는 언어에 대해 각각 25가지 이상의 변형을 제공하며, 100가지 이상의 새로운 언어에 대한 부분적인
+지원도 추가합니다.</p>
+
+<p>앱은
+<code>LocaleList.GetDefault()</code>를 호출하여 사용자가 설정한 로케일 목록을 가져올 수 있습니다. 더 많은 수의 로케일을 지원하기 위해 Android N에서는 리소스 확인 방식을
+바꾸는 중에 있습니다. 새로운 리소스 확인 논리에서
+앱이 예상대로 작동하는지 테스트하고 확인해야 합니다.</p>
+
+<p>새로운 리소스 확인 동작과 따라야 하는 모범 사례에 대해
+알아보려면, <a href="{@docRoot}preview/features/multilingual-support.html">다국어 지원</a>을 참조하세요.</p>
+
+
+<h2 id="emoji">새 이모티콘</h2>
+
+<p>
+ Android N에서는 피부 색조 그림 이모티콘과 변형 선택기 지원을
+ 비롯한 추가적인 그림 이모티콘과 그림 이모티콘 관련
+ 기능을 도입했습니다. 앱에서 그림 이모티콘을 지원하는 경우
+ 아래 지침에 따라 이러한 그림 이모티콘에 관련된 기능을 잘 활용해 보세요.
+</p>
+
+<ul>
+ <li>
+ <strong>그림 이모티콘을 삽입하기 전에 기기에 해당 그림 이모티콘이 들어 있는지 확인하세요.</strong>
+ 시스템 글꼴에 어떤 이모티콘이 있는지
+ 확인하려면 {@link android.graphics.Paint#hasGlyph(String)} 메서드를 사용하세요.
+ </li>
+ <li>
+ <strong>그림 이모티콘이 변형 선택기를 지원하는지 확인하세요.</strong>
+ 변형 선택기를 사용하면 특정 이모티콘을 컬러나
+ 흑백으로 표현할 수 있습니다.
+ 모바일 기기에서는 앱이 흑백보다는 컬러로 이모티콘을 표시해야 합니다. 하지만
+ 앱이 텍스트와 함께 이모티콘을 표시하는 경우에는 흑백 변형을 사용해야 합니다.
+ 그림 이모티콘에 변형 이모티콘이 있는지 확인하려면 변형 선택기를 사용하세요.
+ 변형이 있는 캐릭터의 전체 목록은
+<a class="external-link" href="http://www.unicode.org/Public/9.0.0/ucd/StandardizedVariants-9.0.0d1.txt">변형에
+대한 유니코드 설명서</a>의 <em>그림 이모티콘 변형 시퀀스</em> 섹션을
+검토하세요.
+ </li>
+ <li>
+ <strong>그림 이모티콘이 피부 색조를 지원하는지 확인하세요.</strong> Android N 사용자는 이모티콘의 렌더링된 피부 색조를
+ 자신의 기본 설정에 맞게 수정할 수 있습니다. 키보드 앱은 여러 가지 피부 색조가 있는
+이모티콘에 대한 시각적 표시를 제공해야 하며, 사용자가 선호하는 피부 색조를 선택하도록
+허용해야 합니다. 어떤 시스템 이모티콘에 피부 색조
+한정자가 있는지 확인하려면 {@link android.graphics.Paint#hasGlyph(String)}
+메서드를 사용하세요.
+<a class="external-link" href="http://unicode.org/emoji/charts/full-emoji-list.html">
+유니코드 설명서</a>를 읽어보면 어떤 이모티콘에서 피부 색조가 사용되는지 확인할 수 있습니다.
+ </li>
+</ul>
+
+
+<h2 id="icu4">Android의 ICU4J API</h2>
+
+<p>
+ 이제 Android N에서는 <code>android.icu</code> 패키지 아래의 Android 프레임워크에 있는 <a href="http://site.icu-project.org/">ICU4J</a> API의 하위 세트를
+ 제공합니다. 마이그레이션이
+ 용이하며, 대개는 <code>com.java.icu</code> 네임스페이스를
+ <code>android.icu</code>로 변경하는 것이 간단합니다. 앱에서 ICU4J 번들을
+ 이미 사용 중이신 경우, Android 프레임워크에서 제공되는 <code>android.icu</code>
+ API로 전환하면 APK 크기를 상당히 줄일 수 있습니다.
+</p>
+
+<p>
+ Android ICU4J API에 대해 자세히 알아보려면 <a href="{@docRoot}preview/features/icu4j-framework.html">ICU4J 지원</a>을 참조하세요.
+</p>
+
+
+
+<h2 id="gles_32">OpenGL™ ES 3.2 API</h2>
+
+<p>Android N에서는 다음을 비롯하여 OpenGL ES 3.2용 프레임워크 인터페이스와 플랫폼 지원을 추가합니다.</p>
+
+<ul>
+ <li> <code>EXT_texture_sRGB_decode</code>를 제외한 <a class="external-link" href="https://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">
+Android 확장 프로그램 팩</a></a>(AEP)의 모든 확장 프로그램.
+ <li> HDR 및 지연 셰이딩을 위한 부동 소수점 프레임 버퍼.
+ <li> 일괄처리 및 스트리밍 성능을 향상시키는 BaseVertex 그리기 호출.
+ <li> WebGL 오버헤드를 줄여주는 강력한 버퍼 액세스 제어.
+</ul>
+
+<p>Android N에 있는 OpenGL ES 3.2용 프레임워크 API에는
+<code>GLES32</code> 클래스가 제공됩니다. OpenGL ES 3.2를 사용 중인
+경우 반드시 <code><uses-feature></code> 태그와 <code>android:glEsVersion</code>
+속성을 사용하여 매니페스트 파일에서 요구 사항을 선언하세요. </p>
+
+<p>기기의 지원되는 OpenGL ES 버전을 런타임에 확인하는
+방법을 비롯하여, OpenGL ES 사용에 대한 자세한 내용은 <a href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL ES API 가이드</a>를 참조하세요.</p>
+
+
+<h2 id="android_tv_recording">Android TV 녹화</h2>
+
+<p>Android N에서는 새로운 녹화 API를 통해 Android TV 입력
+서비스로부터 콘텐츠를 녹화하고 재생하는 기능을 추가합니다. 기존의 타임 시프트 API를 기반으로 구축된 TV 입력
+서비스는 녹화 가능한 채널 데이터와 녹화된 세션의 저장 방식을 제어할 수 있으며,
+녹화된 콘텐츠와의 사용자 상호 작용을 관리할 수 있습니다. </p>
+
+<p>자세한 내용은 <a href="{@docRoot}preview/features/tv-recording-api.html">Android TV Recording API</a>를 참조하세요.</p>
+
+
+<h2 id="android_for_work">Android for Work</h2>
+
+<p>Android for Work에서는 Android N이 실행되는 기기를
+위해 여러 가지 새로운 기능과 API를 추가합니다. 몇 가지 특징이 아래에 나와 있으며, 변경 사항의 전체 목록은
+<a href="{@docRoot}preview/features/afw.html">Android for Work 업데이트</a>를 참조하세요.</p>
+
+<h3 id="work_profile_security_challenge">작업 프로필 보안 인증 질문 </h3>
+
+<p>
+ N SDK를
+대상으로 하는 프로필 소유자는 작업 프로필에서 작동하는 앱에 대해
+별개의 보안 인증 질문을 지정할 수 있습니다. 사용자가 업무용 앱을 열려고 시도할 때 작업 프로필 보안 인증 질문이
+표시됩니다. 보안 인증 질문에 올바로 답하면 작업 프로필의 잠금이 해제되고 필요하다면
+작업 프로필의 암호가 해독됩니다. 프로필 소유자의 경우,
+<code>ACTION_SET_NEW_PASSWORD</code>는
+작업 프로필 보안 인증 질문을 설정하라는 메시지를 사용자에게 표시하고, <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code>는 기기
+잠금을 설정하라는 메시지를 사용자에게 표시합니다.
+</p>
+
+<p>
+ 프로필 소유자는 <code>setPasswordQuality()</code>, <code>setPasswordMinimumLength()</code> 및 관련 메서드를 사용하여
+작업 프로필 보안 인증 질문에 대해
+별개의 비밀번호 정책을 설정할 수
+있습니다(예: PIN의 길이는 얼마로 해야 할지 또는 프로필을 잠금 해제하기 위해 지문을 사용할 수 있는지 여부). 프로필 소유자는
+새 <code>getParentProfileInstance()</code> 메서드에 의해 반환되는 <code>DevicePolicyManager</code>
+인스턴스를 사용하여 기기 잠금을 설정할 수도 있습니다.
+ 그 밖에도, 프로필 소유자는
+새 <code>setOrganizationColor()</code> 및 <code>setOrganizationName()</code> 메서드를 사용하여 작업 프로필 보안 인증 질문에 대한 자격 증명 화면을
+사용자 지정할 수 있습니다.
+</p>
+<h3 id="turn_off_work">작업 해제 </h3>
+
+<p>작업 프로필이 있는 기기에서는 사용자가 작업 모드를 설정하거나 해제할 수 있습니다. 작업 모드가
+해제되면 관리된 사용자가 일시적으로 종료되며, 이 경우 작업 프로필
+앱, 백그라운드 동기화 및 알림이 비활성화됩니다. 여기에는 프로필 소유자 애플리케이션이
+포함됩니다. 작업 모드가 해제되면 사용자가 업무용 앱을 실행할 수 없음을
+미리 알려주기 위한 영구적인 상태 아이콘이 표시됩니다. 런처는
+업무용 앱과 위젯에 액세스할 수 없음을 나타냅니다. </p>
+
+<h3 id="always_on_vpn">상시 접속 VPN </h3>
+
+<p>기기 소유자 및 프로필 소유자는 항상 지정된 VPN을 통해 업무용 앱을
+연결하도록 보장할 수 있습니다. 시스템은 기기가 부팅된
+후에 해당 VPN을 자동으로 시작합니다.</p>
+
+<p>
+ 새로운 <code>DevicePolicyManager</code> 메서드는
+ <code>setAlwaysOnVpnPackage()</code> 및
+ <code>getAlwaysOnVpnPackage()</code>입니다.
+</p>
+
+<p>앱 상호 작용 없이 시스템에 의해
+VPN 서비스가 직접 바인딩될 수 있으므로, VPN 클라이언트는 상시 접속 VPN에 대해 새로운 진입점을 처리해야 합니다. 이전과
+마찬가지로, 서비스는 <code>android.net.VpnService</code> 액션과 일치하는 인텐트 필터에
+의해 시스템에 표시됩니다. </p>
+
+<p>
+ 또한, <strong>Settings>More>Vpn</strong>을 사용하여 사용자는 기본 사용자에서
+ <code>VPNService</code> 메서드를
+ 구현하는 상시 접속 VPN 클라이언트를 수동으로 설정할 수도 있습니다.
+</p>
+
+<h3 id="custom_provisioning">사용자 지정 프로비저닝</h3>
+
+<p>
+ 애플리케이션은 기업 색상과 로고로 프로필 소유자 및 기기 소유자 프로비저닝
+ 흐름을 사용자 지정할 수 있습니다.
+<code>DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR</code>가 흐름 색상을
+사용자 지정하고, <code>DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI</code>가
+기업 로고로 흐름을 사용자 지정합니다.
+</p>
+
+<h2 id="accessibility_enhancements">접근성 향상</h2>
+
+<p>이제 Android N에서는 새로운 기기 설치 시 Welcome 화면에서
+Vision Settings를 바로 제공합니다. 이렇게 하면 사용자가 자신의
+기기에서 확대 제스처, 글꼴 크기,
+디스플레이 크기 및 TalkBack 등과 같은 접근성 기능을 휠씬 더 쉽게 검색하고 구성할 수 있습니다. </p>
+
+<p>이렇게 눈에 띄는 위치에 접근성 기능을 배치하면, 사용자가 이
+기능을 활성화하여 앱을 사용할 가능성이 더욱 커집니다. 이들 설정을 활성화하여 조기에 앱을
+테스트해야 합니다. Settings >
+Accessibility에서 설정을 활성화할 수 있습니다.</p>
+
+<p>Android N에서도 마찬가지로, 운동 장애가 있는 사용자가
+이제 접근성 서비스를 통해 화면을 터치할 수 있습니다. 이 새로운 API를 사용하면 얼굴 추적, 시각 추적,
+지점 스캐닝 등의 기능으로 서비스를 구축하여 해당 사용자의
+요구를 충족시킬 수 있습니다.</p>
+
+<p>자세한 내용은
+ 다운로드 가능한 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 참조</a>에서 <code>android.accessibilityservice.GestureDescription</code>을 참조하세요.</p>
+
+
+<h2 id="direct_boot">직접 부팅</h2>
+
+<p>직접 부팅은 기기 시동 시간을 개선해주며, 예상치 못한 재부팅
+후에도 등록된 앱이 제한된 기능을 유지하도록 해줍니다. 예를 들어,
+사용자가 취침하는 중에 암호화된 기기가 재부팅되는 경우,
+이제는 등록되어 있는 알람, 메시지 및 수신 통화로 사용자에게 알려줄
+수 있습니다. 즉, 재시작 직후에도 접근성 서비스를
+ 바로 사용할 수 있습니다.</p>
+
+<p>직접 부팅은 Android N의 파일 기반 암호화를 활용하여 시스템
+및 앱 데이터에 대해 정밀한 암호화 정책을 활성화합니다. 이 시스템은
+선택된 시스템 데이터와 명시적으로 등록된 앱
+데이터에 대해 기기 암호화 저장소를 사용합니다. 기본적으로, 다른 모든
+ 시스템 데이터, 사용자 데이터, 앱 및 앱 데이터에 대해 자격 증명 암호화 저장소가 사용됩니다. </p>
+
+<p>부팅 시에 시스템은 제한된 모드에서 시작되며, 기기 암호화
+데이터에만 액세스할 수 있고 앱 또는 데이터에는 액세스하지
+못합니다. 이 모드에서 구성 요소를 실행하려는 경우,
+매니페스트에 플래그를 설정하여 구성 요소를 등록할 수 있습니다. 재시작 후에 시스템은 <code>LOCKED_BOOT_COMPLETED</code>
+인텐트를 브로드캐스트하여
+등록된 구성 요소를 활성화합니다. 잠금을 해제하기 전에, 시스템은 등록된 기기
+암호화 앱 데이터를 사용할 수 있는지 확인합니다. 사용자가 잠금 화면 자격 증명을 확인하여
+ 암호를 풀기 전까지는 다른 모든 데이터를 사용할 수 없습니다. </p>
+
+자세한 내용은 <a href="{@docRoot}preview/features/direct-boot.html">직접 부팅</a>을 참조하세요.</p>
+</p>
+
+
+<h2 id="key_attestation">Key Attestation</h2>
+
+<p>하드웨어 기반 키 저장소는 Android 기기에서 암호화 키를
+만들고 저장하고 사용하기 위한 훨씬 더 안전한 방법입니다. 이
+키 저장소는 Linux 커널, 잠재적 Android 취약점, 루팅된 기기의
+공격으로부터 키를 보호해 줍니다.</p>
+
+<p>하드웨어 기반 키 저장소를 더욱 쉽고 안전하게 사용하도록
+Android N에서는 Key Attestation을 도입했습니다. Key Attestation을 사용하여 앱
+및 오프-기기는 RSA 또는 EC 키 쌍이 하드웨어 기반인지 여부를 결정할 수
+있으며, 키 쌍의 속성에는 어떤 것이 있고 어떠한 제약 조건이 사용성
+및 유효성에 적용되는지 여부를 결정할 수 있습니다. </p>
+
+<p>앱 및 오프-기기 서비스는 X.509 증명 인증서를 통해 키 쌍에 대한
+정보를 요청할 수 있으며 이 인증서는 유효한 증명 키로 서명되어야
+합니다. 증명 키는 공장에서 기기의 하드웨어 기반
+키 저장소에 주입되는 ECDSA 서명 키입니다. 따라서 유효한 증명 키에 의해
+서명된 증명 인증서는 하드웨어 기반 키 저장소에 있는 키 쌍의
+세부 정보와 함께 이 키 저장소의 존재 여부를
+확인합니다.</p>
+
+<p>안전한 공식 Android 공장 이미지가 기기에 사용 중인지
+확인하기 위해, Key Attestation은
+기기 <a class="external-link" href="https://source.android.com/security/verifiedboot/verified-boot.html#bootloader_requirements">부트로더</a>가 다음의 정보를 <a class="external-link" href="https://source.android.com/security/trusty/index.html">TEE(Trusted Execution Environment)</a>에
+제공하도록 요구합니다.</p>
+
+<ul>
+<li>기기에 설치된 OS 버전 및 패치 수준</li>
+<li><a href="https://source.android.com/security/verifiedboot/index.html" class="external-link">확인된 부팅</a> 공개 키 및 잠금 상태</li>
+ </ul>
+
+<p>하드웨어 기반 키 저장소 기능에 대한 자세한
+내용은 <a href="https://source.android.com/security/keystore/" class="external-link">하드웨어 기반 키 저장소</a> 가이드를 참조하세요.</p>
+
+<p>Key Attestation 이외에도 Android N에서는 지문 등록
+시 취소되지 않는 지문 바인드 키도 도입했습니다.</p>
+
+<h2 id="network_security_config">네트워크 보안 구성</h2>
+
+<p>Android N에서 앱은 오류가 발생하기 쉬운 기존의 프로그래밍 방식
+API(예: X509TrustManager)를 사용하는 대신 선언적
+<em>네트워크 보안 구성</em>을 사용하여 보안(HTTPS, TLS) 연결의 동작을 코드
+수정 없이 안전하게 사용자 지정할 수 있습니다.</p>
+
+ <p>지원되는 기능:</p>
+<ul>
+<li><b>사용자 지정 신뢰 앵커.</b> 애플리케이션이 보안 연결을 위해
+어떤 인증 기관(CA)을 신뢰할 수 있는지 사용자 지정할 수 있게 해줍니다. 예를 들어,
+특정한 자체 서명 인증서를 신뢰하거나 제한적인 공용 CA 세트를 신뢰하도록 사용자 지정할 수 있습니다.
+</li>
+<li><b>디버그 전용 재정의.</b> 애플리케이션 개발자가 설치 기반에 위험을 더하지
+않고 애플리케이션의 보안 연결을 안전하게
+디버그할 수 있게 해줍니다.
+</li>
+<li><b>일반 텍스트 트래픽 옵트아웃.</b> 애플리케이션이 일반 텍스트 트래픽을 실수로 사용하지
+않도록 스스로를 보호할 수 있게 해줍니다.</li>
+<li><b>인증서 고정.</b> 애플리케이션이 보안 연결을 위해 어떤 서버 키를
+ 신뢰할지 제한하도록 해주는 고급 기능입니다.</li>
+</ul>
+
+<p>자세한 내용은 <a href="{@docRoot}preview/features/security-config.html">네트워크 보안 구성</a>을
+참조하세요.</p>
+
+<h2 id="default_trusted_ca">신뢰할 수 있는 기본 인증 기관</h2>
+
+<p>기본적으로, Android N을 대상으로 하는 앱은 시스템에서
+제공되는 인증서만을 신뢰하며 사용자가 추가한 인증 기관(CA)은 더 이상 신뢰하지 않습니다. Android N을 대상으로 하는 앱이 사용자가
+추가한 CA를 신뢰하려는 경우에는
+<a href="{@docRoot}preview/features/security-config.html">네트워크 보안 구성</a>을 사용하여
+사용자 CA를 신뢰해야 하는 방법을 지정해야 합니다.</p>
+
+<h2 id="apk_signature_v2">APK Signature Scheme v2</h2>
+
+<p>
+ Android N에서는 앱 설치 시간을 더욱 단축시켜 주고
+APK 파일을 무단으로 변경하지 못하도록 더욱 강력하게
+보호해주는 새로운 앱 서명 구성표인 APK Signature Scheme v2를 도입했습니다. 기본적으로, Android Studio 2.2 및 Android
+ Plugin for Gradle 2.2는 APK Signature Scheme v2 뿐만 아니라 JAR 서명을 사용하는 기존의 서명 구성표를 둘다
+ 사용하여 앱에 서명합니다.
+</p>
+
+<p>
+ 앱에 APK Signature Scheme v2를 적용하는 것이 좋지만, 이 새로운
+ 구성표를 반드시 적용해야 하는 것은 아닙니다. APK
+ Signature Scheme v2를 사용할 때 앱이 올바로 빌드되지 않을 경우 이 새 구성표를 비활성화할 수 있습니다. 비활성화 프로세스가
+실행되면 Android Studio 2.2 및 Android Plugin for Gradle 2.2는 기존의 서명 구성표만 사용하여
+앱에 서명합니다. 기존 구성표만으로
+서명하려면 모듈 수준의 <code>build.gradle</code> 파일을 연 다음, 릴리스 서명
+구성에 <code>v2SigningEnabled false</code> 줄을
+추가하세요.
+</p>
+
+<pre>
+ android {
+ ...
+ defaultConfig { ... }
+ signingConfigs {
+ release {
+ storeFile file("myreleasekey.keystore")
+ storePassword "password"
+ keyAlias "MyReleaseKey"
+ keyPassword "password"
+ <strong>v2SigningEnabled false</strong>
+ }
+ }
+ }
+</pre>
+
+<p class="caution"><strong>주의: </strong> APK
+ Signature Scheme v2를 사용하여 앱에 서명하고 앱을 추가로 변경하는 경우 앱의 서명이
+ 무효화됩니다. 따라서 <code>zipalign</code>과
+ 같은 도구는 APK Signature Scheme v2를 사용하여 앱에 서명한 후가 아니라 서명하기 전에 사용되어야 합니다.
+</p>
+
+<p>
+ 자세한 내용은 Android Studio에서
+<a href="{@docRoot}studio/publish/app-signing.html#release-mode">앱에
+서명</a>하는 방법을 설명하고 Android Plugin for Gradle을 사용하여 <a href="{@docRoot}studio/build/build-variants.html#signing">앱
+ 서명을 위한 빌드 파일을 구성</a>하는 방법에 대해 설명하는 Android Studio 문서를 읽어보세요.
+</p>
+
+<h2 id="scoped_directory_access">범위가 지정된 디렉터리 액세스</h2>
+
+<p>Android N에서 앱은 새로운 API를 사용하여 특정
+<a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">외부 저장소</a> 디렉터리(SD 카드와 같은 이동식 미디어의 디렉터리 포함)에
+대한 액세스를 요청할 수 있습니다. 새로운 API는 애플리케이션이
+표준 외부 저장소 디렉터리(예: <code>Pictures</code> 디렉터리)에 액세스하는 방식을 훨씬 단순화합니다. 사진
+앱과 같은 앱은 모든 저장소 디렉터리에 대해 액세스 권한을 부여하는
+<code>READ_EXTERNAL_STORAGE</code>를 사용하는 대신 또는 사용자가 디렉터리를 탐색하도록 하는 저장소 액세스 프레임워크(SAF)를
+사용하는 대신 이들 API를
+사용할 수 있습니다.</p>
+
+<p>또한, 새로운 API는 사용자가 외부 저장소 액세스 권한을
+앱에 부여하는 단계를 단순화합니다. 새로운 API를 사용하는 경우 시스템은
+애플리케이션이 어떤 디렉터리에 대한 액세스 권한을
+요청하는지를 명확하게 설명해주는 단순한 권한 UI를 사용합니다.</p>
+
+<p>자세한 내용은
+<a href="{@docRoot}preview/features/scoped-folder-access.html">범위가 지정된
+디렉터리 액세스</a> 개발자 문서를 참조하세요.</p>
+
+<h2 id="keyboard_shortcuts_helper">Keyboard Shortcuts Helper</h2>
+
+<p>
+Android N에서는 사용자가 "Alt + /" 키를 눌러 <em>Keyboard Shortcuts</em>
+화면을 트리거할 수 있는데, 이 화면에는 시스템과 해당 앱에서 둘다 사용할 수 있는 모든
+바로 가기가 표시됩니다. 이들 바로 가기는 앱의 메뉴에서 자동으로 검색되지만(사용 가능한 경우),
+개발자가 화면에 맞춰 스스로 미세 조정한 바로 가기 목록을
+제공할 수 있습니다. 이를 위해서는 다운로드 가능한
+<a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 참조</a>에 설명되어 있는 새
+<code>Activity.onProvideKeyboardShortcuts()</code> 메서드를 재정의할 수 있습니다.
+</p>
+
+<p>
+앱의 어느 곳에서든 Keyboard Shortcuts Helper를 트리거하려면 관련 액티비티에 대해
+{@code Activity.requestKeyboardShortcutsHelper()}를 호출하세요.
+</p>
+
+<h2 id="sustained_performance_api">지속적인 성능 API</h2>
+
+<p>
+기기 구성 요소가 온도 제한에 도달할 때
+시스템에서는 시스템온칩(system-on-chip) 엔진을 조절하므로, 장시간 실행되는 앱의 성능이 크게 변동될
+수 있습니다. 이러한 변동은 장시간 실행되는 고성능 앱을 만들려는 앱 개발자
+입장에서는 일종의 움직이는 과녁과도 같은 것입니다.
+</p>
+
+<p>
+이러한 제한을 해결하기 위해, Android N에서는
+<em>지속적인 성능 모드</em>를 지원하며, 이 모드를 통해 OEM들은 장시간 실행되는 앱의
+기기 성능에 대한 힌트를 제공할 수 있습니다. 앱 개발자는
+이들 힌트를 사용하여 장기간에 걸쳐
+기기 성능을 예측 가능하고 이 성능을 일관된 수준으로 유지하기 위해 앱을 적절히 조정할 수 있습니다.
+</p>
+
+<p>
+앱 개발자는 N Developer Preview에 있는 이
+새 API를 Nexus 6P 기기에서만 시험해 볼 수 있습니다. 이 기능을 사용하려면
+지속적인 성능 모드에서 실행하려는 기간에 대해
+지속적인 성능 기간 플래그를 설정하세요.
+{@code Window.setSustainedPerformanceMode()} 메서드를 사용하여 이 플래그를 설정하세요. 해당 기간이 포커스 안에 없을 때는
+이 모드가 자동으로 비활성화됩니다.
+</p>
+
+<h2 id="vr">VR 지원</h2>
+
+<p>
+개발자가 사용자를 위한 고품질 모바일 VR 환경을 만들 수 있도록, Android N에서는
+새로운 VR 모드에 대한 플랫폼 지원과 최적화를 추가합니다. VR 앱 전용 CPU 코어에 대한 액세스를 비롯하여
+다수의 성능 개선 사항이 있습니다.
+지능적 머리 추적과
+VR용으로 작동하는 스테레오 알림 기능을 앱 내에서 이용할 수 있습니다. 가장 중요한 점은, 지연 시간이 매우 짧은
+그래픽을 Android N이 제공한다는 사실입니다. Android N용 VR 앱 만들기에 대한 자세한 정보는
+<a href="https://developers.google.com/vr/android/">Android용 Google VR SDK</a>를 참조하세요.
+</p>
+
+
+<h2 id="print_svc">인쇄 서비스 개선 사항</h2>
+
+<p>
+ 이제 Android N에서는 인쇄 서비스 개발자가 개별 프린터와 인쇄 작업에
+대한 추가적인 정보를 노출시킬 수 있습니다.
+</p>
+
+<p>
+ 개별 프린터를 나열할 때, 이제 인쇄 서비스가 다음 두 가지 방식으로 프린터마다
+아이콘을 설정할 수 있습니다.
+</p>
+
+<ul>
+ <li><code>PrinterInfo.Builder.setResourceIconId()</code>를 호출하여 리소스 ID로부터
+아이콘을 설정할 수 있습니다.
+ </li>
+
+ <li><code>PrinterInfo.Builder.setHasCustomPrinterIcon()</code>을 호출하고,
+<code>android.printservice.PrinterDiscoverySession.onRequestCustomPrinterIcon()</code>을 사용하여 아이콘이 요청될 때 콜백을 설정하여
+네트워크에서 아이콘을 표시할
+ 수 있습니다.
+ </li>
+</ul>
+
+<p>
+ 또한, <code>PrinterInfo.Builder.setInfoIntent()</code>를 호출하여 추가적인 정보를 표시하도록
+프린터당 액티비티를 제공할 수 있습니다.
+</p>
+
+<p>
+ <code>android.printservice.PrintJob.setProgress()</code> 및
+<code>android.printservice.PrintJob.setStatus()</code>를 각각 호출하여
+인쇄 작업 알림에서 인쇄 작업의
+진행률과 상태를 나타낼 수 있습니다.
+</p>
+
+<p>
+ 이들 메서드에 대한 자세한 내용은 다운로드 가능한 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 참조</a>를 확인하세요.
+</p>
+
+<h2 id="framemetrics_api">FrameMetricsListener API</h2>
+
+<p>
+앱은 FrameMetricsListener API를 통해 UI 렌더링
+성능을 모니터링할 수 있습니다. 이 기능을 제공하기 위해 이 API는 앱의 현재 창에 대한 프레임 타이밍
+정보를 전송하는 스트리밍 Pub/Sub API를 노출시킵니다. 반환되는 데이터는
+<code><a href="{@docRoot}tools/help/shell.html#shellcommands">adb shell</a>
+dumpsys gfxinfo framestats</code>가 표시하는 데이터와 동일하지만, 지난 120개 프레임으로 제한되지 않습니다.
+</p>
+
+<p>
+FrameMetricsListener를 사용하면 USB 연결 없이 프로덕션 환경에서
+상호 작용 수준의 UI 성능을 측정할 수 있습니다. 이 API를
+사용하면
+{@code adb shell dumpsys gfxinfo}보다 훨씬 세분화된 수준에서 데이터를 수집할 수 있습니다. 시스템은 앱에서 발생하는 특정한 상호 작용에
+대한 데이터를 수집할 수 있기 때문에, 이처럼 높은 수준의 세분화가 가능합니다. 시스템은
+전체 앱의 성능에 대한 전체 요약을 캡처하거나
+전체 상태를 지울 필요가 없습니다. 이 기능을 사용하면
+앱 내에서의 실제 사용 사례에 대한 UI 성능에서
+성능 데이터를 수집하고 성능 저하를 찾아낼 수 있습니다.
+</p>
+
+<p>
+창을 모니터링하려면 <code>FrameMetricsListener.onMetricsAvailable()</code>
+콜백 메서드를 구현하고 해당 창에 등록하세요. 자세한 내용은 다운로드 가능한
+<a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 참조</a>에서 {@code FrameMetricsListener} 클래스 문서를
+참조하세요.
+</p>
+
+<p>
+이 API는 {@code FrameMetrics} 객체를 제공하며 여기에는 렌더링 하위 시스템이 프레임 수명 주기의 다양한 이정표에 대해 보고하는
+타이밍 데이터가 포함됩니다.
+지원되는 지표는 {@code UNKNOWN_DELAY_DURATION},
+{@code INPUT_HANDLING_DURATION}, {@code ANIMATION_DURATION},
+{@code LAYOUT_MEASURE_DURATION}, {@code DRAW_DURATION}, {@code SYNC_DURATION},
+{@code COMMAND_ISSUE_DURATION}, {@code SWAP_BUFFERS_DURATION},
+{@code TOTAL_DURATION}, {@code FIRST_DRAW_FRAME}입니다.
+</p>
+
+
+<h2 id="virtual_files">가상 파일</h2>
+
+<p>
+ 이전 버전의 Android에서는 사용자가
+Google 드라이브와 같은 자신의 클라우드 저장소 계정에서 파일을 선택할 수 있도록, 앱이 저장소 액세스 프레임워크를
+사용할 수 있었습니다. 하지만 직접적인 바이트코드 표시가 없는
+파일을 표시하기 위한 방법이 없었으며, 모든 파일이 입력 스트림을
+제공해야 했습니다.
+</p>
+
+<p>
+ Android N에서는 <em>가상 파일</em>이라는 개념을 저장소 액세스
+ 프레임워크에 추가합니다. 가상 파일 기능을 사용하면,
+{@link android.content.Intent#ACTION_VIEW} 인텐트와 함께 사용될 수 있는
+문서 URI에 직접적인 바이트코드 표시가 없더라도 이 문서 URI를 {@link android.provider.DocumentsProvider}가 반환할 수
+있습니다. 또한 Android N에서는 가상 파일이든 아니든 간에, 사용자 파일에 대한
+대체 형식을 제공할 수 있습니다.
+</p>
+
+<p>
+ 앱에서 가상 문서의 URI를 가져오려면 먼저
+{@link android.content.Intent}를 만들어 파일 선택기 UI를 여세요. 앱은 {@link android.content.ContentResolver#openInputStream(Uri) openInputStream()}
+ 메서드를 사용하여
+ 가상 파일을
+직접 열 수 없으므로,
+{@link android.content.Intent#CATEGORY_OPENABLE} 카테고리를 포함하는 경우에는 앱이 어떤 가상 파일도 수신하지 못합니다.
+</p>
+
+<p>
+ 사용자가 선택한 후에는, 시스템이
+{@link android.app.Activity#onActivityResult onActivityResult()} 메서드를 호출합니다.
+ 아래의 코드 조각에서 볼 수 있듯이, 앱이 가상 파일의 URI를 검색하고
+입력 스트림을 가져올 수 있습니다.
+</p>
+
+<pre>
+ // Other Activity code ...
+
+ final static private int REQUEST_CODE = 64;
+
+ // We listen to the OnActivityResult event to respond to the user's selection.
+ @Override
+ public void onActivityResult(int requestCode, int resultCode,
+ Intent resultData) {
+ try {
+ if (requestCode == REQUEST_CODE &&
+ resultCode == Activity.RESULT_OK) {
+
+ Uri uri = null;
+
+ if (resultData != null) {
+ uri = resultData.getData();
+
+ ContentResolver resolver = getContentResolver();
+
+ // Before attempting to coerce a file into a MIME type,
+ // check to see what alternative MIME types are available to
+ // coerce this file into.
+ String[] streamTypes =
+ resolver.getStreamTypes(uri, "*/*");
+
+ AssetFileDescriptor descriptor =
+ resolver.openTypedAssetFileDescriptor(
+ uri,
+ streamTypes[0],
+ null);
+
+ // Retrieve a stream to the virtual file.
+ InputStream inputStream = descriptor.createInputStream();
+ }
+ }
+ } catch (Exception ex) {
+ Log.e("EXCEPTION", "ERROR: ", ex);
+ }
+ }
+</pre>
+
+<p>
+ 사용자 파일 액세스에 대한 자세한 내용은
+<a href="{@docRoot}guide/topics/providers/document-provider.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
new file mode 100644
index 0000000..20561a4
--- /dev/null
+++ b/docs/html-intl/intl/ko/about/versions/nougat/index.jd
@@ -0,0 +1,110 @@
+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
+
+<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-8of16" style="padding-left:2em">
+ <h1 class="dac-hero-title">Android 7.0 Nougat</h1>
+ <p class="dac-hero-description">
+ Android Nougat을 맞이할 준비를 하세요!
+ Nexus와 다른 기기에서 <strong>앱을 테스트하세요</strong>. <strong>전력과 메모리를 절약</strong>하는 새로운 시스템
+동작을 지원하세요.
+ <strong>다중 창 UI</strong>,
+<strong>직접 회신 알림</strong> 등으로 앱을 확장하세요.
+ </p>
+
+ <a class="dac-hero-cta" href="{@docRoot}about/versions/nougat/android-7.0.html">
+ <span class="dac-sprite dac-auto-chevron"></span>
+ 시작하기
+ </a>
+ </div>
+ <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></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>
+</section>
+
+<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://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/dev-community">
+ <i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
+ 개발자 커뮤니티 가입
+ </a>
+ </li>
+ </ul>
+ </div><!-- end .wrap -->
+</div><!-- end .dac-actions -->
+
+<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"
+ data-query="type:blog+tag:androidn+tag:featured, type:youtube+tag:androidn+tag:featured"
+ data-sortOrder="-timestamp"
+ data-cardSizes="6x6"
+ data-items-per-page="6"
+ data-maxResults="15"
+ data-initial-results="3"></div>
+</div></section>
+
+<section class="dac-section dac-gray" id="videos"><div class="wrap">
+ <h1 class="dac-section-title">Videos</h1>
+ <div class="dac-section-subtitle">
+ 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: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>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ko/preview/j8-jack.jd b/docs/html-intl/intl/ko/guide/platform/j8-jack.jd
similarity index 100%
rename from docs/html-intl/intl/ko/preview/j8-jack.jd
rename to docs/html-intl/intl/ko/guide/platform/j8-jack.jd
diff --git a/docs/html-intl/intl/ko/guide/topics/providers/content-provider-basics.jd b/docs/html-intl/intl/ko/guide/topics/providers/content-provider-basics.jd
index 68ed568..0f58b79 100644
--- a/docs/html-intl/intl/ko/guide/topics/providers/content-provider-basics.jd
+++ b/docs/html-intl/intl/ko/guide/topics/providers/content-provider-basics.jd
@@ -891,7 +891,7 @@
사용자 사전 제공자의 데이터 유형은 제공자의 계약 클래스
{@link android.provider.UserDictionary.Words}의 참조 문서에 나열되어 있습니다(계약 클래스는
<a href="#ContractClasses">계약 클래스</a> 섹션에 설명되어 있습니다).
- @link android.database.Cursor#getType
+ {@link android.database.Cursor#getType
Cursor.getType()}을 호출해서도 데이터 유형을 결정할 수 있습니다.
</p>
<p>
diff --git a/docs/html-intl/intl/ko/guide/topics/ui/multi-window.jd b/docs/html-intl/intl/ko/guide/topics/ui/multi-window.jd
new file mode 100644
index 0000000..67305a9
--- /dev/null
+++ b/docs/html-intl/intl/ko/guide/topics/ui/multi-window.jd
@@ -0,0 +1,589 @@
+page.title=다중 창 지원
+page.metaDescription=Android N에서 한 번에 둘 이상의 앱을 표시하도록 지원.
+page.keywords="multi-window", "android N", "split screen", "free-form"
+
+@jd:body
+
+<div id="tb-wrapper">
+ <div id="tb">
+ <h2>이 문서의 내용</h2>
+ <ol>
+ <li><a href="#overview">개요</a></li>
+ <li><a href="#lifecycle">다중 창 수명 주기</a></li>
+ <li><a href="#configuring">앱을 다중 창
+모드로 구성</a></li>
+ <li><a href="#running">앱을 다중 창 모드에서 실행</a></li>
+ <li><a href="#testing">앱의 다중 창 지원 테스트</a></li>
+ </ol>
+ <h2>참고 항목</h2>
+ <ol>
+ <li><a class="external-link" href="https://github.com/googlesamples/android-MultiWindowPlayground">다중 창
+ 플레이그라운드 샘플 앱</a></li>
+ <li><a class="external-link" href="https://medium.com/google-developers/5-tips-for-preparing-for-multi-window-in-android-n-7bed803dda64">Android N에서 다중 창을 준비하기 위한 5가지 팁</a></li>
+ </ol>
+ </div>
+</div>
+
+<p>
+ Android N은 둘 이상의 앱을 동시에 표시하기 위한 지원을
+추가합니다. 핸드헬드 기기에서 두 개의 앱을 <em>화면 분할</em> 모드에서
+나란히 또는 상하로 실행할 수 있습니다. TV 기기에서 앱이
+<em>PIP(Picture-In-Picture)</em> 모드를 사용하는 경우 사용자가 다른 앱과 상호작용하는
+동안에 계속 동영상을 재생할 수 있습니다.
+</p>
+
+<p>
+ N Preview SDK로 앱을 빌드하는 경우, 앱이 다중 창
+표시를 처리하는 방식을 구성할 수 있습니다. 예를 들어, 액티비티의
+최소 허용 치수를 지정할 수 있습니다. 또한 앱에
+대해 다중 창 표시를 비활성화할 수도 있으며, 이 경우 시스템은 앱을 전체 화면 모드에서만
+표시합니다.
+</p>
+
+<h2 id="overview">개요</h2>
+
+<p>
+ Android N에서는 여러 앱이 동시에 화면을 공유할 수 있습니다. 예를 들어, 사용자가 화면을 분할하여 왼쪽에서는 웹페이지를
+보면서 오른쪽에서는 이메일을 작성할
+수 있습니다. 사용자 환경은 기기에 따라
+달라집니다.
+</p>
+
+<ul>
+ <li>Android N에서 실행되는 핸드헬드 기기는 화면 분할
+모드를 제공합니다. 이 모드에서 시스템은 화면을 두 개의 앱으로 채우고, 이
+앱을 나란히 또는 상하로 표시합니다. 사용자가 두 앱을 구분하는 분할선을 드래그하여 한 앱을 다른 앱보다
+더 크게 만들 수 있습니다.
+ </li>
+
+ <li>Android N을 실행하는 Nexus Player에서, 앱이
+<a href="picture-in-picture.html">PIP 모드</a>로 배치될 수 있으므로, 사용자가 검색을
+수행하거나 다른 앱과 상호작용하는 중에도 앱이 계속해서 콘텐츠를
+표시할 수 있습니다.
+ </li>
+
+ <li>더 큰 기기를 제조하는 업체는 자유형식
+모드를 선택할 수 있으며, 이 경우 사용자가 각 액티비티의 크기를 자유롭게 조정할 수 있습니다. 제조업체가 이 기능을 활성화하면, 기기는 화면 분할 모드 뿐만
+아니라 자유형식 모드를
+제공합니다.
+ </li>
+</ul>
+
+<img src="{@docRoot}images/android-7.0/mw-splitscreen.png" alt="" width="650" srcset="{@docRoot}images/android-7.0/mw-splitscreen.png 1x,
+ {@docRoot}images/android-7.0/mw-splitscreen_2x.png 2x," id="img-split-screen" />
+<p class="img-caption">
+ <strong>그림 1.</strong> 화면 분할 모드에서 나란히 실행 중인 두 앱.
+</p>
+
+<p>
+ 사용자가 다음과 같이 다중 창 모드로 전환할 수 있습니다.
+</p>
+
+<ul>
+ <li>사용자가 <a href="{@docRoot}guide/components/recents.html">Overview
+화면</a>을 열고 액티비티 제목을 길게 누르면,
+이 액티비티를 화면의 강조 표시된 부분으로 드래그하여
+다중 창 모드에 둘 수 있습니다.
+ </li>
+
+ <li>사용자가 Overview 버튼을 길게 누르면, 기기가 현재 액티비티를
+다중 창 모드에 두고 Overview 화면을 열며, 이 화면에서 사용자는 화면을
+공유하기 위한 또 다른 액티비티를 선택할 수 있습니다.
+ </li>
+</ul>
+
+<p>
+ 사용자는 여러 액티비티가 화면을 공유하는 동안 한 액티비티에서
+또 다른 액티비티로 데이터를 <a href="{@docRoot}guide/topics/ui/drag-drop.html">드래그 앤 드롭</a>할
+수 있습니다. (이전에는, 사용자가 단일 액티비티 내에서만
+데이터를 드래그 앤 드롭할 수 있었습니다.)
+</p>
+
+<h2 id="lifecycle">다중 창 수명 주기</h2>
+
+<p>
+ 다중 창 모드는 <a href="{@docRoot}training/basics/activity-lifecycle/index.html">액티비티
+수명 주기</a>를 변경하지 않습니다.
+</p>
+
+<p>
+ 다중 창 모드에서는, 사용자가 가장 최근에 상호작용했던 액티비티만
+지정된 시간에 활성화됩니다. 이 액티비티는 <em>최상위</em>로 간주됩니다.
+ 다른 모든 액티비티는 표시되어 있더라도 일시 정지된 상태입니다.
+ 그러나 시스템은 이러한 일시 정지되었지만 표시된 액티비티에게 표시되지
+않은 액티비티보다 더 높은 우선 순위를 부여합니다. 사용자가 일시 정지된 액티비티 중 하나와 상호작용하면, 해당
+액티비티가 재개되고 이전의 최상위 액티비티가 일시
+정지됩니다.
+</p>
+
+<p class="note">
+ <strong>참고:</strong> 다중 창 모드에서는 앱이 일시 정지된 상태에서도 여전히
+사용자에게 표시될 수 있습니다. 앱이 일시 정지된 동안에도 액티비티를
+계속해야 하는 경우도 있습니다. 예를 들어, 일시 정지 모드이지만 표시된
+동영상 재생 앱은 계속해서 동영상을 보여줘야 합니다. 이러한 이유로, 동영상을
+재생하는 액티비티는 {@link android.app.Activity#onPause onPause()} 핸들러에서
+동영상을 일시 정지하지 <em>않는</em> 것이 좋습니다.
+ 그 대신, {@link android.app.Activity#onStop
+ onStop()}에서 동영상을 일시 정지하고, {@link android.app.Activity#onStart
+ onStart()}에서 재생을 재개해야 합니다.
+</p>
+
+<p>
+ 사용자가 앱을 다중 창 모드에 놓으면
+시스템은, <a href="{@docRoot}guide/topics/resources/runtime-changes.html">런타임 변경 처리</a>에 지정된 대로, 구성 변경을 액티비티에
+알려줍니다. 이 동작은 사용자가 앱의 크기를 조정하거나 앱을
+ 전체 화면 모드로 다시 전환할 때도 발생합니다.
+ 기본적으로, 이 변경에서 액티비티-수명 주기 관계는 기기 모드가
+ 세로 모드에서 가로 모드로 전환되었음을
+ 시스템이 앱에 알려줄 때와 동일합니다(단순 스왑 대신
+ 기기 치수가 변경되는 경우는 제외). <a href="{@docRoot}guide/topics/resources/runtime-changes.html">런타임 변경 처리</a>에서 설명한
+대로, 액티비티 스스로 구성 변경을 처리하거나, 시스템이 액티비티를 소멸시키고
+새 치수로 다시 액티비티를 생성하도록 할 수
+있습니다.
+</p>
+
+<p>
+ 사용자가 창의 크기를 조정하여 한쪽 치수를 더 크게 만드는
+경우, 시스템은 사용자 작업에 맞게 액티비티의 크기를 조정하고 필요한
+경우 <a href="{@docRoot}guide/topics/resources/runtime-changes.html">런타임 변경</a>을 수행합니다. 앱이 새로 노출되는 영역에 그릴 때 지연이 발생하는 경우, 시스템은 {@link
+ android.R.attr#windowBackground windowBackground} 속성 또는 기본
+<code>windowBackgroundFallback</code> 스타일 속성에 의해
+지정된 색으로 이 영역을 임시로 채웁니다.
+</p>
+
+<h2 id="configuring">앱을 다중 창 모드로 구성</h2>
+
+<p>
+ 앱이 Android N을 대상으로 하는 경우, 앱의 액티비티가 다중
+창 표시를 지원하는지 여부와 지원 방법을 구성할 수 있습니다. 매니페스트에서 속성을 설정하여 크기와 레이아웃을 제어할
+수 있습니다.
+ 루트 액티비티의 속성 설정은 작업 스택 내의 모든
+ 액티비티에 적용됩니다. 예를 들어, 루트 액티비티의
+<code>android:resizeableActivity</code>가 true로 설정된 경우, 작업 스택에 있는 모든 액티비티의
+크기를 조정할 수 있습니다.
+</p>
+
+<p class="note">
+ <strong>참고:</strong> Android N보다 더 낮은 버전의 SDK로 다중 방향 앱을 빌드하는 경우
+사용자가 앱을 다중 창 모드에서 사용하면, 시스템이
+이 앱의 크기를 강제로 조정합니다. 앱이 예상치 못하게 동작할 수 있음을 사용자에게 경고하는
+대화 상자가 표시됩니다. 시스템은 고정
+방향 앱의 크기는 조정하지 <em>않습니다</em>. 사용자가
+다중 창 모드 하에서 고정 방향 앱을 열려고 시도하면,
+앱이 전체 화면을 차지합니다.
+</p>
+
+<h4 id="resizeableActivity">android:resizeableActivity</h4>
+<p>
+ 매니페스트의 <code><activity></code> 또는
+<code><application></code> 노드에서 이 속성을 설정하여 다중 창
+표시를 활성화하거나 비활성화합니다.
+</p>
+
+<pre>
+android:resizeableActivity=["true" | "false"]
+</pre>
+
+<p>
+ 이 속성을 true로 설정하면, 액티비티를 분할 화면 모드와 자유형식
+모드로 시작할 수 있습니다. 이 속성을 false로 설정하면, 액티비티가 다중 창 모드를 지원하지
+않습니다. 이 값이 false이고 사용자가
+다중 창 모드에서 액티비티를 시작하려고 시도하면, 액티비티가 전체 화면을
+차지합니다.
+</p>
+
+<p>
+ 앱이 Android N을 대상으로 하지만 이 속성에 값을 지정하지
+않은 경우, 이 속성의 기본값은 true가 됩니다.
+</p>
+
+<h4 id="supportsPictureInPicture">android:supportsPictureInPicture</h4>
+
+<p>
+ 이 속성을 매니페스트의 <code><activity></code> 노드에 설정하여
+액티비티가 PIP 표시를 지원하는지 여부를 나타냅니다. <code>android:resizeableActivity</code>가 false인 경우 이 속성이
+무시됩니다.
+</p>
+
+<pre>
+android:supportsPictureInPicture=["true" | "false"]
+</pre>
+
+<h3 id="layout">레이아웃 속성</h3>
+
+<p>
+ Android N에서 <code><layout></code> 매니페스트 요소는
+다중 창 모드에서 액티비티가 동작하는 방식에 영향을 미치는
+여러 속성을 지원합니다.
+</p>
+
+<dl>
+ <dt>
+ <code>android:defaultWidth</code>
+ </dt>
+
+ <dd>
+ 자유형식 모드에서 시작될 때 액티비티의 기본 너비.
+ </dd>
+
+ <dt>
+ <code>android:defaultHeight</code>
+ </dt>
+
+ <dd>
+ 자유형식 모드에서 시작될 때 액티비티의 기본 높이.
+ </dd>
+
+ <dt>
+ <code>android:gravity</code>
+ </dt>
+
+ <dd>
+ 자유형식 모드에서 시작될 때 액티비티의 초기 배치. 적당한 값은
+{@link android.view.Gravity} 참조를 확인하세요.
+ </dd>
+
+ <dt>
+ <code>android:minimalHeight</code>, <code>android:minimalWidth</code>
+ </dt>
+
+ <dd>
+ 화면 분할
+ 및 자유형식 모드에서 액티비티의 최소 높이 및 최소 너비. 사용자가 화면 분할 모드에서 디바이더를 이동하여 액티비티를
+지정된 최소값보다 더 작게 만드는 경우, 시스템은
+이 액티비티를 사용자가 요청한 크기로 자릅니다.
+ </dd>
+</dl>
+
+<p>
+ 예를 들어, 다음 코드는 액티비티가 자유형식 모드로 표시될
+때 이 액티비티의 기본 크기와 위치 및 최소 크기를
+지정하는 방법을 보여줍니다.
+</p>
+
+<pre>
+<activity android:name=".MyActivity">
+ <layout android:defaultHeight="500dp"
+ android:defaultWidth="600dp"
+ android:gravity="top|end"
+ android:minimalHeight="450dp"
+ android:minimalWidth="300dp" />
+</activity>
+</pre>
+
+<h2 id="running">앱을 다중 창 모드에서 실행</h2>
+
+<p>
+ Android N에서는 다중 창 모드에서 실행 가능한 앱을 지원하는 새로운
+기능을 제공합니다.
+</p>
+
+<h3 id="disabled-features">다중 창 모드에서 비활성화되는 기능</h3>
+
+<p>
+ 기기가 다중 창 모드에 있는 경우 일부 기능이 비활성화되거나
+무시되는데, 그 이유는 이들 기능은 기기 화면을 다른 액티비티
+또는 앱과 공유하는 액티비티에는 적합하지 않기 때문입니다. 이러한 기능에는 다음이 포함됩니다.
+
+<ul>
+ <li>일부 <a href="{@docRoot}training/system-ui/index.html">시스템 UI</a>
+사용자 지정 옵션이 비활성화됩니다. 예를 들어, 앱이 전체 화면 모드에서 실행되지
+않을 경우에는 상태 표시줄을 숨길 수 없습니다.
+ </li>
+
+ <li>시스템이 <code><a href=
+ "{@docRoot}guide/topics/manifest/activity-element.html#screen"
+ >android:screenOrientation</a></code> 속성의 변경을 무시합니다.
+ </li>
+</ul>
+
+<h3 id="change-notification">다중 창 변경 알림 및 쿼리</h3>
+
+<p>
+ 다중 창 표시를 지원하기 위해 다음과 같은 새 메서드가 {@link android.app.Activity}
+ 클래스에 추가되었습니다. 각 메서드에 대한 자세한 내용은
+<a href="{@docRoot}preview/setup-sdk.html#docs-dl">N Preview SDK
+참조</a>를 확인하세요.
+</p>
+
+<dl>
+ <dt>
+ <code>Activity.isInMultiWindowMode()</code>
+ </dt>
+
+ <dd>
+ 액티비티가 다중 창 모드에 있는지를 알아내려면 이 메서드를 호출하세요.
+ </dd>
+
+ <dt>
+ <code>Activity.isInPictureInPictureMode()</code>
+ </dt>
+
+ <dd>
+ 액티비티가 PIP 모드에 있는지를 알아내려면 이 메서드를 호출하세요.
+
+ <p class="note">
+ <strong>참고:</strong> PIP 모드는 다중 창 모드의 특별한
+ 케이스입니다. <code>myActivity.isInPictureInPictureMode()</code>가
+true를 반환하면 <code>myActivity.isInMultiWindowMode()</code>도
+역시 true를 반환합니다.
+ </p>
+ </dd>
+
+ <dt>
+ <code>Activity.onMultiWindowModeChanged()</code>
+ </dt>
+
+ <dd>
+ 시스템은 액티비티가 다중 창 모드로 들어가거나
+ 이 모드에서 나올 때마다 이 메서드를 호출합니다. 시스템은 액티비티가 다중 창 모드로
+ 들어갈 때는 true 값을 메서드에 전달하고, 액티비티가 다중 창 모드에서
+ 나올 때는 false 값을 전달합니다.
+ </dd>
+
+ <dt>
+ <code>Activity.onPictureInPictureModeChanged()</code>
+ </dt>
+
+ <dd>
+ 시스템은 액티비티가 PIP 모드로 들어가거나
+ 이 모드에서 나올 때마다 이 메서드를 호출합니다. 시스템은 액티비티가 PIP 모드로 들어갈 때는
+ true 값을 메서드에 전달하고, 액티비티가 PIP에서 나올 때는
+ false 값을 전달합니다.
+ </dd>
+</dl>
+
+<p>
+ 또한 이들 각 메서드의 {@link android.app.Fragment} 버전이
+있습니다(예: <code>Fragment.isInMultiWindowMode()</code>).
+</p>
+
+<h3 id="entering-pip">PIP 모드로 들어가기</h3>
+
+<p>
+ 액티비티를 PIP 모드에 두려면, 새로운 메서드인
+<code>Activity.enterPictureInPictureMode()</code>를 호출합니다. 기기가 PIP 모드를 지원하지 않으면 이 메서드는
+ 영향이 없습니다. 자세한 내용은
+<a href="picture-in-picture.html">PIP</a> 문서를 참조하세요.
+</p>
+
+<h3 id="launch">다중 창 모드에서 새 액티비티 시작</h3>
+
+<p>
+ 새 액티비티를 시작하는 경우, 가능하면 이 새 액티비티가 현재
+액티비티에 인접하여 표시되어야 함을 시스템에게 알려줄 수 있습니다. 이를 위해
+, 플래그
+<code>Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT</code>를 사용합니다. 이 플래그를 전달하면
+다음과 같은 동작이 요청됩니다.
+</p>
+
+<ul>
+ <li>기기가 화면 분할 모드에 있는 경우,
+시스템은 시작한 액티비티 옆에 새 액티비티를 만들려고 시도하므로, 두 액티비티가
+화면을 공유합니다. 시스템이 이 작업을 수행할 수 있다고
+보장되지는 않지만, 가능하면 액티비티를 인접하게 만듭니다.
+ </li>
+
+ <li>기기가 화면 분할 모드에 있으면, 이 플래그가 영향을 미치지 않습니다.
+ </li>
+</ul>
+
+<p>
+ 기기가 자유형식 모드에 있고 새 액티비티를 시작 중인 경우,
+<code>ActivityOptions.setLaunchBounds()</code>를 호출하여 이 새 액티비티의 치수와 화면 위치를
+지정할 수 있습니다. 기기가 다중 창 모드에 있지 않으면, 이 메서드가 영향을
+미치지 않습니다.
+</p>
+
+<p class="note">
+ <strong>참고:</strong> 작업 스택 내에서 액티비티를 시작하는 경우,
+이 액티비티는 화면상의 액티비티를 대체하여, 모든 다중 창 속성을
+상속합니다. 새 액티비티를 다중 창 모드에서 별도 창으로 시작하려면,
+새 작업 스택에서 액티비티를 시작해야 합니다.
+</p>
+
+<h3 id="dnd">드래그 앤 드롭 지원</h3>
+
+<p>
+ 사용자는 두
+액티비티가 화면을 공유하는 동안 한 액티비티에서 다른 액티비티로 데이터를 <a href="{@docRoot}guide/topics/ui/drag-drop.html">드래그 앤 드롭</a>할
+수 있습니다. (이전에는, 사용자가 단일 액티비티 내에서만 데이터를 드래그 앤 드롭할
+ 수 있었습니다.) 이러한 이유로, 앱이 현재 지원하지 않는 경우에는 드래그 앤 드롭
+기능을 앱에 추가하는 것이 좋습니다.
+</p>
+
+<p>
+ N Preview SDK는 앱 간의 드래그 앤 드롭을 지원하기 위해 <a href="{@docRoot}reference/android/view/package-summary.html"><code>android.view</code></a>
+패키지를 확장합니다. 다음과 같은 클래스와 메서드에 대한 자세한
+내용은, <a href="{@docRoot}preview/setup-sdk.html#docs-dl">N Preview
+SDK 참조</a>를 참조하세요.
+</p>
+
+<dl>
+ <dt>
+ <code>android.view.DropPermissions</code>
+ </dt>
+
+ <dd>
+ 놓기를 수신하는 앱에 부여되는 권한을 지정하기
+위한 토큰 객체.
+ </dd>
+
+ <dt>
+ <code>View.startDragAndDrop()</code>
+ </dt>
+
+ <dd>
+ {@link android.view.View#startDrag View.startDrag()}의 새 별칭. 액티비티 간의 드래그 앤 드롭을 활성화하려면, 새 플래그
+<code>View.DRAG_FLAG_GLOBAL</code>을
+전달합니다. 수신자 액티비티에게 URI 권한을
+부여해야 하는 경우, 새 플래그
+<code>View.DRAG_FLAG_GLOBAL_URI_READ</code> 또는
+<code>View.DRAG_FLAG_GLOBAL_URI_WRITE</code>를 적절하게 전달합니다.
+ </dd>
+
+ <dt>
+ <code>View.cancelDragAndDrop()</code>
+ </dt>
+
+ <dd>
+ 현재 진행 중인 드래그 작업을 취소합니다. 드래그 작업을 발생시킨
+앱에 의해서만 호출될 수 있습니다.
+ </dd>
+
+ <dt>
+ <code>View.updateDragShadow()</code>
+ </dt>
+
+ <dd>
+ 현재 진행 중인 드래그 작업의 드래그 그림자를 대체합니다. 드래그 작업을 발생시킨
+앱에 의해서만 호출될 수 있습니다.
+ </dd>
+
+ <dt>
+ <code>Activity.requestDropPermissions()</code>
+ </dt>
+
+ <dd>
+ {@link android.view.DragEvent}에 포함된 {@link
+android.content.ClipData}로 전달되는 콘텐츠 URI의 권한을 요청합니다.
+ </dd>
+</dl>
+
+<h2 id="testing">앱의 다중 창 지원 테스트</h2>
+
+<p>
+ 앱을 Android N용으로 업데이트하든 안하든 간에,
+Android N이 실행 중인 기기에서 사용자가 앱을 다중 창 모드로
+시작하려고 시도하는 경우, 앱이 다중 창 모드에서 어떻게 작동하는지 확인해야 합니다.
+</p>
+
+<h3 id="configuring">테스트 기기 구성</h3>
+
+<p>
+ 기기에 Android N을 설치하면, 화면 분할 모드가
+자동으로 지원됩니다.
+</p>
+
+<h3 id="test-non-n">앱이 N Preview SDK로 작성되지 않은 경우</h3>
+
+<p>
+ 앱을 N Preview SDK로 빌드하지 않았는데 사용자가
+앱을 다중 창 모드에서 사용하려고 시도하는 경우, 이 앱이 고정 방향을 선언하지
+않으면 시스템이 앱의 크기를 강제로 조정합니다.
+</p>
+
+<p>
+ 앱이 고정 방향을 선언하지 않은 경우, Android N이
+실행 중인 기기에서 앱을 시작해야 하며, 앱을 화면 분할 모드에
+두도록 시도해야 합니다. 앱의 크기를 강제로 조정하는 경우 사용자 환경이
+적절한지 확인하세요.
+</p>
+
+<p>
+ 앱이 고정 방향을 선언하는 경우, 앱을 다중 창 모드에
+두도록 시도해야 합니다. 이 때 앱이 전체 화면 모드에 남아있는지
+확인하세요.
+</p>
+
+<h3 id="test-mw">다중 창 모드를 지원하는 경우</h3>
+
+<p>
+ N Preview SDK로 앱을 작성했는데 다중 창 지원을 비활성화하지
+않은 경우, 화면 분할 및 자유형식 모드에서 다음과
+같은 동작을 확인하세요.
+</p>
+
+<ul>
+ <li>앱을 전체 화면 모드에서 시작한 다음, Overview 버튼을 길게 눌러서
+다중 창 모드로 전환합니다. 앱이 적절히 전환되는지 확인합니다.
+ </li>
+
+ <li>앱을 다중 창 모드에서 직접 시작하고, 이 앱이 적절히
+시작되는지 확인합니다. 다중 창 모드에서 앱을 시작하려면, Overview 버튼을
+누르고 앱의 제목 표시줄을 길게 누른 다음 화면의 강조 표시된 영역 중
+하나로 제목 표시줄을 끌어서 놓습니다.
+ </li>
+
+ <li>분할선을 끌어서 화면 분할 모드에서 앱의 크기를 조정합니다.
+ 작동 중단 없이 앱 크기가 조정되는지 확인하고, 필요한
+UI 요소가 표시되는지 확인합니다.
+ </li>
+
+ <li>앱에 최소 치수를 지정한 경우, 이 치수 아래로 앱 크기를
+조정해 봅니다. 지정된 최소값보다 더 작게 앱 크기를 조정할 수
+없는지 확인합니다.
+ </li>
+
+ <li>모든 테스트를 통해 앱의 성능이 적절한지 확인합니다. 예를 들어,
+앱 크기를 조정한 후 UI를 업데이트하기에 지연이
+너무 길지 않은지 확인합니다.
+ </li>
+</ul>
+
+<h4 id="test-checklist">테스트 검사 목록</h4>
+
+<p>
+ 다중 창 모드에서 앱의 성능을 확인하려면, 다음
+작업을 시도해 보세요. 별다른 설명이 없는 한, 화면 분할 및 다중 창 모드
+에서 모두 이들 작업을 시도해야 합니다.
+</p>
+
+<ul>
+ <li>다중 창 모드에 들어갔다 나갑니다.
+ </li>
+
+ <li>자신의 앱에서 다른 앱으로 전환하고, 앱이 표시는 되지만
+활성화되지 않은 동안에 적절히 동작하는지 확인합니다. 예를 들어, 앱이 동영상을 재생 중인 경우, 사용자가
+다른 앱과 상호작용하는 동안에 이 동영상이 계속 재생되는지
+확인합니다.
+ </li>
+
+ <li>화면 분할 모드에서, 분할선을 이동하여 앱을 더 크거나
+작게 만들어 봅니다. 앱을 나란히 또는 상하로 놓은 구성에서 이러한
+작업을 시도해 봅니다. 앱의 작동이 중단되지 않는지, 필수 기능이
+표시되는지, 그리고 크기 조정 작업이 너무 오래 걸리지 않는지
+확인합니다.
+ </li>
+
+ <li>빠르게 연속해서 여러 가지 크기 조정 작업을 수행합니다. 앱의 작동이 중단되거나 메모리가 누수되지
+않는지 확인합니다. 앱의 메모리 사용량을 확인하는
+방법에 대해서는 <a href="{@docRoot}tools/debugging/debugging-memory.html">RAM 사용량
+검사</a>를 참조하세요.
+ </li>
+
+ <li>여러 가지 다른 창 구성에서 앱을 정상적으로
+사용하고, 이 앱이 제대로 작동하는지 확인합니다. 텍스트를 읽을 수 있는지 확인하고, 해당
+UI 요소가 상호작용하기에 너무 작지 않은지 확인합니다.
+ </li>
+</ul>
+
+<h3 id="test-disabled-mw">다중 창 지원을 비활성화한 경우</h3>
+
+<p>
+ <code>android:resizableActivity="false"</code>를 설정하여
+다중 창 지원을 비활성화한 경우, Android N을 실행 중인 기기에서
+앱을 시작해야 하며, 앱을 자유형식 및 화면
+분할 모드로 둬야 합니다. 이 때 앱이 전체 화면 모드에 남아있는지
+확인하세요.
+</p>
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/_book.yaml b/docs/html-intl/intl/ko/preview/_book.yaml
deleted file mode 100644
index 17b1d96..0000000
--- a/docs/html-intl/intl/ko/preview/_book.yaml
+++ /dev/null
@@ -1,342 +0,0 @@
-toc:
-- title: 프로그램 개요
- path: /preview/overview.html
- path_attributes:
- - name: es-lang
- value: Información general del programa
- - name: in-lang
- value: Ikhtisar Program
- - name: ja-lang
- value: プログラム概要
- - name: ko-lang
- value: 프로그램 개요
- - name: pt-br-lang
- value: Visão geral do programa
- - name: ru-lang
- value: Обзор программы
- - name: vi-lang
- value: Tổng quan về Chương trình
- - name: zh-cn-lang
- value: 计划概览
- - name: zh-tw-lang
- value: 程式總覽
-
-- title: 지원 및 릴리스 노트
- path: /preview/support.html
-
-- title: Preview 설정
- path: /preview/setup-sdk.html
- path_attributes:
- - name: es-lang
- value: Configurar el SDK de la versión preliminar
- - name: in-lang
- value: Menyiapkan Preview
- - name: ja-lang
- value: Preview SDK のセットアップ
- - name: ko-lang
- value: 미리 보기 SDK 설정하기
- - name: pt-br-lang
- value: Configuração do Preview SDK
- - name: ru-lang
- value: Настройка пакета SDK Preview
- - name: vi-lang
- value: Kiểm thử trên Thiết bị
- - name: zh-cn-lang
- value: 设置预览版 SDK
- - name: zh-tw-lang
- value: 設定預覽版 SDK
-
-- title: 기기에 대한 테스트
- path: /preview/download.html
- path_attributes:
- - name: es-lang
- value: Pruebe en un dispositivo
- - name: in-lang
- value: Menguji pada Perangkat
- - name: ja-lang
- value: デバイス上でテストする
- - name: ko-lang
- value: 기기에서 테스트
- - name: pt-br-lang
- value: Testar em um dispositivo
- - name: ru-lang
- value: Тестирование на устройстве
- - name: vi-lang
- value: Kiểm thử trên Thiết bị
- - name: zh-cn-lang
- value: 在设备上测试
- - name: zh-tw-lang
- value: 在裝置上測試
-
-- title: 동작 변경 사항
- path: /preview/behavior-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: 行為變更
- section:
- - title: 백그라운드 최적화
- path: /preview/features/background-optimization.html
- path_attributes:
- - name: es-lang
- value: Optimizaciones en segundo plano
- - name: in-lang
- value: Optimisasi Latar Belakang
- - name: ja-lang
- value: バックグラウンド処理の最適化
- - name: ko-lang
- value: 백그라운드 최적화
- - name: pt-br-lang
- value: Otimizações em segundo plano
- - name: ru-lang
- value: Оптимизация фоновых процессов
- - name: vi-lang
- value: Tối ưu hóa Chạy ngầm
- - name: zh-cn-lang
- value: 后台优化
- - name: zh-tw-lang
- value: 背景最佳化
- - title: 언어 및 로케일
- path: /preview/features/multilingual-support.html
- path_attributes:
- - name: es-lang
- value: Idioma y configuración regional
- - name: in-lang
- value: Bahasa dan Lokal
- - name: ja-lang
- value: 言語とロケール
- - name: ko-lang
- value: 언어 및 로케일
- - name: pt-br-lang
- value: Idioma e localidade
- - name: ru-lang
- value: Язык и языковой стандарт
- - name: vi-lang
- value: Ngôn ngữ và Bản địa
- - name: zh-cn-lang
- value: 语言和区域设置
- - name: zh-tw-lang
- value: 語言和地區設定
-
-- title: Android N for Developers
- path: /preview/api-overview.html
- 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 總覽
- section:
- - title: 다중 창 지원
- path: /preview/features/multi-window.html
- path_attributes:
- - name: es-lang
- value: Compatibilidad con ventanas múltiples
- - name: in-lang
- value: Dukungan Multi-Jendela
- - name: ja-lang
- value: マルチ ウィンドウのサポート
- - name: ko-lang
- value: 다중 창 지원
- - name: pt-br-lang
- value: Suporte a várias janelas
- - name: ru-lang
- value: Поддержка многооконного режима
- - name: vi-lang
- value: Hỗ trợ đa cửa sổ
- - name: zh-cn-lang
- value: 多窗口支持
- - name: zh-tw-lang
- value: 多視窗支援
- - title: 알림
- path: /preview/features/notification-updates.html
- path_attributes:
- - name: es-lang
- value: Notificaciones
- - name: in-lang
- value: Pemberitahuan
- - name: ja-lang
- value: 通知
- - name: ko-lang
- value: 알림
- - name: pt-br-lang
- value: Notificações
- - name: ru-lang
- value: Уведомления
- - name: vi-lang
- value: Thông báo
- - name: zh-cn-lang
- value: 通知
- - name: zh-tw-lang
- value: 通知
- - title: Data Saver
- path: /preview/features/data-saver.html
- - title: TV 녹화
- path: /preview/features/tv-recording-api.html
- path_attributes:
- - name: es-lang
- value: Grabación de TV
- - name: in-lang
- value: Perekaman TV
- - name: ja-lang
- value: TV の録画
- - name: ko-lang
- value: TV 녹화
- - name: pt-br-lang
- value: Gravação para TV
- - name: ru-lang
- value: Запись ТВ
- - name: vi-lang
- value: Ghi lại TV
- - name: zh-cn-lang
- value: TV 录制
- - name: zh-tw-lang
- value: 電視錄製
- - title: 네트워크 보안 구성
- path: /preview/features/security-config.html
- path_attributes:
- - name: es-lang
- value: Configuración de seguridad de la red
- - name: ja-lang
- value: ネットワーク セキュリティ構成
- - name: ko-lang
- value: 네트워크 보안 구성
- - name: pt-br-lang
- value: Configurações de segurança de rede
- - name: ru-lang
- value: Конфигурация сетевой безопасности
- - name: vi-lang
- value: Cấu hình Bảo mật mạng
- - name: zh-cn-lang
- value: 网络安全配置
- - name: zh-tw-lang
- value: 網路安全性設定
- - title: ICU4J 지원
- path: /preview/features/icu4j-framework.html
- path_attributes:
- - name: es-lang
- value: API de ICU4J del framework de Android
- - name: in-lang
- value: ICU4J Android Framework API
- - name: ja-lang
- value: ICU4J Android フレームワーク API
- - name: ko-lang
- value: ICU4J Android 프레임워크 API
- - name: pt-br-lang
- value: APIs de estrutura do Android para ICU4J
- - name: ru-lang
- value: API-интерфейсы ICU4J в платформе Android
- - name: vi-lang
- value: API Khuôn khổ Android ICU4J
- - name: zh-cn-lang
- value: ICU4J Android 框架 API
- - name: zh-tw-lang
- value: ICU4J Android 架構 API
- - title: Java 8 언어 기능
- path: /preview/j8-jack.html
- path_attributes:
- - name: es-lang
- value: Funciones del lenguaje Java 8
- - name: in-lang
- value: Fitur Bahasa Java 8
- - name: ja-lang
- value: Java 8 の機能
- - name: ko-lang
- value: Java 8 언어 기능
- - name: pt-br-lang
- value: Recursos de linguagem do Java 8
- - name: ru-lang
- value: Возможности языка Java 8
- - name: vi-lang
- value: Tính năng của Ngôn ngữ Java 8
- - name: zh-cn-lang
- value: Java 8 语言功能
- - name: zh-tw-lang
- value: Java 8 語言功能
- - title: Android for Work 업데이트
- path: /preview/features/afw.html
- - title: 범위가 지정된 디렉터리 액세스
- path: /preview/features/scoped-folder-access.html
- path_attributes:
- - name: es-lang
- value: Acceso a directorios determinados
- - name: ja-lang
- value: 特定のディレクトリへのアクセス
- - name: ko-lang
- value: 범위가 지정된 디렉터리 액세스
- - name: pt-br-lang
- value: Acesso a diretórios com escopo
- - name: ru-lang
- value: Доступ к выделенным каталогам
- - name: vi-lang
- value: Truy cập Thư mục theo Phạm vi
- - name: zh-cn-lang
- value: 作用域目录访问
- - name: zh-tw-lang
- value: 限定範圍目錄存取
-
-- title: 샘플
- path: /preview/samples.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: 라이선스 계약
- path: /preview/license.html
- path_attributes:
- - name: es-lang
- value: Contrato de licencia
- - name: ja-lang
- value: 使用許諾契約
- - name: ko-lang
- value: 라이선스 계약
- - name: pt-br-lang
- value: Contrato de licença
- - name: ru-lang
- value: Лицензионное соглашение
- - name: zh-cn-lang
- value: 许可协议
- - name: zh-tw-lang
- value: 授權協議
diff --git a/docs/html-intl/intl/ko/preview/api-overview.jd b/docs/html-intl/intl/ko/preview/api-overview.jd
deleted file mode 100644
index 5cffdfb..0000000
--- a/docs/html-intl/intl/ko/preview/api-overview.jd
+++ /dev/null
@@ -1,1039 +0,0 @@
-page.title=Android N for Developers
-meta.tags="preview", "androidn"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-apis_2x.png
-@jd:body
-
-
-
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>주요 개발자 기능</h2>
- <ol>
- <ul style="list-style-type:none;">
- <li><a href="#multi-window_support">다중 창 지원</a></li>
- <li><a href="#notification_enhancements">알림</a></li>
- <li><a href="#jit_aot">JIT/AOT 컴파일</a></li>
- <li><a href="#quick_path_to_app_install">앱 설치를 위한 빠른 경로</a></li>
- <li><a href="#doze_on_the_go">이동 중 잠자기 모드</a></li>
- <li><a href="#background_optimizations">백그라운드 최적화</a></li>
- <li><a href="#data_saver">Data Saver</a></li>
- <li><a href="#vulkan">Vulkan API</a></li>
- <li><a href="#tile_api">Quick Settings 타일 API</a></li>
- <li><a href="#number-blocking">번호 차단</a></li>
- <li><a href="#call_screening">통화 스크리닝</a></li>
- <li><a href="#multi-locale_languages">로케일 및 언어</a></li>
- <li><a href="#emoji">새 이모티콘</a></li>
- <li><a href="#icu4">Android의 ICU4J API</a></li>
- <li><a href="#gles_32">OpenGL ES 3.2 API</a></li>
- <li><a href="#android_tv_recording">Android TV 녹화</a></li>
- <li><a href="#android_for_work">Android for Work</a></li>
- <li><a href="#accessibility_enhancements">접근성</a></li>
- <li><a href="#direct_boot">직접 부팅</a></li>
- <li><a href="#key_attestation">Key Attestation</a></li>
- <li><a href="#network_security_config">네트워크 보안 구성</a></li>
- <li><a href="#default_trusted_ca">신뢰할 수 있는 기본 CA</a></li>
- <li><a href="#apk_signature_v2">APK Signature Scheme v2</a></li>
- <li><a href="#scoped_directory_access">범위가 지정된 디렉터리 액세스</a></li>
- <li><a href="#keyboard_shortcuts_helper">Keyboard Shortcuts Helper</a></li>
- <li><a href="#sustained_performance_api">지속적인 성능 API</a></li>
- <li><a href="#vr">VR 지원</a></li>
- <li><a href="#print_svc">인쇄 서비스 개선 사항</a></li>
- <li><a href="#virtual_files">가상 파일</a></li>
- <li><a href="#framemetrics_api">FrameMetricsListener API</a></li>
- </ol>
-</div>
-</div>
-
-
-
-<p>Android N은 아직 한창 개발 중이지만, N Developer Preview를
-통해 지금 Android N을 일부 체험해 볼 수 있습니다. 아래 섹션에서는
-개발자를 위한 몇 가지 새로운 기능을 중점적으로 다룹니다. </p>
-
-<p>
- 플랫폼 변경 사항이 앱에 영향을 미칠 수도 있는 부분에
-대해 알아보려면 <a href="{@docRoot}preview/behavior-changes.html">동작 변경 사항</a>을 살펴보고,
- 주요 기능에 대해 자세히 알아보려면 개발자 가이드를 참조하고, 새로운 API에 대한 자세한
-내용을 보려면 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 참조</a>를 다운로드하세요.
-</p>
-
-<h2 id="multi-window_support">다중 창 지원</h2>
-
-
-<p>Android N에서 저희는 요청이 많은 새로운 멀티태스킹
-기능인 다중 창 지원을 플랫폼에 도입하고 있습니다. </p>
-
- <p>이제 사용자가 화면에서 두 개의 앱을 동시에 열 수 있습니다. </p>
- <ul>
- <li>Android N이 실행되는
-전화와 태블릿에서 사용자가 화면 분할 모드에서 두 개의 앱을
-나란히 또는 상하로 실행할 수 있습니다. 또한 앱 사이에 있는 분할선을 끌어서 앱의 크기를
-조정할 수 있습니다. </li>
-
-<li>Android TV 기기에서, 앱이 <a href="{@docRoot}preview/features/picture-in-picture.html">PIP(Picture-In-Picture)
-모드</a>로 배치될 수 있으므로, 사용자가 검색을 수행하거나 다른
-앱과 상호 작용하는 중에도 앱이 계속해서 콘텐츠를 표시할 수 있습니다.</li>
- </ul>
-
-<div class="col-4of10">
-<img src="{@docRoot}preview/images/mw-portrait.png" alt="" style="height:460px;padding-left:1em;" id="img-split-screen" />
-<p class="img-caption">
- <strong>그림 1.</strong> 화면 분할 모드에서 실행되는 앱.
-</p>
-
- </div>
-
-<p>특히 태블릿이나 다른 대형 화면 기기에서 다중 창
-지원을 통해 새로운 방식으로 사용자를 참여시킬 수 있습니다. 또한, 앱에서 드래그 앤 드롭 기능을 활성화하여
-사용자가 편리하게 앱에서나 앱으로 콘텐츠를 드래그할
-수 있으므로, 사용자 환경이 크게 개선됩니다. </p>
-
-<p>다중 창 지원을 앱에 추가하고 다중 창이 표시되는 방식을
-구성하는 것은 매우 간단합니다. 예를 들어, 액티비티의
-최소 허용 크기를 지정하면 사용자가 액티비티의 크기를 지정된 크기보다
-작게 조정하지 못합니다. 또한, 앱에 대해 다중 창 표시를 비활성화할 수도 있으며
- 이 경우 시스템은 전체 화면 모드에서만 앱을 표시합니다.</p>
-
-<p>
- 자세한 내용은 <a href="{@docRoot}preview/features/multi-window.html">다중 창 지원</a>
- 개발자 문서를 참조하세요.
-</p>
-
-<h2 id="notification_enhancements">알림 향상</h2>
-
-<p>Android N에서 저희는 알림을 더 쉽고 빠르게 사용할 수
-있도록 재설계했습니다. 몇 가지 변경 사항은 다음과 같습니다.</p>
-
-<ul>
- <li>
- <strong>템플릿 업데이트</strong>: 히어로 이미지와 아바타를 새롭게
- 강조하기 위해 알림 템플릿을 업데이트하는 중입니다. 개발자는 최소한의
- 코드 조정만으로 새로운 템플릿을 활용할 수 있습니다.
- </li>
-
- <li>
- <strong>메시지 스타일 사용자 지정</strong>: <code>MessageStyle</code> 클래스를 사용하여
- 알림과 관련된 사용자 인터페이스 레이블을 더 많이
-사용자 지정할 수 있습니다. 메시지, 대화 제목, 콘텐츠 뷰를
- 구성할 수 있습니다.
- </li>
-
- <li>
- <strong>묶음 알림</strong>: 시스템에서 메시지를 함께
- 그룹화하고(예: 메시지 주제별로 그룹화) 해당 그룹을 표시할 수 있습니다. 사용자는
- 이 그룹에 대해 해제 또는 보관과 같은 동작을 적절히 수행할 수 있습니다. Android
- Wear용 알림을 구현한 적이 있으시다면 이미 이 모델도 친숙하게 느껴질
- 것입니다.
- </li>
-
- <li>
- <strong>직접 회신</strong>: 실시간 통신 앱의 경우 Android 시스템은
- 인라인 회신을 지원하므로, 사용자가 알림 인터페이스
- 내에서 신속하게 SMS 또는 텍스트 메시지에 직접 응답할 수 있습니다.
- </li>
-
- <li>
- <strong>사용자 지정 뷰</strong>: 두 개의 새로운 API를 사용하면 알림에 사용자
- 지정 뷰를 사용할 때 시스템 장식(예: 알림 헤더 및 액션)을
- 활용할 수 있습니다.
- </li>
-</ul>
-
-<div class="col-4of12">
- <img src="{@docRoot}preview/images/notifications-1.png" alt="" style="padding:.5em;max-width:226px">
-</div>
-
-<div class="col-4of12">
- <img src="{@docRoot}preview/images/notifications-3.png" alt="" style="padding:.5em;max-width:226px">
-</div>
-
-<div class="col-4of12">
- <img src="{@docRoot}preview/images/notifications-2.png" alt="" style="padding:.5em;max-width:226px">
-</div>
-
-
-<p class="img-caption">
- <strong>그림 2.</strong> 묶음 알림 및 직접 회신.
-</p>
-
-<p>새로운 기능을 구현하는 방법에 대해 알아보려면
- <a href="{@docRoot}preview/features/notification-updates.html">알림</a>
-가이드를 참조하세요.</p>
-
-
-
-<h2 id="jit_aot">프로필 가이드 방식의 JIT/AOT 컴파일</h2>
-
-<p>Android N에서 저희는 코드 프로파일링이 있는
-JIT(Just in Time) 컴파일러를 ART에 추가했습니다. 이를 통해 ART에서 Android 앱이 실행되는 동안
-그 성능을 계속 향상시킬 수 있습니다. JIT 컴파일러는 ART의 현재 AOT(Ahead of Time) 컴파일러를 보완하고
-런타임 성능을 개선하고, 저장 공간을 절약하고, 앱 업데이트와
-시스템 업데이트의 시간 단축을 도와줍니다.</p>
-
-<p>프로필 가이드 방식의 컴파일을 통해 ART는 실제 사용량과 기기의
-조건에 따라 각 앱의 AOT/JIT 컴파일을 관리할 수 있습니다. 예를 들어, ART는 최상의 성능을 위해 각 앱의 핫 메서드에 대한 프로필을
-유지 관리하고 이들 메서드를 미리 컴파일하고
-캐시할 수 있습니다. 이 경우 앱의 다른 부분들은
-실제로 사용될 때까지 컴파일되지 않고 유지됩니다.</p>
-
-<p>프로필 가이드 방식의
-컴파일은 앱의 주요 부분들의 성능을 높여줄 뿐만 아니라,
-관련 바이너리를 비롯한 앱의 전체 RAM 공간을 줄이는 데 도움이 됩니다. 이 기능은 저용량 메모리 기기에 특히 중요합니다.</p>
-
-<p>ART는 기기 배터리에 미치는 영향이 최소화되는 방식으로
-프로필 가이드 방식의 컴파일을 관리합니다. ART는 기기가 유휴 상태이고 충전 중일 때만 사전 컴파일을 수행하며,
-해당 작업을 미리 수행함으로써 시간과 배터리를 절약합니다.</p>
-
-<h2 id="quick_path_to_app_install">앱 설치를 위한 빠른 경로</h2>
-
-<p>ART의 JIT 컴파일러가 가진 가장 눈에 띄는 이점 중 하나는
-앱 설치 및 시스템 업데이트 속도가 빠르다는 것입니다. Android 6.0에서 최적화하고 설치하는 데
-몇 분이 걸리는 대용량 앱조차도 이제는 단 몇 초 만에 설치할 수
-있습니다. 또한, 더 이상 최적화 단계가 없으므로 시스템 업데이트도 더 빠르게 이루어집니다. </p>
-
-<h2 id="doze_on_the_go">이동 중 잠자기 모드...</h2>
-
-<p>Android 6.0에서는 기기가 테이블 위에 올려져 있거나 서랍 안에
-들어 있는 등의 유휴 상태일 때 앱이 CPU와 네트워크를 사용하는 작업을 지연시킴으로써 배터리를
-절약하는 시스템 모드인 잠자기 모드를 도입했습니다. </p>
-
-<p>이제 Android N에서 잠자기 모드는 한걸음 더 나아가서 이동 중에도
-배터리를 절약합니다. 화면이 일정 시간 동안 꺼져 있고 기기의 플러그가
-뽑혀 있으면 잠자기 모드는 친숙한 일부 CPU 및 네트워크 제한을 앱에 적용합니다.
-즉, 사용자가 기기를 주머니에 휴대하고 다닐 때도 배터리를
-절약할 수 있습니다.</p>
-
-
-<img src="/preview/images/doze-diagram-1.png" alt="" id="figure1" />
-<p class="img-caption">
- <strong>그림 3.</strong> 이제 잠자기 모드는 기기가 정지 상태가 아니더라도
-배터리 수명을 개선할 수 있도록 제한을 적용합니다.
-</p>
-
-
-<p>기기의 배터리가 켜져 있는 동안 화면이 꺼지면 잠시 후에
-잠자기 모드는 네트워크 액세스를 제한하고 작업과 동기화를 지연시킵니다. 잠시 동안의 유지 관리 기간 중에
-애플리케이션의 네트워크 액세스가 허용되고
-지연된 작업/동기화가 실행됩니다. 화면을 켜거나 기기의 플러그를 꽂으면 기기가 잠자기 모드 상태에서
-벗어납니다.</p>
-
-<p>기기가 다시 일정 시간 동안 배터리로 켜져 있고 화면이 꺼진
-정지 상태가 되면, 잠자기 모드는 {@link
-android.os.PowerManager.WakeLock}, {@link android.app.AlarmManager} 알람 및
-GPS/Wi-Fi 스캔에 대해 전체 CPU 및 네트워크 제한을 적용합니다.</p>
-
-<p>앱을 잠자기 모드에 맞게 적용하는 최선의 방법은 기기가 움직이든
-움직이지 않든 동일합니다. 따라서 잠자기 모드를 효율적으로 처리하도록
-앱을 이미 업데이트했다면 모든 준비가 완료된 것입니다. 아직 업데이트하지 않았다면 지금 <a href="{@docRoot}training/monitoring-device-state/doze-standby.html#assessing_your_app">앱을 잠자기 모드에 맞춰
-조정</a>해 보세요.</p>
-
-<h2 id="background_optimizations">Project Svelte: 백그라운드 최적화</h2>
-
-<p>Project Svelte는 에코시스템에 속한 전체 Android 기기에서 시스템 및 앱에
-의해 사용되는 RAM 크기를 최소화하기 위한 지속적인 노력입니다. Android N에서 Project
-Svelte는 앱이 백그라운드에서 실행되는 방식을 최적화하는 데 초점을 맞추고 있습니다. </p>
-
-<p>백그라운드 처리는 대부분의 앱에서 필수적인 부분입니다. 백그라운드 처리가 올바로
-수행된다면 즉각적이고 빠르고 상황에 맞는 멋진 사용자 환경을 만들 수 있지만, 백그라운드
-처리가 올바로 수행되지 않는다면 RAM과 배터리를 불필요하게 소모하고
-다른 앱의 시스템 성능에 영향을 미칠 것입니다. </p>
-
-<p>Android 5.0 이후로,
-사용자가 선호하는 백그라운드 작업
-수행 방식은 {@link android.app.job.JobScheduler}였습니다. 앱은 메모리, 전원 및 연결 상태에 따라 시스템을 최적화하면서도
-작업을 예약할 수 있습니다. JobScheduler는 제어 기능과 간편성을 함께
-제공하므로, 저희는 모든 앱에서 이것을 사용하기 원합니다. </p>
-
-<p>
- 또 한 가지 좋은 옵션은 <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
-<code>GCMNetworkManager</code></a>입니다. 이는 Google Play
- 서비스의 일부분으로, 레거시 Android 버전에서 호환성이
- 있는 유사한 작업 예약을 제공합니다.
-</p>
-
-<p>Google에서는 더 많은 사용 사례를 충족시키기 위해 <code>JobScheduler</code> 및
-<code>GCMNetworkManager</code>를 계속
-확장하고 있습니다. 예를 들어, 이제 Android N에서는 콘텐츠 공급자의 변화에 따라
- 백그라운드 작업을 예약할 수 있습니다. 이와 동시에, Google에서는 특히
-저용량 메모리 기기에서 시스템 성능을 저하시킬 수
-있는 일부 오래된 패턴들을 없애기 시작했습니다.</p>
-
-<p>Android N에서 저희는 자주 사용되는 세 가지 암시적 브로드캐스트인
- {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} 및 {@link
- android.hardware.Camera#ACTION_NEW_VIDEO}를
-제거하는 중입니다. 왜냐하면 이것들은 여러 앱의 백그라운드 프로세스를 동시에 깨워서 메모리와 배터리를 과도하게 소모시킬 수 있기 때문입니다. 앱이
-이러한 브로드캐스트를 수신한다면, N Developer Preview를
- 활용하여 <code>JobScheduler</code> 및 관련 API로 마이그레이션하세요. </p>
-
-<p>
- 자세한 내용은 <a href="{@docRoot}preview/features/background-optimization.html">백그라운드
- 최적화</a> 문서를 참조하세요.
-</p>
-
-
-<h2 id="data_saver">Data Saver</h2>
-
-<div class="col-5of12" style="margin-right:1.5em;">
-<img src="{@docRoot}preview/images/datasaver.png" style="border:2px solid #ddd">
-
-<p class="img-caption" style="padding-right:2em;">
- <strong>그림 4.</strong> Settings의 Data Saver.
-</p>
- </div>
-
-<p>모바일 기기의 수명 전체에 걸쳐, 모바일 데이터 요금제에 따른 비용이
-기기 자체의 가격보다 일반적으로 많이 듭니다. 많은 사용자들에게 모바일 데이터는
-아껴 써야 하는 값비싼 자원입니다. </p>
-
-<p>Android N에서는 새로운 시스템 서비스인 Data Saver
-모드를 도입하며, Data Saver는 로밍 시나 결제 주기가 끝날 무렵
-또는 소액 선불 데이터 팩 사용 시에 앱에 의해 사용되는 모바일 데이터 사용량을 줄여줍니다. Data Saver를 통해 사용자는 앱이
-모바일 데이터를 사용하는 방식을 제어할 수 있으며, Data Saver가 켜져 있을 때 개발자가 더 효율적인 서비스를
-제공할 수 있습니다. </p>
-
-<p>사용자가 <strong>Settings</strong>에서 Data Saver를 활성화하고
-해당 기기가 데이터 통신 네트워크에 있는 경우, 시스템은 백그라운드
-데이터 사용을 차단하고, 가능하면 스트리밍의
-비트 전송률을 제한하거나 화질을 줄이거나 낙관적 사전 캐싱을
-지연시키는 등의 방식으로 포그라운드에서 데이터를 더 적게 사용하도록 앱에게 신호를 보냅니다. 사용자는 Data Saver가 켜진 경우에도 백그라운드 데이터 통신 연결을 허용하기 위해
-특정 앱을 허용 목록에 추가할 수 있습니다.</p>
-
-<p>Android N은 {@link android.net.ConnectivityManager}를 확장하여 <a href="{@docRoot}preview/features/data-saver.html#status">사용자의
-Data Saver 기본 설정을 검색</a>하고 <a href="{@docRoot}preview/features/data-saver.html#monitor-changes">기본
-설정 변경을 모니터링</a>하는 방법을
-앱에 제공합니다. 모든 앱은 사용자가 Data Saver를 활성화했는지 여부를 확인해야 하며
-포그라운드 및 백그라운드 데이터 사용을 제한하도록 노력해야 합니다.</p>
-
-
-<h2 id="vulkan">Vulkan API</h2>
-
-<p>
- Android N은 새로운 3D 렌더링 API인 <a href="http://www.khronos.org/vulkan" class="external-link">Vulkan™</a>을 플랫폼에 통합합니다.
-<a href="https://www.khronos.org/opengles/" class="external-link">OpenGL™
- ES</a>와 마찬가지로, Vulkan은 Khronos Group에 의해 관리되는 3D 그래픽 및 렌더링을 위한
- 공개 표준입니다.
-</p>
-
-<p>
- Vulkan은 처음부터 드라이버에서 CPU 오버헤드를 최소화하도록 설계되었고,
- 애플리케이션이 GPU 작업을 더욱 직접적으로 제어할 수 있게 해줍니다. 또한, Vulkan은
- 멀티스레드가 명령 버퍼 생성과 같은 작업을
-한 번에 수행하도록 허용하여 병렬 처리 성능을 높입니다.
-</p>
-
-<p>
- Vulkan 개발 도구와 라이브러리가 Android NDK에 배포되며, 그 포함 내역은
- 다음과 같습니다.
-</p>
-
-<ul>
- <li>헤더
- </li>
-
- <li>유효성 검사 계층(디버그 라이브러리)
- </li>
-
- <li>SPIR-V 셰이더 컴파일러
- </li>
-
- <li>SPIR-V 런타임 셰이더 컴파일 라이브러리
- </li>
-</ul>
-
-<p>
- Vulkan은 Nexus 5X, Nexus 6P 및 Nexus Player와 같은 Vulkan 지원 하드웨어가 있는 기기의
- 앱에만 사용될 수 있습니다. Google은
- 최대한 조속히 Vulkan을 더 많은 기기에 도입하기 위해 파트너들과 긴밀히 협력하고 있습니다.
-</p>
-
-<p>
- 자세한 내용은 <a href="{@docRoot}ndk/guides/graphics/index.html">API 문서</a>를 참조하세요.
-</p>
-
-<h2 id="tile_api">Quick Settings 타일 API</h2>
-
-
-<div style="float:right;max-width:320px">
-<img src="{@docRoot}preview/images/quicksettings.png" style="padding-left:1.5em;">
-
-<p class="img-caption" style="padding-left:2em;">
- <strong>그림 5.</strong> 알림 창의 Quick Settings 타일.
-</p>
-
-
- </div><p>Quick Settings는 키 설정 및 작업을 알림 창에서 직접 노출시키기
-위해 널리 사용되는 간단한 방법입니다. 더욱 유용하고 편리한 설정을
-위해 저희가 Android N에서 Quick Settings의 범위를 더욱 확장했습니다. </p>
-
-<p>Google에서는 Quick Settings 타일에 필요한 공간을 더 추가했으며,
-사용자는 페이지가 지정된 디스플레이 영역에서 왼쪽이나 오른쪽으로 스와이프하여 이들 타일에 액세스할 수 있습니다. 또한, 사용자가 Quick Settings 타일의
-모습과 표시 위치를 제어할 수 있도록 했습니다. 따라서 사용자는 끌어서 놓는 간단한 방법으로
-타일을 추가하거나 이동시킬 수 있습니다. </p>
-
-<p>또한, Android N은 개발자를 위해 새로운 API도 추가했으며
- 이를 통해 자신만의 Quick Settings 타일을 정의할 수 있으며, 사용자가 앱에서 키 컨트롤 및 작업에 쉽게 액세스할 수 있습니다.</p>
-
-<p>
- 빠른 설정 타일은 긴급하게 필요하거나 자주 사용되는 컨트롤 또는
-작업을 위해 예약되어 있으며, 앱을 시작하기 위한 바로가기로
-사용되어서는 안 됩니다.
-</p>
-
-<p>
- 타일을 정의한 후에는 이 타일을 사용자에게 표시할 수 있으며, 사용자가
- 드래그 앤 드롭하는 것만으로 이 타일을 Quick Settings에 추가할 수 있습니다.
-</p>
-
-<p>
- 앱 타일 만들기에 대한 자세한 내용은
-다운로드 가능한 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 참조</a>에서 <code>android.service.quicksettings.Tile</code>에 대한 문서를 참조하세요.
-</p>
-
-
-
-<h2 id="number-blocking">번호 차단</h2>
-
-<p>이제 Android N에서는 플랫폼에서 번호 차단을 지원하며,
-서비스 공급자가 차단된 번호 목록을 유지 관리할 수 있도록 프레임워크 API를 제공합니다. 기본
-SMS 앱, 기본 전화 앱 및 이동통신사 앱은
-차단된 번호 목록에서 읽기와 쓰기가 가능합니다. 다른 앱은 이 목록에 액세스할 수 없습니다.</p>
-
-<p>Android에서는 번호 차단을 플랫폼의 표준 기능으로 만들어,
-광범위한 기기에서 번호를 차단하기 위한 일관된 방식을 앱에
-제공합니다. 앱에서 활용할 수 있는 기타 이점은 다음과 같습니다.</p>
-
-<ul>
- <li> 통화에서 차단된 번호가 텍스트에서도 차단됩니다.
- <li> 차단된 번호는 재설정 시에도 백업 및 복원 기능을 통해
-기기에서 유지될 수 있습니다.
- <li> 여러 앱이 동일한 차단된 번호 목록을 사용할 수 있습니다.
-</ul>
-
-<p>또한 Android를 통한 이동통신사 앱 통합은 이동통신사들이 기기의
-차단된 번호 목록을 읽고 서비스측 차단을 수행할 수 있음을 의미하며,
-이를 통해 사용자들은 원치 않는 통화와 문자가
-특정 매체(예: VOIP 엔드포인트 또는 착신 전화)를 통해 자신들에게 도달하는 것을 차단할 수 있습니다.</p>
-
-<p>
- 자세한 내용은
- 다운로드 가능한 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API
- 참조</a>에서 <code>android.provider.BlockedNumberContract</code>를 참조하세요.
-</p>
-
-<h2 id="call_screening">통화 스크리닝</h2>
-
-<p>
- Android N에서는 기본 전화 앱이 수신 통화를 스크리닝하도록 허용합니다. 이를 위해
-전화 앱에는 새로운 <code>CallScreeningService</code>가 구현되며, 이를 통해 전화 앱은
-수신 통화의 {@link android.telecom.Call.Details Call.Details}에 따라
-다음과 같은 다양한 작업을 수행할 수 있습니다.
-</p>
-
-<ul>
- <li> 수신 통화 거절
- <li> 통화를 통화 기록에 허용하지 않음
- <li> 통화 알림을 사용자에게 표시하지 않음
-</ul>
-
-<p>
- 자세한 내용은
- 다운로드 가능한 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API
- 참조</a>에서 <code>android.telecom.CallScreeningService</code>를 참조하세요.
-</p>
-
-
-<h2 id="multi-locale_languages">다중 로케일 지원, 더 많은 언어 지원 추가</h2>
-
-
-<p>두 가지 언어로 된 사용 사례를 지원하기 위해 이제
-Android N에서는 사용자가 Settings에서 <strong>다중 로케일</strong>을 선택할 수 있습니다. 앱은 새로운
-API를 사용하여 사용자의 로케일을 가져온
-다음, 검색 결과를 여러 언어로 표시하거나 사용자가 이미 알고 있는
-언어로는 웹 페이지를 번역하지 않는 등의 더욱 정교한 사용자 환경을
-다중 로케일 사용자들에게 제공합니다.</p>
-
-<p>다중 로케일 지원과 함께 Android N에서는 또한 사용자가
-사용할 수 있는 언어의 범위도 더욱 넓혔습니다. 영어, 스페인어, 프랑스어,
-아랍어 등의 자주 사용되는 언어에 대해 각각 25가지 이상의 변형을 제공하며, 100가지 이상의 새로운 언어에 대한 부분적인
-지원도 추가합니다.</p>
-
-<p>앱은
-<code>LocaleList.GetDefault()</code>를 호출하여 사용자가 설정한 로케일 목록을 가져올 수 있습니다. 더 많은 수의 로케일을 지원하기 위해 Android N에서는 리소스 확인 방식을
-바꾸는 중에 있습니다. 새로운 리소스 확인 논리에서
-앱이 예상대로 작동하는지 테스트하고 확인해야 합니다.</p>
-
-<p>새로운 리소스 확인 동작과 따라야 하는 모범 사례에 대해
-알아보려면, <a href="{@docRoot}preview/features/multilingual-support.html">다국어 지원</a>을 참조하세요.</p>
-
-
-<h2 id="emoji">새 이모티콘</h2>
-
-<p>
- Android N에서는 피부 색조 그림 이모티콘과 변형 선택기 지원을
- 비롯한 추가적인 그림 이모티콘과 그림 이모티콘 관련
- 기능을 도입했습니다. 앱에서 그림 이모티콘을 지원하는 경우
- 아래 지침에 따라 이러한 그림 이모티콘에 관련된 기능을 잘 활용해 보세요.
-</p>
-
-<ul>
- <li>
- <strong>그림 이모티콘을 삽입하기 전에 기기에 해당 그림 이모티콘이 들어 있는지 확인하세요.</strong>
- 시스템 글꼴에 어떤 이모티콘이 있는지
- 확인하려면 {@link android.graphics.Paint#hasGlyph(String)} 메서드를 사용하세요.
- </li>
- <li>
- <strong>그림 이모티콘이 변형 선택기를 지원하는지 확인하세요.</strong>
- 변형 선택기를 사용하면 특정 이모티콘을 컬러나
- 흑백으로 표현할 수 있습니다.
- 모바일 기기에서는 앱이 흑백보다는 컬러로 이모티콘을 표시해야 합니다. 하지만
- 앱이 텍스트와 함께 이모티콘을 표시하는 경우에는 흑백 변형을 사용해야 합니다.
- 그림 이모티콘에 변형 이모티콘이 있는지 확인하려면 변형 선택기를 사용하세요.
- 변형이 있는 캐릭터의 전체 목록은
-<a class="external-link" href="http://www.unicode.org/Public/9.0.0/ucd/StandardizedVariants-9.0.0d1.txt">변형에
-대한 유니코드 설명서</a>의 <em>그림 이모티콘 변형 시퀀스</em> 섹션을
-검토하세요.
- </li>
- <li>
- <strong>그림 이모티콘이 피부 색조를 지원하는지 확인하세요.</strong> Android N 사용자는 이모티콘의 렌더링된 피부 색조를
- 자신의 기본 설정에 맞게 수정할 수 있습니다. 키보드 앱은 여러 가지 피부 색조가 있는
-이모티콘에 대한 시각적 표시를 제공해야 하며, 사용자가 선호하는 피부 색조를 선택하도록
-허용해야 합니다. 어떤 시스템 이모티콘에 피부 색조
-한정자가 있는지 확인하려면 {@link android.graphics.Paint#hasGlyph(String)}
-메서드를 사용하세요.
-<a class="external-link" href="http://unicode.org/emoji/charts/full-emoji-list.html">
-유니코드 설명서</a>를 읽어보면 어떤 이모티콘에서 피부 색조가 사용되는지 확인할 수 있습니다.
- </li>
-</ul>
-
-
-<h2 id="icu4">Android의 ICU4J API</h2>
-
-<p>
- 이제 Android N에서는 <code>android.icu</code> 패키지 아래의 Android 프레임워크에 있는 <a href="http://site.icu-project.org/">ICU4J</a> API의 하위 세트를
- 제공합니다. 마이그레이션이
- 용이하며, 대개는 <code>com.java.icu</code> 네임스페이스를
- <code>android.icu</code>로 변경하는 것이 간단합니다. 앱에서 ICU4J 번들을
- 이미 사용 중이신 경우, Android 프레임워크에서 제공되는 <code>android.icu</code>
- API로 전환하면 APK 크기를 상당히 줄일 수 있습니다.
-</p>
-
-<p>
- Android ICU4J API에 대해 자세히 알아보려면 <a href="{@docRoot}preview/features/icu4j-framework.html">ICU4J 지원</a>을 참조하세요.
-</p>
-
-
-
-<h2 id="gles_32">OpenGL™ ES 3.2 API</h2>
-
-<p>Android N에서는 다음을 비롯하여 OpenGL ES 3.2용 프레임워크 인터페이스와 플랫폼 지원을 추가합니다.</p>
-
-<ul>
- <li> <code>EXT_texture_sRGB_decode</code>를 제외한 <a class="external-link" href="https://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">
-Android 확장 프로그램 팩</a></a>(AEP)의 모든 확장 프로그램.
- <li> HDR 및 지연 셰이딩을 위한 부동 소수점 프레임 버퍼.
- <li> 일괄처리 및 스트리밍 성능을 향상시키는 BaseVertex 그리기 호출.
- <li> WebGL 오버헤드를 줄여주는 강력한 버퍼 액세스 제어.
-</ul>
-
-<p>Android N에 있는 OpenGL ES 3.2용 프레임워크 API에는
-<code>GLES32</code> 클래스가 제공됩니다. OpenGL ES 3.2를 사용 중인
-경우 반드시 <code><uses-feature></code> 태그와 <code>android:glEsVersion</code>
-속성을 사용하여 매니페스트 파일에서 요구 사항을 선언하세요. </p>
-
-<p>기기의 지원되는 OpenGL ES 버전을 런타임에 확인하는
-방법을 비롯하여, OpenGL ES 사용에 대한 자세한 내용은 <a href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL ES API 가이드</a>를 참조하세요.</p>
-
-
-<h2 id="android_tv_recording">Android TV 녹화</h2>
-
-<p>Android N에서는 새로운 녹화 API를 통해 Android TV 입력
-서비스로부터 콘텐츠를 녹화하고 재생하는 기능을 추가합니다. 기존의 타임 시프트 API를 기반으로 구축된 TV 입력
-서비스는 녹화 가능한 채널 데이터와 녹화된 세션의 저장 방식을 제어할 수 있으며,
-녹화된 콘텐츠와의 사용자 상호 작용을 관리할 수 있습니다. </p>
-
-<p>자세한 내용은 <a href="{@docRoot}preview/features/tv-recording-api.html">Android TV Recording API</a>를 참조하세요.</p>
-
-
-<h2 id="android_for_work">Android for Work</h2>
-
-<p>Android for Work에서는 Android N이 실행되는 기기를
-위해 여러 가지 새로운 기능과 API를 추가합니다. 몇 가지 특징이 아래에 나와 있으며, 변경 사항의 전체 목록은
-<a href="{@docRoot}preview/features/afw.html">Android for Work 업데이트</a>를 참조하세요.</p>
-
-<h3 id="work_profile_security_challenge">작업 프로필 보안 인증 질문 </h3>
-
-<p>
- N SDK를
-대상으로 하는 프로필 소유자는 작업 프로필에서 작동하는 앱에 대해
-별개의 보안 인증 질문을 지정할 수 있습니다. 사용자가 업무용 앱을 열려고 시도할 때 작업 프로필 보안 인증 질문이
-표시됩니다. 보안 인증 질문에 올바로 답하면 작업 프로필의 잠금이 해제되고 필요하다면
-작업 프로필의 암호가 해독됩니다. 프로필 소유자의 경우,
-<code>ACTION_SET_NEW_PASSWORD</code>는
-작업 프로필 보안 인증 질문을 설정하라는 메시지를 사용자에게 표시하고, <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code>는 기기
-잠금을 설정하라는 메시지를 사용자에게 표시합니다.
-</p>
-
-<p>
- 프로필 소유자는 <code>setPasswordQuality()</code>, <code>setPasswordMinimumLength()</code> 및 관련 메서드를 사용하여
-작업 프로필 보안 인증 질문에 대해
-별개의 비밀번호 정책을 설정할 수
-있습니다(예: PIN의 길이는 얼마로 해야 할지 또는 프로필을 잠금 해제하기 위해 지문을 사용할 수 있는지 여부). 프로필 소유자는
-새 <code>getParentProfileInstance()</code> 메서드에 의해 반환되는 <code>DevicePolicyManager</code>
-인스턴스를 사용하여 기기 잠금을 설정할 수도 있습니다.
- 그 밖에도, 프로필 소유자는
-새 <code>setOrganizationColor()</code> 및 <code>setOrganizationName()</code> 메서드를 사용하여 작업 프로필 보안 인증 질문에 대한 자격 증명 화면을
-사용자 지정할 수 있습니다.
-</p>
-<h3 id="turn_off_work">작업 해제 </h3>
-
-<p>작업 프로필이 있는 기기에서는 사용자가 작업 모드를 설정하거나 해제할 수 있습니다. 작업 모드가
-해제되면 관리된 사용자가 일시적으로 종료되며, 이 경우 작업 프로필
-앱, 백그라운드 동기화 및 알림이 비활성화됩니다. 여기에는 프로필 소유자 애플리케이션이
-포함됩니다. 작업 모드가 해제되면 사용자가 업무용 앱을 실행할 수 없음을
-미리 알려주기 위한 영구적인 상태 아이콘이 표시됩니다. 런처는
-업무용 앱과 위젯에 액세스할 수 없음을 나타냅니다. </p>
-
-<h3 id="always_on_vpn">상시 접속 VPN </h3>
-
-<p>기기 소유자 및 프로필 소유자는 항상 지정된 VPN을 통해 업무용 앱을
-연결하도록 보장할 수 있습니다. 시스템은 기기가 부팅된
-후에 해당 VPN을 자동으로 시작합니다.</p>
-
-<p>
- 새로운 <code>DevicePolicyManager</code> 메서드는
- <code>setAlwaysOnVpnPackage()</code> 및
- <code>getAlwaysOnVpnPackage()</code>입니다.
-</p>
-
-<p>앱 상호 작용 없이 시스템에 의해
-VPN 서비스가 직접 바인딩될 수 있으므로, VPN 클라이언트는 상시 접속 VPN에 대해 새로운 진입점을 처리해야 합니다. 이전과
-마찬가지로, 서비스는 <code>android.net.VpnService</code> 액션과 일치하는 인텐트 필터에
-의해 시스템에 표시됩니다. </p>
-
-<p>
- 또한, <strong>Settings>More>Vpn</strong>을 사용하여 사용자는 기본 사용자에서
- <code>VPNService</code> 메서드를
- 구현하는 상시 접속 VPN 클라이언트를 수동으로 설정할 수도 있습니다.
-</p>
-
-<h3 id="custom_provisioning">사용자 지정 프로비저닝</h3>
-
-<p>
- 애플리케이션은 기업 색상과 로고로 프로필 소유자 및 기기 소유자 프로비저닝
- 흐름을 사용자 지정할 수 있습니다.
-<code>DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR</code>가 흐름 색상을
-사용자 지정하고, <code>DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI</code>가
-기업 로고로 흐름을 사용자 지정합니다.
-</p>
-
-<h2 id="accessibility_enhancements">접근성 향상</h2>
-
-<p>이제 Android N에서는 새로운 기기 설치 시 Welcome 화면에서
-Vision Settings를 바로 제공합니다. 이렇게 하면 사용자가 자신의
-기기에서 확대 제스처, 글꼴 크기,
-디스플레이 크기 및 TalkBack 등과 같은 접근성 기능을 휠씬 더 쉽게 검색하고 구성할 수 있습니다. </p>
-
-<p>이렇게 눈에 띄는 위치에 접근성 기능을 배치하면, 사용자가 이
-기능을 활성화하여 앱을 사용할 가능성이 더욱 커집니다. 이들 설정을 활성화하여 조기에 앱을
-테스트해야 합니다. Settings >
-Accessibility에서 설정을 활성화할 수 있습니다.</p>
-
-<p>Android N에서도 마찬가지로, 운동 장애가 있는 사용자가
-이제 접근성 서비스를 통해 화면을 터치할 수 있습니다. 이 새로운 API를 사용하면 얼굴 추적, 시각 추적,
-지점 스캐닝 등의 기능으로 서비스를 구축하여 해당 사용자의
-요구를 충족시킬 수 있습니다.</p>
-
-<p>자세한 내용은
- 다운로드 가능한 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 참조</a>에서 <code>android.accessibilityservice.GestureDescription</code>을 참조하세요.</p>
-
-
-<h2 id="direct_boot">직접 부팅</h2>
-
-<p>직접 부팅은 기기 시동 시간을 개선해주며, 예상치 못한 재부팅
-후에도 등록된 앱이 제한된 기능을 유지하도록 해줍니다. 예를 들어,
-사용자가 취침하는 중에 암호화된 기기가 재부팅되는 경우,
-이제는 등록되어 있는 알람, 메시지 및 수신 통화로 사용자에게 알려줄
-수 있습니다. 즉, 재시작 직후에도 접근성 서비스를
- 바로 사용할 수 있습니다.</p>
-
-<p>직접 부팅은 Android N의 파일 기반 암호화를 활용하여 시스템
-및 앱 데이터에 대해 정밀한 암호화 정책을 활성화합니다. 이 시스템은
-선택된 시스템 데이터와 명시적으로 등록된 앱
-데이터에 대해 기기 암호화 저장소를 사용합니다. 기본적으로, 다른 모든
- 시스템 데이터, 사용자 데이터, 앱 및 앱 데이터에 대해 자격 증명 암호화 저장소가 사용됩니다. </p>
-
-<p>부팅 시에 시스템은 제한된 모드에서 시작되며, 기기 암호화
-데이터에만 액세스할 수 있고 앱 또는 데이터에는 액세스하지
-못합니다. 이 모드에서 구성 요소를 실행하려는 경우,
-매니페스트에 플래그를 설정하여 구성 요소를 등록할 수 있습니다. 재시작 후에 시스템은 <code>LOCKED_BOOT_COMPLETED</code>
-인텐트를 브로드캐스트하여
-등록된 구성 요소를 활성화합니다. 잠금을 해제하기 전에, 시스템은 등록된 기기
-암호화 앱 데이터를 사용할 수 있는지 확인합니다. 사용자가 잠금 화면 자격 증명을 확인하여
- 암호를 풀기 전까지는 다른 모든 데이터를 사용할 수 없습니다. </p>
-
-자세한 내용은 <a href="{@docRoot}preview/features/direct-boot.html">직접 부팅</a>을 참조하세요.</p>
-</p>
-
-
-<h2 id="key_attestation">Key Attestation</h2>
-
-<p>하드웨어 기반 키 저장소는 Android 기기에서 암호화 키를
-만들고 저장하고 사용하기 위한 훨씬 더 안전한 방법입니다. 이
-키 저장소는 Linux 커널, 잠재적 Android 취약점, 루팅된 기기의
-공격으로부터 키를 보호해 줍니다.</p>
-
-<p>하드웨어 기반 키 저장소를 더욱 쉽고 안전하게 사용하도록
-Android N에서는 Key Attestation을 도입했습니다. Key Attestation을 사용하여 앱
-및 오프-기기는 RSA 또는 EC 키 쌍이 하드웨어 기반인지 여부를 결정할 수
-있으며, 키 쌍의 속성에는 어떤 것이 있고 어떠한 제약 조건이 사용성
-및 유효성에 적용되는지 여부를 결정할 수 있습니다. </p>
-
-<p>앱 및 오프-기기 서비스는 X.509 증명 인증서를 통해 키 쌍에 대한
-정보를 요청할 수 있으며 이 인증서는 유효한 증명 키로 서명되어야
-합니다. 증명 키는 공장에서 기기의 하드웨어 기반
-키 저장소에 주입되는 ECDSA 서명 키입니다. 따라서 유효한 증명 키에 의해
-서명된 증명 인증서는 하드웨어 기반 키 저장소에 있는 키 쌍의
-세부 정보와 함께 이 키 저장소의 존재 여부를
-확인합니다.</p>
-
-<p>안전한 공식 Android 공장 이미지가 기기에 사용 중인지
-확인하기 위해, Key Attestation은
-기기 <a class="external-link" href="https://source.android.com/security/verifiedboot/verified-boot.html#bootloader_requirements">부트로더</a>가 다음의 정보를 <a class="external-link" href="https://source.android.com/security/trusty/index.html">TEE(Trusted Execution Environment)</a>에
-제공하도록 요구합니다.</p>
-
-<ul>
-<li>기기에 설치된 OS 버전 및 패치 수준</li>
-<li><a href="https://source.android.com/security/verifiedboot/index.html" class="external-link">확인된 부팅</a> 공개 키 및 잠금 상태</li>
- </ul>
-
-<p>하드웨어 기반 키 저장소 기능에 대한 자세한
-내용은 <a href="https://source.android.com/security/keystore/" class="external-link">하드웨어 기반 키 저장소</a> 가이드를 참조하세요.</p>
-
-<p>Key Attestation 이외에도 Android N에서는 지문 등록
-시 취소되지 않는 지문 바인드 키도 도입했습니다.</p>
-
-<h2 id="network_security_config">네트워크 보안 구성</h2>
-
-<p>Android N에서 앱은 오류가 발생하기 쉬운 기존의 프로그래밍 방식
-API(예: X509TrustManager)를 사용하는 대신 선언적
-<em>네트워크 보안 구성</em>을 사용하여 보안(HTTPS, TLS) 연결의 동작을 코드
-수정 없이 안전하게 사용자 지정할 수 있습니다.</p>
-
- <p>지원되는 기능:</p>
-<ul>
-<li><b>사용자 지정 신뢰 앵커.</b> 애플리케이션이 보안 연결을 위해
-어떤 인증 기관(CA)을 신뢰할 수 있는지 사용자 지정할 수 있게 해줍니다. 예를 들어,
-특정한 자체 서명 인증서를 신뢰하거나 제한적인 공용 CA 세트를 신뢰하도록 사용자 지정할 수 있습니다.
-</li>
-<li><b>디버그 전용 재정의.</b> 애플리케이션 개발자가 설치 기반에 위험을 더하지
-않고 애플리케이션의 보안 연결을 안전하게
-디버그할 수 있게 해줍니다.
-</li>
-<li><b>일반 텍스트 트래픽 옵트아웃.</b> 애플리케이션이 일반 텍스트 트래픽을 실수로 사용하지
-않도록 스스로를 보호할 수 있게 해줍니다.</li>
-<li><b>인증서 고정.</b> 애플리케이션이 보안 연결을 위해 어떤 서버 키를
- 신뢰할지 제한하도록 해주는 고급 기능입니다.</li>
-</ul>
-
-<p>자세한 내용은 <a href="{@docRoot}preview/features/security-config.html">네트워크 보안 구성</a>을
-참조하세요.</p>
-
-<h2 id="default_trusted_ca">신뢰할 수 있는 기본 인증 기관</h2>
-
-<p>기본적으로, Android N을 대상으로 하는 앱은 시스템에서
-제공되는 인증서만을 신뢰하며 사용자가 추가한 인증 기관(CA)은 더 이상 신뢰하지 않습니다. Android N을 대상으로 하는 앱이 사용자가
-추가한 CA를 신뢰하려는 경우에는
-<a href="{@docRoot}preview/features/security-config.html">네트워크 보안 구성</a>을 사용하여
-사용자 CA를 신뢰해야 하는 방법을 지정해야 합니다.</p>
-
-<h2 id="apk_signature_v2">APK Signature Scheme v2</h2>
-
-<p>
- Android N에서는 앱 설치 시간을 더욱 단축시켜 주고
-APK 파일을 무단으로 변경하지 못하도록 더욱 강력하게
-보호해주는 새로운 앱 서명 구성표인 APK Signature Scheme v2를 도입했습니다. 기본적으로, Android Studio 2.2 및 Android
- Plugin for Gradle 2.2는 APK Signature Scheme v2 뿐만 아니라 JAR 서명을 사용하는 기존의 서명 구성표를 둘다
- 사용하여 앱에 서명합니다.
-</p>
-
-<p>
- 앱에 APK Signature Scheme v2를 적용하는 것이 좋지만, 이 새로운
- 구성표를 반드시 적용해야 하는 것은 아닙니다. APK
- Signature Scheme v2를 사용할 때 앱이 올바로 빌드되지 않을 경우 이 새 구성표를 비활성화할 수 있습니다. 비활성화 프로세스가
-실행되면 Android Studio 2.2 및 Android Plugin for Gradle 2.2는 기존의 서명 구성표만 사용하여
-앱에 서명합니다. 기존 구성표만으로
-서명하려면 모듈 수준의 <code>build.gradle</code> 파일을 연 다음, 릴리스 서명
-구성에 <code>v2SigningEnabled false</code> 줄을
-추가하세요.
-</p>
-
-<pre>
- android {
- ...
- defaultConfig { ... }
- signingConfigs {
- release {
- storeFile file("myreleasekey.keystore")
- storePassword "password"
- keyAlias "MyReleaseKey"
- keyPassword "password"
- <strong>v2SigningEnabled false</strong>
- }
- }
- }
-</pre>
-
-<p class="caution"><strong>주의: </strong> APK
- Signature Scheme v2를 사용하여 앱에 서명하고 앱을 추가로 변경하는 경우 앱의 서명이
- 무효화됩니다. 따라서 <code>zipalign</code>과
- 같은 도구는 APK Signature Scheme v2를 사용하여 앱에 서명한 후가 아니라 서명하기 전에 사용되어야 합니다.
-</p>
-
-<p>
- 자세한 내용은 Android Studio에서
-<a href="{@docRoot}studio/publish/app-signing.html#release-mode">앱에
-서명</a>하는 방법을 설명하고 Android Plugin for Gradle을 사용하여 <a href="{@docRoot}studio/build/build-variants.html#signing">앱
- 서명을 위한 빌드 파일을 구성</a>하는 방법에 대해 설명하는 Android Studio 문서를 읽어보세요.
-</p>
-
-<h2 id="scoped_directory_access">범위가 지정된 디렉터리 액세스</h2>
-
-<p>Android N에서 앱은 새로운 API를 사용하여 특정
-<a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">외부 저장소</a> 디렉터리(SD 카드와 같은 이동식 미디어의 디렉터리 포함)에
-대한 액세스를 요청할 수 있습니다. 새로운 API는 애플리케이션이
-표준 외부 저장소 디렉터리(예: <code>Pictures</code> 디렉터리)에 액세스하는 방식을 훨씬 단순화합니다. 사진
-앱과 같은 앱은 모든 저장소 디렉터리에 대해 액세스 권한을 부여하는
-<code>READ_EXTERNAL_STORAGE</code>를 사용하는 대신 또는 사용자가 디렉터리를 탐색하도록 하는 저장소 액세스 프레임워크(SAF)를
-사용하는 대신 이들 API를
-사용할 수 있습니다.</p>
-
-<p>또한, 새로운 API는 사용자가 외부 저장소 액세스 권한을
-앱에 부여하는 단계를 단순화합니다. 새로운 API를 사용하는 경우 시스템은
-애플리케이션이 어떤 디렉터리에 대한 액세스 권한을
-요청하는지를 명확하게 설명해주는 단순한 권한 UI를 사용합니다.</p>
-
-<p>자세한 내용은
-<a href="{@docRoot}preview/features/scoped-folder-access.html">범위가 지정된
-디렉터리 액세스</a> 개발자 문서를 참조하세요.</p>
-
-<h2 id="keyboard_shortcuts_helper">Keyboard Shortcuts Helper</h2>
-
-<p>
-Android N에서는 사용자가 "Alt + /" 키를 눌러 <em>Keyboard Shortcuts</em>
-화면을 트리거할 수 있는데, 이 화면에는 시스템과 해당 앱에서 둘다 사용할 수 있는 모든
-바로 가기가 표시됩니다. 이들 바로 가기는 앱의 메뉴에서 자동으로 검색되지만(사용 가능한 경우),
-개발자가 화면에 맞춰 스스로 미세 조정한 바로 가기 목록을
-제공할 수 있습니다. 이를 위해서는 다운로드 가능한
-<a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 참조</a>에 설명되어 있는 새
-<code>Activity.onProvideKeyboardShortcuts()</code> 메서드를 재정의할 수 있습니다.
-</p>
-
-<p>
-앱의 어느 곳에서든 Keyboard Shortcuts Helper를 트리거하려면 관련 액티비티에 대해
-{@code Activity.requestKeyboardShortcutsHelper()}를 호출하세요.
-</p>
-
-<h2 id="sustained_performance_api">지속적인 성능 API</h2>
-
-<p>
-기기 구성 요소가 온도 제한에 도달할 때
-시스템에서는 시스템온칩(system-on-chip) 엔진을 조절하므로, 장시간 실행되는 앱의 성능이 크게 변동될
-수 있습니다. 이러한 변동은 장시간 실행되는 고성능 앱을 만들려는 앱 개발자
-입장에서는 일종의 움직이는 과녁과도 같은 것입니다.
-</p>
-
-<p>
-이러한 제한을 해결하기 위해, Android N에서는
-<em>지속적인 성능 모드</em>를 지원하며, 이 모드를 통해 OEM들은 장시간 실행되는 앱의
-기기 성능에 대한 힌트를 제공할 수 있습니다. 앱 개발자는
-이들 힌트를 사용하여 장기간에 걸쳐
-기기 성능을 예측 가능하고 이 성능을 일관된 수준으로 유지하기 위해 앱을 적절히 조정할 수 있습니다.
-</p>
-
-<p>
-앱 개발자는 N Developer Preview에 있는 이
-새 API를 Nexus 6P 기기에서만 시험해 볼 수 있습니다. 이 기능을 사용하려면
-지속적인 성능 모드에서 실행하려는 기간에 대해
-지속적인 성능 기간 플래그를 설정하세요.
-{@code Window.setSustainedPerformanceMode()} 메서드를 사용하여 이 플래그를 설정하세요. 해당 기간이 포커스 안에 없을 때는
-이 모드가 자동으로 비활성화됩니다.
-</p>
-
-<h2 id="vr">VR 지원</h2>
-
-<p>
-개발자가 사용자를 위한 고품질 모바일 VR 환경을 만들 수 있도록, Android N에서는
-새로운 VR 모드에 대한 플랫폼 지원과 최적화를 추가합니다. VR 앱 전용 CPU 코어에 대한 액세스를 비롯하여
-다수의 성능 개선 사항이 있습니다.
-지능적 머리 추적과
-VR용으로 작동하는 스테레오 알림 기능을 앱 내에서 이용할 수 있습니다. 가장 중요한 점은, 지연 시간이 매우 짧은
-그래픽을 Android N이 제공한다는 사실입니다. Android N용 VR 앱 만들기에 대한 자세한 정보는
-<a href="https://developers.google.com/vr/android/">Android용 Google VR SDK</a>를 참조하세요.
-</p>
-
-
-<h2 id="print_svc">인쇄 서비스 개선 사항</h2>
-
-<p>
- 이제 Android N에서는 인쇄 서비스 개발자가 개별 프린터와 인쇄 작업에
-대한 추가적인 정보를 노출시킬 수 있습니다.
-</p>
-
-<p>
- 개별 프린터를 나열할 때, 이제 인쇄 서비스가 다음 두 가지 방식으로 프린터마다
-아이콘을 설정할 수 있습니다.
-</p>
-
-<ul>
- <li><code>PrinterInfo.Builder.setResourceIconId()</code>를 호출하여 리소스 ID로부터
-아이콘을 설정할 수 있습니다.
- </li>
-
- <li><code>PrinterInfo.Builder.setHasCustomPrinterIcon()</code>을 호출하고,
-<code>android.printservice.PrinterDiscoverySession.onRequestCustomPrinterIcon()</code>을 사용하여 아이콘이 요청될 때 콜백을 설정하여
-네트워크에서 아이콘을 표시할
- 수 있습니다.
- </li>
-</ul>
-
-<p>
- 또한, <code>PrinterInfo.Builder.setInfoIntent()</code>를 호출하여 추가적인 정보를 표시하도록
-프린터당 액티비티를 제공할 수 있습니다.
-</p>
-
-<p>
- <code>android.printservice.PrintJob.setProgress()</code> 및
-<code>android.printservice.PrintJob.setStatus()</code>를 각각 호출하여
-인쇄 작업 알림에서 인쇄 작업의
-진행률과 상태를 나타낼 수 있습니다.
-</p>
-
-<p>
- 이들 메서드에 대한 자세한 내용은 다운로드 가능한 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 참조</a>를 확인하세요.
-</p>
-
-<h2 id="framemetrics_api">FrameMetricsListener API</h2>
-
-<p>
-앱은 FrameMetricsListener API를 통해 UI 렌더링
-성능을 모니터링할 수 있습니다. 이 기능을 제공하기 위해 이 API는 앱의 현재 창에 대한 프레임 타이밍
-정보를 전송하는 스트리밍 Pub/Sub API를 노출시킵니다. 반환되는 데이터는
-<code><a href="{@docRoot}tools/help/shell.html#shellcommands">adb shell</a>
-dumpsys gfxinfo framestats</code>가 표시하는 데이터와 동일하지만, 지난 120개 프레임으로 제한되지 않습니다.
-</p>
-
-<p>
-FrameMetricsListener를 사용하면 USB 연결 없이 프로덕션 환경에서
-상호 작용 수준의 UI 성능을 측정할 수 있습니다. 이 API를
-사용하면
-{@code adb shell dumpsys gfxinfo}보다 훨씬 세분화된 수준에서 데이터를 수집할 수 있습니다. 시스템은 앱에서 발생하는 특정한 상호 작용에
-대한 데이터를 수집할 수 있기 때문에, 이처럼 높은 수준의 세분화가 가능합니다. 시스템은
-전체 앱의 성능에 대한 전체 요약을 캡처하거나
-전체 상태를 지울 필요가 없습니다. 이 기능을 사용하면
-앱 내에서의 실제 사용 사례에 대한 UI 성능에서
-성능 데이터를 수집하고 성능 저하를 찾아낼 수 있습니다.
-</p>
-
-<p>
-창을 모니터링하려면 <code>FrameMetricsListener.onMetricsAvailable()</code>
-콜백 메서드를 구현하고 해당 창에 등록하세요. 자세한 내용은 다운로드 가능한
-<a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 참조</a>에서 {@code FrameMetricsListener} 클래스 문서를
-참조하세요.
-</p>
-
-<p>
-이 API는 {@code FrameMetrics} 객체를 제공하며 여기에는 렌더링 하위 시스템이 프레임 수명 주기의 다양한 이정표에 대해 보고하는
-타이밍 데이터가 포함됩니다.
-지원되는 지표는 {@code UNKNOWN_DELAY_DURATION},
-{@code INPUT_HANDLING_DURATION}, {@code ANIMATION_DURATION},
-{@code LAYOUT_MEASURE_DURATION}, {@code DRAW_DURATION}, {@code SYNC_DURATION},
-{@code COMMAND_ISSUE_DURATION}, {@code SWAP_BUFFERS_DURATION},
-{@code TOTAL_DURATION}, {@code FIRST_DRAW_FRAME}입니다.
-</p>
-
-
-<h2 id="virtual_files">가상 파일</h2>
-
-<p>
- 이전 버전의 Android에서는 사용자가
-Google 드라이브와 같은 자신의 클라우드 저장소 계정에서 파일을 선택할 수 있도록, 앱이 저장소 액세스 프레임워크를
-사용할 수 있었습니다. 하지만 직접적인 바이트코드 표시가 없는
-파일을 표시하기 위한 방법이 없었으며, 모든 파일이 입력 스트림을
-제공해야 했습니다.
-</p>
-
-<p>
- Android N에서는 <em>가상 파일</em>이라는 개념을 저장소 액세스
- 프레임워크에 추가합니다. 가상 파일 기능을 사용하면,
-{@link android.content.Intent#ACTION_VIEW} 인텐트와 함께 사용될 수 있는
-문서 URI에 직접적인 바이트코드 표시가 없더라도 이 문서 URI를 {@link android.provider.DocumentsProvider}가 반환할 수
-있습니다. 또한 Android N에서는 가상 파일이든 아니든 간에, 사용자 파일에 대한
-대체 형식을 제공할 수 있습니다.
-</p>
-
-<p>
- 앱에서 가상 문서의 URI를 가져오려면 먼저
-{@link android.content.Intent}를 만들어 파일 선택기 UI를 여세요. 앱은 {@link android.content.ContentResolver#openInputStream(Uri) openInputStream()}
- 메서드를 사용하여
- 가상 파일을
-직접 열 수 없으므로,
-{@link android.content.Intent#CATEGORY_OPENABLE} 카테고리를 포함하는 경우에는 앱이 어떤 가상 파일도 수신하지 못합니다.
-</p>
-
-<p>
- 사용자가 선택한 후에는, 시스템이
-{@link android.app.Activity#onActivityResult onActivityResult()} 메서드를 호출합니다.
- 아래의 코드 조각에서 볼 수 있듯이, 앱이 가상 파일의 URI를 검색하고
-입력 스트림을 가져올 수 있습니다.
-</p>
-
-<pre>
- // Other Activity code ...
-
- final static private int REQUEST_CODE = 64;
-
- // We listen to the OnActivityResult event to respond to the user's selection.
- @Override
- public void onActivityResult(int requestCode, int resultCode,
- Intent resultData) {
- try {
- if (requestCode == REQUEST_CODE &&
- resultCode == Activity.RESULT_OK) {
-
- Uri uri = null;
-
- if (resultData != null) {
- uri = resultData.getData();
-
- ContentResolver resolver = getContentResolver();
-
- // Before attempting to coerce a file into a MIME type,
- // check to see what alternative MIME types are available to
- // coerce this file into.
- String[] streamTypes =
- resolver.getStreamTypes(uri, "*/*");
-
- AssetFileDescriptor descriptor =
- resolver.openTypedAssetFileDescriptor(
- uri,
- streamTypes[0],
- null);
-
- // Retrieve a stream to the virtual file.
- InputStream inputStream = descriptor.createInputStream();
- }
- }
- } catch (Exception ex) {
- Log.e("EXCEPTION", "ERROR: ", ex);
- }
- }
-</pre>
-
-<p>
- 사용자 파일 액세스에 대한 자세한 내용은
-<a href="{@docRoot}guide/topics/providers/document-provider.html">저장소
-액세스 프레임워크 가이드</a>를 참조하세요.
-</p>
diff --git a/docs/html-intl/intl/ko/preview/behavior-changes.jd b/docs/html-intl/intl/ko/preview/behavior-changes.jd
deleted file mode 100644
index 5d325e1..0000000
--- a/docs/html-intl/intl/ko/preview/behavior-changes.jd
+++ /dev/null
@@ -1,610 +0,0 @@
-page.title=동작 변경 사항
-page.keywords=preview, sdk, 호환성
-meta.tags="preview", "compatibility"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-changes_2x.png
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>이 문서의 내용</h2>
-
-<ol>
- <li><a href="#perf">성능 향상</a>
- <ol>
- <li><a href="#doze">잠자기 모드</a></li>
- <li><a href="#bg-opt">백그라운드 최적화</a></li>
- </ol>
- </li>
- <li><a href="#perm">권한 변경</a>
- </li>
- <li><a href="#sharing-files">앱 사이의 파일 공유</a></li>
- <li><a href="#accessibility">접근성 향상</a>
- <ol>
- <li><a href="#screen-zoom">화면 확대/축소</a></li>
- <li><a href="#vision-settings">설정 마법사의 Vision Settings</a></li>
- </ol>
- </li>
- <li><a href="#ndk">플랫폼 라이브러리에 연결되는 NDK 앱</a></li>
- <li><a href="#afw">Android for Work</a></li>
- <li><a href="#annotations">주석 보존</a></li>
- <li><a href="#other">기타 중요한 사항</a></li>
-</ol>
-
-<h2>참고 항목</h2>
-<ol>
- <li><a href="{@docRoot}preview/api-overview.html">
- Android N API 개요</a></li>
-</ol>
-
-</div>
-</div>
-
-
-<p>
- Android N에는 새로운 기능 및 특징과 더불어
-다양한 시스템 변경 사항 및 API 동작 변경 사항이 포함되어 있습니다. 이 문서에서는
-여러분이 앱에서 숙지하고 고려해야 하는 몇 가지
-주요 변경 사항을 소개하겠습니다.
-</p>
-
-<p>
- 이전에 Android용 앱을 게시한 적이 있으신 경우, 이와 같은
- 플랫폼 변경으로 인해 앱이 영향을 받을 수 있다는 점을 유의하세요.
-</p>
-
-
-<h2 id="perf">배터리와 메모리</h2>
-
-<p>
-Android N에는 기기의 배터리 수명을 연장하고 RAM 사용량을 감소시키기 위한
-시스템 동작 변경 사항이 포함됩니다. 이러한 변경 사항은, 앱이 특정한 암시적 인텐트를 통해
-다른 앱과 상호 작용하는 방식과 함께, 시스템 리소스에 대한
-앱의 액세스에 영향을 미칠 수 있습니다.
-</p>
-
-<h3 id="doze">잠자기 모드</h3>
-
-<p>
- Android 6.0(API 레벨 23)에 도입된 잠자기 모드는 사용자가 기기의
-플러그를 뽑고 정지 상태에서 화면이 꺼져 있을 때 CPU 및
-네트워크 액티비티를 지연시켜서 배터리 수명을 개선해 줍니다. Android N에서는
-기기의 플러그를 뽑고 화면이 꺼져 있는 동안
-CPU 및 네트워크 제한의 하위 세트를 적용하여 잠자기 모드를 더욱
-향상시켜 주지만, 반드시 정지 상태일 필요는 없습니다(예: 핸드셋을 사용자의 주머니에 넣고 다니는 경우).
-</p>
-
-
-<img src="{@docRoot}preview/images/doze-diagram-1.png" alt="" height="251px" id="figure1" />
-<p class="img-caption">
- <strong>그림 1.</strong> 잠자기 모드에서 배터리 수명을 개선하기 위해 첫 번째 레벨의 시스템 액티비티 제한을
-적용하는 방법에 대한 그림.
-</p>
-
-<p>
- 기기가 배터리 전원에 연결되고 일정 시간 동안 화면이 꺼져 있는 경우
-기기가 잠자기 모드로 전환되고 첫 번째 하위 세트의 제한을 적용합니다. 기기는 앱
-네트워크 액세스를 차단하고, 작업과 동기화를 지연시킵니다. 기기가 잠자기 모드로
-전환된 후 일정 시간 동안 정지 상태에 있으면, 시스템은 잠자기 모드의 나머지 제한 사항을 {@link android.os.PowerManager.WakeLock},
-{@link android.app.AlarmManager} 알람, GPS 및 Wi-Fi 스캔에
-적용합니다. 일부 잠자기 모드 제한이
-적용되든 모든 잠자기 모드 제한이 적용되든 상관없이,
-시스템은 잠시 동안의 유지 관리 기간 중에 기기를 깨우며, 이 기간 중에는
-애플리케이션의 네트워크 액세스가 허용되고 지연된 작업/동기화가 실행됩니다.
-</p>
-
-
-<img src="{@docRoot}preview/images/doze-diagram-2.png" alt="" id="figure2" />
-<p class="img-caption">
- <strong>그림 2.</strong> 기기가 일정 시간 동안 정지 상태에 있은 후에
-잠자기 모드에서 두 번째 레벨의 시스템 액티비티 제한을 적용하는 방법에 대한 그림.
-</p>
-
-<p>
- 화면을 활성화하거나 기기의 플러그를 꽂으면 잠자기 모드가
-종료되고 이러한 처리 제한이 제거됩니다. <a href="{@docRoot}training/monitoring-device-state/doze-standby.html">잠자기 및 앱 대기
-모드 최적화</a>에서 설명한 대로, Android 6.0(API 레벨 23)에 도입된
-이전 버전의 잠자기 모드에 맞춰 앱을 조정할 경우에는 이러한 추가적인 동작이
-권장 사항 및 모범
-사례에 영향을 미치지 않습니다. 하지만
-여전히 해당 권장 사항을 따라야 합니다. 예를 들어, GCM(Google Cloud Messaging)을 사용하여 메시지를
-송수신하고 추가적인 잠자기 모드 동작을 수용하기 위한 업데이트 계획을
-시작해야 합니다.
-</p>
-
-
-<h3 id="bg-opt">Project Svelte: 백그라운드 최적화</h3>
-
-<p>
- Android N에서는 메모리 사용량 및 전원 소비량을 최적화하기 위해
- 세 가지 암시적 브로드캐스트를 제거합니다. 이렇게 변경해야 하는
-이유는, 암시적 브로드캐스트는 백그라운드에서 브로드캐스트를
-수신하도록 등록된 앱을 자주 시작하기 때문입니다. 이들 브로드캐스트를 제거하면 기기 성능과 사용자 환경이
-상당히 향상될 수 있습니다.
-</p>
-
-<p>
- 모바일 기기의 경우 연결 변경이 자주 나타납니다(예: Wi-Fi와
- 모바일 데이터 간의 이동 시). 현재는
-암시적 {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION} 브로드캐스트의 수신기를
-매니페스트에 등록하여 앱이 이러한 연결 변경을 모니터링할 수 있습니다. 많은 앱들이 이 브로드캐스트를 수신하도록
- 등록하기 때문에, 단일 네트워크 스위치가 모든 앱을 깨우고 이들 앱이 해당 브로드캐스트를
- 동시에 처리하도록 할 수 있습니다.
-</p>
-
-<p>
- 마찬가지로, 이전 버전의 Android에서는 앱이 다른 앱(예: 카메라)에서 암시적 {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} 및 {@link
- android.hardware.Camera#ACTION_NEW_VIDEO} 브로드캐스트를
-수신하도록 등록할 수 있었습니다. 사용자가 카메라 앱으로 사진을 찍으면, 이들 앱이 깨어나서 해당 브로드캐스트를
- 처리합니다.
-</p>
-
-<p>
- 이런 문제를 완화하기 위해, Android N은 다음과 같은 최적화를
- 적용합니다.
-</p>
-
-<ul>
- <li>Android N을 대상으로 하는 앱은 해당 이벤트의 알림을 요청하는 매니페스트 항목이 있더라도 {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION} 브로드캐스트를
-수신하지 않습니다. 실행 중인
-앱은 {@link android.content.BroadcastReceiver}로 알림을 요청하면
-여전히 기본 스레드에서 {@code CONNECTIVITY_CHANGE}를 수신할 수 있습니다.
- </li>
-
- <li>앱은 {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} 또는 {@link
- android.hardware.Camera#ACTION_NEW_VIDEO} 브로드캐스트를 송수신할 수 없습니다. 이 최적화는 Android N을 대상으로
- 하는 앱뿐 아니라 모든 앱에 영향을 미칩니다.
- </li>
-</ul>
-
-<p>앱이 이들 인텐트 중 하나라도 사용하는 경우에는,
- Android N 기기를 올바로 대상으로 삼을 수 있도록 이들 인텐트에 대한 종속성을 최대한 빨리 제거해야 합니다.
- Android 프레임워크는 이러한 암시적 브로드캐스트의
- 필요성을 줄이기 위한 여러 가지 해결책을 제공합니다. 예를 들어, {@link
- android.app.job.JobScheduler} API는 지정된 조건(예:
-고정 요금제 네트워크에 연결)이 충족될 경우 네트워크 운영을 예약할 수 있는
-강력한 메커니즘을 제공합니다. 심지어 {@link
- android.app.job.JobScheduler}를 사용하여 콘텐츠 공급자의 변경 사항에 대응할 수도 있습니다.
-</p>
-
-<p>
- N에서 백그라운드 최적화와 앱을 조정하는 방법에 대한 자세한 내용은
- <a href="{@docRoot}preview/features/background-optimization.html">백그라운드 최적화</a>를
- 참조하세요.
-</p>
-
-<h2 id="perm">권한 변경</h2>
-
-<p>
- Android N에는 앱에 영향을 미칠 수도 있는 권한 변경이 포함되어 있습니다.
-</p>
-
-<h3 id="permfilesys">파일 시스템 권한 변경</h3>
-
-<p>
- 개인 파일의 보안을 강화하기 위해, Android N 이상을 대상으로 하는 앱의 개인
- 디렉터리는 액세스가 제한됩니다(<code>0700</code>).
- 이 설정은 크기 또는
-존재 여부와 같은 개인 파일의 메타데이터 유출을 막아줍니다. 이러한 권한 변경은 여러 가지 부작용이 있습니다.
-</p>
-
-<ul>
- <li>
- 소유자가 개인 파일의 파일 권한을
-더 이상 완화해서는 안 되며,
-{@link android.content.Context#MODE_WORLD_READABLE} 및/또는
-{@link android.content.Context#MODE_WORLD_WRITEABLE}을 사용하여 권한을 완화하려고 시도하면
-{@link java.lang.SecurityException}이 트리거됩니다.
- <p class="note">
- <strong>참고:</strong> 아직까지는 이 제한이 완전히 적용되지 않습니다.
- 앱이 여전히 기본
-API 또는 {@link java.io.File File} API를 사용하여 개인 디렉터리에 대한 권한을 수정할 수도 있습니다. 하지만
-개인 디렉터리에 대한 권한은 부득이한 경우가 아니라면 완화하지 않는 것이 좋습니다.
- </p>
- </li>
- <li>
- 패키지 도메인 외부에서 <code>file://</code> URI를 전달하면 수신기가 액세스 불가능한 경로로
- 남아 있을 수 있습니다. 따라서
-<code>file://</code> URI를 전달하려고 시도하면
-<code>FileUriExposedException</code>이 트리거됩니다. 개인 파일의 내용을 공유하기 위해
-권장되는 방법은 {@link
- android.support.v4.content.FileProvider}를 사용하는 것입니다.
- </li>
- <li>
- {@link android.app.DownloadManager}는 비공개로
-저장된 파일을 더 이상 파일 이름별로 공유할 수 없습니다. 레거시 애플리케이션은 {@link
- android.app.DownloadManager#COLUMN_LOCAL_FILENAME}에 액세스할 때
-액세스가 불가능한 경로가 될 수 있습니다. Android N 이상을
-대상으로 하는 앱은 {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}에 액세스할 때 {@link java.lang.SecurityException}을
-트리거합니다.
-
-
-{@link
- android.app.DownloadManager.Request#setDestinationInExternalFilesDir
- DownloadManager.Request.setDestinationInExternalFilesDir()} 또는
- {@link
- android.app.DownloadManager.Request#setDestinationInExternalPublicDir
- DownloadManager.Request.setDestinationInExternalPublicDir()}
-을 사용하여 다운로드
-위치를 공용 위치로 설정하는 레거시 애플리케이션은
-{@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}에 있는 경로에 여전히 액세스할 수 있지만, 이
- 메서드는 부득이한 경우가 아니라면 사용하지 않는 것이 좋습니다. {@link android.app.DownloadManager}에 의해 노출되는 파일에
-액세스하는 좋은 방법은
-{@link android.content.ContentResolver#openFileDescriptor
- ContentResolver.openFileDescriptor()}를 사용하는 것입니다.
- </li>
-</ul>
-
-<h2 id="sharing-files">앱 사이의 파일 공유</h2>
-
-<p>
-Android N을 대상으로 하는 앱의 경우, Android 프레임워크는 앱 외부에서 {@code file://} URI의 노출을
-금지하는 {@link android.os.StrictMode} API 정책을
-적용합니다. 파일 URI를 포함하는 인텐트가 앱을 떠나면
-{@code FileUriExposedException} 예외가 생기면서 앱에 오류가 발생합니다.
-</p>
-
-<p>
-애플리케이션 간에 파일을 공유하려면 {@code content://} URI를
-보내고 이 URI에 대해 임시 액세스 권한을 부여해야 합니다. 이 권한을 가장 쉽게 부여하는 방법은
-{@link android.support.v4.content.FileProvider} 클래스를 사용하는 방법입니다. 권한과 파일 공유에
-대한 자세한
-내용은 <a href="{@docRoot}training/secure-file-sharing/index.html">파일 공유</a>를 참조하세요.
-</p>
-
-<h2 id="accessibility">접근성 향상</h2>
-
-<p>
- Android N에는 시력이 나쁘거나 손상된 사용자를 위해 플랫폼의
- 사용성을 개선하기 위한 변경 사항이 포함되어 있습니다. 이러한 변경 사항에서는 일반적으로
- 앱의 코드를 변경할 필요가 없지만, 사용자 환경에
- 미치는 잠재적인 영향을 평가하기 위해 이들 기능을 검토하고
- 앱으로 테스트해야 합니다.
-</p>
-
-
-<h3 id="screen-zoom">화면 확대/축소</h3>
-
-<p>
- Android N에서는 사용자가 <strong>Display size</strong>를 설정할 수
-있으며, 이 설정에서 화면의 모든 요소를 확대하거나 축소할 수 있으므로, 시력이
-나쁜 사용자의 기기 접근성이 향상됩니다. 최소 화면 너비인 <a href="http://developer.android.com/guide/topics/resources/providing-resources.html">sw320dp</a>를 초과하는 화면은 사용자가 확대/축소할
- 수 없으며, 이 너비는 일반적인 중간 크기 전화기인 Nexus 4의
- 너비입니다.
-</p>
-
-<div class="cols">
-
-<div class="col-6">
- <img src="{@docRoot}preview/images/screen-zoom-1.png" alt="" height="XXX" id="figure1" />
-</div>
-<div class="col-6">
- <img src="{@docRoot}preview/images/screen-zoom-2.png" alt="" height="XXX" id="figure1" />
-</div>
-
-</div> <!-- end cols -->
-<p class="img-caption">
- <strong>그림 3.</strong> 오른쪽 화면은 Android N 시스템 이미지가
-실행 중인 기기의 Display size를 늘릴 때의 효과를 보여줍니다.
-</p>
-
-
-<p>
- 기기 밀도가 변경되면 시스템은 다음과 같은 방식으로 실행 중인
- 앱에게 알립니다.
-</p>
-
-<ul>
- <li>앱이 API 레벨 23 이하를 대상으로 하는 경우 시스템에서는
-모든 백그라운드 프로세스를 자동으로 종료합니다. 즉, 사용자가 이들
- 앱으로부터 전환하여 <em>Settings</em> 화면을
- 열고 <strong>Display size</strong> 설정을 변경하면, 시스템은 저용량 메모리
- 상황에서와 동일한 방식으로 앱을 종료합니다. 앱에 포그라운드 프로세스가
- 있는 경우, <a href="{@docRoot}guide/topics/resources/runtime-changes.html">런타임 변경 처리</a>에 설명된 대로, 시스템은
- 마치 기기의 방향이 변경된
- 것처럼 구성 변경을 해당 프로세스에 알립니다.
- </li>
-
- <li>앱이 Android N을 대상으로 하는 경우,
-<a href="{@docRoot}guide/topics/resources/runtime-changes.html">런타임 변경 처리</a>에 설명된
-대로, 구성 변경을 모든 프로세스(포그라운드 및 백그라운드)에
-알립니다.
- </li>
-</ul>
-
-<p>
- 앱이 Android 모범 사례를 따르기만 한다면, 대부분의 앱은 이 기능을
- 지원하기 위해 어떠한 변경도 수행할 필요가 없습니다. 확인할 사항은 구체적으로 다음과 같습니다.
-</p>
-
-<ul>
- <li>화면 너비가 <code><a href=
- "{@docRoot}guide/topics/resources/providing-resources.html">sw320dp</a></code>인 기기에서 앱을 테스트하고 적절하게 작동하는지
- 확인하세요.
- </li>
-
- <li>기기 구성이 변경되는 경우, 밀도에 종속된 모든 캐시된
-정보(예: 캐시된 비트맵 또는 네트워크에서 로드된 리소스)를
-업데이트하세요. 앱이 일시 정지 상태에서 다시 시작하는 경우 구성
- 변경을 확인하세요.
- <p class="note">
- <strong>참고:</strong> 구성에 종속된 데이터를 캐시하는 경우,
- 해당 데이터에 적절한 화면 크기 또는 픽셀 밀도와 같은 관련 메타데이터를
- 포함시키는 것이 좋습니다. 이 메타데이터를 저장해 놓으면,
- 구성이 변경된 후에 캐시된 데이터를 새로 고칠지 여부를
- 결정할 수 있습니다.
- </p>
- </li>
-
- <li>픽셀 단위는 화면 밀도에 따라
- 변하지 않으므로, 이 단위로 치수를 지정하지 마세요. 그 대신, <a href="{@docRoot}guide/practices/screens_support.html">밀도에 독립적인 픽셀</a>(<code>dp</code>) 단위로
- 치수를 지정하세요.
- </li>
-</ul>
-
-<h3 id="vision-settings">설정 마법사의 Vision Settings</h3>
-
-<p>
- Android N에는 Welcome 화면에 Vision Settings가 포함되어
-있으며, 여기서 사용자는
- <strong>Magnification gesture</strong>, <strong>Font size</strong>,
-<strong>Display size</strong> 및 <strong>TalkBack</strong>의 접근성 설정을 새 기기에 구성할 수 있습니다. 이러한
-변경은 다른 화면 설정에 관련된 버그의 가시성을 증대시킵니다. 이 기능의 영향을 평가하려면,
- 이들 설정을 활성화하여 앱을
- 테스트해야 합니다. 이 설정은 <strong>Settings >
- Accessibility</strong> 아래에 있습니다.
-</p>
-
-<h2 id="ndk">플랫폼 라이브러리에 연결되는 NDK 앱</h2>
-
-<p>
- 비공개 API가 로드되는 것을 막기 위해 Android N에는 네임스페이스 변경이 포함되어 있습니다.
- NDK를 사용하는 경우에는 Android 플랫폼에서
- 공개 API를 사용해야만 합니다. Android의 다음 번 공식 릴리스에서 비공개 API를 사용하면 앱 작동이 중단될 수
- 있습니다.
-</p>
-
-<p>
- 비공개 API의 사용을 여러분에게 경고하기 위해, Android N 기기에서 실행
- 중인 앱은 어떤 앱이 비공개 API를 호출할 때 logcat 출력에 오류를 생성합니다.
- 또한, 이런 상황이 잘 인식될 수 있도록
- 이 오류가 기기 화면에도 메시지로 표시됩니다. 여러분이 앱 코드를 검토하여
- 비공개 플랫폼 API의 사용을 제거해야 하며, 프리뷰 기기 또는
- 에뮬레이터를 사용하여 앱을 철저히 테스트해야 합니다.
-</p>
-
-<p>
- 앱이 플랫폼 라이브러리에 종속된 경우, 개인 API를 이와 동등한
- 공개 API로 바꾸기 위한 일반적인 수정 사항을 NDK 문서에서 참조하세요.
- 또한, 자신도 모르는 사이에 플랫폼 라이브러리에
- 연결되어 있을 수가 있으며, 특히 여러분의 앱이 사용하는 라이브러리가 플랫폼의
- 일부(예: <code>libpng</code>)이지만 NDK의 일부가 아닌 경우에는 더 그렇습니다. 이 경우에는 연결에
-필요한 모든 .so 파일이 APK에 포함되어 있는지 확인하세요.
-</p>
-
-<p class="caution">
- <strong>주의:</strong> 일부 타사 라이브러리가 비공개 API에
- 연결될 수도 있습니다. 앱이 이들 라이브러리를 사용하는 경우, Android의
- 다음 번 공식 릴리스에서 실행할 때 앱 작동이 중단될 수 있습니다.
-</p>
-
-<p>
- 앱은 NDK에 포함되지 않은 고유 라이브러리를 사용하거나
- 이에 종속되어서는 안 됩니다. 왜냐하면 이 라이브러리는 특정
- Android 릴리스에서 다른 릴리스로 변경되거나 제거될 수 있기 때문입니다. OpenSSL에서 BoringSSL로의 전환은 이러한 변경의 한 예입니다.
- 또한, NDK에 포함되지 않은
-플랫폼 라이브러리에는 호환성 요구 사항이 없기 때문에, 다른 장치에서는
-호환성 레벨이 다를 수도 있습니다. 구형 기기에 있는 비 NDK 라이브러리에 액세스해야 하는 경우
-Android API 레벨에 따라 로드를 수행하세요.
-</p>
-
-<p>
- 이러한 유형의 문제를 진단하는 데 도움을 주기 위해, 여기서는
- Android N으로 앱을 빌드할 때 발생할 수 있는 Java 및 NDK 오류의 몇 가지 예를 보여줍니다.
-</p>
-
-<p>Java 오류의 예:</p>
-<pre class="no-pretty-print">
-java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so"
- is not accessible for the namespace "classloader-namespace"
-</pre>
-
-<p>NDK 오류의 예:</p>
-<pre class="no-pretty-print">
-dlopen failed: cannot locate symbol "__system_property_get" referenced by ...
-</pre>
-
-
-<p>
- 다음은 이러한 유형의 오류가 발생한 앱의 몇 가지 일반적인 수정사항입니다.
-</p>
-
-<ul>
- <li>libandroid_runtime.so에서 getJavaVM 및 getJNIEnv 사용은 표준
- JNI 함수로 교체될 수 있습니다.
-<pre class="no-pretty-print">
-AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h>
-AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or
-JavaVM::AttachCurrentThread from <jni.h>.
-</pre>
- </li>
-
- <li>{@code libcutils.so}에서 {@code property_get} 기호 사용은 공개
- {@code alternative __system_property_get}으로 교체될 수 있습니다.
- 이렇게 하려면, 다음의 include와 함께 {@code __system_property_get}을 사용하세요.
-<pre>
-#include <sys/system_properties.h>
-</pre>
- </li>
-
- <li>{@code libcrypto.so}에서 {@code SSL_ctrl} 기호 사용은 앱
-로컬 버전으로 교체되어야 합니다. 예를 들어, {@code .so} 파일에서
- {@code libcyrpto.a}를 정적으로 링크하거나 BoringSSL 또는 OpenSSL에서
- {@code libcrypto.so}를 동적으로 앱에 포함시켜야 합니다.
- </li>
-</ul>
-
-<h2 id="afw">Android for Work</h2>
-<p>
- Android N에는 Android for Work를 대상으로 하는 앱에 대한 변경 사항이
-포함되어 있습니다. 인증서 설치, 비밀번호 재설정,
-보조 사용자 관리 및 기기 식별자 액세스에 대한 변경 사항이 이에 포함됩니다. Android for Work 환경용 앱을 빌드하는 경우에는 이러한
- 변경 사항을 검토하고 그에 따라
-앱을 수정해야 합니다.
-</p>
-
-<ul>
- <li>DPC가 인증서를 설정할 수 있으려면, 위임된 인증서 설치 관리자를 여러분이 먼저
- 설치해야 합니다. N SDK를 대상으로 하는 프로필 소유자
- 앱 및 기기 소유자 앱의 경우, 기기 정책 컨트롤러(DPC)가 <code>DevicePolicyManager.setCertInstallerPackage()</code>를 호출하기
- 전에, 위임된 인증서 설치 관리자를 여러분이 먼저
-설치해야 합니다. 아직 설치 관리자가
-설치되지 않은 경우 시스템에서 <code>IllegalArgumentException</code>이
-발생합니다.
- </li>
-
- <li>이제 기기 관리자의 비밀번호 재설정 제한이 프로필 소유자에게도
- 적용됩니다. 기기 관리자는 이미 설정된 암호를 변경하거나
- 지우기 위해 {@code DevicePolicyManager.resetPassword()}를 더 이상 사용할
- 수 없습니다. 기기 관리자는
- 기기에 비밀번호, PIN 또는 패턴이 없는 경우에만 비밀번호를 설정할 수 있습니다.
- </li>
-
- <li>제한이 설정되어 있더라도 기기 소유자 및 프로필 소유자는
- 계정을 관리할 수 있습니다. <code>DISALLOW_MODIFY_ACCOUNTS</code> 사용자
- 제한이 있더라도 기기 소유자 및 프로필 소유자는 계정 관리 API를 호출할 수 있습니다.
- </li>
-
- <li>기기 소유자는 보조 사용자를 보다 쉽게 관리할 수 있습니다. 기기가
-기기 소유자 모드에서 실행 중인 경우 <code>DISALLOW_ADD_USER</code> 제한이
-자동으로 설정됩니다. 이렇게 하면 사용자는 관리되지 않는 보조 사용자를 생성할 수
-없습니다. 또한, <code>CreateUser()</code> 및
- <code>createAndInitializeUser()</code> 메서드가 사용 중단되었으며, 새로운
-<code>DevicePolicyManager.createAndManageUser()</code> 메서드로 대체되었습니다.
- </li>
-
- <li>기기 소유자는 기기 식별자에 액세스할 수 있습니다. 기기
-소유자는 <code>DevicePolicyManagewr.getWifiMacAddress()</code>를 사용하여 기기의
- Wi-Fi MAC 주소에 액세스할 수 있습니다. 기기에서
-Wi-Fi가 활성화된 적이 없는 경우 이 메서드는 {@code null} 값을 반환합니다.
- </li>
-
- <li>Work Mode 설정은 업무용 앱에 대한 액세스를 제어합니다. 작업 모드가 해제되면
-시스템 런처에서는 업무용 앱을 회색으로 표시하여 해당 앱이 사용될 수 없음을 나타냅니다. 작업 모드를
- 다시 활성화하면 정상적인 동작이 복원됩니다.
-</ul>
-
-<p>
- Android N에서 Android for Work의 변경 사항에 대한 자세한 내용은
-<a href="{@docRoot}preview/features/afw.html">Android for Work 업데이트</a>를 참조하세요.
-</p>
-
-<h2 id="annotations">주석 보존</h2>
-
-<p>
-Android N에서는 주석의 표시 여부가 무시되던 버그가 수정되었습니다. 이 문제로 인해 런타임이 액세스할 수 없어야 하는 주석에 액세스할 수 있었습니다.
-
- 이러한 주석으로는 다음이 포함됩니다.
-</p>
-
-<ul>
- <li>{@code VISIBILITY_BUILD}: 빌드 시에만 표시되어야 합니다.</li>
- <li>{@code VISIBILITY_SYSTEM}: 런타임에
-기본 시스템에만 표시되어야 합니다.</li>
-</ul>
-
-<p>
-앱이 이 동작에 의존했다면, 런타임에 사용할 수 있어야 하는
-주석에 보존 정책을 추가하세요. {@code @Retention(RetentionPolicy.RUNTIME)}을 사용하여 추가하면 됩니다.
-</p>
-
-<h2 id="other">기타 중요한 사항</h2>
-
-<ul>
-<li>앱이 Android N에서 실행 중일 때 API 레벨이 낮고 사용자가 표시
-크기를 변경하는 경우, 해당 앱 프로세스가 종료됩니다. 앱은 이
-시나리오를 매끄럽게 처리할 수 있어야 합니다. 그렇지 않으면 사용자가 Recents에서
-앱을 복원할 때 앱 작동이 중단됩니다.
-
-<p>
-이러한 동작이 발생하지 않도록 앱을 테스트해야 합니다.
-DDMS를 통해 수동으로 앱을 종료할 때
-동일한 작동 중단을 유발시킴으로써 테스트를 수행할
-수 있습니다.
-</p>
-
-<p>
-N 이상을 대상으로 하는 앱은 밀도 변경 시에 자동으로 종료되지 않지만,
-구성 변경에는 제대로 응답하지 못할 수도 있습니다.
-</p>
-</li>
-
-<li>
-Android N에서 앱은 구성 변경을 매끄럽게 처리할 수 있어야 하며,
-이후에 시작할 때도 작동이 중단되어서는 안 됩니다. 글꼴
-크기(<strong>Setting</strong> >
-<strong>Display</strong> > <strong>Font size</strong>)를 변경하여 앱 동작을 검사한 다음, Recents에서
-앱을 복원할 수 있습니다.
-</li>
-
-<li>
-이전 버전의 Android에서는 버그 때문에, 시스템이 주 스레드에서
-TCP 소켓에 대한 쓰기를 엄격 모드 위반으로서 플래그하지 못했습니다. Android N에서는 이 버그가 수정되었습니다.
-이 동작을 보이는 앱에서는 이제 {@code android.os.NetworkOnMainThreadException}이 발생합니다.
-일반적으로, 주 스레드에서 네트워크 작업을 수행하면 일반적으로
-테일 지연 시간이 길어져 ANR 및 쟁크(jank)를 유발하므로, 이런 작업은 수행하지 않는 것이 좋습니다.
-</li>
-
-<li>
-{@code Debug.startMethodTracing()} 계열에 속하는 메서드는,
-SD 카드의 최상위 레벨에 저장하는 것이 아니라, 이제 공유 저장소의
-패키지별 디렉터리에 출력을 기본적으로
-저장합니다. 즉, 앱은 이들 API를 사용하기 위해 {@code WRITE_EXTERNAL_STORAGE} 권한을 요청할 필요가 더 이상 없습니다.
-</li>
-
-<li>
-상당수 플랫폼 API는 이제 대용량
-페이로드가 {@link android.os.Binder} 트랜잭션을 통해 전송되는 것을 확인하기 시작했으며, 시스템에서는
-이제 {@code TransactionTooLargeExceptions}를
-자동으로 로깅하거나 억제하는 대신 {@code RuntimeExceptions}로 다시 발생시킵니다. 한 가지
-공통적인 예는
-{@link android.app.Activity#onSaveInstanceState Activity.onSaveInstanceState()}에
-너무 많은 데이터를 저장하는 바람에, 앱이 Android N을 대상으로 할 때 {@code ActivityThread.StopInfo}가
-{@code RuntimeException}을 발생시키는 경우입니다.
-</li>
-
-<li>
-앱이 {@link java.lang.Runnable} 작업을 {@link android.view.View}에 게시하고
-{@link android.view.View}가
-창에 연결되지 않은 경우, 시스템에서는
-{@link android.view.View}가 있는 {@link java.lang.Runnable} 작업을 큐에 넣으며,
-{@link java.lang.Runnable} 작업은
-{@link android.view.View}가 창에 연결될 때까지
-실행되지 않습니다. 이 동작은 다음과 같은 버그를 수정합니다.
-<ul>
- <li>의도한 창의 UI 스레드가 아닌 다른 스레드에서 {@link android.view.View}에 앱이 게시된 경우,
-결과적으로 {@link java.lang.Runnable}이 잘못된 스레드에서 실행될 수 있습니다.
- </li>
- <li>{@link java.lang.Runnable} 작업이 루퍼 스레드가 아닌 다른 스레드에서
-게시되었다면 해당 앱이 {@link java.lang.Runnable} 작업을 노출시킬 수도 있습니다.</li>
-</ul>
-</li>
-
-<li>
-{@link android.Manifest.permission#DELETE_PACKAGES DELETE_PACKAGES}
-권한이
-있는 Android N 상의 앱이 패키지를 삭제하려고 하지만, 해당 패키지를 다른 앱이 설치한 경우에는
-사용자의 확인이 필요합니다. 이 시나리오에서는 앱이
-{@link android.content.pm.PackageInstaller#uninstall PackageInstaller.uninstall()}을 호출할 때
-{@link android.content.pm.PackageInstaller#STATUS_PENDING_USER_ACTION STATUS_PENDING_USER_ACTION}을
-반환 상태로 예상해야 합니다.
-</li>
-
-</ul>
-
diff --git a/docs/html-intl/intl/ko/preview/download-ota.jd b/docs/html-intl/intl/ko/preview/download-ota.jd
deleted file mode 100644
index ee08846..0000000
--- a/docs/html-intl/intl/ko/preview/download-ota.jd
+++ /dev/null
@@ -1,332 +0,0 @@
-page.title=기기 OTA 이미지 적용
-
-@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/ URL에 위치하며 수시로 업데이트되는 Android 오픈 소스 프로젝트에서 제공됩니다.
-
-1.3 "Android 호환"은 (i) Android 호환성 웹사이트(http://source.android.com/compatibility)에서 찾을 수 있고 간혹 업데이트되는 Android 호환성 정의 문서를 준수하며; (ii) Android CTS(Compatibility Test Suite)를 성공적으로 통과한 모든 Android 구현을 의미합니다.
-
-1.4 "Google"은 미국 1600 Amphitheatre Parkway, Mountain View, CA 94043에 본사를 두고 있는 델라웨어주 법인인 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은 계약자에게 한정적이며 전 세계적으로 무료로 사용이 가능하고 양도할 수 없고 비독점적이며 2차 라이선스를 불허하는 Preview 사용 라이선스를 부여합니다. 이 라이선스 하에서 계약자는 Android 플랫폼에서 실행되는 애플리케이션을 개발하는 경우에만 Preview를 사용할 수 있습니다.
-
-3.2 이 Preview를 사용하여 다른 플랫폼용 애플리케이션을 개발하거나(Android 비호환 구현 포함) 다른 SDK를 개발할 수 없습니다. 물론 이 Preview가 이러한 목적에 사용되지 않는 경우 Android의 비호환 구현을 포함한 다른 플랫폼용 애플리케이션을 자유롭게 개발할 수 있습니다.
-
-3.3 계약자는 Preview에 존재하는 지적 재산권을 포함하여 Preview에 대한 모든 법적인 권리, 소유권 및 이익이 Google 또는 제3자에게 있음에 동의합니다. "지적 재산권"은 모든 특허법, 저작권법, 영업비밀법, 상표법 하의 모든 권리 및 기타 모든 소유권을 의미합니다. Google은 계약자에게 명시적으로 부여하지 않은 모든 권리를 보유합니다.
-
-3.4 본 라이선스 계약에 명시적으로 허용된 용도 외에는 Preview를 사용할 수 없습니다. 해당 제3자 라이선스 요건이 허용하는 범위를 제외하고 계약자는 Preview의 파생 제품이나 Preview의 일부분을 (a) 복사(백업 목적 제외), 수정, 개작, 재배포, 역컴파일, 리버스 엔지니어링, 분해하거나 이를 통해 파생물을 생성하거나 (b) 개인 컴퓨터를 제외한 모바일 단말기 또는 기타 모든 하드웨어 기기에 Preview의 일부를 로드하거나, Preview의 일부를 다른 소프트웨어와 결합하거나 Preview의 일부가 통합된 일체의 소프트웨어나 기기를 배포해서는 안 됩니다.
-
-3.5 오픈 소스 소프트웨어 라이선스에 의거한 Preview 구성요소의 사용, 재생산, 배포에는 본 라이선스 계약이 아닌, 해당 오픈 소스 소프트웨어 라이선스의 조건이 적용됩니다. 계약자는 허용된 모든 권한 하에서 그러한 오픈 소스 소프트웨어 라이선스에 관해 충실한 피허가자로서의 자세를 견지할 것이며 그러한 권한을 종료, 일시 중단 또는 침해하는 행위를 삼갈 것을 동의합니다.
-
-3.6 계약자는 Google이 제공하는 Preview의 형태 및 특성이 사전 통지 없이 변경될 수 있음에 동의하며, 이전 버전의 Preview에서 개발된 애플리케이션이 이후 버전의 Preview와 호환되지 않을 수 있음에 동의합니다. 계약자는 계약자 또는 사용자에게 사전 통지 없이 Preview(또는 Preview에 포함된 기능) 제공을 (영구적 또는 일시적으로) 중단할 수 있는 권한이 Google에게 있음에 동의합니다.
-
-3.7 본 라이선스 계약은 계약자에게 Google의 상표명, 상표, 서비스 표시, 로고, 도메인 이름, 기타 독특한 브랜드 특징에 대한 사용 권한을 부여하지 않습니다.
-
-3.8 계약자는 Preview에 부착되어 있거나 포함되어 있는 모든 소유권 고지 사항(저작권 및 상표 고지 사항 포함)을 제거, 변경 또는 불분명하게 만들지 않을 것에 동의합니다.
-
-4. 계약자의 Preview 사용
-
-4.1 Google은 본 라이선스 계약의 어떤 조항도 계약자(또는 계약자의 사용 허가자)가 Preview를 사용하여 개발한 소프트웨어 애플리케이션에 대한 권리, 소유권 또는 이익, 그리고 해당 애플리케이션에 존재하는 모든 지적 재산권을 부여하지 않는다는 점에 동의합니다.
-
-4.2 계약자는 (a) 본 라이선스 계약 그리고 (b) 모든 준거법, 규정 또는 관련 관할권 내에서 일반적으로 수용되는 관행 또는 지침(미국 또는 기타 관련 국가로/에서의 데이터 또는 소프트웨어 수출과 관련된 모든 법률 포함)에서 허용하는 용도에 한하여 Preview를 사용하고 애플리케이션을 작성하는 것에 동의합니다.
-
-4.3 계약자는 일반 대중 사용자를 대상으로 Preview를 사용하여 애플리케이션을 개발하는 경우, 해당 사용자의 프라이버시 및 법적 권리를 보호하는 것에 동의합니다. 사용자가 계약자에게 사용자 이름, 비밀번호 또는 기타 로그인 정보나 개인 정보를 제공하는 경우, 계약자는 제공된 정보가 자신의 애플리케이션에 제공된다는 사실을 사용자에게 알려야 하며, 반드시 법적으로 적절한 개인정보 보호정책 고지 및 보호를 해당 사용자에게 제공해야 합니다. 애플리케이션에서 사용자가 제공한 개인 정보나 민감한 정보를 저장하는 경우, 이를 안전하게 처리해야 합니다. 사용자들이 애플리케이션에 Google 계정 정보를 제공하는 경우, 애플리케이션은 해당 사용자의 Google 계정에 액세스하는 목적으로만, 그리고 각 사용자가 허용한 범위 내의 한정된 목적으로만 이러한 정보를 사용해야 합니다.
-
-4.4 계약자는 Google 또는 기타 모든 타사의 서버, 네트워크 또는 기타 모든 재산 또는 서비스를 허가 없이 방해, 교란, 손상 또는 액세스하는 애플리케이션의 개발 또는 배포를 포함한 하등의 행위에 Preview를 이용하지 않을 것임을 동의합니다.
-
-4.5 계약자는 자신이 Android 및/또는 Android용 애플리케이션을 통해 생성, 전송 또는 표시하는 모든 데이터, 콘텐츠 또는 리소스 그리고 그로 인한 결과(Google이 입을 수 있는 모든 피해나 손실 포함)에 대해 전적으로 책임이 있다는 것(그리고 Google은 계약자 또는 모든 제3자에 대한 책임이 없다는 것)에 동의합니다.
-
-4.6 계약자는 본 라이선스 계약, 모든 해당 제3자 계약 또는 서비스 약관, 또는 모든 준거법 또는 규정에 의거한 계약자 의무 위반, 그리고 그로 인한 결과(Google 또는 제3자가 입을 수 있는 모든 피해나 손실 포함)에 전적으로 책임이 있다는 것(그리고 Google은 계약자 또는 모든 제3자에 대한 책임이 없다는 것)에 동의합니다.
-
-4.7 이 Preview는 현재 개발 단계에 있으며, 계약자의 테스트와 피드백은 그러한 개발 과정에 중요한 부분을 차지합니다. Preview를 사용함으로써 계약자는 일부 기능의 구현은 아직 개발 중인 상태이며 Preview가 안정된 릴리스처럼 완벽하게 기능할 것이라 믿고 사용해서는 안 된다는 점을 인지하는 것으로 간주합니다. 계약자는 이 Preview를 사용한 애플리케이션을 공개적으로 배포 또는 배송하지 않기로 동의합니다. 이 Preview는 공식 Android SDK가 출시된 이후에는 더 이상 지원되지 않기 때문입니다.
-
-5. 계약자의 개발자 자격 증명
-
-5.1 계약자는 Google이 발급했거나 자신이 선택한 모든 개발자 자격 증명에 대한 기밀성을 유지할 책임이 있으며 계약자의 개발자 자격 증명 하에 개발된 모든 애플리케이션에 대한 전적인 책임이 있음에 동의합니다.
-
-6. 개인정보 보호정책 및 정보
-
-6.1 Preview를 지속적으로 혁신하고 개선하기 위해, Google은 고유 식별자, 관련 IP 주소, 소프트웨어 버전 번호, Preview에서 사용 중인 도구 및/또는 서비스와 도구의 사용법에 대한 정보를 포함하되 이에 국한되지 않고 소프트웨어에서 특정 사용량 통계 정보를 수집할 수 있습니다. 그러한 정보를 수집하기 전에 Preview는 계약자에게 이를 통지하고 동의를 구할 것입니다. 계약자가 동의하지 않을 경우 정보를 수집하지 않습니다.
-
-6.2 수집된 데이터는 모두 취합된 형태로 Preview 개선을 위해 검토되며, Google의 개인정보 보호정책에 따라 유지 관리됩니다. 이 정보는 http://www.google.com/policies/privacy/를 참조하십시오.
-
-7. 제3자 애플리케이션
-
-7.1 제3자가 개발한 애플리케이션을 실행하거나 제3자가 제공한 데이터, 콘텐츠 또는 리소스에 액세스하기 위해 Preview를 사용하는 경우, 계약자는 Google이 그러한 애플리케이션, 데이터, 콘텐츠 또는 리소스에 대한 책임이 없음에 동의합니다. 계약자는 그러한 제3자 애플리케이션을 통해 자신이 액세스한 모든 데이터, 콘텐츠 또는 리소스에 대한 책임은 그것을 만든 사람에게 있음에 동의합니다. 또한 계약자가 그러한 모든 제3자 애플리케이션, 데이터, 콘텐츠 또는 리소스를 사용하거나 액세스함으로써 비롯된 모든 피해나 손실에 대한 책임이 Google에게 없음에 동의합니다.
-
-7.2 그러한 제3자 애플리케이션을 통해 계약자에게 제공된 데이터, 콘텐츠 그리고 리소스는 그것을 제공한 제공자(또는 제공자를 대신하는 기타 개인 또는 기업)가 소유한 지적 재산권에 의해 보호될 수 있음을 유의해야 합니다. 그러한 데이터, 콘텐츠 또는 리소스(전부 또는 일부)를 수정, 임대, 리스, 대여, 판매, 배포하거나 이를 기반으로 파생물을 생성해서는 안 됩니다. 단, 관련 소유자로부터 그러한 작업을 수행해도 좋다는 허락을 받은 경우에는 예외입니다.
-
-7.3 계약자는 그러한 제3자 애플리케이션, 데이터, 콘텐츠 또는 리소스의 사용은 계약자와 관련 제3자 간에 체결하는 별도의 계약 조건의 적용을 받는다는 것을 인정합니다.
-
-8. Google API 사용
-
-8.1 Google API
-
-8.1.1 Google에서 데이터를 검색하기 위해 API를 사용하는 경우, 그러한 데이터가 Google 또는 데이터를 제공하는 당사자(또는 당사자를 대신하는 기타 개인 또는 기업)가 소유한 지적 재산권에 의해 보호될 수 있음을 인정합니다. 그러한 API를 사용하는 경우, 추가적인 서비스 약관의 적용을 받을 수 있습니다. 관련 서비스 약관에 허용되지 않은 한, 그러한 데이터(전부 또는 일부)를 변경, 임대, 리스, 대여, 판매, 배포하거나 이를 기반으로 파생물을 생성해서는 안 됩니다.
-
-8.1.2 Google에서 사용자 데이터를 검색하기 위해 API를 사용하는 경우, 계약자는 사용자로부터 명시적인 동의를 얻은 경우에 한하여, 그리고 해당 사용자가 허용한 범위 내의 한정된 목적으로만 데이터를 검색해야 합니다.
-
-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 이용에 대한 위험 부담이 전적으로 본인에게 있으며, Google이 일체의 보증 없이 Preview를 "있는 그대로" 그리고 "이용 가능한" 상태로 제공한다는 것을 분명히 이해하고 동의합니다.
-
-10.2 Preview 이용 및 이용 과정에서 다운로드하거나 얻게 되는 모든 자료를 사용하는 것은 본인의 재량에 따르며 이에 대한 위험 부담이 전적으로 본인에게 있으며, 그러한 사용으로 인해 발생하는 컴퓨터 시스템 또는 다른 기기의 손상 또는 데이터 손실에 대한 책임은 전적으로 본인에게 있습니다. 전술한 조항을 제한하지 않는 범위 내에서 계약자는 미리 보기가 안정된 릴리스가 아니며 오류, 결함 및 보안 취약성이 포함되어 있을 수 있어 그 결과로 중대한 손상을 유발할 수 있다는 점을 이해하는 것으로 간주합니다. 여기에는 계약자의 컴퓨터 시스템 또는 기타 기기의 완전하고 돌이킬 수 없는 손실도 포함됩니다.
-
-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 수출 규제. Preview는 미국의 수출법과 규정의 적용을 받습니다. 계약자는 Preview에 적용되는 모든 국내 및 국제 수출법과 규정을 준수해야 합니다. 그러한 법에는 수출 대상국, 최종 사용자 및 최종 용도에 대한 제한이 포함됩니다.
-
-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">
-
-<p>
- 이 페이지에서는 OTA 기기 이미지의 링크를 제공하며, OTA 업데이트를 기기에
-수동으로 적용하는 방법에 대해 설명합니다. 이 절차는 Android 베타 프로그램을
-통해 OTA 업데이트를 받았는데 업데이트가 설치된 후 시작되지
-않는 기기를 복구하는 데 유용할 수 있습니다.
-</p>
-
-<h2 id="install-ota">OTA 이미지 설치</h2>
-
-<p></p>
-
-<p>OTA 패키지를 기기에 설치하려면:</p>
-
-<ol>
- <li>아래 표에서 OTA 기기 이미지를 다운로드합니다.</li>
- <li>기기를 복구 모드로 재부팅합니다. Nexus 기기를 이 모드로
-전환하는 방법에 대한 자세한 내용은
-<a href="https://support.google.com/nexus/answer/4596836">Nexus 기기를
-공장 설정으로 초기화</a>를 참조하세요.
- </li>
- <li>기기에서 <strong>ADB sideload</strong>를 선택합니다.</li>
- <li>Android 개발 환경이 로드되고 Android 디버그 브리지(adb) 도구가 설치된
-컴퓨터에 기기를 연결합니다.</li>
- <li>다음 명령을 실행합니다.
- <pre>adb sideload <em><ota-package></em></pre>
- </li>
-</ol>
-
-
-
-<h2 id="ota-images">기기 OTA 이미지</h2>
-
-<table>
- <tr>
- <th scope="col">기기</th>
- <th scope="col">다운로드/체크섬</th>
- </tr>
-
- <tr id="bullhead">
- <td>Nexus 5X <br>"bullhead"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >bullhead-ota-npd90g-0a874807.zip</a><br>
- MD5: 4b83b803fac1a6eec13f66d0afc6f46e<br>
- SHA-1: a9920bcc8d475ce322cada097d085448512635e2
- </td>
- </tr>
-
- <tr id="shamu">
- <td>Nexus 6 <br>"shamu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >shamu-ota-npd90g-06f5d23d.zip</a><br>
- MD5: 513570bb3a91878c2d1a5807d2340420<br>
- SHA-1: 2d2f40636c95c132907e6ba0d10b395301e969ed
- </td>
- </tr>
-
- <tr id="angler">
- <td>Nexus 6P <br>"angler"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >angler-ota-npd90g-5baa69c2.zip</a><br>
- MD5: 096fe26c5d50606a424d2f3326c0477b<br>
- SHA-1: 468d2e7aea444505513ddc183c85690c00fab0c1
- </td>
- </tr>
-
- <tr id="volantis">
- <td>Nexus 9 <br>"volantis"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantis-ota-npd90g-c04785e1.zip</a><br>
- MD5: 6aecd3b0b3a839c5ce1ce4d12187b03e<br>
- SHA-1: 31633180635b831e59271a7d904439f278586f49
- </td>
- </tr>
-
- <tr id="volantisg">
- <td>Nexus 9G <br>"volantisg"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantisg-ota-npd90g-c56aa1b0.zip</a><br>
- MD5: 0493fa79763d67bcdde8007299e1888d<br>
- SHA-1: f709daf81968a1b27ed41fe40d42e0d106f3c494
- </td>
- </tr>
-
- <tr id="fugu">
- <td>Nexus Player <br>"fugu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >fugu-ota-npd90g-3a0643ae.zip</a><br>
- MD5: 9c38b6647fe5a4f2965196b7c409f0f7<br>
- SHA-1: 77c6fb05191f0c2ae0956bae18f1c80b2f922f05
- </td>
- </tr>
-
- <tr id="ryu">
- <td>Pixel C <br>"ryu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >ryu-ota-npd90g-ec931914.zip</a><br>
- MD5: 4c6135498ca156a9cdaf443ddfdcb2ba<br>
- SHA-1: 297cc9a204685ef5507ec087fc7edf5b34551ce6
- </td>
- </tr>
-
- <tr id="seed">
- <td>General Mobile 4G (Android One) <br>"seed"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >seed_l8150-ota-npd90g-dcb0662d.zip</a><br>
- MD5: f40ea6314a13ea6dd30d0e68098532a2<br>
- SHA-1: 11af10b621f4480ac63f4e99189d61e1686c0865
- </td>
- </tr>
-
-</table>
-
-
- </div><!-- landing -->
-
-</div><!-- relative wrapper -->
-
-
-
-<script>
- var urlRoot = "http://storage.googleapis.com/androiddevelopers/shareables/preview/ota/";
- 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/download.jd b/docs/html-intl/intl/ko/preview/download.jd
deleted file mode 100644
index 45d5bd8..0000000
--- a/docs/html-intl/intl/ko/preview/download.jd
+++ /dev/null
@@ -1,544 +0,0 @@
-page.title=기기에서 테스트
-meta.tags="preview", "nexus","system image"
-page.tags="preview", "androidn"
-page.image=images/cards/card-n-downloads_2x.png
-
-@jd:body
-
-<div style="position:relative; min-height:600px">
-
- <div class="wrap" id="tos" style="position:absolute;display:none;width:inherit;">
-
- <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/ URL에 위치하며 수시로 업데이트되는 Android 오픈 소스 프로젝트에서 제공됩니다.
-
-1.3 "Android 호환"은 (i) Android 호환성 웹사이트(http://source.android.com/compatibility)에서 찾을 수 있고 간혹 업데이트되는 Android 호환성 정의 문서를 준수하며; (ii) Android CTS(Compatibility Test Suite)를 성공적으로 통과한 모든 Android 구현을 의미합니다.
-
-1.4 "Google"은 미국 1600 Amphitheatre Parkway, Mountain View, CA 94043에 본사를 두고 있는 델라웨어주 법인인 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은 계약자에게 한정적이며 전 세계적으로 무료로 사용이 가능하고 양도할 수 없고 비독점적이며 2차 라이선스를 불허하는 Preview 사용 라이선스를 부여합니다. 이 라이선스 하에서 계약자는 Android 플랫폼에서 실행되는 애플리케이션을 개발하는 경우에만 Preview를 사용할 수 있습니다.
-
-3.2 이 Preview를 사용하여 다른 플랫폼용 애플리케이션을 개발하거나(Android 비호환 구현 포함) 다른 SDK를 개발할 수 없습니다. 물론 이 Preview가 이러한 목적에 사용되지 않는 경우 Android의 비호환 구현을 포함한 다른 플랫폼용 애플리케이션을 자유롭게 개발할 수 있습니다.
-
-3.3 계약자는 Preview에 존재하는 지적 재산권을 포함하여 Preview에 대한 모든 법적인 권리, 소유권 및 이익이 Google 또는 제3자에게 있음에 동의합니다. "지적 재산권"은 모든 특허법, 저작권법, 영업비밀법, 상표법 하의 모든 권리 및 기타 모든 소유권을 의미합니다. Google은 계약자에게 명시적으로 부여하지 않은 모든 권리를 보유합니다.
-
-3.4 본 라이선스 계약에 명시적으로 허용된 용도 외에는 Preview를 사용할 수 없습니다. 해당 제3자 라이선스 요건이 허용하는 범위를 제외하고 계약자는 Preview의 파생 제품이나 Preview의 일부분을 (a) 복사(백업 목적 제외), 수정, 개작, 재배포, 역컴파일, 리버스 엔지니어링, 분해하거나 이를 통해 파생물을 생성하거나 (b) 개인 컴퓨터를 제외한 모바일 단말기 또는 기타 모든 하드웨어 기기에 Preview의 일부를 로드하거나, Preview의 일부를 다른 소프트웨어와 결합하거나 Preview의 일부가 통합된 일체의 소프트웨어나 기기를 배포해서는 안 됩니다.
-
-3.5 오픈 소스 소프트웨어 라이선스에 의거한 Preview 구성요소의 사용, 재생산, 배포에는 본 라이선스 계약이 아닌, 해당 오픈 소스 소프트웨어 라이선스의 조건이 적용됩니다. 계약자는 허용된 모든 권한 하에서 그러한 오픈 소스 소프트웨어 라이선스에 관해 충실한 피허가자로서의 자세를 견지할 것이며 그러한 권한을 종료, 일시 중단 또는 침해하는 행위를 삼갈 것을 동의합니다.
-
-3.6 계약자는 Google이 제공하는 Preview의 형태 및 특성이 사전 통지 없이 변경될 수 있음에 동의하며, 이전 버전의 Preview에서 개발된 애플리케이션이 이후 버전의 Preview와 호환되지 않을 수 있음에 동의합니다. 계약자는 계약자 또는 사용자에게 사전 통지 없이 Preview(또는 Preview에 포함된 기능) 제공을 (영구적 또는 일시적으로) 중단할 수 있는 권한이 Google에게 있음에 동의합니다.
-
-3.7 본 라이선스 계약은 계약자에게 Google의 상표명, 상표, 서비스 표시, 로고, 도메인 이름, 기타 독특한 브랜드 특징에 대한 사용 권한을 부여하지 않습니다.
-
-3.8 계약자는 Preview에 부착되어 있거나 포함되어 있는 모든 소유권 고지 사항(저작권 및 상표 고지 사항 포함)을 제거, 변경 또는 불분명하게 만들지 않을 것에 동의합니다.
-
-4. 계약자의 Preview 사용
-
-4.1 Google은 본 라이선스 계약의 어떤 조항도 계약자(또는 계약자의 사용 허가자)가 Preview를 사용하여 개발한 소프트웨어 애플리케이션에 대한 권리, 소유권 또는 이익, 그리고 해당 애플리케이션에 존재하는 모든 지적 재산권을 부여하지 않는다는 점에 동의합니다.
-
-4.2 계약자는 (a) 본 라이선스 계약 그리고 (b) 모든 준거법, 규정 또는 관련 관할권 내에서 일반적으로 수용되는 관행 또는 지침(미국 또는 기타 관련 국가로/에서의 데이터 또는 소프트웨어 수출과 관련된 모든 법률 포함)에서 허용하는 용도에 한하여 Preview를 사용하고 애플리케이션을 작성하는 것에 동의합니다.
-
-4.3 계약자는 일반 대중 사용자를 대상으로 Preview를 사용하여 애플리케이션을 개발하는 경우, 해당 사용자의 프라이버시 및 법적 권리를 보호하는 것에 동의합니다. 사용자가 계약자에게 사용자 이름, 비밀번호 또는 기타 로그인 정보나 개인 정보를 제공하는 경우, 계약자는 제공된 정보가 자신의 애플리케이션에 제공된다는 사실을 사용자에게 알려야 하며, 반드시 법적으로 적절한 개인정보 보호정책 고지 및 보호를 해당 사용자에게 제공해야 합니다. 애플리케이션에서 사용자가 제공한 개인 정보나 민감한 정보를 저장하는 경우, 이를 안전하게 처리해야 합니다. 사용자들이 애플리케이션에 Google 계정 정보를 제공하는 경우, 애플리케이션은 해당 사용자의 Google 계정에 액세스하는 목적으로만, 그리고 각 사용자가 허용한 범위 내의 한정된 목적으로만 이러한 정보를 사용해야 합니다.
-
-4.4 계약자는 Google 또는 기타 모든 타사의 서버, 네트워크 또는 기타 모든 재산 또는 서비스를 허가 없이 방해, 교란, 손상 또는 액세스하는 애플리케이션의 개발 또는 배포를 포함한 하등의 행위에 Preview를 이용하지 않을 것임을 동의합니다.
-
-4.5 계약자는 자신이 Android 및/또는 Android용 애플리케이션을 통해 생성, 전송 또는 표시하는 모든 데이터, 콘텐츠 또는 리소스 그리고 그로 인한 결과(Google이 입을 수 있는 모든 피해나 손실 포함)에 대해 전적으로 책임이 있다는 것(그리고 Google은 계약자 또는 모든 제3자에 대한 책임이 없다는 것)에 동의합니다.
-
-4.6 계약자는 본 라이선스 계약, 모든 해당 제3자 계약 또는 서비스 약관, 또는 모든 준거법 또는 규정에 의거한 계약자 의무 위반, 그리고 그로 인한 결과(Google 또는 제3자가 입을 수 있는 모든 피해나 손실 포함)에 전적으로 책임이 있다는 것(그리고 Google은 계약자 또는 모든 제3자에 대한 책임이 없다는 것)에 동의합니다.
-
-4.7 이 Preview는 현재 개발 단계에 있으며, 계약자의 테스트와 피드백은 그러한 개발 과정에 중요한 부분을 차지합니다. Preview를 사용함으로써 계약자는 일부 기능의 구현은 아직 개발 중인 상태이며 Preview가 안정된 릴리스처럼 완벽하게 기능할 것이라 믿고 사용해서는 안 된다는 점을 인지하는 것으로 간주합니다. 계약자는 이 Preview를 사용한 애플리케이션을 공개적으로 배포 또는 배송하지 않기로 동의합니다. 이 Preview는 공식 Android SDK가 출시된 이후에는 더 이상 지원되지 않기 때문입니다.
-
-5. 계약자의 개발자 자격 증명
-
-5.1 계약자는 Google이 발급했거나 자신이 선택한 모든 개발자 자격 증명에 대한 기밀성을 유지할 책임이 있으며 계약자의 개발자 자격 증명 하에 개발된 모든 애플리케이션에 대한 전적인 책임이 있음에 동의합니다.
-
-6. 개인정보 보호정책 및 정보
-
-6.1 Preview를 지속적으로 혁신하고 개선하기 위해, Google은 고유 식별자, 관련 IP 주소, 소프트웨어 버전 번호, Preview에서 사용 중인 도구 및/또는 서비스와 도구의 사용법에 대한 정보를 포함하되 이에 국한되지 않고 소프트웨어에서 특정 사용량 통계 정보를 수집할 수 있습니다. 그러한 정보를 수집하기 전에 Preview는 계약자에게 이를 통지하고 동의를 구할 것입니다. 계약자가 동의하지 않을 경우 정보를 수집하지 않습니다.
-
-6.2 수집된 데이터는 모두 취합된 형태로 Preview 개선을 위해 검토되며, Google의 개인정보 보호정책에 따라 유지 관리됩니다. 이 정보는 http://www.google.com/policies/privacy/를 참조하십시오.
-
-7. 제3자 애플리케이션
-
-7.1 제3자가 개발한 애플리케이션을 실행하거나 제3자가 제공한 데이터, 콘텐츠 또는 리소스에 액세스하기 위해 Preview를 사용하는 경우, 계약자는 Google이 그러한 애플리케이션, 데이터, 콘텐츠 또는 리소스에 대한 책임이 없음에 동의합니다. 계약자는 그러한 제3자 애플리케이션을 통해 자신이 액세스한 모든 데이터, 콘텐츠 또는 리소스에 대한 책임은 그것을 만든 사람에게 있음에 동의합니다. 또한 계약자가 그러한 모든 제3자 애플리케이션, 데이터, 콘텐츠 또는 리소스를 사용하거나 액세스함으로써 비롯된 모든 피해나 손실에 대한 책임이 Google에게 없음에 동의합니다.
-
-7.2 그러한 제3자 애플리케이션을 통해 계약자에게 제공된 데이터, 콘텐츠 그리고 리소스는 그것을 제공한 제공자(또는 제공자를 대신하는 기타 개인 또는 기업)가 소유한 지적 재산권에 의해 보호될 수 있음을 유의해야 합니다. 그러한 데이터, 콘텐츠 또는 리소스(전부 또는 일부)를 수정, 임대, 리스, 대여, 판매, 배포하거나 이를 기반으로 파생물을 생성해서는 안 됩니다. 단, 관련 소유자로부터 그러한 작업을 수행해도 좋다는 허락을 받은 경우에는 예외입니다.
-
-7.3 계약자는 그러한 제3자 애플리케이션, 데이터, 콘텐츠 또는 리소스의 사용은 계약자와 관련 제3자 간에 체결하는 별도의 계약 조건의 적용을 받는다는 것을 인정합니다.
-
-8. Google API 사용
-
-8.1 Google API
-
-8.1.1 Google에서 데이터를 검색하기 위해 API를 사용하는 경우, 그러한 데이터가 Google 또는 데이터를 제공하는 당사자(또는 당사자를 대신하는 기타 개인 또는 기업)가 소유한 지적 재산권에 의해 보호될 수 있음을 인정합니다. 그러한 API를 사용하는 경우, 추가적인 서비스 약관의 적용을 받을 수 있습니다. 관련 서비스 약관에 허용되지 않은 한, 그러한 데이터(전부 또는 일부)를 변경, 임대, 리스, 대여, 판매, 배포하거나 이를 기반으로 파생물을 생성해서는 안 됩니다.
-
-8.1.2 Google에서 사용자 데이터를 검색하기 위해 API를 사용하는 경우, 계약자는 사용자로부터 명시적인 동의를 얻은 경우에 한하여, 그리고 해당 사용자가 허용한 범위 내의 한정된 목적으로만 데이터를 검색해야 합니다.
-
-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 이용에 대한 위험 부담이 전적으로 본인에게 있으며, Google이 일체의 보증 없이 Preview를 "있는 그대로" 그리고 "이용 가능한" 상태로 제공한다는 것을 분명히 이해하고 동의합니다.
-
-10.2 Preview 이용 및 이용 과정에서 다운로드하거나 얻게 되는 모든 자료를 사용하는 것은 본인의 재량에 따르며 이에 대한 위험 부담이 전적으로 본인에게 있으며, 그러한 사용으로 인해 발생하는 컴퓨터 시스템 또는 다른 기기의 손상 또는 데이터 손실에 대한 책임은 전적으로 본인에게 있습니다. 전술한 조항을 제한하지 않는 범위 내에서 계약자는 미리 보기가 안정된 릴리스가 아니며 오류, 결함 및 보안 취약성이 포함되어 있을 수 있어 그 결과로 중대한 손상을 유발할 수 있다는 점을 이해하는 것으로 간주합니다. 여기에는 계약자의 컴퓨터 시스템 또는 기타 기기의 완전하고 돌이킬 수 없는 손실도 포함됩니다.
-
-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 수출 규제. Preview는 미국의 수출법과 규정의 적용을 받습니다. 계약자는 Preview에 적용되는 모든 국내 및 국제 수출법과 규정을 준수해야 합니다. 그러한 법에는 수출 대상국, 최종 사용자 및 최종 용도에 대한 제한이 포함됩니다.
-
-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="#device-preview">하드웨어 기기 설정</a>
- <ol>
- <li><a href="#ota">OTA 업데이트</a></li>
- <li><a href="#flash">수동 기기 플래시</a></li>
- <li><a href="#revertDevice">제거</a></li>
- </ol>
- </li>
- <li><a href="#setupAVD">에뮬레이터 설정</a></li>
- </ol>
- </div>
-</div>
-
-<p>
- 새로운 플랫폼에서 앱을 실행하고 테스트하려면 Android N
-런타임 환경을 설정해야 합니다. 다음 두 가지 방법 중 하나를 사용할 수 있습니다.
-</p>
-
-<ul>
- <li>지원되는 하드웨어 기기에서 Android N 설치</li>
- <li>Android N이 실행되는 Android 에뮬레이터 설정</li>
-</ul>
-
-<p>
- 새로운 플랫폼에서 앱에 대한 기본적인 호환성 테스트를 수행할 환경이 필요한 경우,
-최신 APK와 하드웨어 기기 또는
-에뮬레이터만 있으면 됩니다. 기본 테스트를 위해 전체 개발 환경을
-업데이트할 필요가 없습니다.
-</p>
-
-<p>
- Android N을 대상으로 하도록 앱을 수정하거나 새로운 Android N API를 사용하고 싶다면,
-Android N을 지원하도록
-업데이트된 개발 환경을 설정해야 합니다. 자세한 내용은 <a href="{@docRoot}preview/setup-sdk.html">Android N용 개발
-설정</a>을 참조하세요.
-</p>
-
-
-<h2 id="device-preview">하드웨어 기기 설정</h2>
-
-<p>
- N Developer Preview는 전화에서 태블릿, TV에 이르기까지 앱을 테스트하는 데 사용할 수 있는
-다양한 하드웨어 기기의 시스템 업데이트를 제공합니다.
-</p>
-
-<p>
- 지원되는 기기에 액세스할 수 있다면, 다음 방법 중 하나를 사용하여 Developer Preview 마일스톤 빌드로
-업데이트할 수 있습니다.
-</p>
-
-<ul>
- <li><a href="https://g.co/androidbeta">Android 베타 프로그램</a>을 통해
-<strong>자동 OTA 시스템 업데이트에 기기를 등록합니다</strong>. 기기를 등록하면 N Developer Preview에서
-모든 마일스톤 빌드에 대해 정기적으로 OTA 업데이트를 받을 수 있습니다. 다양한 N Developer Preview 릴리스를 통해 현재
-환경을 매끄럽게 전환할 수 있으므로
-이 방법을 권장합니다.</li>
- <li><strong>Developer Preview 시스템 이미지를 다운로드하고 기기를 플래시합니다</strong>.
- 수동으로 플래시하는 기기에는 OTA 업데이트가 자동으로 제공되지 않지만,
-Android 베타 프로그램에 기기를 등록하면 OTA 업데이트를 받을 수 있습니다. </li>
-</ul>
-
-<h3 id="ota">자동 OTA 업데이트에 기기 등록</h3>
-
-<p>
- 지원되는 기기에 액세스할 수 있다면(아래 다운로드 표
-참조),
-해당 기기를 <a href="https://g.co/androidbeta">Android 베타 프로그램</a>에 등록해서 Android 프리뷰 버전에 대해 OTA 업데이트를 받을 수 있습니다. 이 업데이트는
-자동으로 다운로드되고 공식 시스템 업데이트처럼
-기기를 업데이트합니다.
-</p>
-
-<p>
- 언제든 기기의 등록을 해제할 수 있습니다. 기기는
-해당 기기에 사용 가능한 가장 최신의 Android 프로덕션 버전에 대한 OTA 업데이트를 받게 됩니다(예: Android 6.0 Marshmallow).
- 업데이트 시 기기가 완전히 초기화되므로
-기기의 사용자 데이터는 삭제됩니다. 따라서 기기 등록을 해제하기 전에 반드시 <strong>중요한
-데이터를 백업</strong>해야 합니다.
-</p>
-
-<p>
- 자세한 정보를 확인하고 기기를 등록하려면
-<a href="https://g.co/androidbeta">Android 베타 프로그램</a> 웹사이트를 참조하세요.
-</p>
-
-<p class="note"><strong>참고:</strong>
- 등록을 해제하면 기기가 완전히 초기화됩니다. 중요한 데이터를
-먼저 백업하세요.
-</p>
-
-<h3 id="flash">수동 기기 플래시</h3>
-
-<p>
- 언제든 최신 Developer Preview 시스템 이미지를 다운로드하고
-기기에 수동으로 플래시할 수 있습니다. 아래 표를 참조하여 기기 테스트용 시스템 이미지를
-다운로드하세요. 기기 수동 플래시는
-테스트 환경을 정확히 제어해야 하거나 자동 테스트 등을 위해 자주 재설치해야 하는 경우
-유용합니다.
-</p>
-
-<!-- You can flash by ota or system image --><p>
- 기기에 시스템 이미지를 설치하면 <strong>기기에서 모든 데이터가
-삭제</strong>되므로 데이터를 먼저 백업하는 것이 좋습니다.
-</p>
-
-<p>
- 기기 데이터를 백업하고 아래에서 기기에 맞는 시스템 이미지를 다운로드한 뒤,
-<a href="https://developers.google.com/android/nexus/images#instructions">developers.google.com/android</a>의
-지침에 따라 기기에 이미지를 플래시합니다.
-</p>
-
-<p>
- 수동으로 플래시한 시스템 이미지는 최신
-Developer Preview 마일스톤 빌드에 대한 <strong>OTA 업데이트를 자동으로
-수신하지는 않습니다</strong>. 각 Developer Preview 마일스톤에서 환경을 최신으로 유지하고 새 시스템 이미지를
-플래시하세요.
-</p>
-
-<p>
- 기기를 수동으로 플래시한 후 OTA 업데이트를 받으시려면
-<a href="https://g.co/androidbeta">Android
-베타 프로그램</a>에 기기를 등록하기만 하면 됩니다. 언제든 기기를 등록하고 다음 Preview
-업데이트를 무선으로 받을 수 있습니다.
-</p>
-
-<table>
- <tr>
- <th scope="col">기기</th>
- <th scope="col">다운로드/체크섬</th>
- </tr>
-
- <tr id="bullhead">
- <td>Nexus 5X <br>"bullhead"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >bullhead-npd90g-factory-7a0ca1bc.tgz</a><br>
- MD5: e7a9a3061335c1e0c8be2588f13290af<br>
- SHA-1: 7a0ca1bcfa51bbefde34243603bc79c7dec214a1
- </td>
- </tr>
-
- <tr id="shamu">
- <td>Nexus 6 <br>"shamu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >shamu-npd90g-factory-f7a4e3a9.tgz</a><br>
- MD5: 2fb572ddcfca67bb1d741be97492a9ed<br>
- SHA-1: f7a4e3a96c797827492998e855c8f9efbfc8559a
- </td>
- </tr>
-
- <tr id="angler">
- <td>Nexus 6P <br>"angler"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >angler-npd90g-factory-cd9ac81e.tgz</a><br>
- MD5: 2370c30f3ef1d0684c1de5216a5d90fe<br>
- SHA-1: cd9ac81ec7f4a646ac6054eecbf2ea4c4b89b054
- </td>
- </tr>
-
- <tr id="volantis">
- <td>Nexus 9 <br>"volantis"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantis-npd90g-factory-41b55406.tgz</a><br>
- MD5: cefa78950141da2a7c75e887717e3c8f<br>
- SHA-1: 41b554060263a7ef16e4be8422cbd6caca26e00f
- </td>
- </tr>
-
- <tr id="volantisg">
- <td>Nexus 9G <br>"volantisg"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantisg-npd90g-factory-610492be.tgz</a><br>
- MD5: 2f36dc0d0fab02ab78be500677ec239f<br>
- SHA-1: 610492bedfc4127023040ecb2c89239a78a900ad
- </td>
- </tr>
-
- <tr id="fugu">
- <td>Nexus Player <br>"fugu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >fugu-npd90g-factory-0fe95694.tgz</a><br>
- MD5: f4cb48f919e4c29c631de21416c612e2<br>
- SHA-1: 0fe95694e7bc41e4c3ac0e4438cd77102a0aa8b4
- </td>
- </tr>
-
- <tr id="ryu">
- <td>Pixel C <br>"ryu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >ryu-npd90g-factory-f4da981c.tgz</a><br>
- MD5: d9f0e40b6c20d274831e8a7d285fd887<br>
- SHA-1: f4da981c70576133321e2858e52fe2c990e68a75
- </td>
- </tr>
-
- <tr id="seed">
- <td>General Mobile 4G (Android One) <br>"seed"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >seed_l8150-npd90g-factory-48f59c99.tgz</a><br>
- MD5: 0ed565c509594072822d71c65b48ec8e<br>
- SHA-1: 48f59c99ac43d1cd2f5656a283bb9868581663a8
- </td>
- </tr>
-
-</table>
-
-<h3 id="revertDevice">기기에서 Preview 제거</h3>
-
-<p>
- 기기에서 Preview를 제거하려면
-다음 중 한 가지 방법을 사용할 수 있습니다. </p>
- <ul>
- <li><strong>공장 사양 시스템 이미지</strong>를 획득한 다음 기기에 수동으로
-플래시합니다.
- <ul>
- <li><strong>Nexus 기기와 Pixel C 기기</strong>의 경우,
-<a href="http://developers.google.com/android/nexus/images">Nexus 기기용
-공장 이미지</a> 페이지에서 다운로드하세요. </li>
- <li><strong>다른 기기</strong>의 경우, 기기 제조업체에 직접
-문의하세요. 또는, Android 베타 프로그램에서 지원되는
-기기라면
-이 프로그램에 기기를 등록한 다음 등록을 해제할 수 있습니다(아래 참조).</li>
- </ul>
- </li>
- <li><strong>Android 베타 프로그램에서 기기 등록을 해제합니다</strong>. 기기가
-<a href="https://g.co/androidbeta">Android 베타
-프로그램</a>에 등록되었다면 기기와 관계없이 프로그램에서 기기를 해제하기만 하면 됩니다.
- <p>
- 기기는 해당 기기에 사용 가능한 가장 최신의 Android 프로덕션 버전에
-대한 OTA 업데이트를 받게 됩니다(예: Android 6.0 Marshmallow).
- 업데이트 시 기기가 완전히 초기화되므로 기기의 사용자 데이터는
-삭제됩니다. 따라서 기기 등록을 해제하기 전에 반드시 <strong>중요한 데이터를
-백업</strong>해야 합니다.
- </p>
- </li>
-</ul>
-
-<p class="note"><strong>참고:</strong>
- 프로그램이 끝나기 전에 Developer Preview 시스템 이미지를 제거하는 경우,
-기기를 완전히 초기화해야 하고 기기에서 모든 사용자 데이터를
-삭제해야 합니다.
-</p>
-
-
-<h2 id="setupAVD">에뮬레이터 설정</h2>
-
-<p>Android 에뮬레이터를 사용하여 Android N Preview를 실행하려면
-Android N Preview SDK를 다운로드하고 에뮬레이터용 가상 기기를
-생성해야 합니다.</p>
-
-<p>먼저 다음과 같이 Android N Preview SDK를 다운로드합니다. <a href="{@docRoot}preview/setup-sdk.html">Android
-N용 개발 설정</a>
-시 이미 다운로드했다면 이 부분은 건너뛸 수 있습니다.
-
-<ol>
- <li>Android Studio에서 Settings 대화 상자를
-엽니다(Windows/Linux의 경우 <strong>File > Settings</strong>, Mac의 경우
-<strong>Android Studio > Preferences</strong>). 왼쪽 창에서
-<strong>Appearance & Behavior >
-System Settings > Android SDK</strong>를 선택합니다.
-
- <li><strong>SDK Platforms</strong> 탭을 클릭한 다음,
-<strong>Android N Preview</strong> 체크박스를 선택합니다.</li>
-
- <li><strong>SDK Tools</strong> 탭을 클릭한 다음,
-<strong>Android SDK Build Tools</strong>, <strong>Android SDK
-Platform-Tools</strong>, <strong>Android SDK Tools</strong> 체크박스를
-선택합니다.
- </li>
-
- <li><strong>OK</strong>를 클릭하고 설치할 패키지의
-사용권 계약에 동의합니다.
- </li>
-</ol>
-
-<p>이제 <strong>Android SDK Built-Tools 24.0 0 rc1</strong>,
-<strong>Platform-Tools 24.0.0 rc1</strong> 및 <strong>SDK Tools
-25.0.9</strong>를 다운로드했습니다. SDK 도구를 25.0.9로 업데이트하지 않으면
-Android N에서 x86_64 시스템 이미지를 실행할 수 없습니다.</p>
-
-
-<p>이제 Android N 시스템 이미지로 가상 기기를 생성합니다.</p>
-
-<ol>
- <li><strong>Tools > Android >
-AVD Manager</strong>를 선택하여 AVD Manager를 엽니다.</li>
- <li><strong>Create Virtual Device</strong>를 클릭합니다.</li>
- <li>Nexus 5X, Nexus 6P, Nexus 9, Android TV 등의 기기를 선택하고
-<strong>Next</strong>를 클릭합니다.</li>
- <li><strong>N</strong> 시스템 이미지(<strong>x86</strong>
-ABI)를 선택하고 <strong>Next</strong>를 클릭합니다.
- (현재는 x86 시스템 이미지만 Android N Preview용 Android 에뮬레이터에서
-지원됩니다.)
- <li>나머지 AVD 구성을 완료하고
-<strong>Finish</strong>를 클릭합니다.</li>
-</ol>
-
-<p>이제 Android N Preview AVD에서 Android 에뮬레이터를 시작할 수 있습니다.</p>
-
-<p>
-Android 에뮬레이터에서 최상의 경험을 얻으려면
-Android Studio 2.1 이상의 버전을 사용해야 합니다. 이러한 버전에서는 Android Studio 1.5의 에뮬레이터에 비해
-더욱 빠른 성능을 제공하는 <a href="http://tools.android.com/tech-docs/emulator">Android Emulator 2.0</a>이
-지원됩니다.</p>
-
-<p>가상 기기 생성에 대한 자세한 내용은 <a href="{@docRoot}tools/devices/index.html">가상 기기 관리</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/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/afw.jd b/docs/html-intl/intl/ko/preview/features/afw.jd
deleted file mode 100644
index 4c06451..0000000
--- a/docs/html-intl/intl/ko/preview/features/afw.jd
+++ /dev/null
@@ -1,552 +0,0 @@
-page.title=Android for Work 업데이트
-page.metaDescription=Android N의 새로운 Android for Work API와 기능.
-page.keywords="android for work", "android N", "enterprise", "QR code"
-
-@jd:body
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>이 문서의 내용</h2>
- <ol>
- <li><a href="#qr">QR 코드 프로비저닝
- </a></li>
-
- <li><a href="#sec-challenge">작업 프로필 보안 인증 질문
- </a></li>
-
- <li><a href="#suspend">앱에 대한 액세스 비활성화
- </a></li>
-
- <li><a href="#toggle-work">작업 모드 전환
- </a></li>
-
- <li><a href="#always-on-vpn">상시 접속 VPN
- </a></li>
-
- <li><a href="#contacts">연락처와 작업 프로필 통합
- </a></li>
-
- <li><a href="#remote-reboot">원격 재부팅
- </a></li>
-
- <li><a href="#disable-roaming">데이터 로밍 비활성화
- </a></li>
-
- <li><a href="#process-logging">엔터프라이즈 프로세스 로깅
- </a></li>
-
- <li><a href="#bug-reports">원격 버그 보고서
- </a></li>
-
- <li><a href="#remove-cert">클라이언트 인증서 제거
- </a></li>
-
- <li><a href="#grant-cert-on-install">설치 시 클라이언트 인증서에 대한
- 액세스 권한 부여</a></li>
-
- <li><a href="#ui-policy">시스템 UI 정책 투명성
- </a></li>
-
- <li><a href="#restrictions-mgmt">앱 제한 관리 향상
- </a></li>
-
- <li><a href="#location-off">위치 해제 스위치
- </a></li>
-
- <li><a href="#custom-provisioning">사용자 지정 프로비저닝
- </a></li>
-
- <li><a href="#multi-wifi-ca">다중 Wi-Fi CA 인증서
- </a></li>
-
- <li><a href="#custom-lock">사용자 지정 잠금 화면 메시지
- </a></li>
-
- <li><a href="#work-connectionservice">작업 프로필 연결 서비스
- </a></li>
-
- <li><a href="#lock-wp">배경 화면 잠금
- </a></li>
-
- <li><a href="#lock-user-icon">사용자 아이콘 잠금
- </a></li>
-
- <li><a href="#health-monitoring">기기 상태 모니터링
- </a></li>
-
- </ol>
-
- <h2>참고 항목</h2>
- <ul>
- <li><a href="{@docRoot}preview/setup-sdk.html#docs-dl">N Preview SDK
- 참조</a></li>
- </ul>
- </div>
-</div>
-
-<p>이 문서에서는 Android N에서 제공되는 새로운 Android for Work 기능을
-설명합니다.</p>
-
-<h2 id="qr">QR 코드 프로비저닝</h2>
-
-<p>
- 이제 Android for Work는 기업에서 업무용으로 지급하는 기기를 프로비저닝할 때 QR 코드 사용을
- 지원합니다. 이제는 설치 마법사를 통해 QR 코드를 스캔하여 기기를
- 프로비저닝할 수 있습니다.
-</p>
-
-<h2 id="sec-challenge">작업 프로필 보안 인증 질문</h2>
-
-<p>
- 프로필 소유자는 작업 프로필에서 작동하는 앱에 대한 보안 인증 질문을
- 지정하도록 사용자에게 요구할 수 있습니다. 시스템에서는 사용자가 업무용 앱을 열려고 할 때
- 보안 인증 질문을 표시합니다. 사용자가 보안 인증 질문에 올바로
- 답하면 작업 프로필의 잠금이 해제되고 필요하다면 작업 프로필의 암호가
- 해독됩니다.
-</p>
-
-<p>
- 프로필 소유자가 {@link
- android.app.admin.DevicePolicyManager#ACTION_SET_NEW_PASSWORD} 인텐트를 보내면
-, 보안 인증 질문을 설정하라는 메시지가 사용자에게 표시됩니다. 또한, 프로필 소유자는
- 사용자에게 기기 잠금을 설정하도록 하는 <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> 인텐트를
- 보낼 수 있습니다.
-</p>
-
-<p>
- 프로필 소유자는 작업 프로필 보안 인증 질문의 비밀번호 정책을 다른 기기
- 비밀번호의 정책과는 다르게 설정하도록 선택할 수 있습니다. 예를 들어, 기기 보안 질문 응답의 최소 길이는 다른 암호에 요구되는
-길이와
-다를 수 있습니다. 프로필 소유자는 {@link
- android.app.admin.DevicePolicyManager#setPasswordQuality
- setPasswordQuality()} 및 {@link
- android.app.admin.DevicePolicyManager#setPasswordMinimumLength
- setPasswordMinimumLength()}와 같은
- 일반적인 {@link android.app.admin.DevicePolicyManager}
- 메서드를 사용하여 보안 질문 정책을 설정합니다. 프로필 소유자는 새 <code>DevicePolicyManager.getParentProfileInstance()</code>
- 메서드에 의해 반환되는 {@link android.app.admin.DevicePolicyManager} 인스턴스를
- 사용하여 기기 잠금을
- 설정할 수도 있습니다. 그 밖에도, 프로필 소유자는 {@link android.app.admin.DevicePolicyManager}
- 클래스의 새로운 <code>setOrganizationColor()</code> 및
- <code>setOrganizationName()</code> 메서드를 사용하여 작업 프로필 보안 인증 질문에 대한 자격 증명 화면을
- 사용자 지정할 수 있습니다.
-</p>
-
-<p>
- 새로운 메서드와 상수에 대한 자세한 내용은
- <a href="{@docRoot}preview/setup-sdk.html#docs-dl">N Preview SDK 참조</a>의 <code>DevicePolicyManager</code> 참조 페이지를 참조하십시오.
-</p>
-
-<h2 id="suspend">앱에 대한 액세스 비활성화</h2>
-
-<p>
- 기기 소유자 및 프로필 소유자는 새 <code>DevicePolicyManager.setPackagesSuspended()</code>
- 메서드를 호출하여 패키지에 대한 액세스를 일시적으로 중단할 수
- 있습니다. 소유자는 이 메서드를 똑같이 사용하여 해당 패키지를 다시 활성화할 수 있습니다.
-</p>
-
-<p>
- 패키지가 일시 중단된 동안에는 액티비티를 시작할 수 없고, 패키지에 대한
- 알림이 억제되고, <a href="{@docRoot}guide/components/recents.html">개요 화면</a>에서 앱 항목이 숨겨집니다.
- 일시 중단된 패키지는 <a href="{@docRoot}guide/components/recents.html">개요 화면</a>에 표시되지 않고
- (toast와 snackbar를 포함한) 대화 상자를 표시할 수 없습니다. 이들 패키지는 또한 오디오를
- 재생하거나 기기를 진동시킬 수도 없습니다.
-</p>
-
-<p>
- 현재 사용할 수 없는 앱임을 표시하기 위해
-, 런처는 뚜렷이 구별되는 UI를 일시 중단된 앱에 적용해야 합니다. 예를 들어, 앱 아이콘이 회색으로 표시되도록 할 수
- 있습니다. 런처는 앱이 일시 중단된 상태인지
- 확인하기 위해 새 <code>DevicePolicyManager.getPackageSuspended()</code> 메서드를 호출할 수 있습니다.
-</p>
-
-<h2 id="toggle-work">작업 모드 전환</h2>
-
-<p>
- 듀얼 프로필 기기에서는 사용자가 작업 모드를 설정하거나 해제할 수 있습니다. 작업 모드가
- 해제된 중에는 관리된 프로필이 일시적으로 종료됩니다. 프로필
- 소유자 앱을 포함하여 작업 프로필 앱, 백그라운드 동기화 및 알림이 모두
- 비활성화됩니다. 작업 프로필이 비활성화된 중에는 사용자가
- 업무용 앱을 실행할 수 없음을 미리 알려주기 위한 영구적인 상태 아이콘이
- 표시됩니다. 시스템 런처는 업무용 앱과 위젯에 액세스할 수 없음을
- 나타냅니다.
-</p>
-
-<h2 id="always-on-vpn">상시 접속 VPN</h2>
-
-<p>
- 기기 소유자 및 프로필 소유자는 항상 지정된 VPN을 통해 업무용 앱을
- 네트워크에 연결하도록 요구할 수 있습니다. 소유자가 이 요구 사항을 설정하면
- 기기는 부팅 시 해당 VPN을 자동으로 시작합니다.
-</p>
-
-<p>
- 소유자는 새 <code>DevicePolicyManager.setAlwaysOnVpnPackage()</code> 메서드를 호출하여 VPN을 사용하도록 요구할 수
- 있습니다. 소유자가
- VPN 요구 사항을 설정했는지 확인하려면 새
- <code>DevicePolicyManager.GetAlwaysOnVpnPackage()</code> 메서드를 호출하십시오.
-</p>
-
-<p>
- 시스템에서 앱 상호 작용 없이 VPN 서비스를 직접 바인딩할 수 있으므로,
- VPN 클라이언트는 상시 접속 VPN에 대해 새로운 진입점을 처리해야 합니다. 이전과 마찬가지로,
- {@link android.net.VpnService android.net.VpnService} 작업과 일치하는 인텐트 필터를 사용하여 활성 서비스를
- 찾을 수 있습니다.
-</p>
-
-<p>
- 사용자는 <strong>Settings > More >
- VPN</strong> 화면을 사용하여 {@link
- android.net.VpnService}를 구현하는 상시 접속 VPN 클라이언트를 수동으로 설정할 수 있습니다.
-</p>
-
-<h2 id="contacts">연락처와 작업 프로필 통합</h2>
-
-<p>
- 프로필 소유자는 기본 사용자의 업무용 연락처에 대한 로컬 검색 및 디렉터리 조회를
- 허용할 수 있습니다. 예를 들어, 사용자는 개인 다이얼러 또는 연락처 애플리케이션에서
- 개인용 및 업무용 디렉터리 연락처에 모두 액세스할 수 있습니다(프로필
- 관리자가 허용한 경우).
-</p>
-
-<p>
- Contact Provider를 활용하는 개발자는, 정책에 따라 허용되는 경우
-, Enterprise Contacts API를 사용하여 기본 사용자의 작업 프로필 디렉터리 항목에 액세스할 수
- 있습니다.
-</p>
-
-<ul>
- <li><code>ContactsContract.Contacts.ENTERPRISE_CONTENT_FILTER_URI</code>
- </li>
-
- <li><code>ContactsContract.Phone.ENTERPRISE_CONTENT_FILTER_URI</code>
- </li>
-
- <li><code>ContactsContract.Email.ENTERPRISE_CONTENT_FILTER_URI</code>
- </li>
-
- <li><code>ContactsContract.Callable.ENTERPRISE_CONTENT_FILTER_URI</code>
- </li>
-
- <li><code>ContactsContract.Directory.ENTERPRISE_CONTENT_URI</code>
- </li>
-
- <li><code>ContactsContract.Directory.isEntepriseDirectoryId()</code>
- </li>
-</ul>
-
-<p>
- 프로필 소유자는 다음과 같은 새로운 메서드를 사용하여 기본 사용자의 업무용 연락처를 표시할지
-여부를 제어할 수 있습니다.
-</p>
-
-<ul>
- <li>
- <code>DevicePolicyManager.setCrossProfileContactsSearchDisabled()</code>
- </li>
-
- <li>
- <code>DevicePolicyManager.getCrossProfileContactsSearchDisabled()</code>
- </li>
-</ul>
-
-<h2 id="remote-reboot">원격 재부팅</h2>
-
-<p>
- 기기 소유자는 기기를 원격으로 재부팅할 수 있습니다. 경우에 따라, 구내의 공공 장소에 배치되어 있는
- 기기는 전원 버튼에 액세스하지 못하게 되어 있습니다. 기기를
- 재부팅해야 하는 경우 관리자가 새
- <code>DevicePolicyManager.reboot()</code> 메서드를 사용하여 재부팅할 수 있습니다.
-</p>
-
-<h2 id="disable-roaming">데이터 로밍 비활성화</h2>
-
-<p>
- 기기 소유자는 새로운 {@link
- android.os.UserManager} 사용자 제한 <code>DISALLOW_DATA_ROAMING</code>을 사용하여 데이터 로밍을 비활성화할 수 있습니다.
-</p>
-
-<h2 id="process-logging">엔터프라이즈 프로세스 로깅</h2>
-
-<p>
- 기기 소유자는 앱 실행, adb 액티비티 및 화면 잠금 해제를 비롯한 기기 액티비티를
- 원격으로 추적하여 의심스러운 액티비티를 식별할 수 있습니다. 프로세스
- 로그는 사용자 동의를 받을 필요가 없습니다. 로그를 검색하기 위해, 기기 소유자는 <code>DevicePolicyManager.setSecurityLoggingEnabled()</code>를 사용하여
- 기기 로깅을 활성화할 수 있습니다.
-</p>
-
-<p>
- API 변경 사항에는 다음이 포함됩니다.
-</p>
-
-<ul>
-
- <li>
- 새로운 클래스 <code>android.app.admin.SecurityLog</code>와 이 클래스의
- 메서드
- </li>
-
- <li>
- <code>void DevicePolicyManager.setSecurityLoggingEnabled()</code>
- </li>
-
- <li>
- <code>boolean DevicePolicyManager.isSecurityLoggingEnabled()</code>
- </li>
-
- <li>
- <code>List<SecurityEvent>
- DevicePolicyManager.retrieveSecurityLogs()</code>
- </li>
-
- <li>
- <code>List<SecurityEvent>
- DevicePolicyManager.retrievePreRebootSecurityLogs()</code>
- </li>
-
- <li>
- <code>void DeviceAdminReceiver.onSecurityLogsAvailable()</code>
- </li>
-</ul>
-
-<h2 id="bug-reports">원격 버그 보고서</h2>
-
-<p>
- 기기 소유자는 기기 상태 덤프 파일이 포함된 버그 보고서를
- 원격으로 트리거하고 검색할 수 있으며, 이를 통해 알려진 문제나 손상된 기기에 대한
- 포렌식 조사를 수행할 수 있습니다. 버그 보고서는 그 본질상 세세한 내용까지 담고 있으므로,
- 사용자 동의를 받아야 합니다.
-</p>
-
-<p>
- Android N에서는 이 기능을 지원하기 위해 다음과 같은 API를 포함합니다. 자세한
- 내용은 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">N Preview SDK
- 참조</a>를 확인하세요.
-</p>
-
-<ul>
- <li>
- <code>DevicePolicyManager.requestBugreport()</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.onBugreportFailed()</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.onBugreportShared()</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.onBugreportSharingDeclined()</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.BUGREPORT_FAILURE_FAILED_COMPLETING</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.BUGREPORT_FAILURE_FILE_NO_LONGER_AVAILABLE</code>
- </li>
-</ul>
-
-<h2 id="remove-cert">클라이언트 인증서 제거</h2>
-
-<p>
- 프로필 소유자와 기기 소유자는 이제 새 <code>DevicePolicyManager.removeKeyPair()</code>
- 메서드를 호출하여, {@link android.app.admin.DevicePolicyManager#installKeyPair
- installKeyPair()}를 통해 설치된 클라이언트 인증서를
- 제거할 수 있습니다.
-</p>
-
-<h2 id="grant-cert-on-install">설치 시 클라이언트 인증서에 대한
- 액세스 권한 부여</h2>
-
-<p>
- 프로필 소유자나 기기 소유자가 인증서 관리 권한을
- 타사 앱에 부여할 경우, 해당 앱은 소유자의 간섭을 전혀 받지 않고도 인증서에
- 액세스 권한을 부여할 수 있습니다.
-</p>
-
-<p>
- 인증서 관리를 위한 기존 API가 확장되었으며 다음을 포함합니다.
-</p>
-
-<ul>
- <li><code>DevicePolicyManager.installKeyPair()</code>
- </li>
-</ul>
-
-<h2 id="ui-policy">시스템 UI 정책 투명성</h2>
-
-<p>
- 사용자 환경에 영향을 미치는 정책이나 사용자 Settings를 제한하는 정책은
- 사용자에게 완전히 공개되며, 프로필 소유자와 기기 소유자는 해당 정책에 대한 책임을
- 회사의 IT 부서로 돌릴 수 있습니다. Settings에 일관되게 표시되는 “Action
- not allowed” 메시지 외에도, IT 관리자는
- 다음과 같은 새로운 {@link android.app.admin.DevicePolicyManager} 메서드를 사용하여 기기 설정에서 조직별 지원 메시지를
- 설정할 수 있습니다.
-</p>
-
-<ul>
- <li>
- <code>DevicePolicyManager.setShortSupportMessage()</code>
- </li>
-
- <li>
- <code>DevicePolicyManager.setLongSupportMessage()</code>
- </li>
-</ul>
-
-<h2 id="restrictions-mgmt">앱 제한 관리 향상</h2>
-
-<p>
- 기기 소유자나 프로필 소유자는 새 <code>DevicePolicyManager.setApplicationRestrictionsManagingPackage()</code>
- 메서드를 통해 다른 애플리케이션이 앱 제한을
- 관리하도록 할 수
- 있습니다. 지정된 애플리케이션은 이 권한이 부여되었는지
-여부를 확인하기 위해 <code>DevicePolicyManager.isCallerApplicationRestrictionsManagingPackage()</code>를 호출할
-수 있습니다.
-</p>
-
-<p>
- 앱 제한을 관리하도록 지정된 애플리케이션은 해당 사용자 또는 프로필 내에 있는 어떤 패키지에 대해서도 {@link
- android.app.admin.DevicePolicyManager#setApplicationRestrictions
- setApplicationRestrictions()} 및 {@link
- android.app.admin.DevicePolicyManager#getApplicationRestrictions
- getApplicationRestrictions()}를 호출할 수 있습니다.
-</p>
-
-<h2 id="location-off">위치 해제 스위치</h2>
-
-<p>
- 사용자는 개인용 앱에서 위치 정보에 계속 액세스하는 동안에도
- 업무용 앱의 위치 권한을 비활성화할 수 있습니다. 사용자는
- Location Settings에 있는 별개의 위치 액세스 스위치를 사용하여 작업 프로필에서 실행 중인
- 앱의 위치 업데이트 또는 마지막 위치 쿼리를 거부할 수 있습니다.
-</p>
-
-<p>
- 최상위 수준 위치 해제 스위치를 사용하면 기본 프로필과 관리된 프로필에
- 대해 모두 위치 액세스를 비활성화할 수 있습니다.
-</p>
-
-<h2 id="custom-provisioning">사용자 지정 프로비저닝</h2>
-
-<p>
- 애플리케이션은 기업 색상과 로고를 사용하여 프로필 소유자 및 기기 소유자 프로비저닝
- 흐름을 사용자 지정할 수 있습니다.
-</p>
-
-<dl>
- <dt>
- <code>DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR</code>
- </dt>
-
- <dd>
- 흐름 색상을 사용자 지정합니다.
- </dd>
-
- <dt>
- <code>DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI</code>
- </dt>
-
- <dd>
- 기업 로고를 사용하여 흐름을 사용자 지정합니다.
- </dd>
-</dl>
-
-<h2 id="multi-wifi-ca">다중 Wi-Fi CA 인증서</h2>
-
-<p>
- 프로필 소유자와 기기 소유자는 주어진 Wi-Fi 구성에 대해 다중 CA 인증서를 설정할 수
- 있습니다. SSID가 동일한 별개의 액세스 지점에 대해
- 별개의 CA가 기업 Wi-Fi 네트워크에 있는 경우, IT 관리자가 새 메서드 <code>setCaCertificates()</code>를 사용하여
- 모든 관련 CA를 Wi-Fi 구성에 포함시킬 수
- 있습니다.
-</p>
-
-<p>
- 추가되는 API는 다음과 같습니다.
-</p>
-
-<ul>
- <li>
- <code>WifiEnterpriseConfig.setCaCertificates()</code>
- </li>
-
- <li>
- <code>WifiEnterpriseConfig.getCaCertificates()</code>
- </li>
-</ul>
-
-<h2 id="custom-lock">사용자 지정 잠금 화면 메시지</h2>
-
-<p>
- 기기 소유자는 잠금 화면에 표시될 소유자 정보를 제공할 수 있습니다.
- 이 정보는 사용자 잠금 화면 메시지(설정되어 있는 경우)보다
- 우선합니다. 새 {@link android.app.admin.DevicePolicyManager} 메서드는 다음과 같습니다.
-</p>
-
-<ul>
- <li>
- <code>setDeviceOwnerLockScreenInfo()</code>
- </li>
-
- <li>
- <code>getDeviceOwnerLockScreenInfo()</code>
- </li>
-</ul>
-
-<h2 id="work-connectionservice">작업 프로필 연결 서비스</h2>
-
-<p>
- 프로필 소유자는 호출 백엔드(호출 계정)용으로
- 작업별 {@link android.telecom.ConnectionService}를 사용하는 업무용 다이얼러 애플리케이션을
- 지정할 수 있습니다. 업무용 다이얼러는 업무 전용 통화 기록을
- 유지 관리하고 업무용 연락처에만 의존합니다. 사용자는 전화 걸기 애플리케이션에 상관없이 일관된 통화 UI
- 환경을 사용합니다. 업무 통화 계정으로 수신되는 업무 통화는
- 개인 통화 계정으로 수신되는 개인용 통화와
- 구분됩니다.
-</p>
-
-<p>
- 다이얼러는 새 플래그
- <code>android.telecom.Call.PROPERTY_WORK_CALL</code>을 검사하여 통화가
-업무 통화인지 결정합니다. 통화가 업무 통화인 경우, 다이얼러는 작업 배지를 추가하는 등의 방법으로
- 이를 표시해야 합니다.
-</p>
-
-<h2 id="lock-wp">배경 화면 잠금</h2>
-
-<p>
- 새 사용자 제한(<code>DISALLOW_SET_WALLPAPER</code>)에 따라 사용자는
- 배경 화면을 변경할 수 없습니다. 그래도 기기 소유자나 프로필 소유자는
- 배경 화면을 변경할 수 있지만, 자신이 관리하는 사용자나 프로필의
- 배경 화면만 변경할 수 있을 뿐입니다. 예를 들어, 프로필 소유자는 상위 사용자의 배경 화면은
- 변경할 수 없지만, 기본 프로필에 있는 프로필 소유자나 기기 소유자는
- 변경할 수 있습니다. 배경 화면을 변경하고 싶은 프로필 소유자나 기기 소유자는
- 자신이 관리하는 사용자 또는 프로필에
- 배경 화면이 있는지({@link android.app.WallpaperManager#isWallpaperSupported
- isWallpaperSupported()}), 그리고 이를 변경하도록 허용되는지 여부를 확인해야 합니다(새 메서드
- <code>WallpaperManager.isWallpaperSettingAllowed()</code> 사용).
-</p>
-
-<h2 id="lock-user-icon">사용자 아이콘 잠금</h2>
-
-<p>
- 새 사용자 제한(<code>DISALLOW_SET_USER_ICON</code>)에 따라 사용자는
- 사용자 아이콘을 변경할 수 없습니다. 그래도 사용자의 기기 소유자나 프로필 소유자는
- 아이콘을 변경할 수 있습니다. 하지만, 프로필 소유자는 자신이 관리하는 프로필에 대한 사용자 아이콘만
- 변경할 수 있을 뿐입니다.
-</p>
-
-<h2 id="health-monitoring">기기 상태 모니터링</h2>
-
-<p>
- 기기 소유자나 프로필 소유자는 새
- <code>HardwarePropertiesManager</code> 인터페이스를 사용하여 CPU나 GPU의 온도, CPU 사용량 등, 기기 상태에 대한
- 정보를 검색할 수 있습니다. 새
- 모니터링 인터페이스는 원격 위치에서 지켜보는 사람이 없이 작동하는 기기를
- 모니터링하는 데 특히 유용합니다.
-</p>
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/data-saver.jd b/docs/html-intl/intl/ko/preview/features/data-saver.jd
deleted file mode 100644
index a5e4741..0000000
--- a/docs/html-intl/intl/ko/preview/features/data-saver.jd
+++ /dev/null
@@ -1,234 +0,0 @@
-page.title=Data Saver
-metaDescription=User-enabled data usage optimization.
-page.keywords="android N", "data usage", "metered network"
-page.image=images/cards/card-nyc_2x.jpg
-@jd:body
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>
- 이 문서의 내용
- </h2>
-
- <ol>
- <li>
- <a href="#status">Data Saver 기본 설정 확인</a>
- <ol>
- <li>
- <a href="#request-whitelist">허용 목록 권한 요청</a>
- </li>
- </ol>
- </li>
-
- <li>
- <a href="#monitor-changes">Data Saver 기본 설정 변경 사항
-모니터링</a>
- </li>
-
- <li>
- <a href="#testing">Android 디버그 브리지 명령을 이용한 테스트</a>
- </li>
- </ol>
- </div>
-</div>
-
-<p>
- 스마트폰의 수명 전체에 걸쳐, 모바일 데이터 요금제에 따른 비용이
- 기기 자체의 가격을 쉽게 초과할 수 있습니다. N Developer Preview에서는 사용자들이
-로밍 중이든, 결제 주기가 끝날 무렵이든, 소액 선불 데이터 팩을 사용 중이든 상관없이, 데이터 사용량을 줄이기 위해 기기 전체에서
-Data Saver를 활성화할 수 있습니다.
-</p>
-
-<p>
- 사용자가 <strong>Settings</strong>에서 Data Saver를 활성화하고
- 해당 기기가 데이터 통신 네트워크에 있는 경우, 시스템은 백그라운드 데이터 사용을
-차단하고 가능하면 포그라운드에서 데이터를 더 적게 사용하도록 앱에게 신호를 보냅니다. 사용자는
-Data Saver가 켜진 경우에도 백그라운드 데이터 통신 연결을 허용하기 위해
-특정 앱을 허용 목록에 추가할 수 있습니다.
-</p>
-
-<p>
- N Developer Preview는 {@link android.net.ConnectivityManager}
- API를 확장하여 <a href="#status">사용자의 Data Saver 기본 설정을 검색</a>하고 <a href="#monitor-changes">기본
- 설정 변경을 모니터링</a>하는 방법을
- 앱에 제공합니다. 사용자가 Data Saver를 활성화했는지 여부를 앱이 확인하고
-포그라운드 및 백그라운드 데이터 사용을 제한하기 위해
-앱이 노력하는 것은 좋은 방법입니다.
-</p>
-
-<h2 id="status">
- Data Saver 기본 설정 확인
-</h2>
-
-<p>
- N Developer Preview에서 앱이 {@link
- android.net.ConnectivityManager} API를 사용하여, 어떤 데이터 사용량 제한이
-적용되고 있는지를 확인할 수 있습니다. {@code getRestrictBackgroundStatus()}
- 메서드는 다음 값 중 하나를 반환합니다.
-</p>
-
-<dl>
- <dt>
- {@code RESTRICT_BACKGROUND_STATUS_DISABLED}
- </dt>
-
- <dd>
- Data Saver가 비활성화되었습니다.
- </dd>
-
- <dt>
- {@code RESTRICT_BACKGROUND_STATUS_ENABLED}
- </dt>
-
- <dd>
- 사용자가 이 앱에 대해 Data Saver를 활성화했습니다. 앱은 포그라운드에서 데이터 사용량을
-제한하고, 백그라운드
-데이터 사용량에 대한 제한을 적절히 처리하기 위해 노력해야 합니다.
- </dd>
-
- <dt>
- {@code RESTRICT_BACKGROUND_STATUS_WHITELISTED}
- </dt>
-
- <dd>
- 사용자가 Data Saver를 활성화했지만 앱이 허용 목록에 추가되어 있습니다. 앱은
-포그라운드 및 백그라운드 데이터 사용량을 제한하기 위해 여전히 노력해야 합니다.
- </dd>
-</dl>
-
-<p>
- Data Saver가 비활성화되어 있거나 앱이 허용 목록에 추가되어 있더라도,
-기기가 데이터 통신 네트워크에 연결될 때마다 항상
- 데이터 사용량을 제한하는 것이 좋은 방법입니다. 다음 샘플 코드에서는 {@link
- android.net.ConnectivityManager#isActiveNetworkMetered
- ConnectivityManager.isActiveNetworkMetered()} 및 {@code
- ConnectivityManager.getRestrictBackgroundStatus()}를 사용하여 앱이 사용해야 하는 데이터의 양을
-결정합니다.
-</p>
-
-<pre>
-ConnectivityManager connMgr = (ConnectivityManager)
- getSystemService(Context.CONNECTIVITY_SERVICE);
-// Checks if the device is on a metered network
-if (connMgr.isActiveNetworkMetered()) {
- // Checks user’s Data Saver settings.
- switch (connMgr.getRestrictBackgroundStatus()) {
- case RESTRICT_BACKGROUND_STATUS_ENABLED:
- // Background data usage is blocked for this app. Wherever possible,
- // the app should also use less data in the foreground.
-
- case RESTRICT_BACKGROUND_STATUS_WHITELISTED:
- // The app is whitelisted. Wherever possible,
- // the app should use less data in the foreground and background.
-
- case RESTRICT_BACKGROUND_STATUS_DISABLED:
- // Data Saver is disabled. Since the device is connected to a
- // metered network, the app should use less data wherever possible.
- }
-} else {
- // The device is not on a metered network.
- // Use data as required to perform syncs, downloads, and updates.
-}
-</pre>
-
-<h3 id="request-whitelist">
- 허용 목록 권한 요청
-</h3>
-
-<p>
- 앱이 백그라운드에서 데이터를 사용해야 하는 경우, 앱의 패키지 이름의 URI가 포함된
-<code>Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS</code>
-인텐트(예:
-<code>package:MY_APP_ID</code>)를 앱이 보내서
-허용 목록 권한을 요청할 수 있습니다.
-</p>
-
-<p>
- 인텐트와 URI를 보내면 <strong>Settings</strong> 앱이 시작되고
-앱에 대한 데이터 사용량 설정이 표시됩니다. 그러면 사용자는 앱에 대해 백그라운드 데이터의
-사용 여부를 결정할 수 있습니다. 이 인텐트를 보내기 전에,
-백그라운드 데이터 사용을 활성화하기 위해
-<strong>Settings</strong> 앱 시작 여부를 사용자에게 먼저 묻는 것이
-좋습니다.
-</p>
-
-<h2 id="monitor-changes">
- Data Saver 기본 설정 변경 사항 모니터링
-</h2>
-
-<p>
- 앱은 {@code
- ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED}를 수신하기 위해 {@link
- android.content.BroadcastReceiver}를 만들고 수신기를 {@link android.content.Context#registerReceiver
- Context.registerReceiver()}에 동적으로 등록하여
-Data Saver 기본 설정의 변경 사항을 모니터링할 수 있습니다. 앱은 이 브로드캐스트를 수신할 때 {@code
- ConnectivityManager.getRestrictBackgroundStatus()}를 호출하여 <a href="#status">새로운 Data Saver 기본 설정이
-권한에 영향을 미치는지 확인</a>해야
-합니다.
-</p>
-
-<p class="note">
- <strong>참고:</strong> 시스템에서는 {@link
- android.content.Context#registerReceiver Context.registerReceiver()}로 동적으로 등록하는 앱에만 이
-브로드캐스트를 보냅니다. 이
-브로드캐스트를 수신하도록 매니페스트에 등록하는 앱은
-이를 수신하지 못합니다.
-</p>
-
-<h2 id="testing">
- Android 디버그 브리지 명령을 이용한 테스트
-</h2>
-
-<a href="{@docRoot}tools/help/adb.html">Android 디버그 브리지</a>는
-네트워크 권한을 확인하고 구성하는 데 사용될 수 있는 몇 가지 명령을
-제공합니다.
-
-<dl>
- <dt>
- <code>$ adb shell dumpsys netpolicy</code>
- </dt>
-
- <dd>
- 현재 전역 백그라운드 네트워크
- 제한 설정, 허용 목록에 현재 있는 패키지 UID 및 알려진
-다른 패키지의 네트워크 권한이 포함된 보고서를 생성합니다.
- </dd>
-
- <dt>
- <code>$ adb shell cmd netpolicy</code>
- </dt>
-
- <dd>
- Network Policy Manager(netpolicy) 명령의 전체 목록을 표시합니다.
- </dd>
-
- <dt>
- <code>$ adb shell cmd netpolicy set restrict-background
- <boolean></code>
- </dt>
-
- <dd>
- <code>true</code> 또는
- <code>false</code>를 각각 전달할 때 Data Saver 모드를 활성화하거나 비활성화합니다.
- </dd>
-
- <dt>
- <code>$ adb shell cmd netpolicy add restrict-background-whitelist
- <UID></code>
- </dt>
-
- <dd>
- 지정된 패키지 UID를 허용 목록에 추가하여 백그라운드 데이터 통신 연결을
- 허용합니다.
- </dd>
-
- <dt>
- <code>$ adb shell cmd netpolicy remove restrict-background-whitelist
- <UID></code>
- </dt>
-
- <dd>
- 지정된 패키지 UID를 허용 목록에서 제거하여, Data Saver가 활성화된 동안 백그라운드 데이터 통신 연결을
-차단합니다.
- </dd>
-</dl>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ko/preview/features/direct-boot.jd b/docs/html-intl/intl/ko/preview/features/direct-boot.jd
deleted file mode 100644
index 2674481..0000000
--- a/docs/html-intl/intl/ko/preview/features/direct-boot.jd
+++ /dev/null
@@ -1,181 +0,0 @@
-page.title=직접 부팅
-page.keywords=preview, sdk, 직접 부팅
-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="#run">직접 부팅 시 실행하기 위한 액세스 요청</a></li>
- <li><a href="#access">기기 암호화 저장소 액세스</a></li>
- <li><a href="#notification">사용자 잠금 해제 알림 수신</a></li>
- <li><a href="#migrating">기존 데이터 마이그레이션</a></li>
- <li><a href="#testing">암호화 인식 앱 테스트</a></li>
- </ol>
-</div>
-</div>
-
-<p>기기에 전원이 들어와 있지만 <i>사용자가 기기의 잠금을 해제하지</i> 않았을 경우 Android N은 안전한
-직접 부팅
- 모드에서 실행됩니다. 이를 지원하기 위해 시스템에서 다음과 같은 두 가지 데이터 저장소 위치를 제공합니다.</p>
-
-<ul>
-<li><i>자격 증명 암호화 저장소:</i>기본 저장소 위치이며, 사용자가 기기의 잠금을 해제한 후에만
-사용할 수 있습니다.</li>
-<li><i>기기 암호화 저장소:</i>직접 부팅 모드와 사용자가 기기의 잠금을 해제한 후에
-모두 사용할 수 있는 저장소 위치입니다.</li>
-</ul>
-
-<p>기본적으로 직접 부팅 모드 시 앱이 실행되지 않습니다.
-직접 부팅 모드에서 조치가 필요한 경우,
-이 모드에서 실행되어야 하는 앱 구성 요소를 등록할 수 있습니다. 직접 부팅 모드 시 실행되어야 하는 앱의
-몇 가지 공통 사용 사례는 다음과 같습니다.</p>
-
-<ul>
-<li>알람 시계 앱과 같이 예약된 알림이 있는
-앱.</li>
-<li>SMS 앱처럼 중요한 사용자 알림을 제공하는 앱.</li>
-<li>Talkback처럼 접근성 서비스를 제공하는 앱.</li>
-</ul>
-
-<p>앱이 직접 부팅 모드에서 실행되는 동안 데이터에 액세스해야 하는 경우
-기기 암호화 저장소를 사용합니다. 기기 암호화 저장소에는
-기기가 성공적으로 확인된 부팅을 수행한 후에만
-사용할 수 있는 키로 암호화된 데이터가 포함됩니다.</p>
-
-<p>PIN이나 비밀번호와 같이 사용자 자격 증명과 연관된 키로 암호화해야 하는 데이터는
-자격 증명 암호화 저장소를 사용합니다.
-자격 증명 암호화 저장소는 사용자가 기기의 잠금을 해제한 뒤부터
-기기를 다시 시작할 때까지 사용할 수 있습니다. 사용자가
-기기의 잠금을 해제한 뒤 잠금 화면을 활성화해도
-자격 증명 암호화 저장소가 잠기지 않습니다.</p>
-
-<h2 id="run">직접 부팅 시 실행하기 위한 액세스 요청</h2>
-
-<p>앱은 직접 부팅 모드에서 실행되거나
-기기 암호화 저장소에 액세스하기 전까지
-시스템에 구성 요소를 등록해야 합니다. 앱은 구성 요소를 암호화 인식으로 표시하여
-<i>시스템에</i> 등록합니다. 구성 요소를 암호화 인식으로 표시하려면 매니페스트에서
-<code>android:directBootAware</code> 속성을 true로 설정합니다.<p>
-
-<p>암호화 인식 구성 요소로 등록하면 기기가 다시 시작되었을 때 시스템에서
-<code>LOCKED_BOOT_COMPLETED</code> 브로드캐스트 메시지를
-수신할 수 있습니다. 이 시점에서 기기 암호화 저장소를
-사용할 수 있고, 여러분의 구성 요소는
-예약된 알람 트리거 등과 같이 직접 부팅 모드에서 실행해야 하는 작업을 실행할 수 있습니다.</p>
-
-<p>다음 코드 조각은
-{@link android.content.BroadcastReceiver}를 암호화 인식으로 등록하고 앱 매니페스트에
-<code>LOCKED_BOOT_COMPLETED</code>의 인텐트 필터를 추가하는 예시입니다.</p>
-
-<pre>
-<receiver
- android:directBootAware="true" >
- ...
- <intent-filter>
- <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
- </intent-filter>
-</receiver>
-</pre>
-
-<p>사용자가 기기의 잠금을 해제하면 모든 구성 요소가
-기기 암호화 저장소와 자격 증명 암호화 저장소에 액세스할 수 있습니다.</p>
-
-<h2 id="access">기기 암호화 저장소 액세스</h2>
-
-<p>기기 암호화 저장소에 액세스하려면
-<code>Context.createDeviceProtectedStorageContext()</code>를 호출하여 두 번째
-{@link android.content.Context} 인스턴스를 생성합니다. 이 컨텍스트를 사용하여 수행된 모든 저장소 API 호출은
-기기 암호화 저장소에 액세스합니다. 다음은
-기기 암호화 저장소에 액세스하고 기존
-앱 데이터 파일을 여는 예시입니다.</p>
-
-<pre>
-Context directBootContext = appContext.createDeviceProtectedStorageContext();
-// Access appDataFilename that lives in device encrypted storage
-FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
-// Use inStream to read content...
-</pre>
-
-<p>직접 부팅 모드에서 액세스해야 하는 정보에만
-기기 암호화 저장소를 사용합니다.
-기기 암호화 저장소를 범용 암호화 저장소로 사용하지 마십시오.
-개인적인 사용자 정보 또는 직접 부팅 모드에서 필요하지 않은 암호화 데이터는
-자격 증명 암호화 저장소를 사용합니다.</p>
-
-<h2 id="notification">사용자 잠금 해제 알림 수신</h2>
-
-<p>사용자가 재시작 후 기기의 잠금을 해제하면
-앱이 자격 증명 암호화 저장소 액세스로 전환하고,
-사용자 자격 증명을 따르는 일반 시스템 서비스를 사용할 수 있습니다.</p>
-
-<p>사용자가 재부팅 후 기기의 잠금을 해제할 때 알림을 받으려면
-실행 중인 구성 요소에서 {@link android.content.BroadcastReceiver}를 등록하고
-<code>ACTION_USER_UNLOCKED</code> 메시지를 수신합니다. 또는,
-기존 {@link android.content.Intent#ACTION_BOOT_COMPLETED
-ACTION_BOOT_COMPLETED} 메시지를 수신할 수 있습니다. 이 메시지는 기기가 부팅되었으며 사용자가 기기의 잠금을
-해제했음을 나타냅니다.</p>
-
-<p>사용자가
-<code>UserManager.isUserUnlocked()</code>를 호출하여 기기 잠금을 해제했는지 직접 쿼리할 수 있습니다.</p>
-
-<h2 id="migrating">기존 데이터 마이그레이션</h2>
-
-<p>직접 부팅 모드를 사용하도록 사용자가 자신의 기기를 업데이트하는 경우,
-여러분이 기존 데이터를 기기 암호화 저장소로 마이그레이션해야 할 수도 있습니다.
-<code>Context.moveSharedPreferencesFrom()</code>과
-<code>Context.moveDatabaseFrom()</code>을 사용하여 자격 증명 암호화 저장소와 기기 암호화 저장소 간에
-기본 설정과 데이터베이스 데이터를 마이그레이션합니다.</p>
-
-<p>어떤 데이터를 자격 증명
-암호화 저장소에서 기기 암호화 저장소로 마이그레이션할지를 신중히 결정하세요. 암호나 인증 토큰 등의
-개인 사용자 정보는 기기 암호화 저장소로
-마이그레이션해서는 안 됩니다. 일부 시나리오에서
-두 가지 암호화 저장소에 있는 별도의 데이터 세트를 관리해야 할 수 있습니다.</p>
-
-<h2 id="testing">암호화 인식 앱 테스트</h2>
-
-<p>새로운 직접 부팅 모드로 암호화 인식 앱을 테스트하세요. 직접 부팅을
-활성화하는 방법은 두 가지가 있습니다.</p>
-
-<p class="caution"><strong>주의:</strong> 직접 부팅을 활성화하면
-기기에서 모든 사용자 데이터가 삭제됩니다.</p>
-
-<p>Android N이 설치된 지원 기기에서
-직접 부팅을 활성화하는 방법:</p>
-
-<ul>
-<li><b>Developer options</b>가 활성화되어 있지 않으면 기기에서
-<b>Settings > About phone</b>으로 이동하여 <b>Build number</b>를
-7번 탭하여 활성화합니다. 개발자 옵션 화면이 나오면
-<b>Settings > Developer options</b>로 이동해서
-<b>Convert to file encryption</b>을 선택합니다.</li>
-<li>다음 adb shell 명령을 사용하여 직접 부팅 모드를 활성화합니다.
-<pre class="no-pretty-print">
-$ adb reboot-bootloader
-$ fastboot --wipe-and-use-fbe
-</pre>
-</li>
-</ul>
-
-<p>테스트 기기에서 모드를 전환해야 할 경우
-에뮬레이션된 직접 부팅 모드도 사용할 수 있습니다. 에뮬레이션된 모드는 개발 시에만 사용해야 하며
-데이터가 손실될 수 있습니다. 에뮬레이션된 직접 부팅 모드를 활성화하려면
-기기에서 잠금 패턴을 설정합니다. 잠금 패턴을 설정할 때 안전 모드 화면으로 시작할지 묻는 메시지가 나오면 "No thanks"를
-선택한 뒤 다음
-adb shell 명령을 사용합니다.</p>
-
-<pre class="no-pretty-print">
-$ adb shell sm set-emulate-fbe true
-</pre>
-
-<p>에뮬레이션된 직접 부팅 모드를 끄려면 다음 명령을 사용합니다.</p>
-
-<pre class="no-pretty-print">
-$ adb shell sm set-emulate-fbe false
-</pre>
-
-<p>이 명령을 사용하면 기기가 재부팅됩니다.</p>
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/multi-window.jd b/docs/html-intl/intl/ko/preview/features/multi-window.jd
deleted file mode 100644
index bd24d9f..0000000
--- a/docs/html-intl/intl/ko/preview/features/multi-window.jd
+++ /dev/null
@@ -1,589 +0,0 @@
-page.title=다중 창 지원
-page.metaDescription=Android N에서 한 번에 둘 이상의 앱을 표시하도록 지원.
-page.keywords="multi-window", "android N", "split screen", "free-form"
-
-@jd:body
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>이 문서의 내용</h2>
- <ol>
- <li><a href="#overview">개요</a></li>
- <li><a href="#lifecycle">다중 창 수명 주기</a></li>
- <li><a href="#configuring">앱을 다중 창
-모드로 구성</a></li>
- <li><a href="#running">앱을 다중 창 모드에서 실행</a></li>
- <li><a href="#testing">앱의 다중 창 지원 테스트</a></li>
- </ol>
- <h2>참고 항목</h2>
- <ol>
- <li><a class="external-link" href="https://github.com/googlesamples/android-MultiWindowPlayground">다중 창
- 플레이그라운드 샘플 앱</a></li>
- <li><a class="external-link" href="https://medium.com/google-developers/5-tips-for-preparing-for-multi-window-in-android-n-7bed803dda64">Android N에서 다중 창을 준비하기 위한 5가지 팁</a></li>
- </ol>
- </div>
-</div>
-
-<p>
- Android N은 둘 이상의 앱을 동시에 표시하기 위한 지원을
-추가합니다. 핸드헬드 기기에서 두 개의 앱을 <em>화면 분할</em> 모드에서
-나란히 또는 상하로 실행할 수 있습니다. TV 기기에서 앱이
-<em>PIP(Picture-In-Picture)</em> 모드를 사용하는 경우 사용자가 다른 앱과 상호작용하는
-동안에 계속 동영상을 재생할 수 있습니다.
-</p>
-
-<p>
- N Preview SDK로 앱을 빌드하는 경우, 앱이 다중 창
-표시를 처리하는 방식을 구성할 수 있습니다. 예를 들어, 액티비티의
-최소 허용 치수를 지정할 수 있습니다. 또한 앱에
-대해 다중 창 표시를 비활성화할 수도 있으며, 이 경우 시스템은 앱을 전체 화면 모드에서만
-표시합니다.
-</p>
-
-<h2 id="overview">개요</h2>
-
-<p>
- Android N에서는 여러 앱이 동시에 화면을 공유할 수 있습니다. 예를 들어, 사용자가 화면을 분할하여 왼쪽에서는 웹페이지를
-보면서 오른쪽에서는 이메일을 작성할
-수 있습니다. 사용자 환경은 기기에 따라
-달라집니다.
-</p>
-
-<ul>
- <li>Android N에서 실행되는 핸드헬드 기기는 화면 분할
-모드를 제공합니다. 이 모드에서 시스템은 화면을 두 개의 앱으로 채우고, 이
-앱을 나란히 또는 상하로 표시합니다. 사용자가 두 앱을 구분하는 분할선을 드래그하여 한 앱을 다른 앱보다
-더 크게 만들 수 있습니다.
- </li>
-
- <li>Android N을 실행하는 Nexus Player에서, 앱이
-<a href="picture-in-picture.html">PIP 모드</a>로 배치될 수 있으므로, 사용자가 검색을
-수행하거나 다른 앱과 상호작용하는 중에도 앱이 계속해서 콘텐츠를
-표시할 수 있습니다.
- </li>
-
- <li>더 큰 기기를 제조하는 업체는 자유형식
-모드를 선택할 수 있으며, 이 경우 사용자가 각 액티비티의 크기를 자유롭게 조정할 수 있습니다. 제조업체가 이 기능을 활성화하면, 기기는 화면 분할 모드 뿐만
-아니라 자유형식 모드를
-제공합니다.
- </li>
-</ul>
-
-<img src="{@docRoot}preview/images/mw-splitscreen.png" alt="" width="650" srcset="{@docRoot}preview/images/mw-splitscreen.png 1x,
- {@docRoot}preview/images/mw-splitscreen_2x.png 2x," id="img-split-screen" />
-<p class="img-caption">
- <strong>그림 1.</strong> 화면 분할 모드에서 나란히 실행 중인 두 앱.
-</p>
-
-<p>
- 사용자가 다음과 같이 다중 창 모드로 전환할 수 있습니다.
-</p>
-
-<ul>
- <li>사용자가 <a href="{@docRoot}guide/components/recents.html">Overview
-화면</a>을 열고 액티비티 제목을 길게 누르면,
-이 액티비티를 화면의 강조 표시된 부분으로 드래그하여
-다중 창 모드에 둘 수 있습니다.
- </li>
-
- <li>사용자가 Overview 버튼을 길게 누르면, 기기가 현재 액티비티를
-다중 창 모드에 두고 Overview 화면을 열며, 이 화면에서 사용자는 화면을
-공유하기 위한 또 다른 액티비티를 선택할 수 있습니다.
- </li>
-</ul>
-
-<p>
- 사용자는 여러 액티비티가 화면을 공유하는 동안 한 액티비티에서
-또 다른 액티비티로 데이터를 <a href="{@docRoot}guide/topics/ui/drag-drop.html">드래그 앤 드롭</a>할
-수 있습니다. (이전에는, 사용자가 단일 액티비티 내에서만
-데이터를 드래그 앤 드롭할 수 있었습니다.)
-</p>
-
-<h2 id="lifecycle">다중 창 수명 주기</h2>
-
-<p>
- 다중 창 모드는 <a href="{@docRoot}training/basics/activity-lifecycle/index.html">액티비티
-수명 주기</a>를 변경하지 않습니다.
-</p>
-
-<p>
- 다중 창 모드에서는, 사용자가 가장 최근에 상호작용했던 액티비티만
-지정된 시간에 활성화됩니다. 이 액티비티는 <em>최상위</em>로 간주됩니다.
- 다른 모든 액티비티는 표시되어 있더라도 일시 정지된 상태입니다.
- 그러나 시스템은 이러한 일시 정지되었지만 표시된 액티비티에게 표시되지
-않은 액티비티보다 더 높은 우선 순위를 부여합니다. 사용자가 일시 정지된 액티비티 중 하나와 상호작용하면, 해당
-액티비티가 재개되고 이전의 최상위 액티비티가 일시
-정지됩니다.
-</p>
-
-<p class="note">
- <strong>참고:</strong> 다중 창 모드에서는 앱이 일시 정지된 상태에서도 여전히
-사용자에게 표시될 수 있습니다. 앱이 일시 정지된 동안에도 액티비티를
-계속해야 하는 경우도 있습니다. 예를 들어, 일시 정지 모드이지만 표시된
-동영상 재생 앱은 계속해서 동영상을 보여줘야 합니다. 이러한 이유로, 동영상을
-재생하는 액티비티는 {@link android.app.Activity#onPause onPause()} 핸들러에서
-동영상을 일시 정지하지 <em>않는</em> 것이 좋습니다.
- 그 대신, {@link android.app.Activity#onStop
- onStop()}에서 동영상을 일시 정지하고, {@link android.app.Activity#onStart
- onStart()}에서 재생을 재개해야 합니다.
-</p>
-
-<p>
- 사용자가 앱을 다중 창 모드에 놓으면
-시스템은, <a href="{@docRoot}guide/topics/resources/runtime-changes.html">런타임 변경 처리</a>에 지정된 대로, 구성 변경을 액티비티에
-알려줍니다. 이 동작은 사용자가 앱의 크기를 조정하거나 앱을
- 전체 화면 모드로 다시 전환할 때도 발생합니다.
- 기본적으로, 이 변경에서 액티비티-수명 주기 관계는 기기 모드가
- 세로 모드에서 가로 모드로 전환되었음을
- 시스템이 앱에 알려줄 때와 동일합니다(단순 스왑 대신
- 기기 치수가 변경되는 경우는 제외). <a href="{@docRoot}guide/topics/resources/runtime-changes.html">런타임 변경 처리</a>에서 설명한
-대로, 액티비티 스스로 구성 변경을 처리하거나, 시스템이 액티비티를 소멸시키고
-새 치수로 다시 액티비티를 생성하도록 할 수
-있습니다.
-</p>
-
-<p>
- 사용자가 창의 크기를 조정하여 한쪽 치수를 더 크게 만드는
-경우, 시스템은 사용자 작업에 맞게 액티비티의 크기를 조정하고 필요한
-경우 <a href="{@docRoot}guide/topics/resources/runtime-changes.html">런타임 변경</a>을 수행합니다. 앱이 새로 노출되는 영역에 그릴 때 지연이 발생하는 경우, 시스템은 {@link
- android.R.attr#windowBackground windowBackground} 속성 또는 기본
-<code>windowBackgroundFallback</code> 스타일 속성에 의해
-지정된 색으로 이 영역을 임시로 채웁니다.
-</p>
-
-<h2 id="configuring">앱을 다중 창 모드로 구성</h2>
-
-<p>
- 앱이 Android N을 대상으로 하는 경우, 앱의 액티비티가 다중
-창 표시를 지원하는지 여부와 지원 방법을 구성할 수 있습니다. 매니페스트에서 속성을 설정하여 크기와 레이아웃을 제어할
-수 있습니다.
- 루트 액티비티의 속성 설정은 작업 스택 내의 모든
- 액티비티에 적용됩니다. 예를 들어, 루트 액티비티의
-<code>android:resizeableActivity</code>가 true로 설정된 경우, 작업 스택에 있는 모든 액티비티의
-크기를 조정할 수 있습니다.
-</p>
-
-<p class="note">
- <strong>참고:</strong> Android N보다 더 낮은 버전의 SDK로 다중 방향 앱을 빌드하는 경우
-사용자가 앱을 다중 창 모드에서 사용하면, 시스템이
-이 앱의 크기를 강제로 조정합니다. 앱이 예상치 못하게 동작할 수 있음을 사용자에게 경고하는
-대화 상자가 표시됩니다. 시스템은 고정
-방향 앱의 크기는 조정하지 <em>않습니다</em>. 사용자가
-다중 창 모드 하에서 고정 방향 앱을 열려고 시도하면,
-앱이 전체 화면을 차지합니다.
-</p>
-
-<h4 id="resizeableActivity">android:resizeableActivity</h4>
-<p>
- 매니페스트의 <code><activity></code> 또는
-<code><application></code> 노드에서 이 속성을 설정하여 다중 창
-표시를 활성화하거나 비활성화합니다.
-</p>
-
-<pre>
-android:resizeableActivity=["true" | "false"]
-</pre>
-
-<p>
- 이 속성을 true로 설정하면, 액티비티를 분할 화면 모드와 자유형식
-모드로 시작할 수 있습니다. 이 속성을 false로 설정하면, 액티비티가 다중 창 모드를 지원하지
-않습니다. 이 값이 false이고 사용자가
-다중 창 모드에서 액티비티를 시작하려고 시도하면, 액티비티가 전체 화면을
-차지합니다.
-</p>
-
-<p>
- 앱이 Android N을 대상으로 하지만 이 속성에 값을 지정하지
-않은 경우, 이 속성의 기본값은 true가 됩니다.
-</p>
-
-<h4 id="supportsPictureInPicture">android:supportsPictureInPicture</h4>
-
-<p>
- 이 속성을 매니페스트의 <code><activity></code> 노드에 설정하여
-액티비티가 PIP 표시를 지원하는지 여부를 나타냅니다. <code>android:resizeableActivity</code>가 false인 경우 이 속성이
-무시됩니다.
-</p>
-
-<pre>
-android:supportsPictureInPicture=["true" | "false"]
-</pre>
-
-<h3 id="layout">레이아웃 속성</h3>
-
-<p>
- Android N에서 <code><layout></code> 매니페스트 요소는
-다중 창 모드에서 액티비티가 동작하는 방식에 영향을 미치는
-여러 속성을 지원합니다.
-</p>
-
-<dl>
- <dt>
- <code>android:defaultWidth</code>
- </dt>
-
- <dd>
- 자유형식 모드에서 시작될 때 액티비티의 기본 너비.
- </dd>
-
- <dt>
- <code>android:defaultHeight</code>
- </dt>
-
- <dd>
- 자유형식 모드에서 시작될 때 액티비티의 기본 높이.
- </dd>
-
- <dt>
- <code>android:gravity</code>
- </dt>
-
- <dd>
- 자유형식 모드에서 시작될 때 액티비티의 초기 배치. 적당한 값은
-{@link android.view.Gravity} 참조를 확인하세요.
- </dd>
-
- <dt>
- <code>android:minimalHeight</code>, <code>android:minimalWidth</code>
- </dt>
-
- <dd>
- 화면 분할
- 및 자유형식 모드에서 액티비티의 최소 높이 및 최소 너비. 사용자가 화면 분할 모드에서 디바이더를 이동하여 액티비티를
-지정된 최소값보다 더 작게 만드는 경우, 시스템은
-이 액티비티를 사용자가 요청한 크기로 자릅니다.
- </dd>
-</dl>
-
-<p>
- 예를 들어, 다음 코드는 액티비티가 자유형식 모드로 표시될
-때 이 액티비티의 기본 크기와 위치 및 최소 크기를
-지정하는 방법을 보여줍니다.
-</p>
-
-<pre>
-<activity android:name=".MyActivity">
- <layout android:defaultHeight="500dp"
- android:defaultWidth="600dp"
- android:gravity="top|end"
- android:minimalHeight="450dp"
- android:minimalWidth="300dp" />
-</activity>
-</pre>
-
-<h2 id="running">앱을 다중 창 모드에서 실행</h2>
-
-<p>
- Android N에서는 다중 창 모드에서 실행 가능한 앱을 지원하는 새로운
-기능을 제공합니다.
-</p>
-
-<h3 id="disabled-features">다중 창 모드에서 비활성화되는 기능</h3>
-
-<p>
- 기기가 다중 창 모드에 있는 경우 일부 기능이 비활성화되거나
-무시되는데, 그 이유는 이들 기능은 기기 화면을 다른 액티비티
-또는 앱과 공유하는 액티비티에는 적합하지 않기 때문입니다. 이러한 기능에는 다음이 포함됩니다.
-
-<ul>
- <li>일부 <a href="{@docRoot}training/system-ui/index.html">시스템 UI</a>
-사용자 지정 옵션이 비활성화됩니다. 예를 들어, 앱이 전체 화면 모드에서 실행되지
-않을 경우에는 상태 표시줄을 숨길 수 없습니다.
- </li>
-
- <li>시스템이 <code><a href=
- "{@docRoot}guide/topics/manifest/activity-element.html#screen"
- >android:screenOrientation</a></code> 속성의 변경을 무시합니다.
- </li>
-</ul>
-
-<h3 id="change-notification">다중 창 변경 알림 및 쿼리</h3>
-
-<p>
- 다중 창 표시를 지원하기 위해 다음과 같은 새 메서드가 {@link android.app.Activity}
- 클래스에 추가되었습니다. 각 메서드에 대한 자세한 내용은
-<a href="{@docRoot}preview/setup-sdk.html#docs-dl">N Preview SDK
-참조</a>를 확인하세요.
-</p>
-
-<dl>
- <dt>
- <code>Activity.isInMultiWindowMode()</code>
- </dt>
-
- <dd>
- 액티비티가 다중 창 모드에 있는지를 알아내려면 이 메서드를 호출하세요.
- </dd>
-
- <dt>
- <code>Activity.isInPictureInPictureMode()</code>
- </dt>
-
- <dd>
- 액티비티가 PIP 모드에 있는지를 알아내려면 이 메서드를 호출하세요.
-
- <p class="note">
- <strong>참고:</strong> PIP 모드는 다중 창 모드의 특별한
- 케이스입니다. <code>myActivity.isInPictureInPictureMode()</code>가
-true를 반환하면 <code>myActivity.isInMultiWindowMode()</code>도
-역시 true를 반환합니다.
- </p>
- </dd>
-
- <dt>
- <code>Activity.onMultiWindowModeChanged()</code>
- </dt>
-
- <dd>
- 시스템은 액티비티가 다중 창 모드로 들어가거나
- 이 모드에서 나올 때마다 이 메서드를 호출합니다. 시스템은 액티비티가 다중 창 모드로
- 들어갈 때는 true 값을 메서드에 전달하고, 액티비티가 다중 창 모드에서
- 나올 때는 false 값을 전달합니다.
- </dd>
-
- <dt>
- <code>Activity.onPictureInPictureModeChanged()</code>
- </dt>
-
- <dd>
- 시스템은 액티비티가 PIP 모드로 들어가거나
- 이 모드에서 나올 때마다 이 메서드를 호출합니다. 시스템은 액티비티가 PIP 모드로 들어갈 때는
- true 값을 메서드에 전달하고, 액티비티가 PIP에서 나올 때는
- false 값을 전달합니다.
- </dd>
-</dl>
-
-<p>
- 또한 이들 각 메서드의 {@link android.app.Fragment} 버전이
-있습니다(예: <code>Fragment.isInMultiWindowMode()</code>).
-</p>
-
-<h3 id="entering-pip">PIP 모드로 들어가기</h3>
-
-<p>
- 액티비티를 PIP 모드에 두려면, 새로운 메서드인
-<code>Activity.enterPictureInPictureMode()</code>를 호출합니다. 기기가 PIP 모드를 지원하지 않으면 이 메서드는
- 영향이 없습니다. 자세한 내용은
-<a href="picture-in-picture.html">PIP</a> 문서를 참조하세요.
-</p>
-
-<h3 id="launch">다중 창 모드에서 새 액티비티 시작</h3>
-
-<p>
- 새 액티비티를 시작하는 경우, 가능하면 이 새 액티비티가 현재
-액티비티에 인접하여 표시되어야 함을 시스템에게 알려줄 수 있습니다. 이를 위해
-, 플래그
-<code>Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT</code>를 사용합니다. 이 플래그를 전달하면
-다음과 같은 동작이 요청됩니다.
-</p>
-
-<ul>
- <li>기기가 화면 분할 모드에 있는 경우,
-시스템은 시작한 액티비티 옆에 새 액티비티를 만들려고 시도하므로, 두 액티비티가
-화면을 공유합니다. 시스템이 이 작업을 수행할 수 있다고
-보장되지는 않지만, 가능하면 액티비티를 인접하게 만듭니다.
- </li>
-
- <li>기기가 화면 분할 모드에 있으면, 이 플래그가 영향을 미치지 않습니다.
- </li>
-</ul>
-
-<p>
- 기기가 자유형식 모드에 있고 새 액티비티를 시작 중인 경우,
-<code>ActivityOptions.setLaunchBounds()</code>를 호출하여 이 새 액티비티의 치수와 화면 위치를
-지정할 수 있습니다. 기기가 다중 창 모드에 있지 않으면, 이 메서드가 영향을
-미치지 않습니다.
-</p>
-
-<p class="note">
- <strong>참고:</strong> 작업 스택 내에서 액티비티를 시작하는 경우,
-이 액티비티는 화면상의 액티비티를 대체하여, 모든 다중 창 속성을
-상속합니다. 새 액티비티를 다중 창 모드에서 별도 창으로 시작하려면,
-새 작업 스택에서 액티비티를 시작해야 합니다.
-</p>
-
-<h3 id="dnd">드래그 앤 드롭 지원</h3>
-
-<p>
- 사용자는 두
-액티비티가 화면을 공유하는 동안 한 액티비티에서 다른 액티비티로 데이터를 <a href="{@docRoot}guide/topics/ui/drag-drop.html">드래그 앤 드롭</a>할
-수 있습니다. (이전에는, 사용자가 단일 액티비티 내에서만 데이터를 드래그 앤 드롭할
- 수 있었습니다.) 이러한 이유로, 앱이 현재 지원하지 않는 경우에는 드래그 앤 드롭
-기능을 앱에 추가하는 것이 좋습니다.
-</p>
-
-<p>
- N Preview SDK는 앱 간의 드래그 앤 드롭을 지원하기 위해 <a href="{@docRoot}reference/android/view/package-summary.html"><code>android.view</code></a>
-패키지를 확장합니다. 다음과 같은 클래스와 메서드에 대한 자세한
-내용은, <a href="{@docRoot}preview/setup-sdk.html#docs-dl">N Preview
-SDK 참조</a>를 참조하세요.
-</p>
-
-<dl>
- <dt>
- <code>android.view.DropPermissions</code>
- </dt>
-
- <dd>
- 놓기를 수신하는 앱에 부여되는 권한을 지정하기
-위한 토큰 객체.
- </dd>
-
- <dt>
- <code>View.startDragAndDrop()</code>
- </dt>
-
- <dd>
- {@link android.view.View#startDrag View.startDrag()}의 새 별칭. 액티비티 간의 드래그 앤 드롭을 활성화하려면, 새 플래그
-<code>View.DRAG_FLAG_GLOBAL</code>을
-전달합니다. 수신자 액티비티에게 URI 권한을
-부여해야 하는 경우, 새 플래그
-<code>View.DRAG_FLAG_GLOBAL_URI_READ</code> 또는
-<code>View.DRAG_FLAG_GLOBAL_URI_WRITE</code>를 적절하게 전달합니다.
- </dd>
-
- <dt>
- <code>View.cancelDragAndDrop()</code>
- </dt>
-
- <dd>
- 현재 진행 중인 드래그 작업을 취소합니다. 드래그 작업을 발생시킨
-앱에 의해서만 호출될 수 있습니다.
- </dd>
-
- <dt>
- <code>View.updateDragShadow()</code>
- </dt>
-
- <dd>
- 현재 진행 중인 드래그 작업의 드래그 그림자를 대체합니다. 드래그 작업을 발생시킨
-앱에 의해서만 호출될 수 있습니다.
- </dd>
-
- <dt>
- <code>Activity.requestDropPermissions()</code>
- </dt>
-
- <dd>
- {@link android.view.DragEvent}에 포함된 {@link
-android.content.ClipData}로 전달되는 콘텐츠 URI의 권한을 요청합니다.
- </dd>
-</dl>
-
-<h2 id="testing">앱의 다중 창 지원 테스트</h2>
-
-<p>
- 앱을 Android N용으로 업데이트하든 안하든 간에,
-Android N이 실행 중인 기기에서 사용자가 앱을 다중 창 모드로
-시작하려고 시도하는 경우, 앱이 다중 창 모드에서 어떻게 작동하는지 확인해야 합니다.
-</p>
-
-<h3 id="configuring">테스트 기기 구성</h3>
-
-<p>
- 기기에 Android N을 설치하면, 화면 분할 모드가
-자동으로 지원됩니다.
-</p>
-
-<h3 id="test-non-n">앱이 N Preview SDK로 작성되지 않은 경우</h3>
-
-<p>
- 앱을 N Preview SDK로 빌드하지 않았는데 사용자가
-앱을 다중 창 모드에서 사용하려고 시도하는 경우, 이 앱이 고정 방향을 선언하지
-않으면 시스템이 앱의 크기를 강제로 조정합니다.
-</p>
-
-<p>
- 앱이 고정 방향을 선언하지 않은 경우, Android N이
-실행 중인 기기에서 앱을 시작해야 하며, 앱을 화면 분할 모드에
-두도록 시도해야 합니다. 앱의 크기를 강제로 조정하는 경우 사용자 환경이
-적절한지 확인하세요.
-</p>
-
-<p>
- 앱이 고정 방향을 선언하는 경우, 앱을 다중 창 모드에
-두도록 시도해야 합니다. 이 때 앱이 전체 화면 모드에 남아있는지
-확인하세요.
-</p>
-
-<h3 id="test-mw">다중 창 모드를 지원하는 경우</h3>
-
-<p>
- N Preview SDK로 앱을 작성했는데 다중 창 지원을 비활성화하지
-않은 경우, 화면 분할 및 자유형식 모드에서 다음과
-같은 동작을 확인하세요.
-</p>
-
-<ul>
- <li>앱을 전체 화면 모드에서 시작한 다음, Overview 버튼을 길게 눌러서
-다중 창 모드로 전환합니다. 앱이 적절히 전환되는지 확인합니다.
- </li>
-
- <li>앱을 다중 창 모드에서 직접 시작하고, 이 앱이 적절히
-시작되는지 확인합니다. 다중 창 모드에서 앱을 시작하려면, Overview 버튼을
-누르고 앱의 제목 표시줄을 길게 누른 다음 화면의 강조 표시된 영역 중
-하나로 제목 표시줄을 끌어서 놓습니다.
- </li>
-
- <li>분할선을 끌어서 화면 분할 모드에서 앱의 크기를 조정합니다.
- 작동 중단 없이 앱 크기가 조정되는지 확인하고, 필요한
-UI 요소가 표시되는지 확인합니다.
- </li>
-
- <li>앱에 최소 치수를 지정한 경우, 이 치수 아래로 앱 크기를
-조정해 봅니다. 지정된 최소값보다 더 작게 앱 크기를 조정할 수
-없는지 확인합니다.
- </li>
-
- <li>모든 테스트를 통해 앱의 성능이 적절한지 확인합니다. 예를 들어,
-앱 크기를 조정한 후 UI를 업데이트하기에 지연이
-너무 길지 않은지 확인합니다.
- </li>
-</ul>
-
-<h4 id="test-checklist">테스트 검사 목록</h4>
-
-<p>
- 다중 창 모드에서 앱의 성능을 확인하려면, 다음
-작업을 시도해 보세요. 별다른 설명이 없는 한, 화면 분할 및 다중 창 모드
-에서 모두 이들 작업을 시도해야 합니다.
-</p>
-
-<ul>
- <li>다중 창 모드에 들어갔다 나갑니다.
- </li>
-
- <li>자신의 앱에서 다른 앱으로 전환하고, 앱이 표시는 되지만
-활성화되지 않은 동안에 적절히 동작하는지 확인합니다. 예를 들어, 앱이 동영상을 재생 중인 경우, 사용자가
-다른 앱과 상호작용하는 동안에 이 동영상이 계속 재생되는지
-확인합니다.
- </li>
-
- <li>화면 분할 모드에서, 분할선을 이동하여 앱을 더 크거나
-작게 만들어 봅니다. 앱을 나란히 또는 상하로 놓은 구성에서 이러한
-작업을 시도해 봅니다. 앱의 작동이 중단되지 않는지, 필수 기능이
-표시되는지, 그리고 크기 조정 작업이 너무 오래 걸리지 않는지
-확인합니다.
- </li>
-
- <li>빠르게 연속해서 여러 가지 크기 조정 작업을 수행합니다. 앱의 작동이 중단되거나 메모리가 누수되지
-않는지 확인합니다. 앱의 메모리 사용량을 확인하는
-방법에 대해서는 <a href="{@docRoot}tools/debugging/debugging-memory.html">RAM 사용량
-검사</a>를 참조하세요.
- </li>
-
- <li>여러 가지 다른 창 구성에서 앱을 정상적으로
-사용하고, 이 앱이 제대로 작동하는지 확인합니다. 텍스트를 읽을 수 있는지 확인하고, 해당
-UI 요소가 상호작용하기에 너무 작지 않은지 확인합니다.
- </li>
-</ul>
-
-<h3 id="test-disabled-mw">다중 창 지원을 비활성화한 경우</h3>
-
-<p>
- <code>android:resizableActivity="false"</code>를 설정하여
-다중 창 지원을 비활성화한 경우, Android N을 실행 중인 기기에서
-앱을 시작해야 하며, 앱을 자유형식 및 화면
-분할 모드로 둬야 합니다. 이 때 앱이 전체 화면 모드에 남아있는지
-확인하세요.
-</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/ko/preview/features/picture-in-picture.jd b/docs/html-intl/intl/ko/preview/features/picture-in-picture.jd
deleted file mode 100644
index bc6ec62..0000000
--- a/docs/html-intl/intl/ko/preview/features/picture-in-picture.jd
+++ /dev/null
@@ -1,213 +0,0 @@
-page.title=PIP
-page.keywords=preview, sdk, PIP, Picture-in-picture
-page.tags=androidn
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>이 문서의 내용</h2>
-<ol>
- <li><a href="#declaring">액티비티의
-PIP 지원 선언</a></li>
- <li><a href="#pip_button">액티비티를 PIP로 전환</a>
-</li>
- <li><a href="#handling_ui">PIP에서 UI 처리</a>
-</li>
- <li><a href="#continuing_playback">
-PIP에서 동영상 재생 계속</a></li>
- <li><a href="#single_playback">PIP를 위한 단일 재생 액티비티
-사용</a></li>
- <li><a href="#best">모범 사례</a></li>
-</ol>
-
-<h2>참고 항목</h2>
-<ol>
- <li><a href="{@docRoot}preview/features/multi-window.html">다중 창
-지원</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>Android N에서 Android TV 사용자는
-앱 안에서 탐색할 때 화면 모서리의 고정 창에서
-동영상을 볼 수 있습니다. PIP(Picture-In-Picture) 모드를 사용하면
-앱의 백그라운드에서 다른 액티비티를 계속하면서
-고정 창에서 동영상 액티비티를 실행할 수 있습니다. PIP 창에서 사용자는 앱을 사용하는 동안 멀티태스킹이 가능하므로
-생산성이 향상됩니다.</p>
-
-<p>앱이 PIP 모드를 실행할 시기를 결정할 수 있습니다. PIP 모드로 전환하는 시기와 관련된 몇 가지
-예시는 다음과 같습니다.</p>
-
-<ul>
-<li>사용자가 동영상에서 다른 콘텐츠를 탐색하러 이동할 때 앱이
-동영상을 PIP 모드로 전환할 수 있습니다.</li>
-<li>사용자가 콘텐츠 에피소드의 끝부분을 볼 때 앱이
-동영상을 PIP 모드로 전환할 수 있습니다. 메인 화면은 시리즈 다음 에피소드의
-홍보 또는 요약 정보를 표시합니다.</li>
-<li>사용자가 동영상을 보는 동안 앱이
-추가 콘텐츠를 대기열에 올릴 수 있는 방법을 제공할 수 있습니다. 메인 화면에 콘텐츠 선택 액티비티가 표시되는 동안
-동영상이 PIP 모드에서 계속 재생됩니다.</li>
-</ul>
-
-<p>PIP 창은 240x135dp이고
-화면 모서리 4개 중 하나에서 가장 위쪽 레이어에 표시되며, 시스템이 선택합니다. 사용자는
-리모컨의 <b>Home</b> 버튼을 눌러
-PIP 창을 전체 화면으로 전환하거나 PIP를 닫는 PIP 메뉴를 불러올 수 있습니다. 다른 동영상이
-메인 화면에서 재생되기 시작하면 PIP 창이
-자동으로 닫힙니다. 사용자가 Recents를 통해서 PIP 창을 닫을 수도 있습니다.</p>
-
-<img src="{@docRoot}preview/images/pip-active.png" />
-<p class="img-caption"><strong>그림 1.</strong> 사용자가 메인 화면에서 콘텐츠를 탐색하는 동안
-화면 모서리에 표시되는 PIP 동영상.
-</p>
-
-<p>PIP는 Android N에서 사용할 수 있는 다중 창 API를 사용하여
-고정된 동영상 오버레이 창을 제공합니다. 앱에 PIP를 추가하려면
-PIP를 지원하는 액티비티를 등록하고 필요한 경우 액티비티를 PIP 모드로 전환해야 합니다. 또한
-액티비티가 PIP 모드에 있을 때 UI 요소가 숨겨지고 동영상 재생이
-계속되는지 확인해야 합니다.</p>
-
-<h2 id="declaring">액티비티의 PIP 지원 선언</h2>
-
-<p>기본적으로 시스템은 앱에 대해 PIP를 자동으로 지원하지 않습니다.
-앱에서 PIP를 지원하려면
-<code>android:supportsPictureInPicture</code>와
-<code>android:resizeableActivity</code>를 <code>true</code>로 설정하여 매니페스트에서 동영상 액티비티를
-등록합니다. 또한,
-PIP 모드 전환 시 레이아웃 변경이 일어날 때 액티비티가 다시 시작되지 않도록
-액티비티가 레이아웃 구성 변화를 처리하게 지정합니다.</p>
-
-<pre>
-<activity android:name="VideoActivity"
- android:resizeableActivity="true"
- android:supportsPictureInPicture="true"
- android:configChanges=
- "screenSize|smallestScreenSize|screenLayout|orientation"
- ...
-</pre>
-
-<p>액티비티를 등록할 때는 PIP 모드에서
-액티비티가 TV 화면의 작은 오버레이 창에 표시된다는 것을 기억하세요. 최소 UI를 포함한
-동영상 재생 액티비티가 가장 좋은 사용자 환경을 제공합니다. 작은 UI 요소를 포함한
-액티비티는 PIP 모드로 전환할 때
-사용자가 PIP 창의 UI 요소를 상세히 볼 수 없으므로
-좋은 사용자 환경을 제공하지 못할 수 있습니다.</p>
-
-<h2 id="pip_button">액티비티를 PIP로 전환</h2>
-
-액티비티를 PIP 모드로 전환해야 하는 경우
-<code>Activity.enterPictureInPictureMode()</code>를 호출합니다. 다음 예에서는 사용자가
-미디어 컨트롤 막대에서 전용 PIP 버튼을 선택했을 때
-PIP 모드로 전환합니다.</p>
-
-<pre>
-@Override
-public void onActionClicked(Action action) {
- if (action.getId() == R.id.lb_control_picture_in_picture) {
- getActivity().enterPictureInPictureMode();
- return;
- }
- ...
-</pre>
-
-<p>미디어 컨트롤 막대에 PIP 버튼을 추가하면
-사용자가 동영상 재생을 제어하면서 PIP 모드로 쉽게 전환할 수 있습니다.</p>
-
-<img src="{@docRoot}preview/images/pip-button.png" />
-<p class="img-caption"><strong>그림 1.</strong> 미디어 컨트롤 막대의 PIP
-버튼.</p>
-
-<p>Android N에는 컨트롤 막대 PIP 동작을 정의하고 PIP 아이콘을 사용하는 새로운
-<code>PlaybackControlsRow.PictureInPictureAction</code> 클래스가 포함되어 있습니다.
-</p>
-
-<h2 id="handling_ui">PIP에서 UI 처리</h2>
-
-<p>액티비티가 PIP 모드로 전환되면
-동영상 재생만 표시됩니다. 액티비티가 PIP 모드로 전환되기 전에 UI 요소를 제거하고
-액티비티가 다시 전체 화면이 되었을 때 이 요소를 복원합니다.
-필요에 따라 <code>Activity.onPictureInPictureModeChanged()</code> 또는
-<code>Fragment.onPictureInPictureModeChanged()</code>를 재정의하고
-UI 요소를 활성화/비활성화합니다. 예를 들면 다음과 같습니다.</p>
-
-<pre>
-@Override
-public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
- if (isInPictureInPictureMode) {
- // Hide the controls in picture-in-picture mode.
- ...
- } else {
- // Restore the playback UI based on the playback status.
- ...
- }
-}
-</pre>
-
-<h2 id="continuing_playback">PIP에서 동영상 재생 계속
-</h2>
-
-<p>액티비티가 PIP 모드로 전환되면 시스템은
-액티비티가 일시 정지된 상태에 있다고 간주하고 액티비티의 <code>onPause()</code> 메서드를 호출합니다. 동영상
-재생은 일시 정지되어서는 안되며 PIP 모드로 인해 액티비티가 일시 정지되었다면
-계속 재생되어야 합니다. 액티비티의
-<code>onPause()</code> 메서드에서 PIP를 확인하고 적절히 재생을 처리합니다. 예를 들면 다음과 같습니다.
-</p>
-
-<pre>
-@Override
-public void onPause() {
- // If called while in PIP mode, do not pause playback
- if (isInPictureInPictureMode()) {
- // Continue playback
- ...
- }
- // If paused but not in PIP, pause playback if necessary
- ...
-}
-</pre>
-
-<p>액티비티가 PIP 모드에서 전체 화면 모드로 전환되면
-시스템이 액티비티를 재시작하고 <code>onResume()</code> 메서드를 호출합니다.</p>
-
-<h2 id="single_playback">PIP를 위한 단일 재생 액티비티
-사용</h2>
-
-<p>동영상 재생 액티비티가 PIP 모드에 있는 동안, 앱에서
-사용자가 메인 화면에서 콘텐츠를 찾아볼 때 새 동영상을 선택할 수도 있습니다. 이 때 새 액티비티를 시작하면
-사용자에게 혼동을 줄 수 있으므로, 새 액티비티를 시작하는 대신
-기존 재생 액티비티에서 새 동영상을 전체 화면 모드로 재생합니다.</p>
-
-<p>동영상 재생 요청에 단일 액티비티가 사용되도록 하고
-필요에 따라 PIP 모드로 들어가거나 PIP 모드에서 나오도록 하려면, 매니페스트에서 액티비티의
-<code>android:launchMode</code>를 <code>singleTask</code>로 설정합니다.
-</p>
-
-<pre>
-<activity android:name="VideoActivity"
- ...
- android:supportsPictureInPicture="true"
- android:launchMode="singleTask"
- ...
-</pre>
-
-<p>액티비티에서 {@link android.app.Activity#onNewIntent
-Activity.onNewIntent()}를 재정의하고 새 동영상을 처리하며, 필요한 경우 기존 동영상
-재생을 중단시키세요.</p>
-
-<h2 id="best">모범 사례</h2>
-
-<p>PIP는 전체 화면 동영상을 재생하는 액티비티용입니다. 액티비티를
-PIP 모드로 전환할 때는 동영상 콘텐츠만 표시하세요.
-<a href="#handling_ui">PIP에서 UI 처리</a>에서 설명한 바와 같이 액티비티가 PIP 모드로 전환되는 때를
-추적하고 UI 요소를 숨깁니다.</p>
-
-<p>PIP 창이 화면 모서리에 떠 있는 창으로 표시되므로
-PIP 창으로 가려질 수 있는 영역에는 메인 화면에서
-중요한 정보를 표시하지 말아야 합니다.</p>
-
-<p>액티비티가 PIP 모드일 때는 기본적으로 입력 포커스를 받지 않습니다. PIP 모드에서
-입력 이벤트를 수신하려면
-<code>MediaSession.setMediaButtonReceiver()</code>를 사용합니다.</p>
diff --git a/docs/html-intl/intl/ko/preview/features/scoped-folder-access.jd b/docs/html-intl/intl/ko/preview/features/scoped-folder-access.jd
deleted file mode 100644
index 2fe02b1..0000000
--- a/docs/html-intl/intl/ko/preview/features/scoped-folder-access.jd
+++ /dev/null
@@ -1,148 +0,0 @@
-page.title=범위가 지정된 디렉터리 액세스
-page.keywords=preview, sdk, 범위가 지정된 디렉터리 액세스
-page.tags=androidn
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>이 문서의 내용</h2>
- <ol>
- <li><a href="#accessing">외부 저장소 디렉터리 액세스</a></li>
- <li><a href="#removable">이동식 미디어의 디렉터리 액세스</a></li>
- <li><a href="#best">모범 사례</a></li>
- </ol>
-</div>
-</div>
-
-<p>일반적으로 사진 앱과 같은 앱은
-<code>Pictures</code> 디렉터리 등 외부 저장소의 특정 디렉터리에만 액세스하면 됩니다. 기존 외부 저장소 액세스 방식은
-이런 유형의 앱에 대상화된 디렉터리 액세스를 쉽게
-제공하지 못합니다. 예를 들면 다음과 같습니다.</p>
-
-<ul>
-<li>매니페스트에서 {@link android.Manifest.permission#READ_EXTERNAL_STORAGE}
-또는 {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE}를 요청하면
-외부 저장소의 모든 공개 디렉터리에 액세스할 수 있습니다.
-이는 앱에 필요한 것보다 과도한 액세스를 제공할 수 있습니다.</li>
-<li>일반적으로,
-<a href="{@docRoot}guide/topics/providers/document-provider.html">저장소
-액세스 프레임워크</a>를 사용하면 시스템 UI를 통해 사용자가 디렉터리를
-선택할 수 있습니다. 앱이 항상 동일한 외부 디렉터리에 액세스한다면
-필요 없는 동작입니다.</li>
-</ul>
-
-<p>Android N은 일반 외부 저장소 디렉터리에 액세스하기 위한
-단순화된 새로운 API를 제공합니다. </p>
-
-<h2 id="accessing">외부 저장소 디렉터리 액세스</h2>
-
-<p><code>StorageManager</code> 클래스를 사용하여 적절한
-<code>StorageVolume</code> 인스턴스를 가져옵니다. 그 후, 해당 인스턴스의
-<code>StorageVolume.createAccessIntent()</code> 메서드를 호출하여 인텐트를 생성합니다.
-이 인텐트로 외부 저장소 디렉터리에 액세스합니다. 이동식 미디어 볼륨을 비롯한
-모든 사용 가능한 볼륨의 목록을 가져오려면
-<code>StorageManager.getVolumesList()</code>를 사용합니다.</p>
-
-<p>특정 파일에 대한 정보가 있으면
-<code>StorageManager.getStorageVolume(File)</code>을 사용하여 해당 파일이 들어 있는
-<code>StorageVolume</code>을 가져옵니다. 이 <code>StorageVolume</code>에서
-<code>createAccessIntent()</code>를 호출하여 파일의 외부 저장소 디렉터리에
-액세스합니다.</p>
-
-<p>
-외부 SD 카드와 같은 보조 볼륨에서는 특정 디렉터리 대신 전체 볼륨에 대한 액세스를 요청하려면
-<code>StorageVolume.createAccessIntent()</code>를 호출할 때
-null을 전달합니다. 기본 볼륨에 null을 전달하거나 잘못된 디렉터리 이름을 전달하는 경우
-<code>StorageVolume.createAccessIntent()</code>는 null을
-반환합니다.
-</p>
-
-<p>다음 코드 조각은 기본 공유 저장소에서
-<code>Pictures</code> 디렉터리를 여는 방법에 대한 예시입니다.</p>
-
-<pre>
-StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
-StorageVolume volume = sm.getPrimaryVolume();
-Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
-startActivityForResult(intent, request_code);
-</pre>
-
-<p>시스템이 외부 디렉터리에 액세스 권한을 부여하고자 시도하고,
-필요에 따라 단순화된 UI를 사용하는 사용자의 액세스를 확인합니다.</p>
-
-<img src="{@docRoot}preview/images/scoped-folder-access-framed.png" srcset="{@docRoot}preview/images/scoped-folder-access-framed.png 1x,
-{@docRoot}preview/images/scoped-folder-access-framed_2x.png 2x" />
-<p class="img-caption"><strong>그림 1.</strong> Pictures 디렉터리에
-액세스를 요청하는 애플리케이션.</p>
-
-<p>사용자가 액세스 권한을 부여하면, 시스템이
-<code>Activity.RESULT_OK</code>의 결과 코드가 포함된
-<code>onActivityResult()</code> 재정의와 URI가 포함된 인텐트 데이터를 호출합니다. 제공된
-URI를 사용하여 디렉터리 정보에 액세스합니다.
-<a href="{@docRoot}guide/topics/providers/document-provider.html">저장소
-액세스 프레임워크</a>가
-반환한 URI를 사용하는 것과 유사합니다.</p>
-
-<p>사용자가 액세스 권한을 부여하지 않으면 시스템이
-<code>Activity.RESULT_CANCELED</code>의 결과 코드가 포함된
-<code>onActivityResult()</code> 재정의와 null 인텐트 데이터를 호출합니다.</p>
-
-<p class="note"><b>참고</b>: 특정 외부 디렉터리에 대한 액세스 권한을 얻으면
-해당 디렉터리의 하위 디렉터리에 대한 액세스 권한도 얻게 됩니다.</p>
-
-<h2 id="removable">이동식 미디어의 디렉터리 액세스</h2>
-
-<p>범위가 지정된 디렉터리 액세스를 사용하여 이동식 미디어의 디렉터리에 액세스하려면
-먼저 다음과 같은
-{@link android.os.Environment#MEDIA_MOUNTED} 알림을 수신하는 {@link android.content.BroadcastReceiver}를 추가합니다.</p>
-
-<pre>
-<receiver
- android:name=".MediaMountedReceiver"
- android:enabled="true"
- android:exported="true" >
- <intent-filter>
- <action android:name="android.intent.action.MEDIA_MOUNTED" />
- <data android:scheme="file" />
- </intent-filter>
-</receiver>
-</pre>
-
-<p>사용자가 SD 카드 등의 이동식 미디어를 장착하면 시스템이
-{@link android.os.Environment#MEDIA_MOUNTED} 알림을 보냅니다. 이 알림은
-이동식 미디어 디렉터리에 액세스하는 데 사용할 수 있는 인텐트 데이터의 <code>StorageVolume</code> 객체를
-제공합니다. 다음은
-이동식 미디어의 <code>Pictures</code> 디렉터리에 액세스하는 예시입니다.</p>
-
-<pre>
-// BroadcastReceiver has already cached the MEDIA_MOUNTED
-// notification Intent in mediaMountedIntent
-StorageVolume volume = (StorageVolume)
- mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
-volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
-startActivityForResult(intent, request_code);
-</pre>
-
-<h2 id="best">모범 사례</h2>
-
-<p>가능하면, 사용자에게 액세스 권한을 반복적으로 요청하지 않도록 외부 디렉터리 액세스 URI를
-변경하지 마세요. 사용자가 액세스 권한을 부여하면 디렉터리 액세스 URI로
-<code>getContentResolver().takePersistableUriPermssion()</code>를
-호출합니다. 시스템이 URI를 유지하고 이후 액세스 요청에서는
-<code>RESULT_OK</code>를 반환하고 사용자에게 확인 UI를
-표시하지 않습니다.</p>
-
-<p>사용자가 외부 디렉터리 액세스를 거부하면
-다시 즉시 액세스를 요청하지 마세요. 액세스를 반복적으로 요청하면
-사용자 환경을 저해하는 결과를 낳습니다. 사용자가 요청을 거부하는데 앱이 다시 액세스를
-요청하면, UI에 <b>Don't ask again</b> 체크박스가 표시됩니다.</p>
-
-<img src="{@docRoot}preview/images/scoped-folder-access-dont-ask.png" srcset="{@docRoot}preview/images/scoped-folder-access-dont-ask.png 1x,
-{@docRoot}preview/images/scoped-folder-access-dont-ask_2x.png 2x" />
-<p class="img-caption"><strong>그림 1.</strong> 이동식 미디어에 대해
-다시 액세스 요청을 하는 애플리케이션.</p>
-
-<p>사용자가 <b>Don't ask again</b>을 선택하여 요청을 거부하면 앱에서 해당 디렉터리에 대한 이후의 모든
-요청이 자동으로 거부되고,
-사용자에게는 어떤 요청 UI도 표시되지 않습니다.</p>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ko/preview/features/security-config.jd b/docs/html-intl/intl/ko/preview/features/security-config.jd
deleted file mode 100644
index 7e3f951..0000000
--- a/docs/html-intl/intl/ko/preview/features/security-config.jd
+++ /dev/null
@@ -1,747 +0,0 @@
-page.title=네트워크 보안 구성
-page.keywords=androidn, 보안, 네트워크
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>이 문서의 내용</h2>
-<ol>
- <li><a href="#manifest">보안 구성 파일 추가</a></li>
- <li><a href="#CustomTrust">신뢰할 수 있는 CA 사용자 지정</a>
- <ol>
- <li><a href="#ConfigCustom">신뢰할 수 있는 사용자 지정 CA 구성</a></li>
- <li><a href="#LimitingCas">신뢰할 수 있는 CA 세트 제한</a></li>
- <li><a href="#TrustingAdditionalCas">추가 CA 신뢰</a></li>
- </ol>
- </li>
- <li><a href="#TrustingDebugCa">디버그 전용 CA</a></li>
- <li><a href="#UsesCleartextTraffic">일반 텍스트 트래픽 옵트아웃</a></li>
- <li><a href="#CertificatePinning">인증서 고정</a></li>
- <li><a href="#ConfigInheritance">구성 상속 동작</a></li>
- <li><a href="#FileFormat">구성 파일 형식</a></li>
-</ol>
-</div>
-</div>
-
-
-<p>
- Android N에는 앱 코드를 수정하지 않고 앱이 안전한 선언
-구성 파일에서 네트워크 보안 설정을 사용자 지정할 수 있는
-네트워크 보안 구성 기능이 포함되어 있습니다. 이 설정은
-특정 도메인과 특정 앱에 대해 구성할 수 있습니다. 이 기능의
-핵심 기능:
-</p>
-
-<ul>
- <li>
- <b>사용자 지정 신뢰 앵커:</b> 앱의 보안 연결에 대해 신뢰할 수 있는 인증 기관(CA)을
-사용자 지정합니다. 예를 들어,
-특정한 자체 서명 인증서를 신뢰하거나
-앱이 신뢰하는 공개 CA 세트를 제한합니다.
- </li>
-
- <li>
- <b>디버그 전용 재정의:</b> 설치된 기반에 위험을 더하지 않고도, 앱의 보안 연결을 안전하게
-디버그할 수 있습니다.
- </li>
-
- <li>
- <b>일반 텍스트 트래픽 옵트아웃:</b> 일반 텍스트 트래픽을 실수로 사용하지
-않도록 앱을 보호합니다.
- </li>
-
- <li>
- <b>인증서 고정:</b> 앱의 안전한 연결을 특정 인증서로
-제한합니다.
- </li>
-</ul>
-
-
-<h2 id="manifest">보안 구성 파일 추가</h2>
-
-<p>
- 네트워크 보안 구성 기능은 XML 파일을 사용해서
-앱의 설정을 지정합니다. 앱 매니페스트에 이 파일을 가리키는 항목을
-포함해야 합니다. 매니페스트에서 발췌한 다음 코드는
-이 항목을 생성하는 방법을 보여줍니다.
-</p>
-
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<manifest ... >
- <application ... >
- <meta-data android:name="android.security.net.config"
- android:resource="@xml/network_security_config" />
- ...
- </application>
-</manifest>
-</pre>
-
-<h2 id="CustomTrust">신뢰할 수 있는 CA 사용자 지정</h2>
-
-<p>
- 앱에서 플랫폼 기본값 대신 사용자 지정 CA 세트를
-신뢰하고자 할 수 있습니다. 가장 일반적인 이유는 다음과 같습니다.
-</p>
-
-<ul>
- <li>사용자 지정 인증 기관(자체 서명한 인증서,
-국제 기업 CA에서 발급한 인증서 등)을 포함한 호스트에 연결.
- </li>
-
- <li>모든 사전 설치된 CA 대신 신뢰할 수 있는 CA로만
-CA 세트를 제한.
- </li>
-
- <li>시스템에 포함되지 않은 추가 CA 신뢰.
- </li>
-</ul>
-
-<p>
- 기본적으로 모든 앱으로부터 안전한(예: TLS, HTTPS) 연결은 사전 설치된 시스템 CA를 신뢰하고,
-API 레벨 23(Android M)
-이하를 대상으로 하는 앱도 사용자가 추가한 CA 저장소를 기본적으로 신뢰합니다. 앱은
-{@code base-config}(앱
-전체 사용자 지정) 또는 {@code domain-config}(도메인별
-사용자 지정)를 사용하여 연결을 사용자 지정할 수 있습니다.
-</p>
-
-
-<h3 id="ConfigCustom">사용자 지정 CA 구성</h3>
-
-<p>
- 자체 서명된
-인증서를 사용하는 호스트나 신뢰할 수 있는 비공개 CA(예: 사내 CA)에서 발급한 SSL 인증서를 사용하는 호스트에
-연결할 경우를 가정합시다.
-</p>
-
-<p>
- <code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">example.com</domain>
- <trust-anchors>
- <certificates src="@raw/my_ca"/>
- </trust-anchors>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-<p>
- 자체 서명된 인증서 또는 비공개 CA 인증서를 PEM 또는 DER 형식으로
-{@code res/raw/my_ca}에 추가합니다.
-</p>
-
-
-<h3 id="LimitingCas">신뢰할 수 있는 CA 세트 제한</h3>
-
-<p>
- 앱에서 시스템이 신뢰하는 CA 중 일부를 신뢰하지 않으려면, 대신
-신뢰할 CA 세트를 줄여서 지정할 수 있습니다. 이 방법은
-다른 CA에서 발급된 허위 인증서로부터 앱을 보호해줍니다.
-</p>
-
-<p>
- 신뢰할 수 있는 CA 세트를 제한하는 구성은 특정 도메인에서 <a href="#TrustingACustomCa">사용자 지정 CA를 신뢰</a>하는 것과 비슷하지만
-여러 CA가 리소스에서 제공된다는 점이 다릅니다.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">secure.example.com</domain>
- <domain includeSubdomains="true">cdn.example.com</domain>
- <trust-anchors>
- <certificates src="@raw/trusted_roots"/>
- </trust-anchors>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-<p>
- 신뢰할 수 있는 CA를 PEM 또는 DER 형식으로 {@code res/raw/trusted_roots}에 추가합니다.
- PEM 형식을 사용할 경우 파일에 PEM 데이터<em>만</em> 포함되고
-다른 추가 텍스트가 포함되어서는 안 됩니다. 또한 한 개가 아니라 여러 개의
-<a href="#certificates"><code><certificates></code></a>
-요소를 제공할 수 있습니다.
-</p>
-
-
-<h3 id="TrustingAdditionalCas">
- 추가 CA 신뢰
-</h3>
-
-<p>
- 앱에서 시스템이 신뢰하지 않는 CA를 신뢰하고자 한다면,
-이는 시스템에 해당 CA가 아직 포함되지 않았거나 CA가 Android 시스템에 포함되기 위한
-요구사항을 충족하지 못했기 때문일 수 있습니다. 앱은
-구성에 대해 여러 개의 인증서 소스를 지정하여
-신뢰할 수 있는 CA를 추가할 수 있습니다.
-</p>
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <base-config>
- <trust-anchors>
- <certificates src="@raw/extracas"/>
- <certificates src="system"/>
- </trust-anchors>
- </base-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="TrustingDebugCa">디버그용 CA 구성</h2>
-
-<p>
- HTTPS로 연결되는 앱을 디버그할 때
-프로덕션 서버에 SSL 인증서가 없는 로컬 개발 서버로
-연결하고자 할 수도 있습니다. 앱 코드를 수정하지 않고 이 기능을 지원하려면,
-{@code debug-overrides}를
-사용하여 <i>오직</i> <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">
-android:debuggable</a>
-이 {@code true}일 때만 신뢰할 수 있는 디버그 전용 CA를 지정할 수 있습니다. 일반적으로 IDE 및 빌드 도구는 비 릴리스 빌드에 대해
- 이 플래그를 자동으로 설정합니다.
-</p>
-
-<p>
- 보안 예방 조치로 앱 스토어에서
-디버그 가능으로 표시된 앱은 허용하지 않기 때문에
-일반적인 조건 코드보다 안전합니다.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <debug-overrides>
- <trust-anchors>
- <certificates src="@raw/debug_cas"/>
- </trust-anchors>
- </debug-overrides>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="UsesCleartextTraffic">일반 텍스트 트래픽 옵트아웃</h2>
-
-<p>
- 보안 연결만 사용하여 대상에 연결하는 애플리케이션은 해당
-대상에 대해 일반 텍스트를 지원하는 기능(HTTPS 대신 암호화되지 않은 HTTP
-프로토콜 사용)을 옵트아웃할 수 있습니다. 이 옵션은
-백엔드 서버 등의 외부 소스가 제공하는 URL의 변경 사항으로 인해
-앱에서 우연히 회귀가 일어나지 않도록 예방합니다.
- 자세한 내용은 {@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted
- NetworkSecurityPolicy.isCleartextTrafficPermitted()}를 참조하세요.
-</p>
-
-<p>
- 예를 들어, 앱에서 적대적 네트워크로부터 민감한 트래픽을 보호하기 위해 {@code
- secure.example.com}에 대한 연결은 항상 HTTPS를 통해서만 수행되도록
-할 수 있습니다.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config usesCleartextTraffic="false">
- <domain includeSubdomains="true">secure.example.com</domain>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="CertificatePinning">인증서 고정</h2>
-
-<p>
- 일반적으로 앱은 모든 사전 설치된 CA를 신뢰합니다. 이러한 CA에서
-허위 인증서를 발급한다면 앱이 MiTM
-공격에 노출될 위험이 있습니다. 일부 앱은 신뢰하는 CA 세트를 제한하거나
-인증서를 고정하는 방식으로 허용하는 인증서 세트를 제한합니다.
-</p>
-
-<p>
- 인증서 고정은
-공개 키 해시(X.509인증서의 SubjectPublicKeyInfo)로 인증서 세트를 제공하는 방식으로 수행됩니다. 그러면 인증서 체인에
-하나 이상의 고정된 공개 키가 있어야만
-인증서 체인이 유효합니다.
-</p>
-
-<p>
- 인증서 고정을 사용할 때는 언제나 백업 키를 포함해야
-새로운 키로 강제 전환하거나 CA를 변경할 경우(
-CA 인증서 또는 해당 CA의 중간 CA에 고정할 경우)
-앱 연결이 영향을 받지 않습니다. 그렇지 않으면
-연결을 복구하기 위해 앱에 업데이트를 내보내야 합니다.
-</p>
-
-<p>
- 또한, 고정을 수행하지 않게 되면 핀 만료 시간을
-설정할 수 있습니다. 이는 업데이트되지 않은 앱에서
-연결 문제를 예방해 줍니다. 그러나 핀에 만료 시간을 설정하면
-고정 우회가 가능할 수도 있습니다.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">example.com</domain>
- <pin-set expiration="2018-01-01">
- <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
- <!-- backup pin -->
- <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
- </pin-set>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="ConfigInheritance">구성 상속 동작</h2>
-
-<p>
- 특정 구성에서 설정되지 않은 값을 상속합니다. 이 동작은 구성 파일을 읽을 수 있게 유지하면서도
-더욱 복잡한 구성이 가능합니다.
-</p>
-
-<p>
- 특정 항목에 값이 설정되지 않았다면
-그 다음으로 일반적인 항목의 값이 사용됩니다. {@code domain-config}에서 설정되지 않은 값은
-중첩될 경우 상위 {@code domain-config}에서 가져오고 그렇지 않을 경우 {@code
- base-config}에서 가져옵니다. {@code base-config}에서 설정되지 않은 값은
-플랫폼 기본값을 사용합니다.
-</p>
-
-<p>
- 예를 들어, {@code
- example.com}의 하위 도메인에 대한 모든 연결은 사용자 지정 CA 세트를 사용해야 합니다. 또한, 이러한 도메인에 대한 일반 텍스트 트래픽은
-{@code
- secure.example.com}에 연결할 때를 <em>제외</em>하고 허용됩니다. {@code example.com} 구성 내부에 {@code
- secure.example.com} 구성을 중첩하면
-{@code trust-anchors}를 복제하지 않아도 됩니다.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">example.com</domain>
- <trust-anchors>
- <certificates src="@raw/my_ca"/>
- </trust-anchors>
- <domain-config cleartextTrafficPermitted="false">
- <domain includeSubdomains="true">secure.example.com</domain>
- </domain-config>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="FileFormat">구성 파일 형식</h2>
-
-<p>
- 네트워크 보안 구성 기능은 XML 파일 형식을 사용합니다.
- 파일의 전반적 구조는 다음 코드 샘플에 나타나 있습니다.
-</p>
-
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <base-config>
- <trust-anchors>
- <certificates src="..."/>
- ...
- </trust-anchors>
- </base-config>
-
- <domain-config>
- <domain>android.com</domain>
- ...
- <trust-anchors>
- <certificates src="..."/>
- ...
- </trust-anchors>
- <pin-set>
- <pin digest="...">...</pin>
- ...
- </pin-set>
- </domain-config>
- ...
- <debug-overrides>
- <trust-anchors>
- <certificates src="..."/>
- ...
- </trust-anchors>
- </debug-overrides>
-</network-security-config>
-</pre>
-
-<p>
- 다음 섹션에서는 이 파일 형식의 구문과
-기타 세부 정보를 설명합니다.
-</p>
-
-<h3 id="network-security-config">
- <network-security-config>
-</h3>
-
-<dl class="xml">
- <dt>
- 다음을 포함할 수 있습니다.
- </dt>
-
- <dd>
- <code><a href="#base-config"><base-config></a></code> 0 또는 1개<br>
- <code><a href=
- "#domain-config"><domain-config></a></code> 임의의 개수<br>
- <code><a href="#debug-overrides"><debug-overrides></a></code> 0 또는 1개
- </dd>
-</dl>
-
-<h3 id="base-config">
- <base-config>
-</h3>
-
-<dl class="xml">
- <dt>
- 구문:
- </dt>
-</dl>
-
-<pre class="stx">
-<base-config <a href=
-"#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
- ...
-</base-config>
-</pre>
-<dl class="xml">
- <dt>
- 다음을 포함할 수 있습니다.
- </dt>
-
- <dd>
- <code><a href="#trust-anchors"><trust-anchors></a></code>
- </dd>
-
- <dt>
- 설명:
- </dt>
-
- <dd>
- 대상이
-<a href="#domain-config"><code>domain-config</code></a>에 포함되지 않는 모든 연결에서 사용하는 기본 구성.
-
-<p>
- 설정되지 않은 값은 플랫폼 기본값을 사용합니다. API 레벨 24 이상을 대상으로 하는
-앱의 기본 구성:
-</p>
-
-<pre>
-<base-config usesCleartextTraffic="true">
- <trust-anchors>
- <certificates src="system" />
- </trust-anchors>
-</base-config>
-</pre>
-API 레벨 23 이하를 대상으로 하는 앱의 기본 구성:
-<pre>
-<base-config usesCleartextTraffic="true">
- <trust-anchors>
- <certificates src="system" />
- <certificates src="user" />
- </trust-anchors>
-</base-config>
-</pre>
-
- </dd>
-</dl>
-
-<h3 id="domain-config"><domain-config></h3>
-<dl class="xml">
-<dt>구문:</dt>
-<dd>
-<pre class="stx"><domain-config <a href="#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
- ...
-</domain-config></pre>
-</dd>
-
-<dt>다음을 포함할 수 있습니다.</dt>
-
-<dd>
-<code><a href="#domain"><domain></a></code> 1개 이상
-<br/><code><a href="#trust-anchors"><trust-anchors></a></code> 0 또는 1개
-<br/><code><a href="#pin-set"><pin-set></code></a> 0 또는 1개
-<br/>중첩된 <code><domain-config></code> 임의의 개수</dd>
-
-<dt>설명</dt>
-<dd>{@code domain} 요소에서 정의한 특정 대상에 대한 연결에 사용되는 구성.
-
-<p>여러 {@code domain-config} 요소에서 대상을 포함하는 경우 가장 구체적인(긴)
-일치 도메인이 포함된 구성이 사용됩니다.</p></dd>
-</dl>
-
-
-<h3 id="domain"><domain></h3>
-
-<dl class="xml">
- <dt>
- 구문:
- </dt>
-
- <dd>
- <pre class="stx">
-<domain includeSubdomains=["true" | "false"]>example.com</domain>
-</pre>
- </dd>
-
- <dt>
- 속성:
- </dt>
-
- <dd>
- <dl class="attr">
- <dt>
- {@code includeSubdomains}
- </dt>
-
- <dd>
- {@code "true"}인 경우 이 도메인 규칙이 도메인 및 모든 하위 도메인(하위 도메인의 하위 도메인 포함)과
-일치합니다. 그렇지 않을 경우 이 규칙은
-정확한 일치에만 적용됩니다.
- </dd>
- </dl>
- </dd>
-
- <dt>
- 설명:
- </dt>
-</dl>
-
-<h3 id="debug-overrides"><debug-overrides></h3>
-
-<dl class="xml">
- <dt>
- 구문:
- </dt>
-
- <dd>
- <pre class="stx">
-<debug-overrides>
- ...
-</debug-overrides>
-</pre>
- </dd>
-
- <dt>
- 다음을 포함할 수 있습니다.
- </dt>
-
- <dd>
- <code><a href="#trust-anchors"><trust-anchors></a></code> 0 또는 1개
- </dd>
-
- <dt>
- 설명:
- </dt>
-
- <dd>
- <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
-가 {@code "true"}일 때 재정의를 적용합니다. 일반적으로
-IDE와 빌드 도구에서 생성한 비 릴리스 빌드에 해당합니다. {@code
- debug-overrides}에서 지정된 신뢰 앵커를 모든 다른 구성에 추가하고,
-서버의 인증서 체인이 이러한
-디버그 전용 신뢰 앵커 중 하나를 사용하면 고정을 수행하지 않습니다. <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
-이 {@code "false"}이면 이 섹션은 완전히 무시합니다.
- </dd>
-</dl>
-
-<h3 id="trust-anchors"><trust-anchors></h3>
-<dl class="xml">
- <dt>
- 구문:
- </dt>
-
- <dd>
- <pre class="stx">
-<trust-anchors>
-...
-</trust-anchors>
-</pre>
- </dd>
-
- <dt>
- 다음을 포함할 수 있습니다.
- </dt>
-
- <dd>
- <code><a href="#certificates"><certificates></a></code> 임의의 개수
- </dd>
-
- <dt>
- 설명:
- </dt>
-
- <dd>
- 보안 연결에 대한 신뢰 앵커 세트.
- </dd>
-</dl>
-
-
-<h3 id="certificates"><certificates></h3>
-<dl class="xml">
-<dt>구문:</dt>
-<dd><pre class="stx"><certificates src=["system" | "user" | "<i>raw resource</i>"]
- overridePins=["true" | "false"] />
-</pre></dd>
-<dt>설명:</dt>
-<dd>{@code trust-anchors} 요소에 대한 X.509 인증서 세트.</dd>
-
-<dt>속성:</dt>
-<dd><dl class="attr">
-<dt>{@code src}</dt>
-<dd>
-CA 인증서 소스는 다음 중 하나가 될 수 있습니다.
-<ul>
- <li>X.509 인증서를 포함한 파일을 가리키는 원시 리소스 ID.
- 인증서는 DER 또는 PEM 형식으로 암호화해야 합니다. PEM 인증서의 경우,
-파일에는 코멘트와 같은 PEM이 아닌 추가 데이터가
-포함되어서는 <em>안 됩니다</em>.
- </li>
-
- <li>사전 설치된 시스템 CA 인증서의 {@code "system"}
- </li>
-
- <li>사용자가 추가한 CA 인증서의 {@code "user"}
- </li>
-</ul>
-</dd>
-
-<dt>{@code overridePins}</dt>
-<dd>
- <p>
- 이 소스의 CA가 인증서 고정을 우회할지 지정합니다. {@code
- "true"}이고 인증서 체인이 이 소스의 CA 중 하나를 통해 묶일 경우
-고정을 수행하지 않습니다. 디버그 CA 또는
-사용자가 앱의 보안 트래픽을 MiTM하도록 지원할 때 유용합니다.
- </p>
-
- <p>
- {@code debug-overrides}
-요소에서 지정되지 않은 경우 기본값은 {@code "false"}입니다. 지정된 경우 기본값은 {@code "true"}입니다.
- </p>
-</dd>
-</dl>
-</dd>
-
-
-<h3 id="pin-set"><pin-set></h3>
-
-<dl class="xml">
- <dt>
- 구문:
- </dt>
-
- <dd>
-<pre class="stx">
-<pin-set expiration="date">
-...
-</pin-set>
-</pre>
- </dd>
-
- <dt>
- 다음을 포함할 수 있습니다.
- </dt>
-
- <dd>
- <code><a href="#pin"><pin></a></code> 임의의 개수
- </dd>
-
- <dt>
- 설명:
- </dt>
-
- <dd>
- 공개 키 핀 세트. 신뢰할 수 있는 보안 연결은
-신뢰 체인의 공개 키 중 하나가 핀 세트에 포함되어야 합니다. 핀 형식은
-<code><a href="#pin"><pin></a></code>를 참조하세요.
- </dd>
-
- <dt>
- 속성:
- </dt>
-
- <dd>
- <dl class="attr">
- <dt>
- {@code expiration}
- </dt>
-
- <dd>
- 핀 만료 당일과 그 이후의 {@code yyyy-MM-dd} 형식 날짜로,
-핀이 비활성화됩니다. 이 속성이 설정되지 않으면
-핀이 만료되지 않습니다.
- <p>
- 만료는 어떤 이유(사용자가 앱 업데이트를 비활성화)로
- PIN 세트가 업데이트되지 않는 앱에서
- 연결 문제를 예방하는 데 유용합니다.
- </p>
- </dd>
- </dl>
- </dd>
-</dl>
-
-<h3 id="pin"><pin></h3>
-<dl class="xml">
- <dt>
- 구문:
- </dt>
-
- <dd>
-<pre class="stx">
-<pin digest=["SHA-256"]>base64 encoded digest of X.509
- SubjectPublicKeyInfo (SPKI)</pin>
-</pre>
- </dd>
-
- <dt>
- 속성:
- </dt>
-
- <dd>
- <dl class="attr">
- <dt>
- {@code digest}
- </dt>
-
- <dd>
- PIN을 생성하는 데 사용된 다이제스트 알고리즘. 현재
-{@code "SHA-256"}만 지원됩니다.
- </dd>
- </dl>
- </dd>
-</dl>
diff --git a/docs/html-intl/intl/ko/preview/features/tv-recording-api.jd b/docs/html-intl/intl/ko/preview/features/tv-recording-api.jd
deleted file mode 100644
index fa557bc..0000000
--- a/docs/html-intl/intl/ko/preview/features/tv-recording-api.jd
+++ /dev/null
@@ -1,142 +0,0 @@
-page.title=TV 녹화
-page.keywords=preview, sdk, tv, 녹화
-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="#supporting">녹화 지원 나타내기</a></li>
- <li><a href="#recording">세션 녹화</a></li>
- <li><a href="#errors">녹화 오류 처리</a></li>
- <li><a href="#sessions">녹화된 세션 관리</a></li>
- <li><a href="#best">모범 사례</a></li>
- </ol>
-</div>
-</div>
-
-<p>TV 입력 서비스를 이용하면
-타임 시프팅 API를 통해 채널 재생을 일시 정지했다가 다시 시작할 수 있습니다. Android N에서는 사용자가 여러 개의 녹화된 세션을 저장할 수 있도록 함으로써
-타임 시프팅을 확장합니다.</p>
-
-<p>사용자는 미리 녹화를 예약하거나 프로그램을 보면서 녹화를
-시작할 수 있습니다. 시스템이 녹화물을 저장하면 사용자는 시스템 TV 앱을 사용하여
-녹화물을 탐색, 관리, 재생할 수 있습니다.</p>
-
-<p>TV 입력 서비스에 녹화 기능을 제공하고 싶다면,
-앱이 녹화를 지원함을 시스템에 나타내야 하고,
-프로그램 녹화 기능을 구현해야 하고, 녹화 중 발생하는 오류를 처리 및 전달해야 하고,
-녹화된 세션을 관리해야 합니다.</p>
-
-<p class="note"><strong>참고:</strong> Live Channels 앱에서는
-사용자가 녹화물을 만들거나 이에 액세스하는 방법을 아직 제공하지 않습니다. Live Channels 앱에
-대한 변경이 이루어질 때까지는, TV 입력 서비스에 대한 녹화
-환경을 완전히 테스트하기 어려울 수 있습니다.</p>
-
-<h2 id="supporting">녹화 지원 나타내기</h2>
-
-<p>TV 입력 서비스가 녹화를 지원함을 시스템에 알리려면
-서비스 메타데이터 XML 파일에서
-<code>android:canRecord</code> 속성을 <code>true</code>로 설정하세요.
-</p>
-
-<pre>
-<tv-input xmlns:android="http://schemas.android.com/apk/res/android"
- <b>android:canRecord="true"</b>
- android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />
-</pre>
-
-<p>서비스 메타데이터 파일에 대한 자세한 내용은
-<a href="{@docRoot}training/tv/tif/tvinput.html#manifest">매니페스트에서 TV 입력
-서비스 선언</a>을 참조하세요.
-</p>
-
-<p>또는 다음 단계에 따라 녹화 지원 사실을 코드에
-표시할 수 있습니다.</p>
-
-<ol>
-<li><code>TvInputService.onCreate()</code> 메서드에서 <code>TvInputInfo.Builder</code>
-클래스를 사용하여 새로운
-<code>TvInputInfo</code> 객체를 생성합니다.</li>
-<li>새로운 <code>TvInputInfo</code> 객체를 생성할 때, <code>build()</code>를 호출하기 전에
-<code>setCanRecord(true)</code>를 호출하여
-서비스가 녹화를 지원함을 나타냅니다.</li>
-<li>
-<code>TvInputManager.updateTvInputInfo()</code>를 호출하여 시스템에 <code>TvInputInfo</code> 객체를 등록합니다.</li>
-</ol>
-
-<h2 id="recording">세션 녹화</h2>
-
-<p>TV 입력 서비스가 녹화 기능을 지원하도록 등록한 후,
-시스템은 앱의 녹화 구현에 액세스해야 할 때
-<code>TvInputService.onCreateRecordingSession()</code>을 호출합니다.
- 자체적인
-<code>TvInputService.RecordingSession</code> 서브클래스를 구현하고
-<code>onCreateRecordingSession()</code> 콜백이
-실행되면 이를 반환합니다. 이 서브클래스는 정확한 채널 데이터로 전환하고,
-요청된 데이터를 녹화하고, 녹화 상태와 오류를 시스템에
-전송하는 역할을 담당합니다.</p>
-
-<p>시스템이 <code>RecordingSession.onTune()</code>을 호출하면
-채널 URI에 전달되고, URI가 지정하는 채널에 맞춰 조정됩니다.
-<code>notifyTuned()</code>를 호출해서 앱이 원하는 채널에 맞춰졌음을 시스템에 알리거나
-앱이 적절한 채널에 맞출 수 없으면
-<code>notifyError()</code>를 호출합니다.</p>
-
-<p>이어서 시스템이 <code>RecordingSession.onStartRecording()</code>
-콜백을 호출합니다. 앱이 즉시 녹화를 시작해야 합니다. 시스템이 이 콜백을 호출하면,
-녹화될 프로그램에 관한 정보가 포함된 URI를 제공할 수 있습니다.
- 녹화가 완료되면 이
-데이터를 <code>RecordedPrograms</code> 데이터 테이블에 복사해야 합니다.</p>
-
-<p>마지막으로 시스템이 <code>RecordingSession.onStopRecording()</code>을 호출합니다.
-이 시점에서 앱이 즉시 녹화를 중단해야 합니다. 또한,
-<code>RecordedPrograms</code> 테이블에서 항목을 생성해야 합니다. 이 항목에는
-<code>RecordedPrograms.COLUMN_RECORDING_DATA_URI</code> 열의 녹화된 세션 데이터 URI,
-최초
-<code>onStartRecording()</code> 호출에서 시스템이 제공한 프로그램 정보가 포함됩니다.
-</p>
-
-<p><code>RecordedPrograms</code> 테이블에 액세스하는 자세한 방법은
-<a href="#sessions">녹화된 세션 관리</a>를 참조하세요.</p>
-
-<h2 id="errors">녹화 오류 처리</h2>
-
-<p>녹화 중에 오류가 발생해서 녹화된 데이터 렌더링을 사용할 수 없을 경우,
-<code>RecordingSession.notifyError()</code>를 호출하여 시스템에 알립니다.
-마찬가지로 녹화 세션이 생성된 이후 <code>notifyError()</code>를 호출하여
-앱이 더 이상 세션을 녹화하지 못한다는 것을 시스템에 알릴 수 있습니다.</p>
-
-<p>녹화 중에 오류가 발생했지만
-사용자에게 재생 가능한 부분 녹화물을 제공하고 싶다면
-<code>RecordingSession.notifyRecordingStopped()</code>를 호출하여 시스템이
-부분 세션을 사용할 수 있게 합니다.</p>
-
-<h2 id="sessions">녹화된 세션 관리</h2>
-
-<p>시스템은 <code>TvContract.RecordedPrograms</code>
-콘텐츠 제공자 테이블에 모든 녹화 가능한 채널 앱에서 녹화된
-모든 세션에 관한 정보를 보관합니다. 이 정보는
-<code>RecordedPrograms.Uri</code> 콘텐츠 URI를 통해 액세스할 수 있습니다. 콘텐츠 제공자 API를 사용하여
-이 테이블의 항목을 읽고, 추가하고, 삭제합니다.</p>
-
-<p>콘텐츠 제공자 데이터에 관한 자세한 정보는
-<a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
-콘텐츠 제공자 기본 정보</a>를 참조하세요.</p>
-
-<h2 id="best">모범 사례</h2>
-
-<p>TV 기기는 저장소가 제한될 수 있으므로
-녹화된 세션을 저장할 저장소를 할당할 때는 신중히 판단하세요. 녹화된 세션을 저장할 공간이 부족할 때는
-<code>RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)</code>를 사용하세요.
-</p>
-
-<p>사용자가 녹화를 시작하면 최대한 빨리 데이터 녹화를
-시작해야 합니다. 이를 용이하게 하려면
-시스템이
-<code>onCreateRecordingSession()</code> 콜백을 호출할 때 저장소 액세스 및 할당 등과 같이 선행 시간이 많이 걸리는 작업을 완료합니다. 이렇게 하면
-<code>onStartRecording()</code> 콜백이
-실행될 때 즉시 녹화를 시작할 수 있습니다.</p>
diff --git a/docs/html-intl/intl/ko/preview/guide.jd b/docs/html-intl/intl/ko/preview/guide.jd
deleted file mode 100644
index d7ea7e3..0000000
--- a/docs/html-intl/intl/ko/preview/guide.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="qv-wrapper">
- <div id="qv">
- <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/preview/index.jd b/docs/html-intl/intl/ko/preview/index.jd
deleted file mode 100644
index 4b0ccc5..0000000
--- a/docs/html-intl/intl/ko/preview/index.jd
+++ /dev/null
@@ -1,131 +0,0 @@
-page.title=Android N Developer Preview
-page.tags="preview","developer"
-meta.tags="preview", "android"
-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">
- <div class="wrap" style="max-width:1100px;margin-top:0">
- <div class="cols dac-hero-content" style="padding-bottom:1em;">
-
- <div class="col-7of16 col-push-9of16" style="padding-left:2em">
- <h1 class="dac-hero-title">Android N Developer Preview</h1>
- <p class="dac-hero-description">
- Android N을 맞이할 준비를 하세요!
- Nexus와 다른 기기에서 <strong>앱을 테스트하세요</strong>. <strong>전력과 메모리를 절약</strong>하는 새로운 시스템
-동작을 지원하세요.
- <strong>다중 창 UI</strong>,
-<strong>직접 회신 알림</strong> 등으로 앱을 확장하세요.
- </p>
-
- <a class="dac-hero-cta" href="{@docRoot}preview/overview.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>-->
- </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>
- </div>
- <div class="dac-section dac-small">
- <div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/resources"
- data-cardSizes="6x2"
- data-maxResults="6"></div>
- </div>
- </div>
-</section>
-
-<div id="useUpdatedTemplates" style="display:none" 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>
- </a>
- <ul class="dac-actions">
- <li class="dac-action">
- <a class="dac-action-link" href="https://developer.android.com/preview/bug">
- <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>
- 개발자 커뮤니티 가입
- </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"
- data-query="type:blog+tag:androidn+tag:featured, type:youtube+tag:androidn+tag:featured"
- data-sortOrder="-timestamp"
- data-cardSizes="6x6"
- data-items-per-page="6"
- data-maxResults="15"
- data-initial-results="3"></div>
-</div></section>
-
-<section class="dac-section dac-gray"><div class="wrap">
- <h1 class="dac-section-title">리소스</h1>
- <div class="dac-section-subtitle">
- 앱을 Android N에서 사용할 수 있도록 준비하는 데 유용한 중요 정보입니다.
- </div>
-
- <div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/more"
- data-cardSizes="6x6"
- data-items-per-page="6"
- data-maxResults="15"
- data-initial-results="6"></div>
-
- </div>
-</section>
-
diff --git a/docs/html-intl/intl/ko/preview/license.jd b/docs/html-intl/intl/ko/preview/license.jd
deleted file mode 100644
index 875ec85..0000000
--- a/docs/html-intl/intl/ko/preview/license.jd
+++ /dev/null
@@ -1,145 +0,0 @@
-page.title=라이선스 계약
-
-@jd:body
-
-<p>
-Android SDK Preview를 시작하려면 우선 다음과 같은 사용 약관에 동의해야 합니다.
-아래에 설명한 바와 같이, 이것은 Android SDK의 프리뷰 버전이며 변경될 가능성이 있고 이를 사용하는 위험 부담은 계약자 본인에게 있음을 유의하십시오. Android SDK Preview는 안정된 릴리스가 아니며, 오류나 결함이 들어있을 수 있고 이 때문에 컴퓨터 시스템, 기기 및 데이터에 심각한 손상을 초래할 수 있습니다.
-</p>
-
-<p>
-이것은 Android SDK Preview 라이선스 계약서입니다(이하 "라이선스 계약").
-</p>
-<div class="sdk-terms" style="height:auto;border:0;padding:0;width:700px">
-1. 개요
-
-1.1 Android SDK Preview(본 라이선스 계약에서는 "Preview"라고 칭하며, 구체적으로 Android 시스템 파일, 패키지 API 및 Preview 라이브러리 파일이 사용 가능한 경우와 사용 가능해진 경우 이들 파일을 포함한 것임)는 본 라이선스 계약 조건에 따라 계약자에게 사용을 허여합니다. 본 라이선스 계약은 Preview 사용과 관련하여 계약자와 Google 간에 법적 구속력이 있는 계약을 체결합니다.
-
-1.2 "Android"는 기기를 위한 Android 소프트웨어 스택을 의미합니다. 이는 http://source.android.com/ URL에 위치하며 수시로 업데이트되는 Android 오픈 소스 프로젝트에서 제공됩니다.
-
-1.3 "Android 호환"은 (i) Android 호환성 웹사이트(http://source.android.com/compatibility)에서 찾을 수 있고 간혹 업데이트되는 Android 호환성 정의 문서를 준수하며; (ii) Android CTS(Compatibility Test Suite)를 성공적으로 통과한 모든 Android 구현을 의미합니다.
-
-1.4 "Google"은 미국 1600 Amphitheatre Parkway, Mountain View, CA 94043에 본사를 두고 있는 델라웨어주 법인인 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은 계약자에게 한정적이며 전 세계적으로 무료로 사용이 가능하고 양도할 수 없고 비독점적이며 2차 라이선스를 불허하는 Preview 사용 라이선스를 부여합니다. 이 라이선스 하에서 계약자는 Android 플랫폼에서 실행되는 애플리케이션을 개발하는 경우에만 Preview를 사용할 수 있습니다.
-
-3.2 이 Preview를 사용하여 다른 플랫폼용 애플리케이션을 개발하거나(Android 비호환 구현 포함) 다른 SDK를 개발할 수 없습니다. 물론 이 Preview가 이러한 목적에 사용되지 않는 경우 Android의 비호환 구현을 포함한 다른 플랫폼용 애플리케이션을 자유롭게 개발할 수 있습니다.
-
-3.3 계약자는 Preview에 존재하는 지적 재산권을 포함하여 Preview에 대한 모든 법적인 권리, 소유권 및 이익이 Google 또는 제3자에게 있음에 동의합니다. "지적 재산권"은 모든 특허법, 저작권법, 영업비밀법, 상표법 하의 모든 권리 및 기타 모든 소유권을 의미합니다. Google은 계약자에게 명시적으로 부여하지 않은 모든 권리를 보유합니다.
-
-3.4 본 라이선스 계약에 명시적으로 허용된 용도 외에는 Preview를 사용할 수 없습니다. 해당 제3자 라이선스 요건이 허용하는 범위를 제외하고 계약자는 Preview의 파생 제품이나 Preview의 일부분을 (a) 복사(백업 목적 제외), 수정, 개작, 재배포, 역컴파일, 리버스 엔지니어링, 분해하거나 이를 통해 파생물을 생성하거나 (b) 개인 컴퓨터를 제외한 모바일 단말기 또는 기타 모든 하드웨어 기기에 Preview의 일부를 로드하거나, Preview의 일부를 다른 소프트웨어와 결합하거나 Preview의 일부가 통합된 일체의 소프트웨어나 기기를 배포해서는 안 됩니다.
-
-3.5 오픈 소스 소프트웨어 라이선스에 의거한 Preview 구성요소의 사용, 재생산, 배포에는 본 라이선스 계약이 아닌, 해당 오픈 소스 소프트웨어 라이선스의 조건이 적용됩니다. 계약자는 허용된 모든 권한 하에서 그러한 오픈 소스 소프트웨어 라이선스에 관해 충실한 피허가자로서의 자세를 견지할 것이며 그러한 권한을 종료, 일시 중단 또는 침해하는 행위를 삼갈 것을 동의합니다.
-
-3.6 계약자는 Google이 제공하는 Preview의 형태 및 특성이 사전 통지 없이 변경될 수 있음에 동의하며, 이전 버전의 Preview에서 개발된 애플리케이션이 이후 버전의 Preview와 호환되지 않을 수 있음에 동의합니다. 계약자는 계약자 또는 사용자에게 사전 통지 없이 Preview(또는 Preview에 포함된 기능) 제공을 (영구적 또는 일시적으로) 중단할 수 있는 권한이 Google에게 있음에 동의합니다.
-
-3.7 본 라이선스 계약은 계약자에게 Google의 상표명, 상표, 서비스 표시, 로고, 도메인 이름, 기타 독특한 브랜드 특징에 대한 사용 권한을 부여하지 않습니다.
-
-3.8 계약자는 Preview에 부착되어 있거나 포함되어 있는 모든 소유권 고지 사항(저작권 및 상표 고지 사항 포함)을 제거, 변경 또는 불분명하게 만들지 않을 것에 동의합니다.
-
-4. 계약자의 Preview 사용
-
-4.1 Google은 본 라이선스 계약의 어떤 조항도 계약자(또는 계약자의 사용 허가자)가 Preview를 사용하여 개발한 소프트웨어 애플리케이션에 대한 권리, 소유권 또는 이익, 그리고 해당 애플리케이션에 존재하는 모든 지적 재산권을 부여하지 않는다는 점에 동의합니다.
-
-4.2 계약자는 (a) 본 라이선스 계약 그리고 (b) 모든 준거법, 규정 또는 관련 관할권 내에서 일반적으로 수용되는 관행 또는 지침(미국 또는 기타 관련 국가로/에서의 데이터 또는 소프트웨어 수출과 관련된 모든 법률 포함)에서 허용하는 용도에 한하여 Preview를 사용하고 애플리케이션을 작성하는 것에 동의합니다.
-
-4.3 계약자는 일반 대중 사용자를 대상으로 Preview를 사용하여 애플리케이션을 개발하는 경우, 해당 사용자의 프라이버시 및 법적 권리를 보호하는 것에 동의합니다. 사용자가 계약자에게 사용자 이름, 비밀번호 또는 기타 로그인 정보나 개인 정보를 제공하는 경우, 계약자는 제공된 정보가 자신의 애플리케이션에 제공된다는 사실을 사용자에게 알려야 하며, 반드시 법적으로 적절한 개인정보 보호정책 고지 및 보호를 해당 사용자에게 제공해야 합니다. 애플리케이션에서 사용자가 제공한 개인 정보나 민감한 정보를 저장하는 경우, 이를 안전하게 처리해야 합니다. 사용자들이 애플리케이션에 Google 계정 정보를 제공하는 경우, 애플리케이션은 해당 사용자의 Google 계정에 액세스하는 목적으로만, 그리고 각 사용자가 허용한 범위 내의 한정된 목적으로만 이러한 정보를 사용해야 합니다.
-
-4.4 계약자는 Google 또는 기타 모든 타사의 서버, 네트워크 또는 기타 모든 재산 또는 서비스를 허가 없이 방해, 교란, 손상 또는 액세스하는 애플리케이션의 개발 또는 배포를 포함한 하등의 행위에 Preview를 이용하지 않을 것임을 동의합니다.
-
-4.5 계약자는 자신이 Android 및/또는 Android용 애플리케이션을 통해 생성, 전송 또는 표시하는 모든 데이터, 콘텐츠 또는 리소스 그리고 그로 인한 결과(Google이 입을 수 있는 모든 피해나 손실 포함)에 대해 전적으로 책임이 있다는 것(그리고 Google은 계약자 또는 모든 제3자에 대한 책임이 없다는 것)에 동의합니다.
-
-4.6 계약자는 본 라이선스 계약, 모든 해당 제3자 계약 또는 서비스 약관, 또는 모든 준거법 또는 규정에 의거한 계약자 의무 위반, 그리고 그로 인한 결과(Google 또는 제3자가 입을 수 있는 모든 피해나 손실 포함)에 전적으로 책임이 있다는 것(그리고 Google은 계약자 또는 모든 제3자에 대한 책임이 없다는 것)에 동의합니다.
-
-4.7 이 Preview는 현재 개발 단계에 있으며, 계약자의 테스트와 피드백은 그러한 개발 과정에 중요한 부분을 차지합니다. Preview를 사용함으로써 계약자는 일부 기능의 구현은 아직 개발 중인 상태이며 Preview가 안정된 릴리스처럼 완벽하게 기능할 것이라 믿고 사용해서는 안 된다는 점을 인지하는 것으로 간주합니다. 계약자는 이 Preview를 사용한 애플리케이션을 공개적으로 배포 또는 배송하지 않기로 동의합니다. 이 Preview는 공식 Android SDK가 출시된 이후에는 더 이상 지원되지 않기 때문입니다.
-
-5. 계약자의 개발자 자격 증명
-
-5.1 계약자는 Google이 발급했거나 자신이 선택한 모든 개발자 자격 증명에 대한 기밀성을 유지할 책임이 있으며 계약자의 개발자 자격 증명 하에 개발된 모든 애플리케이션에 대한 전적인 책임이 있음에 동의합니다.
-
-6. 개인정보 보호정책 및 정보
-
-6.1 Preview를 지속적으로 혁신하고 개선하기 위해, Google은 고유 식별자, 관련 IP 주소, 소프트웨어 버전 번호, Preview에서 사용 중인 도구 및/또는 서비스와 도구의 사용법에 대한 정보를 포함하되 이에 국한되지 않고 소프트웨어에서 특정 사용량 통계 정보를 수집할 수 있습니다. 그러한 정보를 수집하기 전에 Preview는 계약자에게 이를 통지하고 동의를 구할 것입니다. 계약자가 동의하지 않을 경우 정보를 수집하지 않습니다.
-
-6.2 수집된 데이터는 모두 취합된 형태로 Preview 개선을 위해 검토되며, Google의 개인정보 보호정책에 따라 유지 관리됩니다. 이 정보는 http://www.google.com/policies/privacy/를 참조하십시오.
-
-7. 제3자 애플리케이션
-
-7.1 제3자가 개발한 애플리케이션을 실행하거나 제3자가 제공한 데이터, 콘텐츠 또는 리소스에 액세스하기 위해 Preview를 사용하는 경우, 계약자는 Google이 그러한 애플리케이션, 데이터, 콘텐츠 또는 리소스에 대한 책임이 없음에 동의합니다. 계약자는 그러한 제3자 애플리케이션을 통해 자신이 액세스한 모든 데이터, 콘텐츠 또는 리소스에 대한 책임은 그것을 만든 사람에게 있음에 동의합니다. 또한 계약자가 그러한 모든 제3자 애플리케이션, 데이터, 콘텐츠 또는 리소스를 사용하거나 액세스함으로써 비롯된 모든 피해나 손실에 대한 책임이 Google에게 없음에 동의합니다.
-
-7.2 그러한 제3자 애플리케이션을 통해 계약자에게 제공된 데이터, 콘텐츠 그리고 리소스는 그것을 제공한 제공자(또는 제공자를 대신하는 기타 개인 또는 기업)가 소유한 지적 재산권에 의해 보호될 수 있음을 유의해야 합니다. 그러한 데이터, 콘텐츠 또는 리소스(전부 또는 일부)를 수정, 임대, 리스, 대여, 판매, 배포하거나 이를 기반으로 파생물을 생성해서는 안 됩니다. 단, 관련 소유자로부터 그러한 작업을 수행해도 좋다는 허락을 받은 경우에는 예외입니다.
-
-7.3 계약자는 그러한 제3자 애플리케이션, 데이터, 콘텐츠 또는 리소스의 사용은 계약자와 관련 제3자 간에 체결하는 별도의 계약 조건의 적용을 받는다는 것을 인정합니다.
-
-8. Google API 사용
-
-8.1 Google API
-
-8.1.1 Google에서 데이터를 검색하기 위해 API를 사용하는 경우, 그러한 데이터가 Google 또는 데이터를 제공하는 당사자(또는 당사자를 대신하는 기타 개인 또는 기업)가 소유한 지적 재산권에 의해 보호될 수 있음을 인정합니다. 그러한 API를 사용하는 경우, 추가적인 서비스 약관의 적용을 받을 수 있습니다. 관련 서비스 약관에 허용되지 않은 한, 그러한 데이터(전부 또는 일부)를 변경, 임대, 리스, 대여, 판매, 배포하거나 이를 기반으로 파생물을 생성해서는 안 됩니다.
-
-8.1.2 Google에서 사용자 데이터를 검색하기 위해 API를 사용하는 경우, 계약자는 사용자로부터 명시적인 동의를 얻은 경우에 한하여, 그리고 해당 사용자가 허용한 범위 내의 한정된 목적으로만 데이터를 검색해야 합니다.
-
-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 이용에 대한 위험 부담이 전적으로 본인에게 있으며, Google이 일체의 보증 없이 Preview를 "있는 그대로" 그리고 "이용 가능한" 상태로 제공한다는 것을 분명히 이해하고 동의합니다.
-
-10.2 Preview 이용 및 이용 과정에서 다운로드하거나 얻게 되는 모든 자료를 사용하는 것은 본인의 재량에 따르며 이에 대한 위험 부담이 전적으로 본인에게 있으며, 그러한 사용으로 인해 발생하는 컴퓨터 시스템 또는 다른 기기의 손상 또는 데이터 손실에 대한 책임은 전적으로 본인에게 있습니다. 전술한 조항을 제한하지 않는 범위 내에서 계약자는 미리 보기가 안정된 릴리스가 아니며 오류, 결함 및 보안 취약성이 포함되어 있을 수 있어 그 결과로 중대한 손상을 유발할 수 있다는 점을 이해하는 것으로 간주합니다. 여기에는 계약자의 컴퓨터 시스템 또는 기타 기기의 완전하고 돌이킬 수 없는 손실도 포함됩니다.
-
-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 수출 규제. Preview는 미국의 수출법과 규정의 적용을 받습니다. 계약자는 Preview에 적용되는 모든 국내 및 국제 수출법과 규정을 준수해야 합니다. 그러한 법에는 수출 대상국, 최종 사용자 및 최종 용도에 대한 제한이 포함됩니다.
-
-14.6 계약자 또는 Google은 상대 당사자의 사전 서면 승인 없이 본 라이선스 계약에서 부여된 권리를 제3자에게 양도하거나 이전할 수 없으며, 그러한 승인 없이 이루어진 양도 시도는 모두 무효입니다. 계약자는 Google의 사전 승인 없이 본 라이선스 계약 상의 책임 또는 의무를 위임할 수 없습니다.
-
-14.7 본 라이선스 계약, 그리고 본 라이선스 계약 상의 계약자와 Google의 관계는 법률 조항 간의 충돌과는 무관하게 캘리포니아주법에 의한 규제를 받습니다. 계약자와 Google은 본 라이선스 계약으로부터 발생하는 모든 법적 문제 해결을 캘리포니아주 산타 클라라(Santa Clara) 카운티 내에 소재한 전속 관할 법원에 의뢰하는 것에 동의합니다. 위 규정에도 불구하고, 계약자는 Google이 여전히 모든 관할권에서 강제 구제책(또는 동등한 유형의 긴급 법적 구제)을 신청할 수 있음에 동의합니다.
-
-
-</div>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ko/preview/overview.jd b/docs/html-intl/intl/ko/preview/overview.jd
deleted file mode 100644
index 0b14413..0000000
--- a/docs/html-intl/intl/ko/preview/overview.jd
+++ /dev/null
@@ -1,440 +0,0 @@
-page.title=프로그램 개요
-page.metaDescription=앱에서 차기 버전의 Android를 사용할 수 있도록 준비하세요.
-page.image=images/cards/card-n-overview_2x.png
-meta.tags="preview", "developer", "android"
-page.tags="preview", "developer", "android"
-
-@jd:body
-<!--
-<div class="cols" style=
-"background-color:#f2daf5; padding: 5px 0;margin-bottom:1em; text-align:center;">
-<h3>
- Developer Preview 3 is now available
- </h3>
- <p>Includes final SDK and near-final system images</p>
- <div style="margin:auto 1em">
- <ul class="dac-section-links">
- <li class="dac-section-link">
- <a href="{@docRoot}preview/support.html#preview3-notes">
- <span class="dac-sprite dac-auto-chevron"></span>
- Read the Notes</a>
- </li>
-
- <li class="dac-section-link">
- <a href="{@docRoot}preview/support.html#preview3-get">
- <span class="dac-sprite dac-auto-chevron"></span>
- Get the Update</a>
- </li>
-
- <li class="dac-section-link">
- <a href="https://code.google.com/p/android-developer-preview/">
- <span class="dac-sprite dac-auto-chevron"></span>
- Report Issues</a>
- </li>
- </ul>
- </div>
-</div>
--->
-
-<p>
- <strong>Android N Developer Preview</strong>에 오신 것을 환영합니다. 이 프로그램은 차기 버전의 Android에 대해 앱을 테스트하고 최적화하는 데 필요한 모든 것을 제공합니다.
-
- 이 프로그램은 무료이고, N Developer Preview 도구를 다운로드하기만 하면 바로 시작할 수 있습니다.
-
-</p>
-
-
-
-
-
-
-
-<div style="background-color:#eceff1;padding:1em;">
-<div class="wrap">
- <div class="cols">
- <div class="col-4of12">
- <h5>
- 하드웨어 및 에뮬레이터 이미지
- </h5>
-
- <p>
- 다양한 기기 또는 에뮬레이터에서 앱을 실행하고 테스트하세요.
-
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- 최신 플랫폼 코드
- </h5>
-
- <p>
- Preview 동안 월별 업데이트를 제공할 예정이며 따라서 여러분은 항상 최신 플랫폼 변경에 대해 테스트할 수 있습니다.
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- 개발자 문제에 우선 순위 부여
- </h5>
-
- <p>
- Google에서는 처음 몇 주 동안 개발자가 보고한 문제에 우선 순위를 부여할 예정이므로,
-가능한 빨리 테스트하고 피드백을 보내 주세요.
- </p>
- </div>
-
- </div>
-
- <div class="cols">
-
-
- <div class="col-4of12">
- <h5>
- 새로운 동작 및 기능
- </h5>
-
- <p>
- 새로운 플랫폼 동작을 지원하고 새로운 기능으로 개발하려면 작업을 일찍 시작하세요.
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- OTA를 통한 업데이트 제공
- </h5>
-
- <p>
- Android 베타 프로그램을 통해 지원되는 모든 기기에 대해 원활한 OTA 업데이트가 제공됩니다.
- 플래시가 필요 없습니다.
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- 피드백 및 지원
- </h5>
-
- <p>
- Google의 <a href="{@docRoot}preview/bug">Issue Tracker</a>를 사용해 문제를 보고하고 피드백을 보내 주세요.
- <a href="{@docRoot}preview/dev-community">N 개발자 커뮤니티</a>에서는 다른 개발자들과 의견을 주고받을 수 있습니다.
-
-
- </p>
- </div>
- </div>
-</div>
-</div>
-
-<!--
-<p>New in the Android N Developer Preview: </p>
-
-<ul>
- <li> Accompanying Android Beta Program for consumers, starting later in the preview</li>
- <li> More supported devices, including devices from OEM partners</li>
- <li> Seamless OTAs for your devices, from initial release to final N release without flashing</li>
-</ul>
--->
-
-<h2 id="timeline">일정 및 업데이트</h2>
-<img src="{@docRoot}images/n-preview-updates_2x.png">
-
-<p>
- N Developer Preview의 운영 기간은 2016년 3월 9일부터 2016년 3분기로 예정된 AOSP 및 OEM에 대한 Android N 최종 공개 릴리스 때까지입니다.
-
-</p>
-
-<p>
- 개발 단계의 중요 마일스톤에 다다를 때마다 개발 및 테스트 환경을 위한 업데이트가 제공될 것입니다.
- 일반적으로는 매월(4~6주 간격) 업데이트를 제공할 예정입니다.
- 마일스톤은 다음과 같습니다.
-</p>
-
-<ul>
- <li><strong><a href="{@docRoot}preview/support.html#dp1">Preview 1</a></strong>(최초 릴리스, 알파)</li>
- <li><strong><a href="{@docRoot}preview/support.html#dp2">Preview 2</a></strong>(증분 업데이트, 알파)</li>
- <li><strong><a href="{@docRoot}preview/support.html#dp3">Preview 3</a></strong>(증분 업데이트, 베타)</li>
- <li><strong>Preview 4</strong>(최종 API 및 공식 SDK, Play 게시)</li>
- <li><strong>Preview 5</strong>(최종 테스트를 위한 거의 최종 시스템 이미지)</li>
- <li>AOSP 및 에코시스템에 <strong>최종 릴리스</strong></li>
-</ul>
-
-<p>
- 각 업데이트에는 SDK 도구, 프리뷰 시스템 이미지, 에뮬레이터, 참조 문서 및 API 차이 등이 포함됩니다.
-
-</p>
-
-<p>
- <strong>첫 3단계 프리뷰 마일스톤</strong>에서는 현재 앱의 호환성 문제를 확인하고 새 플랫폼을 대상으로 하는 데 필요한 마이그레이션 또는 주요 작업을 계획하는 데 도움이 되는 <strong>조기 테스트 및 개발 환경</strong>을 제공합니다.
-
-
- 이 기간은 기능과 API 및 파일 호환성 문제에 대한 피드백을 제공하는 우선 순위 기간입니다. 이 모든 경우에 대해 <a href="{@docRoot}preview/bug">Issue Tracker</a>를 사용하세요.
-
-
- 업데이트 과정에서 일부 API가 변경될 수 있습니다.
-</p>
-
-<p>
- <strong>Preview 4 및 5</strong>에서는 개발에 사용할 <strong>최종 N API 및 SDK</strong>와 최종 버전에 가까운 시스템 이미지에 액세스할 수 있으며, 시스템 동작과 기능을 테스트할 수 있습니다.
-
- 이 시점에서 Android N은 표준 API 레벨을 제공합니다.
- 레거시 앱의 최종 호환성 테스트를 시작할 수 있으며 N API 또는 기능을 사용하는 새 코드를 개선할 수 있습니다.
-
-</p>
-
-<p>
- 또한 Preview 4부터는 공식 API 레벨에서 Android N이 실행되는 <strong>기기(예: Android 베타 프로그램에 옵트인한 소비자 기기)에 앱을 게시</strong>할 수 있습니다.
-
- Google Play 알파 및 베타 채널에 먼저 게시할 수 있으므로, Play 스토어에 광범위하게 배포하기 전에 Android 베타 소비자를 통해 앱을 테스트할 수 있습니다.
-
-
-
-</p>
-
-<p>
- Android N에서 테스트와 개발을 수행하는 동안, 프리뷰 업데이트가 출시되는 것에 맞춰 <strong>개발 환경을 최신 상태로 유지</strong>할 것을 적극 권장합니다.
-
- 이 과정을 손쉽게 진행하기 위해 테스트 기기를 Android 베타 프로그램에 등록하고 각 마일스톤에서 <strong>OTA 업데이트</strong>를 받을 수 있습니다.
-
- 또는 업데이트된 프리뷰 이미지를 수동으로 다운로드하고 플래시할 수도 있습니다.
-
-</p>
-
-<p>
- 프리뷰 업데이트가 제공될 때마다 <a href="http://android-developers.blogspot.com/">Android 개발자 블로그</a>, 이 사이트 및 <a href="{@docRoot}preview/dev-community">Android N 개발자 커뮤니티</a>를 통해서 알려드릴 것입니다.
-
-
-</p>
-
-
-<h2 id="preview_tools">N Developer Preview에 포함된 내용</h2>
-
-<p>
- N Developer Preview에는
-기존 앱을 다양한 화면 크기, 네트워크 기술, CPU/GPU 칩셋
-및 하드웨어 아키텍처에서 테스트하는 데 필요한 모든 것이 포함되어 있습니다.
-</p>
-
-<h3 id="sdk_tools">SDK 도구</h3>
-
-<p>이러한 구성 요소는 <a href="{@docRoot}studio/intro/update.html">Android Studio</a>에서 SDK Manager를 통해 다운로드할 수 있습니다.</p>
-
-<ul>
- <li> N Developer Preview <strong>SDK 및 도구</strong>
- <li> N Developer Preview <strong>에뮬레이터 시스템 이미지</strong>(32비트 및 64비트)
- <li> N Developer Preview <strong>Android TV용 에뮬레이터 시스템 이미지</strong>(32비트)
- <li> N Developer Preview 지원 라이브러리(새로운 앱 템플릿용)
-</ul>
-
-<p>
- 필요에 따라 각 마일스톤에서 이러한 개발 도구를 업데이트할 것입니다.
-</p>
-
-<h3 id="hardware_system_images">하드웨어 시스템 이미지</h3>
-
-<p>
- N Developer Preview에는 물리적 기기에서 테스트하고 개발할 때 사용할 수 있는 다른 하드웨어 시스템 이미지와 Nexus가 포함되어 있습니다.
- 하드웨어 이미지의 전체 목록을 보려면 <a href="{@docRoot}preview/download.html">기기 이미지</a> 페이지를 참조하세요.
-
-</p>
-
-<p>
- 각 마일스톤 때마다 이들 기기에 대한 업데이트된 시스템 이미지가 제공될 것입니다. 업데이트된 시스템 이미지를 필요한 만큼 자주 다운로드하여 테스트 기기에 수동으로 플래시할 수 있습니다.
-
- 이것은 기기를 여러 번 다시 플래시해야 하는 자동화된 테스트 환경에 특히 유용합니다.
-
-
-</p>
-
-<p class="note"><strong>참고</strong>:
- <strong>수동으로 플래시된 기기는 지난 해 프리뷰와 마찬가지로 OTA 업데이트를 받지 못합니다</strong>.
- 올해에는 Android 베타 프로그램에 기기를 등록해야만 OTA 업데이트를 받을 수 있습니다. 자세한 내용은 다음 섹션을 참조하세요.
-
-</p>
-
-<h3 id="android_beta">Android 베타 프로그램을 통한 OTA 업데이트</h3>
-
-<p>
- Android N에서는 프로그램에 등록한 기기에 Android N의 최신 프리뷰 업데이트를 자동으로 직접 전송해 주는 OTA(Over-the-Air) 업데이트 프로그램을 새로 도입했습니다.
-
- 이 프로그램은 무료이고 Google 계정에 등록된 지원 기기를 가지고 계신 사람이라면 누구나 사용할 수 있습니다.
-
-</p>
-
-<p>
- 프로그램에 등록하려면 <a href="https://g.co/androidbeta">Android 베타 프로그램</a> 사이트를 방문하세요.
- 계정에 등록된 기기 중에서 Android 베타에 등록할 수 있는 기기를 모두 확인할 수 있습니다.
-
-
-</p>
-
-<ol>
- <li> Android N 업데이트를 받을 기기를 선택합니다.
- <li> Enroll을 클릭하고 사용 약관을 읽고 동의한 후, OK를 클릭합니다.
-</ol>
-
-<p>
- 등록을 마치면 곧바로 기기에서 업데이트를 수신합니다. 대부분의 경우, Android N으로 전환하기 위해 데이터를 완전히 초기화할 필요는 없지만, 잃고 싶지 않은 데이터가 있다면 기기를 등록하기 전에 이 데이터를 백업하는 것이 좋습니다.
-
-
-
-</p>
-
-<p>
- 업데이트가 기기에 전송되면, 가급적 빨리 업데이트를 다운로드하고 설치하는 것이 좋습니다.
- 시스템 UI, 동작, API 및 기능의 최신 변경사항에 맞춰 기기를 최신으로 유지할 수 있습니다.
-
-</p>
-
-<p>
- Developer Preview가 마무리되면, 귀하의 등록된 기기가 공식 Android N 릴리스 업데이트를 받게 됩니다.
-
-</p>
-
-<p>
- Android 베타 사이트에서 언제든지 Android 베타 프로그램으로부터 기기 등록을 해제할 수 있습니다.
- 등록을 해제하기 전에 기기에서 데이터를 백업하세요.
-
-</p>
-
- <p class="note"><strong>참고</strong>:
- 등록을 해제하면 Android 6.0 Marshmallow의 최신 버전(기기 등록 전에 설치한 버전이 아닐 수도 있음)으로 <strong>기기가 공장 초기화됩니다</strong>.
-
-
- 클린 설치를 위해서 연락처, 메시지, 사진 등의 데이터가 기기에서 지워집니다.
-
-
-</p>
-
-<h3 id="documentation_and_sample_code">문서 및 샘플 코드</h3>
-
-<p>
- Developer Preview 사이트에서 다음과 같은 문서 리소스를 이용할 수 있으며,
-Android N에 대해 익히는 데 유용합니다.
-</p>
-
-<ul>
- <li> <a href="{@docRoot}preview/setup-sdk.html">Android
-N용 개발 설정</a>에는
-시작하는 데 필요한 단계별 지침이 포함되어 있습니다.</li>
- <li> <a href="{@docRoot}preview/behavior-changes.html">동작 변경 사항</a>에서는 테스트할 주요 영역을 알려줍니다.
-</li>
- <li> 새 API에 관련된 문서 중에는 <a href="{@docRoot}preview/api-overview.html">API 개요</a>, 다운로드 가능한 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 참조</a> 그리고 다중 창 지원, 묶음 알림, 다중 로케일 지원 등과 같은 주요 기능에 대한 상세 개발자 가이드도 포함되어 있습니다.
-
-
-
- <li> <a href="{@docRoot}preview/samples.html">샘플 코드</a>에서는 권한과 새로운 기타 기능을 지원하는 방법을 보여줍니다.
-
- <li> <a href="{@docRoot}preview/support.html#release-notes">릴리스 노트</a>를
-보면 N Developer Preview의 현재 버전에 대한 변경 사항과 차이점 보고서 등 관련 정보를
-확인할 수 있습니다.
-</ul>
-
-<h4 id="reference">다운로드 가능한 API 참조</h4>
-
-<p>
- 초기 프리뷰 업데이트 중에, 최신 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Android N 플랫폼용 API 참조</a>를 별도의 zip 아카이브로 다운로드할 수 있습니다.
-
- 이 참조 다운로드에는 또한 API 23 및 이전 업데이트에서 API 변경사항을 확인하는 데 유용한 차이점 보고서도 포함되어 있습니다.
-
-
-</p>
-
-<p>
- Android N API가 최종 버전이고 공식 API 레벨이 할당되면, 저희가 <a href="https://developer.android.com">https://developer.android.com</a>에서 온라인으로 API 참조를 제공해 드릴 것입니다.
-
-</p>
-
-<h3 id="support_resources">
- 지원 리소스
-</h3>
-
-<p>
- N Developer Preview에서 테스트와 개발을 수행하면서 다음 채널을 활용하여 문제를 보고하고 피드백을 제공해 주세요.
-
-</p>
-
-<ul>
- <li> <a href="https://code.google.com/p/android-developer-preview/">N Developer Preview Issue Tracker</a>는 <strong>기본 피드백 채널</strong>입니다.
- Issue Tracker를 통해 버그, 성능 문제 및 전반적인 피드백을 보고할 수 있습니다.
- 또한, <a href="{@docRoot}preview/bugs">알려진 문제</a>를 확인하고 해결 방법을 찾을 수 있습니다.
-
- 여러분이 보고한 문제가 분류되어 Android 엔지니어링 팀에게 검토하도록 보내질 때마다 알림을 받으실 것입니다.
- </li>
- <li> <a href="{@docRoot}preview/dev-community">Android N 개발자 커뮤니티</a>는
-일종의 Google+ 커뮤니티로,
-여기에서 여러분은 Android N으로 작업하는 <strong>다른 개발자들과 소통</strong>할 수 있습니다. 서로의 의견이나 아이디어를 나누고 Android N 관련 질문에 대한 대답을 찾을 수도 있습니다.
-저희는 커뮤니티를 조정하고 필요에 따라 답변과 지침을
-제공할 것입니다.</li>
-</ul>
-
-<h3 id="targeting">대상 지정, 프리뷰 API 및 게시</h3>
-
-<p>
- N Developer Preview에서는 <strong>표준 API 레벨이 없는</strong> 개발 전용 시스템 및 Android
-라이브러리를 제공합니다. 앱을 테스트하기 위해 호환성 동작에서 옵트아웃하려는 경우(적극 권장), Android N의 프리뷰 버전을 대상으로 지정하면 됩니다. 앱의 <code><a href=
- "{@docRoot}preview/setup-sdk.html#create-update">targetSdkVersion</a></code>을 <code>“N”</code>으로 지정하세요.
-
-
-
-
-</p>
-
-<p>
- Android N Developer Preview에서는 <strong>프리뷰 API</strong>를 제공합니다. 이 API는 최종 SDK가 출시될 때까지는 공식 버전이 아닙니다. 현재 최종 SDK 릴리스는 2016년 3분기로 예정되어 있습니다.
-
- 즉, 시간이 지나면서 특히 프로그램 시작 후 초기 몇 주 동안에는 <strong>사소한 API 변경이 있을 수 있습니다</strong>.
-
- Android N Developer Preview를 업데이트할 때마다 변경 사항을 요약하여 제공해 드릴 것입니다.
-
-</p>
-
-<p class="note">
- <strong>참고</strong>: 프리뷰 API는 변경될 수 있지만, 기본 시스템 동작은 안정적이며 지금 바로 테스트가 가능한 상태입니다.
-
-
-</p>
-
-<p>
- Google Play에서는 <strong>N Developer Preview를 대상으로 하는 앱의 게시를 금지합니다.</strong>
- Android N 최종 SDK를 사용할 수 있게 되면 공식 Android N API 레벨을 대상으로 지정하고, 알파 및 베타 릴리스 채널을 통해 Google Play에 앱을 게시할 수 있습니다.
-
- 그때까지는 Android N을 대상으로 하는 앱을 테스터에게 배포하려는 경우, 이메일이나 여러분의 사이트에서 직접 다운로드를 통해 하면 됩니다.
-
-
-</p>
-
-<p>
- AOSP 및 OEM에 대한 Android N 전체 릴리스는 2016년 3분기로 예정되어 있습니다. 이때 Android N을 대상으로 하는 여러분의 앱을 Google Play의 공개 릴리스 채널에 게시할 수 있습니다.
-
-
-</p>
-
-
-<h2 id="how_to_get_started">시작 방법</h2>
-
-<p>
- Android N으로 앱 테스트를 시작하려면:
-</p>
-
-<ol>
- <li> <a href="{@docRoot}preview/api-overview.html">API 개요</a> 및 <a href="{@docRoot}preview/behavior-changes.html">동작 변경 사항</a>을 검토하여 새로운 사항과 이 사항이 여러분의 앱에 미치는 영향을 파악합니다.
-
- 특히, 새로운 <a href="{@docRoot}preview/features/notification-updates.html">알림</a> 기능과 <a href="{@docRoot}preview/features/multi-window.html">다중 창 지원</a>에 대해 알아봅니다.
-
-</li>
- <li> <a href="{@docRoot}preview/setup-sdk.html">Preview SDK 설정</a> 및 테스트 기기 구성 지침에 따라 자신의 환경을 설정합니다.
-</li>
- <li> <a href="https://developers.google.com/android/nexus/images">플래시
-지침</a>에 따라 자신의 기기용 최신 Android N Developer Preview 시스템 이미지를 플래시합니다. </li>
- <li> <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 참조</a>와
-<a href="{@docRoot}preview/samples.html">Android N 샘플</a>을 검토하여 새로운 API 기능과 앱에서
-그러한 기능을 사용하는 방법에 대해 좀 더 자세히 파악합니다.
- <li> <a href="{@docRoot}preview/dev-community">Android N 개발자
-커뮤니티</a>에 가입하여 최신 소식을 알아보고, 새 플랫폼으로 작업하는
-다른 개발자들과 이야기를 나눕니다.</li>
-</ol>
-
-<p>
- Android N Developer Preview 프로그램에 참가해 주셔서 대단히 감사합니다!
-</p>
diff --git a/docs/html-intl/intl/ko/preview/preview_toc.cs b/docs/html-intl/intl/ko/preview/preview_toc.cs
deleted file mode 100644
index 116b855..0000000
--- a/docs/html-intl/intl/ko/preview/preview_toc.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-<ul id="nav">
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/overview.html" es-lang="Información general del programa" in-lang="Ikhtisar Program" ja-lang="プログラム概要" ko-lang="프로그램 개요" pt-br-lang="Visão geral do programa" ru-lang="Обзор программы" vi-lang="Tổng quan về Chương trình" zh-cn-lang="计划概览" zh-tw-lang="程式總覽"> 프로그램 개요</a></div>
- </li>
-
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/support.html"> 지원 및 릴리스 노트</a></div>
- </li>
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/setup-sdk.html" es-lang="Configurar el SDK de la versión preliminar" in-lang="Menyiapkan Preview" ja-lang="Preview SDK のセットアップ" ko-lang="미리 보기 SDK 설정하기" pt-br-lang="Configuração do Preview SDK" ru-lang="Настройка пакета SDK Preview" vi-lang="Kiểm thử trên Thiết bị" zh-cn-lang="设置预览版 SDK" zh-tw-lang="設定預覽版 SDK"> Preview 설정</a></div>
- </li>
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/download.html" es-lang="Pruebe en un dispositivo" in-lang="Menguji pada Perangkat" ja-lang="デバイス上でテストする" ko-lang="기기에서 테스트" pt-br-lang="Testar em um dispositivo" ru-lang="Тестирование на устройстве" vi-lang="Kiểm thử trên Thiết bị" zh-cn-lang="在设备上测试" zh-tw-lang="在裝置上測試"> 기기에 대한 테스트</a></div>
- </li>
-
-
- <li class="nav-section">
- <div class="nav-section-header"><a href="<?cs var:toroot ?>preview/behavior-changes.html" es-lang="Cambios en los comportamientos" in-lang="Perubahan Perilaku" ja-lang="動作の変更点" ko-lang="동작 변경" pt-br-lang="Mudanças de comportamento" ru-lang="Изменения в работе" vi-lang="Các thay đổi Hành vi" zh-cn-lang="行为变更" zh-tw-lang="行為變更">동작 변경 사항</a></div>
- <ul>
- <li><a href="<?cs var:toroot ?>preview/features/background-optimization.html" es-lang="Optimizaciones en segundo plano" in-lang="Optimisasi Latar Belakang" ja-lang="バックグラウンド処理の最適化" ko-lang="백그라운드 최적화" pt-br-lang="Otimizações em segundo plano" ru-lang="Оптимизация фоновых процессов" vi-lang="Tối ưu hóa Chạy ngầm" zh-cn-lang="后台优化" zh-tw-lang="背景最佳化">백그라운드 최적화</a></li>
- <li><a href="<?cs var:toroot ?>preview/features/multilingual-support.html" es-lang="Idioma y configuración regional" in-lang="Bahasa dan Lokal" ja-lang="言語とロケール" ko-lang="언어 및 로케일" pt-br-lang="Idioma e localidade" ru-lang="Язык и языковой стандарт" vi-lang="Ngôn ngữ và Bản địa" zh-cn-lang="语言和区域设置" zh-tw-lang="語言和地區設定">언어 및 로케일 </a></li>
- </ul>
- </li>
-
- <li class="nav-section">
- <div class="nav-section-header"><a href="<?cs var:toroot ?>preview/api-overview.html" es-lang="Información general de la API" in-lang="Android N untuk Pengembang" ja-lang="API の概要" ko-lang="API 개요" pt-br-lang="Visão geral da API" ru-lang="Обзор API-интерфейсов" vi-lang="Android N cho Nhà phát triển" zh-cn-lang="API 概览" zh-tw-lang="API 總覽">Android N for Developers</a></div>
- <ul>
-
- <li><a href="<?cs var:toroot ?>preview/features/multi-window.html" es-lang="Compatibilidad con ventanas múltiples" in-lang="Dukungan Multi-Jendela" ja-lang="マルチ ウィンドウのサポート" ko-lang="다중 창 지원" pt-br-lang="Suporte a várias janelas" ru-lang="Поддержка многооконного режима" vi-lang="Hỗ trợ đa cửa sổ" zh-cn-lang="多窗口支持" zh-tw-lang="多視窗支援"> 다중 창 지원</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/notification-updates.html" es-lang="Notificaciones" in-lang="Pemberitahuan" ja-lang="通知" ko-lang="알림" pt-br-lang="Notificações" ru-lang="Уведомления" vi-lang="Thông báo" zh-cn-lang="通知" zh-tw-lang="通知"> 알림</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/data-saver.html"> Data Saver</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/tv-recording-api.html" es-lang="Grabación de TV" in-lang="Perekaman TV" ja-lang="TV の録画" ko-lang="TV 녹화" pt-br-lang="Gravação para TV" ru-lang="Запись ТВ" vi-lang="Ghi lại TV" zh-cn-lang="TV 录制" zh-tw-lang="電視錄製"> TV 녹화</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/security-config.html" es-lang="Configuración de seguridad de la red" in-lang="Network Security Configuration" ja-lang="ネットワーク セキュリティ構成" ko-lang="네트워크 보안 구성" pt-br-lang="Configurações de segurança de rede" ru-lang="Конфигурация сетевой безопасности" vi-lang="Cấu hình Bảo mật mạng" zh-cn-lang="网络安全配置" zh-tw-lang="網路安全性設定"> 네트워크 보안 구성</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/icu4j-framework.html" es-lang="API de ICU4J del framework de Android" in-lang="ICU4J Android Framework API" ja-lang="ICU4J Android フレームワーク API" ko-lang="ICU4J Android 프레임워크 API" pt-br-lang="APIs de estrutura do Android para ICU4J" ru-lang="API-интерфейсы ICU4J в платформе Android" vi-lang="API Khuôn khổ Android ICU4J" zh-cn-lang="ICU4J Android 框架 API" zh-tw-lang="ICU4J Android 架構 API"> ICU4J 지원</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/j8-jack.html" es-lang="Funciones del lenguaje Java 8" in-lang="Fitur Bahasa Java 8" ja-lang="Java 8 の機能" ko-lang="Java 8 언어 기능" pt-br-lang="Recursos de linguagem do Java 8" ru-lang="Возможности языка Java 8" vi-lang="Tính năng của Ngôn ngữ Java 8" zh-cn-lang="Java 8 语言功能" zh-tw-lang="Java 8 語言功能"> Java 8 언어 기능</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/afw.html"> Android for Work 업데이트</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/scoped-folder-access.html" es-lang="Acceso a directorios determinados" in-lang="Scoped Directory Access" ja-lang="特定のディレクトリへのアクセス" ko-lang="범위가 지정된 디렉터리 액세스" pt-br-lang="Acesso a diretórios com escopo" ru-lang="Доступ к выделенным каталогам" vi-lang="Truy cập Thư mục theo Phạm vi" zh-cn-lang="作用域目录访问" zh-tw-lang="限定範圍目錄存取"> 범위가 지정된 디렉터리 액세스</a></li>
- </ul>
- </li>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/samples.html" es-lang="Ejemplos" in-lang="Contoh" ja-lang="サンプル" ko-lang="샘플" pt-br-lang="Exemplos" ru-lang="Примеры" zh-cn-lang="示例" zh-tw-lang="範例"> 샘플</a></div>
- </li>
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/license.html" es-lang="Contrato de licencia" ja-lang="使用許諾契約" ko-lang="라이선스 계약" pt-br-lang="Contrato de licença" ru-lang="Лицензионное соглашение" zh-cn-lang="许可协议" zh-tw-lang="授權協議"> 라이선스 계약</a></div>
- </li>
-
-</ul>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ko/preview/samples.jd b/docs/html-intl/intl/ko/preview/samples.jd
deleted file mode 100644
index 1753bfa..0000000
--- a/docs/html-intl/intl/ko/preview/samples.jd
+++ /dev/null
@@ -1,85 +0,0 @@
-page.title=샘플
-page.tags="preview", "samples", "android"
-page.image=images/cards/card-n-samples_2x.png
-@jd:body
-
-<p>
- Android N용으로 다음과 같은 코드 샘플이 제공됩니다. Android Studio에서 샘플을 다운로드하려면 <b>File > Import Samples</b> 메뉴 옵션을 선택합니다.
-
-
-</p>
-
-<p class="note">
- <strong>참고:</strong> 이러한 다운로드 가능 프로젝트는 Gradle 및 Android Studio와 함께 사용하도록 고안되었습니다.
-
-</p>
-
-
-<h3 id="mw">다중 창 플레이그라운드</h3>
-<img src="{@docRoot}preview/images/sample-multiwindow.png" style="float: left; padding-right: 0.5em" height="250" width="156" />
-<p>
- 이 샘플은 앱으로 다중 창 사용자 인터페이스를 활용하는
-방법을 보여줍니다.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-MultiWindowPlayground">
-GitHub에서 가져오기</a>
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="an">활성 알림</h3>
-<img src="{@docRoot}preview/images/sample-activenotifications.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
-<p>
- 이것은 NotificationCompat를 사용하여 알림을 발송하는 간단한 서비스를 보여주는 기존 샘플입니다.
- 각각의 읽지 않은 사용자 대화는 고유한 알림으로 발송됩니다.
-
-</p>
-<p>
- 이 샘플은 Android N에서 사용할 수 있는 새로운 알림 기능을
-활용하도록 업데이트되었습니다.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-ActiveNotifications">
-GitHub에서 가져오기</a>
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="ms">메시징 서비스</h3>
-<img src="{@docRoot}preview/images/sample-messagingservice.png" style="float: left; padding-right: 0.5em" height="250" width="150" />
-<p>
- NotificationManager를
-사용하여 현재 애플리케이션이 표시할 알림 개수를 지시하는
-방법을 보여주는 기존 샘플입니다.
-</p>
-<p>
- 이 샘플은 Android N에서 사용할 수 있는 새로운 알림 기능을
-활용하도록 업데이트되었습니다.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-MessagingService">
-GitHub에서 가져오기</a>
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="fbe">직접 부팅</h3>
-<img src="{@docRoot}preview/images/sample-directboot.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
-<p>
- 이 샘플은 기기 암호화된 저장소에 데이터를 저장하고 액세스하는 방법을 보여줍니다.
-이 저장소는 기기가 부팅된 동안 항상 사용할 수 있습니다.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-DirectBoot">
-GitHub에서 가져오기</a>
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="sda">범위가 지정된 디렉터리 액세스</h3>
-<img src="{@docRoot}preview/images/sample-scopeddirectoryaccess.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
-<p>
- 이 샘플은 적은 권한을 요구하면서도
-특정 디렉터리에서 데이터를 읽고 쓰는 방법을 보여줍니다.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-ScopedDirectoryAccess">
-GitHub에서 가져오기</a>
-</p>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ko/preview/setup-sdk.jd b/docs/html-intl/intl/ko/preview/setup-sdk.jd
deleted file mode 100644
index c2a0380..0000000
--- a/docs/html-intl/intl/ko/preview/setup-sdk.jd
+++ /dev/null
@@ -1,187 +0,0 @@
-page.title=Preview 설정
-meta.keywords="preview", "android"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-sdk_2x.png
-
-@jd:body
-
-
-<div id="qv-wrapper">
- <div id="qv">
-<ol>
- <li><a href="#get-as13">Android Studio 2.1 가져오기</a></li>
- <li><a href="#get-sdk">Android N SDK 가져오기</a>
- <ol>
- <li><a href="#docs-dl">참조 문서</a>
- </ol>
- </li>
- <li><a href="#java8">Java 8 JDK 가져오기</a></li>
- <li><a href="#create-update">프로젝트 업데이트 또는 생성</a></li>
- <li><a href="#next">다음 단계</a></li>
-</ol>
- </div>
-</div>
-
-<p>Android N Preview용 앱을 개발하려면, 이 페이지의 설명에 따라
-개발자 환경을 약간 업데이트해야 합니다.</p>
-
-<p>Android N 시스템 이미지에서 앱의 호환성을 간단히
-테스트하려면, 가이드에 따라 <a href="{@docRoot}preview/download.html">Android N 기기에서 테스트</a>를 수행하세요.</p>
-
-<img src="{@docRoot}preview/images/n-preview-setup.png" width="700" alt="" />
-
-
-<h2 id="get-as13">Android Studio 2.1 가져오기</h2>
-
-<p>Android N 플랫폼에는 <a href="{@docRoot}preview/j8-jack.html">Java 8 언어 기능</a>에 대한 지원이 추가되었으며, 여기에는 Jack이라는 새 컴파일러가 필요합니다.
- 현재는 Android Studio 2.1에서만 최신 버전의 Jack이 지원됩니다. 따라서 Java 8 언어 기능을 사용하려면, Android Studio 2.1을 사용하여 앱을 빌드해야 합니다.
-
-
- 그렇지 않은 경우, Jack 컴파일러를 사용할 필요가 없지만 Android N 플랫폼에 대해 컴파일하려면 아래의 설명에 따라 JDK 8로 업데이트해야 합니다.
-
-</p>
-
-<p>Android Studio가 이미 설치된 경우 <strong>Help > Check for Update</strong>(Mac의 경우, <strong>Android Studio > Check for Updates</strong>)를 클릭하여 Android Studio 2.1 이상이 설치되어 있는지 확인해야 합니다.
-
-</p>
-
-<p>설치되어 있지 않은 경우 <a href="{@docRoot}studio/">여기서 Android Studio 2.1을 다운로드</a>하세요.
-</p>
-
-
-<h2 id="get-sdk">N Preview SDK 가져오기</h2>
-
-<p>Android N API를 사용한 개발을 시작하려면, 다음과 같이 Android N Preview SDK를 Android Studio에 설치해야 합니다.
-</p>
-
-<ol>
- <li><strong>Tools > Android > SDK Manager</strong>를 클릭하여 SDK Manager를 엽니다.
-</li>
-
- <li><strong>SDK Platforms</strong> 탭에서 <strong>Android N Preview</strong> 체크박스를 선택합니다.
-</li>
-
- <li><strong>SDK Tools</strong> 탭을 클릭한 다음,
-<strong>Android SDK Build Tools</strong>, <strong>Android SDK
-Platform-Tools</strong>, <strong>Android SDK Tools</strong> 체크박스를
-선택합니다.
- </li>
-
- <li><strong>OK</strong>를 클릭한 다음, 설치해야 하는 패키지의
-사용권 계약에 동의합니다.
- </li>
-</ol>
-
-<h3 id="docs-dl">N Preview 참조 문서 가져오기</h3>
-
-<p>
- Android N API에 대한 자세한 내용은 N Preview 참조 문서에서 볼 수 있으며, 이 문서는 다음 표에서 다운로드할 수 있습니다.
-
- 이 패키지에는 요약된 오프라인 버전의 Android 개발자 웹사이트가 포함되어 있고, Android N API용의 업데이트된 API 참조 문서와 API 차이점 보고서가 포함되어 있습니다.
-
-
-</p>
-
-<table>
- <tr>
- <th scope="col">문서</th>
- <th scope="col">체크섬</th>
- </tr>
- <tr>
- <td style="white-space: nowrap">
- <a href="{@docRoot}shareables/preview/n-preview-3-docs.zip">n-preview-3-docs.zip</a></td>
- <td width="100%">
- MD5: 19bcfd057a1f9dd01ffbb3d8ff7b8d81<br>
- SHA-1: 9224bd4445cd7f653c4c294d362ccb195a2101e7
- </td>
- </tr>
-<table>
-
-
-
-<h2 id="java8">Java 8 JDK 가져오기</h2>
-
-<p>Android N 플랫폼에 대해 앱을 컴파일하고 Android Studio 2.1에서 일부 도구를 사용하려면 Java 8 개발자 키트(JDK 8)를 설치해야 합니다.
- 따라서 아직 최신 버전이 없는 경우, 지금 JDK 8을 다운로드하세요.
-</p>
-
-<p>그런 다음 Android Studio에서 다음과 같이 JDK 버전을 설정합니다.</p>
-
-<ol>
- <li>Android Studio에서 Android 프로젝트를 열고 <strong>File > Project Structure</strong>를 선택하여 Project Structure 대화 상자를 엽니다.
-
- (또는, <strong>File > Other Settings > Default Project Structure</strong>를 선택하여 모든 프로젝트에 대해 기본값을 설정할 수 있습니다.)
-
-
- </li>
- <li>대화 상자의 왼쪽 패널에서 <strong>SDK Location</strong>을 클릭합니다.
- </li>
- <li><strong>JDK Location</strong> 필드에,
-Java 8 JDK의 위치를 입력한 다음(오른쪽의 버튼을 클릭하여
-파일 탐색), <strong>OK</strong>를 클릭합니다.
- </li>
-</ol>
-
-<img src="{@docRoot}preview/images/studio-jdk-location.jpg" width="700" alt="" />
-
-
-<h2 id="create-update">프로젝트 업데이트 또는 생성</h2>
-
-<p>
- Android N API를 사용하려면, 프로젝트를 적절하게 구성해야 합니다.
-</p>
-
-<p>Java 8 언어 기능을 사용할 계획인 경우에는,
-<a href="{@docRoot}preview/j8-jack.html">Java 8 언어 기능</a>에서 지원되는 Java 8 기능과
-Jack 컴파일러로 프로젝트를 구성하는 방법에 대해서도
-읽어봐야 합니다.</p>
-
-
-<h3 id="update">기존 프로젝트 업데이트</h3>
-
-<p>자신의 모듈에 대한
-<code>build.gradle</code>파일을 열고 다음과 같이 값을
-업데이트합니다.
-</p>
-
-<pre>
-android {
- compileSdkVersion <strong>'android-N'</strong>
- buildToolsVersion <strong>'24.0.0-rc3'</strong>
- ...
-
- defaultConfig {
- minSdkVersion <strong>'N'</strong>
- targetSdkVersion <strong>'N'</strong>
- ...
- }
- ...
-}</pre>
-
-
-<h3 id="create">새 프로젝트 생성</h3>
-
-
-<p>Android N Preview SDK를 사용한 개발에서 새 프로젝트를 만들려면:</p>
-
-<ol>
- <li><strong>File > New Project</strong>를 클릭하고
-Target Android Devices 페이지가 나올 때까지 단계를 따릅니다.
- </li>
- <li>이 페이지에서 <strong>Phone and Tablet</strong> 옵션을 선택합니다.</li>
- <li><strong>Phone and Tablet</strong> 옵션 아래의 <strong>Minimum
-SDK</strong> 옵션 목록에서
-<strong>N: Android API 23, N Preview (Preview)</strong>를 선택합니다.</li>
-</ol>
-
-
-<h2 id="next">다음 단계</h2>
-
-<ul>
- <li>가이드에 따라 <a href="{@docRoot}preview/download.html">Android N 기기에서 테스트</a>를 수행합니다.</li>
- <li><a href="{@docRoot}preview/behavior-changes.html">동작 변경 사항</a>
-및 <a href="{@docRoot}preview/api-overview.html">Android N API
-및 기능</a>에서 Android N 플랫폼에
-대해 자세히 알아봅니다.</li>
-</ul>
-
diff --git a/docs/html-intl/intl/ko/preview/support.jd b/docs/html-intl/intl/ko/preview/support.jd
deleted file mode 100644
index 3f83721..0000000
--- a/docs/html-intl/intl/ko/preview/support.jd
+++ /dev/null
@@ -1,1188 +0,0 @@
-page.title=지원 및 릴리스 노트
-meta.keywords="preview", "android"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-support_2x.png
-
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>이 문서의 내용</h2>
-
-<ul>
- <li><a href="#dp3">Developer Preview 3</a>
- <ul>
- <li><a href="#general">일반 권고 사항</a></li>
- <li><a href="#new">DP3의 새로운 기능</a></li>
- <li><a href="#ki">알려진 문제</a></li>
- </ul>
- </li>
- <li><a href="#dp2">Developer Preview 2</a></li>
- <li><a href="#dp1">Developer Preview 1</a></li>
-</ul>
-
-<!--
-<h2>See Also</h2>
-<ol>
- <li></li>
-</ol>
--->
-
-</div>
-</div>
-
-<p>
- Android N Developer Preview를 사용하여 개발과 테스트를 수행할 때 두 가지 기본 지원 채널을 사용할 수 있습니다.
- 기기별 버그, 시스템 버그 및 Google 앱 버그의 경우 <a href="https://developer.android.com/preview/bug">https://developer.android.com/preview/bug</a>에 버그를 제출하세요.
- 기타 앱의 문제는 개발자에게 직접 문의하세요.
-
-</p>
-
-<p>Android N을 사용하는 다른 개발자들과 문제 또는 아이디어를 논의하려면 <a href="{@docRoot}preview/dev-community">Developer Preview Google+ 커뮤니티</a>에 가입하세요.
-</p>
-
-<h2 id="dp3">Developer Preview 3</h2>
-
-<div class="wrap">
- <div class="cols">
- <div class="col-6of12">
- <p>
- <em>날짜: 2016년 5월<br>
- 빌드: NPD35K<br>
- 에뮬레이터 지원: x86 및 ARM(32비트/64비트)<br>
- Google Play 서비스: 8.4</em>
- </p>
- </div>
- </div>
-</div>
-
-<h3 id="general">일반 권고 사항</h3>
-
-<p>
- 이 Developer Preview 릴리스는 <strong>앱 개발자 및 기타 얼리 어댑터</strong>를 위한 것이며, 일상적인 용도로 사용하거나, 개발 또는 호환성 테스트에 사용할 수 있습니다.
-
- 이 릴리스에 대한 다음과 같은 일반적인 참고 사항을 숙지하시기 바랍니다.
-
-</p>
-
-<ul>
- <li>이 릴리스에서는 지원되는 기기에서 다양한 <strong>안정성 문제</strong>가 있을 수 있습니다.
- 사용자는 커널 패닉 및 작동 중단 등의 시스템 불안정 문제를 겪을 수 있습니다.
-
- </li>
-
- <li>일부 앱의 경우 새로운 플랫폼 버전에서 <strong>예상과 다르게 작동할 수 있습니다</strong>.
- 여기에는 Google 앱뿐만 아니라 다른 앱도 포함됩니다.
- </li>
-
- <li>Developer Preview 3는 Nexus 5X, Nexus 6, Nexus 6P 및 Pixel C 기기에서 <strong>CTS(Compatibility Test Suite) 승인을 받았습니다</strong>.
- CTS 승인 빌드를 사용하는 앱은 이들 기기에서 정상적으로 작동해야 합니다(예: Android Pay).
-
-
- </li>
-
- <li>Developer Preview 3는 <strong>지원되는 모든 기기에서 사용할 수 있습니다.</strong>
- 이러한 기기로는 Nexus 5X, Nexus 6, Nexus 6P, Nexus 9, Nexus Player, Pixel C, General Mobile 4G(Android One) 뿐만 아니라 Sony Xperia Z3(D6603 및 D6653 모델)가 포함됩니다.
-
-
-
- </li>
-</ul>
-
-
-<h3 id="new">DP3의 새로운 기능</h3>
-
-<h4 id="">Android용 VR 모드</h4>
-
-<p>
- Android N에서는 개발자가 사용자를 위한 고품질 모바일 VR 환경을 만들 수 있도록 새로운 VR 모드에 대한 플랫폼 지원과 최적화 기능을 추가했습니다.
- VR 앱 전용 CPU 코어에 대한 액세스를 비롯하여, 다수의 성능 개선 사항이 있습니다.
-
- 지능적 머리 추적과 VR용으로 작동하는 스테레오 알림 기능을 앱 내에서 이용할 수 있습니다.
- 가장 중요한 점은, 지연 시간이 매우 짧은 그래픽을 Android N이 제공한다는 사실입니다.
-
-</p>
-
-<p>
- 자세한 내용은 <a href="https://developers.google.com/vr/android/">Android용 Google VR SDK</a>를 참조하세요.
-</p>
-
-<h4 id="">지속적인 성능 모드</h4>
-
-<p>
- Android N에는 <a href="{@docRoot}preview/api-overview.html#sustained_performance_api">지속적인 성능 모드</a>를 위한 지원 기능(선택 사항)이 포함되어 있으며, 이 모드를 통해 OEM들은 장시간 실행되는 애플리케이션의 기기 성능에 대한 힌트를 제공할 수 있습니다.
-
- 앱 개발자는 이런 힌트를 사용하여 장기간에 걸쳐 기기 성능을 예측 가능하고 일관된 수준으로 유지하기 위해 애플리케이션을 적절히 조정할 수 있습니다.
-
- 앱 개발자는 Developer Preview에 있는 이 새 API를 Nexus 6P 기기에서만 시험해 볼 수 있습니다.
-
-</p>
-
-<h4>Multiprocess WebView</h4>
-
-<p>
- Android N의 버전 51부터는 개발자 옵션 "Multiprocess WebView"가 활성화된 경우, WebView는 별도의 샌드박싱된 프로세스에서 웹 콘텐츠를 실행합니다.
-
- WebView 팀은 향후 Android 버전에서 Multiprocess WebView를 지원하기 전에 N에서의 호환성 및 런타임 성능에 대한 피드백을 기다리고 있습니다.
-
- 이 버전에서는 시작 시간, 총 메모리 사용량 및 소프트웨어 렌더링 성능에 관련된 성능 저하가 예상됩니다.
-
-</p>
-
-<p>
- 다중 프로세스 모드에서 예상치 못한 문제를 발견할 경우 이에 대해 알려주시기 바랍니다.
- <a href="https://bugs.chromium.org/p/chromium/issues/entry?template=Webview%20Bugs">버그 제출</a>을 통해 WebView 팀에 연락하세요.
-
-</p>
-
-<h4 id="">Keyboard Shortcuts Helper</h4>
-
-<p>
- Android N에서는 사용자가 <code>Meta+/</code> 키를 눌러 <strong>Keyboard Shortcuts</strong> 화면을 트리거할 수 있으며, 이 화면에는 시스템과 해당 앱에서 둘다 사용할 수 있는 모든 바로 가기가 표시됩니다.
-
- 개발자는 자신의 바로 가기를 추가하거나 앱에서 Shortcuts 화면을 트리거할 수 있습니다.
- 자세한 내용은 <a href="{@docRoot}preview/api-overview.html#keyboard_shortcuts_helper">Keyboard Shortcuts Helper</a>를 참조하세요.
-
-</p>
-
-<h4 id="">FrameMetrics API</h4>
-
-<p>
- DP3에서는 새로운 <a href="{@docRoot}preview/api-overview.html#framemetrics_api">FrameMetrics API</a>를 추가했으며, 이를 통해 앱은 애플리케이션의 현재 창에 대한 프레임 타이밍 정보를 전송하기 위해 스트리밍 PubSub API를 노출함으로써 앱의 UI 렌더링 성능을 모니터링할 수 있습니다. <code>FrameMetricsListener</code>를 사용하면 USB 연결 없이 프로덕션 환경에서 상호 작용 수준의 UI 성능을 더욱 정밀하게 측정할 수 있습니다.
-
-
-
-
-
-</p>
-
-<h4 id="api-changes">기능 및 API 변경 사항</h4>
-
-<dl>
- <dt>
- 런처 바로 가기 및 런처 바로 가기 API
- </dt>
-
- <dd>
- 이 기능은 향후 Android 릴리스로 미루기로 결정되었습니다. 차기 Developer Preview부터는 런처 바로 가기 API(ShortcutManager 등)가 공개 Android N API에서 삭제될 계획입니다.
-
-
- </dd>
-
- <dt>
- 페이지 로드 전에 WebView Javascript 실행
- </dt>
-
- <dd>
- Android N을 대상으로 하는 앱부터는 새 페이지가 로드될 때 Javascript 컨텍스트가 초기화됩니다.
- 현재는 새 {@link android.webkit.WebView} 인스턴스에 로드된 첫 페이지에 대해 컨텍스트가 이월됩니다.
-
- Javascript를 {@link android.webkit.WebView}에 삽입하려는 개발자는 페이지 로드가 시작된 후에 스크립트를 실행해야 합니다.
-
-
- </dd>
-
- <dt>
- 비보안 출발지에서의 WebView Geolocation
- </dt>
-
- <dd>
- Android N을 대상으로 하는 앱부터는 보안 출발지(HTTPS를 통함)에서만 Geolocation API가 허용됩니다.
- 이 정책은 사용자가 비보안 연결을 사용하는 경우 사용자의 개인 정보를 보호할 목적으로 설계되었습니다.
-
- </dd>
-
- <dt>
- Data Saver
- </dt>
-
- <dd>
- Developer Preview 3부터는 앱이 인텐트를 사용하여 시스템 대화 상자를 표시할 수 있습니다. 사용자는 이 대화 상자를 통해 Data Saver 면제 허용 목록에 앱을 직접 추가할 수 있습니다.
-
- 자세한 내용은 <a href="{@docRoot}preview/api-overview.html#data_saver">Data Saver 문서</a>를 참조하세요.
-
- </dd>
-
- <dt>
- <a href="{@docRoot}preview/api-overview.html#number-blocking">번호 차단</a>
- </dt>
-
- <dd>
- 권한 없는 사용자가 번호를 차단하거나 차단 해제하려고 시도하면 이제 {@link java.lang.SecurityException}이 발생하고 작업이 실패합니다.
- (이전에는 작업에서 {@link java.lang.UnsupportedOperationException}을 발생시켰습니다.)
-
- </dd>
-
- <dt>
- <a href="{@docRoot}preview/api-overview.html#tile_api">Quick Settings 타일 API</a>
-
- </dt>
-
- <dd>
- 이제 시스템에서는 액티비티의 메타데이터를 사용하여 타일 모드를 결정합니다.
- (이전에는 <code>TileService.onTileAdded()</code>의 반환 값으로 타일 모드가 결정되었습니다.)
- 자세한 내용은 다운로드 가능한 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 참조</a>에서 <code>TileService.META_DATA_ACTIVE_TILE</code>을 참조하세요.
-
- </dd>
-</dl>
-
-<h4 id="dp3-fixes">개발자가 보고한 문제의 수정 사항</h4>
-
-<p>
- 다음을 비롯하여 개발자가 보고한 여러 문제가 수정되었습니다.
-</p>
-
-<ul>
- <li>노래가 하나 끝난 후 블루투스 오디오 재생이 중단됨(버그 <a href="https://code.google.com/p/android/issues/detail?id=206889">206889</a>)
- </li>
-
- <li>Pixel C가 지속적으로 작동 중단됨(버그 <a href="https://code.google.com/p/android/issues/detail?id=206962">206962</a>)
- </li>
-
- <li>시계 및 알림 메시지의 알림 문제(버그 <a href="https://code.google.com/p/android/issues/detail?id=203094">203094</a>)
- </li>
-
- <li>USB C 케이블을 통해 MacBook Pro에 연결된 경우 Pixel C가 재부팅됨(버그 <a href="https://code.google.com/p/android/issues/detail?id=205432">205432</a>)
-
- </li>
-
- <li>캘린더가 하루 오프셋됨(버그 <a href="https://code.google.com/p/android/issues/detail?id=203002">203002</a>)
- </li>
-
- <li>TelephonyManager.getAllCellInfo가 잘못된 데이터를 반환함(버그 <a href="https://code.google.com/p/android/issues/detail?id=203022">203022</a>)
- </li>
-
- <li>Nexus 6P, 블루투스의 연결이 계속 끊김(버그 <a href="https://code.google.com/p/android/issues/detail?id=208062">208062</a>)
- </li>
-</ul>
-
-<p>수정된 문제의 전체 목록을 보려면 <a href="https://goo.gl/6uCKtf">Issue Tracker</a>를 참조하세요.
-</p>
-
-<h3 id="ki">알려진 문제</h3>
-
-<h4>접근성</h4>
-
-<ul>
- <li>피치가 최대 수준에 가깝게 설정된 경우 TTS 출력을 들을 수 없습니다.
- </li>
-
- <li>확대 제스처 및 설정을 비롯한 접근성 기능 및 설정은 사용자가 작업 프로필을 추가하는 경우 중단될 수 있습니다.
- 접근성 상태는 사용자가 관련 설정을 다음 번에 터치할 때 복구됩니다.
-
- </li>
-</ul>
-
-<h4>카메라</h4>
-
-<ul>
- <li>카메라 앱이 불안정한 작동을 보였습니다. 이 앱은 다양한 경우(예: 다중 창 모드에서 실행되는 경우) 작동이 중단될 수 있습니다.
-
- </li>
-
- <li>파노라마 모드에서 셔터를 계속해서 누르면 카메라 앱의 작동이 중단될 수 있습니다.
-
- </li>
-</ul>
-
-<h4>오디오</h4>
-<ul>
- <li>플랫폼의 오디오 플레이어 문제로 인해 일부 앱이 정상적으로 작동하지 않습니다.
- 예를 들어, Skype 및 기타 앱이 이 문제의 영향을 받습니다.
- </li>
-</ul>
-
-<h4>연결</h4>
-
-
-<ul>
- <li>블루투스 저전력(Bluetooth Low Energy, BLE) 주변 역할 기기가 서비스를 알리고 있는데 BLE 중앙 역할 기기가 연결되면, 주변 역할 기기가 즉각적으로 연결을 해제합니다.
-
-
- </li>
-
- <li>화면이 꺼지면 Wi-Fi 연결이 끊길 수 있습니다.
- </li>
-
- <li>RFCOMM 연결이 불안정하며, 이로 인해 데이터 손상 및 연결 자주 끊김이 발생할 수 있습니다.
-
- </li>
-
- <li>일부 제한된 백그라운드 시나리오 중에, 활성 네트워크 상태({@link android.net.NetworkInfo#getState NetworkInfo.getState()} 및 {@link android.net.NetworkInfo#getDetailedState NetworkInfo.getDetailedState()})가 잘못된 값을 반환할 수 있습니다.
-
-
-
- </li>
-</ul>
-
-
-<h4>
- 런처
-</h4>
-
-<ul>
- <li>화면이 꺼졌다가 켜진 후 기본 런처의 All Apps 트레이가 응답하지 않을 수 있습니다.
- 홈 화면으로 돌아간 후 All Apps 트레이를 다시 실행하면 이 문제가 해결될 수 있습니다.
-
- </li>
-</ul>
-
-<h4>
- 키보드
-</h4>
-
-<ul>
- <li>Android 6.0 이전 버전이 실행되는 기기를 N Developer Preview로 업데이트하는 경우, Google 키보드가 최신 그림 이모티콘 및 소리 설정과 같은 기본 설정 데이터를 유지하지 않습니다.
-
-
- </li>
-
- <li>Google Indic Managed Keyboard는 불안정할 수 있습니다.
- </li>
-
- <li>비밀번호 필드에 텍스트를 입력할 때 사용자가 러시아어를 입력 언어로 선택할 수 있지만 키보드는 계속 영어를 유지합니다.
- 이로 인해 사용자가 러시아어 언어로 암호를 입력할 수 없습니다.
-
- </li>
-</ul>
-
-<h4>
- 로케일 및 언어
-</h4>
-
-<ul>
- <li>오른쪽에서 왼쪽으로 읽기(RTL) 로케일을 사용하는 경우, 기기를 재시작한 후 예기치 않게 왼쪽에서 오른쪽으로 읽기(LTR) 표시로 시스템이 전환될 수 있습니다.
-
- </li>
-</ul>
-
-<h4>미디어</h4>
-
-<ul>
- <li>HD 비디오 재생 문제를 비롯하여, Nexus 9 및 Nexus Player에서 미디어 재생이 불안정할 수 있습니다.
-
- </li>
-</ul>
-
-<h4>
- 다중 창 모드
-</h4>
-
-<ul>
- <li>다중 창 모드에서 방향을 변경하면 기기가 작동을 멈출 수 있습니다.
- </li>
-
- <li>현재 여러 앱에서 다중 창 모드와 관련하여 문제가 있습니다.
- <ul>
- <li>Settings > Display > Screen brightness를 다중 창에 도킹하면 시스템 UI의 작동이 중단될 수 있습니다.
-
- </li>
-
- <li>카메라 앱을 다중 창 모드에서 실행하면 작동이 중단될 수 있습니다.
- </li>
-
- <li>YouTube를 다중 창 모드에서 실행하면 작동이 중단될 수 있습니다. Storage > Apps > YouTube에서 YouTube 앱 데이터를 지워서 이 문제를 수정할 수 있습니다.
-
-
- </li>
- </ul>
- </li>
-</ul>
-
-<h4>
- Google Play 서비스
-</h4>
-
-<ul>
- <li>Google Play 서비스를 통해 Google Cast를 사용하는 앱의 경우, ASCII 범위에 속하지 않는 글자 및 숫자를 사용하는 시스템 로케일을 사용자가 선택하면 앱이 불안정해질 수 있습니다.
-
-
- </li>
-</ul>
-
-<h4>
- Android for Work 및 Google Apps Device Policy
-</h4>
-
-<ul>
- <li>사용자가 "device policy status" 화면이 고정된 상태로 기기의 잠금을 해제할 경우, Device Policy 앱의 작동이 중단될 수 있습니다.
-
- </li>
-
- <li>파일 기반 암호화가 설정된 채로 작업 프로필을 설정하고, Work를 끈 후에 사용자가 다시 한 번 더 기본 프로필 화면 잠금을 해제하여 Work 앱에 액세스해야 합니다.
-
-
- </li>
-
- <li>보안 패턴 잠금을 제거하고 업무용 앱/개인 앱을 다중 창에서 열면 기기가 재부팅됩니다.
-
- </li>
-
- <li>DISALLOW_VPN_CONFIG를 설정하면 Device Policy Client에 의해 설정되는 상시 접속 VPN 모드에 동의 대화 상자가 나타납니다.
-
- </li>
-
- <li>VPN이 상시 접속 VPN 모드에서 연결될 때까지는 트래픽이 잠기지 않습니다.
- </li>
-</ul>
-
-<h4>
- 외부 저장소
-</h4>
-
-<ul>
- <li>사용자가 앱을 내부 저장소에서 채택 가능 외부 저장소(SD 카드 또는 USB를 통해 연결된 기기 포함)로 이동하면 앱이 불안정해질 수 있습니다.
-
-
- </li>
-</ul>
-
-<h4>
- Google Play에서의 화면 확대/축소 및 다중 APK
-</h4>
-
-<ul>
- <li>Android N이 실행되는 기기에서 Google Play 서비스 9.0.83은 안정적인 화면 밀도 대신 현재 화면 밀도를 잘못 보고합니다.
- 이러한 기기에서 화면 확대/축소가 활성화된 경우, 이로 인해 Google Play는 더 작은 화면용으로 설계된 다중 APK 앱의 버전을 선택할 수가 있습니다.
-
- 이 문제는 차기 버전의 Google Play 서비스에서 수정되었으며, 나중에 Developer Preview 릴리스에 포함될 것입니다.
-
-
- </li>
-
- <li>Android N이 실행되는 기기에서 현재 Google Play 서비스 9.0.83은 Vulkan 버전이 아닌 Vulkan 지원을 보고합니다.
- 이로 인해 Google Play는 더 높은 버전이 지원되는 기기에서 더 낮은 Vulkan 지원용으로 설계된 다중 APK 앱의 버전을 선택할 수가 있습니다.
-
- 현재 Google Play Store에서는 Vulkan 버전 대상 지정을 사용하는 앱의 업로드를 허용하지 않습니다.
- 이 지원은 향후에 Google Play Store에 추가될 예정이고 차기 버전의 Google Play 서비스에서 수정되어 나중에 Developer Preview 릴리스에 포함될 것입니다. Google Play 서비스 9.0.83 버전을 사용하는 모든 N 기기는 기본 Vulkan 지원을 대상으로 하는 앱의 버전을 계속해서 수신합니다.
-
-
-
-
- </li>
-</ul>
-
-<h4 id="">알림</h4>
-
-<ul>
- <li>MessagingStyle에서는 "null"(본인 자신) 발신자인 알림을 표시하지 않습니다.
- </li>
-</ul>
-
-<h4 id="">개발자 도구</h4>
-
-<ul>
- <li>
- JDWP 디버깅을 사용하는 중에 <code>adb</code>의 연결이 가끔씩 끊길 수 있습니다.
- </li>
-</ul>
-
-<!-- TBA, if any
-<h4>Device-specific issues</h4>
-
-<dl>
- <dt>
- <strong>Device Name</strong>
- </dt>
-
- <dd>
- Issue 1
- </dd>
-
- <dd>
- Issue 2
- </dd>
-</dl>
-
--->
-
-
-
-
-
-
-
-<!-- DP2 Release Notes Archive -->
-
-<h2 id="dp2">Developer Preview 2</h2>
-
-<div class="wrap">
- <div class="cols">
- <div class="col-6of12">
- <p>
- <em>날짜: 2016년 4월<br>
- 빌드: NPC91K, NPC91O<br>
- 에뮬레이터 지원: x86 및 ARM(32비트/64비트)<br>
- Google Play 서비스: 8.4</em>
- </p>
- </div>
- </div>
-</div>
-
-<h3 id="dp2-new">DP2의 새로운 기능</h3>
-
-<ul>
- <li>Vulkan에 대한 플랫폼 지원. Vulkan은 새로운 3D 렌더링 API이며, 낮은 오버헤드의 명시적 GPU(Graphics Processor Unit, 그래픽 처리 장치) 컨트롤을 제공하고 그리기 호출이 잦은 애플리케이션에 향상된 성능을 제공합니다.
-
- 자세한 내용은 <a href="{@docRoot}ndk/guides/graphics/index.html">문서</a>를 참조하세요.
-
- </li>
-
- <li>피부 색조를 지원하는 새로운 사람 그림 이모티콘 및 새로운 유니코드 9 문자 모양.
- 피부 색조 및 새로운 그림 이모티콘은 키보드에 의해 이들 기능에 대한 지원이 색상표에 구축될 때까지는 표시되지 않습니다.
- 시스템에서 제공하지 않는 글꼴을 사용하지 않는 한, 앱은 이러한 새로운 그림 이모티콘을 활용하기 위해 어떠한 작업도 수행할 필요가 없습니다.
- IME 개발자는 새로운 그림 이모티콘에 대한 지원을 포함시켜야 합니다.
-
- </li>
-
- <li>
- <a href="{@docRoot}preview/api-overview.html#launcher_shortcuts">런처 바로 가기 API</a>:
- 앱은 <code>ShortcutManager</code>를 사용하여 해당 앱 내부의 시작점에 대한 바로 가기를 런처로 전송할 수 있습니다.
-
- </li>
-
- <li>
- <a href="{@docRoot}preview/features/multi-window.html">다중 창</a>:
- 이제 액티비티에 대해 최소 높이와 최소 너비를 별도로 지정할 수 있습니다.
- 또한, 여러 가지 API 이름이 약간 변경되었습니다.
- </li>
-</ul>
-
-<h4 id="dp2-fixes">개발자가 보고한 문제의 수정 사항</h4>
-
-<p>
- 다음을 비롯하여 개발자가 보고한 여러 문제가 수정되었습니다.
-</p>
-
-<ul>
- <li>숨겨진 SSID 또는 비-브로드캐스트 Wi-Fi에 연결할 수 없음(버그 <a href="https://code.google.com/p/android/issues/detail?id=203116">203116</a>)
- </li>
-
- <li>마이크 음소거 상태가 액티비티 간에 유지됨(버그 <a href="https://code.google.com/p/android/issues/detail?id=205922">205922</a>)
- </li>
-
- <li>다중 창의 포커스를 변경하면 YouTube가 일시 중지됨(버그 <a href="https://code.google.com/p/android/issues/detail?id=203424">203424</a>)
- </li>
-
- <li>열려 있는 액티비티를 직접 회신으로 닫을 수 있음(버그 <a href="https://code.google.com/p/android/issues/detail?id=204411">204411</a>)
- </li>
-
- <li>다양한 안정성 문제 수정
- </li>
-</ul>
-
-<h3 id="dp2-general">일반 권고 사항</h3>
-
-<p>
- 이 Developer Preview 릴리스는 <strong>앱 개발자 전용</strong>이며, 호환성 테스트 및 조기 개발 용도로만 사용하도록 설계되었습니다.
-
- 이 릴리스에 대한 다음과 같은 일반적인 참고 사항을 숙지하시기 바랍니다.
-</p>
-
-<ul>
-
- <li>개발 도구 구성 요소 및 지원 라이브러리가 DP2 릴리스에 대해 업데이트되었습니다.
- DP2용으로 개발하기 전에 Preview 개발 환경을 업데이트해야 합니다.
- 개발 환경을 설정하는 방법에 대한 지침은 <a href="{@docRoot}preview/setup-sdk.html">Preview 설정</a>을 참조하세요.
-
-
- </li>
-
- <li>이 릴리스의 경우 모든 기기에서 다양한 안정성 및 성능 문제가 있으므로 <strong>전화 또는 태블릿에서 일상적으로 사용하는 데 적합하지 않으며</strong>, 특히 개발자가 아닌 일반 사용자가 사용하기에 적합치 않습니다.
-
-
- </li>
-
- <li>배터리 수명 및 성능은 이 릴리스에서 아직 최적화되지 않았습니다.
-
-
- <ul>
- <li>시스템 및 앱 <strong>성능이 주기적으로 느려지고 저하되는 것으로 확인되었으며</strong>, 기기가 가끔씩 응답을 멈출 수 있습니다.
- 이러한 문제는 장기 사용 시 더 심해질 수 있습니다.
-
- </li>
-
- <li>이 릴리스에서 화면을 켜고 끄는 과정에서 배터리 수명이 감소할 수 있습니다.
-
- </li>
- </ul>
- </li>
-
- <li>일부 앱의 경우 Developer Preview 2에서 <strong>정상적으로 작동하지 않을 수 있습니다</strong>. 여기에는 Google 앱뿐만 아니라 다른 앱도 포함됩니다.
-
- </li>
-
- <li>이 조기 빌드는 <strong>CTS(Compatibility Test Suite) 승인</strong>을 받지 않았습니다.
- CTS 승인을 받은 빌드를 사용하는 앱은 작동하지 않습니다(예: Android Pay).
-
- </li>
-
- <li>이 프리뷰 릴리스에서는 Nexus 5X, Nexus 6, Nexus 6P, Nexus 9 및 Pixel C 뿐만 아니라 General Mobile 4G(Android One) 기기를 지원합니다.
-
- Nexus Player 지원은 곧 추가될 것입니다.
- </li>
-
-
- <li><a href="https://github.com/googlesamples/android-testdpc/releases">TestDPC</a>는 DP1 및 DP2 사이의 API 변경 사항을 처리하도록 업데이트되었습니다.
-
- </li>
-</ul>
-
-<h3 id="dp2-ki">알려진 문제</h3>
-
-<h4>성능 및 배터리</h4>
-
-<ul>
- <li>시스템 및 앱 성능이 <strong>주기적으로 느려지고 저하</strong>되는 것으로 확인되었으며, 기기가 가끔씩 응답을 멈출 수 있습니다.
- 이러한 문제는 장기 사용 시 더 심해질 수 있습니다.
-
- </li>
-</ul>
-
-<h4>Google 계정</h4>
-
-<ul>
- <li>경우에 따라 <code>AccountManagerService</code>와 관련된 문제가 있을 수 있으며, 이로 인해 Google 계정에 로그인하지 못할 수 있습니다.
-
- </li>
-</ul>
-
-<h4>시스템 업데이트</h4>
-
-<ul>
- <li>DP2로 업데이트한 후 즉시 기기가 재시작될 수 있습니다.
- </li>
-</ul>
-
-<h4>접근성</h4>
-
-<ul>
- <li>피치가 최대 수준에 가깝게 설정된 경우 TTS(텍스트 음성 변환) 출력을 듣는 데 문제가 있습니다.
-
- </li>
-</ul>
-
-<h4>블루투스</h4>
-
-<ul>
- <li>블루투스 저전력(LE) GATT 특성이 잘못된 쓰기 유형을 사용하며 원격 기기로 전송되지 않습니다.
- 이에 따라 예를 들면 일부 피트니스 기기가 작동하지 않습니다.
-
- </li>
-</ul>
-
-<h4>설정 마법사</h4>
-
-<ul>
- <li>"Your Google Account"에서 새 기기(또는 새롭게 초기화된 기기)의 데이터를 복원하는 옵션이 설정 마법사에서 작동하지 않습니다.
- 설정 마법사에서 "다른 Android 기기"를 선택하여 기존 기기의 데이터를 복원하거나, 기존 기기를 새 기기로 설정해야 합니다.
-
-
- </li>
-</ul>
-
-<h4>OEM 잠금 해제</h4>
-
-<ul>
- <li>일부 기기에서, DP2를 실행하는 동안 "Developer Options"에서 <strong>Enable OEM unlock</strong>이 비활성화됩니다.
-<br>
- <strong>해결 방법:</strong> <a href="https://www.google.com/android/beta" class="external-link">www.google.com/android/beta</a>를 방문하여 Android 베타 프로그램에 옵트인합니다(아직 옵트인하지 않은 경우).
-
- 그런 다음 옵트아웃하고 다운그레이드 OTA를 수락합니다.
- 옵트아웃하면 기기가 Android 6.0으로 다운그레이드됩니다. 이제 "Developer Options"에서 <strong>Enable OEM unlock</strong>을 선택할 수 있을 것입니다.
-
- 기기를 다운그레이드하면 개인 데이터가 삭제되지만, 부트로더의 잠금을 해제하는 경우에도 이 데이터가 삭제됩니다.
-
- </li>
-</ul>
-
-<h4>Android for Work</h4>
-
-<ul>
- <li>작업 보안 인증 질문
- <ul>
- <li>N으로 마이그레이션한 후나 사용자가 작업 프로필을 생성한 후에, 사용자가 자신의 패턴, PIN 또는 비밀번호를 변경하거나 작업 인증 질문을 설정할 때까지는 작업 프로필에서 키 저장소에 키를 생성할 수 없습니다.
-
-
- </li>
-
- <li>직접 부팅 모드에서 비밀번호 제한을 기기에 적용하면, 기기가 잠겨 있는 경우에도 작업 프로필의 잠금이 해제됩니다.
-
- 이로 인해 작업 프로필이 기기 잠금 화면으로 보호되어야 하는 경우에도 작업 프로필에 액세스할 수 있게 됩니다.
-
- </li>
- </ul>
- </li>
-
- <li>상시 접속 VPN
- <ul>
- <li>상시 접속 VPN 모드가 설정되었는데도 VPN을 사용할 수 없는 경우, 앱이 일반 네트워크를 통해 연결합니다.
- VPN 연결을 사용할 수 없는 경우 앱은 오프라인이어야 합니다.
-
- </li>
-
- <li>상시 접속 모드가 설정된 경우 사용자가 보안 잠금 화면의 잠금을 해제한 후에도, 기기가 직접 부팅 모드로 재부팅된 후 VPN 연결이 설정되지 않습니다.
-
-
- </li>
- </ul>
- </li>
-
- <li>패키지 일시 중단
- <ul>
- <li>기기 관리자는 예상치 못한 동작(예: "Telephone disabled" 대화 상자가 표시되어 있는데도 전화가 걸림)을 초래할 수 있는 중대한 시스템 패키지를 일시 중단시킬 수 있습니다.
-
-
- </li>
- </ul>
- </li>
-
- <li>기타
- <ul>
- <li>{@link android.os.UserManager#DISALLOW_MOUNT_PHYSICAL_MEDIA}가 true로 설정된 경우, 사용자가 SD 카드와 같은 물리적 미디어를 삽입하면 Settings 앱이 실행 시에 작동을 멈춥니다.
-
-
- </li>
-
- <li>작업 프로필의 첫 번째 체크인은 완료되는 데 몇 분 정도 걸립니다.
-
- </li>
- </ul>
- </li>
-</ul>
-
-<h4 id="vulkan">Vulkan</h4>
-
-<ul>
- <li>Nexus 5X/6P</li>
- <ul>
- <li>바인딩 번호와 0이 아닌 첫 번째 바인딩 번호 사이에 격차가 있는 경우 {@code vkCreateGraphicsPipeline()}이 실패합니다.
-</li>
- <li>투영된 텍스처 좌표에서 Vulkan이 잘못된 샘플링 동작을 보입니다.</li>
- <li>multithreadCmdBuffer 샘플에서 N-DP2 드라이버와 함께 실행되는 경우 {@code vkCmdClearColorImage()}가 작동을 중단합니다.
-</li>
- <li>{@code vkGetPhysicalDeviceFormatProperties()}의 반환 값은 결과로 0 값을 취하는 {@code VkFormatProperties::linearTilingFeatures}의 값을 설정하지 않습니다.
-
-</li>
- <li>Vulkan 부동 소수점 프레임 버퍼 첨부 파일이 올바르게 처리되지 않습니다.</li>
- </ul>
- <li>Nexus Player</li>
- <ul>
- <li>SPIR-V 셰이더가 드라이버 어설션을 트리거할 수 있습니다.</li>
- <li>일부 파이프라인 구성에서는 {@code vkCreateGraphicsPipeline()}이 작동을 중단할 수 있습니다.
-</li>
- </ul>
-</ul>
-
-<h4>기기별 문제</h4>
-
-<dl>
- <dt>
- <strong>Android One</strong>
- </dt>
-
- <dd>
- 기기가 슬롯 1에서 슬롯 2 SIM으로 전환된 경우 데이터 연결이 실패합니다.
- </dd>
-
- <dt>
- <strong>Pixel C</strong>
- </dt>
-
- <dd>
- 음성 검색 "Always On" 옵션을 전환할 수 없습니다.
- </dd>
-
- <dt>
- <strong>Nexus 6</strong>
- </dt>
-
- <dd>
- HDR+ 사진을 제외하고, 세로 방향의 카메라 사진이 손상됩니다.
-
- </dd>
-
- <dt>
- <strong>Nexus Player</strong>
- </dt>
-
- <dd>
- Nexus Player에서 Netflix HD 콘텐츠의 재생이 실패할 수 있습니다.
- </dd>
-
- <dd>
- 동적 비디오 해상도 변경에 의존하는 모든 애플리케이션이 Nexus Player에서 실패할 수 있습니다.
-
- </dd>
-
- <dd>
- VP9 비디오 코덱을 사용하는 모든 애플리케이션이 Nexus Player에서 실패할 수 있습니다.
- </dd>
-</dl>
-
-<!-- DP 1 release notes archive -->
-
-<h2 id="dp1">Developer Preview 1</h2>
-
-<div class="wrap">
- <div class="cols">
- <div class="col-6of12">
- <p>
- <em>날짜: 2016년 3월<br>
- 빌드: NPC56P, NPC56R, 업데이트됨: NPC56W, NPC56X<br>
- 에뮬레이터 지원: x86 및 ARM(32비트/64비트)<br>
- Google Play 서비스: 8.4</em>
- </p>
- </div>
- </div>
-</div>
-
-<h3 id="dp1-general">일반 권고 사항</h3>
-
-<p>
- 이 Developer Preview 릴리스는 앱 개발자 전용이며, 호환성 테스트 및 조기 개발 용도로만 사용하도록 설계되었습니다.
- 이 릴리스에 대한
- 다음과 같은 일반적인 참고 사항을 숙지하시기 바랍니다.
-</p>
-<ul>
- <li>이 릴리스의 경우 모든 기기에서 다양한 안정성 및 성능 문제가 있으므로 <em>전화 또는 태블릿에서 일상적으로 사용하는 데 적합하지 않으며</em>, 특히 개발자가 아닌 일반 사용자가 사용하기에 적합치 않습니다.
-
-
- </li>
-
- <li>시스템 및 앱 성능이 <strong>주기적으로 느려지고 저하</strong>되는 것으로 확인되었으며, 기기가 가끔씩 응답을 멈출 수 있습니다.
- 이러한 문제는 장기 사용 시 더 심해질 수 있습니다.
-
- </li>
-
- <li>이 릴리스에서 화면을 켜고 끄는 과정에서 배터리 수명이 감소할 수 있습니다.
-
- </li>
-
- <li>일부 앱의 경우 Developer Preview 1에서 정상적으로 작동하지 않을 수 있습니다.
-여기에는 Google 앱뿐만 아니라 다른 앱도 포함됩니다.
- </li>
-
- <li>이 조기 빌드는 CTS(Compatibility Test Suite) 승인을 받지 않았습니다. CTS 승인을 받은 빌드를 사용하는 앱은 작동하지 않습니다(예: Android Pay).
-
- </li>
-
- <li>이 프리뷰 릴리스에서는 Nexus 5X, Nexus 6, Nexus 6P, Nexus 9, Nexus Player 및 Pixel C 뿐만 아니라 General Mobile 4G(Android One) 기기를 지원합니다.
-
-
- </li>
-</ul>
-
-<h3 id="dp1-platform">플랫폼 문제</h3>
-
-<h4>성능 및 배터리</h4>
-
-<ul>
- <li>시스템 및 앱 성능이 <strong>주기적으로 느려지고 저하</strong>되는 것으로 확인되었으며, 기기가 가끔씩 응답을 멈출 수 있습니다.
- 이러한 문제는 장기 사용 시 더 심해질 수 있습니다.
-
- </li>
-
- <li>이 릴리스에서 화면을 켜고 끄는 과정에서 배터리 수명이 감소할 수 있습니다.
-
- </li>
-</ul>
-<h4 id="dialer">다이얼러</h4>
-
-<ul>
- <li>Dialer 앱이 직접 부팅을 지원하지 않습니다. 이 문제는 N Developer Preview에서 나중에 해결될 것입니다.
-
- </li>
-
- <li>음성사서함 재생이 작동하지 않습니다.
- </li>
-</ul>
-
-<h4>마이크</h4>
-
-<ul>
- <li>앱 및 재부팅에 걸쳐 시스템이 마이크 음소거 상태를 잘못 유지할 수 있습니다. 앱에서 마이크를 음소거하고 그 상태가 유지되는 경우, 마이크 음소거 컨트롤이 있는 앱을 열고 마이크의 음소거를 해제하세요.</li>
-</ul>
-
-<h4 id="ui">시스템 UI</h4>
-
-<ul>
- <li>시스템 UI에서 새로운 문자열이나 수정된 일부 문자열이 모든 언어로 번역되어 있지 않습니다.
-
- </li>
-
- <li>Overview UI는 여전히 개발 중에 있으므로 변경될 수 있습니다. 예를 들어, 사용자가 앱 사이를 전환할 때 나타나는 타이머를 저희가 삭제할 계획입니다.
-
-
- </li>
-
- <li>설정 컨트롤 및 토글이 느리거나 응답이 없는 것으로 나타날 수 있습니다.
- </li>
-
- <li>알림의 시각적 디자인이 변경될 수 있습니다.
- </li>
-
- <li>Gmail 앱에서, 알림 번들에 포함된 이메일의 직접 아카이빙 기능이 제대로 작동하지 않습니다.
-
- </li>
-</ul>
-
-<h4>Android for Work</h4>
-
-<ul>
- <li>작업 보안 인증 질문
- <ul>
- <li>N으로 마이그레이션한 후나 사용자가 작업 프로필을 생성한 후에, 사용자가 자신의 패턴, PIN 또는 비밀번호를 변경하거나 작업 인증 질문을 설정할 때까지는 작업 프로필에서 키 저장소에 키를 생성할 수 없습니다.
-
-
- </li>
-
- <li>직접 부팅 모드에서 비밀번호 제한을 기기에 적용하면, 기기가 잠겨 있는 경우에도 작업 프로필의 잠금이 해제됩니다.
-
- 이로 인해 작업 프로필이 기기 잠금 화면으로 보호되어야 하는 경우에도 작업 프로필에 액세스할 수 있게 됩니다.
-
- </li>
-
- <li>사용자가 잘못된 비밀번호와 PIN을 입력하면, 시스템이 정보 메시지를 표시하지 않고 그 대신 입력 필드의 내용을 지웁니다.
-
- 이 문제는 패턴 또는 지문 입력에는 영향을 주지 않습니다.
- </li>
-
- <li>태블릿에서 작업 인증 질문에 표시되는 배경이 비정상적으로 작습니다.
-
- </li>
-
- <li>N Developer Preview에 번들로 제공되는 <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.enterprise.dmagent">Google Apps Device Policy</a>의 버전은 아직 작업 프로필 보안 인증 질문 기능을 지원하지 않습니다.
-
-
- 개발자는 그 대신 <a href="https://github.com/googlesamples/android-testdpc/releases">TestDPC</a>를 사용하여 이 기능을 테스트해야 합니다.
-
- </li>
- </ul>
- </li>
-
- <li>상시 접속 VPN
- <ul>
- <li>상시 접속 VPN 모드가 설정되었는데 VPN을 사용할 수 없는 경우, 상시 접속 정책에 대한 예외로 지정되지 않은 앱은 일반 네트워크를 통해 연결됩니다.
-
- 상시 접속 VPN 정책에 대한 예외로 지정되지 않은 한, VPN 연결을 사용할 수 없는 경우 앱은 오프라인이어야 합니다.
-
- <ul>
- <li>상시 접속 모드가 설정된 경우 사용자가 보안 잠금 화면의 잠금을 해제한 후에도, 기기가 직접 부팅 모드로 재부팅된 후 VPN 연결이 설정되지 않습니다.
-
-
- </li>
- </ul>
- </li>
- </ul>
- </li>
-
- <li>향상된 연락처
- <ul>
- <li>블루투스 PBAP/MAP 기기가 업무용 연락처에 대해 발신번호를 표시하지 않습니다.
- Preview의 차기 릴리스에서 이 문제를 해결합니다.
- </li>
- </ul>
- </li>
-
- <li>작업 모드
- <ul>
- <li>Google Now 런처가 작업 모드의 켜짐 또는 꺼짐 여부를 표시하지 않습니다.
- 이 런처는 또한 앱 일시 중단 상태도 표시하지 않습니다.
- </li>
-
- <li>사용자가 작업 모드를 껏다가 켠 후, 시스템이 더 이상 작업 프로필 앱 위젯(예: 캘린더)을 표시하지 않습니다.
-
- </li>
- </ul>
- </li>
-
- <li>패키지 일시 중단
- </li>
-
- <li>기기 관리자는 예상치 못한 동작(예: "Telephone disabled" 대화 상자가 표시되어 있는데도 전화가 걸림)을 초래할 수 있는 중대한 시스템 패키지를 일시 중단시킬 수 있습니다.
-
-
- </li>
-
- <li>기타
- <ul>
- <li>{@link android.os.UserManager#DISALLOW_MOUNT_PHYSICAL_MEDIA}가 true로 설정된 경우, 사용자가 SD 카드와 같은 물리적 미디어를 삽입하면 Settings 앱이 실행 시에 작동을 멈춥니다.
-
-
- </li>
-
- <li>사용자가 앱을 제거한 후 다시 설치하면 {@code DPM.setPackagesSuspended} 상태가 유지되지 않습니다.
- 제거/재설치에 후 앱이 일시 중단 상태를 유지해야 하거나, 일시 중단된 앱이 제거가 불가능해야 합니다.
-
-
- </li>
-
- <li>작업 프로필의 첫 번째 체크인은 완료되는 데 몇 분 정도 걸립니다.
- 이로 인해 기기가 Play EMM API에서 보일 때까지 보통 때보다 더 오래 걸릴 수 있습니다.
-
- </li>
-
- <li>작업 프로필 앱으로부터 전송되는 알림은 개인 프로필에 설치된 알림 수신자에게는 표시되지 않습니다.
- 따라서 시스템에서 알림이 예상대로 표시되지 않습니다.
-
- </li>
-
- </ul>
- </li>
-</ul>
-
-<h4 >키보드</h4>
-
-<ul>
- <li>키보드 및 Android 기기 간의 블루투스 페어링이 불안정할 수 있습니다.
- </li>
-</ul>
-
-<h4 >비디오</h4>
-
-<ul>
-<li>비디오 재생이 지연되고 끊김 현상이 나타날 수 있습니다.</li>
-</ul>
-
-<h4>Wi-Fi</h4>
-
-<ul>
- <li>API 특수 사례 동작을 변경시킬 수도 있는 일부 리팩터링이 Wi-Fi에 발생했습니다.
- 특히, 특정 네트워크에 연결하려고 시도하는 애플리케이션이나 네트워크에 재연결하려고 시도하는 애플리케이션은 테스트를 다시 거쳐야 합니다.
-
- </li>
-
- <li>레거시 DHCP 클라이언트가 플랫폼에서 제거되었습니다. 플랫폼이 지원하는 유일한 DHCP 클라이언트는 M에 추가된 DHCP 클라이언트뿐입니다.
-
- </li>
-</ul>
-
-<h4>직접 부팅</h4>
-
-<ul>
- <li>최초 잠금 해제가 수행될 때까지는 NFC가 작동하지 않습니다.
- <ul>
- <li>블루투스가 활성화된 전화가 재시작될 때, 블루투스가 자동으로 켜지지 않습니다.
- 블루투스를 수동으로 다시 활성화해야 합니다.
- </li>
-
- <li>어떤 경우에는, 전화 및 메시지가 온 경우 기본 벨소리가 울리지 않을 수 있습니다.
- 이 동작은 차기 N Preview 릴리스에서 수정되었습니다. 단, 한 가지 예외가 있으며 이에 대한 내용과 해결 방법은 다음과 같습니다.
-
- </li>
-
- <li>직접 부팅 모드로 설정된 이후 최소 한 번 이상 부팅되었지만 완전히 초기화되지 않은 기기에서는 기본 알림 벨소리가 울리지 않습니다.
-
- 사용자가 Settings에서 벨소리를 수동으로 선택하여 이 문제를 해결할 수 있습니다.
-
- </li>
-
- <li>N Developer Preview 빌드가 실행되는 기기에서는 기본적으로 직접 부팅이 활성화되지 않습니다.
- 테스트 및 개발에 직접 부팅을 활성화하려면 Developer Options로 이동하고 Convert to File Encryption을 탭하세요.
-
- 이 Developer Preview에서는 파일 기반 암호화를 위해 기기를 다시 파티셔닝하고 다시 포맷하려면 공장 초기화를 수행해야 합니다.
-
- </li>
- </ul>
- </li>
-</ul>
-
-<h4>PIP for Android TV</h4>
-
-<ul>
- <li>Recents UI에서의 PIP 통합은 완료되지 않았으며, 변경될 수 있습니다.
-
- <ul>
- <li>PIP 창의 애니메이션이 매끄럽지 않습니다. 향후 프리뷰 릴리스에서 이 문제가 개선될 것입니다.
-
- </li>
- </ul>
- </li>
-
- <li style="list-style: none">향후 프리뷰 릴리스에서 PIP의 시각적 디자인과 레이아웃 맞춤이 개선될 것입니다.
-
- </li>
-</ul>
-
-<h4>버그 보고서</h4>
-
-<ul>
- <li>버그 보고서가 항상 성공적으로 완료되는 것은 아닙니다. 그 해결 방법으로, 내부 저장소에 있는 버그 보고서 문서 제공자를 통해 버그 보고서에 액세스할 수 있는 경우도 있습니다.
-
-
- </li>
-</ul>
-
-<h4>분할 화면 다중 창</h4>
-
-<ul>
- <li>분할 화면 모드로 전환하면 앱이 작동을 중단하고 예기치 않은 UI 동작이 발생할 수 있습니다.
- 이는 앱 개발자가 수정해야 하는 앱 문제입니다.
-
- </li>
-
- <li>앱이 N 이전 버전의 Android 플랫폼을 대상으로 하는 경우, 이 앱이 분할 화면에서 작동하지 않을 수 있으며, 알림 메시지가 여러 번 나타날 수 있습니다.
-
- </li>
-
- <li>방향이 고정된 상태로 앱을 사용하는 중에 Overview 버튼을 길게 누르면 예기치 않은 앱 동작이 발생할 수 있습니다.
-
- </li>
-
- <li>크기를 조정하는 중에 앱이 깜박일 수 있습니다.
- </li>
-
- <li>애니메이션은 아직 최종 버전이 아닙니다.
- </li>
-</ul>
-
-<h4>입력 방법</h4>
-
-<ul>
- <li><b>Use system language</b>가 설정된 경우 예기치 않게 Google 키보드가 일반 Google 키보드로 다시 돌아가지만, 시스템 언어 기본 설정에 선택된 언어를 Google 키보드가 지원하지 않습니다.
-
- Google 키보드는 미국식 영어로 돌아가야 합니다.
-
- <p>
- Google 키보드에서 지원하는 언어를 최소 하나 이상 추가하여 이 문제를 해결할 수 있습니다.
-
- </p>
- </li>
-</ul>
-
-<h4>접근성</h4>
-
-<ul>
- <li>알림, Quick Settings 타일 및 다중 창 표시를 비롯한 여러 기능에 대한 문제가 음성 안내 지원(TalkBack)에서 발생합니다. 이러한 문제로 인해 시스템 작동이 중단되거나 음성 안내 지원에서 음성 피드백이 제공되지 않을 수 있습니다.
-
- 향후 프리뷰 릴리스에서 이러한 문제가 해결될 것입니다.
-
- </li>
-</ul>
-
-<h3 id="dp1-device-sp">기기별 참고 사항 및 문제</h3>
-
-<h4>Nexus Player</h4>
-<ul>
- <li>이 프리뷰 릴리스에서는 비디오 재생, 앱 호환성 및 안정성 문제가 Nexus Player에 있을 수 있습니다.
-
- </li>
-</ul>
-
-<h4>Pixel C</h4>
-<ul>
-<li>다중 창 크기를 조정하면 작동이 중단될 수 있습니다.</li>
-</ul>
-
-<h4>Nexus 9</h4>
-<ul>
-<li>Android 베타 프로그램을 통해 OTA(Over-The-Air) 업데이트를 받은 후에 Nexus 9 기기가 시작되지 않을 수 있습니다.
- 이 문제로부터 복구하기 위해 OTA 이미지를 수동으로 설치해 보실 수 있습니다.
- 자세한 내용은 <a href="{@docRoot}preview/download-ota.html">기기 OTA 이미지 적용</a>을 참조하세요.
-
-</li>
-</ul>
-
diff --git a/docs/html-intl/intl/ko/training/articles/direct-boot.jd b/docs/html-intl/intl/ko/training/articles/direct-boot.jd
new file mode 100644
index 0000000..e58a4f9
--- /dev/null
+++ b/docs/html-intl/intl/ko/training/articles/direct-boot.jd
@@ -0,0 +1,181 @@
+page.title=직접 부팅
+page.keywords=preview, sdk, 직접 부팅
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>이 문서의 내용</h2>
+ <ol>
+ <li><a href="#run">직접 부팅 시 실행하기 위한 액세스 요청</a></li>
+ <li><a href="#access">기기 암호화 저장소 액세스</a></li>
+ <li><a href="#notification">사용자 잠금 해제 알림 수신</a></li>
+ <li><a href="#migrating">기존 데이터 마이그레이션</a></li>
+ <li><a href="#testing">암호화 인식 앱 테스트</a></li>
+ </ol>
+</div>
+</div>
+
+<p>기기에 전원이 들어와 있지만 <i>사용자가 기기의 잠금을 해제하지</i> 않았을 경우 Android N은 안전한
+직접 부팅
+ 모드에서 실행됩니다. 이를 지원하기 위해 시스템에서 다음과 같은 두 가지 데이터 저장소 위치를 제공합니다.</p>
+
+<ul>
+<li><i>자격 증명 암호화 저장소:</i>기본 저장소 위치이며, 사용자가 기기의 잠금을 해제한 후에만
+사용할 수 있습니다.</li>
+<li><i>기기 암호화 저장소:</i>직접 부팅 모드와 사용자가 기기의 잠금을 해제한 후에
+모두 사용할 수 있는 저장소 위치입니다.</li>
+</ul>
+
+<p>기본적으로 직접 부팅 모드 시 앱이 실행되지 않습니다.
+직접 부팅 모드에서 조치가 필요한 경우,
+이 모드에서 실행되어야 하는 앱 구성 요소를 등록할 수 있습니다. 직접 부팅 모드 시 실행되어야 하는 앱의
+몇 가지 공통 사용 사례는 다음과 같습니다.</p>
+
+<ul>
+<li>알람 시계 앱과 같이 예약된 알림이 있는
+앱.</li>
+<li>SMS 앱처럼 중요한 사용자 알림을 제공하는 앱.</li>
+<li>Talkback처럼 접근성 서비스를 제공하는 앱.</li>
+</ul>
+
+<p>앱이 직접 부팅 모드에서 실행되는 동안 데이터에 액세스해야 하는 경우
+기기 암호화 저장소를 사용합니다. 기기 암호화 저장소에는
+기기가 성공적으로 확인된 부팅을 수행한 후에만
+사용할 수 있는 키로 암호화된 데이터가 포함됩니다.</p>
+
+<p>PIN이나 비밀번호와 같이 사용자 자격 증명과 연관된 키로 암호화해야 하는 데이터는
+자격 증명 암호화 저장소를 사용합니다.
+자격 증명 암호화 저장소는 사용자가 기기의 잠금을 해제한 뒤부터
+기기를 다시 시작할 때까지 사용할 수 있습니다. 사용자가
+기기의 잠금을 해제한 뒤 잠금 화면을 활성화해도
+자격 증명 암호화 저장소가 잠기지 않습니다.</p>
+
+<h2 id="run">직접 부팅 시 실행하기 위한 액세스 요청</h2>
+
+<p>앱은 직접 부팅 모드에서 실행되거나
+기기 암호화 저장소에 액세스하기 전까지
+시스템에 구성 요소를 등록해야 합니다. 앱은 구성 요소를 암호화 인식으로 표시하여
+<i>시스템에</i> 등록합니다. 구성 요소를 암호화 인식으로 표시하려면 매니페스트에서
+<code>android:directBootAware</code> 속성을 true로 설정합니다.<p>
+
+<p>암호화 인식 구성 요소로 등록하면 기기가 다시 시작되었을 때 시스템에서
+<code>LOCKED_BOOT_COMPLETED</code> 브로드캐스트 메시지를
+수신할 수 있습니다. 이 시점에서 기기 암호화 저장소를
+사용할 수 있고, 여러분의 구성 요소는
+예약된 알람 트리거 등과 같이 직접 부팅 모드에서 실행해야 하는 작업을 실행할 수 있습니다.</p>
+
+<p>다음 코드 조각은
+{@link android.content.BroadcastReceiver}를 암호화 인식으로 등록하고 앱 매니페스트에
+<code>LOCKED_BOOT_COMPLETED</code>의 인텐트 필터를 추가하는 예시입니다.</p>
+
+<pre>
+<receiver
+ android:directBootAware="true" >
+ ...
+ <intent-filter>
+ <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
+ </intent-filter>
+</receiver>
+</pre>
+
+<p>사용자가 기기의 잠금을 해제하면 모든 구성 요소가
+기기 암호화 저장소와 자격 증명 암호화 저장소에 액세스할 수 있습니다.</p>
+
+<h2 id="access">기기 암호화 저장소 액세스</h2>
+
+<p>기기 암호화 저장소에 액세스하려면
+<code>Context.createDeviceProtectedStorageContext()</code>를 호출하여 두 번째
+{@link android.content.Context} 인스턴스를 생성합니다. 이 컨텍스트를 사용하여 수행된 모든 저장소 API 호출은
+기기 암호화 저장소에 액세스합니다. 다음은
+기기 암호화 저장소에 액세스하고 기존
+앱 데이터 파일을 여는 예시입니다.</p>
+
+<pre>
+Context directBootContext = appContext.createDeviceProtectedStorageContext();
+// Access appDataFilename that lives in device encrypted storage
+FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
+// Use inStream to read content...
+</pre>
+
+<p>직접 부팅 모드에서 액세스해야 하는 정보에만
+기기 암호화 저장소를 사용합니다.
+기기 암호화 저장소를 범용 암호화 저장소로 사용하지 마십시오.
+개인적인 사용자 정보 또는 직접 부팅 모드에서 필요하지 않은 암호화 데이터는
+자격 증명 암호화 저장소를 사용합니다.</p>
+
+<h2 id="notification">사용자 잠금 해제 알림 수신</h2>
+
+<p>사용자가 재시작 후 기기의 잠금을 해제하면
+앱이 자격 증명 암호화 저장소 액세스로 전환하고,
+사용자 자격 증명을 따르는 일반 시스템 서비스를 사용할 수 있습니다.</p>
+
+<p>사용자가 재부팅 후 기기의 잠금을 해제할 때 알림을 받으려면
+실행 중인 구성 요소에서 {@link android.content.BroadcastReceiver}를 등록하고
+<code>ACTION_USER_UNLOCKED</code> 메시지를 수신합니다. 또는,
+기존 {@link android.content.Intent#ACTION_BOOT_COMPLETED
+ACTION_BOOT_COMPLETED} 메시지를 수신할 수 있습니다. 이 메시지는 기기가 부팅되었으며 사용자가 기기의 잠금을
+해제했음을 나타냅니다.</p>
+
+<p>사용자가
+<code>UserManager.isUserUnlocked()</code>를 호출하여 기기 잠금을 해제했는지 직접 쿼리할 수 있습니다.</p>
+
+<h2 id="migrating">기존 데이터 마이그레이션</h2>
+
+<p>직접 부팅 모드를 사용하도록 사용자가 자신의 기기를 업데이트하는 경우,
+여러분이 기존 데이터를 기기 암호화 저장소로 마이그레이션해야 할 수도 있습니다.
+<code>Context.moveSharedPreferencesFrom()</code>과
+<code>Context.moveDatabaseFrom()</code>을 사용하여 자격 증명 암호화 저장소와 기기 암호화 저장소 간에
+기본 설정과 데이터베이스 데이터를 마이그레이션합니다.</p>
+
+<p>어떤 데이터를 자격 증명
+암호화 저장소에서 기기 암호화 저장소로 마이그레이션할지를 신중히 결정하세요. 암호나 인증 토큰 등의
+개인 사용자 정보는 기기 암호화 저장소로
+마이그레이션해서는 안 됩니다. 일부 시나리오에서
+두 가지 암호화 저장소에 있는 별도의 데이터 세트를 관리해야 할 수 있습니다.</p>
+
+<h2 id="testing">암호화 인식 앱 테스트</h2>
+
+<p>새로운 직접 부팅 모드로 암호화 인식 앱을 테스트하세요. 직접 부팅을
+활성화하는 방법은 두 가지가 있습니다.</p>
+
+<p class="caution"><strong>주의:</strong> 직접 부팅을 활성화하면
+기기에서 모든 사용자 데이터가 삭제됩니다.</p>
+
+<p>Android N이 설치된 지원 기기에서
+직접 부팅을 활성화하는 방법:</p>
+
+<ul>
+<li><b>Developer options</b>가 활성화되어 있지 않으면 기기에서
+<b>Settings > About phone</b>으로 이동하여 <b>Build number</b>를
+7번 탭하여 활성화합니다. 개발자 옵션 화면이 나오면
+<b>Settings > Developer options</b>로 이동해서
+<b>Convert to file encryption</b>을 선택합니다.</li>
+<li>다음 adb shell 명령을 사용하여 직접 부팅 모드를 활성화합니다.
+<pre class="no-pretty-print">
+$ adb reboot-bootloader
+$ fastboot --wipe-and-use-fbe
+</pre>
+</li>
+</ul>
+
+<p>테스트 기기에서 모드를 전환해야 할 경우
+에뮬레이션된 직접 부팅 모드도 사용할 수 있습니다. 에뮬레이션된 모드는 개발 시에만 사용해야 하며
+데이터가 손실될 수 있습니다. 에뮬레이션된 직접 부팅 모드를 활성화하려면
+기기에서 잠금 패턴을 설정합니다. 잠금 패턴을 설정할 때 안전 모드 화면으로 시작할지 묻는 메시지가 나오면 "No thanks"를
+선택한 뒤 다음
+adb shell 명령을 사용합니다.</p>
+
+<pre class="no-pretty-print">
+$ adb shell sm set-emulate-fbe true
+</pre>
+
+<p>에뮬레이션된 직접 부팅 모드를 끄려면 다음 명령을 사용합니다.</p>
+
+<pre class="no-pretty-print">
+$ adb shell sm set-emulate-fbe false
+</pre>
+
+<p>이 명령을 사용하면 기기가 재부팅됩니다.</p>
diff --git a/docs/html-intl/intl/ko/training/articles/scoped-directory-access.jd b/docs/html-intl/intl/ko/training/articles/scoped-directory-access.jd
new file mode 100644
index 0000000..f2ce650
--- /dev/null
+++ b/docs/html-intl/intl/ko/training/articles/scoped-directory-access.jd
@@ -0,0 +1,148 @@
+page.title=범위가 지정된 디렉터리 액세스
+page.keywords=preview, sdk, 범위가 지정된 디렉터리 액세스
+page.tags=androidn
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>이 문서의 내용</h2>
+ <ol>
+ <li><a href="#accessing">외부 저장소 디렉터리 액세스</a></li>
+ <li><a href="#removable">이동식 미디어의 디렉터리 액세스</a></li>
+ <li><a href="#best">모범 사례</a></li>
+ </ol>
+</div>
+</div>
+
+<p>일반적으로 사진 앱과 같은 앱은
+<code>Pictures</code> 디렉터리 등 외부 저장소의 특정 디렉터리에만 액세스하면 됩니다. 기존 외부 저장소 액세스 방식은
+이런 유형의 앱에 대상화된 디렉터리 액세스를 쉽게
+제공하지 못합니다. 예를 들면 다음과 같습니다.</p>
+
+<ul>
+<li>매니페스트에서 {@link android.Manifest.permission#READ_EXTERNAL_STORAGE}
+또는 {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE}를 요청하면
+외부 저장소의 모든 공개 디렉터리에 액세스할 수 있습니다.
+이는 앱에 필요한 것보다 과도한 액세스를 제공할 수 있습니다.</li>
+<li>일반적으로,
+<a href="{@docRoot}guide/topics/providers/document-provider.html">저장소
+액세스 프레임워크</a>를 사용하면 시스템 UI를 통해 사용자가 디렉터리를
+선택할 수 있습니다. 앱이 항상 동일한 외부 디렉터리에 액세스한다면
+필요 없는 동작입니다.</li>
+</ul>
+
+<p>Android N은 일반 외부 저장소 디렉터리에 액세스하기 위한
+단순화된 새로운 API를 제공합니다. </p>
+
+<h2 id="accessing">외부 저장소 디렉터리 액세스</h2>
+
+<p><code>StorageManager</code> 클래스를 사용하여 적절한
+<code>StorageVolume</code> 인스턴스를 가져옵니다. 그 후, 해당 인스턴스의
+<code>StorageVolume.createAccessIntent()</code> 메서드를 호출하여 인텐트를 생성합니다.
+이 인텐트로 외부 저장소 디렉터리에 액세스합니다. 이동식 미디어 볼륨을 비롯한
+모든 사용 가능한 볼륨의 목록을 가져오려면
+<code>StorageManager.getVolumesList()</code>를 사용합니다.</p>
+
+<p>특정 파일에 대한 정보가 있으면
+<code>StorageManager.getStorageVolume(File)</code>을 사용하여 해당 파일이 들어 있는
+<code>StorageVolume</code>을 가져옵니다. 이 <code>StorageVolume</code>에서
+<code>createAccessIntent()</code>를 호출하여 파일의 외부 저장소 디렉터리에
+액세스합니다.</p>
+
+<p>
+외부 SD 카드와 같은 보조 볼륨에서는 특정 디렉터리 대신 전체 볼륨에 대한 액세스를 요청하려면
+<code>StorageVolume.createAccessIntent()</code>를 호출할 때
+null을 전달합니다. 기본 볼륨에 null을 전달하거나 잘못된 디렉터리 이름을 전달하는 경우
+<code>StorageVolume.createAccessIntent()</code>는 null을
+반환합니다.
+</p>
+
+<p>다음 코드 조각은 기본 공유 저장소에서
+<code>Pictures</code> 디렉터리를 여는 방법에 대한 예시입니다.</p>
+
+<pre>
+StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
+StorageVolume volume = sm.getPrimaryVolume();
+Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+</pre>
+
+<p>시스템이 외부 디렉터리에 액세스 권한을 부여하고자 시도하고,
+필요에 따라 단순화된 UI를 사용하는 사용자의 액세스를 확인합니다.</p>
+
+<img src="{@docRoot}images/android-7.0/scoped-directory-access-framed.png" srcset="{@docRoot}images/android-7.0/scoped-directory-access-framed.png 1x,
+{@docRoot}images/android-7.0/scoped-directory-access-framed_2x.png 2x" />
+<p class="img-caption"><strong>그림 1.</strong> Pictures 디렉터리에
+액세스를 요청하는 애플리케이션.</p>
+
+<p>사용자가 액세스 권한을 부여하면, 시스템이
+<code>Activity.RESULT_OK</code>의 결과 코드가 포함된
+<code>onActivityResult()</code> 재정의와 URI가 포함된 인텐트 데이터를 호출합니다. 제공된
+URI를 사용하여 디렉터리 정보에 액세스합니다.
+<a href="{@docRoot}guide/topics/providers/document-provider.html">저장소
+액세스 프레임워크</a>가
+반환한 URI를 사용하는 것과 유사합니다.</p>
+
+<p>사용자가 액세스 권한을 부여하지 않으면 시스템이
+<code>Activity.RESULT_CANCELED</code>의 결과 코드가 포함된
+<code>onActivityResult()</code> 재정의와 null 인텐트 데이터를 호출합니다.</p>
+
+<p class="note"><b>참고</b>: 특정 외부 디렉터리에 대한 액세스 권한을 얻으면
+해당 디렉터리의 하위 디렉터리에 대한 액세스 권한도 얻게 됩니다.</p>
+
+<h2 id="removable">이동식 미디어의 디렉터리 액세스</h2>
+
+<p>범위가 지정된 디렉터리 액세스를 사용하여 이동식 미디어의 디렉터리에 액세스하려면
+먼저 다음과 같은
+{@link android.os.Environment#MEDIA_MOUNTED} 알림을 수신하는 {@link android.content.BroadcastReceiver}를 추가합니다.</p>
+
+<pre>
+<receiver
+ android:name=".MediaMountedReceiver"
+ android:enabled="true"
+ android:exported="true" >
+ <intent-filter>
+ <action android:name="android.intent.action.MEDIA_MOUNTED" />
+ <data android:scheme="file" />
+ </intent-filter>
+</receiver>
+</pre>
+
+<p>사용자가 SD 카드 등의 이동식 미디어를 장착하면 시스템이
+{@link android.os.Environment#MEDIA_MOUNTED} 알림을 보냅니다. 이 알림은
+이동식 미디어 디렉터리에 액세스하는 데 사용할 수 있는 인텐트 데이터의 <code>StorageVolume</code> 객체를
+제공합니다. 다음은
+이동식 미디어의 <code>Pictures</code> 디렉터리에 액세스하는 예시입니다.</p>
+
+<pre>
+// BroadcastReceiver has already cached the MEDIA_MOUNTED
+// notification Intent in mediaMountedIntent
+StorageVolume volume = (StorageVolume)
+ mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
+volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+</pre>
+
+<h2 id="best">모범 사례</h2>
+
+<p>가능하면, 사용자에게 액세스 권한을 반복적으로 요청하지 않도록 외부 디렉터리 액세스 URI를
+변경하지 마세요. 사용자가 액세스 권한을 부여하면 디렉터리 액세스 URI로
+<code>getContentResolver().takePersistableUriPermssion()</code>를
+호출합니다. 시스템이 URI를 유지하고 이후 액세스 요청에서는
+<code>RESULT_OK</code>를 반환하고 사용자에게 확인 UI를
+표시하지 않습니다.</p>
+
+<p>사용자가 외부 디렉터리 액세스를 거부하면
+다시 즉시 액세스를 요청하지 마세요. 액세스를 반복적으로 요청하면
+사용자 환경을 저해하는 결과를 낳습니다. 사용자가 요청을 거부하는데 앱이 다시 액세스를
+요청하면, UI에 <b>Don't ask again</b> 체크박스가 표시됩니다.</p>
+
+<img src="{@docRoot}images/android-7.0/scoped-directory-access-dont-ask.png" srcset="{@docRoot}images/android-7.0/scoped-directory-access-dont-ask.png 1x,
+{@docRoot}images/android-7.0/scoped-directory-access-dont-ask_2x.png 2x" />
+<p class="img-caption"><strong>그림 1.</strong> 이동식 미디어에 대해
+다시 액세스 요청을 하는 애플리케이션.</p>
+
+<p>사용자가 <b>Don't ask again</b>을 선택하여 요청을 거부하면 앱에서 해당 디렉터리에 대한 이후의 모든
+요청이 자동으로 거부되고,
+사용자에게는 어떤 요청 UI도 표시되지 않습니다.</p>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ko/training/articles/security-config.jd b/docs/html-intl/intl/ko/training/articles/security-config.jd
new file mode 100644
index 0000000..414c139
--- /dev/null
+++ b/docs/html-intl/intl/ko/training/articles/security-config.jd
@@ -0,0 +1,747 @@
+page.title=네트워크 보안 구성
+page.keywords=androidn, 보안, 네트워크
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>이 문서의 내용</h2>
+<ol>
+ <li><a href="#manifest">보안 구성 파일 추가</a></li>
+ <li><a href="#CustomTrust">신뢰할 수 있는 CA 사용자 지정</a>
+ <ol>
+ <li><a href="#ConfigCustom">신뢰할 수 있는 사용자 지정 CA 구성</a></li>
+ <li><a href="#LimitingCas">신뢰할 수 있는 CA 세트 제한</a></li>
+ <li><a href="#TrustingAdditionalCas">추가 CA 신뢰</a></li>
+ </ol>
+ </li>
+ <li><a href="#TrustingDebugCa">디버그 전용 CA</a></li>
+ <li><a href="#UsesCleartextTraffic">일반 텍스트 트래픽 옵트아웃</a></li>
+ <li><a href="#CertificatePinning">인증서 고정</a></li>
+ <li><a href="#ConfigInheritance">구성 상속 동작</a></li>
+ <li><a href="#FileFormat">구성 파일 형식</a></li>
+</ol>
+</div>
+</div>
+
+
+<p>
+ Android N에는 앱 코드를 수정하지 않고 앱이 안전한 선언
+구성 파일에서 네트워크 보안 설정을 사용자 지정할 수 있는
+네트워크 보안 구성 기능이 포함되어 있습니다. 이 설정은
+특정 도메인과 특정 앱에 대해 구성할 수 있습니다. 이 기능의
+핵심 기능:
+</p>
+
+<ul>
+ <li>
+ <b>사용자 지정 신뢰 앵커:</b> 앱의 보안 연결에 대해 신뢰할 수 있는 인증 기관(CA)을
+사용자 지정합니다. 예를 들어,
+특정한 자체 서명 인증서를 신뢰하거나
+앱이 신뢰하는 공개 CA 세트를 제한합니다.
+ </li>
+
+ <li>
+ <b>디버그 전용 재정의:</b> 설치된 기반에 위험을 더하지 않고도, 앱의 보안 연결을 안전하게
+디버그할 수 있습니다.
+ </li>
+
+ <li>
+ <b>일반 텍스트 트래픽 옵트아웃:</b> 일반 텍스트 트래픽을 실수로 사용하지
+않도록 앱을 보호합니다.
+ </li>
+
+ <li>
+ <b>인증서 고정:</b> 앱의 안전한 연결을 특정 인증서로
+제한합니다.
+ </li>
+</ul>
+
+
+<h2 id="manifest">보안 구성 파일 추가</h2>
+
+<p>
+ 네트워크 보안 구성 기능은 XML 파일을 사용해서
+앱의 설정을 지정합니다. 앱 매니페스트에 이 파일을 가리키는 항목을
+포함해야 합니다. 매니페스트에서 발췌한 다음 코드는
+이 항목을 생성하는 방법을 보여줍니다.
+</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<manifest ... >
+ <application ... >
+ <meta-data android:name="android.security.net.config"
+ android:resource="@xml/network_security_config" />
+ ...
+ </application>
+</manifest>
+</pre>
+
+<h2 id="CustomTrust">신뢰할 수 있는 CA 사용자 지정</h2>
+
+<p>
+ 앱에서 플랫폼 기본값 대신 사용자 지정 CA 세트를
+신뢰하고자 할 수 있습니다. 가장 일반적인 이유는 다음과 같습니다.
+</p>
+
+<ul>
+ <li>사용자 지정 인증 기관(자체 서명한 인증서,
+국제 기업 CA에서 발급한 인증서 등)을 포함한 호스트에 연결.
+ </li>
+
+ <li>모든 사전 설치된 CA 대신 신뢰할 수 있는 CA로만
+CA 세트를 제한.
+ </li>
+
+ <li>시스템에 포함되지 않은 추가 CA 신뢰.
+ </li>
+</ul>
+
+<p>
+ 기본적으로 모든 앱으로부터 안전한(예: TLS, HTTPS) 연결은 사전 설치된 시스템 CA를 신뢰하고,
+API 레벨 23(Android M)
+이하를 대상으로 하는 앱도 사용자가 추가한 CA 저장소를 기본적으로 신뢰합니다. 앱은
+{@code base-config}(앱
+전체 사용자 지정) 또는 {@code domain-config}(도메인별
+사용자 지정)를 사용하여 연결을 사용자 지정할 수 있습니다.
+</p>
+
+
+<h3 id="ConfigCustom">사용자 지정 CA 구성</h3>
+
+<p>
+ 자체 서명된
+인증서를 사용하는 호스트나 신뢰할 수 있는 비공개 CA(예: 사내 CA)에서 발급한 SSL 인증서를 사용하는 호스트에
+연결할 경우를 가정합시다.
+</p>
+
+<p>
+ <code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/my_ca"/>
+ </trust-anchors>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+<p>
+ 자체 서명된 인증서 또는 비공개 CA 인증서를 PEM 또는 DER 형식으로
+{@code res/raw/my_ca}에 추가합니다.
+</p>
+
+
+<h3 id="LimitingCas">신뢰할 수 있는 CA 세트 제한</h3>
+
+<p>
+ 앱에서 시스템이 신뢰하는 CA 중 일부를 신뢰하지 않으려면, 대신
+신뢰할 CA 세트를 줄여서 지정할 수 있습니다. 이 방법은
+다른 CA에서 발급된 허위 인증서로부터 앱을 보호해줍니다.
+</p>
+
+<p>
+ 신뢰할 수 있는 CA 세트를 제한하는 구성은 특정 도메인에서 <a href="#TrustingACustomCa">사용자 지정 CA를 신뢰</a>하는 것과 비슷하지만
+여러 CA가 리소스에서 제공된다는 점이 다릅니다.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">secure.example.com</domain>
+ <domain includeSubdomains="true">cdn.example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/trusted_roots"/>
+ </trust-anchors>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+<p>
+ 신뢰할 수 있는 CA를 PEM 또는 DER 형식으로 {@code res/raw/trusted_roots}에 추가합니다.
+ PEM 형식을 사용할 경우 파일에 PEM 데이터<em>만</em> 포함되고
+다른 추가 텍스트가 포함되어서는 안 됩니다. 또한 한 개가 아니라 여러 개의
+<a href="#certificates"><code><certificates></code></a>
+요소를 제공할 수 있습니다.
+</p>
+
+
+<h3 id="TrustingAdditionalCas">
+ 추가 CA 신뢰
+</h3>
+
+<p>
+ 앱에서 시스템이 신뢰하지 않는 CA를 신뢰하고자 한다면,
+이는 시스템에 해당 CA가 아직 포함되지 않았거나 CA가 Android 시스템에 포함되기 위한
+요구사항을 충족하지 못했기 때문일 수 있습니다. 앱은
+구성에 대해 여러 개의 인증서 소스를 지정하여
+신뢰할 수 있는 CA를 추가할 수 있습니다.
+</p>
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <base-config>
+ <trust-anchors>
+ <certificates src="@raw/extracas"/>
+ <certificates src="system"/>
+ </trust-anchors>
+ </base-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="TrustingDebugCa">디버그용 CA 구성</h2>
+
+<p>
+ HTTPS로 연결되는 앱을 디버그할 때
+프로덕션 서버에 SSL 인증서가 없는 로컬 개발 서버로
+연결하고자 할 수도 있습니다. 앱 코드를 수정하지 않고 이 기능을 지원하려면,
+{@code debug-overrides}를
+사용하여 <i>오직</i> <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">
+android:debuggable</a>
+이 {@code true}일 때만 신뢰할 수 있는 디버그 전용 CA를 지정할 수 있습니다. 일반적으로 IDE 및 빌드 도구는 비 릴리스 빌드에 대해
+ 이 플래그를 자동으로 설정합니다.
+</p>
+
+<p>
+ 보안 예방 조치로 앱 스토어에서
+디버그 가능으로 표시된 앱은 허용하지 않기 때문에
+일반적인 조건 코드보다 안전합니다.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <debug-overrides>
+ <trust-anchors>
+ <certificates src="@raw/debug_cas"/>
+ </trust-anchors>
+ </debug-overrides>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="UsesCleartextTraffic">일반 텍스트 트래픽 옵트아웃</h2>
+
+<p>
+ 보안 연결만 사용하여 대상에 연결하는 애플리케이션은 해당
+대상에 대해 일반 텍스트를 지원하는 기능(HTTPS 대신 암호화되지 않은 HTTP
+프로토콜 사용)을 옵트아웃할 수 있습니다. 이 옵션은
+백엔드 서버 등의 외부 소스가 제공하는 URL의 변경 사항으로 인해
+앱에서 우연히 회귀가 일어나지 않도록 예방합니다.
+ 자세한 내용은 {@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted
+ NetworkSecurityPolicy.isCleartextTrafficPermitted()}를 참조하세요.
+</p>
+
+<p>
+ 예를 들어, 앱에서 적대적 네트워크로부터 민감한 트래픽을 보호하기 위해 {@code
+ secure.example.com}에 대한 연결은 항상 HTTPS를 통해서만 수행되도록
+할 수 있습니다.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config usesCleartextTraffic="false">
+ <domain includeSubdomains="true">secure.example.com</domain>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="CertificatePinning">인증서 고정</h2>
+
+<p>
+ 일반적으로 앱은 모든 사전 설치된 CA를 신뢰합니다. 이러한 CA에서
+허위 인증서를 발급한다면 앱이 MiTM
+공격에 노출될 위험이 있습니다. 일부 앱은 신뢰하는 CA 세트를 제한하거나
+인증서를 고정하는 방식으로 허용하는 인증서 세트를 제한합니다.
+</p>
+
+<p>
+ 인증서 고정은
+공개 키 해시(X.509인증서의 SubjectPublicKeyInfo)로 인증서 세트를 제공하는 방식으로 수행됩니다. 그러면 인증서 체인에
+하나 이상의 고정된 공개 키가 있어야만
+인증서 체인이 유효합니다.
+</p>
+
+<p>
+ 인증서 고정을 사용할 때는 언제나 백업 키를 포함해야
+새로운 키로 강제 전환하거나 CA를 변경할 경우(
+CA 인증서 또는 해당 CA의 중간 CA에 고정할 경우)
+앱 연결이 영향을 받지 않습니다. 그렇지 않으면
+연결을 복구하기 위해 앱에 업데이트를 내보내야 합니다.
+</p>
+
+<p>
+ 또한, 고정을 수행하지 않게 되면 핀 만료 시간을
+설정할 수 있습니다. 이는 업데이트되지 않은 앱에서
+연결 문제를 예방해 줍니다. 그러나 핀에 만료 시간을 설정하면
+고정 우회가 가능할 수도 있습니다.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <pin-set expiration="2018-01-01">
+ <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
+ <!-- backup pin -->
+ <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
+ </pin-set>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="ConfigInheritance">구성 상속 동작</h2>
+
+<p>
+ 특정 구성에서 설정되지 않은 값을 상속합니다. 이 동작은 구성 파일을 읽을 수 있게 유지하면서도
+더욱 복잡한 구성이 가능합니다.
+</p>
+
+<p>
+ 특정 항목에 값이 설정되지 않았다면
+그 다음으로 일반적인 항목의 값이 사용됩니다. {@code domain-config}에서 설정되지 않은 값은
+중첩될 경우 상위 {@code domain-config}에서 가져오고 그렇지 않을 경우 {@code
+ base-config}에서 가져옵니다. {@code base-config}에서 설정되지 않은 값은
+플랫폼 기본값을 사용합니다.
+</p>
+
+<p>
+ 예를 들어, {@code
+ example.com}의 하위 도메인에 대한 모든 연결은 사용자 지정 CA 세트를 사용해야 합니다. 또한, 이러한 도메인에 대한 일반 텍스트 트래픽은
+{@code
+ secure.example.com}에 연결할 때를 <em>제외</em>하고 허용됩니다. {@code example.com} 구성 내부에 {@code
+ secure.example.com} 구성을 중첩하면
+{@code trust-anchors}를 복제하지 않아도 됩니다.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/my_ca"/>
+ </trust-anchors>
+ <domain-config cleartextTrafficPermitted="false">
+ <domain includeSubdomains="true">secure.example.com</domain>
+ </domain-config>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="FileFormat">구성 파일 형식</h2>
+
+<p>
+ 네트워크 보안 구성 기능은 XML 파일 형식을 사용합니다.
+ 파일의 전반적 구조는 다음 코드 샘플에 나타나 있습니다.
+</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <base-config>
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ </base-config>
+
+ <domain-config>
+ <domain>android.com</domain>
+ ...
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ <pin-set>
+ <pin digest="...">...</pin>
+ ...
+ </pin-set>
+ </domain-config>
+ ...
+ <debug-overrides>
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ </debug-overrides>
+</network-security-config>
+</pre>
+
+<p>
+ 다음 섹션에서는 이 파일 형식의 구문과
+기타 세부 정보를 설명합니다.
+</p>
+
+<h3 id="network-security-config">
+ <network-security-config>
+</h3>
+
+<dl class="xml">
+ <dt>
+ 다음을 포함할 수 있습니다.
+ </dt>
+
+ <dd>
+ <code><a href="#base-config"><base-config></a></code> 0 또는 1개<br>
+ <code><a href=
+ "#domain-config"><domain-config></a></code> 임의의 개수<br>
+ <code><a href="#debug-overrides"><debug-overrides></a></code> 0 또는 1개
+ </dd>
+</dl>
+
+<h3 id="base-config">
+ <base-config>
+</h3>
+
+<dl class="xml">
+ <dt>
+ 구문:
+ </dt>
+</dl>
+
+<pre class="stx">
+<base-config <a href=
+"#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
+ ...
+</base-config>
+</pre>
+<dl class="xml">
+ <dt>
+ 다음을 포함할 수 있습니다.
+ </dt>
+
+ <dd>
+ <code><a href="#trust-anchors"><trust-anchors></a></code>
+ </dd>
+
+ <dt>
+ 설명:
+ </dt>
+
+ <dd>
+ 대상이
+<a href="#domain-config"><code>domain-config</code></a>에 포함되지 않는 모든 연결에서 사용하는 기본 구성.
+
+<p>
+ 설정되지 않은 값은 플랫폼 기본값을 사용합니다. API 레벨 24 이상을 대상으로 하는
+앱의 기본 구성:
+</p>
+
+<pre>
+<base-config usesCleartextTraffic="true">
+ <trust-anchors>
+ <certificates src="system" />
+ </trust-anchors>
+</base-config>
+</pre>
+API 레벨 23 이하를 대상으로 하는 앱의 기본 구성:
+<pre>
+<base-config usesCleartextTraffic="true">
+ <trust-anchors>
+ <certificates src="system" />
+ <certificates src="user" />
+ </trust-anchors>
+</base-config>
+</pre>
+
+ </dd>
+</dl>
+
+<h3 id="domain-config"><domain-config></h3>
+<dl class="xml">
+<dt>구문:</dt>
+<dd>
+<pre class="stx"><domain-config <a href="#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
+ ...
+</domain-config></pre>
+</dd>
+
+<dt>다음을 포함할 수 있습니다.</dt>
+
+<dd>
+<code><a href="#domain"><domain></a></code> 1개 이상
+<br/><code><a href="#trust-anchors"><trust-anchors></a></code> 0 또는 1개
+<br/><code><a href="#pin-set"><pin-set></code></a> 0 또는 1개
+<br/>중첩된 <code><domain-config></code> 임의의 개수</dd>
+
+<dt>설명</dt>
+<dd>{@code domain} 요소에서 정의한 특정 대상에 대한 연결에 사용되는 구성.
+
+<p>여러 {@code domain-config} 요소에서 대상을 포함하는 경우 가장 구체적인(긴)
+일치 도메인이 포함된 구성이 사용됩니다.</p></dd>
+</dl>
+
+
+<h3 id="domain"><domain></h3>
+
+<dl class="xml">
+ <dt>
+ 구문:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<domain includeSubdomains=["true" | "false"]>example.com</domain>
+</pre>
+ </dd>
+
+ <dt>
+ 속성:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code includeSubdomains}
+ </dt>
+
+ <dd>
+ {@code "true"}인 경우 이 도메인 규칙이 도메인 및 모든 하위 도메인(하위 도메인의 하위 도메인 포함)과
+일치합니다. 그렇지 않을 경우 이 규칙은
+정확한 일치에만 적용됩니다.
+ </dd>
+ </dl>
+ </dd>
+
+ <dt>
+ 설명:
+ </dt>
+</dl>
+
+<h3 id="debug-overrides"><debug-overrides></h3>
+
+<dl class="xml">
+ <dt>
+ 구문:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<debug-overrides>
+ ...
+</debug-overrides>
+</pre>
+ </dd>
+
+ <dt>
+ 다음을 포함할 수 있습니다.
+ </dt>
+
+ <dd>
+ <code><a href="#trust-anchors"><trust-anchors></a></code> 0 또는 1개
+ </dd>
+
+ <dt>
+ 설명:
+ </dt>
+
+ <dd>
+ <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
+가 {@code "true"}일 때 재정의를 적용합니다. 일반적으로
+IDE와 빌드 도구에서 생성한 비 릴리스 빌드에 해당합니다. {@code
+ debug-overrides}에서 지정된 신뢰 앵커를 모든 다른 구성에 추가하고,
+서버의 인증서 체인이 이러한
+디버그 전용 신뢰 앵커 중 하나를 사용하면 고정을 수행하지 않습니다. <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
+이 {@code "false"}이면 이 섹션은 완전히 무시합니다.
+ </dd>
+</dl>
+
+<h3 id="trust-anchors"><trust-anchors></h3>
+<dl class="xml">
+ <dt>
+ 구문:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<trust-anchors>
+...
+</trust-anchors>
+</pre>
+ </dd>
+
+ <dt>
+ 다음을 포함할 수 있습니다.
+ </dt>
+
+ <dd>
+ <code><a href="#certificates"><certificates></a></code> 임의의 개수
+ </dd>
+
+ <dt>
+ 설명:
+ </dt>
+
+ <dd>
+ 보안 연결에 대한 신뢰 앵커 세트.
+ </dd>
+</dl>
+
+
+<h3 id="certificates"><certificates></h3>
+<dl class="xml">
+<dt>구문:</dt>
+<dd><pre class="stx"><certificates src=["system" | "user" | "<i>raw resource</i>"]
+ overridePins=["true" | "false"] />
+</pre></dd>
+<dt>설명:</dt>
+<dd>{@code trust-anchors} 요소에 대한 X.509 인증서 세트.</dd>
+
+<dt>속성:</dt>
+<dd><dl class="attr">
+<dt>{@code src}</dt>
+<dd>
+CA 인증서 소스는 다음 중 하나가 될 수 있습니다.
+<ul>
+ <li>X.509 인증서를 포함한 파일을 가리키는 원시 리소스 ID.
+ 인증서는 DER 또는 PEM 형식으로 암호화해야 합니다. PEM 인증서의 경우,
+파일에는 코멘트와 같은 PEM이 아닌 추가 데이터가
+포함되어서는 <em>안 됩니다</em>.
+ </li>
+
+ <li>사전 설치된 시스템 CA 인증서의 {@code "system"}
+ </li>
+
+ <li>사용자가 추가한 CA 인증서의 {@code "user"}
+ </li>
+</ul>
+</dd>
+
+<dt>{@code overridePins}</dt>
+<dd>
+ <p>
+ 이 소스의 CA가 인증서 고정을 우회할지 지정합니다. {@code
+ "true"}이고 인증서 체인이 이 소스의 CA 중 하나를 통해 묶일 경우
+고정을 수행하지 않습니다. 디버그 CA 또는
+사용자가 앱의 보안 트래픽을 MiTM하도록 지원할 때 유용합니다.
+ </p>
+
+ <p>
+ {@code debug-overrides}
+요소에서 지정되지 않은 경우 기본값은 {@code "false"}입니다. 지정된 경우 기본값은 {@code "true"}입니다.
+ </p>
+</dd>
+</dl>
+</dd>
+
+
+<h3 id="pin-set"><pin-set></h3>
+
+<dl class="xml">
+ <dt>
+ 구문:
+ </dt>
+
+ <dd>
+<pre class="stx">
+<pin-set expiration="date">
+...
+</pin-set>
+</pre>
+ </dd>
+
+ <dt>
+ 다음을 포함할 수 있습니다.
+ </dt>
+
+ <dd>
+ <code><a href="#pin"><pin></a></code> 임의의 개수
+ </dd>
+
+ <dt>
+ 설명:
+ </dt>
+
+ <dd>
+ 공개 키 핀 세트. 신뢰할 수 있는 보안 연결은
+신뢰 체인의 공개 키 중 하나가 핀 세트에 포함되어야 합니다. 핀 형식은
+<code><a href="#pin"><pin></a></code>를 참조하세요.
+ </dd>
+
+ <dt>
+ 속성:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code expiration}
+ </dt>
+
+ <dd>
+ 핀 만료 당일과 그 이후의 {@code yyyy-MM-dd} 형식 날짜로,
+핀이 비활성화됩니다. 이 속성이 설정되지 않으면
+핀이 만료되지 않습니다.
+ <p>
+ 만료는 어떤 이유(사용자가 앱 업데이트를 비활성화)로
+ PIN 세트가 업데이트되지 않는 앱에서
+ 연결 문제를 예방하는 데 유용합니다.
+ </p>
+ </dd>
+ </dl>
+ </dd>
+</dl>
+
+<h3 id="pin"><pin></h3>
+<dl class="xml">
+ <dt>
+ 구문:
+ </dt>
+
+ <dd>
+<pre class="stx">
+<pin digest=["SHA-256"]>base64 encoded digest of X.509
+ SubjectPublicKeyInfo (SPKI)</pin>
+</pre>
+ </dd>
+
+ <dt>
+ 속성:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code digest}
+ </dt>
+
+ <dd>
+ PIN을 생성하는 데 사용된 다이제스트 알고리즘. 현재
+{@code "SHA-256"}만 지원됩니다.
+ </dd>
+ </dl>
+ </dd>
+</dl>
diff --git a/docs/html-intl/intl/ko/training/basics/network-ops/data-saver.jd b/docs/html-intl/intl/ko/training/basics/network-ops/data-saver.jd
new file mode 100644
index 0000000..3c22b5e
--- /dev/null
+++ b/docs/html-intl/intl/ko/training/basics/network-ops/data-saver.jd
@@ -0,0 +1,234 @@
+page.title=Data Saver
+metaDescription=User-enabled data usage optimization.
+page.keywords="android N", "data usage", "metered network"
+page.image=images/cards/card-nyc_2x.jpg
+@jd:body
+
+<div id="tb-wrapper">
+ <div id="tb">
+ <h2>
+ 이 문서의 내용
+ </h2>
+
+ <ol>
+ <li>
+ <a href="#status">Data Saver 기본 설정 확인</a>
+ <ol>
+ <li>
+ <a href="#request-whitelist">허용 목록 권한 요청</a>
+ </li>
+ </ol>
+ </li>
+
+ <li>
+ <a href="#monitor-changes">Data Saver 기본 설정 변경 사항
+모니터링</a>
+ </li>
+
+ <li>
+ <a href="#testing">Android 디버그 브리지 명령을 이용한 테스트</a>
+ </li>
+ </ol>
+ </div>
+</div>
+
+<p>
+ 스마트폰의 수명 전체에 걸쳐, 모바일 데이터 요금제에 따른 비용이
+ 기기 자체의 가격을 쉽게 초과할 수 있습니다. N Developer Preview에서는 사용자들이
+로밍 중이든, 결제 주기가 끝날 무렵이든, 소액 선불 데이터 팩을 사용 중이든 상관없이, 데이터 사용량을 줄이기 위해 기기 전체에서
+Data Saver를 활성화할 수 있습니다.
+</p>
+
+<p>
+ 사용자가 <strong>Settings</strong>에서 Data Saver를 활성화하고
+ 해당 기기가 데이터 통신 네트워크에 있는 경우, 시스템은 백그라운드 데이터 사용을
+차단하고 가능하면 포그라운드에서 데이터를 더 적게 사용하도록 앱에게 신호를 보냅니다. 사용자는
+Data Saver가 켜진 경우에도 백그라운드 데이터 통신 연결을 허용하기 위해
+특정 앱을 허용 목록에 추가할 수 있습니다.
+</p>
+
+<p>
+ N Developer Preview는 {@link android.net.ConnectivityManager}
+ API를 확장하여 <a href="#status">사용자의 Data Saver 기본 설정을 검색</a>하고 <a href="#monitor-changes">기본
+ 설정 변경을 모니터링</a>하는 방법을
+ 앱에 제공합니다. 사용자가 Data Saver를 활성화했는지 여부를 앱이 확인하고
+포그라운드 및 백그라운드 데이터 사용을 제한하기 위해
+앱이 노력하는 것은 좋은 방법입니다.
+</p>
+
+<h2 id="status">
+ Data Saver 기본 설정 확인
+</h2>
+
+<p>
+ N Developer Preview에서 앱이 {@link
+ android.net.ConnectivityManager} API를 사용하여, 어떤 데이터 사용량 제한이
+적용되고 있는지를 확인할 수 있습니다. {@code getRestrictBackgroundStatus()}
+ 메서드는 다음 값 중 하나를 반환합니다.
+</p>
+
+<dl>
+ <dt>
+ {@code RESTRICT_BACKGROUND_STATUS_DISABLED}
+ </dt>
+
+ <dd>
+ Data Saver가 비활성화되었습니다.
+ </dd>
+
+ <dt>
+ {@code RESTRICT_BACKGROUND_STATUS_ENABLED}
+ </dt>
+
+ <dd>
+ 사용자가 이 앱에 대해 Data Saver를 활성화했습니다. 앱은 포그라운드에서 데이터 사용량을
+제한하고, 백그라운드
+데이터 사용량에 대한 제한을 적절히 처리하기 위해 노력해야 합니다.
+ </dd>
+
+ <dt>
+ {@code RESTRICT_BACKGROUND_STATUS_WHITELISTED}
+ </dt>
+
+ <dd>
+ 사용자가 Data Saver를 활성화했지만 앱이 허용 목록에 추가되어 있습니다. 앱은
+포그라운드 및 백그라운드 데이터 사용량을 제한하기 위해 여전히 노력해야 합니다.
+ </dd>
+</dl>
+
+<p>
+ Data Saver가 비활성화되어 있거나 앱이 허용 목록에 추가되어 있더라도,
+기기가 데이터 통신 네트워크에 연결될 때마다 항상
+ 데이터 사용량을 제한하는 것이 좋은 방법입니다. 다음 샘플 코드에서는 {@link
+ android.net.ConnectivityManager#isActiveNetworkMetered
+ ConnectivityManager.isActiveNetworkMetered()} 및 {@code
+ ConnectivityManager.getRestrictBackgroundStatus()}를 사용하여 앱이 사용해야 하는 데이터의 양을
+결정합니다.
+</p>
+
+<pre>
+ConnectivityManager connMgr = (ConnectivityManager)
+ getSystemService(Context.CONNECTIVITY_SERVICE);
+// Checks if the device is on a metered network
+if (connMgr.isActiveNetworkMetered()) {
+ // Checks user’s Data Saver settings.
+ switch (connMgr.getRestrictBackgroundStatus()) {
+ case RESTRICT_BACKGROUND_STATUS_ENABLED:
+ // Background data usage is blocked for this app. Wherever possible,
+ // the app should also use less data in the foreground.
+
+ case RESTRICT_BACKGROUND_STATUS_WHITELISTED:
+ // The app is whitelisted. Wherever possible,
+ // the app should use less data in the foreground and background.
+
+ case RESTRICT_BACKGROUND_STATUS_DISABLED:
+ // Data Saver is disabled. Since the device is connected to a
+ // metered network, the app should use less data wherever possible.
+ }
+} else {
+ // The device is not on a metered network.
+ // Use data as required to perform syncs, downloads, and updates.
+}
+</pre>
+
+<h3 id="request-whitelist">
+ 허용 목록 권한 요청
+</h3>
+
+<p>
+ 앱이 백그라운드에서 데이터를 사용해야 하는 경우, 앱의 패키지 이름의 URI가 포함된
+<code>Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS</code>
+인텐트(예:
+<code>package:MY_APP_ID</code>)를 앱이 보내서
+허용 목록 권한을 요청할 수 있습니다.
+</p>
+
+<p>
+ 인텐트와 URI를 보내면 <strong>Settings</strong> 앱이 시작되고
+앱에 대한 데이터 사용량 설정이 표시됩니다. 그러면 사용자는 앱에 대해 백그라운드 데이터의
+사용 여부를 결정할 수 있습니다. 이 인텐트를 보내기 전에,
+백그라운드 데이터 사용을 활성화하기 위해
+<strong>Settings</strong> 앱 시작 여부를 사용자에게 먼저 묻는 것이
+좋습니다.
+</p>
+
+<h2 id="monitor-changes">
+ Data Saver 기본 설정 변경 사항 모니터링
+</h2>
+
+<p>
+ 앱은 {@code
+ ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED}를 수신하기 위해 {@link
+ android.content.BroadcastReceiver}를 만들고 수신기를 {@link android.content.Context#registerReceiver
+ Context.registerReceiver()}에 동적으로 등록하여
+Data Saver 기본 설정의 변경 사항을 모니터링할 수 있습니다. 앱은 이 브로드캐스트를 수신할 때 {@code
+ ConnectivityManager.getRestrictBackgroundStatus()}를 호출하여 <a href="#status">새로운 Data Saver 기본 설정이
+권한에 영향을 미치는지 확인</a>해야
+합니다.
+</p>
+
+<p class="note">
+ <strong>참고:</strong> 시스템에서는 {@link
+ android.content.Context#registerReceiver Context.registerReceiver()}로 동적으로 등록하는 앱에만 이
+브로드캐스트를 보냅니다. 이
+브로드캐스트를 수신하도록 매니페스트에 등록하는 앱은
+이를 수신하지 못합니다.
+</p>
+
+<h2 id="testing">
+ Android 디버그 브리지 명령을 이용한 테스트
+</h2>
+
+<a href="{@docRoot}tools/help/adb.html">Android 디버그 브리지</a>는
+네트워크 권한을 확인하고 구성하는 데 사용될 수 있는 몇 가지 명령을
+제공합니다.
+
+<dl>
+ <dt>
+ <code>$ adb shell dumpsys netpolicy</code>
+ </dt>
+
+ <dd>
+ 현재 전역 백그라운드 네트워크
+ 제한 설정, 허용 목록에 현재 있는 패키지 UID 및 알려진
+다른 패키지의 네트워크 권한이 포함된 보고서를 생성합니다.
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy</code>
+ </dt>
+
+ <dd>
+ Network Policy Manager(netpolicy) 명령의 전체 목록을 표시합니다.
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy set restrict-background
+ <boolean></code>
+ </dt>
+
+ <dd>
+ <code>true</code> 또는
+ <code>false</code>를 각각 전달할 때 Data Saver 모드를 활성화하거나 비활성화합니다.
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy add restrict-background-whitelist
+ <UID></code>
+ </dt>
+
+ <dd>
+ 지정된 패키지 UID를 허용 목록에 추가하여 백그라운드 데이터 통신 연결을
+ 허용합니다.
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy remove restrict-background-whitelist
+ <UID></code>
+ </dt>
+
+ <dd>
+ 지정된 패키지 UID를 허용 목록에서 제거하여, Data Saver가 활성화된 동안 백그라운드 데이터 통신 연결을
+차단합니다.
+ </dd>
+</dl>
diff --git a/docs/html-intl/intl/ko/training/tv/playback/picture-in-picture.jd b/docs/html-intl/intl/ko/training/tv/playback/picture-in-picture.jd
new file mode 100644
index 0000000..96129ce
--- /dev/null
+++ b/docs/html-intl/intl/ko/training/tv/playback/picture-in-picture.jd
@@ -0,0 +1,213 @@
+page.title=PIP
+page.keywords=preview, sdk, PIP, Picture-in-picture
+page.tags=androidn
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>이 문서의 내용</h2>
+<ol>
+ <li><a href="#declaring">액티비티의
+PIP 지원 선언</a></li>
+ <li><a href="#pip_button">액티비티를 PIP로 전환</a>
+</li>
+ <li><a href="#handling_ui">PIP에서 UI 처리</a>
+</li>
+ <li><a href="#continuing_playback">
+PIP에서 동영상 재생 계속</a></li>
+ <li><a href="#single_playback">PIP를 위한 단일 재생 액티비티
+사용</a></li>
+ <li><a href="#best">모범 사례</a></li>
+</ol>
+
+<h2>참고 항목</h2>
+<ol>
+ <li><a href="{@docRoot}preview/features/multi-window.html">다중 창
+지원</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>Android N에서 Android TV 사용자는
+앱 안에서 탐색할 때 화면 모서리의 고정 창에서
+동영상을 볼 수 있습니다. PIP(Picture-In-Picture) 모드를 사용하면
+앱의 백그라운드에서 다른 액티비티를 계속하면서
+고정 창에서 동영상 액티비티를 실행할 수 있습니다. PIP 창에서 사용자는 앱을 사용하는 동안 멀티태스킹이 가능하므로
+생산성이 향상됩니다.</p>
+
+<p>앱이 PIP 모드를 실행할 시기를 결정할 수 있습니다. PIP 모드로 전환하는 시기와 관련된 몇 가지
+예시는 다음과 같습니다.</p>
+
+<ul>
+<li>사용자가 동영상에서 다른 콘텐츠를 탐색하러 이동할 때 앱이
+동영상을 PIP 모드로 전환할 수 있습니다.</li>
+<li>사용자가 콘텐츠 에피소드의 끝부분을 볼 때 앱이
+동영상을 PIP 모드로 전환할 수 있습니다. 메인 화면은 시리즈 다음 에피소드의
+홍보 또는 요약 정보를 표시합니다.</li>
+<li>사용자가 동영상을 보는 동안 앱이
+추가 콘텐츠를 대기열에 올릴 수 있는 방법을 제공할 수 있습니다. 메인 화면에 콘텐츠 선택 액티비티가 표시되는 동안
+동영상이 PIP 모드에서 계속 재생됩니다.</li>
+</ul>
+
+<p>PIP 창은 240x135dp이고
+화면 모서리 4개 중 하나에서 가장 위쪽 레이어에 표시되며, 시스템이 선택합니다. 사용자는
+리모컨의 <b>Home</b> 버튼을 눌러
+PIP 창을 전체 화면으로 전환하거나 PIP를 닫는 PIP 메뉴를 불러올 수 있습니다. 다른 동영상이
+메인 화면에서 재생되기 시작하면 PIP 창이
+자동으로 닫힙니다. 사용자가 Recents를 통해서 PIP 창을 닫을 수도 있습니다.</p>
+
+<img src="{@docRoot}images/android-7.0/pip-active.png" />
+<p class="img-caption"><strong>그림 1.</strong> 사용자가 메인 화면에서 콘텐츠를 탐색하는 동안
+화면 모서리에 표시되는 PIP 동영상.
+</p>
+
+<p>PIP는 Android N에서 사용할 수 있는 다중 창 API를 사용하여
+고정된 동영상 오버레이 창을 제공합니다. 앱에 PIP를 추가하려면
+PIP를 지원하는 액티비티를 등록하고 필요한 경우 액티비티를 PIP 모드로 전환해야 합니다. 또한
+액티비티가 PIP 모드에 있을 때 UI 요소가 숨겨지고 동영상 재생이
+계속되는지 확인해야 합니다.</p>
+
+<h2 id="declaring">액티비티의 PIP 지원 선언</h2>
+
+<p>기본적으로 시스템은 앱에 대해 PIP를 자동으로 지원하지 않습니다.
+앱에서 PIP를 지원하려면
+<code>android:supportsPictureInPicture</code>와
+<code>android:resizeableActivity</code>를 <code>true</code>로 설정하여 매니페스트에서 동영상 액티비티를
+등록합니다. 또한,
+PIP 모드 전환 시 레이아웃 변경이 일어날 때 액티비티가 다시 시작되지 않도록
+액티비티가 레이아웃 구성 변화를 처리하게 지정합니다.</p>
+
+<pre>
+<activity android:name="VideoActivity"
+ android:resizeableActivity="true"
+ android:supportsPictureInPicture="true"
+ android:configChanges=
+ "screenSize|smallestScreenSize|screenLayout|orientation"
+ ...
+</pre>
+
+<p>액티비티를 등록할 때는 PIP 모드에서
+액티비티가 TV 화면의 작은 오버레이 창에 표시된다는 것을 기억하세요. 최소 UI를 포함한
+동영상 재생 액티비티가 가장 좋은 사용자 환경을 제공합니다. 작은 UI 요소를 포함한
+액티비티는 PIP 모드로 전환할 때
+사용자가 PIP 창의 UI 요소를 상세히 볼 수 없으므로
+좋은 사용자 환경을 제공하지 못할 수 있습니다.</p>
+
+<h2 id="pip_button">액티비티를 PIP로 전환</h2>
+
+액티비티를 PIP 모드로 전환해야 하는 경우
+<code>Activity.enterPictureInPictureMode()</code>를 호출합니다. 다음 예에서는 사용자가
+미디어 컨트롤 막대에서 전용 PIP 버튼을 선택했을 때
+PIP 모드로 전환합니다.</p>
+
+<pre>
+@Override
+public void onActionClicked(Action action) {
+ if (action.getId() == R.id.lb_control_picture_in_picture) {
+ getActivity().enterPictureInPictureMode();
+ return;
+ }
+ ...
+</pre>
+
+<p>미디어 컨트롤 막대에 PIP 버튼을 추가하면
+사용자가 동영상 재생을 제어하면서 PIP 모드로 쉽게 전환할 수 있습니다.</p>
+
+<img src="{@docRoot}images/android-7.0/pip-button.png" />
+<p class="img-caption"><strong>그림 1.</strong> 미디어 컨트롤 막대의 PIP
+버튼.</p>
+
+<p>Android N에는 컨트롤 막대 PIP 동작을 정의하고 PIP 아이콘을 사용하는 새로운
+<code>PlaybackControlsRow.PictureInPictureAction</code> 클래스가 포함되어 있습니다.
+</p>
+
+<h2 id="handling_ui">PIP에서 UI 처리</h2>
+
+<p>액티비티가 PIP 모드로 전환되면
+동영상 재생만 표시됩니다. 액티비티가 PIP 모드로 전환되기 전에 UI 요소를 제거하고
+액티비티가 다시 전체 화면이 되었을 때 이 요소를 복원합니다.
+필요에 따라 <code>Activity.onPictureInPictureModeChanged()</code> 또는
+<code>Fragment.onPictureInPictureModeChanged()</code>를 재정의하고
+UI 요소를 활성화/비활성화합니다. 예를 들면 다음과 같습니다.</p>
+
+<pre>
+@Override
+public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
+ if (isInPictureInPictureMode) {
+ // Hide the controls in picture-in-picture mode.
+ ...
+ } else {
+ // Restore the playback UI based on the playback status.
+ ...
+ }
+}
+</pre>
+
+<h2 id="continuing_playback">PIP에서 동영상 재생 계속
+</h2>
+
+<p>액티비티가 PIP 모드로 전환되면 시스템은
+액티비티가 일시 정지된 상태에 있다고 간주하고 액티비티의 <code>onPause()</code> 메서드를 호출합니다. 동영상
+재생은 일시 정지되어서는 안되며 PIP 모드로 인해 액티비티가 일시 정지되었다면
+계속 재생되어야 합니다. 액티비티의
+<code>onPause()</code> 메서드에서 PIP를 확인하고 적절히 재생을 처리합니다. 예를 들면 다음과 같습니다.
+</p>
+
+<pre>
+@Override
+public void onPause() {
+ // If called while in PIP mode, do not pause playback
+ if (isInPictureInPictureMode()) {
+ // Continue playback
+ ...
+ }
+ // If paused but not in PIP, pause playback if necessary
+ ...
+}
+</pre>
+
+<p>액티비티가 PIP 모드에서 전체 화면 모드로 전환되면
+시스템이 액티비티를 재시작하고 <code>onResume()</code> 메서드를 호출합니다.</p>
+
+<h2 id="single_playback">PIP를 위한 단일 재생 액티비티
+사용</h2>
+
+<p>동영상 재생 액티비티가 PIP 모드에 있는 동안, 앱에서
+사용자가 메인 화면에서 콘텐츠를 찾아볼 때 새 동영상을 선택할 수도 있습니다. 이 때 새 액티비티를 시작하면
+사용자에게 혼동을 줄 수 있으므로, 새 액티비티를 시작하는 대신
+기존 재생 액티비티에서 새 동영상을 전체 화면 모드로 재생합니다.</p>
+
+<p>동영상 재생 요청에 단일 액티비티가 사용되도록 하고
+필요에 따라 PIP 모드로 들어가거나 PIP 모드에서 나오도록 하려면, 매니페스트에서 액티비티의
+<code>android:launchMode</code>를 <code>singleTask</code>로 설정합니다.
+</p>
+
+<pre>
+<activity android:name="VideoActivity"
+ ...
+ android:supportsPictureInPicture="true"
+ android:launchMode="singleTask"
+ ...
+</pre>
+
+<p>액티비티에서 {@link android.app.Activity#onNewIntent
+Activity.onNewIntent()}를 재정의하고 새 동영상을 처리하며, 필요한 경우 기존 동영상
+재생을 중단시키세요.</p>
+
+<h2 id="best">모범 사례</h2>
+
+<p>PIP는 전체 화면 동영상을 재생하는 액티비티용입니다. 액티비티를
+PIP 모드로 전환할 때는 동영상 콘텐츠만 표시하세요.
+<a href="#handling_ui">PIP에서 UI 처리</a>에서 설명한 바와 같이 액티비티가 PIP 모드로 전환되는 때를
+추적하고 UI 요소를 숨깁니다.</p>
+
+<p>PIP 창이 화면 모서리에 떠 있는 창으로 표시되므로
+PIP 창으로 가려질 수 있는 영역에는 메인 화면에서
+중요한 정보를 표시하지 말아야 합니다.</p>
+
+<p>액티비티가 PIP 모드일 때는 기본적으로 입력 포커스를 받지 않습니다. PIP 모드에서
+입력 이벤트를 수신하려면
+<code>MediaSession.setMediaButtonReceiver()</code>를 사용합니다.</p>
diff --git a/docs/html-intl/intl/ko/training/tv/tif/content-recording.jd b/docs/html-intl/intl/ko/training/tv/tif/content-recording.jd
new file mode 100644
index 0000000..ed8b6e0
--- /dev/null
+++ b/docs/html-intl/intl/ko/training/tv/tif/content-recording.jd
@@ -0,0 +1,142 @@
+page.title=TV 녹화
+page.keywords=preview, sdk, tv, 녹화
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>이 문서의 내용</h2>
+ <ol>
+ <li><a href="#supporting">녹화 지원 나타내기</a></li>
+ <li><a href="#recording">세션 녹화</a></li>
+ <li><a href="#errors">녹화 오류 처리</a></li>
+ <li><a href="#sessions">녹화된 세션 관리</a></li>
+ <li><a href="#best">모범 사례</a></li>
+ </ol>
+</div>
+</div>
+
+<p>TV 입력 서비스를 이용하면
+타임 시프팅 API를 통해 채널 재생을 일시 정지했다가 다시 시작할 수 있습니다. Android N에서는 사용자가 여러 개의 녹화된 세션을 저장할 수 있도록 함으로써
+타임 시프팅을 확장합니다.</p>
+
+<p>사용자는 미리 녹화를 예약하거나 프로그램을 보면서 녹화를
+시작할 수 있습니다. 시스템이 녹화물을 저장하면 사용자는 시스템 TV 앱을 사용하여
+녹화물을 탐색, 관리, 재생할 수 있습니다.</p>
+
+<p>TV 입력 서비스에 녹화 기능을 제공하고 싶다면,
+앱이 녹화를 지원함을 시스템에 나타내야 하고,
+프로그램 녹화 기능을 구현해야 하고, 녹화 중 발생하는 오류를 처리 및 전달해야 하고,
+녹화된 세션을 관리해야 합니다.</p>
+
+<p class="note"><strong>참고:</strong> Live Channels 앱에서는
+사용자가 녹화물을 만들거나 이에 액세스하는 방법을 아직 제공하지 않습니다. Live Channels 앱에
+대한 변경이 이루어질 때까지는, TV 입력 서비스에 대한 녹화
+환경을 완전히 테스트하기 어려울 수 있습니다.</p>
+
+<h2 id="supporting">녹화 지원 나타내기</h2>
+
+<p>TV 입력 서비스가 녹화를 지원함을 시스템에 알리려면
+서비스 메타데이터 XML 파일에서
+<code>android:canRecord</code> 속성을 <code>true</code>로 설정하세요.
+</p>
+
+<pre>
+<tv-input xmlns:android="http://schemas.android.com/apk/res/android"
+ <b>android:canRecord="true"</b>
+ android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />
+</pre>
+
+<p>서비스 메타데이터 파일에 대한 자세한 내용은
+<a href="{@docRoot}training/tv/tif/tvinput.html#manifest">매니페스트에서 TV 입력
+서비스 선언</a>을 참조하세요.
+</p>
+
+<p>또는 다음 단계에 따라 녹화 지원 사실을 코드에
+표시할 수 있습니다.</p>
+
+<ol>
+<li><code>TvInputService.onCreate()</code> 메서드에서 <code>TvInputInfo.Builder</code>
+클래스를 사용하여 새로운
+<code>TvInputInfo</code> 객체를 생성합니다.</li>
+<li>새로운 <code>TvInputInfo</code> 객체를 생성할 때, <code>build()</code>를 호출하기 전에
+<code>setCanRecord(true)</code>를 호출하여
+서비스가 녹화를 지원함을 나타냅니다.</li>
+<li>
+<code>TvInputManager.updateTvInputInfo()</code>를 호출하여 시스템에 <code>TvInputInfo</code> 객체를 등록합니다.</li>
+</ol>
+
+<h2 id="recording">세션 녹화</h2>
+
+<p>TV 입력 서비스가 녹화 기능을 지원하도록 등록한 후,
+시스템은 앱의 녹화 구현에 액세스해야 할 때
+<code>TvInputService.onCreateRecordingSession()</code>을 호출합니다.
+ 자체적인
+<code>TvInputService.RecordingSession</code> 서브클래스를 구현하고
+<code>onCreateRecordingSession()</code> 콜백이
+실행되면 이를 반환합니다. 이 서브클래스는 정확한 채널 데이터로 전환하고,
+요청된 데이터를 녹화하고, 녹화 상태와 오류를 시스템에
+전송하는 역할을 담당합니다.</p>
+
+<p>시스템이 <code>RecordingSession.onTune()</code>을 호출하면
+채널 URI에 전달되고, URI가 지정하는 채널에 맞춰 조정됩니다.
+<code>notifyTuned()</code>를 호출해서 앱이 원하는 채널에 맞춰졌음을 시스템에 알리거나
+앱이 적절한 채널에 맞출 수 없으면
+<code>notifyError()</code>를 호출합니다.</p>
+
+<p>이어서 시스템이 <code>RecordingSession.onStartRecording()</code>
+콜백을 호출합니다. 앱이 즉시 녹화를 시작해야 합니다. 시스템이 이 콜백을 호출하면,
+녹화될 프로그램에 관한 정보가 포함된 URI를 제공할 수 있습니다.
+ 녹화가 완료되면 이
+데이터를 <code>RecordedPrograms</code> 데이터 테이블에 복사해야 합니다.</p>
+
+<p>마지막으로 시스템이 <code>RecordingSession.onStopRecording()</code>을 호출합니다.
+이 시점에서 앱이 즉시 녹화를 중단해야 합니다. 또한,
+<code>RecordedPrograms</code> 테이블에서 항목을 생성해야 합니다. 이 항목에는
+<code>RecordedPrograms.COLUMN_RECORDING_DATA_URI</code> 열의 녹화된 세션 데이터 URI,
+최초
+<code>onStartRecording()</code> 호출에서 시스템이 제공한 프로그램 정보가 포함됩니다.
+</p>
+
+<p><code>RecordedPrograms</code> 테이블에 액세스하는 자세한 방법은
+<a href="#sessions">녹화된 세션 관리</a>를 참조하세요.</p>
+
+<h2 id="errors">녹화 오류 처리</h2>
+
+<p>녹화 중에 오류가 발생해서 녹화된 데이터 렌더링을 사용할 수 없을 경우,
+<code>RecordingSession.notifyError()</code>를 호출하여 시스템에 알립니다.
+마찬가지로 녹화 세션이 생성된 이후 <code>notifyError()</code>를 호출하여
+앱이 더 이상 세션을 녹화하지 못한다는 것을 시스템에 알릴 수 있습니다.</p>
+
+<p>녹화 중에 오류가 발생했지만
+사용자에게 재생 가능한 부분 녹화물을 제공하고 싶다면
+<code>RecordingSession.notifyRecordingStopped()</code>를 호출하여 시스템이
+부분 세션을 사용할 수 있게 합니다.</p>
+
+<h2 id="sessions">녹화된 세션 관리</h2>
+
+<p>시스템은 <code>TvContract.RecordedPrograms</code>
+콘텐츠 제공자 테이블에 모든 녹화 가능한 채널 앱에서 녹화된
+모든 세션에 관한 정보를 보관합니다. 이 정보는
+<code>RecordedPrograms.Uri</code> 콘텐츠 URI를 통해 액세스할 수 있습니다. 콘텐츠 제공자 API를 사용하여
+이 테이블의 항목을 읽고, 추가하고, 삭제합니다.</p>
+
+<p>콘텐츠 제공자 데이터에 관한 자세한 정보는
+<a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
+콘텐츠 제공자 기본 정보</a>를 참조하세요.</p>
+
+<h2 id="best">모범 사례</h2>
+
+<p>TV 기기는 저장소가 제한될 수 있으므로
+녹화된 세션을 저장할 저장소를 할당할 때는 신중히 판단하세요. 녹화된 세션을 저장할 공간이 부족할 때는
+<code>RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)</code>를 사용하세요.
+</p>
+
+<p>사용자가 녹화를 시작하면 최대한 빨리 데이터 녹화를
+시작해야 합니다. 이를 용이하게 하려면
+시스템이
+<code>onCreateRecordingSession()</code> 콜백을 호출할 때 저장소 액세스 및 할당 등과 같이 선행 시간이 많이 걸리는 작업을 완료합니다. 이렇게 하면
+<code>onStartRecording()</code> 콜백이
+실행될 때 즉시 녹화를 시작할 수 있습니다.</p>
diff --git a/docs/html-intl/intl/pt-br/about/versions/marshmallow/android-6.0-testing.jd b/docs/html-intl/intl/pt-br/about/versions/marshmallow/android-6.0-testing.jd
new file mode 100644
index 0000000..c00fd21
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/about/versions/marshmallow/android-6.0-testing.jd
@@ -0,0 +1,190 @@
+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/android-7.0-changes.jd b/docs/html-intl/intl/pt-br/about/versions/nougat/android-7.0-changes.jd
new file mode 100644
index 0000000..18a08f4
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/about/versions/nougat/android-7.0-changes.jd
@@ -0,0 +1,610 @@
+page.title=Mudanças de comportamento
+page.keywords=preview,sdk,compatibility
+meta.tags="preview", "compatibility"
+page.tags="preview", "developer preview"
+page.image=images/cards/card-n-changes_2x.png
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>Neste documento</h2>
+
+<ol>
+ <li><a href="#perf">Melhorias no desempenho</a>
+ <ol>
+ <li><a href="#doze">Soneca</a></li>
+ <li><a href="#bg-opt">Otimizações em segundo plano</a></li>
+ </ol>
+ </li>
+ <li><a href="#perm">Alterações nas permissões</a>
+ </li>
+ <li><a href="#sharing-files">Compartilhamento de arquivos entre aplicativos</a></li>
+ <li><a href="#accessibility">Melhorias na acessibilidade</a>
+ <ol>
+ <li><a href="#screen-zoom">Zoom de tela</a></li>
+ <li><a href="#vision-settings">Configurações de visão no assistente de configuração</a></li>
+ </ol>
+ </li>
+ <li><a href="#ndk">Aplicativos NDK vinculados a bibliotecas de plataforma</a></li>
+ <li><a href="#afw">Android for Work</a></li>
+ <li><a href="#annotations">Retenção de anotações</a></li>
+ <li><a href="#other">Outros pontos importantes</a></li>
+</ol>
+
+<h2>Veja também</h2>
+<ol>
+ <li><a href="{@docRoot}preview/api-overview.html">
+Visão geral da API do Android N</a></li>
+</ol>
+
+</div>
+</div>
+
+
+<p>
+ Junto com novos recursos e funcionalidades, o Android N
+inclui uma variedade de mudanças de comportamento do sistema e da API. Este documento
+destaca algumas das principais mudanças que você deve entender e considerar
+nos aplicativos.
+</p>
+
+<p>
+ Caso tenha publicado anteriormente um aplicativo para Android, saiba que ele pode ser afetado
+ pelas alterações na plataforma.
+</p>
+
+
+<h2 id="perf">Bateria e memória</h2>
+
+<p>
+O Android N inclui alterações de comportamento do sistema com o objetivo de melhorar a vida útil da bateria
+nos dispositivos e reduzir o uso de RAM. Essas alterações podem afetar o acesso do aplicativo aos
+recursos do sistema, bem como a forma como ele interage com outros aplicativos por meio de
+ certas intenções explícitas .
+</p>
+
+<h3 id="doze">Soneca</h3>
+
+<p>
+ Introduzido no Android 6.0 (nível da API 23), o modo soneca aumenta a vida útil da bateria
+ adiando atividades de CPU e rede quando um usuário deixa um dispositivo desconectado,
+ estacionário e com a tela desativada. O Android N aprimora
+ ainda mais o modo soneca aplicando um subconjunto de restrições de CPU e rede
+ quando o dispositivo está desconectado e com a tela desativada, mas não necessariamente
+ estacionário, como, por exemplo, quando o celular está no bolso do usuário.
+</p>
+
+
+<img src="{@docRoot}images/android-7.0/doze-diagram-1.png" alt="" height="251px" id="figure1" />
+<p class="img-caption">
+ <strong>Figura 1.</strong> Ilustração de como o modo soneca aplica um primeiro nível de
+ restrições de atividades de sistema para aumentar a vida útil da bateria.
+</p>
+
+<p>
+ Quando o dispositivo estiver sendo alimentado pela bateria e a tela estiver desativada por um determinado
+ período, o dispositivo entrará no modo de soneca e aplicará o primeiro subconjunto de restrições: o
+acesso do aplicativo à rede será desativado e os trabalhos e sincronizações serão adiados. Se o dispositivo permanecer
+estacionário por um determinado período após entrar no modo soneca, o sistema aplicará
+as demais restrições de soneca a {@link android.os.PowerManager.WakeLock}, aos alarmes
+{@link android.app.AlarmManager} e às verificações de GPS e Wi-Fi. Independentemente
+ de as restrições de soneca serem aplicadas parcial ou totalmente, o sistema despertará o
+ dispositivo para breves janelas de manutenção, quando os aplicativos
+ poderão acessar a rede e executar todos os trabalhos/sincronizações adiados.
+</p>
+
+
+<img src="{@docRoot}images/android-7.0/doze-diagram-2.png" alt="" id="figure2" />
+<p class="img-caption">
+ <strong>Figura 2.</strong> Ilustração de como o modo soneca aplica um segundo nível de
+ restrições de atividades de sistema após o dispositivo permanecer estacionário por um determinado período.
+</p>
+
+<p>
+ Note que a ativação da tela ou do dispositivo encerra o modo soneca e
+ remove essas restrições de processamento. O comportamento adicional não
+ afeta as recomendações e práticas recomendadas para a adaptação do aplicativo à versão
+ anterior do modo soneca, introduzida no Android 6.0 (nível da API 23), como discutido em
+ <a href="{@docRoot}training/monitoring-device-state/doze-standby.html">
+ Otimização para soneca e aplicativo em espera</a>. Você deve continuar
+ a seguir essas recomendações, como o uso do Google Cloud Messaging (GCM) para
+ enviar e receber mensagens, e começar a planejar atualizações para acomodar o
+ comportamento adicional do modo soneca.
+</p>
+
+
+<h3 id="bg-opt">Project Svelte: Otimizações em segundo plano</h3>
+
+<p>
+ O Android N remove três transmissões implícitas para ajudar a otimizar o
+ uso de memória e o consumo de energia. Essa alteração é necessária porque transmissões
+ implícitas iniciam frequentemente em segundo plano aplicativos
+ registrados para escutá-las. A remoção dessas transmissões pode beneficiar consideravelmente o desempenho
+do dispositivo e a experiência do usuário.
+</p>
+
+<p>
+ Dispositivos móveis passam por alterações frequentes na conectividade, como a alternância
+ entre Wi-Fi e dados móveis. No momento, os aplicativos podem monitorar alterações de
+ conectividade registrando um receptor para a transmissão implícita {@link
+ android.net.ConnectivityManager#CONNECTIVITY_ACTION} em seu
+ manifesto. Como vários aplicativos se registram para receber essa transmissão, uma única
+ mudança de rede pode fazer com que todos despertem e processem a transmissão
+ ao mesmo tempo.
+</p>
+
+<p>
+ De forma semelhante, em versões anteriores do Android, os aplicativos podiam se registrar para receber transmissões implícitas {@link
+ android.hardware.Camera#ACTION_NEW_PICTURE} e {@link
+ android.hardware.Camera#ACTION_NEW_VIDEO} de outros aplicativos, como
+ Câmera. Quando um usuário tira uma fotografia com o aplicativo Câmera, esses aplicativos são despertados
+ para processar a transmissão.
+</p>
+
+<p>
+ Para aliviar esses problemas, o Android N aplica a seguintes
+ otimizações:
+</p>
+
+<ul>
+ <li>Os aplicativos direcionados ao Android N não receberão transmissões {@link
+ android.net.ConnectivityManager#CONNECTIVITY_ACTION}, mesmo
+ se tiverem entradas no manifesto solicitando notificação desses eventos. Os aplicativos em execução
+ainda poderão escutar {@code CONNECTIVITY_CHANGE} no encadeamento principal
+ se solicitarem a notificação com {@link android.content.BroadcastReceiver}.
+ </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 Android N.
+ </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, a API {@link
+ android.app.job.JobScheduler} oferece um mecanismo robusto para agendar
+ operações de rede quando ocorrem condições especificadas, como conexão a uma
+ rede ilimitada. Você pode até usar {@link
+android.app.job.JobScheduler} para reagir a mudanças em provedores de conteúdo.
+</p>
+
+<p>
+ Para obter mais informações sobre otimizações em segundo plano no N e como adaptar seu aplicativo,
+ consulte <a href="{@docRoot}preview/features/background-optimization.html">Otimizações
+em segundo plano</a>.
+</p>
+
+<h2 id="perm">Alterações nas permissões</h2>
+
+<p>
+ O Android N inclui alterações em permissões que podem afetar seu aplicativo.
+</p>
+
+<h3 id="permfilesys">Alterações nas permissões do sistema de arquivos</h3>
+
+<p>
+ Para aprimorar a segurança de arquivos privados, o diretório privado de
+ aplicativos direcionados ao Android N ou superior tem acesso restrito (<code>0700</code>).
+ Esta configuração impede o vazamento de metadados de arquivos privados, como tamanho
+ e existência. Esta alteração de permissão tem vários efeitos colaterais:
+</p>
+
+<ul>
+ <li>
+ O proprietário não deve mais relaxar as permissões para arquivos privados,
+ e qualquer tentativa de fazer isso usando
+ {@link android.content.Context#MODE_WORLD_READABLE} e/ou
+ {@link android.content.Context#MODE_WORLD_WRITEABLE} acionará uma
+ {@link java.lang.SecurityException}.
+ <p class="note">
+ <strong>Observação:</strong> Até agora, essa restrição não foi adotada em pleno vigor.
+ Aplicativos ainda podem modificar permissões para o diretório privado usando
+ APIs nativas ou a API {@link java.io.File File}. No entanto, o relaxamento
+ de permissões para o diretório privado é enfaticamente desencorajado.
+ </p>
+ </li>
+ <li>
+ A passagem de URIs <code>file://</code> para fora do domínio do pacote pode deixar o
+ receptor com um caminho inacessível. Sendo assim, tentativas de passar um URI
+ <code>file://</code> acionam uma
+ <code>FileUriExposedException</code>. A forma recomendada para compartilhamento do
+ conteúdo de um arquivo privado é o uso do {@link
+ android.support.v4.content.FileProvider}.
+ </li>
+ <li>
+ O {@link android.app.DownloadManager} não consegue mais compartilhar
+ arquivos armazenados de forma privada por nome de arquivo. Os aplicativos de legado podem acabar em um
+ caminho inacessível quando acessam {@link
+ android.app.DownloadManager#COLUMN_LOCAL_FILENAME}. Aplicativos direcionados para o
+ Android N ou superior acionam uma {@link java.lang.SecurityException} quando
+ tentam acessar
+ {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}.
+ Aplicativos de legado que definem o local de download para um local público
+ usando
+ {@link
+android.app.DownloadManager.Request#setDestinationInExternalFilesDir
+DownloadManager.Request.setDestinationInExternalFilesDir()} ou
+ {@link
+android.app.DownloadManager.Request#setDestinationInExternalPublicDir
+DownloadManager.Request.setDestinationInExternalPublicDir()}
+ ainda conseguem acessar o caminho em
+{@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}, no entanto, este
+ método é enfaticamente desencorajado. A forma preferencial para se acessar um arquivo
+ exposto pelo {@link android.app.DownloadManager} é o uso do
+{@link android.content.ContentResolver#openFileDescriptor
+ContentResolver.openFileDescriptor()}.
+ </li>
+</ul>
+
+<h2 id="sharing-files">Compartilhamento de arquivos entre aplicativos</h2>
+
+<p>
+Para aplicativos direcionados ao Android N, a estrutura do Android cumpre com
+a política de API {@link android.os.StrictMode} que proíbe a exposição de URIs {@code file://}
+fora do aplicativo. Se uma intenção que contenha o URI de um arquivo deixar o aplicativo, ele falhará
+ com uma exceção {@code FileUriExposedException}.
+</p>
+
+<p>
+Para compartilhar arquivos entre aplicativos, você deve enviar um URI {@code content://}
+e conceder uma permissão de acesso temporária ao URI. A forma mais fácil de conceder essa permissão é
+usar a classe {@link android.support.v4.content.FileProvider}. Para obter mais informações
+ sobre permissões e compartilhamento de arquivos,
+consulte <a href="{@docRoot}training/secure-file-sharing/index.html">Compartilhamento de Arquivos</a>.
+</p>
+
+<h2 id="accessibility">Melhorias na acessibilidade</h2>
+
+<p>
+ O Android N inclui mudanças criadas para aprimorar a facilidade de uso da
+ plataforma para usuários com visão reduzida ou deficiente. Normalmente, essas mudanças
+ não exigirão alterações de código no aplicativo. No entanto, analise
+ esse recurso e teste-o em seu aplicativo para avaliar possíveis impactos na experiência
+ do usuário.
+</p>
+
+
+<h3 id="screen-zoom">Zoom de tela</h3>
+
+<p>
+ O Android N permite que os usuários definam <strong>Display size</strong>, que amplia
+ ou reduz todos os elementos na tela, melhorando a acessibilidade do dispositivo
+ para usuários com visão deficiente. Os usuários não podem alterar o zoom da tela além da largura mínima de
+ tela de <a href="http://developer.android.com/guide/topics/resources/providing-resources.html">
+sw320dp</a>, que é a largura do Nexus 4, um telefone comum de tamanho médio.
+</p>
+
+<div class="cols">
+
+<div class="col-6">
+ <img src="{@docRoot}images/android-7.0/screen-zoom-1.png" alt="" height="XXX" id="figure1" />
+</div>
+<div class="col-6">
+ <img src="{@docRoot}images/android-7.0/screen-zoom-2.png" alt="" height="XXX" id="figure1" />
+</div>
+
+</div> <!-- end cols -->
+<p class="img-caption">
+ <strong>Figura 3.</strong> A tela à direita mostra o efeito de
+ reduzir o Display size de um dispositivo executando uma imagem do sistema Android N.
+</p>
+
+
+<p>
+ Quando a densidade do dispositivo mudar, o sistema notificará os aplicativos em execução das
+ seguintes formas:
+</p>
+
+<ul>
+ <li>Se um aplicativo está direcionado ao nível da API 23 ou mais baixo, o sistema automaticamente elimina
+ todos os processos em segundo plano. Isso significa que, se um usuário sair
+ desse aplicativo para abrir a tela <em>Settings</em> e alterar a
+ configuração <strong>Display size</strong>, o sistema eliminará o aplicativo da mesma
+ forma que faria em uma situação de pouca memória. Se o aplicativo tiver processos
+ em primeiro plano, o sistema notificará esses processos sobre a mudança de configuração, como
+ descrito em <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Processamento
+ de alterações no tempo de execução</a>, como se a orientação do dispositivo tivesse mudado.
+ </li>
+
+ <li>Se um aplicativo for direcionado ao Android N, todos os seus processos
+ (em primeiro e segundo plano) serão notificados da mudança de configuração, como
+ descrito em <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Processamento
+ de alterações no tempo de execução</a>.
+ </li>
+</ul>
+
+<p>
+ A maioria dos aplicativos não precisa ser alterada para ser compatível com esse recurso, desde que
+ os aplicativos sigam as práticas recomendadas do Android. Os itens específicos a serem verificados são:
+</p>
+
+<ul>
+ <li>Teste o aplicativo em um dispositivo com largura de tela <code><a href=
+ "{@docRoot}guide/topics/resources/providing-resources.html">sw320dp</a></code>
+ e verifique se ele funciona adequadamente.
+ </li>
+
+ <li>Quando a configuração do dispositivo mudar, atualize todas as informações
+ dependentes de densidade armazenadas no cache, como bitmaps no cache ou recursos carregados da
+ rede. Verifique a ocorrência de alterações de configuração quando o aplicativo sair do estado pausado e retomar
+ a execução.
+ <p class="note">
+ <strong>Observação:</strong> se você armazenar em cache dados dependentes de configuração,
+recomendamos incluir metadados relevantes, como o tamanho de tela
+ adequado ou a densidade de pixels desses dados. Salvar esses dados permitirá que você
+ decida se será necessário atualizar os dados armazenados em cache após uma mudança
+ de configuração.
+ </p>
+ </li>
+
+ <li>Evite especificar dimensões com unidades px, pois elas não são redimensionadas de
+ acordo com a densidade de tela. Em vez disso, especifique dimensões com unidades de <a href="{@docRoot}guide/practices/screens_support.html">pixel independente de
+ densidade</a> (<code>dp</code>).
+ </li>
+</ul>
+
+<h3 id="vision-settings">Configurações de visão no assistente de configuração</h3>
+
+<p>
+ Agora, o Android N inclui Configurações de visão na tela de boas-vindas, onde os usuários podem
+ definir as configurações de acessibilidade a seguir em um novo dispositivo:
+ <strong>gesto de ampliação</strong>, <strong>tamanho da fonte</strong>
+, <strong>tamanho da tela</strong> e <strong>TalkBack</strong>. Essa alteração
+ aumenta a visibilidade de erros relacionados a configurações de tela diferentes. Para
+ avaliar o impacto do recurso, teste seus aplicativos com essas
+configurações ativadas. As configurações podem ser encontradas em <strong>Settings >
+ Accessibility</strong>.
+</p>
+
+<h2 id="ndk">Aplicativos NDK vinculados a bibliotecas de plataforma</h2>
+
+<p>
+ O Android N inclui mudanças no namespace para evitar o carregamento de APIs não públicas.
+ Se você usar o NDK, use apenas APIs públicas da plataforma
+ Android. O uso de APIs não públicas na próxima versão oficial do Android
+ poderá causar problemas no seu aplicativo.
+</p>
+
+<p>
+ Para alertar sobre o uso de APIs não públicas, os aplicativos executados em um dispositivo
+ Android N geram um erro na saída logcat quando um aplicativo chama uma API não pública.
+ Esse erro também é exibido na tela do dispositivo como mensagem para que o usuário
+fique ciente da situação. Revise o código do seu aplicativo para
+ remover o uso de APIs de plataformas não públicas e faça testes completos do aplicativo usando
+ um dispositivo de visualização ou um emulador.
+</p>
+
+<p>
+ Se o seu aplicativo depender de bibliotecas de plataforma, consulte a documentação do NDK
+ para obter soluções usuais de substituição de APIs privadas comuns por APIs públicas equivalentes.
+ Também é possível que você esteja vinculando bibliotecas de plataforma sem perceber,
+ particularmente se o aplicativo usar uma biblioteca que faz parte da plataforma (como
+ <code>libpng</code>), mas não faz parte do NDK. Nesse caso, verifique se
+o APK contém todos os arquivos .so que você pretende vincular.
+</p>
+
+<p class="caution">
+ <strong>Cuidado:</strong> Algumas bibliotecas de terceiros também podem conter links para APIs
+ não públicas. Se o aplicativo usar essas bibliotecas, poderá falhar quando executado
+ na próxima versão oficial do Android.
+</p>
+
+<p>
+ Os aplicativos não devem depender de nem usar bibliotecas nativas não incluídas
+ no NDK, pois elas podem ser alteradas ou removidas entre uma versão do Android
+ e outra. A mudança de OpenSSL para BoringSSL é um exemplo dessas alterações.
+ Além disso, dispositivos diferentes podem oferecer níveis distintos de compatibilidade, pois
+ não há requisitos de compatibilidade para bibliotecas de plataforma não incluídas
+no NDK. Se você precisar acessar bibliotecas que não são do NDK em dispositivos mais antigos, torne o carregamento
+dependente do nível da Android API.
+</p>
+
+<p>
+ Para ajudar a diagnosticar esses tipos de problemas, veja a seguir alguns exemplos de erros
+ de Java e NDK que podem ocorrer durante a compilação do aplicativo com o Android N:
+</p>
+
+<p>Exemplo de erro de Java:</p>
+<pre class="no-pretty-print">
+java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so"
+ is not accessible for the namespace "classloader-namespace"
+</pre>
+
+<p>Exemplo de erro de NDK:</p>
+<pre class="no-pretty-print">
+dlopen failed: cannot locate symbol "__system_property_get" referenced by ...
+</pre>
+
+
+<p>
+ Veja a seguir algumas correções comuns para aplicativos que encontram esses tipos de erro:
+</p>
+
+<ul>
+ <li>O uso de getJavaVM e getJNIEnv do libandroid_runtime.so pode ser substituído
+ por funções JNI padrão:
+<pre class="no-pretty-print">
+AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h>
+AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or
+JavaVM::AttachCurrentThread from <jni.h>.
+</pre>
+ </li>
+
+ <li>O uso do símbolo {@code property_get} de {@code libcutils.so} pode ser
+ substituído pelo {@code alternative __system_property_get} público.
+ Para fazer isso, use {@code __system_property_get} com o include abaixo:
+<pre>
+#include <sys/system_properties.h>
+</pre>
+ </li>
+
+ <li>O uso do símbolo {@code SSL_ctrl} de {@code libcrypto.so} deve ser
+ substituído por uma versão local do aplicativo. Por exemplo, vincule estaticamente
+ {@code libcyrpto.a} no arquivo {@code .so} ou inclua dinamicamente o seu próprio
+ {@code libcrypto.so} do BoringSSL ou OpenSSL no aplicativo.
+ </li>
+</ul>
+
+<h2 id="afw">Android for Work</h2>
+<p>
+ O Android N contém mudanças para aplicativos direcionados ao Android for Work, incluindo
+ mudanças em instalação de certificados, redefinição de senha, gerenciamento de
+ usuários secundários e acesso a identificadores de dispositivos. Se você estiver criando aplicativos para
+ ambientes do Android for Work, examine essas mudanças e modifique
+ o aplicativo conforme necessário.
+</p>
+
+<ul>
+ <li>Você precisa instalar um instalador de certificado delegado antes que o DPC possa
+ configurá-lo. Para aplicativos de donos de perfil e dispositivo direcionados ao N SDK, você deve
+ instalar o instalador de certificado delegado antes de chamar o
+ controlador de políticas de dispositivo (DPC)
+ <code>DevicePolicyManager.setCertInstallerPackage()</code>. Se o instalador
+ não estiver instalado, o sistema gerará uma
+ <code>IllegalArgumentException</code>.
+ </li>
+
+ <li>As restrições de redefinição de senha de administradores do dispositivo agora se aplicam também a
+donos de perfil. Os administradores de dispositivo não podem mais usar
+ {@code DevicePolicyManager.resetPassword()} para limpar senhas nem para alterar
+ as já definidas. Os administradores de dispositivo ainda poderão definir uma senha, mas apenas
+ em dispositivos sem senha, PIN nem padrão.
+ </li>
+
+ <li>Donos de dispositivo e perfil poderão gerenciar contas, mesmo se restrições forem
+ definidas. Eles podem chamar as APIs de gerenciamento de contas,
+ mesmo se restrições de usuário <code>DISALLOW_MODIFY_ACCOUNTS</code> forem implementadas.
+ </li>
+
+ <li>Os donos de dispositivo podem gerenciar usuários secundários com maior facilidade. Quando um dispositivo
+ executar no modo de dono do dispositivo, a restrição <code>DISALLOW_ADD_USER</code>
+ será definida automaticamente. Isso evita que os usuários criem usuários secundários
+ não gerenciados. Além disso, os métodos <code>CreateUser()</code> e
+ <code>createAndInitializeUser()</code> ficaram obsoletos e foram substituídos
+ pelo novo método <code>DevicePolicyManager.createAndManageUser()</code>.
+ </li>
+
+ <li>Os donos de dispositivo podem acessar identificadores de dispositivo. O dono do dispositivo pode acessar o
+ endereço MAC Wi-Fi de um dispositivo usando
+ <code>DevicePolicyManagewr.getWifiMacAddress()</code>. Se a rede Wi-Fi nunca
+ foi ativada no dispositivo, esse método retorna o valor {@code null}.
+ </li>
+
+ <li>A configuração modo de trabalho controla o acesso a aplicativos de trabalho. Quando o modo de trabalho está desativado, a
+ tela de início do sistema mostra os aplicativos de trabalho em cinza para indicar que estão indisponíveis. Quando é
+ reativado, o modo de trabalho retorna ao comportamento normal.
+</ul>
+
+<p>
+ Para obter mais informações sobre as mudanças no Android for Work no Android N, consulte
+ <a href="{@docRoot}preview/features/afw.html">Atualizações no Android for Work</a>.
+</p>
+
+<h2 id="annotations">Retenção de anotações</h2>
+
+<p>
+O Android N corrige um erro em que a visibilidade de anotações era ignorada.
+Este problema permitia que o tempo de execução acessasse anotações a que não deveria
+ter acesso. Entre essas anotações, estão:
+</p>
+
+<ul>
+ <li>{@code VISIBILITY_BUILD}: que só deveria estar visível em tempo de compilação.</li>
+ <li>{@code VISIBILITY_SYSTEM}: que deveria estar visível em tempo de execução, mas apenas para o
+sistema subjacente.</li>
+</ul>
+
+<p>
+Se o seu aplicativo se baseou neste comportamento, adicione uma política de retenção para anotações que deve
+ estar disponível em tempo de execução. É possível fazer isso usando {@code @Retention(RetentionPolicy.RUNTIME)}.
+</p>
+
+<h2 id="other">Outros pontos importantes</h2>
+
+<ul>
+<li>Quando um aplicativo for executado no Android N, mas for direcionado a um nível da API menor
+ e o usuário alterar o tamanho da tela, o processo do aplicativo será eliminado. O aplicativo
+deverá ser capaz de processar corretamente esse cenário. Caso contrário, ele falhará
+quando o usuário restaurá-lo usando Recents.
+
+<p>
+Você deve testar o aplicativo para verificar
+se esse comportamento não ocorre.
+Isso pode ser feito causando uma falha idêntica
+eliminando o aplicativo manualmente usando o DDMS.
+</p>
+
+<p>
+Aplicativos direcionados ao Android N e versões posteriores não serão eliminados automaticamente em mudanças de densidade.
+No entanto, podem continuar a responder a alterações de configurações de forma não ideal.
+</p>
+</li>
+
+<li>
+Os aplicativos no Android N devem ser capazes de processar corretamente mudanças de configuração
+e não devem falhar em inicializações subsequentes. Você pode verificar o comportamento do aplicativo
+alterando o tamanho da fonte (<strong>Setting</strong> >
+<strong>Display</strong> > <strong>Font size</strong>) e depois restaurando
+o aplicativo em Recents.
+</li>
+
+<li>
+Devido a um erro em versões anteriores do Android, o sistema não sinaliza gravações
+ em um soquete TCP no encadeamento principal como violações do modo estrito. O Android N corrigiu esse erro.
+Agora, os aplicativos que exibirem este comportamento gerarão uma{@code android.os.NetworkOnMainThreadException}.
+Geralmente, a realização de operações de rede no encadeamento principal é uma má ideia porque essas operações
+geralmente têm alta latência no final, causando ANRs e problemas.
+</li>
+
+<li>
+Agora, por padrão, a família de métodos {@code Debug.startMethodTracing()} armazena
+os resultados no diretório específico do pacote no armazenamento compartilhado,
+ e não no nível mais alto
+ do cartão SD. Isso significa que os aplicativos não precisam mais solicitar a permissão {@code WRITE_EXTERNAL_STORAGE} para usar estas APIs.
+</li>
+
+<li>
+Muitas APIs de plataformas começaram a verificar grandes cargas úteis enviadas
+por meio de transações {@link android.os.Binder}, e o
+sistema agora gera novamente{@code TransactionTooLargeExceptions}
+como {@code RuntimeExceptions}, em vez de registrá-las ou suprimi-las silenciosamente. Um
+exemplo comum é armazenar dados demais em
+{@link android.app.Activity#onSaveInstanceState Activity.onSaveInstanceState()},
+que faz com que {@code ActivityThread.StopInfo} gere uma
+{@code RuntimeException} quando seu aplicativo é direcionado ao Android N.
+</li>
+
+<li>
+Se um aplicativo publica tarefas {@link java.lang.Runnable} para uma {@link android.view.View} e
+ esta {@link android.view.View}
+não está anexada a uma janela, o sistema
+coloca a tarefa {@link java.lang.Runnable} em fila com a {@link android.view.View}.
+A tarefa {@link java.lang.Runnable} não é executada até que a
+{@link android.view.View} esteja anexada
+a uma janela. Este comportamento corrige os seguintes erros:
+<ul>
+ <li>Se um aplicativo publicasse em uma {@link android.view.View} de um encadeamento que não fosse o encadeamento de IU da janela pretendida
+, o {@link java.lang.Runnable} poderia acabar sendo executado no encadeamento errado.
+ </li>
+ <li>Se a tarefa {@link java.lang.Runnable} fosse publicada de um encadeamento que não fosse
+ um encadeamento de looper, o aplicativo poderia expor a tarefa {@link java.lang.Runnable}.</li>
+</ul>
+</li>
+
+<li>
+Se um aplicativo no Android N com permissão
+{@link android.Manifest.permission#DELETE_PACKAGES DELETE_PACKAGES}
+tentar excluir um pacote instalado por outro aplicativo,
+o sistema solicitará a confirmação do usuário. Nesse cenário, os aplicativos devem esperar
+{@link android.content.pm.PackageInstaller#STATUS_PENDING_USER_ACTION STATUS_PENDING_USER_ACTION}
+como status de retorno ao invocar
+{@link android.content.pm.PackageInstaller#uninstall PackageInstaller.uninstall()}.
+</li>
+
+</ul>
+
diff --git a/docs/html-intl/intl/pt-br/about/versions/nougat/android-7.0-samples.jd b/docs/html-intl/intl/pt-br/about/versions/nougat/android-7.0-samples.jd
new file mode 100644
index 0000000..7ed583f
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/about/versions/nougat/android-7.0-samples.jd
@@ -0,0 +1,85 @@
+page.title=Exemplos
+page.tags="preview", "samples", "android"
+page.image=images/cards/card-n-samples_2x.png
+@jd:body
+
+<p>
+ Os exemplos de código a seguir são fornecidos para o Android N. Para
+ fazer o download dos exemplos no Android Studio, selecione a opção de menu <b>File > Import
+ Samples</b>.
+</p>
+
+<p class="note">
+ <strong>Observação:</strong> Esses projetos disponíveis para download são projetados
+ para uso com Gradle e Android Studio.
+</p>
+
+
+<h3 id="mw">Interface com várias janelas</h3>
+<img src="{@docRoot}images/android-7.0/sample-multiwindow.png" style="float: left; padding-right: 0.5em" height="250" width="156" />
+<p>
+ Este exemplo demonstra como aproveitar as vantagens de interfaces de usuário com várias janelas
+ com seu aplicativo.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-MultiWindowPlayground">
+Obter no GitHub</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="an">Notificações ativas</h3>
+<img src="{@docRoot}images/android-7.0/sample-activenotifications.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ Este é um exemplo pré-existente que mostra um serviço simples que envia
+ notificações usando NotificationCompat. Cada conversa não lida de um usuário
+ é enviada como uma notificação distinta.
+</p>
+<p>
+ Este exemplo foi atualizado para utilizar os novos recursos de notificação
+ disponíveis no Android N.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-ActiveNotifications">
+Obter no GitHub</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="ms">Serviço de mensagens</h3>
+<img src="{@docRoot}images/android-7.0/sample-messagingservice.png" style="float: left; padding-right: 0.5em" height="250" width="150" />
+<p>
+ Este é um exemplo pré-existente que demonstra como usar o
+ NotificationManager para identificar quantas notificações um aplicativo está mostrando
+ no momento.
+</p>
+<p>
+ Este exemplo foi atualizado para utilizar os novos recursos de notificação
+ disponíveis no Android N.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-MessagingService">
+Obter no GitHub</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="fbe">Inicialização direta</h3>
+<img src="{@docRoot}images/android-7.0/sample-directboot.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ Este exemplo demonstra como armazenar e acessar dados no armazenamento criptografado de um dispositivo
+ que está sempre disponível enquanto o dispositivo é inicializado.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-DirectBoot">
+Obter no GitHub</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="sda">Acesso a diretórios com escopo</h3>
+<img src="{@docRoot}images/android-7.0/sample-scopeddirectoryaccess.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ Este exemplo demonstra como ler e gravar dados de diretórios
+ específicos exigindo menos permissões.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-ScopedDirectoryAccess">
+Obter no GitHub</a>
+</p>
diff --git a/docs/html-intl/intl/pt-br/about/versions/nougat/android-7.0.jd b/docs/html-intl/intl/pt-br/about/versions/nougat/android-7.0.jd
new file mode 100644
index 0000000..e3d58cd
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/about/versions/nougat/android-7.0.jd
@@ -0,0 +1,1039 @@
+page.title=Android N for Developers
+meta.tags="preview", "androidn"
+page.tags="preview", "developer preview"
+page.image=images/cards/card-n-apis_2x.png
+@jd:body
+
+
+
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>Principais recursos para desenvolvedores</h2>
+ <ol>
+ <ul style="list-style-type:none;">
+ <li><a href="#multi-window_support">Suporte a várias janelas</a></li>
+ <li><a href="#notification_enhancements">Notificações</a></li>
+ <li><a href="#jit_aot">Compilação JIT/AOT</a></li>
+ <li><a href="#quick_path_to_app_install">Caminho rápido para a instalação de aplicativos</a></li>
+ <li><a href="#doze_on_the_go">Modo soneca em movimento</a></li>
+ <li><a href="#background_optimizations">Otimizações em segundo plano</a></li>
+ <li><a href="#data_saver">Economia de dados</a></li>
+ <li><a href="#vulkan">Vulkan API</a></li>
+ <li><a href="#tile_api">Quick Settings Tile API</a></li>
+ <li><a href="#number-blocking">Bloqueio de número</a></li>
+ <li><a href="#call_screening">Triagem de chamadas</a></li>
+ <li><a href="#multi-locale_languages">Localidades e idiomas</a></li>
+ <li><a href="#emoji">Novos emoticons</a></li>
+ <li><a href="#icu4">ICU4J APIs no Android</a></li>
+ <li><a href="#gles_32">OpenGL ES 3.2 API</a></li>
+ <li><a href="#android_tv_recording">Gravação do Android TV</a></li>
+ <li><a href="#android_for_work">Android for Work</a></li>
+ <li><a href="#accessibility_enhancements">Acessibilidade</a></li>
+ <li><a href="#direct_boot">Inicialização direta</a></li>
+ <li><a href="#key_attestation">Confirmação de chaves</a></li>
+ <li><a href="#network_security_config">Configuração de segurança de rede</a></li>
+ <li><a href="#default_trusted_ca">CA confiável padrão</a></li>
+ <li><a href="#apk_signature_v2">Esquema de assinatura de APK v2</a></li>
+ <li><a href="#scoped_directory_access">Acesso a diretórios com escopo</a></li>
+ <li><a href="#keyboard_shortcuts_helper">Auxiliar de atalhos de teclado</a></li>
+ <li><a href="#sustained_performance_api">API de desempenho sustentado</a></li>
+ <li><a href="#vr">Suporte a RV</a></li>
+ <li><a href="#print_svc">Melhorias nos serviços de impressão</a></li>
+ <li><a href="#virtual_files">Arquivos virtuais</a></li>
+ <li><a href="#framemetrics_api">FrameMetricsListener API</a></li>
+ </ol>
+</div>
+</div>
+
+
+
+<p>O Android N ainda está em desenvolvimento ativo, mas agora você já pode testá-lo
+como parte do N Developer Preview. As seções a seguir destacam alguns dos
+novos recursos para desenvolvedores. </p>
+
+<p>
+ Não deixe de conferir as <a href="{@docRoot}preview/behavior-changes.html">Mudanças de comportamento</a> para saber mais sobre as
+ áreas onde as alterações de plataforma podem afetar os aplicativos, examine os
+ guias para desenvolvedores para saber mais sobre os principais recursos e faça o download da <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência da API</a> para obter detalhes sobre as
+ novas APIs.
+</p>
+
+<h2 id="multi-window_support">Suporte a várias janelas</h2>
+
+
+<p>No Android N, introduzimos um recurso de multitarefa novo e muito solicitado
+na plataforma — o suporte a várias janelas. </p>
+
+ <p>Agora os usuários podem abrir dois aplicativos na tela ao mesmo tempo. </p>
+ <ul>
+ <li>Em celulares e tablets
+executando o Android N, os usuários agora podem executar dois aplicativos lado a lado ou
+um acima do outro em modo de tela dividida. Os usuários podem redimensionar os aplicativos arrastando
+o divisor entre eles. </li>
+
+<li>Em dispositivos Android TV, os aplicativos podem assumir o <a href="{@docRoot}preview/features/picture-in-picture.html">modo imagem em
+imagem</a>, o que permite que continuem a exibir conteúdo enquanto o usuário navega ou
+interage com outros aplicativos.</li>
+ </ul>
+
+<div class="col-4of10">
+<img src="{@docRoot}images/android-7.0/mw-portrait.png" alt="" style="height:460px;padding-left:1em;" id="img-split-screen" />
+<p class="img-caption">
+ <strong>Figura 1.</strong> Aplicativos executando em modo de tela dividida.
+</p>
+
+ </div>
+
+<p>O suporte a várias janelas oferece novas formas de envolver os usuários,
+particularmente em tablets e outros dispositivos com telas maiores. Você pode até ativar o recurso de arrastar e soltar
+no aplicativo para permitir que os usuários arrastem conteúdo de ou para o aplicativo — uma ótima
+maneira de aprimorar a experiência do usuário. </p>
+
+<p>É muito fácil adicionar suporte a várias janelas a seu aplicativo e configurar como ele
+lida com exibição em várias janelas. Por exemplo, você pode especificar as dimensões
+mínimas permitidas para sua atividade, evitando que os usuários redimensionem a atividade para abaixo
+deste tamanho. Você também pode desativar a exibição de várias janelas para o aplicativo, o que
+ garante que o sistema só mostrará o aplicativo em modo de tela inteira.</p>
+
+<p>
+ Para obter mais informações, consulte a documentação para desenvolvedores de <a href="{@docRoot}preview/features/multi-window.html">Suporte a várias janelas</a>
+.
+</p>
+
+<h2 id="notification_enhancements">Aprimoramentos de notificações</h2>
+
+<p>Reformulamos as notificações no Android N para facilitar e agilizar o
+uso. Entre as alterações estão:</p>
+
+<ul>
+ <li>
+ <strong>Atualizações de modelos</strong>: Estamos atualizando os modelos de notificação para
+ colocar mais ênfase na imagem do herói e do avatar. Os desenvolvedores poderão
+ aproveitar os novos modelos com ajustes mínimos no código.
+ </li>
+
+ <li>
+ <strong>Personalização de estilo de mensagem</strong>: Você pode personalizar mais
+rótulos de interface de usuário associados às suas notificações usando a classe
+<code>MessageStyle</code>. É possível configurar a mensagem, o título da conversa
+e a visualização de conteúdo.
+ </li>
+
+ <li>
+ <strong>Notificações empacotadas</strong>: O sistema pode agrupar mensagens
+ por tópico de mensagem, por exemplo, e exibir o grupo. Um usuário pode
+ executar ações, como Dismiss ou Archive, nessa exibição de grupo. Se você
+ já implementou notificações para o Android Wear, está familiarizado com
+ esse modelo.
+ </li>
+
+ <li>
+ <strong>Resposta direta</strong>: Para aplicativos de comunicação em tempo real, o
+ sistema Android oferece suporte a respostas em linha para que os usuários possam responder rapidamente a
+ mensagens SMS ou de texto diretamente dentro da interface de notificação.
+ </li>
+
+ <li>
+ <strong>Visualizações personalizadas</strong>: Duas APIs novas permitem utilizar decorações
+ do sistema, como cabeçalhos e ações de notificação, durante o uso de visualizações
+ personalizadas em notificações.
+ </li>
+</ul>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-1.png" alt="" style="padding:.5em;max-width:226px">
+</div>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-3.png" alt="" style="padding:.5em;max-width:226px">
+</div>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-2.png" alt="" style="padding:.5em;max-width:226px">
+</div>
+
+
+<p class="img-caption">
+ <strong>Figura 2.</strong> Notificações empacotadas e resposta direta.
+</p>
+
+<p>Para saber como implementar os novos recursos, consulte o
+guia <a href="{@docRoot}preview/features/notification-updates.html">Notificações</a>
+.</p>
+
+
+
+<h2 id="jit_aot">Compilação JIT/AOT orientada a perfil</h2>
+
+<p>No Android N, adicionamos um compilador Just in Time (JIT) com perfis de código para
+ART, o que permite aprimorar constantemente o desempenho de aplicativos Android durante a
+execução. O compilador JIT complementa o compilador atual Ahead of Time (AOT)
+ do ART e ajuda a aprimorar o desempenho em tempo de execução, economizar espaço de armazenamento e acelerar atualizações
+ de aplicativos e de sistema.</p>
+
+<p>A compilação orientada a perfil permite que o ART gerencie a compilação AOT/JIT de cada aplicativo
+de acordo com o uso real e com as condições no dispositivo. Por
+exemplo, o ART mantém um perfil dos principais métodos do aplicativo e pode pré-compilar
+e armazenar esses métodos em cache para obter o melhor desempenho. As outras partes do aplicativo não são
+compiladas até que sejam realmente utilizadas.</p>
+
+<p>Além de aprimorar o desempenho para as principais partes do aplicativo, a compilação
+ajuda a reduzir o uso geral de recursos de RAM, incluindo os binários
+associados. Esse recurso é particularmente importante em dispositivos com pouca memória.</p>
+
+<p>O ART gerencia a compilação orientada a perfil de forma a minimizar o impacto sobre a
+bateria do dispositivo. A pré-compilação é executada apenas quando o dispositivo está ocioso e
+com a bateria sendo carregada, economizando tempo e bateria com a execução antecipada dessa tarefa.</p>
+
+<h2 id="quick_path_to_app_install">Caminho rápido para a instalação de aplicativos</h2>
+
+<p>Um dos benefícios mais tangíveis do compilador JIT do ART é a velocidade de instalação dos
+aplicativos e das atualizações do sistema. Até mesmo aplicativos grandes, que exigiam vários minutos para
+otimização e instalação no Android 6.0, podem agora ser instalados em
+segundos. As atualizações de sistema também ficaram mais rápidas, pois não existe mais a etapa de otimização. </p>
+
+<h2 id="doze_on_the_go">Modo soneca em movimento...</h2>
+
+<p>O Android 6.0 introduziu o modo soneca, um modo de sistema que economiza bateria adiando
+atividades de CPU e rede dos aplicativos quando o dispositivo está ocioso, como
+quando está em uma mesa ou gaveta. </p>
+
+<p>Agora, no Android N, o modo soneca foi aprimorado e economiza bateria quando em movimento.
+Sempre que a tela ficar desativada por um período e o dispositivo ficar desativado,
+o modo soneca aplicará um subconjunto das restrições familiares de CPU e rede aos aplicativos.
+Isso significa que os usuários podem economizar bateria transportando os dispositivos no
+bolso.</p>
+
+
+<img src="/preview/images/doze-diagram-1.png" alt="" id="figure1" />
+<p class="img-caption">
+ <strong>Figura 3.</strong> O modo soneca agora aplica
+ restrições para aumentar a vida útil da bateria mesmo quando o dispositivo não está estacionário.
+</p>
+
+
+<p>Pouco depois de a tela ser desativada com o dispositivo alimentado pela bateria, o modo soneca
+restringe o acesso de rede e adia trabalhos e sincronizações. Durante breves janelas de
+manutenção, os aplicativos podem acessar a rede e todos os
+trabalhos/sincronizações adiados são executados. A ativação da tela ou do dispositivo
+encerra o modo soneca.</p>
+
+<p>Quando o dispositivo voltar a ficar estacionário, com a tela desativada e alimentado por bateria por um
+período, o modo soneca aplicará as restrições completas de CPU e rede em {@link
+android.os.PowerManager.WakeLock}, alarmes {@link android.app.AlarmManager} e
+verificações de GPS/Wi-Fi.</p>
+
+<p>As práticas recomendadas para adaptar o aplicativo ao modo soneca são as mesmas para
+dispositivos estacionários ou em movimento. Portanto, se você já atualizou o aplicativo para
+processar o modo soneca corretamente, está pronto. Caso contrário, comece a <a href="{@docRoot}training/monitoring-device-state/doze-standby.html#assessing_your_app">adaptar
+ o aplicativo para o modo soneca</a> agora.</p>
+
+<h2 id="background_optimizations">Project Svelte: Otimizações em segundo plano</h2>
+
+<p>O Project Svelte é um esforço contínuo para minimizar o uso de RAM pelo sistema e pelos aplicativos
+nos dispositivos Android existentes no ecossistema. No Android N, o Project
+Svelte se concentra em otimizar a forma de execução dos aplicativos em segundo plano. </p>
+
+<p>O processamento em segundo plano é parte essencial da maioria dos aplicativos. Quando executado corretamente, a experiência
+do usuário pode ficar incrível — imediata, rápida e sensível ao contexto.
+Quando executado incorretamente, o processamento em segundo plano pode consumir desnecessariamente RAM (e
+bateria) e afetar o desempenho do sistema para os outros aplicativos. </p>
+
+<p>Desde o Android 5.0, {@link android.app.job.JobScheduler} é a forma
+preferencial para execução de trabalho em segundo plano de uma maneira que beneficia
+os usuários. Os aplicativos podem agendar trabalhos e permitir que o sistema execute otimizações com base em
+condições de memória, energia e conectividade. O JobScheduler oferece controle e
+simplicidade, e queremos que seja usado por todos os aplicativos. </p>
+
+<p>
+ Outra boa opção é o <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
+ <code>GCMNetworkManager</code></a>, parte do Google Play Services, que
+ oferece um agendamento de trabalhos similar, compatível com versões legadas do
+ Android.
+</p>
+
+<p>Continuamos a expandir o <code>JobScheduler</code> e o
+<code>GCMNetworkManager</code> para atender a mais
+casos de uso — por exemplo, no Android N, você já pode agendar trabalhos
+em segundo plano de acordo com mudanças nos provedores de conteúdo. Ao mesmo tempo, começamos a
+substituir alguns padrões mais antigos que podem reduzir o desempenho do sistema,
+particularmente em dispositivos com pouca memória.</p>
+
+<p>No Android N, estamos removendo três transmissões implícitas de uso comum —
+{@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, {@link
+android.hardware.Camera#ACTION_NEW_PICTURE} e {@link
+ android.hardware.Camera#ACTION_NEW_VIDEO} —, pois podem despertar simultaneamente
+processos em segundo plano de vários aplicativos, aumentando o consumo de memória e bateria. Se
+o seu aplicativo receber essas transmissões, aproveite o N Developer Preview para
+ migrar para o <code>JobScheduler</code> e as APIs relacionadas. </p>
+
+<p>
+ Consulte a documentação de <a href="{@docRoot}preview/features/background-optimization.html">Otimizações
+em segundo plano</a> para obter mais detalhes.
+</p>
+
+
+<h2 id="data_saver">Economia de dados</h2>
+
+<div class="col-5of12" style="margin-right:1.5em;">
+<img src="{@docRoot}images/android-7.0/datasaver.png" style="border:2px solid #ddd">
+
+<p class="img-caption" style="padding-right:2em;">
+ <strong>Figura 4.</strong> Economia de dados em Settings.
+</p>
+ </div>
+
+<p>Normalmente, o custo de um plano de dados de celular ao longo da vida útil do dispositivo móvel
+excede o custo do próprio dispositivo. Para muitos usuários, os dados de celular
+são um recurso caro que querem economizar. </p>
+
+<p>O Android N introduz o modo de Economia de dados, um novo serviço do sistema que ajuda a reduzir
+o uso de dados de celular pelos aplicativos em situações de roaming, perto do final do ciclo de cobrança
+ou em pacotes de dados pré-pagos pequenos. A Economia de dados permite que os usuários controlem o
+uso de dados de celular e possibilita que os desenvolvedores ofereçam serviços mais eficientes quando o modo de Economia
+de dados estiver ativado. </p>
+
+<p>Quando um usuário ativa a Economia de dados em <strong>Settings</strong> e o dispositivo está
+em uma rede tarifada, o sistema bloqueia o uso de dados em segundo plano e avisa aos aplicativos
+para reduzir o uso de dados no primeiro plano sempre que possível — como, por exemplo, limitar a
+taxa de bits de streaming, reduzir a qualidade de imagens, adiar o armazenamento prévio otimista em cache
+e assim por diante. Os usuários podem autorizar aplicativos específicos a usar dados tarifados
+em segundo plano, mesmo com a Economia de dados ativada.</p>
+
+<p>O Android N estende o {@link android.net.ConnectivityManager} para oferecer aos aplicativos uma
+forma de <a href="{@docRoot}preview/features/data-saver.html#status">recuperar as
+preferências do usuário para a Economia de dados</a> e <a href="{@docRoot}preview/features/data-saver.html#monitor-changes">monitorar
+as mudanças de preferências</a>. Todos os aplicativos devem verificar se o usuário ativou a Economia
+de dados e tentar limitar o uso de dados em primeiro e segundo plano.</p>
+
+
+<h2 id="vulkan">Vulkan API</h2>
+
+<p>
+ O Android N integra o <a href="http://www.khronos.org/vulkan" class="external-link">Vulkan™</a>, uma nova API de renderização 3D, à plataforma. Como o
+ <a href="https://www.khronos.org/opengles/" class="external-link">OpenGL™
+ ES</a>, o Vulkan é um padrão aberto para gráficos e renderização 3D mantido
+ pelo Khronos Group.
+</p>
+
+<p>
+ O Vulkan foi projetado desde o início para minimizar sobrecargas na CPU do driver
+ e permitir que seu aplicativo controle a operação de GPU de forma mais direta. O Vulkan
+ também oferece melhor paralelização ao permitir que vários encadeamento realizem
+ trabalhos como a construção de buffer de comando de uma só vez.
+</p>
+
+<p>
+ As ferramentas de desenvolvimento e bibliotecas do Vulkan se combinam ao Android NDK. Elas
+ incluem:
+</p>
+
+<ul>
+ <li>Cabeçalhos
+ </li>
+
+ <li>Camadas de validação (bibliotecas de depuração)
+ </li>
+
+ <li>Compilador de sombreadores SPIR-V
+ </li>
+
+ <li>Biblioteca de compilação de sombreadores SPIR-V em tempo de execução
+ </li>
+</ul>
+
+<p>
+ O Vulkan só está disponível para aplicativos em dispositivos com hardware com capacidade para Vulkan,
+ como Nexus 5X, Nexus 6P e Nexus Player Estamos trabalhando em estreita cooperação com nossos
+ parceiros para oferecer o Vulkan em mais dispositivos assim que possível.
+</p>
+
+<p>
+ Para obter mais informações, consulte a <a href="{@docRoot}ndk/guides/graphics/index.html">documentação da API</a>.
+</p>
+
+<h2 id="tile_api">Quick Settings Tile API</h2>
+
+
+<div style="float:right;max-width:320px">
+<img src="{@docRoot}images/android-7.0/quicksettings.png" style="padding-left:1.5em;">
+
+<p class="img-caption" style="padding-left:2em;">
+ <strong>Figura 5.</strong> Blocos de Configurações rápidas na aba de notificações.
+</p>
+
+
+ </div><p>As Configurações rápidas são uma forma popular e simples de expor as principais configurações e ações
+diretamente na aba de notificações. No Android N, ampliamos o escopo das
+Configurações rápidas para aumentar ainda mais a utilidade e a conveniência. </p>
+
+<p>Adicionamos mais espaço para os blocos de Configurações rápidas, que os usuários podem
+acessar em uma área de exibição paginada deslizando à direita ou à esquerda. Além disso,
+permitimos que os usuários controlem quais blocos de Configurações rápidas são exibidos, bem como o local
+em que são exibidos — para adicionar ou mover blocos, os usuários simplesmente arrastam e soltam os blocos. </p>
+
+<p>Para desenvolvedores, o Android N também adiciona uma API nova que permite definir os próprios
+blocos de Configurações rápidas para que os usuários possam acessar facilmente os principais controles e ações do seu aplicativo.</p>
+
+<p>
+ Os blocos de Configurações rápidas estão reservados para controles ou ações que são
+ urgentemente necessários ou frequentemente usados e não devem ser usados como atalhos para
+ iniciar aplicativos.
+</p>
+
+<p>
+ Após definir os blocos, você pode disponibilizá-los aos usuários, que por sua vez podem adicioná-los
+ às Configurações rápidas usando o recurso de arrastar e soltar.
+</p>
+
+<p>
+ Para obter informações sobre a criação de um bloco de aplicativo, consulte a documentação para
+ <code>android.service.quicksettings.Tile</code> na <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência da API</a>, disponível para download.
+</p>
+
+
+
+<h2 id="number-blocking">Bloqueio de número</h2>
+
+<p>O Android N agora oferece suporte a bloqueio de números na plataforma e disponibiliza uma
+API de estrutura para permitir que provedores de serviço mantenham uma lista de números bloqueados. O
+ aplicativo padrão de SMS, o aplicativo padrão de telefone e os aplicativos de provedor podem ler e gravar
+a lista de números bloqueados. A lista não está acessível para outros aplicativos.</p>
+
+<p>Ao oferecer o bloqueio de número como recurso padrão da plataforma, o Android oferece
+uma forma consistente de bloqueio de números em uma grande variedade de
+dispositivos. Alguns benefícios que podem ser aproveitados pelos aplicativos são:</p>
+
+<ul>
+ <li> Números bloqueados para chamadas também são bloqueados para mensagens de texto
+ <li> Números bloqueados podem persistir entre várias redefinições e dispositivos por meio do
+recurso Backup e restauração
+ <li> Vários aplicativos podem usar a mesma lista de números bloqueados
+</ul>
+
+<p>Além disso, a integração de aplicativos da operadora por meio do Android significa que as operadoras podem
+ler a lista de números bloqueados no dispositivo e executar um bloqueio do lado do servidor
+para o usuário, impedindo que chamadas e textos indesejados cheguem a ele
+por qualquer meio, como terminais de VOIP ou encaminhamento de telefones.</p>
+
+<p>
+ Para obter mais informações, consulte <code>android.provider.BlockedNumberContract</code>
+ na <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência
+da API</a>, disponível para download.
+</p>
+
+<h2 id="call_screening">Triagem de chamadas</h2>
+
+<p>
+ O Android N permite que o aplicativo de telefone padrão faça a triagem das chamadas recebidas. O aplicativo
+ de telefone faz isso implementando o novo <code>CallScreeningService</code>,
+ que permite a execução de diversas ações com base nos
+ {@link android.telecom.Call.Details Call.Details} da chamada recebida, como:
+</p>
+
+<ul>
+ <li> Rejeitar a chamada recebida
+ <li> Não incluir a chamada no registro de chamadas
+ <li> Não mostrar ao usuário a notificação da chamada
+</ul>
+
+<p>
+ Para obter mais informações, consulte <code>android.telecom.CallScreeningService</code>
+ na <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência
+da API</a>, disponível para download.
+</p>
+
+
+<h2 id="multi-locale_languages">Suporte a diversas localidades, mais idiomas</h2>
+
+
+<p>O Android N agora permite que os usuários selecionem <strong>diversas localidades</strong> em Settings
+para oferecer melhor suporte a casos de uso bilíngue. Os aplicativos podem usar
+uma API nova para obter as localidades selecionadas pelo usuário e oferecer
+experiências de usuário mais sofisticadas para usuários com diversas localidades — como, por exemplo, mostrar resultados de pesquisa em
+diversos idiomas e não oferecer a tradução de páginas da web que usam
+um idioma conhecido pelo usuário.</p>
+
+<p>Juntamente com o suporte a várias localidades, o Android N também amplia o número de idiomas
+disponíveis aos usuários. Ele oferece mais de 25 variantes para cada um dos idiomas
+mais comuns, como inglês, espanhol, francês e árabe. Além disso, adiciona suporte parcial
+a mais de 100 novos idiomas.</p>
+
+<p>Os aplicativos podem obter a lista de localidades definida pelo usuário chamando
+<code>LocaleList.GetDefault()</code>. Para oferecer suporte ao maior número de localidades, o Android N está
+alterando a forma como resolve recursos. Não deixe de testar e verificar se seus aplicativos
+funcionam da forma esperada com a nova lógica de resolução de recursos.</p>
+
+<p>Para saber mais sobre o novo comportamento de resolução de recursos e sobre as práticas recomendadas que você deve
+seguir, consulte <a href="{@docRoot}preview/features/multilingual-support.html">Suporte a vários idiomas</a>.</p>
+
+
+<h2 id="emoji">Novos emoticons</h2>
+
+<p>
+ O Android N apresenta emoticons adicionais e recursos relacionados, tais como
+ emoticons com diferentes tons de pele e suporte a seletores
+ de variação. Se o seu aplicativo suporta emoticons,
+ siga as diretrizes abaixo para aproveitar estes recursos próprios para emoticons.
+</p>
+
+<ul>
+ <li>
+ <strong>Verifique se o dispositivo contém um emoticon antes de inseri-lo.</strong>
+ Para conferir quais emoticons estão presentes
+ na fonte do sistema, use o método {@link android.graphics.Paint#hasGlyph(String)}.
+ </li>
+ <li>
+ <strong>Verifique se um emoticon suporta seletores de variação.</strong>
+ Os seletores de variação permitem que você
+ apresente determinados emoticons em cores ou preto e branco.
+ Em dispositivos móveis, os aplicativos devem representar os emoticons em cores, e não em preto e branco. Porém,
+ se o seu aplicativo exibe emoticons em linha com o texto, ele deve usar a variação preto e branco.
+ Para determinar se um emoticon tem variação ou não, use o seletor de variação.
+ Para obter uma lista completa de caracteres com variações, consulte a seção
+ <em>sequências de variação de emoticon</em> da
+ <a class="external-link" href="http://www.unicode.org/Public/9.0.0/ucd/StandardizedVariants-9.0.0d1.txt">
+ documentação sobre variações em Unicode</a>.
+ </li>
+ <li>
+ <strong>Verifique se um emoticon suporta tons de pele.</strong> O Android N permite que os usuários modifiquem o
+ tom de pele renderizado de emoticons como quiserem. Os aplicativos de teclado devem oferecer indicações
+ visuais para emoticons que tenham diversos tons de pele e permitir que os usuários
+ selecionem o tom preferido. Para determinar quais emoticons do sistema têm
+ modificadores de tom de pele, use o método {@link android.graphics.Paint#hasGlyph(String)}
+. Você pode determinar quais emoticons usam tons de pele lendo a
+ <a class="external-link" href="http://unicode.org/emoji/charts/full-emoji-list.html">
+documentação do Unicode</a>.
+ </li>
+</ul>
+
+
+<h2 id="icu4">ICU4J APIs no Android</h2>
+
+<p>
+ Agora, o Android N oferece um subconjunto de <a href="http://site.icu-project.org/">ICU4J</a> APIs na estrutura do Android
+ no pacote <code>android.icu</code>. A migração é fácil e geralmente exige
+apenas a mudança do namespace <code>com.java.icu</code> para
+<code>android.icu</code>. Se você já usa um pacote ICU4J nos seus
+ aplicativos, a mudança para as APIs do <code>android.icu</code> disponibilizadas na estrutura do
+ Android pode reduzir substancialmente o tamanho do APK.
+</p>
+
+<p>
+ Para saber mais sobre as APIs ICU4J no Android, consulte <a href="{@docRoot}preview/features/icu4j-framework.html">Suporte ao ICU4J</a>.
+</p>
+
+
+
+<h2 id="gles_32">OpenGL™ ES 3.2 API</h2>
+
+<p>O Android N adiciona interfaces de estrutura e suporte de plataforma ao OpenGL ES 3.2, incluindo:</p>
+
+<ul>
+ <li> Todas as extensões do <a class="external-link" href="https://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">
+Pacote de extensão Android</a></a> (AEP), exceto <code>EXT_texture_sRGB_decode</code>.
+ <li> Framebuffers de ponto flutuante para HDR e sombreamento adiado.
+ <li> Chamadas de desenho a BaseVertex para possibilitar melhor organização em lotes e transmissão.
+ <li> Controle robusto de acesso a buffers para reduzir a sobrecarga do WebGL.
+</ul>
+
+<p>A API da estrutura do OpenGL ES 3.2 no Android N é fornecida pela classe
+<code>GLES32</code>. Ao usar o OpenGL ES 3.2, não deixe de declarar o
+requisito no arquivo manifesto usando o rótulo <code><uses-feature></code> e o
+atributo <code>android:glEsVersion</code>. </p>
+
+<p>Para obter mais informações sobre como usar o OpenGL ES, incluindo como verificar a versão do
+OpenGL ES compatível do dispositivo no tempo de execução, consulte o <a href="{@docRoot}guide/topics/graphics/opengl.html">guia da OpenGL ES API</a>.</p>
+
+
+<h2 id="android_tv_recording">Gravação do Android TV</h2>
+
+<p>O Android N adiciona a capacidade de gravar e reproduzir conteúdo de serviços de entrada
+do Android TV por meio de novas APIs de gravação. Criados usando as APIs atuais de time-shifting,
+os serviços de entrada de TV podem controlar quais dados de canal são gravados e como
+as sessões gravadas são salvas, bem como gerenciar a interação do usuário com o conteúdo gravado. </p>
+
+<p>Para obter mais informações, consulte <a href="{@docRoot}preview/features/tv-recording-api.html">Android TV Recording APIs</a>.</p>
+
+
+<h2 id="android_for_work">Android for Work</h2>
+
+<p>O Android for Work adiciona vários recursos e APIs para dispositivos que executam o Android N.
+Veja a seguir alguns destaques — para obter uma lista completa das mudanças, consulte
+<a href="{@docRoot}preview/features/afw.html">atualizações no Android for Work</a>.</p>
+
+<h3 id="work_profile_security_challenge">Desafio de segurança de perfil de trabalho </h3>
+
+<p>
+ Donos de perfis direcionados ao N SDK
+ podem especificar um desafio de segurança em separado para aplicativos em execução no
+ perfil de trabalho. O desafio de trabalho é exibido quando um usuário tenta abrir
+ qualquer aplicativo de trabalho. O preenchimento correto do desafio de segurança desbloqueia e,
+ se necessário, descriptografa o perfil de trabalho. Para donos de perfil,
+ <code>ACTION_SET_NEW_PASSWORD</code> solicita que o usuário defina um desafio
+ de trabalho e <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> um
+ bloqueio de dispositivo.
+</p>
+
+<p>
+ Os donos de perfil também podem definir políticas de senha distintas para o desafio de trabalho
+ (como o comprimento mínimo do PIN ou se é permitido usar a impressão digital
+para desbloquear o perfil) usando<code>setPasswordQuality()</code>,
+<code>setPasswordMinimumLength()</code> e métodos relacionados. O dono
+ de perfil também pode definir o bloqueio de dispositivo usando a instância de <code>DevicePolicyManager</code>
+ retornada pelo novo método <code>getParentProfileInstance()</code>.
+ Além disso, donos de perfil podem personalizar a tela de credenciais do
+ desafio de trabalho usando os novos métodos <code>setOrganizationColor()</code> e
+ <code>setOrganizationName()</code>.
+</p>
+<h3 id="turn_off_work">Desativar o trabalho </h3>
+
+<p>Os usuários podem alternar o modo de trabalho em dispositivos com um perfil de trabalho. Quando o modo de trabalho está
+desativado, o usuário gerenciado é encerrado temporariamente, o que desativa
+os aplicativos, a sincronização em segundo plano e as notificações do perfil de trabalho. Isso inclui o aplicativo do
+dono do perfil. Quando o modo de trabalho está desativado, o sistema exibe um ícone de status persistente
+ para lembrar ao usuário que não é possível iniciar aplicativos de trabalho. A tela de início
+indica que os aplicativos e widgets de trabalho não podem ser acessados. </p>
+
+<h3 id="always_on_vpn">Always on VPN </h3>
+
+<p>Os donos de dispositivo e perfil podem garantir que os aplicativos de trabalho se conectem sempre
+por meio de uma VPN especificada. O sistema inicia automaticamente a VPN após a
+ inicialização do dispositivo.</p>
+
+<p>
+ Os novos métodos <code>DevicePolicyManager</code> são
+ <code>setAlwaysOnVpnPackage()</code> e
+ <code>getAlwaysOnVpnPackage()</code>.
+</p>
+
+<p>Como os serviços de VPN podem ser vinculados diretamente pelo sistema sem interação com
+aplicativos, os clientes de VPN precisam processar novos pontos de entrada para o Always on VPN. Da
+ mesma forma que antes, os serviços são indicados ao sistema por um filtro de intenção
+ correspondente à ação <code>android.net.VpnService</code>. </p>
+
+<p>
+ Além disso, os usuários podem definir manualmente clientes do Always on VPN que implementam
+ métodos <code>VPNService</code> no usuário principal usando
+ <strong>Settings>More>Vpn</strong>.
+</p>
+
+<h3 id="custom_provisioning">Provisionamento personalizado</h3>
+
+<p>
+ Um aplicativo pode personalizar os fluxos de provisionamento do dono do perfil e do dispositivo
+ com cores e logos corporativos.
+ <code>DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR</code> personaliza
+ a cor do fluxo. <code>DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI</code>
+ personaliza o fluxo com um logo corporativo.
+</p>
+
+<h2 id="accessibility_enhancements">Aprimoramentos na acessibilidade</h2>
+
+<p>O Android N agora oferece Configurações de visão diretamente na tela de boas-vindas na instalação
+de novos dispositivos. Isso permite que os usuários descubram e configurem recursos de acessibilidade
+ em seus dispositivos de forma muito mais fácil, incluindo gesto de ampliação, tamanho
+da fonte, tamanho da tela e TalkBack. </p>
+
+<p>Com o posicionamento mais proeminente desses recursos de acessibilidade, os usuários
+ficarão mais propensos a experimentar o aplicativo com os recursos ativados. Não deixe de testar antecipadamente os aplicativos
+com essas configurações ativadas. Você pode ativá-las em Settings >
+Accessibility.</p>
+
+<p>Além disso, os serviços de acessibilidade no Android N podem ajudar usuários com deficiências
+motoras a tocar na tela. A nova API permite criar serviços com recursos
+como acompanhamento de face, acompanhamento de olho e varredura de pontos, entre outros, para atender
+às necessidades desses usuários.</p>
+
+<p>Para obter mais informações, consulte <code>android.accessibilityservice.GestureDescription</code>
+ na <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência da API</a>, disponível para download.</p>
+
+
+<h2 id="direct_boot">Inicialização direta</h2>
+
+<p>A inicialização direta reduz os tempos de inicialização dos dispositivos e permite que aplicativos
+registrados tenham funcionalidade limitada, mesmo após uma reinicialização inesperada.
+Por exemplo, se um dispositivo criptografado reinicializar durante o sono do usuário,
+alarmes registrados, mensagens e chamadas recebidas podem agora continuar notificando
+o usuário normalmente. Isso também significa que serviços de acessibilidade podem ser
+disponibilizados imediatamente após um reinício.</p>
+
+<p>A inicialização direita aproveita a criptografia baseada em arquivo do Android N
+para ativar políticas de criptografia detalhadas para dados de sistema e aplicativos.
+O sistema usa um armazenamento criptografado pelo dispositivo para determinados dados de sistema e dados
+de aplicativos registrados explicitamente. Por padrão, um armazenamento criptografado por credencial é usado para todos
+os outros dados de sistema, dados de usuário, aplicativos e dados de aplicativos. </p>
+
+<p>Na inicialização, o sistema inicia em um modo restrito que permite
+acessar apenas dados criptografados pelo dispositivo, sem acesso geral a aplicativos ou dados.
+Se você deseja executar componentes nesse modo, pode registrá-los
+definindo um sinalizador no manifesto. Após a reinicialização, o sistema ativa
+componentes registrados transmitindo a intenção <code>LOCKED_BOOT_COMPLETED</code>
+. O sistema garante que dados de aplicativos registrados criptografados pelos dispositivos sejam disponibilizados
+antes do destravamento. Todos os outros dados ficarão indisponíveis até que o usuário confirme as credenciais
+ de tela de bloqueio para descriptografá-los. </p>
+
+Para obter mais informações, consulte <a href="{@docRoot}preview/features/direct-boot.html">Inicialização direta</a>.</p>
+</p>
+
+
+<h2 id="key_attestation">Confirmação de chaves</h2>
+
+<p>Os armazenamentos de chaves protegidos por hardware oferecem um método muito mais seguro para criar, armazenar
+e usar chaves de criptografia em dispositivos Android. Eles protegem chaves contra o kernel do Linux,
+possíveis vulnerabilidades do Android e extração
+em dispositivos com acesso root.</p>
+
+<p>Para permitir o uso de armazenamento de chaves protegido por hardware com maior facilidade e segurança,
+o Android N introduziu a confirmação de chaves. Aplicativos em dispositivos móveis e fora deles podem usar a confirmação de chaves
+para determinar com precisão se um par de chaves RSA ou EC
+está protegido por hardware, quais as propriedades do par de chaves e quais as restrições
+aplicadas ao uso e à validação. </p>
+
+<p>Aplicativos e serviços externos aos dispositivos móveis podem solicitar informações sobre um par de chaves
+por meio de um certificado de confirmação X.509, que deve estar assinado por uma
+chave de confirmação válida. A chave de confirmação é uma chave de assinatura ECDSA,
+injetada no armazenamento de chaves protegido por hardware do dispositivo na fábrica.
+Portanto, um certificado de confirmação assinado com uma chave de confirmação
+válida confirma a existência de um armazenamento de chaves protegido por hardware, além de
+detalhes dos pares de chaves desse armazenamento de chaves.</p>
+
+<p>Para garantir que o dispositivo esteja usando uma imagem Android oficial de fábrica
+e segura, a confirmação de chaves exige que o <a class="external-link" href="https://source.android.com/security/verifiedboot/verified-boot.html#bootloader_requirements">bootloader</a>
+ do dispositivo forneça as seguintes informações ao <a class="external-link" href="https://source.android.com/security/trusty/index.html">Ambiente
+ de execução confiável (TEE)</a>:</p>
+
+<ul>
+<li>A versão do SO e o nível de correção instalado no dispositivo</li>
+<li>A chave pública <a href="https://source.android.com/security/verifiedboot/index.html" class="external-link">Verified Boot</a> e seu status de bloqueio</li>
+ </ul>
+
+<p>Para obter mais informações sobre o recurso de armazenamento de chaves protegido por hardware,
+consulte o guia <a href="https://source.android.com/security/keystore/" class="external-link">Armazenamento de chaves protegido por hardware</a>.</p>
+
+<p>Além da confirmação de chaves, o Android N também introduziu
+ chaves associadas a impressões digitais que não são revogadas no cadastramento de impressões digitais.</p>
+
+<h2 id="network_security_config">Configuração de segurança de rede</h2>
+
+<p>No Android N, os aplicativos podem personalizar o comportamento de conexões seguras (HTTPS, TLS)
+de forma segura, sem modificação no código, usando a
+<em>Configuração de segurança de rede</em> declarativa em vez das
+APIs programáticas propensas a erro (por exemplo, X509TrustManager).</p>
+
+ <p>Recursos compatíveis:</p>
+<ul>
+<li><b>Âncoras de confiança personalizadas.</b> Permite que um aplicativo personalize quais
+autoridades de certificado (CA) são confiáveis para as conexões seguras. Por
+ exemplo, confiar em certificados autoassinados privados ou um restrito conjunto de CAs públicas.
+</li>
+<li><b>Substituições apenas em depuração.</b> Permite que um desenvolvedor de aplicativos depure
+conexões seguras do aplicativo com segurança, sem adicionar riscos à base
+instalada.
+</li>
+<li><b>Cancelamento do uso de tráfego de texto simples.</b> Permite que um aplicativo seja protegido contra
+o uso acidental de tráfego de texto simples.</li>
+<li><b>Fixação de certificados.</b> Um recurso avançado que permite que os aplicativos
+ limitem quais chaves de servidor são confiáveis para conexões seguras.</li>
+</ul>
+
+<p>Para obter mais configurações, consulte <a href="{@docRoot}preview/features/security-config.html">Configuração de segurança
+de rede</a>.</p>
+
+<h2 id="default_trusted_ca">Autoridade de certificado confiável padrão</h2>
+
+<p>Por padrão, os aplicativos direcionados ao Android N confiam apenas em certificados fornecidos pelo sistema
+e não confiam mais em Autoridades de certificado (CA) adicionadas pelo usuário. Os aplicativos direcionados ao Android
+N que querem confiar em CAs adicionadas pelo usuário devem usar a
+<a href="{@docRoot}preview/features/security-config.html">Configuração de segurança de rede</a> para
+especificar como confiar nas CAs de usuário.</p>
+
+<h2 id="apk_signature_v2">Esquema de assinatura de APK v2</h2>
+
+<p>
+ O Android N apresenta o esquema de assinatura de APK v2, um novo esquema de assinatura de aplicativo
+ que oferece instalações mais rápidas e maior proteção contra alterações não autorizadas
+ em arquivos APK. Por padrão, o Android Studio 2.2 e o plug-in do Android
+ para Gradle 2.2 assinam seu aplicativo usando o esquema de assinatura de APK v2 e
+ o esquema tradicional, que usa assinaturas JAR.
+</p>
+
+<p>
+ Embora seja recomendável aplicar o esquema de assinatura de APK v2 ao aplicativo, este novo
+ esquema não é obrigatório. Se o aplicativo não for compilado adequadamente ao usar o esquema
+de assinatura de APK v2, você poderá desativá-lo. O processo de desativação
+ faz com que o Android Studio 2.2 e o plug-in do Android para Gradle 2.2 assinem
+o aplicativo usando apenas o esquema de assinatura tradicional. Para assinar apenas com o
+ esquema tradicional, abra o arquivo do nível de módulo <code>build.gradle</code> e
+ adicione a linha <code>v2SigningEnabled false</code> à configuração de assinatura de sua
+ versão:
+</p>
+
+<pre>
+ android {
+ ...
+ defaultConfig { ... }
+ signingConfigs {
+ release {
+ storeFile file("myreleasekey.keystore")
+ storePassword "password"
+ keyAlias "MyReleaseKey"
+ keyPassword "password"
+ <strong>v2SigningEnabled false</strong>
+ }
+ }
+ }
+</pre>
+
+<p class="caution"><strong>Cuidado: </strong>Se você assinar o aplicativo usando o esquema de assinatura de APK
+ v2 e fizer novas alterações posteriormente, a assinatura do app
+ será invalidada. Por essa razão, use ferramentas como <code>zipalign</code>
+ antes de assinar o aplicativo usando o esquema de assinatura de APK v2, não depois.
+</p>
+
+<p>
+ Para obter mais informações, leia os documentos do Android Studio que descrevem como
+<a href="{@docRoot}studio/publish/app-signing.html#release-mode">
+assinar um aplicativo</a> no Android Studio e como<a href="{@docRoot}studio/build/build-variants.html#signing"> configurar
+o arquivo de programação para assinar aplicativos</a> usando o plug-in do Android para Gradle.
+</p>
+
+<h2 id="scoped_directory_access">Acesso a diretórios com escopo</h2>
+
+<p>No Android N, os aplicativos podem usar novas APIs para solicitar acesso a determinados diretórios de <a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">armazenamento
+externo</a>, incluindo diretórios em mídias removíveis, tais como cartões
+SD. As novas APIs simplificam consideravelmente como o aplicativo acessa os
+diretórios de armazenamento externo padrão, tais como o diretório<code>Pictures</code>. Os aplicativos,
+como aplicativos de fotografia, podem usar essas APIs em vez de
+<code>READ_EXTERNAL_STORAGE</code>, que concede acesso a todos os diretórios de
+armazenamento, ou da Estrutura de acesso ao armazenamento, que faz o usuário navegar até
+o diretório.</p>
+
+<p>Além disso, as novas APIs simplificam as etapas executadas pelo usuário para conceder ao aplicativo
+acesso ao armazenamento externo. Quando você usa as novas APIs, o sistema usa uma IU de permissões simples
+que detalha claramente a qual diretório o aplicativo
+está solicitando acesso.</p>
+
+<p>Para obter mais informações, consulte a documentação para desenvolvedores
+<a href="{@docRoot}preview/features/scoped-folder-access.html">Acessos
+ a diretório com escopo</a>.</p>
+
+<h2 id="keyboard_shortcuts_helper">Auxiliar de atalhos de teclado</h2>
+
+<p>
+No Android N, o usuário pode pressionar "Alt + /" para acionar uma tela de <em>atalhos de teclado</em>
+que exibe todos os atalhos disponíveis do sistema e do
+aplicativo em questão. Os atalhos são recuperados automaticamente do menu do aplicativo, se
+estiverem disponíveis, mas os desenvolvedores podem fornecer listas próprias de atalhos
+para a tela. É possível fazer isso substituindo o novo método
+<code>Activity.onProvideKeyboardShortcuts()</code>, conforme descrito na
+<a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência da API</a>, disponível para download.
+</p>
+
+<p>
+Para acionar o auxiliar de atalhos de teclado em qualquer ponto do aplicativo,
+chame {@code Activity.requestKeyboardShortcutsHelper()} para a atividade correspondente.
+</p>
+
+<h2 id="sustained_performance_api">API de desempenho sustentado</h2>
+
+<p>
+O desempenho pode flutuar drasticamente em aplicativos executados por muito tempo porque o
+sistema aciona os mecanismos de sistema-em-um-chip quando os componentes do dispositivo atingem o
+limite de temperatura. Esta flutuação representa um desafio para desenvolvedores de aplicativos
+ que criam aplicativos de alto desempenho e longo tempo de execução.
+</p>
+
+<p>
+Para tratar estas limitações, o Android N inclui compatibilidade opcional para
+<em>modo de desempenho sustentado</em>, permitindo que OEMs ofereçam dicas sobre
+ capacidades de desempenho em dispositivo para aplicativos de longa duração. Os desenvolvedores de aplicativos
+podem usar essas dicas para ajustar os aplicativos para um nível de desempenho do dispositivo previsível
+e consistente em períodos longos de tempo.
+</p>
+
+<p>
+Desenvolvedores de aplicativos podem testar essa nova API na N Developer Preview
+apenas em dispositivos Nexus 6P. Para usar este recurso,
+configure a janela de sinalização de desempenho sustentado para a janela
+que você quer executar em modo de desempenho sustentado. Configure esta sinalização usando o método
+{@code Window.setSustainedPerformanceMode()}. O sistema desativará este modo
+automaticamente quando a janela não estiver mais em foco.
+</p>
+
+<h2 id="vr">Suporte a RV</h2>
+
+<p>
+O Android N adiciona compatibilidade de plataformas e otimizações para um novo Modo RV Mode que dá aos
+ desenvolvedores a capacidade de projetar experiências de RV móveis de alta qualidade para os usuários. Há diversas melhorias de desempenho
+, incluindo acesso a um núcleo exclusivo da CPU para aplicativos de RV.
+ Dentro dos aplicativos, é possível tirar vantagem do rastreamento inteligente da cabeça
+e de notificações estéreo que funcionam para RV. Mais importante, o Android N oferece
+gráficos de latência muito baixa. Para obter informações completas sobre a criação de aplicativos de RV para Android N,
+consulte o <a href="https://developers.google.com/vr/android/">Google VR SDK para Android</a>.
+</p>
+
+
+<h2 id="print_svc">Melhorias nos serviços de impressão</h2>
+
+<p>
+ No Android N, agora os desenvolvedores de serviços de impressão podem exibir informações adicionais
+ sobre impressoras e trabalhos de impressão individuais.
+</p>
+
+<p>
+ Ao listar impressoras individuais, agora um serviço de impressão pode definir
+ícones por impressora de duas maneiras:
+</p>
+
+<ul>
+ <li>É possível definir um ícone de um ID de recurso chamando
+ <code>PrinterInfo.Builder.setResourceIconId()</code>
+ </li>
+
+ <li>É possível exibir um ícone da rede chamando
+<code>PrinterInfo.Builder.setHasCustomPrinterIcon()</code> e definindo um
+retorno de chamada para quando o ícone for solicitado usando
+<code>android.printservice.PrinterDiscoverySession.onRequestCustomPrinterIcon()</code>
+ </li>
+</ul>
+
+<p>
+ Além disso, você pode fornecer atividade por impressora para exibir
+informações adicionais chamando <code>PrinterInfo.Builder.setInfoIntent()</code>.
+</p>
+
+<p>
+ É possível indicar o progresso e o status de trabalhos de impressão na
+notificação de trabalhos de impressão chamando
+<code>android.printservice.PrintJob.setProgress()</code> e
+<code>android.printservice.PrintJob.setStatus()</code>, respectivamente.
+</p>
+
+<p>
+ Para obter mais informações sobre estes métodos, consulte a <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência da API</a>, disponível para download.
+</p>
+
+<h2 id="framemetrics_api">FrameMetricsListener API</h2>
+
+<p>
+A FrameMetricsListener API permite que um aplicativo monitore o desempenho de renderização
+ da IU. A API oferece este recurso ao expor uma API Pub/Sub em streaming para transferir informações de precisão
+de quadro à janela atual do aplicativo. Os dados retornados são
+equivalentes aos que<code><a href="{@docRoot}tools/help/shell.html#shellcommands">adb shell</a>
+dumpsys gfxinfo framestats</code> exibe, mas não estão mais limitados a 120 quadros.
+</p>
+
+<p>
+É possível usar o FrameMetricsListener para medir o desempenho da IU
+em nível de interação na produção sem conexão USB. Esta API
+permite a coleta de dados com granularidade muito maior do que
+{@code adb shell dumpsys gfxinfo}. A granularidade maior é possível porque
+o sistema pode coletar dados para determinadas interações no aplicativo; o sistema
+não precisa capturar um resumo global do desempenho
+do aplicativo nem limpar qualquer estado global. É possível usar este
+recurso para reunir dados de desempenho e capturar regressões no desempenho da IU
+para casos de uso reais dentro do aplicativo.
+</p>
+
+<p>
+Para monitorar uma janela, implemente o método de retorno de chamada <code>FrameMetricsListener.onMetricsAvailable()</code>
+e registre-o nessa janela. Para obter mais informações, consulte a
+documentação da classe{@code FrameMetricsListener} na
+<a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência da API</a>,disponível para download.
+</p>
+
+<p>
+A API fornece um objeto {@code FrameMetrics}, que contém dados de quadro que
+o subsistema de renderização relata para vários marcos no ciclo de vida de um quadro.
+As métricas suportadas são: {@code UNKNOWN_DELAY_DURATION},
+{@code INPUT_HANDLING_DURATION}, {@code ANIMATION_DURATION},
+{@code LAYOUT_MEASURE_DURATION}, {@code DRAW_DURATION}, {@code SYNC_DURATION},
+{@code COMMAND_ISSUE_DURATION}, {@code SWAP_BUFFERS_DURATION},
+{@code TOTAL_DURATION}e {@code FIRST_DRAW_FRAME}.
+</p>
+
+
+<h2 id="virtual_files">Arquivos virtuais</h2>
+
+<p>
+ Em versões anteriores do Android, o aplicativo podia usar a estrutura de
+ acesso ao armazenamento para permitir que os usuários selecionem arquivos de contas de armazenamento em nuvem,
+ como o Google Drive. No entanto, não é possível representar arquivos que
+não tenham uma representação direta de código de bytes; os arquivos precisam fornecer
+ um fluxo de entrada.
+</p>
+
+<p>
+ O Android N adiciona o conceito de <em>arquivos virtuais</em> à estrutura de acesso
+ ao armazenamento. O recurso de arquivos virtuais permite que seu
+{@link android.provider.DocumentsProvider} retorne URIs de documentos que possam ser
+usados com intenções {@link android.content.Intent#ACTION_VIEW} mesmo que não tenham
+uma representação direta de código de bytes. O Android N também permite que você
+ ofereça formatos alternativos para arquivos de usuário, sejam virtuais ou não.
+</p>
+
+<p>
+ Para obter o URI para um documento virtual em seu aplicativo, é preciso criar uma
+ {@link android.content.Intent} para abrir a IU do seletor de arquivos. Como um aplicativo
+não consegue abrir um arquivo virtual diretamente usando o método
+{@link android.content.ContentResolver#openInputStream(Uri) openInputStream()}
+, seu aplicativo não receberá arquivos virtuais se você não incluir a categoria
+{@link android.content.Intent#CATEGORY_OPENABLE}.
+</p>
+
+<p>
+ Depois que o usuário fizer uma seleção, o sistema chamará o método
+{@link android.app.Activity#onActivityResult onActivityResult()}.
+ O aplicativo pode recuperar o URI do arquivo virtual e obter um fluxo de resultados, como
+ demonstrado no snippet de código abaixo.
+</p>
+
+<pre>
+ // Other Activity code ...
+
+ final static private int REQUEST_CODE = 64;
+
+ // We listen to the OnActivityResult event to respond to the user's selection.
+ @Override
+ public void onActivityResult(int requestCode, int resultCode,
+ Intent resultData) {
+ try {
+ if (requestCode == REQUEST_CODE &&
+ resultCode == Activity.RESULT_OK) {
+
+ Uri uri = null;
+
+ if (resultData != null) {
+ uri = resultData.getData();
+
+ ContentResolver resolver = getContentResolver();
+
+ // Before attempting to coerce a file into a MIME type,
+ // check to see what alternative MIME types are available to
+ // coerce this file into.
+ String[] streamTypes =
+ resolver.getStreamTypes(uri, "*/*");
+
+ AssetFileDescriptor descriptor =
+ resolver.openTypedAssetFileDescriptor(
+ uri,
+ streamTypes[0],
+ null);
+
+ // Retrieve a stream to the virtual file.
+ InputStream inputStream = descriptor.createInputStream();
+ }
+ }
+ } catch (Exception ex) {
+ Log.e("EXCEPTION", "ERROR: ", ex);
+ }
+ }
+</pre>
+
+<p>
+ Para obter mais informações sobre como acessar arquivos de usuário, consulte o
+<a href="{@docRoot}guide/topics/providers/document-provider.html">guia da estrutura
+de acesso ao armazenamento</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
new file mode 100644
index 0000000..ff44f6a
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/about/versions/nougat/index.jd
@@ -0,0 +1,109 @@
+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
+
+<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-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 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}about/versions/nougat/android-7.0.html">
+ <span class="dac-sprite dac-auto-chevron"></span>
+ Primeiros passos
+ </a>
+ </div>
+ <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></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>
+</section>
+
+<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://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/dev-community">
+ <i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
+ Participe da comunidade de desenvolvedores
+ </a>
+ </li>
+ </ul>
+ </div><!-- end .wrap -->
+</div><!-- end .dac-actions -->
+
+<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"
+ data-query="type:blog+tag:androidn+tag:featured, type:youtube+tag:androidn+tag:featured"
+ data-sortOrder="-timestamp"
+ data-cardSizes="6x6"
+ data-items-per-page="6"
+ data-maxResults="15"
+ data-initial-results="3"></div>
+</div></section>
+
+<section class="dac-section dac-gray" id="videos"><div class="wrap">
+ <h1 class="dac-section-title">Videos</h1>
+ <div class="dac-section-subtitle">
+ 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: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>
\ No newline at end of file
diff --git a/docs/html-intl/intl/pt-br/preview/j8-jack.jd b/docs/html-intl/intl/pt-br/guide/platform/j8-jack.jd
similarity index 100%
rename from docs/html-intl/intl/pt-br/preview/j8-jack.jd
rename to docs/html-intl/intl/pt-br/guide/platform/j8-jack.jd
diff --git a/docs/html-intl/intl/pt-br/guide/topics/ui/multi-window.jd b/docs/html-intl/intl/pt-br/guide/topics/ui/multi-window.jd
new file mode 100644
index 0000000..26259f6
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/guide/topics/ui/multi-window.jd
@@ -0,0 +1,589 @@
+page.title=Suporte a várias janelas
+page.metaDescription=Novo suporte à exibição de mais de um aplicativo ao mesmo tempo no Android N.
+page.keywords="multi-window", "android N", "split screen", "free-form"
+
+@jd:body
+
+<div id="tb-wrapper">
+ <div id="tb">
+ <h2>Neste documento</h2>
+ <ol>
+ <li><a href="#overview">Visão geral</a></li>
+ <li><a href="#lifecycle">Ciclo de vida do modo de várias janelas</a></li>
+ <li><a href="#configuring">Configuração do aplicativo para o modo
+ de várias janelas</a></li>
+ <li><a href="#running">Execução do aplicativo no modo de várias janelas</a></li>
+ <li><a href="#testing">Teste do suporte a várias janelas em seu aplicativo</a></li>
+ </ol>
+ <h2>Veja também</h2>
+ <ol>
+ <li><a class="external-link" href="https://github.com/googlesamples/android-MultiWindowPlayground">Playground — aplicativo de exemplo
+ do modo de várias janelas</a></li>
+ <li><a class="external-link" href="https://medium.com/google-developers/5-tips-for-preparing-for-multi-window-in-android-n-7bed803dda64">Cinco dicas para preparar o modo de várias janelas no Android N</a></li>
+ </ol>
+ </div>
+</div>
+
+<p>
+ O Android N adiciona suporte à exibição de mais de um aplicativo ao
+ mesmo tempo. Em dispositivos portáteis, dois aplicativos podem ser executados lado a lado ou
+ um acima do outro no modo de <em>tela dividida</em>. Em dispositivos de TV, os aplicativos podem
+ usar o modo de <em>imagem em imagem</em> para continuar a reprodução do vídeo enquanto os usuários
+ interagem com outro aplicativo.
+</p>
+
+<p>
+ Se você compilar o aplicativo com o N Preview SDK, poderá configurar como o aplicativo
+ processa a exibição de várias janelas. Por exemplo, você pode especificar as dimensões
+mínimas permitidas para a atividade. Você também pode desativar a exibição de várias janelas para
+ o aplicativo, garantindo que o sistema mostre o aplicativo apenas
+em modo de tela inteira.
+</p>
+
+<h2 id="overview">Visão geral</h2>
+
+<p>
+ O Android N permite que diversos aplicativos compartilhem a tela ao mesmo tempo. Por
+ exemplo, um usuário pode dividir a tela para visualizar uma página da web no lado esquerdo
+ e compor um e-mail no lado direito. A experiência do usuário depende do
+ dispositivo:
+</p>
+
+<ul>
+ <li>Os dispositivos portáteis que executam o Android N oferecem o
+ modo de tela dividida. Nesse modo, o sistema preenche a tela com dois aplicativos, exibindo-os
+ lado a lado ou um acima do outro. O usuário pode arrastar a linha divisória
+ que separa os dois para que um aplicativo fique maior e o outro menor.
+ </li>
+
+ <li>No Nexus Player executando Android N, os aplicativos podem entrar
+ no <a href="picture-in-picture.html">modo de imagem em imagem</a>, o que permite
+ que continuem a exibir conteúdo enquanto o usuário navega ou interage com
+ outros aplicativos.
+ </li>
+
+ <li>Fabricantes de dispositivos maiores podem optar pelo modo de
+ forma livre, em que o usuário pode redimensionar livremente cada atividade. Se o
+ fabricante ativar esse recurso, o dispositivo oferecerá o modo de forma livre
+ e o modo de tela dividida.
+ </li>
+</ul>
+
+<img src="{@docRoot}images/android-7.0/mw-splitscreen.png" alt="" width="650" srcset="{@docRoot}images/android-7.0/mw-splitscreen.png 1x,
+ {@docRoot}images/android-7.0/mw-splitscreen_2x.png 2x," id="img-split-screen" />
+<p class="img-caption">
+ <strong>Figura 1.</strong> Dois aplicativos executando lado a lado em modo de tela dividida.
+</p>
+
+<p>
+ O usuário pode mudar para o modo de várias janelas das seguintes maneiras:
+</p>
+
+<ul>
+ <li>Se o usuário abrir a <a href="{@docRoot}guide/components/recents.html">tela
+ Overview</a> e pressionar longamente um
+ título de atividade, poderá arrastá-la para uma parte destacada da
+ tela para colocá-la no modo de várias janelas.
+ </li>
+
+ <li>Se o usuário pressionar longamente o botão Overview, o dispositivo colocará
+ a atividade atual no modo de várias janelas e abrirá a tela Overview para
+ permitir que o usuário escolha outra atividade para compartilhar a tela.
+ </li>
+</ul>
+
+<p>
+ Os usuários podem <a href="{@docRoot}guide/topics/ui/drag-drop.html">arrastar e
+ soltar</a> dados de uma atividade para outra enquanto as atividades compartilham
+ a tela. (Anteriormente, os usuários podiam apenas arrastar e soltar dados em uma única
+ atividade.)
+</p>
+
+<h2 id="lifecycle">Ciclo de vida do modo de várias janelas</h2>
+
+<p>
+ O modo de várias janelas não altera o <a href="{@docRoot}training/basics/activity-lifecycle/index.html">ciclo de vida
+ da atividade</a>.
+</p>
+
+<p>
+ No modo de várias janelas, somente a atividade com a qual o usuário interagiu mais recentemente
+ fica ativa em um determinado momento. Essa atividade é considerada a atividade <em>superior</em>.
+ Todas as outras atividades ficam no estado pausado, mesmo se visíveis.
+ No entanto, o sistema atribui a essas atividades pausadas, mas visíveis, uma prioridade maior
+ que a das atividades não visíveis. Se o usuário interagir com uma das
+ atividades pausadas, ela será retomada e a atividade previamente superior
+ será pausada.
+</p>
+
+<p class="note">
+ <strong>Observação:</strong> em modo de suporte a várias janelas, um aplicativo pode estar no estado
+ pausado e continuar visível ao usuário. Pode ser necessário que um aplicativo continue com suas
+ atividades, mesmo se pausado. Por exemplo, um aplicativo que reproduz vídeo e que está no
+ modo pausado, mas visível, deve continuar a exibir o vídeo. Por esse
+ motivo, recomendamos que atividades que reproduzem vídeo <em>não</em> pausem o
+ vídeo nos manipuladores {@link android.app.Activity#onPause onPause()}.
+ Em vez disso, o vídeo deve ser pausado em {@link android.app.Activity#onStop
+ onStop()} e a reprodução retomada em {@link android.app.Activity#onStart
+ onStart()}.
+</p>
+
+<p>
+ Quando o usuário coloca um aplicativo no modo de várias janelas, o sistema notifica a
+ atividade sobre a mudança de configuração, como especificado em <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Processamento de alterações
+ no tempo de execução</a>. Isso também acontece quando o usuário redimensiona o aplicativo ou
+ coloca-o novamente no modo de tela cheia.
+ Essencialmente, essa alteração afeta
+ o ciclo de vida da atividade da mesma forma que quando o sistema notifica o aplicativo de que o dispositivo mudou
+ do modo de retrato para paisagem, exceto que as dimensões do dispositivo são
+ alteradas, em vez de simplesmente permutadas. Como discutido em <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Processamento de alterações
+ no tempo de execução</a>, a sua atividade pode processar ela mesma a mudança de configuração ou
+ permitir que o sistema destrua a atividade e recrie-a com as novas
+ dimensões.
+</p>
+
+<p>
+ Se o usuário redimensionar uma janela e aumentar uma de suas dimensões, o
+ sistema redimensionará a atividade para corresponder à ação do usuário e emitirá <a href="{@docRoot}guide/topics/resources/runtime-changes.html">mudanças de tempo de execução</a>
+ conforme necessário. Se o aplicativo demorar a desenhar nas áreas recém-expostas, o
+ sistema preencherá temporariamente essas áreas com a cor especificada pelo atributo {@link
+ android.R.attr#windowBackground windowBackground} ou pelo atributo de estilo padrão
+ <code>windowBackgroundFallback</code>.
+</p>
+
+<h2 id="configuring">Configuração do aplicativo para o modo de várias janelas</h2>
+
+<p>
+ Se o seu aplicativo for direcionado ao Android N, você poderá configurar como
+ e se as atividades do aplicativo suportam a exibição em várias janelas. Você pode definir
+ atributos no manifesto para controlar o tamanho e o layout.
+ As configurações de atributos de uma atividade raiz se aplicam a todas as atividades
+ em sua pilha de tarefas. Por exemplo, se a atividade raiz tiver
+ <code>android:resizeableActivity</code> definido como true, todas as atividades
+ na pilha de tarefas serão redimensionáveis.
+</p>
+
+<p class="note">
+ <strong>Observação:</strong> se você compilar um aplicativo com várias orientações usando uma versão
+ do SDK anterior ao Android N e o usuário usar o aplicativo em
+ modo de suporte a várias janelas, o sistema redimensionará forçosamente o aplicativo. O sistema apresenta uma
+ caixa de diálogo avisando o usuário de que o aplicativo pode se comportar de forma inesperada. O sistema
+ <em>não</em> redimensiona aplicativos de orientação fixa; se
+ o usuário tentar abrir um aplicativo de orientação fixa no modo de várias janelas,
+ o aplicativo ocupará toda a tela.
+</p>
+
+<h4 id="resizeableActivity">android:resizeableActivity</h4>
+<p>
+ Defina esse atributo no nó <code><activity></code> ou
+ <code><application></code> em seu manifesto para ativar ou desativar a exibição em
+ várias telas:
+</p>
+
+<pre>
+android:resizeableActivity=["true" | "false"]
+</pre>
+
+<p>
+ Se esse atributo for definido como verdadeiro, a atividade poderá ser inicializada nos
+ modos de tela dividida e forma livre. Se o atributo for definido como falso, a
+ atividade não oferecerá suporte ao modo de várias janelas. Se esse valor for falso e o
+ usuário tentar iniciar a atividade no modo de várias janelas, a atividade ocupará
+ a tela inteira.
+</p>
+
+<p>
+ Se o aplicativo for direcionado ao Android N, mas o valor desse atributo não for
+ especificado, o atributo assumirá o valor padrão de verdadeiro.
+</p>
+
+<h4 id="supportsPictureInPicture">android:supportsPictureInPicture</h4>
+
+<p>
+ Defina esse atributo no nó <code><activity></code> ou no seu manifesto para
+ indicar se a atividade oferece suporte à exibição no modo de imagem em imagem. Esse
+ atributo será ignorado se <code>android:resizeableActivity</code> for falso.
+</p>
+
+<pre>
+android:supportsPictureInPicture=["true" | "false"]
+</pre>
+
+<h3 id="layout">Atributos de layout</h3>
+
+<p>
+ No Android N, o elemento de manifesto <code><layout></code>
+ oferece suporte a diversos atributos que afetam o comportamento da atividade no
+ modo de várias janelas:
+</p>
+
+<dl>
+ <dt>
+ <code>android:defaultWidth</code>
+ </dt>
+
+ <dd>
+ Largura padrão da atividade quando iniciada no modo de forma livre.
+ </dd>
+
+ <dt>
+ <code>android:defaultHeight</code>
+ </dt>
+
+ <dd>
+ Altura padrão da atividade quando iniciada no modo de forma livre.
+ </dd>
+
+ <dt>
+ <code>android:gravity</code>
+ </dt>
+
+ <dd>
+ Posicionamento inicial da atividade quando iniciada no modo de forma livre. Consulte a
+ referência de {@link android.view.Gravity} para obter os valores adequados.
+ </dd>
+
+ <dt>
+ <code>android:minimalHeight</code>, <code>android:minimalWidth</code>
+ </dt>
+
+ <dd>
+ Altura mínima e largura mínima para a atividade nos modos de tela dividida
+ e forma livre. Se o usuário mover o divisor no modo de tela dividida
+ para tornar uma atividade menor que o mínimo especificado, o sistema recortará
+ a atividade para o tamanho solicitado pelo usuário.
+ </dd>
+</dl>
+
+<p>
+ Por exemplo, o código a seguir mostra como especificar um tamanho e uma localização
+ padrão para a atividade, bem como o tamanho mínimo, quando a atividade é exibida no
+ modo de forma livre:
+</p>
+
+<pre>
+<activity android:name=".MyActivity">
+ <layout android:defaultHeight="500dp"
+ android:defaultWidth="600dp"
+ android:gravity="top|end"
+ android:minimalHeight="450dp"
+ android:minimalWidth="300dp" />
+</activity>
+</pre>
+
+<h2 id="running">Execução do aplicativo no modo de várias janelas</h2>
+
+<p>
+ O Android N oferece nova funcionalidade para dar suporte a aplicativos que podem ser executados
+ no modo de várias janelas.
+</p>
+
+<h3 id="disabled-features">Recursos desativados no modo de várias janelas</h3>
+
+<p>
+ Alguns recursos são desativados ou ignorados quando um dispositivo está no modo de
+ várias janelas, pois não fazem sentido para uma atividade que pode estar compartilhando a
+ tela do dispositivo com outras atividades ou aplicativos. Esses recursos incluem:
+
+<ul>
+ <li>Algumas opções de personalização de <a href="{@docRoot}training/system-ui/index.html">IU do sistema</a>
+ são desativadas. Por exemplo, os aplicativos não podem ocultar a barra de status
+ se não estiverem executando no modo de tela cheia.
+ </li>
+
+ <li>O sistema ignora as alterações no atributo <code><a href=
+ "{@docRoot}guide/topics/manifest/activity-element.html#screen"
+ >android:screenOrientation</a></code>.
+ </li>
+</ul>
+
+<h3 id="change-notification">Notificações e consultas de mudança no modo de várias janelas</h3>
+
+<p>
+ Os novos métodos a seguir foram adicionados à classe {@link android.app.Activity}
+ para oferecer suporte à exibição em várias janelas. Para obter detalhes sobre cada método, consulte a
+ <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência
+ do N Preview SDK</a>.
+</p>
+
+<dl>
+ <dt>
+ <code>Activity.isInMultiWindowMode()</code>
+ </dt>
+
+ <dd>
+ Chame para descobrir se a atividade está no modo de várias janelas.
+ </dd>
+
+ <dt>
+ <code>Activity.isInPictureInPictureMode()</code>
+ </dt>
+
+ <dd>
+ Chame para descobrir se a atividade está no modo de imagem em imagem.
+
+ <p class="note">
+ <strong>Observação:</strong> o modo de imagem em imagem é um caso especial do
+ modo de várias janelas. Se <code>myActivity.isInPictureInPictureMode()</code>
+ retornar true, <code>myActivity.isInMultiWindowMode()</code> também
+ retornará true.
+ </p>
+ </dd>
+
+ <dt>
+ <code>Activity.onMultiWindowModeChanged()</code>
+ </dt>
+
+ <dd>
+ O sistema chama esse método sempre que a atividade entra ou sai do
+ modo de várias janelas. O sistema passará ao método o valor true se a
+ atividade entrar no modo de várias janelas e false se a atividade
+ sair do modo de várias janelas.
+ </dd>
+
+ <dt>
+ <code>Activity.onPictureInPictureModeChanged()</code>
+ </dt>
+
+ <dd>
+ O sistema chama esse método sempre que a atividade entra ou sai do
+ modo de imagem em imagem. O sistema passará ao método o valor true se
+ a atividade entrar no modo de várias janelas e false se a atividade
+ sair do modo de várias janelas.
+ </dd>
+</dl>
+
+<p>
+ Existem também versões de {@link android.app.Fragment} para cada um desses
+ métodos como, por exemplo, <code>Fragment.isInMultiWindowMode()</code>.
+</p>
+
+<h3 id="entering-pip">Entrar no modo de imagem em imagem</h3>
+
+<p>
+ Para colocar uma atividade no modo de imagem em imagem, chame o novo método
+ <code>Activity.enterPictureInPictureMode()</code>. Esse método não terá efeito se
+ o dispositivo não oferecer suporte ao modo de imagem em imagem. Para obter mais informações,
+ consulte a documentação do modo <a href="picture-in-picture.html">imagem em imagem</a>.
+</p>
+
+<h3 id="launch">Iniciar novas atividades no modo de várias janelas</h3>
+
+<p>
+ Quando você iniciar uma nova atividade, poderá indicar ao sistema que a
+ a nova atividade deverá ser exibida adjacente à atual, se possível. Para fazer
+ isso, use o sinalizador
+ <code>Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT</code>. A passagem
+ desse sinalizador solicita o seguinte comportamento:
+</p>
+
+<ul>
+ <li>Se o dispositivo estiver no modo de tela dividida, o sistema tentará criar a
+ nova atividade ao lado da atividade que a iniciou para que as duas atividades
+ compartilhem a tela. Nem sempre o sistema conseguirá fazer isso, mas as
+ atividades ficarão adjacentes, se possível.
+ </li>
+
+ <li>Se o dispositivo não estiver no modo de tela dividida, esse sinalizador não terá efeito.
+ </li>
+</ul>
+
+<p>
+ Se um dispositivo estiver no modo de forma livre e você iniciar uma nova atividade, poderá
+ especificar as dimensões e a posição na tela da nova atividade chamando
+ <code>ActivityOptions.setLaunchBounds()</code>. Esse método não terá efeito se
+ o dispositivo não estiver no modo de várias janelas.
+</p>
+
+<p class="note">
+ <strong>Observação:</strong> se você iniciar uma atividade em uma pilha de tarefas, essa
+ atividade substituirá a atividade na tela, herdando todas as
+ propriedades de suporte a várias janelas. Se você quiser iniciar a nova atividade como janela
+ separada no modo de várias janelas, inicie essa atividade em uma nova pilha de tarefas.
+</p>
+
+<h3 id="dnd">Suporte a arrastar e soltar</h3>
+
+<p>
+ Os usuários podem <a href="{@docRoot}guide/topics/ui/drag-drop.html">arrastar e
+ soltar</a> dados de uma atividade para outra enquanto as duas atividades
+ compartilham a tela. (Anteriormente, os usuários podiam apenas arrastar e soltar dados em uma
+ única atividade.) Por esse motivo, se o aplicativo não tem a funcionalidade de arrastar e soltar,
+ pode ser uma boa ideia adicioná-la.
+</p>
+
+<p>
+ O N Preview SDK estende o pacote <a href="{@docRoot}reference/android/view/package-summary.html"><code>android.view</code></a>
+ para oferecer suporte ao recurso arrastar e soltar entre aplicativos. Para obter detalhes sobre os seguintes
+ métodos e classes, consulte a <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência
+ do Preview SDK</a>.
+</p>
+
+<dl>
+ <dt>
+ <code>android.view.DropPermissions</code>
+ </dt>
+
+ <dd>
+ Objeto token responsável por especificar as permissões concedidas ao aplicativo
+ que recebe uma ação de soltar.
+ </dd>
+
+ <dt>
+ <code>View.startDragAndDrop()</code>
+ </dt>
+
+ <dd>
+ Novo alias de {@link android.view.View#startDrag View.startDrag()}. Para
+ ativar o recurso de arrastar e soltar entre atividades, passe o novo sinalizador
+ <code>View.DRAG_FLAG_GLOBAL</code>. Se você precisar conceder permissões de URI à
+ atividade de destino, passe os novos sinalizadores,
+ <code>View.DRAG_FLAG_GLOBAL_URI_READ</code> ou
+ <code>View.DRAG_FLAG_GLOBAL_URI_WRITE</code>, conforme o caso.
+ </dd>
+
+ <dt>
+ <code>View.cancelDragAndDrop()</code>
+ </dt>
+
+ <dd>
+ Cancela uma operação de arrastar em andamento. Somente pode ser chamado
+ pelo aplicativo que originou a operação de arrastar.
+ </dd>
+
+ <dt>
+ <code>View.updateDragShadow()</code>
+ </dt>
+
+ <dd>
+ Substitui a sombra de arrastar para uma operação de arrastar em andamento. Somente
+ pode ser chamado pelo aplicativo que originou a operação de arrastar.
+ </dd>
+
+ <dt>
+ <code>Activity.requestDropPermissions()</code>
+ </dt>
+
+ <dd>
+ Solicita as permissões dos URIs de conteúdo passados com {@link
+ android.content.ClipData} contidos em {@link android.view.DragEvent}.
+ </dd>
+</dl>
+
+<h2 id="testing">Teste do suporte a várias janelas em seu aplicativo</h2>
+
+<p>
+ Atualizando ou não o seu aplicativo para o Android N, você deve
+ verificar como ele se comporta no modo de várias janelas, pois um usuário pode tentar iniciá-lo
+ no modo de várias janelas em um dispositivo executando o Android N.
+</p>
+
+<h3 id="configuring">Configuração de um dispositivo de teste</h3>
+
+<p>
+ Se você instalar o Android N em um dispositivo, o modo de tela dividida
+ será instalado automaticamente.
+</p>
+
+<h3 id="test-non-n">Se o aplicativo não foi compilado com o N Preview SDK</h3>
+
+<p>
+ Se você não compilou o aplicativo com o N Preview SDK e o usuário tentar usar
+ o aplicativo no modo de várias janelas, o sistema redimensionará obrigatoriamente o aplicativo, a menos que este
+ declare uma orientação fixa.
+</p>
+
+<p>
+ Se o aplicativo não declarar uma orientação fixa, inicie o aplicativo
+ em um dispositivo executando Android N e tente colocar o aplicativo no modo
+ de tela dividida. Verifique se a experiência do usuário é
+ aceitável quando o aplicativo é redimensionado obrigatoriamente.
+</p>
+
+<p>
+ Se o aplicativo declarar uma orientação fixa, você deverá tentar colocá-lo no
+ modo de várias janelas. Verifique se, ao fazê-lo, o aplicativo continua
+ no modo de tela cheia.
+</p>
+
+<h3 id="test-mw">Se você oferecer suporte ao modo de várias janelas</h3>
+
+<p>
+ Se você compilar o aplicativo com o N Preview SDK e não tiver desativado o
+ suporte a várias janelas, verifique o comportamento a seguir nos modos de tela dividida
+ e forma livre.
+</p>
+
+<ul>
+ <li>Inicie o aplicativo em modo de tela inteira e mude para o modo de várias janelas
+ pressionando longamente o botão Overview. Verifique se o aplicativo alterna corretamente.
+ </li>
+
+ <li>Inicie o aplicativo diretamente no modo de várias janelas e verifique se o aplicativo
+ é iniciado corretamente. Você pode iniciar um aplicativo no modo de várias telas pressionando o
+ botão Overview, pressionando longamente a barra de título do aplicativo e arrastando-o
+ para uma das áreas destacadas na tela.
+ </li>
+
+ <li>Redimensione o aplicativo no modo de tela dividida, arrastando a linha divisora.
+ Verifique se o aplicativo é redimensionado sem falhar e se os elementos de IU necessários
+ estão visíveis.
+ </li>
+
+ <li>Se você especificou dimensões mínimas para o aplicativo, tente redimensionar
+ o aplicativo abaixo dessas dimensões. Verifique se não é possível redimensionar o aplicativo
+ para um tamanho menor que o mínimo especificado.
+ </li>
+
+ <li>Em todos os testes, verifique se o desempenho do aplicativo é aceitável. Por
+ exemplo, verifique se há uma demora muito grande para atualizar a IU após o
+ redimensionamento do aplicativo.
+ </li>
+</ul>
+
+<h4 id="test-checklist">Lista de verificação de teste</h4>
+
+<p>
+ Para verificar o desempenho do aplicativo no modo de várias janelas, experimente as operações
+ a seguir. Você deve tentar essas operações nos modos de tela dividida e
+ várias telas, exceto onde houver instruções diferentes.
+</p>
+
+<ul>
+ <li>Entre e saia do modo de várias janelas.
+ </li>
+
+ <li>Alterne do seu aplicativo para outro e verifique se o seu aplicativo se comporta
+ corretamente enquanto visível, mas não ativo. Por exemplo, se o seu aplicativo estiver
+ reproduzindo vídeo, verifique se a reprodução não é interrompida quando o usuário
+ interage com outro aplicativo.
+ </li>
+
+ <li>No modo de tela dividida, tente mover a barra divisora para aumentar e reduzir
+ o tamanho do aplicativo. Tente essas operações nas configurações lado a lado
+ e um acima do outro. Verifique se o aplicativo não falha,
+ se a funcionalidade essencial fica visível e se a operação de redimensionamento não demora
+ demais.
+ </li>
+
+ <li>Execute várias operações de redimensionamento em rápida sucessão. Verifique se o
+ aplicativo não falha nem apresenta vazamento de memória. Para obter informações sobre como verificar o uso de memória
+ do aplicativo, consulte <a href="{@docRoot}tools/debugging/debugging-memory.html">
+ Investigação do uso de RAM</a>.
+ </li>
+
+ <li>Use o aplicativo normalmente em diversas configurações diferentes de janela e
+ verifique se o aplicativo se comporta corretamente. Verifique se o texto é legível e se os
+ elementos de IU não ficam pequenos demais para a interação.
+ </li>
+</ul>
+
+<h3 id="test-disabled-mw">Se você desativou o suporte a várias janelas</h3>
+
+<p>
+ Se você desativou o suporte a várias janelas definindo
+ <code>android:resizableActivity="false"</code>, inicie o aplicativo em
+ um dispositivo executando Android N e tente colocá-lo nos modos
+ de forma livre e tela dividida. Verifique se, ao fazê-lo, o aplicativo continua
+ no modo de tela cheia.
+</p>
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/_book.yaml b/docs/html-intl/intl/pt-br/preview/_book.yaml
deleted file mode 100644
index 8f75c9a..0000000
--- a/docs/html-intl/intl/pt-br/preview/_book.yaml
+++ /dev/null
@@ -1,342 +0,0 @@
-toc:
-- title: Visão geral do programa
- path: /preview/overview.html
- path_attributes:
- - name: es-lang
- value: Información general del programa
- - name: in-lang
- value: Ikhtisar Program
- - name: ja-lang
- value: プログラム概要
- - name: ko-lang
- value: 프로그램 개요
- - name: pt-br-lang
- value: Visão geral do programa
- - name: ru-lang
- value: Обзор программы
- - name: vi-lang
- value: Tổng quan về Chương trình
- - name: zh-cn-lang
- value: 计划概览
- - name: zh-tw-lang
- value: 程式總覽
-
-- title: Suporte e notas da versão
- path: /preview/support.html
-
-- title: Configuração do Preview
- path: /preview/setup-sdk.html
- path_attributes:
- - name: es-lang
- value: Configurar el SDK de la versión preliminar
- - name: in-lang
- value: Menyiapkan Preview
- - name: ja-lang
- value: Preview SDK のセットアップ
- - name: ko-lang
- value: 미리 보기 SDK 설정하기
- - name: pt-br-lang
- value: Configuração do Preview SDK
- - name: ru-lang
- value: Настройка пакета SDK Preview
- - name: vi-lang
- value: Kiểm thử trên Thiết bị
- - name: zh-cn-lang
- value: 设置预览版 SDK
- - name: zh-tw-lang
- value: 設定預覽版 SDK
-
-- title: Testar em um dispositivo
- path: /preview/download.html
- path_attributes:
- - name: es-lang
- value: Pruebe en un dispositivo
- - name: in-lang
- value: Menguji pada Perangkat
- - name: ja-lang
- value: デバイス上でテストする
- - name: ko-lang
- value: 기기에서 테스트
- - name: pt-br-lang
- value: Testar em um dispositivo
- - name: ru-lang
- value: Тестирование на устройстве
- - name: vi-lang
- value: Kiểm thử trên Thiết bị
- - name: zh-cn-lang
- value: 在设备上测试
- - name: zh-tw-lang
- value: 在裝置上測試
-
-- title: Mudanças de comportamento
- path: /preview/behavior-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: 行為變更
- section:
- - title: Otimizações em segundo plano
- path: /preview/features/background-optimization.html
- path_attributes:
- - name: es-lang
- value: Optimizaciones en segundo plano
- - name: in-lang
- value: Optimisasi Latar Belakang
- - name: ja-lang
- value: バックグラウンド処理の最適化
- - name: ko-lang
- value: 백그라운드 최적화
- - name: pt-br-lang
- value: Otimizações em segundo plano
- - name: ru-lang
- value: Оптимизация фоновых процессов
- - name: vi-lang
- value: Tối ưu hóa Chạy ngầm
- - name: zh-cn-lang
- value: 后台优化
- - name: zh-tw-lang
- value: 背景最佳化
- - title: Idioma e localidade
- path: /preview/features/multilingual-support.html
- path_attributes:
- - name: es-lang
- value: Idioma y configuración regional
- - name: in-lang
- value: Bahasa dan Lokal
- - name: ja-lang
- value: 言語とロケール
- - name: ko-lang
- value: 언어 및 로케일
- - name: pt-br-lang
- value: Idioma e localidade
- - name: ru-lang
- value: Язык и языковой стандарт
- - name: vi-lang
- value: Ngôn ngữ và Bản địa
- - name: zh-cn-lang
- value: 语言和区域设置
- - name: zh-tw-lang
- value: 語言和地區設定
-
-- title: Android N for Developers
- path: /preview/api-overview.html
- 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 總覽
- section:
- - title: Suporte a várias janelas
- path: /preview/features/multi-window.html
- path_attributes:
- - name: es-lang
- value: Compatibilidad con ventanas múltiples
- - name: in-lang
- value: Dukungan Multi-Jendela
- - name: ja-lang
- value: マルチ ウィンドウのサポート
- - name: ko-lang
- value: 다중 창 지원
- - name: pt-br-lang
- value: Suporte a várias janelas
- - name: ru-lang
- value: Поддержка многооконного режима
- - name: vi-lang
- value: Hỗ trợ đa cửa sổ
- - name: zh-cn-lang
- value: 多窗口支持
- - name: zh-tw-lang
- value: 多視窗支援
- - title: Notificações
- path: /preview/features/notification-updates.html
- path_attributes:
- - name: es-lang
- value: Notificaciones
- - name: in-lang
- value: Pemberitahuan
- - name: ja-lang
- value: 通知
- - name: ko-lang
- value: 알림
- - name: pt-br-lang
- value: Notificações
- - name: ru-lang
- value: Уведомления
- - name: vi-lang
- value: Thông báo
- - name: zh-cn-lang
- value: 通知
- - name: zh-tw-lang
- value: 通知
- - title: Economia de dados
- path: /preview/features/data-saver.html
- - title: Gravação para TV
- path: /preview/features/tv-recording-api.html
- path_attributes:
- - name: es-lang
- value: Grabación de TV
- - name: in-lang
- value: Perekaman TV
- - name: ja-lang
- value: TV の録画
- - name: ko-lang
- value: TV 녹화
- - name: pt-br-lang
- value: Gravação para TV
- - name: ru-lang
- value: Запись ТВ
- - name: vi-lang
- value: Ghi lại TV
- - name: zh-cn-lang
- value: TV 录制
- - name: zh-tw-lang
- value: 電視錄製
- - title: Configurações de segurança de rede
- path: /preview/features/security-config.html
- path_attributes:
- - name: es-lang
- value: Configuración de seguridad de la red
- - name: ja-lang
- value: ネットワーク セキュリティ構成
- - name: ko-lang
- value: 네트워크 보안 구성
- - name: pt-br-lang
- value: Configurações de segurança de rede
- - name: ru-lang
- value: Конфигурация сетевой безопасности
- - name: vi-lang
- value: Cấu hình Bảo mật mạng
- - name: zh-cn-lang
- value: 网络安全配置
- - name: zh-tw-lang
- value: 網路安全性設定
- - title: Suporte a ICU4J
- path: /preview/features/icu4j-framework.html
- path_attributes:
- - name: es-lang
- value: APIs de estrutura do Android para ICU4J
- - name: in-lang
- value: ICU4J Android Framework API
- - name: ja-lang
- value: ICU4J Android フレームワーク API
- - name: ko-lang
- value: ICU4J Android 프레임워크 API
- - name: pt-br-lang
- value: APIs de estrutura do Android para ICU4J
- - name: ru-lang
- value: API-интерфейсы ICU4J в платформе Android
- - name: vi-lang
- value: API Khuôn khổ Android ICU4J
- - name: zh-cn-lang
- value: ICU4J Android 框架 API
- - name: zh-tw-lang
- value: ICU4J Android 架構 API
- - title: Recursos de linguagem do Java 8
- path: /preview/j8-jack.html
- path_attributes:
- - name: es-lang
- value: Funciones del lenguaje Java 8
- - name: in-lang
- value: Fitur Bahasa Java 8
- - name: ja-lang
- value: Java 8 の機能
- - name: ko-lang
- value: Java 8 언어 기능
- - name: pt-br-lang
- value: Recursos de linguagem do Java 8
- - name: ru-lang
- value: Возможности языка Java 8
- - name: vi-lang
- value: Tính năng của Ngôn ngữ Java 8
- - name: zh-cn-lang
- value: Java 8 语言功能
- - name: zh-tw-lang
- value: Java 8 語言功能
- - title: Atualizações no Android for Work
- path: /preview/features/afw.html
- - title: Acesso a diretórios com escopo
- path: /preview/features/scoped-folder-access.html
- path_attributes:
- - name: es-lang
- value: Acceso a directorios determinados
- - name: ja-lang
- value: 特定のディレクトリへのアクセス
- - name: ko-lang
- value: 범위가 지정된 디렉터리 액세스
- - name: pt-br-lang
- value: Acesso a diretórios com escopo
- - name: ru-lang
- value: Доступ к выделенным каталогам
- - name: vi-lang
- value: Truy cập Thư mục theo Phạm vi
- - name: zh-cn-lang
- value: 作用域目录访问
- - name: zh-tw-lang
- value: 限定範圍目錄存取
-
-- title: Amostras
- path: /preview/samples.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: Contrato de licença
- path: /preview/license.html
- path_attributes:
- - name: es-lang
- value: Contrato de licencia
- - name: ja-lang
- value: 使用許諾契約
- - name: ko-lang
- value: 라이선스 계약
- - name: pt-br-lang
- value: Contrato de licença
- - name: ru-lang
- value: Лицензионное соглашение
- - name: zh-cn-lang
- value: 许可协议
- - name: zh-tw-lang
- value: 授權協議
diff --git a/docs/html-intl/intl/pt-br/preview/api-overview.jd b/docs/html-intl/intl/pt-br/preview/api-overview.jd
deleted file mode 100644
index d638e71..0000000
--- a/docs/html-intl/intl/pt-br/preview/api-overview.jd
+++ /dev/null
@@ -1,1039 +0,0 @@
-page.title=Android N for Developers
-meta.tags="preview", "androidn"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-apis_2x.png
-@jd:body
-
-
-
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>Principais recursos para desenvolvedores</h2>
- <ol>
- <ul style="list-style-type:none;">
- <li><a href="#multi-window_support">Suporte a várias janelas</a></li>
- <li><a href="#notification_enhancements">Notificações</a></li>
- <li><a href="#jit_aot">Compilação JIT/AOT</a></li>
- <li><a href="#quick_path_to_app_install">Caminho rápido para a instalação de aplicativos</a></li>
- <li><a href="#doze_on_the_go">Modo soneca em movimento</a></li>
- <li><a href="#background_optimizations">Otimizações em segundo plano</a></li>
- <li><a href="#data_saver">Economia de dados</a></li>
- <li><a href="#vulkan">Vulkan API</a></li>
- <li><a href="#tile_api">Quick Settings Tile API</a></li>
- <li><a href="#number-blocking">Bloqueio de número</a></li>
- <li><a href="#call_screening">Triagem de chamadas</a></li>
- <li><a href="#multi-locale_languages">Localidades e idiomas</a></li>
- <li><a href="#emoji">Novos emoticons</a></li>
- <li><a href="#icu4">ICU4J APIs no Android</a></li>
- <li><a href="#gles_32">OpenGL ES 3.2 API</a></li>
- <li><a href="#android_tv_recording">Gravação do Android TV</a></li>
- <li><a href="#android_for_work">Android for Work</a></li>
- <li><a href="#accessibility_enhancements">Acessibilidade</a></li>
- <li><a href="#direct_boot">Inicialização direta</a></li>
- <li><a href="#key_attestation">Confirmação de chaves</a></li>
- <li><a href="#network_security_config">Configuração de segurança de rede</a></li>
- <li><a href="#default_trusted_ca">CA confiável padrão</a></li>
- <li><a href="#apk_signature_v2">Esquema de assinatura de APK v2</a></li>
- <li><a href="#scoped_directory_access">Acesso a diretórios com escopo</a></li>
- <li><a href="#keyboard_shortcuts_helper">Auxiliar de atalhos de teclado</a></li>
- <li><a href="#sustained_performance_api">API de desempenho sustentado</a></li>
- <li><a href="#vr">Suporte a RV</a></li>
- <li><a href="#print_svc">Melhorias nos serviços de impressão</a></li>
- <li><a href="#virtual_files">Arquivos virtuais</a></li>
- <li><a href="#framemetrics_api">FrameMetricsListener API</a></li>
- </ol>
-</div>
-</div>
-
-
-
-<p>O Android N ainda está em desenvolvimento ativo, mas agora você já pode testá-lo
-como parte do N Developer Preview. As seções a seguir destacam alguns dos
-novos recursos para desenvolvedores. </p>
-
-<p>
- Não deixe de conferir as <a href="{@docRoot}preview/behavior-changes.html">Mudanças de comportamento</a> para saber mais sobre as
- áreas onde as alterações de plataforma podem afetar os aplicativos, examine os
- guias para desenvolvedores para saber mais sobre os principais recursos e faça o download da <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência da API</a> para obter detalhes sobre as
- novas APIs.
-</p>
-
-<h2 id="multi-window_support">Suporte a várias janelas</h2>
-
-
-<p>No Android N, introduzimos um recurso de multitarefa novo e muito solicitado
-na plataforma — o suporte a várias janelas. </p>
-
- <p>Agora os usuários podem abrir dois aplicativos na tela ao mesmo tempo. </p>
- <ul>
- <li>Em celulares e tablets
-executando o Android N, os usuários agora podem executar dois aplicativos lado a lado ou
-um acima do outro em modo de tela dividida. Os usuários podem redimensionar os aplicativos arrastando
-o divisor entre eles. </li>
-
-<li>Em dispositivos Android TV, os aplicativos podem assumir o <a href="{@docRoot}preview/features/picture-in-picture.html">modo imagem em
-imagem</a>, o que permite que continuem a exibir conteúdo enquanto o usuário navega ou
-interage com outros aplicativos.</li>
- </ul>
-
-<div class="col-4of10">
-<img src="{@docRoot}preview/images/mw-portrait.png" alt="" style="height:460px;padding-left:1em;" id="img-split-screen" />
-<p class="img-caption">
- <strong>Figura 1.</strong> Aplicativos executando em modo de tela dividida.
-</p>
-
- </div>
-
-<p>O suporte a várias janelas oferece novas formas de envolver os usuários,
-particularmente em tablets e outros dispositivos com telas maiores. Você pode até ativar o recurso de arrastar e soltar
-no aplicativo para permitir que os usuários arrastem conteúdo de ou para o aplicativo — uma ótima
-maneira de aprimorar a experiência do usuário. </p>
-
-<p>É muito fácil adicionar suporte a várias janelas a seu aplicativo e configurar como ele
-lida com exibição em várias janelas. Por exemplo, você pode especificar as dimensões
-mínimas permitidas para sua atividade, evitando que os usuários redimensionem a atividade para abaixo
-deste tamanho. Você também pode desativar a exibição de várias janelas para o aplicativo, o que
- garante que o sistema só mostrará o aplicativo em modo de tela inteira.</p>
-
-<p>
- Para obter mais informações, consulte a documentação para desenvolvedores de <a href="{@docRoot}preview/features/multi-window.html">Suporte a várias janelas</a>
-.
-</p>
-
-<h2 id="notification_enhancements">Aprimoramentos de notificações</h2>
-
-<p>Reformulamos as notificações no Android N para facilitar e agilizar o
-uso. Entre as alterações estão:</p>
-
-<ul>
- <li>
- <strong>Atualizações de modelos</strong>: Estamos atualizando os modelos de notificação para
- colocar mais ênfase na imagem do herói e do avatar. Os desenvolvedores poderão
- aproveitar os novos modelos com ajustes mínimos no código.
- </li>
-
- <li>
- <strong>Personalização de estilo de mensagem</strong>: Você pode personalizar mais
-rótulos de interface de usuário associados às suas notificações usando a classe
-<code>MessageStyle</code>. É possível configurar a mensagem, o título da conversa
-e a visualização de conteúdo.
- </li>
-
- <li>
- <strong>Notificações empacotadas</strong>: O sistema pode agrupar mensagens
- por tópico de mensagem, por exemplo, e exibir o grupo. Um usuário pode
- executar ações, como Dismiss ou Archive, nessa exibição de grupo. Se você
- já implementou notificações para o Android Wear, está familiarizado com
- esse modelo.
- </li>
-
- <li>
- <strong>Resposta direta</strong>: Para aplicativos de comunicação em tempo real, o
- sistema Android oferece suporte a respostas em linha para que os usuários possam responder rapidamente a
- mensagens SMS ou de texto diretamente dentro da interface de notificação.
- </li>
-
- <li>
- <strong>Visualizações personalizadas</strong>: Duas APIs novas permitem utilizar decorações
- do sistema, como cabeçalhos e ações de notificação, durante o uso de visualizações
- personalizadas em notificações.
- </li>
-</ul>
-
-<div class="col-4of12">
- <img src="{@docRoot}preview/images/notifications-1.png" alt="" style="padding:.5em;max-width:226px">
-</div>
-
-<div class="col-4of12">
- <img src="{@docRoot}preview/images/notifications-3.png" alt="" style="padding:.5em;max-width:226px">
-</div>
-
-<div class="col-4of12">
- <img src="{@docRoot}preview/images/notifications-2.png" alt="" style="padding:.5em;max-width:226px">
-</div>
-
-
-<p class="img-caption">
- <strong>Figura 2.</strong> Notificações empacotadas e resposta direta.
-</p>
-
-<p>Para saber como implementar os novos recursos, consulte o
-guia <a href="{@docRoot}preview/features/notification-updates.html">Notificações</a>
-.</p>
-
-
-
-<h2 id="jit_aot">Compilação JIT/AOT orientada a perfil</h2>
-
-<p>No Android N, adicionamos um compilador Just in Time (JIT) com perfis de código para
-ART, o que permite aprimorar constantemente o desempenho de aplicativos Android durante a
-execução. O compilador JIT complementa o compilador atual Ahead of Time (AOT)
- do ART e ajuda a aprimorar o desempenho em tempo de execução, economizar espaço de armazenamento e acelerar atualizações
- de aplicativos e de sistema.</p>
-
-<p>A compilação orientada a perfil permite que o ART gerencie a compilação AOT/JIT de cada aplicativo
-de acordo com o uso real e com as condições no dispositivo. Por
-exemplo, o ART mantém um perfil dos principais métodos do aplicativo e pode pré-compilar
-e armazenar esses métodos em cache para obter o melhor desempenho. As outras partes do aplicativo não são
-compiladas até que sejam realmente utilizadas.</p>
-
-<p>Além de aprimorar o desempenho para as principais partes do aplicativo, a compilação
-ajuda a reduzir o uso geral de recursos de RAM, incluindo os binários
-associados. Esse recurso é particularmente importante em dispositivos com pouca memória.</p>
-
-<p>O ART gerencia a compilação orientada a perfil de forma a minimizar o impacto sobre a
-bateria do dispositivo. A pré-compilação é executada apenas quando o dispositivo está ocioso e
-com a bateria sendo carregada, economizando tempo e bateria com a execução antecipada dessa tarefa.</p>
-
-<h2 id="quick_path_to_app_install">Caminho rápido para a instalação de aplicativos</h2>
-
-<p>Um dos benefícios mais tangíveis do compilador JIT do ART é a velocidade de instalação dos
-aplicativos e das atualizações do sistema. Até mesmo aplicativos grandes, que exigiam vários minutos para
-otimização e instalação no Android 6.0, podem agora ser instalados em
-segundos. As atualizações de sistema também ficaram mais rápidas, pois não existe mais a etapa de otimização. </p>
-
-<h2 id="doze_on_the_go">Modo soneca em movimento...</h2>
-
-<p>O Android 6.0 introduziu o modo soneca, um modo de sistema que economiza bateria adiando
-atividades de CPU e rede dos aplicativos quando o dispositivo está ocioso, como
-quando está em uma mesa ou gaveta. </p>
-
-<p>Agora, no Android N, o modo soneca foi aprimorado e economiza bateria quando em movimento.
-Sempre que a tela ficar desativada por um período e o dispositivo ficar desativado,
-o modo soneca aplicará um subconjunto das restrições familiares de CPU e rede aos aplicativos.
-Isso significa que os usuários podem economizar bateria transportando os dispositivos no
-bolso.</p>
-
-
-<img src="/preview/images/doze-diagram-1.png" alt="" id="figure1" />
-<p class="img-caption">
- <strong>Figura 3.</strong> O modo soneca agora aplica
- restrições para aumentar a vida útil da bateria mesmo quando o dispositivo não está estacionário.
-</p>
-
-
-<p>Pouco depois de a tela ser desativada com o dispositivo alimentado pela bateria, o modo soneca
-restringe o acesso de rede e adia trabalhos e sincronizações. Durante breves janelas de
-manutenção, os aplicativos podem acessar a rede e todos os
-trabalhos/sincronizações adiados são executados. A ativação da tela ou do dispositivo
-encerra o modo soneca.</p>
-
-<p>Quando o dispositivo voltar a ficar estacionário, com a tela desativada e alimentado por bateria por um
-período, o modo soneca aplicará as restrições completas de CPU e rede em {@link
-android.os.PowerManager.WakeLock}, alarmes {@link android.app.AlarmManager} e
-verificações de GPS/Wi-Fi.</p>
-
-<p>As práticas recomendadas para adaptar o aplicativo ao modo soneca são as mesmas para
-dispositivos estacionários ou em movimento. Portanto, se você já atualizou o aplicativo para
-processar o modo soneca corretamente, está pronto. Caso contrário, comece a <a href="{@docRoot}training/monitoring-device-state/doze-standby.html#assessing_your_app">adaptar
- o aplicativo para o modo soneca</a> agora.</p>
-
-<h2 id="background_optimizations">Project Svelte: Otimizações em segundo plano</h2>
-
-<p>O Project Svelte é um esforço contínuo para minimizar o uso de RAM pelo sistema e pelos aplicativos
-nos dispositivos Android existentes no ecossistema. No Android N, o Project
-Svelte se concentra em otimizar a forma de execução dos aplicativos em segundo plano. </p>
-
-<p>O processamento em segundo plano é parte essencial da maioria dos aplicativos. Quando executado corretamente, a experiência
-do usuário pode ficar incrível — imediata, rápida e sensível ao contexto.
-Quando executado incorretamente, o processamento em segundo plano pode consumir desnecessariamente RAM (e
-bateria) e afetar o desempenho do sistema para os outros aplicativos. </p>
-
-<p>Desde o Android 5.0, {@link android.app.job.JobScheduler} é a forma
-preferencial para execução de trabalho em segundo plano de uma maneira que beneficia
-os usuários. Os aplicativos podem agendar trabalhos e permitir que o sistema execute otimizações com base em
-condições de memória, energia e conectividade. O JobScheduler oferece controle e
-simplicidade, e queremos que seja usado por todos os aplicativos. </p>
-
-<p>
- Outra boa opção é o <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
- <code>GCMNetworkManager</code></a>, parte do Google Play Services, que
- oferece um agendamento de trabalhos similar, compatível com versões legadas do
- Android.
-</p>
-
-<p>Continuamos a expandir o <code>JobScheduler</code> e o
-<code>GCMNetworkManager</code> para atender a mais
-casos de uso — por exemplo, no Android N, você já pode agendar trabalhos
-em segundo plano de acordo com mudanças nos provedores de conteúdo. Ao mesmo tempo, começamos a
-substituir alguns padrões mais antigos que podem reduzir o desempenho do sistema,
-particularmente em dispositivos com pouca memória.</p>
-
-<p>No Android N, estamos removendo três transmissões implícitas de uso comum —
-{@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, {@link
-android.hardware.Camera#ACTION_NEW_PICTURE} e {@link
- android.hardware.Camera#ACTION_NEW_VIDEO} —, pois podem despertar simultaneamente
-processos em segundo plano de vários aplicativos, aumentando o consumo de memória e bateria. Se
-o seu aplicativo receber essas transmissões, aproveite o N Developer Preview para
- migrar para o <code>JobScheduler</code> e as APIs relacionadas. </p>
-
-<p>
- Consulte a documentação de <a href="{@docRoot}preview/features/background-optimization.html">Otimizações
-em segundo plano</a> para obter mais detalhes.
-</p>
-
-
-<h2 id="data_saver">Economia de dados</h2>
-
-<div class="col-5of12" style="margin-right:1.5em;">
-<img src="{@docRoot}preview/images/datasaver.png" style="border:2px solid #ddd">
-
-<p class="img-caption" style="padding-right:2em;">
- <strong>Figura 4.</strong> Economia de dados em Settings.
-</p>
- </div>
-
-<p>Normalmente, o custo de um plano de dados de celular ao longo da vida útil do dispositivo móvel
-excede o custo do próprio dispositivo. Para muitos usuários, os dados de celular
-são um recurso caro que querem economizar. </p>
-
-<p>O Android N introduz o modo de Economia de dados, um novo serviço do sistema que ajuda a reduzir
-o uso de dados de celular pelos aplicativos em situações de roaming, perto do final do ciclo de cobrança
-ou em pacotes de dados pré-pagos pequenos. A Economia de dados permite que os usuários controlem o
-uso de dados de celular e possibilita que os desenvolvedores ofereçam serviços mais eficientes quando o modo de Economia
-de dados estiver ativado. </p>
-
-<p>Quando um usuário ativa a Economia de dados em <strong>Settings</strong> e o dispositivo está
-em uma rede tarifada, o sistema bloqueia o uso de dados em segundo plano e avisa aos aplicativos
-para reduzir o uso de dados no primeiro plano sempre que possível — como, por exemplo, limitar a
-taxa de bits de streaming, reduzir a qualidade de imagens, adiar o armazenamento prévio otimista em cache
-e assim por diante. Os usuários podem autorizar aplicativos específicos a usar dados tarifados
-em segundo plano, mesmo com a Economia de dados ativada.</p>
-
-<p>O Android N estende o {@link android.net.ConnectivityManager} para oferecer aos aplicativos uma
-forma de <a href="{@docRoot}preview/features/data-saver.html#status">recuperar as
-preferências do usuário para a Economia de dados</a> e <a href="{@docRoot}preview/features/data-saver.html#monitor-changes">monitorar
-as mudanças de preferências</a>. Todos os aplicativos devem verificar se o usuário ativou a Economia
-de dados e tentar limitar o uso de dados em primeiro e segundo plano.</p>
-
-
-<h2 id="vulkan">Vulkan API</h2>
-
-<p>
- O Android N integra o <a href="http://www.khronos.org/vulkan" class="external-link">Vulkan™</a>, uma nova API de renderização 3D, à plataforma. Como o
- <a href="https://www.khronos.org/opengles/" class="external-link">OpenGL™
- ES</a>, o Vulkan é um padrão aberto para gráficos e renderização 3D mantido
- pelo Khronos Group.
-</p>
-
-<p>
- O Vulkan foi projetado desde o início para minimizar sobrecargas na CPU do driver
- e permitir que seu aplicativo controle a operação de GPU de forma mais direta. O Vulkan
- também oferece melhor paralelização ao permitir que vários encadeamento realizem
- trabalhos como a construção de buffer de comando de uma só vez.
-</p>
-
-<p>
- As ferramentas de desenvolvimento e bibliotecas do Vulkan se combinam ao Android NDK. Elas
- incluem:
-</p>
-
-<ul>
- <li>Cabeçalhos
- </li>
-
- <li>Camadas de validação (bibliotecas de depuração)
- </li>
-
- <li>Compilador de sombreadores SPIR-V
- </li>
-
- <li>Biblioteca de compilação de sombreadores SPIR-V em tempo de execução
- </li>
-</ul>
-
-<p>
- O Vulkan só está disponível para aplicativos em dispositivos com hardware com capacidade para Vulkan,
- como Nexus 5X, Nexus 6P e Nexus Player Estamos trabalhando em estreita cooperação com nossos
- parceiros para oferecer o Vulkan em mais dispositivos assim que possível.
-</p>
-
-<p>
- Para obter mais informações, consulte a <a href="{@docRoot}ndk/guides/graphics/index.html">documentação da API</a>.
-</p>
-
-<h2 id="tile_api">Quick Settings Tile API</h2>
-
-
-<div style="float:right;max-width:320px">
-<img src="{@docRoot}preview/images/quicksettings.png" style="padding-left:1.5em;">
-
-<p class="img-caption" style="padding-left:2em;">
- <strong>Figura 5.</strong> Blocos de Configurações rápidas na aba de notificações.
-</p>
-
-
- </div><p>As Configurações rápidas são uma forma popular e simples de expor as principais configurações e ações
-diretamente na aba de notificações. No Android N, ampliamos o escopo das
-Configurações rápidas para aumentar ainda mais a utilidade e a conveniência. </p>
-
-<p>Adicionamos mais espaço para os blocos de Configurações rápidas, que os usuários podem
-acessar em uma área de exibição paginada deslizando à direita ou à esquerda. Além disso,
-permitimos que os usuários controlem quais blocos de Configurações rápidas são exibidos, bem como o local
-em que são exibidos — para adicionar ou mover blocos, os usuários simplesmente arrastam e soltam os blocos. </p>
-
-<p>Para desenvolvedores, o Android N também adiciona uma API nova que permite definir os próprios
-blocos de Configurações rápidas para que os usuários possam acessar facilmente os principais controles e ações do seu aplicativo.</p>
-
-<p>
- Os blocos de Configurações rápidas estão reservados para controles ou ações que são
- urgentemente necessários ou frequentemente usados e não devem ser usados como atalhos para
- iniciar aplicativos.
-</p>
-
-<p>
- Após definir os blocos, você pode disponibilizá-los aos usuários, que por sua vez podem adicioná-los
- às Configurações rápidas usando o recurso de arrastar e soltar.
-</p>
-
-<p>
- Para obter informações sobre a criação de um bloco de aplicativo, consulte a documentação para
- <code>android.service.quicksettings.Tile</code> na <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência da API</a>, disponível para download.
-</p>
-
-
-
-<h2 id="number-blocking">Bloqueio de número</h2>
-
-<p>O Android N agora oferece suporte a bloqueio de números na plataforma e disponibiliza uma
-API de estrutura para permitir que provedores de serviço mantenham uma lista de números bloqueados. O
- aplicativo padrão de SMS, o aplicativo padrão de telefone e os aplicativos de provedor podem ler e gravar
-a lista de números bloqueados. A lista não está acessível para outros aplicativos.</p>
-
-<p>Ao oferecer o bloqueio de número como recurso padrão da plataforma, o Android oferece
-uma forma consistente de bloqueio de números em uma grande variedade de
-dispositivos. Alguns benefícios que podem ser aproveitados pelos aplicativos são:</p>
-
-<ul>
- <li> Números bloqueados para chamadas também são bloqueados para mensagens de texto
- <li> Números bloqueados podem persistir entre várias redefinições e dispositivos por meio do
-recurso Backup e restauração
- <li> Vários aplicativos podem usar a mesma lista de números bloqueados
-</ul>
-
-<p>Além disso, a integração de aplicativos da operadora por meio do Android significa que as operadoras podem
-ler a lista de números bloqueados no dispositivo e executar um bloqueio do lado do servidor
-para o usuário, impedindo que chamadas e textos indesejados cheguem a ele
-por qualquer meio, como terminais de VOIP ou encaminhamento de telefones.</p>
-
-<p>
- Para obter mais informações, consulte <code>android.provider.BlockedNumberContract</code>
- na <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência
-da API</a>, disponível para download.
-</p>
-
-<h2 id="call_screening">Triagem de chamadas</h2>
-
-<p>
- O Android N permite que o aplicativo de telefone padrão faça a triagem das chamadas recebidas. O aplicativo
- de telefone faz isso implementando o novo <code>CallScreeningService</code>,
- que permite a execução de diversas ações com base nos
- {@link android.telecom.Call.Details Call.Details} da chamada recebida, como:
-</p>
-
-<ul>
- <li> Rejeitar a chamada recebida
- <li> Não incluir a chamada no registro de chamadas
- <li> Não mostrar ao usuário a notificação da chamada
-</ul>
-
-<p>
- Para obter mais informações, consulte <code>android.telecom.CallScreeningService</code>
- na <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência
-da API</a>, disponível para download.
-</p>
-
-
-<h2 id="multi-locale_languages">Suporte a diversas localidades, mais idiomas</h2>
-
-
-<p>O Android N agora permite que os usuários selecionem <strong>diversas localidades</strong> em Settings
-para oferecer melhor suporte a casos de uso bilíngue. Os aplicativos podem usar
-uma API nova para obter as localidades selecionadas pelo usuário e oferecer
-experiências de usuário mais sofisticadas para usuários com diversas localidades — como, por exemplo, mostrar resultados de pesquisa em
-diversos idiomas e não oferecer a tradução de páginas da web que usam
-um idioma conhecido pelo usuário.</p>
-
-<p>Juntamente com o suporte a várias localidades, o Android N também amplia o número de idiomas
-disponíveis aos usuários. Ele oferece mais de 25 variantes para cada um dos idiomas
-mais comuns, como inglês, espanhol, francês e árabe. Além disso, adiciona suporte parcial
-a mais de 100 novos idiomas.</p>
-
-<p>Os aplicativos podem obter a lista de localidades definida pelo usuário chamando
-<code>LocaleList.GetDefault()</code>. Para oferecer suporte ao maior número de localidades, o Android N está
-alterando a forma como resolve recursos. Não deixe de testar e verificar se seus aplicativos
-funcionam da forma esperada com a nova lógica de resolução de recursos.</p>
-
-<p>Para saber mais sobre o novo comportamento de resolução de recursos e sobre as práticas recomendadas que você deve
-seguir, consulte <a href="{@docRoot}preview/features/multilingual-support.html">Suporte a vários idiomas</a>.</p>
-
-
-<h2 id="emoji">Novos emoticons</h2>
-
-<p>
- O Android N apresenta emoticons adicionais e recursos relacionados, tais como
- emoticons com diferentes tons de pele e suporte a seletores
- de variação. Se o seu aplicativo suporta emoticons,
- siga as diretrizes abaixo para aproveitar estes recursos próprios para emoticons.
-</p>
-
-<ul>
- <li>
- <strong>Verifique se o dispositivo contém um emoticon antes de inseri-lo.</strong>
- Para conferir quais emoticons estão presentes
- na fonte do sistema, use o método {@link android.graphics.Paint#hasGlyph(String)}.
- </li>
- <li>
- <strong>Verifique se um emoticon suporta seletores de variação.</strong>
- Os seletores de variação permitem que você
- apresente determinados emoticons em cores ou preto e branco.
- Em dispositivos móveis, os aplicativos devem representar os emoticons em cores, e não em preto e branco. Porém,
- se o seu aplicativo exibe emoticons em linha com o texto, ele deve usar a variação preto e branco.
- Para determinar se um emoticon tem variação ou não, use o seletor de variação.
- Para obter uma lista completa de caracteres com variações, consulte a seção
- <em>sequências de variação de emoticon</em> da
- <a class="external-link" href="http://www.unicode.org/Public/9.0.0/ucd/StandardizedVariants-9.0.0d1.txt">
- documentação sobre variações em Unicode</a>.
- </li>
- <li>
- <strong>Verifique se um emoticon suporta tons de pele.</strong> O Android N permite que os usuários modifiquem o
- tom de pele renderizado de emoticons como quiserem. Os aplicativos de teclado devem oferecer indicações
- visuais para emoticons que tenham diversos tons de pele e permitir que os usuários
- selecionem o tom preferido. Para determinar quais emoticons do sistema têm
- modificadores de tom de pele, use o método {@link android.graphics.Paint#hasGlyph(String)}
-. Você pode determinar quais emoticons usam tons de pele lendo a
- <a class="external-link" href="http://unicode.org/emoji/charts/full-emoji-list.html">
-documentação do Unicode</a>.
- </li>
-</ul>
-
-
-<h2 id="icu4">ICU4J APIs no Android</h2>
-
-<p>
- Agora, o Android N oferece um subconjunto de <a href="http://site.icu-project.org/">ICU4J</a> APIs na estrutura do Android
- no pacote <code>android.icu</code>. A migração é fácil e geralmente exige
-apenas a mudança do namespace <code>com.java.icu</code> para
-<code>android.icu</code>. Se você já usa um pacote ICU4J nos seus
- aplicativos, a mudança para as APIs do <code>android.icu</code> disponibilizadas na estrutura do
- Android pode reduzir substancialmente o tamanho do APK.
-</p>
-
-<p>
- Para saber mais sobre as APIs ICU4J no Android, consulte <a href="{@docRoot}preview/features/icu4j-framework.html">Suporte ao ICU4J</a>.
-</p>
-
-
-
-<h2 id="gles_32">OpenGL™ ES 3.2 API</h2>
-
-<p>O Android N adiciona interfaces de estrutura e suporte de plataforma ao OpenGL ES 3.2, incluindo:</p>
-
-<ul>
- <li> Todas as extensões do <a class="external-link" href="https://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">
-Pacote de extensão Android</a></a> (AEP), exceto <code>EXT_texture_sRGB_decode</code>.
- <li> Framebuffers de ponto flutuante para HDR e sombreamento adiado.
- <li> Chamadas de desenho a BaseVertex para possibilitar melhor organização em lotes e transmissão.
- <li> Controle robusto de acesso a buffers para reduzir a sobrecarga do WebGL.
-</ul>
-
-<p>A API da estrutura do OpenGL ES 3.2 no Android N é fornecida pela classe
-<code>GLES32</code>. Ao usar o OpenGL ES 3.2, não deixe de declarar o
-requisito no arquivo manifesto usando o rótulo <code><uses-feature></code> e o
-atributo <code>android:glEsVersion</code>. </p>
-
-<p>Para obter mais informações sobre como usar o OpenGL ES, incluindo como verificar a versão do
-OpenGL ES compatível do dispositivo no tempo de execução, consulte o <a href="{@docRoot}guide/topics/graphics/opengl.html">guia da OpenGL ES API</a>.</p>
-
-
-<h2 id="android_tv_recording">Gravação do Android TV</h2>
-
-<p>O Android N adiciona a capacidade de gravar e reproduzir conteúdo de serviços de entrada
-do Android TV por meio de novas APIs de gravação. Criados usando as APIs atuais de time-shifting,
-os serviços de entrada de TV podem controlar quais dados de canal são gravados e como
-as sessões gravadas são salvas, bem como gerenciar a interação do usuário com o conteúdo gravado. </p>
-
-<p>Para obter mais informações, consulte <a href="{@docRoot}preview/features/tv-recording-api.html">Android TV Recording APIs</a>.</p>
-
-
-<h2 id="android_for_work">Android for Work</h2>
-
-<p>O Android for Work adiciona vários recursos e APIs para dispositivos que executam o Android N.
-Veja a seguir alguns destaques — para obter uma lista completa das mudanças, consulte
-<a href="{@docRoot}preview/features/afw.html">atualizações no Android for Work</a>.</p>
-
-<h3 id="work_profile_security_challenge">Desafio de segurança de perfil de trabalho </h3>
-
-<p>
- Donos de perfis direcionados ao N SDK
- podem especificar um desafio de segurança em separado para aplicativos em execução no
- perfil de trabalho. O desafio de trabalho é exibido quando um usuário tenta abrir
- qualquer aplicativo de trabalho. O preenchimento correto do desafio de segurança desbloqueia e,
- se necessário, descriptografa o perfil de trabalho. Para donos de perfil,
- <code>ACTION_SET_NEW_PASSWORD</code> solicita que o usuário defina um desafio
- de trabalho e <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> um
- bloqueio de dispositivo.
-</p>
-
-<p>
- Os donos de perfil também podem definir políticas de senha distintas para o desafio de trabalho
- (como o comprimento mínimo do PIN ou se é permitido usar a impressão digital
-para desbloquear o perfil) usando<code>setPasswordQuality()</code>,
-<code>setPasswordMinimumLength()</code> e métodos relacionados. O dono
- de perfil também pode definir o bloqueio de dispositivo usando a instância de <code>DevicePolicyManager</code>
- retornada pelo novo método <code>getParentProfileInstance()</code>.
- Além disso, donos de perfil podem personalizar a tela de credenciais do
- desafio de trabalho usando os novos métodos <code>setOrganizationColor()</code> e
- <code>setOrganizationName()</code>.
-</p>
-<h3 id="turn_off_work">Desativar o trabalho </h3>
-
-<p>Os usuários podem alternar o modo de trabalho em dispositivos com um perfil de trabalho. Quando o modo de trabalho está
-desativado, o usuário gerenciado é encerrado temporariamente, o que desativa
-os aplicativos, a sincronização em segundo plano e as notificações do perfil de trabalho. Isso inclui o aplicativo do
-dono do perfil. Quando o modo de trabalho está desativado, o sistema exibe um ícone de status persistente
- para lembrar ao usuário que não é possível iniciar aplicativos de trabalho. A tela de início
-indica que os aplicativos e widgets de trabalho não podem ser acessados. </p>
-
-<h3 id="always_on_vpn">Always on VPN </h3>
-
-<p>Os donos de dispositivo e perfil podem garantir que os aplicativos de trabalho se conectem sempre
-por meio de uma VPN especificada. O sistema inicia automaticamente a VPN após a
- inicialização do dispositivo.</p>
-
-<p>
- Os novos métodos <code>DevicePolicyManager</code> são
- <code>setAlwaysOnVpnPackage()</code> e
- <code>getAlwaysOnVpnPackage()</code>.
-</p>
-
-<p>Como os serviços de VPN podem ser vinculados diretamente pelo sistema sem interação com
-aplicativos, os clientes de VPN precisam processar novos pontos de entrada para o Always on VPN. Da
- mesma forma que antes, os serviços são indicados ao sistema por um filtro de intenção
- correspondente à ação <code>android.net.VpnService</code>. </p>
-
-<p>
- Além disso, os usuários podem definir manualmente clientes do Always on VPN que implementam
- métodos <code>VPNService</code> no usuário principal usando
- <strong>Settings>More>Vpn</strong>.
-</p>
-
-<h3 id="custom_provisioning">Provisionamento personalizado</h3>
-
-<p>
- Um aplicativo pode personalizar os fluxos de provisionamento do dono do perfil e do dispositivo
- com cores e logos corporativos.
- <code>DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR</code> personaliza
- a cor do fluxo. <code>DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI</code>
- personaliza o fluxo com um logo corporativo.
-</p>
-
-<h2 id="accessibility_enhancements">Aprimoramentos na acessibilidade</h2>
-
-<p>O Android N agora oferece Configurações de visão diretamente na tela de boas-vindas na instalação
-de novos dispositivos. Isso permite que os usuários descubram e configurem recursos de acessibilidade
- em seus dispositivos de forma muito mais fácil, incluindo gesto de ampliação, tamanho
-da fonte, tamanho da tela e TalkBack. </p>
-
-<p>Com o posicionamento mais proeminente desses recursos de acessibilidade, os usuários
-ficarão mais propensos a experimentar o aplicativo com os recursos ativados. Não deixe de testar antecipadamente os aplicativos
-com essas configurações ativadas. Você pode ativá-las em Settings >
-Accessibility.</p>
-
-<p>Além disso, os serviços de acessibilidade no Android N podem ajudar usuários com deficiências
-motoras a tocar na tela. A nova API permite criar serviços com recursos
-como acompanhamento de face, acompanhamento de olho e varredura de pontos, entre outros, para atender
-às necessidades desses usuários.</p>
-
-<p>Para obter mais informações, consulte <code>android.accessibilityservice.GestureDescription</code>
- na <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência da API</a>, disponível para download.</p>
-
-
-<h2 id="direct_boot">Inicialização direta</h2>
-
-<p>A inicialização direta reduz os tempos de inicialização dos dispositivos e permite que aplicativos
-registrados tenham funcionalidade limitada, mesmo após uma reinicialização inesperada.
-Por exemplo, se um dispositivo criptografado reinicializar durante o sono do usuário,
-alarmes registrados, mensagens e chamadas recebidas podem agora continuar notificando
-o usuário normalmente. Isso também significa que serviços de acessibilidade podem ser
-disponibilizados imediatamente após um reinício.</p>
-
-<p>A inicialização direita aproveita a criptografia baseada em arquivo do Android N
-para ativar políticas de criptografia detalhadas para dados de sistema e aplicativos.
-O sistema usa um armazenamento criptografado pelo dispositivo para determinados dados de sistema e dados
-de aplicativos registrados explicitamente. Por padrão, um armazenamento criptografado por credencial é usado para todos
-os outros dados de sistema, dados de usuário, aplicativos e dados de aplicativos. </p>
-
-<p>Na inicialização, o sistema inicia em um modo restrito que permite
-acessar apenas dados criptografados pelo dispositivo, sem acesso geral a aplicativos ou dados.
-Se você deseja executar componentes nesse modo, pode registrá-los
-definindo um sinalizador no manifesto. Após a reinicialização, o sistema ativa
-componentes registrados transmitindo a intenção <code>LOCKED_BOOT_COMPLETED</code>
-. O sistema garante que dados de aplicativos registrados criptografados pelos dispositivos sejam disponibilizados
-antes do destravamento. Todos os outros dados ficarão indisponíveis até que o usuário confirme as credenciais
- de tela de bloqueio para descriptografá-los. </p>
-
-Para obter mais informações, consulte <a href="{@docRoot}preview/features/direct-boot.html">Inicialização direta</a>.</p>
-</p>
-
-
-<h2 id="key_attestation">Confirmação de chaves</h2>
-
-<p>Os armazenamentos de chaves protegidos por hardware oferecem um método muito mais seguro para criar, armazenar
-e usar chaves de criptografia em dispositivos Android. Eles protegem chaves contra o kernel do Linux,
-possíveis vulnerabilidades do Android e extração
-em dispositivos com acesso root.</p>
-
-<p>Para permitir o uso de armazenamento de chaves protegido por hardware com maior facilidade e segurança,
-o Android N introduziu a confirmação de chaves. Aplicativos em dispositivos móveis e fora deles podem usar a confirmação de chaves
-para determinar com precisão se um par de chaves RSA ou EC
-está protegido por hardware, quais as propriedades do par de chaves e quais as restrições
-aplicadas ao uso e à validação. </p>
-
-<p>Aplicativos e serviços externos aos dispositivos móveis podem solicitar informações sobre um par de chaves
-por meio de um certificado de confirmação X.509, que deve estar assinado por uma
-chave de confirmação válida. A chave de confirmação é uma chave de assinatura ECDSA,
-injetada no armazenamento de chaves protegido por hardware do dispositivo na fábrica.
-Portanto, um certificado de confirmação assinado com uma chave de confirmação
-válida confirma a existência de um armazenamento de chaves protegido por hardware, além de
-detalhes dos pares de chaves desse armazenamento de chaves.</p>
-
-<p>Para garantir que o dispositivo esteja usando uma imagem Android oficial de fábrica
-e segura, a confirmação de chaves exige que o <a class="external-link" href="https://source.android.com/security/verifiedboot/verified-boot.html#bootloader_requirements">bootloader</a>
- do dispositivo forneça as seguintes informações ao <a class="external-link" href="https://source.android.com/security/trusty/index.html">Ambiente
- de execução confiável (TEE)</a>:</p>
-
-<ul>
-<li>A versão do SO e o nível de correção instalado no dispositivo</li>
-<li>A chave pública <a href="https://source.android.com/security/verifiedboot/index.html" class="external-link">Verified Boot</a> e seu status de bloqueio</li>
- </ul>
-
-<p>Para obter mais informações sobre o recurso de armazenamento de chaves protegido por hardware,
-consulte o guia <a href="https://source.android.com/security/keystore/" class="external-link">Armazenamento de chaves protegido por hardware</a>.</p>
-
-<p>Além da confirmação de chaves, o Android N também introduziu
- chaves associadas a impressões digitais que não são revogadas no cadastramento de impressões digitais.</p>
-
-<h2 id="network_security_config">Configuração de segurança de rede</h2>
-
-<p>No Android N, os aplicativos podem personalizar o comportamento de conexões seguras (HTTPS, TLS)
-de forma segura, sem modificação no código, usando a
-<em>Configuração de segurança de rede</em> declarativa em vez das
-APIs programáticas propensas a erro (por exemplo, X509TrustManager).</p>
-
- <p>Recursos compatíveis:</p>
-<ul>
-<li><b>Âncoras de confiança personalizadas.</b> Permite que um aplicativo personalize quais
-autoridades de certificado (CA) são confiáveis para as conexões seguras. Por
- exemplo, confiar em certificados autoassinados privados ou um restrito conjunto de CAs públicas.
-</li>
-<li><b>Substituições apenas em depuração.</b> Permite que um desenvolvedor de aplicativos depure
-conexões seguras do aplicativo com segurança, sem adicionar riscos à base
-instalada.
-</li>
-<li><b>Cancelamento do uso de tráfego de texto simples.</b> Permite que um aplicativo seja protegido contra
-o uso acidental de tráfego de texto simples.</li>
-<li><b>Fixação de certificados.</b> Um recurso avançado que permite que os aplicativos
- limitem quais chaves de servidor são confiáveis para conexões seguras.</li>
-</ul>
-
-<p>Para obter mais configurações, consulte <a href="{@docRoot}preview/features/security-config.html">Configuração de segurança
-de rede</a>.</p>
-
-<h2 id="default_trusted_ca">Autoridade de certificado confiável padrão</h2>
-
-<p>Por padrão, os aplicativos direcionados ao Android N confiam apenas em certificados fornecidos pelo sistema
-e não confiam mais em Autoridades de certificado (CA) adicionadas pelo usuário. Os aplicativos direcionados ao Android
-N que querem confiar em CAs adicionadas pelo usuário devem usar a
-<a href="{@docRoot}preview/features/security-config.html">Configuração de segurança de rede</a> para
-especificar como confiar nas CAs de usuário.</p>
-
-<h2 id="apk_signature_v2">Esquema de assinatura de APK v2</h2>
-
-<p>
- O Android N apresenta o esquema de assinatura de APK v2, um novo esquema de assinatura de aplicativo
- que oferece instalações mais rápidas e maior proteção contra alterações não autorizadas
- em arquivos APK. Por padrão, o Android Studio 2.2 e o plug-in do Android
- para Gradle 2.2 assinam seu aplicativo usando o esquema de assinatura de APK v2 e
- o esquema tradicional, que usa assinaturas JAR.
-</p>
-
-<p>
- Embora seja recomendável aplicar o esquema de assinatura de APK v2 ao aplicativo, este novo
- esquema não é obrigatório. Se o aplicativo não for compilado adequadamente ao usar o esquema
-de assinatura de APK v2, você poderá desativá-lo. O processo de desativação
- faz com que o Android Studio 2.2 e o plug-in do Android para Gradle 2.2 assinem
-o aplicativo usando apenas o esquema de assinatura tradicional. Para assinar apenas com o
- esquema tradicional, abra o arquivo do nível de módulo <code>build.gradle</code> e
- adicione a linha <code>v2SigningEnabled false</code> à configuração de assinatura de sua
- versão:
-</p>
-
-<pre>
- android {
- ...
- defaultConfig { ... }
- signingConfigs {
- release {
- storeFile file("myreleasekey.keystore")
- storePassword "password"
- keyAlias "MyReleaseKey"
- keyPassword "password"
- <strong>v2SigningEnabled false</strong>
- }
- }
- }
-</pre>
-
-<p class="caution"><strong>Cuidado: </strong>Se você assinar o aplicativo usando o esquema de assinatura de APK
- v2 e fizer novas alterações posteriormente, a assinatura do app
- será invalidada. Por essa razão, use ferramentas como <code>zipalign</code>
- antes de assinar o aplicativo usando o esquema de assinatura de APK v2, não depois.
-</p>
-
-<p>
- Para obter mais informações, leia os documentos do Android Studio que descrevem como
-<a href="{@docRoot}studio/publish/app-signing.html#release-mode">
-assinar um aplicativo</a> no Android Studio e como<a href="{@docRoot}studio/build/build-variants.html#signing"> configurar
-o arquivo de programação para assinar aplicativos</a> usando o plug-in do Android para Gradle.
-</p>
-
-<h2 id="scoped_directory_access">Acesso a diretórios com escopo</h2>
-
-<p>No Android N, os aplicativos podem usar novas APIs para solicitar acesso a determinados diretórios de <a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">armazenamento
-externo</a>, incluindo diretórios em mídias removíveis, tais como cartões
-SD. As novas APIs simplificam consideravelmente como o aplicativo acessa os
-diretórios de armazenamento externo padrão, tais como o diretório<code>Pictures</code>. Os aplicativos,
-como aplicativos de fotografia, podem usar essas APIs em vez de
-<code>READ_EXTERNAL_STORAGE</code>, que concede acesso a todos os diretórios de
-armazenamento, ou da Estrutura de acesso ao armazenamento, que faz o usuário navegar até
-o diretório.</p>
-
-<p>Além disso, as novas APIs simplificam as etapas executadas pelo usuário para conceder ao aplicativo
-acesso ao armazenamento externo. Quando você usa as novas APIs, o sistema usa uma IU de permissões simples
-que detalha claramente a qual diretório o aplicativo
-está solicitando acesso.</p>
-
-<p>Para obter mais informações, consulte a documentação para desenvolvedores
-<a href="{@docRoot}preview/features/scoped-folder-access.html">Acessos
- a diretório com escopo</a>.</p>
-
-<h2 id="keyboard_shortcuts_helper">Auxiliar de atalhos de teclado</h2>
-
-<p>
-No Android N, o usuário pode pressionar "Alt + /" para acionar uma tela de <em>atalhos de teclado</em>
-que exibe todos os atalhos disponíveis do sistema e do
-aplicativo em questão. Os atalhos são recuperados automaticamente do menu do aplicativo, se
-estiverem disponíveis, mas os desenvolvedores podem fornecer listas próprias de atalhos
-para a tela. É possível fazer isso substituindo o novo método
-<code>Activity.onProvideKeyboardShortcuts()</code>, conforme descrito na
-<a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência da API</a>, disponível para download.
-</p>
-
-<p>
-Para acionar o auxiliar de atalhos de teclado em qualquer ponto do aplicativo,
-chame {@code Activity.requestKeyboardShortcutsHelper()} para a atividade correspondente.
-</p>
-
-<h2 id="sustained_performance_api">API de desempenho sustentado</h2>
-
-<p>
-O desempenho pode flutuar drasticamente em aplicativos executados por muito tempo porque o
-sistema aciona os mecanismos de sistema-em-um-chip quando os componentes do dispositivo atingem o
-limite de temperatura. Esta flutuação representa um desafio para desenvolvedores de aplicativos
- que criam aplicativos de alto desempenho e longo tempo de execução.
-</p>
-
-<p>
-Para tratar estas limitações, o Android N inclui compatibilidade opcional para
-<em>modo de desempenho sustentado</em>, permitindo que OEMs ofereçam dicas sobre
- capacidades de desempenho em dispositivo para aplicativos de longa duração. Os desenvolvedores de aplicativos
-podem usar essas dicas para ajustar os aplicativos para um nível de desempenho do dispositivo previsível
-e consistente em períodos longos de tempo.
-</p>
-
-<p>
-Desenvolvedores de aplicativos podem testar essa nova API na N Developer Preview
-apenas em dispositivos Nexus 6P. Para usar este recurso,
-configure a janela de sinalização de desempenho sustentado para a janela
-que você quer executar em modo de desempenho sustentado. Configure esta sinalização usando o método
-{@code Window.setSustainedPerformanceMode()}. O sistema desativará este modo
-automaticamente quando a janela não estiver mais em foco.
-</p>
-
-<h2 id="vr">Suporte a RV</h2>
-
-<p>
-O Android N adiciona compatibilidade de plataformas e otimizações para um novo Modo RV Mode que dá aos
- desenvolvedores a capacidade de projetar experiências de RV móveis de alta qualidade para os usuários. Há diversas melhorias de desempenho
-, incluindo acesso a um núcleo exclusivo da CPU para aplicativos de RV.
- Dentro dos aplicativos, é possível tirar vantagem do rastreamento inteligente da cabeça
-e de notificações estéreo que funcionam para RV. Mais importante, o Android N oferece
-gráficos de latência muito baixa. Para obter informações completas sobre a criação de aplicativos de RV para Android N,
-consulte o <a href="https://developers.google.com/vr/android/">Google VR SDK para Android</a>.
-</p>
-
-
-<h2 id="print_svc">Melhorias nos serviços de impressão</h2>
-
-<p>
- No Android N, agora os desenvolvedores de serviços de impressão podem exibir informações adicionais
- sobre impressoras e trabalhos de impressão individuais.
-</p>
-
-<p>
- Ao listar impressoras individuais, agora um serviço de impressão pode definir
-ícones por impressora de duas maneiras:
-</p>
-
-<ul>
- <li>É possível definir um ícone de um ID de recurso chamando
- <code>PrinterInfo.Builder.setResourceIconId()</code>
- </li>
-
- <li>É possível exibir um ícone da rede chamando
-<code>PrinterInfo.Builder.setHasCustomPrinterIcon()</code> e definindo um
-retorno de chamada para quando o ícone for solicitado usando
-<code>android.printservice.PrinterDiscoverySession.onRequestCustomPrinterIcon()</code>
- </li>
-</ul>
-
-<p>
- Além disso, você pode fornecer atividade por impressora para exibir
-informações adicionais chamando <code>PrinterInfo.Builder.setInfoIntent()</code>.
-</p>
-
-<p>
- É possível indicar o progresso e o status de trabalhos de impressão na
-notificação de trabalhos de impressão chamando
-<code>android.printservice.PrintJob.setProgress()</code> e
-<code>android.printservice.PrintJob.setStatus()</code>, respectivamente.
-</p>
-
-<p>
- Para obter mais informações sobre estes métodos, consulte a <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência da API</a>, disponível para download.
-</p>
-
-<h2 id="framemetrics_api">FrameMetricsListener API</h2>
-
-<p>
-A FrameMetricsListener API permite que um aplicativo monitore o desempenho de renderização
- da IU. A API oferece este recurso ao expor uma API Pub/Sub em streaming para transferir informações de precisão
-de quadro à janela atual do aplicativo. Os dados retornados são
-equivalentes aos que<code><a href="{@docRoot}tools/help/shell.html#shellcommands">adb shell</a>
-dumpsys gfxinfo framestats</code> exibe, mas não estão mais limitados a 120 quadros.
-</p>
-
-<p>
-É possível usar o FrameMetricsListener para medir o desempenho da IU
-em nível de interação na produção sem conexão USB. Esta API
-permite a coleta de dados com granularidade muito maior do que
-{@code adb shell dumpsys gfxinfo}. A granularidade maior é possível porque
-o sistema pode coletar dados para determinadas interações no aplicativo; o sistema
-não precisa capturar um resumo global do desempenho
-do aplicativo nem limpar qualquer estado global. É possível usar este
-recurso para reunir dados de desempenho e capturar regressões no desempenho da IU
-para casos de uso reais dentro do aplicativo.
-</p>
-
-<p>
-Para monitorar uma janela, implemente o método de retorno de chamada <code>FrameMetricsListener.onMetricsAvailable()</code>
-e registre-o nessa janela. Para obter mais informações, consulte a
-documentação da classe{@code FrameMetricsListener} na
-<a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência da API</a>,disponível para download.
-</p>
-
-<p>
-A API fornece um objeto {@code FrameMetrics}, que contém dados de quadro que
-o subsistema de renderização relata para vários marcos no ciclo de vida de um quadro.
-As métricas suportadas são: {@code UNKNOWN_DELAY_DURATION},
-{@code INPUT_HANDLING_DURATION}, {@code ANIMATION_DURATION},
-{@code LAYOUT_MEASURE_DURATION}, {@code DRAW_DURATION}, {@code SYNC_DURATION},
-{@code COMMAND_ISSUE_DURATION}, {@code SWAP_BUFFERS_DURATION},
-{@code TOTAL_DURATION}e {@code FIRST_DRAW_FRAME}.
-</p>
-
-
-<h2 id="virtual_files">Arquivos virtuais</h2>
-
-<p>
- Em versões anteriores do Android, o aplicativo podia usar a estrutura de
- acesso ao armazenamento para permitir que os usuários selecionem arquivos de contas de armazenamento em nuvem,
- como o Google Drive. No entanto, não é possível representar arquivos que
-não tenham uma representação direta de código de bytes; os arquivos precisam fornecer
- um fluxo de entrada.
-</p>
-
-<p>
- O Android N adiciona o conceito de <em>arquivos virtuais</em> à estrutura de acesso
- ao armazenamento. O recurso de arquivos virtuais permite que seu
-{@link android.provider.DocumentsProvider} retorne URIs de documentos que possam ser
-usados com intenções {@link android.content.Intent#ACTION_VIEW} mesmo que não tenham
-uma representação direta de código de bytes. O Android N também permite que você
- ofereça formatos alternativos para arquivos de usuário, sejam virtuais ou não.
-</p>
-
-<p>
- Para obter o URI para um documento virtual em seu aplicativo, é preciso criar uma
- {@link android.content.Intent} para abrir a IU do seletor de arquivos. Como um aplicativo
-não consegue abrir um arquivo virtual diretamente usando o método
-{@link android.content.ContentResolver#openInputStream(Uri) openInputStream()}
-, seu aplicativo não receberá arquivos virtuais se você não incluir a categoria
-{@link android.content.Intent#CATEGORY_OPENABLE}.
-</p>
-
-<p>
- Depois que o usuário fizer uma seleção, o sistema chamará o método
-{@link android.app.Activity#onActivityResult onActivityResult()}.
- O aplicativo pode recuperar o URI do arquivo virtual e obter um fluxo de resultados, como
- demonstrado no snippet de código abaixo.
-</p>
-
-<pre>
- // Other Activity code ...
-
- final static private int REQUEST_CODE = 64;
-
- // We listen to the OnActivityResult event to respond to the user's selection.
- @Override
- public void onActivityResult(int requestCode, int resultCode,
- Intent resultData) {
- try {
- if (requestCode == REQUEST_CODE &&
- resultCode == Activity.RESULT_OK) {
-
- Uri uri = null;
-
- if (resultData != null) {
- uri = resultData.getData();
-
- ContentResolver resolver = getContentResolver();
-
- // Before attempting to coerce a file into a MIME type,
- // check to see what alternative MIME types are available to
- // coerce this file into.
- String[] streamTypes =
- resolver.getStreamTypes(uri, "*/*");
-
- AssetFileDescriptor descriptor =
- resolver.openTypedAssetFileDescriptor(
- uri,
- streamTypes[0],
- null);
-
- // Retrieve a stream to the virtual file.
- InputStream inputStream = descriptor.createInputStream();
- }
- }
- } catch (Exception ex) {
- Log.e("EXCEPTION", "ERROR: ", ex);
- }
- }
-</pre>
-
-<p>
- Para obter mais informações sobre como acessar arquivos de usuário, consulte o
-<a href="{@docRoot}guide/topics/providers/document-provider.html">guia da estrutura
-de acesso ao armazenamento</a>.
-</p>
diff --git a/docs/html-intl/intl/pt-br/preview/behavior-changes.jd b/docs/html-intl/intl/pt-br/preview/behavior-changes.jd
deleted file mode 100644
index b2f07d9..0000000
--- a/docs/html-intl/intl/pt-br/preview/behavior-changes.jd
+++ /dev/null
@@ -1,610 +0,0 @@
-page.title=Mudanças de comportamento
-page.keywords=preview,sdk,compatibility
-meta.tags="preview", "compatibility"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-changes_2x.png
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>Neste documento</h2>
-
-<ol>
- <li><a href="#perf">Melhorias no desempenho</a>
- <ol>
- <li><a href="#doze">Soneca</a></li>
- <li><a href="#bg-opt">Otimizações em segundo plano</a></li>
- </ol>
- </li>
- <li><a href="#perm">Alterações nas permissões</a>
- </li>
- <li><a href="#sharing-files">Compartilhamento de arquivos entre aplicativos</a></li>
- <li><a href="#accessibility">Melhorias na acessibilidade</a>
- <ol>
- <li><a href="#screen-zoom">Zoom de tela</a></li>
- <li><a href="#vision-settings">Configurações de visão no assistente de configuração</a></li>
- </ol>
- </li>
- <li><a href="#ndk">Aplicativos NDK vinculados a bibliotecas de plataforma</a></li>
- <li><a href="#afw">Android for Work</a></li>
- <li><a href="#annotations">Retenção de anotações</a></li>
- <li><a href="#other">Outros pontos importantes</a></li>
-</ol>
-
-<h2>Veja também</h2>
-<ol>
- <li><a href="{@docRoot}preview/api-overview.html">
-Visão geral da API do Android N</a></li>
-</ol>
-
-</div>
-</div>
-
-
-<p>
- Junto com novos recursos e funcionalidades, o Android N
-inclui uma variedade de mudanças de comportamento do sistema e da API. Este documento
-destaca algumas das principais mudanças que você deve entender e considerar
-nos aplicativos.
-</p>
-
-<p>
- Caso tenha publicado anteriormente um aplicativo para Android, saiba que ele pode ser afetado
- pelas alterações na plataforma.
-</p>
-
-
-<h2 id="perf">Bateria e memória</h2>
-
-<p>
-O Android N inclui alterações de comportamento do sistema com o objetivo de melhorar a vida útil da bateria
-nos dispositivos e reduzir o uso de RAM. Essas alterações podem afetar o acesso do aplicativo aos
-recursos do sistema, bem como a forma como ele interage com outros aplicativos por meio de
- certas intenções explícitas .
-</p>
-
-<h3 id="doze">Soneca</h3>
-
-<p>
- Introduzido no Android 6.0 (nível da API 23), o modo soneca aumenta a vida útil da bateria
- adiando atividades de CPU e rede quando um usuário deixa um dispositivo desconectado,
- estacionário e com a tela desativada. O Android N aprimora
- ainda mais o modo soneca aplicando um subconjunto de restrições de CPU e rede
- quando o dispositivo está desconectado e com a tela desativada, mas não necessariamente
- estacionário, como, por exemplo, quando o celular está no bolso do usuário.
-</p>
-
-
-<img src="{@docRoot}preview/images/doze-diagram-1.png" alt="" height="251px" id="figure1" />
-<p class="img-caption">
- <strong>Figura 1.</strong> Ilustração de como o modo soneca aplica um primeiro nível de
- restrições de atividades de sistema para aumentar a vida útil da bateria.
-</p>
-
-<p>
- Quando o dispositivo estiver sendo alimentado pela bateria e a tela estiver desativada por um determinado
- período, o dispositivo entrará no modo de soneca e aplicará o primeiro subconjunto de restrições: o
-acesso do aplicativo à rede será desativado e os trabalhos e sincronizações serão adiados. Se o dispositivo permanecer
-estacionário por um determinado período após entrar no modo soneca, o sistema aplicará
-as demais restrições de soneca a {@link android.os.PowerManager.WakeLock}, aos alarmes
-{@link android.app.AlarmManager} e às verificações de GPS e Wi-Fi. Independentemente
- de as restrições de soneca serem aplicadas parcial ou totalmente, o sistema despertará o
- dispositivo para breves janelas de manutenção, quando os aplicativos
- poderão acessar a rede e executar todos os trabalhos/sincronizações adiados.
-</p>
-
-
-<img src="{@docRoot}preview/images/doze-diagram-2.png" alt="" id="figure2" />
-<p class="img-caption">
- <strong>Figura 2.</strong> Ilustração de como o modo soneca aplica um segundo nível de
- restrições de atividades de sistema após o dispositivo permanecer estacionário por um determinado período.
-</p>
-
-<p>
- Note que a ativação da tela ou do dispositivo encerra o modo soneca e
- remove essas restrições de processamento. O comportamento adicional não
- afeta as recomendações e práticas recomendadas para a adaptação do aplicativo à versão
- anterior do modo soneca, introduzida no Android 6.0 (nível da API 23), como discutido em
- <a href="{@docRoot}training/monitoring-device-state/doze-standby.html">
- Otimização para soneca e aplicativo em espera</a>. Você deve continuar
- a seguir essas recomendações, como o uso do Google Cloud Messaging (GCM) para
- enviar e receber mensagens, e começar a planejar atualizações para acomodar o
- comportamento adicional do modo soneca.
-</p>
-
-
-<h3 id="bg-opt">Project Svelte: Otimizações em segundo plano</h3>
-
-<p>
- O Android N remove três transmissões implícitas para ajudar a otimizar o
- uso de memória e o consumo de energia. Essa alteração é necessária porque transmissões
- implícitas iniciam frequentemente em segundo plano aplicativos
- registrados para escutá-las. A remoção dessas transmissões pode beneficiar consideravelmente o desempenho
-do dispositivo e a experiência do usuário.
-</p>
-
-<p>
- Dispositivos móveis passam por alterações frequentes na conectividade, como a alternância
- entre Wi-Fi e dados móveis. No momento, os aplicativos podem monitorar alterações de
- conectividade registrando um receptor para a transmissão implícita {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION} em seu
- manifesto. Como vários aplicativos se registram para receber essa transmissão, uma única
- mudança de rede pode fazer com que todos despertem e processem a transmissão
- ao mesmo tempo.
-</p>
-
-<p>
- De forma semelhante, em versões anteriores do Android, os aplicativos podiam se registrar para receber transmissões implícitas {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} e {@link
- android.hardware.Camera#ACTION_NEW_VIDEO} de outros aplicativos, como
- Câmera. Quando um usuário tira uma fotografia com o aplicativo Câmera, esses aplicativos são despertados
- para processar a transmissão.
-</p>
-
-<p>
- Para aliviar esses problemas, o Android N aplica a seguintes
- otimizações:
-</p>
-
-<ul>
- <li>Os aplicativos direcionados ao Android N não receberão transmissões {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION}, mesmo
- se tiverem entradas no manifesto solicitando notificação desses eventos. Os aplicativos em execução
-ainda poderão escutar {@code CONNECTIVITY_CHANGE} no encadeamento principal
- se solicitarem a notificação com {@link android.content.BroadcastReceiver}.
- </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 Android N.
- </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, a API {@link
- android.app.job.JobScheduler} oferece um mecanismo robusto para agendar
- operações de rede quando ocorrem condições especificadas, como conexão a uma
- rede ilimitada. Você pode até usar {@link
-android.app.job.JobScheduler} para reagir a mudanças em provedores de conteúdo.
-</p>
-
-<p>
- Para obter mais informações sobre otimizações em segundo plano no N e como adaptar seu aplicativo,
- consulte <a href="{@docRoot}preview/features/background-optimization.html">Otimizações
-em segundo plano</a>.
-</p>
-
-<h2 id="perm">Alterações nas permissões</h2>
-
-<p>
- O Android N inclui alterações em permissões que podem afetar seu aplicativo.
-</p>
-
-<h3 id="permfilesys">Alterações nas permissões do sistema de arquivos</h3>
-
-<p>
- Para aprimorar a segurança de arquivos privados, o diretório privado de
- aplicativos direcionados ao Android N ou superior tem acesso restrito (<code>0700</code>).
- Esta configuração impede o vazamento de metadados de arquivos privados, como tamanho
- e existência. Esta alteração de permissão tem vários efeitos colaterais:
-</p>
-
-<ul>
- <li>
- O proprietário não deve mais relaxar as permissões para arquivos privados,
- e qualquer tentativa de fazer isso usando
- {@link android.content.Context#MODE_WORLD_READABLE} e/ou
- {@link android.content.Context#MODE_WORLD_WRITEABLE} acionará uma
- {@link java.lang.SecurityException}.
- <p class="note">
- <strong>Observação:</strong> Até agora, essa restrição não foi adotada em pleno vigor.
- Aplicativos ainda podem modificar permissões para o diretório privado usando
- APIs nativas ou a API {@link java.io.File File}. No entanto, o relaxamento
- de permissões para o diretório privado é enfaticamente desencorajado.
- </p>
- </li>
- <li>
- A passagem de URIs <code>file://</code> para fora do domínio do pacote pode deixar o
- receptor com um caminho inacessível. Sendo assim, tentativas de passar um URI
- <code>file://</code> acionam uma
- <code>FileUriExposedException</code>. A forma recomendada para compartilhamento do
- conteúdo de um arquivo privado é o uso do {@link
- android.support.v4.content.FileProvider}.
- </li>
- <li>
- O {@link android.app.DownloadManager} não consegue mais compartilhar
- arquivos armazenados de forma privada por nome de arquivo. Os aplicativos de legado podem acabar em um
- caminho inacessível quando acessam {@link
- android.app.DownloadManager#COLUMN_LOCAL_FILENAME}. Aplicativos direcionados para o
- Android N ou superior acionam uma {@link java.lang.SecurityException} quando
- tentam acessar
- {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}.
- Aplicativos de legado que definem o local de download para um local público
- usando
- {@link
-android.app.DownloadManager.Request#setDestinationInExternalFilesDir
-DownloadManager.Request.setDestinationInExternalFilesDir()} ou
- {@link
-android.app.DownloadManager.Request#setDestinationInExternalPublicDir
-DownloadManager.Request.setDestinationInExternalPublicDir()}
- ainda conseguem acessar o caminho em
-{@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}, no entanto, este
- método é enfaticamente desencorajado. A forma preferencial para se acessar um arquivo
- exposto pelo {@link android.app.DownloadManager} é o uso do
-{@link android.content.ContentResolver#openFileDescriptor
-ContentResolver.openFileDescriptor()}.
- </li>
-</ul>
-
-<h2 id="sharing-files">Compartilhamento de arquivos entre aplicativos</h2>
-
-<p>
-Para aplicativos direcionados ao Android N, a estrutura do Android cumpre com
-a política de API {@link android.os.StrictMode} que proíbe a exposição de URIs {@code file://}
-fora do aplicativo. Se uma intenção que contenha o URI de um arquivo deixar o aplicativo, ele falhará
- com uma exceção {@code FileUriExposedException}.
-</p>
-
-<p>
-Para compartilhar arquivos entre aplicativos, você deve enviar um URI {@code content://}
-e conceder uma permissão de acesso temporária ao URI. A forma mais fácil de conceder essa permissão é
-usar a classe {@link android.support.v4.content.FileProvider}. Para obter mais informações
- sobre permissões e compartilhamento de arquivos,
-consulte <a href="{@docRoot}training/secure-file-sharing/index.html">Compartilhamento de Arquivos</a>.
-</p>
-
-<h2 id="accessibility">Melhorias na acessibilidade</h2>
-
-<p>
- O Android N inclui mudanças criadas para aprimorar a facilidade de uso da
- plataforma para usuários com visão reduzida ou deficiente. Normalmente, essas mudanças
- não exigirão alterações de código no aplicativo. No entanto, analise
- esse recurso e teste-o em seu aplicativo para avaliar possíveis impactos na experiência
- do usuário.
-</p>
-
-
-<h3 id="screen-zoom">Zoom de tela</h3>
-
-<p>
- O Android N permite que os usuários definam <strong>Display size</strong>, que amplia
- ou reduz todos os elementos na tela, melhorando a acessibilidade do dispositivo
- para usuários com visão deficiente. Os usuários não podem alterar o zoom da tela além da largura mínima de
- tela de <a href="http://developer.android.com/guide/topics/resources/providing-resources.html">
-sw320dp</a>, que é a largura do Nexus 4, um telefone comum de tamanho médio.
-</p>
-
-<div class="cols">
-
-<div class="col-6">
- <img src="{@docRoot}preview/images/screen-zoom-1.png" alt="" height="XXX" id="figure1" />
-</div>
-<div class="col-6">
- <img src="{@docRoot}preview/images/screen-zoom-2.png" alt="" height="XXX" id="figure1" />
-</div>
-
-</div> <!-- end cols -->
-<p class="img-caption">
- <strong>Figura 3.</strong> A tela à direita mostra o efeito de
- reduzir o Display size de um dispositivo executando uma imagem do sistema Android N.
-</p>
-
-
-<p>
- Quando a densidade do dispositivo mudar, o sistema notificará os aplicativos em execução das
- seguintes formas:
-</p>
-
-<ul>
- <li>Se um aplicativo está direcionado ao nível da API 23 ou mais baixo, o sistema automaticamente elimina
- todos os processos em segundo plano. Isso significa que, se um usuário sair
- desse aplicativo para abrir a tela <em>Settings</em> e alterar a
- configuração <strong>Display size</strong>, o sistema eliminará o aplicativo da mesma
- forma que faria em uma situação de pouca memória. Se o aplicativo tiver processos
- em primeiro plano, o sistema notificará esses processos sobre a mudança de configuração, como
- descrito em <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Processamento
- de alterações no tempo de execução</a>, como se a orientação do dispositivo tivesse mudado.
- </li>
-
- <li>Se um aplicativo for direcionado ao Android N, todos os seus processos
- (em primeiro e segundo plano) serão notificados da mudança de configuração, como
- descrito em <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Processamento
- de alterações no tempo de execução</a>.
- </li>
-</ul>
-
-<p>
- A maioria dos aplicativos não precisa ser alterada para ser compatível com esse recurso, desde que
- os aplicativos sigam as práticas recomendadas do Android. Os itens específicos a serem verificados são:
-</p>
-
-<ul>
- <li>Teste o aplicativo em um dispositivo com largura de tela <code><a href=
- "{@docRoot}guide/topics/resources/providing-resources.html">sw320dp</a></code>
- e verifique se ele funciona adequadamente.
- </li>
-
- <li>Quando a configuração do dispositivo mudar, atualize todas as informações
- dependentes de densidade armazenadas no cache, como bitmaps no cache ou recursos carregados da
- rede. Verifique a ocorrência de alterações de configuração quando o aplicativo sair do estado pausado e retomar
- a execução.
- <p class="note">
- <strong>Observação:</strong> se você armazenar em cache dados dependentes de configuração,
-recomendamos incluir metadados relevantes, como o tamanho de tela
- adequado ou a densidade de pixels desses dados. Salvar esses dados permitirá que você
- decida se será necessário atualizar os dados armazenados em cache após uma mudança
- de configuração.
- </p>
- </li>
-
- <li>Evite especificar dimensões com unidades px, pois elas não são redimensionadas de
- acordo com a densidade de tela. Em vez disso, especifique dimensões com unidades de <a href="{@docRoot}guide/practices/screens_support.html">pixel independente de
- densidade</a> (<code>dp</code>).
- </li>
-</ul>
-
-<h3 id="vision-settings">Configurações de visão no assistente de configuração</h3>
-
-<p>
- Agora, o Android N inclui Configurações de visão na tela de boas-vindas, onde os usuários podem
- definir as configurações de acessibilidade a seguir em um novo dispositivo:
- <strong>gesto de ampliação</strong>, <strong>tamanho da fonte</strong>
-, <strong>tamanho da tela</strong> e <strong>TalkBack</strong>. Essa alteração
- aumenta a visibilidade de erros relacionados a configurações de tela diferentes. Para
- avaliar o impacto do recurso, teste seus aplicativos com essas
-configurações ativadas. As configurações podem ser encontradas em <strong>Settings >
- Accessibility</strong>.
-</p>
-
-<h2 id="ndk">Aplicativos NDK vinculados a bibliotecas de plataforma</h2>
-
-<p>
- O Android N inclui mudanças no namespace para evitar o carregamento de APIs não públicas.
- Se você usar o NDK, use apenas APIs públicas da plataforma
- Android. O uso de APIs não públicas na próxima versão oficial do Android
- poderá causar problemas no seu aplicativo.
-</p>
-
-<p>
- Para alertar sobre o uso de APIs não públicas, os aplicativos executados em um dispositivo
- Android N geram um erro na saída logcat quando um aplicativo chama uma API não pública.
- Esse erro também é exibido na tela do dispositivo como mensagem para que o usuário
-fique ciente da situação. Revise o código do seu aplicativo para
- remover o uso de APIs de plataformas não públicas e faça testes completos do aplicativo usando
- um dispositivo de visualização ou um emulador.
-</p>
-
-<p>
- Se o seu aplicativo depender de bibliotecas de plataforma, consulte a documentação do NDK
- para obter soluções usuais de substituição de APIs privadas comuns por APIs públicas equivalentes.
- Também é possível que você esteja vinculando bibliotecas de plataforma sem perceber,
- particularmente se o aplicativo usar uma biblioteca que faz parte da plataforma (como
- <code>libpng</code>), mas não faz parte do NDK. Nesse caso, verifique se
-o APK contém todos os arquivos .so que você pretende vincular.
-</p>
-
-<p class="caution">
- <strong>Cuidado:</strong> Algumas bibliotecas de terceiros também podem conter links para APIs
- não públicas. Se o aplicativo usar essas bibliotecas, poderá falhar quando executado
- na próxima versão oficial do Android.
-</p>
-
-<p>
- Os aplicativos não devem depender de nem usar bibliotecas nativas não incluídas
- no NDK, pois elas podem ser alteradas ou removidas entre uma versão do Android
- e outra. A mudança de OpenSSL para BoringSSL é um exemplo dessas alterações.
- Além disso, dispositivos diferentes podem oferecer níveis distintos de compatibilidade, pois
- não há requisitos de compatibilidade para bibliotecas de plataforma não incluídas
-no NDK. Se você precisar acessar bibliotecas que não são do NDK em dispositivos mais antigos, torne o carregamento
-dependente do nível da Android API.
-</p>
-
-<p>
- Para ajudar a diagnosticar esses tipos de problemas, veja a seguir alguns exemplos de erros
- de Java e NDK que podem ocorrer durante a compilação do aplicativo com o Android N:
-</p>
-
-<p>Exemplo de erro de Java:</p>
-<pre class="no-pretty-print">
-java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so"
- is not accessible for the namespace "classloader-namespace"
-</pre>
-
-<p>Exemplo de erro de NDK:</p>
-<pre class="no-pretty-print">
-dlopen failed: cannot locate symbol "__system_property_get" referenced by ...
-</pre>
-
-
-<p>
- Veja a seguir algumas correções comuns para aplicativos que encontram esses tipos de erro:
-</p>
-
-<ul>
- <li>O uso de getJavaVM e getJNIEnv do libandroid_runtime.so pode ser substituído
- por funções JNI padrão:
-<pre class="no-pretty-print">
-AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h>
-AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or
-JavaVM::AttachCurrentThread from <jni.h>.
-</pre>
- </li>
-
- <li>O uso do símbolo {@code property_get} de {@code libcutils.so} pode ser
- substituído pelo {@code alternative __system_property_get} público.
- Para fazer isso, use {@code __system_property_get} com o include abaixo:
-<pre>
-#include <sys/system_properties.h>
-</pre>
- </li>
-
- <li>O uso do símbolo {@code SSL_ctrl} de {@code libcrypto.so} deve ser
- substituído por uma versão local do aplicativo. Por exemplo, vincule estaticamente
- {@code libcyrpto.a} no arquivo {@code .so} ou inclua dinamicamente o seu próprio
- {@code libcrypto.so} do BoringSSL ou OpenSSL no aplicativo.
- </li>
-</ul>
-
-<h2 id="afw">Android for Work</h2>
-<p>
- O Android N contém mudanças para aplicativos direcionados ao Android for Work, incluindo
- mudanças em instalação de certificados, redefinição de senha, gerenciamento de
- usuários secundários e acesso a identificadores de dispositivos. Se você estiver criando aplicativos para
- ambientes do Android for Work, examine essas mudanças e modifique
- o aplicativo conforme necessário.
-</p>
-
-<ul>
- <li>Você precisa instalar um instalador de certificado delegado antes que o DPC possa
- configurá-lo. Para aplicativos de donos de perfil e dispositivo direcionados ao N SDK, você deve
- instalar o instalador de certificado delegado antes de chamar o
- controlador de políticas de dispositivo (DPC)
- <code>DevicePolicyManager.setCertInstallerPackage()</code>. Se o instalador
- não estiver instalado, o sistema gerará uma
- <code>IllegalArgumentException</code>.
- </li>
-
- <li>As restrições de redefinição de senha de administradores do dispositivo agora se aplicam também a
-donos de perfil. Os administradores de dispositivo não podem mais usar
- {@code DevicePolicyManager.resetPassword()} para limpar senhas nem para alterar
- as já definidas. Os administradores de dispositivo ainda poderão definir uma senha, mas apenas
- em dispositivos sem senha, PIN nem padrão.
- </li>
-
- <li>Donos de dispositivo e perfil poderão gerenciar contas, mesmo se restrições forem
- definidas. Eles podem chamar as APIs de gerenciamento de contas,
- mesmo se restrições de usuário <code>DISALLOW_MODIFY_ACCOUNTS</code> forem implementadas.
- </li>
-
- <li>Os donos de dispositivo podem gerenciar usuários secundários com maior facilidade. Quando um dispositivo
- executar no modo de dono do dispositivo, a restrição <code>DISALLOW_ADD_USER</code>
- será definida automaticamente. Isso evita que os usuários criem usuários secundários
- não gerenciados. Além disso, os métodos <code>CreateUser()</code> e
- <code>createAndInitializeUser()</code> ficaram obsoletos e foram substituídos
- pelo novo método <code>DevicePolicyManager.createAndManageUser()</code>.
- </li>
-
- <li>Os donos de dispositivo podem acessar identificadores de dispositivo. O dono do dispositivo pode acessar o
- endereço MAC Wi-Fi de um dispositivo usando
- <code>DevicePolicyManagewr.getWifiMacAddress()</code>. Se a rede Wi-Fi nunca
- foi ativada no dispositivo, esse método retorna o valor {@code null}.
- </li>
-
- <li>A configuração modo de trabalho controla o acesso a aplicativos de trabalho. Quando o modo de trabalho está desativado, a
- tela de início do sistema mostra os aplicativos de trabalho em cinza para indicar que estão indisponíveis. Quando é
- reativado, o modo de trabalho retorna ao comportamento normal.
-</ul>
-
-<p>
- Para obter mais informações sobre as mudanças no Android for Work no Android N, consulte
- <a href="{@docRoot}preview/features/afw.html">Atualizações no Android for Work</a>.
-</p>
-
-<h2 id="annotations">Retenção de anotações</h2>
-
-<p>
-O Android N corrige um erro em que a visibilidade de anotações era ignorada.
-Este problema permitia que o tempo de execução acessasse anotações a que não deveria
-ter acesso. Entre essas anotações, estão:
-</p>
-
-<ul>
- <li>{@code VISIBILITY_BUILD}: que só deveria estar visível em tempo de compilação.</li>
- <li>{@code VISIBILITY_SYSTEM}: que deveria estar visível em tempo de execução, mas apenas para o
-sistema subjacente.</li>
-</ul>
-
-<p>
-Se o seu aplicativo se baseou neste comportamento, adicione uma política de retenção para anotações que deve
- estar disponível em tempo de execução. É possível fazer isso usando {@code @Retention(RetentionPolicy.RUNTIME)}.
-</p>
-
-<h2 id="other">Outros pontos importantes</h2>
-
-<ul>
-<li>Quando um aplicativo for executado no Android N, mas for direcionado a um nível da API menor
- e o usuário alterar o tamanho da tela, o processo do aplicativo será eliminado. O aplicativo
-deverá ser capaz de processar corretamente esse cenário. Caso contrário, ele falhará
-quando o usuário restaurá-lo usando Recents.
-
-<p>
-Você deve testar o aplicativo para verificar
-se esse comportamento não ocorre.
-Isso pode ser feito causando uma falha idêntica
-eliminando o aplicativo manualmente usando o DDMS.
-</p>
-
-<p>
-Aplicativos direcionados ao Android N e versões posteriores não serão eliminados automaticamente em mudanças de densidade.
-No entanto, podem continuar a responder a alterações de configurações de forma não ideal.
-</p>
-</li>
-
-<li>
-Os aplicativos no Android N devem ser capazes de processar corretamente mudanças de configuração
-e não devem falhar em inicializações subsequentes. Você pode verificar o comportamento do aplicativo
-alterando o tamanho da fonte (<strong>Setting</strong> >
-<strong>Display</strong> > <strong>Font size</strong>) e depois restaurando
-o aplicativo em Recents.
-</li>
-
-<li>
-Devido a um erro em versões anteriores do Android, o sistema não sinaliza gravações
- em um soquete TCP no encadeamento principal como violações do modo estrito. O Android N corrigiu esse erro.
-Agora, os aplicativos que exibirem este comportamento gerarão uma{@code android.os.NetworkOnMainThreadException}.
-Geralmente, a realização de operações de rede no encadeamento principal é uma má ideia porque essas operações
-geralmente têm alta latência no final, causando ANRs e problemas.
-</li>
-
-<li>
-Agora, por padrão, a família de métodos {@code Debug.startMethodTracing()} armazena
-os resultados no diretório específico do pacote no armazenamento compartilhado,
- e não no nível mais alto
- do cartão SD. Isso significa que os aplicativos não precisam mais solicitar a permissão {@code WRITE_EXTERNAL_STORAGE} para usar estas APIs.
-</li>
-
-<li>
-Muitas APIs de plataformas começaram a verificar grandes cargas úteis enviadas
-por meio de transações {@link android.os.Binder}, e o
-sistema agora gera novamente{@code TransactionTooLargeExceptions}
-como {@code RuntimeExceptions}, em vez de registrá-las ou suprimi-las silenciosamente. Um
-exemplo comum é armazenar dados demais em
-{@link android.app.Activity#onSaveInstanceState Activity.onSaveInstanceState()},
-que faz com que {@code ActivityThread.StopInfo} gere uma
-{@code RuntimeException} quando seu aplicativo é direcionado ao Android N.
-</li>
-
-<li>
-Se um aplicativo publica tarefas {@link java.lang.Runnable} para uma {@link android.view.View} e
- esta {@link android.view.View}
-não está anexada a uma janela, o sistema
-coloca a tarefa {@link java.lang.Runnable} em fila com a {@link android.view.View}.
-A tarefa {@link java.lang.Runnable} não é executada até que a
-{@link android.view.View} esteja anexada
-a uma janela. Este comportamento corrige os seguintes erros:
-<ul>
- <li>Se um aplicativo publicasse em uma {@link android.view.View} de um encadeamento que não fosse o encadeamento de IU da janela pretendida
-, o {@link java.lang.Runnable} poderia acabar sendo executado no encadeamento errado.
- </li>
- <li>Se a tarefa {@link java.lang.Runnable} fosse publicada de um encadeamento que não fosse
- um encadeamento de looper, o aplicativo poderia expor a tarefa {@link java.lang.Runnable}.</li>
-</ul>
-</li>
-
-<li>
-Se um aplicativo no Android N com permissão
-{@link android.Manifest.permission#DELETE_PACKAGES DELETE_PACKAGES}
-tentar excluir um pacote instalado por outro aplicativo,
-o sistema solicitará a confirmação do usuário. Nesse cenário, os aplicativos devem esperar
-{@link android.content.pm.PackageInstaller#STATUS_PENDING_USER_ACTION STATUS_PENDING_USER_ACTION}
-como status de retorno ao invocar
-{@link android.content.pm.PackageInstaller#uninstall PackageInstaller.uninstall()}.
-</li>
-
-</ul>
-
diff --git a/docs/html-intl/intl/pt-br/preview/download-ota.jd b/docs/html-intl/intl/pt-br/preview/download-ota.jd
deleted file mode 100644
index 3f817ed..0000000
--- a/docs/html-intl/intl/pt-br/preview/download-ota.jd
+++ /dev/null
@@ -1,332 +0,0 @@
-page.title=Aplicação de uma imagem OTA de dispositivo
-
-@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" refere-se à 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 “Compatível com Android” significa qualquer implementação do Android que (i) obedece ao documento Definição de Compatibilidade com Android, que pode ser encontrado no site de compatibilidade do Android (http://source.android.com/compatibility) que pode ser atualizado de tempos em tempos; e (ii) seja aprovado no Android Compatibility Test Suite (CTS).
-
-1.4 “Google” se refere à 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 deste Contrato de licença, a Google confere uma licença limitada, mundial, sem royalties, intransmissível, não exclusiva e não sublicenciável unicamente para o uso do Preview exclusivamente para o desenvolvimento de aplicativos executados para implementações compatíveis do Android.
-
-3.2 Você não poderá usar este Preview para desenvolver aplicativos para outras plataformas (incluindo implementações não compatíveis do Android) nem para desenvolver outro SDK. Você tem a liberdade para desenvolver aplicativos para outras plataformas, incluindo implementações não compatíveis do Android, desde que este Preview não seja usado para essa finalidade.
-
-3.3 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.4 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.5 O uso, a reprodução e a distribuição de componentes do Preview licenciado sob uma 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 situação regular 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 Preview que a Google fornece podem mudar sem aviso prévio e que as versões futuras do Preview podem ser incompatíveis com aplicativos desenvolvidos em versões anteriores do Preview. 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. O uso do Preview
-
-4.1 A Google entende que nada no Contrato de Licença dá a ela direitos, título nem interesse sobre o usuário (ou sobre os seus licenciadores) sob o presente Contrato de licença nem sobre quaisquer aplicativos de software que o usuário desenvolver usando o Preview, incluindo quaisquer direitos de propriedade intelectual que subsistem 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 de dados ou softwares dos e para os Estados Unidos ou 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 dos 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 que possa acessar 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 proprietários.
-
-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">
-
-<p>
- Esta página fornece links para imagens OTA de dispositivo e descreve
- como aplicar manualmente uma atualização OTA em um dispositivo. Esse procedimento pode ser útil
- para recuperar dispositivos que receberam atualizações OTA usando o programa beta
-do Android e não estão ligando após a instalação.
-</p>
-
-<h2 id="install-ota">Instalação de imagens OTA</h2>
-
-<p></p>
-
-<p>Para instalar um pacote OTA em um dispositivo:</p>
-
-<ol>
- <li>Baixe uma imagem OTA de dispositivo na tabela abaixo.</li>
- <li>Reinicialize o dispositivo para ficar em modo Recovery. Para obter mais informações sobre como colocar
- dispositivos Nexus nesse modo, consulte
- <a href="https://support.google.com/nexus/answer/4596836">Redefinição do
-dispositivo Nexus para voltar à configuração de fábrica</a>.
- </li>
- <li>No dispositivo, selecione <strong>ADB sideload</strong>.</li>
- <li>Conecte o dispositivo a um computador que tenha o ambiente de desenvolvimento Android
- carregado e a ferramenta Android Debug Bridge (adb) instalada.</li>
- <li>Execute o seguinte comando:
- <pre>adb sideload <em><ota-package></em></pre>
- </li>
-</ol>
-
-
-
-<h2 id="ota-images">Imagem OTA de dispositivo</h2>
-
-<table>
- <tr>
- <th scope="col">Dispositivo</th>
- <th scope="col">Download / Checksums</th>
- </tr>
-
- <tr id="bullhead">
- <td>Nexus 5X <br>"bullhead"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >bullhead-ota-npd90g-0a874807.zip</a><br>
- MD5: 4b83b803fac1a6eec13f66d0afc6f46e<br>
- SHA-1: a9920bcc8d475ce322cada097d085448512635e2
- </td>
- </tr>
-
- <tr id="shamu">
- <td>Nexus 6 <br>"shamu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >shamu-ota-npd90g-06f5d23d.zip</a><br>
- MD5: 513570bb3a91878c2d1a5807d2340420<br>
- SHA-1: 2d2f40636c95c132907e6ba0d10b395301e969ed
- </td>
- </tr>
-
- <tr id="angler">
- <td>Nexus 6P <br>"angler"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >angler-ota-npd90g-5baa69c2.zip</a><br>
- MD5: 096fe26c5d50606a424d2f3326c0477b<br>
- SHA-1: 468d2e7aea444505513ddc183c85690c00fab0c1
- </td>
- </tr>
-
- <tr id="volantis">
- <td>Nexus 9 <br>"volantis"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantis-ota-npd90g-c04785e1.zip</a><br>
- MD5: 6aecd3b0b3a839c5ce1ce4d12187b03e<br>
- SHA-1: 31633180635b831e59271a7d904439f278586f49
- </td>
- </tr>
-
- <tr id="volantisg">
- <td>Nexus 9G <br>"volantisg"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantisg-ota-npd90g-c56aa1b0.zip</a><br>
- MD5: 0493fa79763d67bcdde8007299e1888d<br>
- SHA-1: f709daf81968a1b27ed41fe40d42e0d106f3c494
- </td>
- </tr>
-
- <tr id="fugu">
- <td>Nexus Player <br>"fugu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >fugu-ota-npd90g-3a0643ae.zip</a><br>
- MD5: 9c38b6647fe5a4f2965196b7c409f0f7<br>
- SHA-1: 77c6fb05191f0c2ae0956bae18f1c80b2f922f05
- </td>
- </tr>
-
- <tr id="ryu">
- <td>Pixel C <br>"ryu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >ryu-ota-npd90g-ec931914.zip</a><br>
- MD5: 4c6135498ca156a9cdaf443ddfdcb2ba<br>
- SHA-1: 297cc9a204685ef5507ec087fc7edf5b34551ce6
- </td>
- </tr>
-
- <tr id="seed">
- <td>General Mobile 4G (Android One) <br>"seed"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >seed_l8150-ota-npd90g-dcb0662d.zip</a><br>
- MD5: f40ea6314a13ea6dd30d0e68098532a2<br>
- SHA-1: 11af10b621f4480ac63f4e99189d61e1686c0865
- </td>
- </tr>
-
-</table>
-
-
- </div><!-- landing -->
-
-</div><!-- relative wrapper -->
-
-
-
-<script>
- var urlRoot = "http://storage.googleapis.com/androiddevelopers/shareables/preview/ota/";
- 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/download.jd b/docs/html-intl/intl/pt-br/preview/download.jd
deleted file mode 100644
index 4477142..0000000
--- a/docs/html-intl/intl/pt-br/preview/download.jd
+++ /dev/null
@@ -1,544 +0,0 @@
-page.title=Testes em um dispositivo
-meta.tags="preview", "nexus","system image"
-page.tags="preview", "androidn"
-page.image=images/cards/card-n-downloads_2x.png
-
-@jd:body
-
-<div style="position:relative; min-height:600px">
-
- <div class="wrap" id="tos" style="position:absolute;display:none;width:inherit;">
-
- <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" refere-se à 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 “Compatível com Android” significa qualquer implementação do Android que (i) obedece ao documento Definição de Compatibilidade com Android, que pode ser encontrado no site de compatibilidade do Android (http://source.android.com/compatibility) que pode ser atualizado de tempos em tempos; e (ii) seja aprovado no Android Compatibility Test Suite (CTS).
-
-1.4 “Google” se refere à 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 deste Contrato de licença, a Google confere uma licença limitada, mundial, sem royalties, intransmissível, não exclusiva e não sublicenciável unicamente para o uso do Preview exclusivamente para o desenvolvimento de aplicativos executados para implementações compatíveis do Android.
-
-3.2 Você não poderá usar este Preview para desenvolver aplicativos para outras plataformas (incluindo implementações não compatíveis do Android) nem para desenvolver outro SDK. Você tem a liberdade para desenvolver aplicativos para outras plataformas, incluindo implementações não compatíveis do Android, desde que este Preview não seja usado para essa finalidade.
-
-3.3 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.4 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.5 O uso, a reprodução e a distribuição de componentes do Preview licenciado sob uma 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 situação regular 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 Preview que a Google fornece podem mudar sem aviso prévio e que as versões futuras do Preview podem ser incompatíveis com aplicativos desenvolvidos em versões anteriores do Preview. 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. O uso do Preview
-
-4.1 A Google entende que nada no Contrato de Licença dá a ela direitos, título nem interesse sobre o usuário (ou sobre os seus licenciadores) sob o presente Contrato de licença nem sobre quaisquer aplicativos de software que o usuário desenvolver usando o Preview, incluindo quaisquer direitos de propriedade intelectual que subsistem 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 de dados ou softwares dos e para os Estados Unidos ou 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 dos 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 que possa acessar 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 proprietários.
-
-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="#device-preview">Configurar um dispositivo de hardware</a>
- <ol>
- <li><a href="#ota">Obter atualizações OTA</a></li>
- <li><a href="#flash">Atualizar um dispositivo manualmente</a></li>
- <li><a href="#revertDevice">Desinstalar</a></li>
- </ol>
- </li>
- <li><a href="#setupAVD">Configurar um emulador</a></li>
- </ol>
- </div>
-</div>
-
-<p>
- Para executar e testar o aplicativo na nova plataforma, você deve configurar um ambiente de tempo de execução do
- Android N. Isso pode ser feito das seguintes maneiras:
-</p>
-
-<ul>
- <li>Instale o Android N em um dispositivo de hardware compatível ou</li>
- <li>Configure um emulador do Android que execute o Android N</li>
-</ul>
-
-<p>
- Se quiser um ambiente para fazer testes básicos de compatibilidade do seu aplicativo na
- nova plataforma, você só precisará do APK atual e de um dispositivo de hardware ou
- emulador. Não é necessário atualizar o ambiente de desenvolvimento completo
- para fazer testes básicos.
-</p>
-
-<p>
- Se quiser modificar seu aplicativo para direcioná-lo ao Android N ou usar as novas APIs do Android N,
- você deverá configurar um ambiente de desenvolvimento atualizado para oferecer suporte ao
- Android N. O documento <a href="{@docRoot}preview/setup-sdk.html">Preparação para desenvolver para o
- Android N</a> oferece os detalhes.
-</p>
-
-
-<h2 id="device-preview">Configurar um dispositivo de hardware</h2>
-
-<p>
- O N Developer Preview oferece atualizações de sistema para diversos dispositivos de hardware
- que podem ser usados para testar o aplicativo, de celulares a tablets e televisões.
-</p>
-
-<p>
- Se você tiver acesso a um dispositivo compatível, poderá atualizá-lo para uma versão de marco do Developer
- Preview de uma das seguintes maneiras:
-</p>
-
-<ul>
- <li><strong>Inscreva o dispositivo nas atualizações de sistema automáticas por OTA</strong> usando o
- <a href="https://g.co/androidbeta"> Android Beta Program</a>. Após a inscrição, seu dispositivo receberá atualizações regulares
- por OTA de todas as versões de marco do N Developer Preview. Essa
- abordagem é recomendada porque ela permite que você faça uma transição tranquila do ambiente
- atual para as várias versões do N Developer Preview.</li>
- <li><strong>Faça o download de uma imagem de sistema do Developer Preview e atualize o dispositivo manualmente</strong>.
- Atualizações por OTA não são fornecidas automaticamente para dispositivos que são atualizados manualmente, mas
- é possível inscrever esses dispositivos no programa beta do Android para receber atualizações por OTA. </li>
-</ul>
-
-<h3 id="ota">Inscrever o dispositivo para receber atualizações automáticas por OTA</h3>
-
-<p>
- Se você tiver acesso a um dispositivo compatível (veja a lista na tabela de
- downloads), poderá receber atualizações por OTA de versões do Preview do Android
- ao inscrever esse dispositivo no <a href="https://g.co/androidbeta">programa beta do Android</a>. Essas atualizações são
- baixadas automaticamente e serão aplicadas no dispositivo da mesma maneira que
- atualizações de sistema oficiais.
-</p>
-
-<p>
- Você pode cancelar a inscrição do dispositivo a qualquer momento. O dispositivo receberá uma atualização por OTA
- para a versão de produção mais recente disponível do Android para o dispositivo em questão
- (por exemplo, o Android 6.0 Marshmallow). Essa atualização exige que o dispositivo seja totalmente
- redefinido, portanto, os dados do usuário serão removidos. Não deixe de <strong>fazer o backup
- de dados importantes</strong> antes de cancelar a inscrição de um dispositivo.
-</p>
-
-<p>
- Para saber mais e para inscrever seu dispositivo, consulte
- o site do <a href="https://g.co/androidbeta">programa beta do Android</a>.
-</p>
-
-<p class="note"><strong>Observação:</strong>
- Cancelar um dispositivo exige uma redefinição total. Faça primeiro o backup
- de dados importantes.
-</p>
-
-<h3 id="flash">Atualizar um dispositivo manualmente</h3>
-
-<p>
- A qualquer momento, você pode fazer o download da imagem de sistema mais recente do Developer Preview e
- aplicá-la manualmente ao dispositivo. Consulte a tabela abaixo para fazer o download da
- imagem de sistema para o dispositivo de teste. A atualização manual de um dispositivo é útil se você precisa de um
- controle preciso sobre o ambiente de teste ou se precisa reinstalar com frequência,
- como em testes automatizados.
-</p>
-
-<!-- You can flash by ota or system image --><p>
- Instalar uma imagem de sistema em um dispositivo <strong>remove todos os dados
- do dispositivo</strong>, portanto, faça primeiro o backup dos dados.
-</p>
-
-<p>
- Após fazer o backup dos dados do dispositivo e baixar a imagem de sistema abaixo que
- corresponda ao seu dispositivo, siga as instruções em<a href="https://developers.google.com/android/nexus/images#instructions"> developers.google.com/android</a>
- para aplicar a imagem no dispositivo.
-</p>
-
-<p>
- Imagens de sistema atualizadas manualmente <strong>não recebem
- atualizações por OTA automaticamente</strong> para versões de marco posteriores do
- Developer Preview. Mantenha o ambiente atualizado e aplique
- uma nova imagem de sistema a cada marco do Developer Preview.
-</p>
-
-<p>
- Se decidir que deseja obter atualizações por OTA após atualizar um dispositivo manualmente,
-basta inscrevê-lo no <a href="https://g.co/androidbeta">programa beta
- do Android</a>. É possível inscrever dispositivos a qualquer momento para receber a próxima atualização do Preview
- por OTA.
-</p>
-
-<table>
- <tr>
- <th scope="col">Dispositivo</th>
- <th scope="col">Download / Checksums</th>
- </tr>
-
- <tr id="bullhead">
- <td>Nexus 5X <br>"bullhead"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >bullhead-npd90g-factory-7a0ca1bc.tgz</a><br>
- MD5: e7a9a3061335c1e0c8be2588f13290af<br>
- SHA-1: 7a0ca1bcfa51bbefde34243603bc79c7dec214a1
- </td>
- </tr>
-
- <tr id="shamu">
- <td>Nexus 6 <br>"shamu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >shamu-npd90g-factory-f7a4e3a9.tgz</a><br>
- MD5: 2fb572ddcfca67bb1d741be97492a9ed<br>
- SHA-1: f7a4e3a96c797827492998e855c8f9efbfc8559a
- </td>
- </tr>
-
- <tr id="angler">
- <td>Nexus 6P <br>"angler"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >angler-npd90g-factory-cd9ac81e.tgz</a><br>
- MD5: 2370c30f3ef1d0684c1de5216a5d90fe<br>
- SHA-1: cd9ac81ec7f4a646ac6054eecbf2ea4c4b89b054
- </td>
- </tr>
-
- <tr id="volantis">
- <td>Nexus 9 <br>"volantis"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantis-npd90g-factory-41b55406.tgz</a><br>
- MD5: cefa78950141da2a7c75e887717e3c8f<br>
- SHA-1: 41b554060263a7ef16e4be8422cbd6caca26e00f
- </td>
- </tr>
-
- <tr id="volantisg">
- <td>Nexus 9G <br>"volantisg"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantisg-npd90g-factory-610492be.tgz</a><br>
- MD5: 2f36dc0d0fab02ab78be500677ec239f<br>
- SHA-1: 610492bedfc4127023040ecb2c89239a78a900ad
- </td>
- </tr>
-
- <tr id="fugu">
- <td>Nexus Player <br>"fugu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >fugu-npd90g-factory-0fe95694.tgz</a><br>
- MD5: f4cb48f919e4c29c631de21416c612e2<br>
- SHA-1: 0fe95694e7bc41e4c3ac0e4438cd77102a0aa8b4
- </td>
- </tr>
-
- <tr id="ryu">
- <td>Pixel C <br>"ryu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >ryu-npd90g-factory-f4da981c.tgz</a><br>
- MD5: d9f0e40b6c20d274831e8a7d285fd887<br>
- SHA-1: f4da981c70576133321e2858e52fe2c990e68a75
- </td>
- </tr>
-
- <tr id="seed">
- <td>General Mobile 4G (Android One) <br>"seed"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >seed_l8150-npd90g-factory-48f59c99.tgz</a><br>
- MD5: 0ed565c509594072822d71c65b48ec8e<br>
- SHA-1: 48f59c99ac43d1cd2f5656a283bb9868581663a8
- </td>
- </tr>
-
-</table>
-
-<h3 id="revertDevice">Desinstalar o Preview de um dispositivo</h3>
-
-<p>
- O Preview pode ser desinstalado de um dispositivo de uma das
- seguintes maneiras: </p>
- <ul>
- <li><strong>Obtenha uma imagem de sistema com especificações de fábrica</strong> e aplique-a
- manualmente no dispositivo.
- <ul>
- <li>Para <strong>dispositivos Nexus e Pixel C</strong>, consulte
- a página de downloads de <a href="http://developers.google.com/android/nexus/images">Imagens de fábrica
- para dispositivos Nexus</a>. </li>
- <li>Para <strong>outros dispositivos</strong>, entre em contato
- diretamente com o fabricante. Alternativamente, se o dispositivo for compatível
- com o programa beta do Android, será possível inscrevê-lo no
- programa e depois cancelar a inscrição (veja abaixo).</li>
- </ul>
- </li>
- <li><strong>Cancele a inscrição do dispositivo no programa beta do Android</strong>. Se o
- dispositivo estiver inscrito no <a href="https://g.co/androidbeta">programa beta
-do Android</a>, independentemente de qual ele seja, você poderá simplesmente cancelar a inscrição.
- <p>
- O dispositivo receberá uma atualização por OTA para a versão
- de produção mais recente disponível do Android para o dispositivo em questão (por exemplo, o Android 6.0 Marshmallow).
- Essa atualização exige que o dispositivo seja totalmente redefinido, portanto, os dados do usuário serão
- removidos. Não deixe de <strong>fazer o backup de dados importantes</strong> antes de
- cancelar a inscrição de um dispositivo.
- </p>
- </li>
-</ul>
-
-<p class="note"><strong>Observação:</strong>
- Para desinstalar uma imagem de sistema do Developer Preview antes do
- fim do programa, é preciso redefinir o dispositivo por completo e remover todos os dados
- do usuário no dispositivo.
-</p>
-
-
-<h2 id="setupAVD">Configurar um emulador</h2>
-
-<p>Para usar o emulador do Android para executar o Android N Preview, você deve
-fazer o download do Android N Preview SDK e criar um dispositivo virtual para o
-emulador.</p>
-
-<p>Primeiro, faça o download do Android N Preview SDK da seguinte maneira (se você
-já adquiriu esse recurso ao <a href="{@docRoot}preview/setup-sdk.html">se preparar
-para desenvolver para o Android N</a>, pule esta etapa):
-
-<ol>
- <li>No Android Studio, abra a caixa de diálogo Settings
- (<strong>File > Settings</strong> no Windows/Linux ou
- <strong>Android Studio > Preferences</strong> no Mac). No
- painel à esquerda, selecione <strong>Appearance & Behavior >
- System Settings > Android SDK</strong>.
-
- <li>Clique na guia <strong>SDK Platforms</strong> e marque a caixa de seleção
- <strong>Android N Preview</strong>.</li>
-
- <li>Clique na guia <strong>SDK Tools</strong> e marque as caixas de seleção
- <strong>Android SDK Build Tools</strong>, <strong>Android SDK
- Platform-Tools</strong> e <strong>Android SDK Tools</strong>
-.
- </li>
-
- <li>Clique em <strong>OK</strong> e aceite os termos de licença
- de qualquer pacote que precise ser instalado.
- </li>
-</ol>
-
-<p>Agora, você deve ter o <strong>Android SDK Built-Tools 24.0 0 rc1</strong>,
-o <strong>Platform-Tools 24.0.0 rc1</strong> e o <strong>SDK Tools
-25.0.9</strong>. Se você não atualizar o SDK Tools para a versão 25.0.9, não será
-possível executar as imagens de sistema x86_64 para o Android N.</p>
-
-
-<p>Agora, crie um dispositivo virtual com a imagem de sistema do Android N:</p>
-
-<ol>
- <li>Abra o AVD Manager selecionando <strong>Tools > Android >
- AVD Manager</strong>.</li>
- <li>Clique em <strong>Create Virtual Device</strong>.</li>
- <li>Selecione um dispositivo como Nexus 5X, Nexus 6P, Nexus 9 ou Android TV
- e clique em <strong>Next</strong>.</li>
- <li>Selecione a imagem de sistema <strong>N</strong> (com ABI
- <strong>x86</strong>) e clique em <strong>Next</strong>.
- (Apenas imagens de sistema x86 atualmente são compatíveis com o emulador do Android
-para o Android N Preview.)
- <li>Conclua a configuração do AVD e clique em
- <strong>Finish</strong>.</li>
-</ol>
-
-<p>Agora, é possível iniciar o emulador do Android com o AVD Android N Preview.</p>
-
-<p>
-Para ter a melhor experiência possível com o emulador do Android, instale o
-Android Studio 2.1 ou mais recente, que oferece suporte ao <a href="http://tools.android.com/tech-docs/emulator">Android Emulator 2.0</a>,
-cujo desempenho é muito superior ao do emulador no
-Android Studio 1.5.</p>
-
-<p>Para saber mais sobre como criar dispositivos virtuais para teste, consulte <a href="{@docRoot}tools/devices/index.html">Gerenciamento de dispositivos virtuais</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/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/afw.jd b/docs/html-intl/intl/pt-br/preview/features/afw.jd
deleted file mode 100644
index 977d2a0..0000000
--- a/docs/html-intl/intl/pt-br/preview/features/afw.jd
+++ /dev/null
@@ -1,552 +0,0 @@
-page.title=Atualizações no Android for Work
-page.metaDescription=Novas APIs do Android for Work e novos recursos do Android N.
-page.keywords="android for work", "android N", "enterprise", "QR code"
-
-@jd:body
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>Neste documento</h2>
- <ol>
- <li><a href="#qr">Provisionamento de código QR
-</a></li>
-
- <li><a href="#sec-challenge">Desafio de segurança de perfil de trabalho
-</a></li>
-
- <li><a href="#suspend">Desativar acesso a aplicativos
-</a></li>
-
- <li><a href="#toggle-work">Alternar modo de trabalho
-</a></li>
-
- <li><a href="#always-on-vpn">Always-On VPN
-</a></li>
-
- <li><a href="#contacts">Integração de contatos com perfil de trabalho
-</a></li>
-
- <li><a href="#remote-reboot">Reinicialização remota
-</a></li>
-
- <li><a href="#disable-roaming">Desativação de roaming de dados
-</a></li>
-
- <li><a href="#process-logging">Registro do processo empresarial
-</a></li>
-
- <li><a href="#bug-reports">Relatórios de erros remotos
-</a></li>
-
- <li><a href="#remove-cert">Remoção de certificado do cliente
-</a></li>
-
- <li><a href="#grant-cert-on-install">Concessão de acesso a certificado do cliente
-na instalação</a></li>
-
- <li><a href="#ui-policy">Transparência da política de IU do sistema
-</a></li>
-
- <li><a href="#restrictions-mgmt">Melhorias no gerenciamento de restrições de aplicativos
-</a></li>
-
- <li><a href="#location-off">Interruptor para desativar localidade
-</a></li>
-
- <li><a href="#custom-provisioning">Provisionamento personalizado
-</a></li>
-
- <li><a href="#multi-wifi-ca">Diversos certificados de CA para Wi-Fi
-</a></li>
-
- <li><a href="#custom-lock">Mensagem de tela de bloqueio personalizada
-</a></li>
-
- <li><a href="#work-connectionservice">Perfil de trabalho ConnectionService
-</a></li>
-
- <li><a href="#lock-wp">Bloqueio de plano de fundo
-</a></li>
-
- <li><a href="#lock-user-icon">Bloqueio de ícone de usuário
-</a></li>
-
- <li><a href="#health-monitoring">Monitoramento da saúde do dispositivo
-</a></li>
-
- </ol>
-
- <h2>Veja também</h2>
- <ul>
- <li><a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência
-do N Preview SDK</a></li>
- </ul>
- </div>
-</div>
-
-<p>Este documento descreve os novos recursos do Android for Work oferecidos no
-Android N.</p>
-
-<h2 id="qr">Provisionamento de código QR</h2>
-
-<p>
- O Android for Work agora é compatível com o uso de códigos QR para fornecimento de dispositivos
-de responsabilidade corporativa. Este assistente de configuração permite a digitalização de um código QR para fornecer
-ao dispositivo.
-</p>
-
-<h2 id="sec-challenge">Desafio de segurança de perfil de trabalho</h2>
-
-<p>
- Donos de perfis podem exigir que os usuários especifiquem um desafio de segurança para aplicativos
-em execução no perfil de trabalho. O sistema mostra o desafio de segurança quando o
-usuário tenta abrir qualquer aplicativo de trabalho. Se o usuário preencher corretamente o
- desafio de segurança, o sistema desbloqueará e, se necessário, descriptografará o
-perfil de trabalho.
-</p>
-
-<p>
- Se um dono de perfil enviar uma intenção {@link
- android.app.admin.DevicePolicyManager#ACTION_SET_NEW_PASSWORD}, o
- sistema solicitará que o usuário defina um desafio de segurança. O dono de perfil também
- pode enviar uma intenção <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> para
- solicitar que o usuário defina um bloqueio de dispositivo.
-</p>
-
-<p>
- Os donos de perfil podem escolher políticas de senha diferentes
- das políticas de outros dispositivos para o desafio de trabalho. Por exemplo, o
- tamanho mínimo da resposta do desafio no dispositivo pode ser diferente do tamanho
- exigido para outras senhas. Os donos de perfis definem as
-políticas do desafio por meio dos métodos {@link android.app.admin.DevicePolicyManager}
-usuais, como {@link
-android.app.admin.DevicePolicyManager#setPasswordQuality
-setPasswordQuality()} e {@link
-android.app.admin.DevicePolicyManager#setPasswordMinimumLength
-setPasswordMinimumLength()}. O dono de perfil também pode definir o bloqueio de dispositivo
-usando a instância de {@link android.app.admin.DevicePolicyManager} retornada
-pelo novo método <code>DevicePolicyManager.getParentProfileInstance()</code>
-. Além disso, donos de perfil podem personalizar a tela de credenciais do
-desafio de trabalho usando os novos métodos <code>setOrganizationColor()</code> e
- <code>setOrganizationName()</code> da classe {@link android.app.admin.DevicePolicyManager}
-.
-</p>
-
-<p>
- Para obter detalhes sobre os novos métodos e constantes, consulte a
-página de referência <code>DevicePolicyManager</code> na <a href="{@docRoot}preview/setup-sdk.html#docs-dl">referência do N Preview SDK</a>.
-</p>
-
-<h2 id="suspend">Desativar acesso a aplicativos</h2>
-
-<p>
- Donos de dispositivos e perfis podem suspender temporariamente o acesso a pacotes
- chamando o novo método <code>DevicePolicyManager.setPackagesSuspended()</code>
-. Os donos podem usar o mesmo método para reativar esses pacotes.
-</p>
-
-<p>
- Enquanto está suspenso, um pacote não consegue iniciar atividades, as notificações
- são suspensas e a entrada do aplicativo na <a href="{@docRoot}guide/components/recents.html">tela de visão geral</a> é ocultada.
- Os pacotes suspensos não são exibidos na <a href="{@docRoot}guide/components/recents.html">tela de visão geral</a> e não
- podem mostrar caixas de diálogo (incluindo avisos e snackbars). Também não conseguem reproduzir
- áudio nem vibrar o dispositivo.
-</p>
-
-<p>
- A tela de início pode aplicar uma IU destacada ao aplicativos suspensos para mostrar que
- não estão disponíveis. Podem, por exemplo, exibir o ícone do aplicativo
- em cinza. A tela de início pode descobrir se um aplicativo está suspenso chamando o novo método
- <code>DevicePolicyManager.getPackageSuspended()</code>.
-</p>
-
-<h2 id="toggle-work">Alternar modo de trabalho</h2>
-
-<p>
- Em dispositivos com dois perfis, o usuário pode ativar ou desativar o modo de trabalho. Quando o modo de trabalho
- é desativado, o perfil gerenciado é encerrado temporariamente. Os aplicativos,
- a sincronização em segundo plano e as notificações do perfil de trabalho são desativados, inclusive
- o aplicativo do dono do perfil. Quando o modo de trabalho está desativado, o sistema
- exibe um ícone de status persistente para lembrar ao usuário que não é possível iniciar aplicativos
-de trabalho. A tela de início indica que os aplicativos e widgets de trabalho não podem
- ser acessados.
-</p>
-
-<h2 id="always-on-vpn">Always-On VPN</h2>
-
-<p>
- Os donos de dispositivo e perfil podem exigir que os aplicativos de trabalho se conectem sempre
-por meio de uma VPN especificada. Se os donos definirem este requisito, o
- dispositivo iniciará a VPN automaticamente na inicialização.
-</p>
-
-<p>
- Os donos podem exigir o uso de uma VPN chamando o novo
-método <code>DevicePolicyManager.setAlwaysOnVpnPackage()</code>. Para descobrir
- se o dono definiu um requisito de VPN, chame o novo
- método <code>DevicePolicyManager.GetAlwaysOnVpnPackage()</code>.
-</p>
-
-<p>
- Como o sistema pode vincular os serviços de VPN diretamente sem interação com aplicativos,
- os clientes de VPN precisam processar novos pontos de entrada para a Always-on VPN. Como antes, você
- pode encontrar serviços ativos usando um filtro de intenção que corresponda à ação
- {@link android.net.VpnService android.net.VpnService}.
-</p>
-
-<p>
- Os usuários podem configurar manualmente um cliente de VPN always-on que implemente {@link
-android.net.VpnService} usando a tela <strong>Settings > More >
- VPN</strong>.
-</p>
-
-<h2 id="contacts">Integração de contatos com perfil de trabalho</h2>
-
-<p>
- Os donos de perfil podem permitir pesquisa local e busca no diretório de contatos de trabalho
- do usuário principal. Por exemplo, um usuário pode acessar os diretórios de contatos
- pessoais e de trabalho no telefone ou no aplicativo de contatos particular (se
- permitido pelo administrador do perfil).
-</p>
-
-<p>
- Desenvolvedores que se valem do Provedor de Contatos podem usar a Enterprise Contacts API
- para acessar as entradas do diretório do perfil de trabalho do usuário principal se permitido
- pela política:
-</p>
-
-<ul>
- <li><code>ContactsContract.Contacts.ENTERPRISE_CONTENT_FILTER_URI</code>
- </li>
-
- <li><code>ContactsContract.Phone.ENTERPRISE_CONTENT_FILTER_URI</code>
- </li>
-
- <li><code>ContactsContract.Email.ENTERPRISE_CONTENT_FILTER_URI</code>
- </li>
-
- <li><code>ContactsContract.Callable.ENTERPRISE_CONTENT_FILTER_URI</code>
- </li>
-
- <li><code>ContactsContract.Directory.ENTERPRISE_CONTENT_URI</code>
- </li>
-
- <li><code>ContactsContract.Directory.isEntepriseDirectoryId()</code>
- </li>
-</ul>
-
-<p>
- Donos de perfis podem controlar a visibilidade de contatos de trabalho no usuário
- principal usando os seguintes novos métodos:
-</p>
-
-<ul>
- <li>
- <code>DevicePolicyManager.setCrossProfileContactsSearchDisabled()</code>
- </li>
-
- <li>
- <code>DevicePolicyManager.getCrossProfileContactsSearchDisabled()</code>
- </li>
-</ul>
-
-<h2 id="remote-reboot">Reinicialização remota</h2>
-
-<p>
- Donos de dispositivos podem reinicializá-los remotamente. Em alguns casos, dispositivos implementados
- dentro de compartimentos em locais públicos podem impedir o acesso ao botão liga/desliga. Se um
- dispositivo precisar de reinicialização, os administradores poderão fazer isso usando o novo
- método <code>DevicePolicyManager.reboot()</code>.
-</p>
-
-<h2 id="disable-roaming">Desativação de roaming de dados</h2>
-
-<p>
- Os donos de dispositivos podem desativar o roaming de dados usando a nova restrição de usuário <code>DISALLOW_DATA_ROAMING</code> do {@link
-android.os.UserManager}.
-</p>
-
-<h2 id="process-logging">Registro do processo empresarial</h2>
-
-<p>
- Donos de dispositivos podem monitorá-los remotamente
- para identificar atividades suspeitas, incluindo inicialização de aplicativos, atividade adb e desbloqueios de tela. Registros de processo
- não exigem consentimento do usuário. Para recuperar os registros, os donos de dispositivos precisam ativar
-o registro no dispositivo usando <code>DevicePolicyManager.setSecurityLoggingEnabled()</code>.
-</p>
-
-<p>
- As mudanças na API incluem:
-</p>
-
-<ul>
-
- <li>
- A nova classe <code>android.app.admin.SecurityLog</code> e seus
- métodos
- </li>
-
- <li>
- <code>void DevicePolicyManager.setSecurityLoggingEnabled()</code>
- </li>
-
- <li>
- <code>boolean DevicePolicyManager.isSecurityLoggingEnabled()</code>
- </li>
-
- <li>
- <code>List<SecurityEvent>
- DevicePolicyManager.retrieveSecurityLogs()</code>
- </li>
-
- <li>
- <code>List<SecurityEvent>
- DevicePolicyManager.retrievePreRebootSecurityLogs()</code>
- </li>
-
- <li>
- <code>void DeviceAdminReceiver.onSecurityLogsAvailable()</code>
- </li>
-</ul>
-
-<h2 id="bug-reports">Relatórios de erros remotos</h2>
-
-<p>
- Donos de dispositivos podem acionar e recuperar remotamente um relatório de erros que contém um
- arquivo de despejo, o que permite a investigação forense de um incidente
- conhecido ou um dispositivo danificado. Devido à natureza detalhada do relatório de erros,
- ele só é gerado com o consentimento do usuário.
-</p>
-
-<p>
- O Android N inclui as seguintes adições de API para dar suporte a este recurso. Para
-obter detalhes, consulte a <a href="{@docRoot}preview/setup-sdk.html#docs-dl"> Referência do N
- Preview SDK</a>.
-</p>
-
-<ul>
- <li>
- <code>DevicePolicyManager.requestBugreport()</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.onBugreportFailed()</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.onBugreportShared()</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.onBugreportSharingDeclined()</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.BUGREPORT_FAILURE_FAILED_COMPLETING</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.BUGREPORT_FAILURE_FILE_NO_LONGER_AVAILABLE</code>
- </li>
-</ul>
-
-<h2 id="remove-cert">Remoção de certificado do cliente</h2>
-
-<p>
- Agora, donos de perfis e dispositivos podem remover certificados de cliente que foram
-instalados por meio do {@link android.app.admin.DevicePolicyManager#installKeyPair
- installKeyPair()} chamando o novo método
- <code>DevicePolicyManager.removeKeyPair()</code>.
-</p>
-
-<h2 id="grant-cert-on-install">Concessão de acesso a certificado do cliente
-na instalação</h2>
-
-<p>
- Se um dono de perfil ou dispositivo conceder a um aplicativo de terceiros a capacidade de
- gerenciar certificados, o próprio aplicativo poderá conceder acesso a certificados que
- tenha instalado sem qualquer intervenção do dono.
-</p>
-
-<p>
- A API existente para gerenciamento de certificados foi expandida para incluir:
-</p>
-
-<ul>
- <li><code>DevicePolicyManager.installKeyPair()</code>
- </li>
-</ul>
-
-<h2 id="ui-policy">Transparência da política de IU do sistema</h2>
-
-<p>
- Políticas que afetem a experiência do usuário ou restrinjam Settings são
- totalmente divulgadas e os donos de perfis e dispositivos podem atribuir a
- política ao departamento de TI da empresa. Além de incluir uma mensagem consistente de "Ação
- não permitida” em Settings, os administradores de TI podem definir uma
- mensagem de suporte específica para a organização nas configurações do dispositivo com os seguintes
- novos métodos {@link android.app.admin.DevicePolicyManager}:
-</p>
-
-<ul>
- <li>
- <code>DevicePolicyManager.setShortSupportMessage()</code>
- </li>
-
- <li>
- <code>DevicePolicyManager.setLongSupportMessage()</code>
- </li>
-</ul>
-
-<h2 id="restrictions-mgmt">Melhorias no gerenciamento de restrições de aplicativos</h2>
-
-<p>
- O dono do dispositivo ou perfil pode habilitar outro aplicativo para gerenciar restrições de aplicativo
- por meio do novo
- método <code>DevicePolicyManager.setApplicationRestrictionsManagingPackage()</code>
-. O aplicativo indicado pode verificar se a permissão foi
-concedida chamando
- <code>DevicePolicyManager.isCallerApplicationRestrictionsManagingPackage()</code>.
-</p>
-
-<p>
- Um aplicativo indicado para gerenciar restrições de aplicativos pode chamar {@link
- android.app.admin.DevicePolicyManager#setApplicationRestrictions
-setApplicationRestrictions()} e {@link
-android.app.admin.DevicePolicyManager#getApplicationRestrictions
-getApplicationRestrictions()} para quaisquer pacotes dentro daquele usuário ou perfil.
-</p>
-
-<h2 id="location-off">Interruptor para desativar localidade</h2>
-
-<p>
- Os usuários podem desativar as permissões de localidade para aplicativos de trabalho sem deixar de
- acessar informações de localidade em seus aplicativos pessoais. Um interruptor de acesso de localidade
- em separado em Location Settings permite que o usuário impeça atualizações de localização ou
- consultas de última localidade em aplicativos executados no perfil de trabalho.
-</p>
-
-<p>
- O interruptor de desligamento de localidade em nível superior desativa o acesso à localidade para o
- perfil principal e o perfil gerenciado.
-</p>
-
-<h2 id="custom-provisioning">Provisionamento personalizado</h2>
-
-<p>
- Um aplicativo pode personalizar os fluxos de provisionamento do dono do perfil e do dispositivo
- com cores e logos corporativos.
-</p>
-
-<dl>
- <dt>
- <code>DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR</code>
- </dt>
-
- <dd>
- Personaliza a cor do fluxo.
- </dd>
-
- <dt>
- <code>DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI</code>
- </dt>
-
- <dd>
- Personaliza o fluxo com um logo corporativo.
- </dd>
-</dl>
-
-<h2 id="multi-wifi-ca">Diversos certificados de CA para Wi-Fi</h2>
-
-<p>
- Donos de dispositivos e perfis podem definir vários certificados de CA para uma determinada
- configuração de Wi-Fi. Quando redes Wi-Fi corporativas têm CA separadas para
- pontos de acesso separados com o mesmo SSID, os administradores de TI podem incluir todas as
- CA correspondentes na configuração de Wi-Fi usando o novo método
- <code>setCaCertificates()</code>.
-</p>
-
-<p>
- As APIs adicionadas foram:
-</p>
-
-<ul>
- <li>
- <code>WifiEnterpriseConfig.setCaCertificates()</code>
- </li>
-
- <li>
- <code>WifiEnterpriseConfig.getCaCertificates()</code>
- </li>
-</ul>
-
-<h2 id="custom-lock">Mensagem de tela de bloqueio personalizada</h2>
-
-<p>
- Donos de dispositivos podem fornecer informações a ser exibidas na tela de bloqueio.
- Essas informações têm prioridade sobre a mensagem do usuário na tela de bloqueio (se houver uma
- definida). Os novos métodos {@link android.app.admin.DevicePolicyManager} são:
-</p>
-
-<ul>
- <li>
- <code>setDeviceOwnerLockScreenInfo()</code>
- </li>
-
- <li>
- <code>getDeviceOwnerLockScreenInfo()</code>
- </li>
-</ul>
-
-<h2 id="work-connectionservice">Perfil de trabalho ConnectionService</h2>
-
-<p>
- Os donos de perfil podem especificar um aplicativo de telefone de trabalho que usa um
- {@link android.telecom.ConnectionService} específico para trabalho para o back-end de
- chamada (contas de chamada). O telefone de trabalho só mantém um registro de chamadas de trabalho
- e baseia-se apenas em contatos de trabalho. Os usuários têm uma experiência consistente
- de IU em chamada em qualquer aplicativo de ligação. As chamadas recebidas pelas contas de trabalho
- são distintas das chamadas recebidas pelas
-contas pessoais.
-</p>
-
-<p>
- O telefone deve verificar o novo sinalizador
- <code>android.telecom.Call.PROPERTY_WORK_CALL</code> para determinar se a chamada
- é de trabalho. Se for de trabalho, o telefone deverá indicar o fato
- adicionando um distintivo de trabalho, por exemplo.
-</p>
-
-<h2 id="lock-wp">Bloqueio de plano de fundo</h2>
-
-<p>
- Uma nova restrição de usuário (<code>DISALLOW_SET_WALLPAPER</code>) impede que
- o usuário altere o plano de fundo. O dono do dispositivo ou perfil ainda pode
- alterar o plano de fundo, mas só consegue mudar o plano de fundo
- do usuário ou perfil que controla. Por exemplo, um dono de perfil não consegue mudar o
-plano de fundo do usuário pai, mas o dono de um perfil principal e
- o dono do dispositivo conseguem. Um dono de perfil ou dispositivo que queira alterar o
- plano de fundo precisa verificar se o usuário ou perfil que gerencia tem um
- plano de fundo ({@link android.app.WallpaperManager#isWallpaperSupported
- isWallpaperSupported()}) e se possui permissão para alterá-lo (com o
- novo método <code>WallpaperManager.isWallpaperSettingAllowed()</code>)
-</p>
-
-<h2 id="lock-user-icon">Bloqueio de ícone de usuário</h2>
-
-<p>
- Uma nova restrição de usuário (<code>DISALLOW_SET_USER_ICON</code>) impede que
- o usuário altere o ícone de usuário. O dono do dispositivo ou perfil
- ainda pode alterar o ícone. No entanto, um dono de perfil só consegue alterar o
- ícone de usuário do perfil que controla.
-</p>
-
-<h2 id="health-monitoring">Monitoramento da saúde do dispositivo</h2>
-
-<p>
- Um dono de perfil ou dispositivo pode usar a nova interface
- <code>HardwarePropertiesManager</code> para recuperar informações importantes
- sobre a integridade do dispositivo, como temperatura da CPU ou da GPU e uso de CPU. A nova
- interface de monitoramento é especialmente útil para monitorar dispositivos não assistidos
- executados em uma localidade remota.
-</p>
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/data-saver.jd b/docs/html-intl/intl/pt-br/preview/features/data-saver.jd
deleted file mode 100644
index f42b9cf..0000000
--- a/docs/html-intl/intl/pt-br/preview/features/data-saver.jd
+++ /dev/null
@@ -1,234 +0,0 @@
-page.title=Economia de dados
-metaDescription=User-enabled otimização de uso de dados.
-page.keywords="android N", "data usage", "metered network"
-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="#status">Verificação de preferências da Economia de dados</a>
- <ol>
- <li>
- <a href="#request-whitelist">Solicitação de permissão para colocar na lista de permissões</a>
- </li>
- </ol>
- </li>
-
- <li>
- <a href="#monitor-changes">Monitoramento de preferências do
- Economia de dados</a>
- </li>
-
- <li>
- <a href="#testing">Teste com comandos do Android Debug Bridge</a>
- </li>
- </ol>
- </div>
-</div>
-
-<p>
- Durante a vida útil de um smartphone, o custo do plano de dados pode
-facilmente exceder o custo do próprio dispositivo. No N Developer Preview, os usuários podem
- ativar a Economia de dados no dispositivo como um todo para usar menos dados, seja
- em roaming, perto do final do período de cobrança ou em pacotes de dados pré-pagos pequenos.
-</p>
-
-<p>
- Quando um usuário ativa a Economia de dados em <strong>Settings</strong> e o dispositivo está
-em uma rede tarifada, o sistema bloqueia o uso de dados em segundo plano e avisa
- aos aplicativos para reduzir o uso de dados no primeiro plano sempre que possível. Os usuários podem
-autorizar aplicativos específicos a usar dados tarifados em segundo plano, mesmo com a Economia
- de dados ativada.
-</p>
-
-<p>
- O N Developer Preview estende a API {@link android.net.ConnectivityManager}
- para oferecer aos aplicativos uma forma de <a href="#status">recuperar as
-preferências do usuário para a Economia de dados</a> e <a href="#monitor-changes">monitorar
-as mudanças de preferências</a>. Como prática recomendada, os aplicativos devem verificar se o
- usuário ativou a Economia de dados e tentar limitar o uso de dados em primeiro e
- segundo plano.
-</p>
-
-<h2 id="status">
- Verificação de preferências da Economia de dados
-</h2>
-
-<p>
- No N Developer Preview, aplicativos podem usar a API {@link
- android.net.ConnectivityManager} para determinar quais restrições
- de uso de dados estão sendo aplicadas. O método {@code getRestrictBackgroundStatus()}
- retorna um dos seguintes valores:
-</p>
-
-<dl>
- <dt>
- {@code RESTRICT_BACKGROUND_STATUS_DISABLED}
- </dt>
-
- <dd>
- A Economia de dados está desativada.
- </dd>
-
- <dt>
- {@code RESTRICT_BACKGROUND_STATUS_ENABLED}
- </dt>
-
- <dd>
- O usuário ativou a Economia de dados para este aplicativo. Os aplicativos tentarão limitar o
- uso de dados em primeiro plano e gerenciar as restrições ao
- uso de dados em segundo plano.
- </dd>
-
- <dt>
- {@code RESTRICT_BACKGROUND_STATUS_WHITELISTED}
- </dt>
-
- <dd>
- O usuário ativou a Economia de dados, mas o aplicativo está na lista de permissões. Os aplicativos
- ainda tentarão limitar o uso de dados em primeiro e segundo plano.
- </dd>
-</dl>
-
-<p>
- É prática recomendada limitar o uso de dados sempre que o dispositivo
- estiver conectado a uma rede tarifada, mesmo que a Economia de dados esteja desativada e o aplicativo
- esteja na lista de permissões. O modelo de código a seguir usa {@link
- android.net.ConnectivityManager#isActiveNetworkMetered
- ConnectivityManager.isActiveNetworkMetered()} e {@code
- ConnectivityManager.getRestrictBackgroundStatus()} para determinar o volume máximo de dados
- que o aplicativo pode usar:
-</p>
-
-<pre>
-ConnectivityManager connMgr = (ConnectivityManager)
- getSystemService(Context.CONNECTIVITY_SERVICE);
-// Checks if the device is on a metered network
-if (connMgr.isActiveNetworkMetered()) {
- // Checks user’s Data Saver settings.
- switch (connMgr.getRestrictBackgroundStatus()) {
- case RESTRICT_BACKGROUND_STATUS_ENABLED:
- // Background data usage is blocked for this app. Wherever possible,
- // the app should also use less data in the foreground.
-
- case RESTRICT_BACKGROUND_STATUS_WHITELISTED:
- // The app is whitelisted. Wherever possible,
- // the app should use less data in the foreground and background.
-
- case RESTRICT_BACKGROUND_STATUS_DISABLED:
- // Data Saver is disabled. Since the device is connected to a
- // metered network, the app should use less data wherever possible.
- }
-} else {
- // The device is not on a metered network.
- // Use data as required to perform syncs, downloads, and updates.
-}
-</pre>
-
-<h3 id="request-whitelist">
- Solicitação de permissão para colocar na lista de permissões
-</h3>
-
-<p>
- Se o seu aplicativo precisa usar dados em segundo plano, ele pode solicitar permissão para
- entrar na lista de permissões enviando uma intenção
- <code>Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS</code>
- que contenha o URI no nome de pacote do aplicativo, por exemplo,
- <code>package:MY_APP_ID</code>.
-</p>
-
-<p>
- O envio da intenção e do URI abre o aplicativo <strong>Settings</strong> e
- exibe as configurações de uso de dados de seu aplicativo. O usuário pode decidir então se
- ativará os dados em segundo plano para o aplicativo. Antes de enviar a intenção, é
- prática recomendada perguntar primeiro ao usuário se ele deseja iniciar o
-aplicativo <strong>Settings</strong> com o objetivo de ativar o uso
- de dados em segundo plano.
-</p>
-
-<h2 id="monitor-changes">
- Monitoramento de alterações nas preferências da Economia de dados
-</h2>
-
-<p>
- Os aplicativos podem monitorar alterações nas preferências da Economia de dados criando um {@link
- android.content.BroadcastReceiver} para escutar {@code
-ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED} e registrar
- dinamicamente o receptor em {@link android.content.Context#registerReceiver
- Context.registerReceiver()}. Quando recebe esta transmissão, o aplicativo deve
- <a href="#status">verificar se as novas preferências da Economia de dados afetam
- as permissões</a> chamando {@code
- ConnectivityManager.getRestrictBackgroundStatus()}.
-</p>
-
-<p class="note">
- <strong>Observação:</strong> O sistema só envia esta transmissão para aplicativos que
- se registram dinamicamente para recebê-la em {@link
- android.content.Context#registerReceiver Context.registerReceiver()}. Os aplicativos
- que se registrarem para receber a transmissão no manifesto não a
- receberão.
-</p>
-
-<h2 id="testing">
- Teste com comandos do Android Debug Bridge
-</h2>
-
-O <a href="{@docRoot}tools/help/adb.html">Android Debug Bridge (ADB)</a>
-oferece alguns comandos que podem ser usados para verificar e configurar permissões
-de rede:
-
-<dl>
- <dt>
- <code>$ adb shell dumpsys netpolicy</code>
- </dt>
-
- <dd>
- Gera um relatório que inclui a configuração de restrição atual da rede de segundo plano global
-, os UIDs do pacote em lista de permissões e as permissões de rede
- de outros pacotes conhecidos.
- </dd>
-
- <dt>
- <code>$ adb shell cmd netpolicy</code>
- </dt>
-
- <dd>
- Exibe uma lista completa de comandos do Gerenciador de políticas de rede (netpolicy).
- </dd>
-
- <dt>
- <code>$ adb shell cmd netpolicy set restrict-background
- <boolean></code>
- </dt>
-
- <dd>
- Ativa ou desativa o modo da Economia de dados ao passar <code>true</code> ou
- <code>false</code>, respectivamente.
- </dd>
-
- <dt>
- <code>$ adb shell cmd netpolicy add restrict-background-whitelist
- <UID></code>
- </dt>
-
- <dd>
- Adiciona o UID do pacote especificado à lista de permissões para permitir o uso de dados de segundo plano
- tarifados.
- </dd>
-
- <dt>
- <code>$ adb shell cmd netpolicy remove restrict-background-whitelist
- <UID></code>
- </dt>
-
- <dd>
- Adiciona o UID do pacote especificado à lista de permissões para bloquear o uso de dados
- de segundo plano tarifados enquanto a Economia de dados estiver ativada.
- </dd>
-</dl>
\ No newline at end of file
diff --git a/docs/html-intl/intl/pt-br/preview/features/direct-boot.jd b/docs/html-intl/intl/pt-br/preview/features/direct-boot.jd
deleted file mode 100644
index 8f58841..0000000
--- a/docs/html-intl/intl/pt-br/preview/features/direct-boot.jd
+++ /dev/null
@@ -1,181 +0,0 @@
-page.title=Inicialização direta
-page.keywords=preview,sdk,direct boot
-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="#run">Solicitar acesso para executar durante a inicialização direta</a></li>
- <li><a href="#access">Acesso ao armazenamento criptografado do dispositivo</a></li>
- <li><a href="#notification">Receber notificação quando o usuário desbloquear</a></li>
- <li><a href="#migrating">Migrar dados existentes</a></li>
- <li><a href="#testing">Testar seu aplicativo com reconhecimento de criptografia</a></li>
- </ol>
-</div>
-</div>
-
-<p>O Android N é executado em um modo seguro de <i>inicialização direta</i>
-quando o dispositivo é ligado, mas o usuário não o
-desbloqueia. Para isso, o sistema oferece dois locais de armazenamento para dados:</p>
-
-<ul>
-<li><i>O armazenamento criptografado de credenciais</i>, que é o local de armazenamento padrão
-e é disponibilizado apenas depois que o usuário desbloqueia o dispositivo.</li>
-<li><i>O armazenamento criptografado do dispositivo</i>, que é um local de armazenamento disponibilizado
-durante o modo de inicialização direta e depois que o usuário desbloqueia o dispositivo.</li>
-</ul>
-
-<p>Por padrão, aplicativos não são executados no modo de inicialização direta.
-Se seu aplicativo precisa executar ações durante esse modo, você pode registrar os
-componentes que devem ser executados. Alguns casos comuns
-para aplicativos que precisam ser executados no modo de inicialização direta:</p>
-
-<ul>
-<li>Aplicativos com notificações programadas, como aplicativos de
-despertador.</li>
-<li>Aplicativos que fornecem notificações importantes ao usuário, como aplicativos de SMS.</li>
-<li>Aplicativos que fornecem serviços de acessibilidade, como o Talkback.</li>
-</ul>
-
-<p>Se seu aplicativo precisar acessar dados enquanto estiver no modo de inicialização direta, use
-o armazenamento criptografado do dispositivo. O armazenamento criptografado do dispositivo contém dados
-criptografados com uma chave que só é disponibilizada depois que o dispositivo realizou
-uma inicialização verificada com sucesso.</p>
-
-<p>Para dados que devem ser criptografados com uma chave associada às credenciais
-do usuário, como um PIN ou uma senha, use o armazenamento criptografado de credenciais.
-Esse armazenamento só é disponibilizado depois que o usuário
-desbloquear o dispositivo com sucesso e até que ele reinicie o dispositivo novamente. Se o
-usuário ativar a tela de bloqueio após desbloquear o dispositivo, isso não bloqueará
-o armazenamento criptografado de credenciais.</p>
-
-<h2 id="run">Solicitar acesso para executar durante a inicialização direta</h2>
-
-<p>Aplicativos devem registrar seus componentes com o sistema antes de
-poderem ser executados no modo de inicialização direta ou acessar o armazenamento criptografado
-do dispositivo. Os aplicativos são registrados com o sistema ao marcar os componentes como
-<i>tendo reconhecimento de criptografia</i>. Para marcar seu componente como tendo reconhecimento de criptografia, defina o atributo
-<code>android:directBootAware</code> como true no manifesto.<p>
-
-<p>Componentes com reconhecimento de criptografia podem se registrar para receber uma mensagem de transmissão
-<code>LOCKED_BOOT_COMPLETED</code> do
-sistema quando o dispositivo é reiniciado. Nesse momento, o armazenamento criptografado do
-dispositivo é disponibilizado e pode executar tarefas
-necessárias durante o modo de inicialização, como o acionamento de um alarme programado.</p>
-
-<p>O snippet de código a seguir é um exemplo de como registrar um
-{@link android.content.BroadcastReceiver} como tendo reconhecimento de criptografia e adicionar um
-filtro de intenção para <code>LOCKED_BOOT_COMPLETED</code> no manifesto do aplicativo:</p>
-
-<pre>
-<receiver
- android:directBootAware="true" >
- ...
- <intent-filter>
- <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
- </intent-filter>
-</receiver>
-</pre>
-
-<p>Quando o usuário desbloquear o dispositivo, todos os componentes poderão acessar o armazenamento
-criptografado do dispositivo e o armazenamento criptografado de credenciais.</p>
-
-<h2 id="access">Acesso ao armazenamento criptografado do dispositivo</h2>
-
-<p>Para acessar o armazenamento criptografado do dispositivo, crie uma segunda instância de
-{@link android.content.Context} chamando
-<code>Context.createDeviceProtectedStorageContext()</code>. Todas as chamadas da API
-de armazenamento que usam esse contexto acessam o armazenamento criptografado do dispositivo. O
-exemplo a seguir acessa o armazenamento criptografado do dispositivo e abre um
-arquivo de dados existente do aplicativo:</p>
-
-<pre>
-Context directBootContext = appContext.createDeviceProtectedStorageContext();
-// Access appDataFilename that lives in device encrypted storage
-FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
-// Use inStream to read content...
-</pre>
-
-<p>Use o armazenamento criptografado do dispositivo somente para
-informações que precisem ser acessadas durante o modo de inicialização direta.
-Não use o armazenamento criptografado do dispositivo como um repositório criptografado para fins gerais.
-Para informações particulares do usuário ou dados criptografados que não são necessários durante
-o modo de inicialização direta, use o armazenamento criptografado de credenciais.</p>
-
-<h2 id="notification">Receber notificação quando o usuário desbloquear</h2>
-
-<p>Quando o usuário desbloquear o dispositivo após a reinicialização, seu aplicativo poderá voltar
-a acessar o armazenamento criptografado de credenciais e usar serviços regulares do sistema que
-dependem das credenciais do usuário.</p>
-
-<p>Para receber uma notificação quando o usuário desbloquear o dispositivo após uma reinicialização,
-registre um {@link android.content.BroadcastReceiver} do componente em execução
-para ouvir a mensagem <code>ACTION_USER_UNLOCKED</code>. Você também pode
-receber a mensagem {@link android.content.Intent#ACTION_BOOT_COMPLETED
-ACTION_BOOT_COMPLETED} existente, que agora indica que o dispositivo foi inicializado e que
-o usuário o desbloqueou.</p>
-
-<p>Você pode enviar uma consulta diretamente se o usuário desbloquear o dispositivo chamando
-<code>UserManager.isUserUnlocked()</code>.</p>
-
-<h2 id="migrating">Migrar dados existentes</h2>
-
-<p>Se um usuário atualizar o dispositivo para usar o modo de inicialização direta, você poderá ter dados
-existentes que precisem ser migrados para o armazenamento criptografado do dispositivo. Use
-<code>Context.moveSharedPreferencesFrom()</code> e
-<code>Context.moveDatabaseFrom()</code> para migrar dados de preferências e do banco de
-dados entre o armazenamento criptografado de credenciais e o armazenamento criptografado do dispositivo.</p>
-
-<p>Tenha bom senso ao decidir quais dados migrar do armazenamento
-criptografado de credenciais para o armazenamento criptografado do dispositivo. Não migre
-informações particulares do usuário, como senhas ou tokens de autorização, para o
-armazenamento criptografado do dispositivo. Em alguns casos, pode ser necessário gerenciar
-conjuntos separados de dados nos dois repositórios criptografados.</p>
-
-<h2 id="testing">Testar seu aplicativo com reconhecimento de criptografia</h2>
-
-<p>Teste seu aplicativo com reconhecimento de criptografia usando o novo modo de inicialização direta. Existem duas
-maneiras de ativar a inicialização direta.</p>
-
-<p class="caution"><strong>Cuidado:</strong> ao ativar a inicialização direta,
-você apaga todos os dados do usuário no dispositivo.</p>
-
-<p>Em dispositivos compatíveis com o Android N instalado, ative a
-inicialização direta seguindo um destes procedimentos:</p>
-
-<ul>
-<li>No dispositivo, ative <b>Developer options</b>, se ainda não tiver feito isso,
-acessando <b>Settings > About phone</b> e tocando em <b>Build number</b>
-sete vezes. Quando a tela de opções do desenvolvedor for disponibilizada, acesse
-<b>Settings > Developer options</b> e selecione
-<b>Convert to file encryption</b>.</li>
-<li>Use os seguintes comandos de shell adb para ativar o modo de inicialização direta:
-<pre class="no-pretty-print">
-$ adb reboot-bootloader
-$ fastboot --wipe-and-use-fbe
-</pre>
-</li>
-</ul>
-
-<p>Um modo de inicialização direta emulado também está disponível, caso você precise trocar
-de modo nos dispositivos de teste. O modo emulado só deve ser usado durante
-o desenvolvimento e pode causar perda de dados. Para ativar o modo de inicialização direta,
-defina um padrão de bloqueio no dispositivo, escolha "No thanks", caso seja solicitada
-uma tela de inicialização segura ao definir esse padrão, e, em seguida, use o
-seguinte comando de shell adb:</p>
-
-<pre class="no-pretty-print">
-$ adb shell sm set-emulate-fbe true
-</pre>
-
-<p>Para desativar o modo de inicialização direta emulado, use o seguinte comando:</p>
-
-<pre class="no-pretty-print">
-$ adb shell sm set-emulate-fbe false
-</pre>
-
-<p>O uso desses comandos faz com que o dispositivo seja reinicializado.</p>
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/multi-window.jd b/docs/html-intl/intl/pt-br/preview/features/multi-window.jd
deleted file mode 100644
index 1a48140..0000000
--- a/docs/html-intl/intl/pt-br/preview/features/multi-window.jd
+++ /dev/null
@@ -1,589 +0,0 @@
-page.title=Suporte a várias janelas
-page.metaDescription=Novo suporte à exibição de mais de um aplicativo ao mesmo tempo no Android N.
-page.keywords="multi-window", "android N", "split screen", "free-form"
-
-@jd:body
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>Neste documento</h2>
- <ol>
- <li><a href="#overview">Visão geral</a></li>
- <li><a href="#lifecycle">Ciclo de vida do modo de várias janelas</a></li>
- <li><a href="#configuring">Configuração do aplicativo para o modo
- de várias janelas</a></li>
- <li><a href="#running">Execução do aplicativo no modo de várias janelas</a></li>
- <li><a href="#testing">Teste do suporte a várias janelas em seu aplicativo</a></li>
- </ol>
- <h2>Veja também</h2>
- <ol>
- <li><a class="external-link" href="https://github.com/googlesamples/android-MultiWindowPlayground">Playground — aplicativo de exemplo
- do modo de várias janelas</a></li>
- <li><a class="external-link" href="https://medium.com/google-developers/5-tips-for-preparing-for-multi-window-in-android-n-7bed803dda64">Cinco dicas para preparar o modo de várias janelas no Android N</a></li>
- </ol>
- </div>
-</div>
-
-<p>
- O Android N adiciona suporte à exibição de mais de um aplicativo ao
- mesmo tempo. Em dispositivos portáteis, dois aplicativos podem ser executados lado a lado ou
- um acima do outro no modo de <em>tela dividida</em>. Em dispositivos de TV, os aplicativos podem
- usar o modo de <em>imagem em imagem</em> para continuar a reprodução do vídeo enquanto os usuários
- interagem com outro aplicativo.
-</p>
-
-<p>
- Se você compilar o aplicativo com o N Preview SDK, poderá configurar como o aplicativo
- processa a exibição de várias janelas. Por exemplo, você pode especificar as dimensões
-mínimas permitidas para a atividade. Você também pode desativar a exibição de várias janelas para
- o aplicativo, garantindo que o sistema mostre o aplicativo apenas
-em modo de tela inteira.
-</p>
-
-<h2 id="overview">Visão geral</h2>
-
-<p>
- O Android N permite que diversos aplicativos compartilhem a tela ao mesmo tempo. Por
- exemplo, um usuário pode dividir a tela para visualizar uma página da web no lado esquerdo
- e compor um e-mail no lado direito. A experiência do usuário depende do
- dispositivo:
-</p>
-
-<ul>
- <li>Os dispositivos portáteis que executam o Android N oferecem o
- modo de tela dividida. Nesse modo, o sistema preenche a tela com dois aplicativos, exibindo-os
- lado a lado ou um acima do outro. O usuário pode arrastar a linha divisória
- que separa os dois para que um aplicativo fique maior e o outro menor.
- </li>
-
- <li>No Nexus Player executando Android N, os aplicativos podem entrar
- no <a href="picture-in-picture.html">modo de imagem em imagem</a>, o que permite
- que continuem a exibir conteúdo enquanto o usuário navega ou interage com
- outros aplicativos.
- </li>
-
- <li>Fabricantes de dispositivos maiores podem optar pelo modo de
- forma livre, em que o usuário pode redimensionar livremente cada atividade. Se o
- fabricante ativar esse recurso, o dispositivo oferecerá o modo de forma livre
- e o modo de tela dividida.
- </li>
-</ul>
-
-<img src="{@docRoot}preview/images/mw-splitscreen.png" alt="" width="650" srcset="{@docRoot}preview/images/mw-splitscreen.png 1x,
- {@docRoot}preview/images/mw-splitscreen_2x.png 2x," id="img-split-screen" />
-<p class="img-caption">
- <strong>Figura 1.</strong> Dois aplicativos executando lado a lado em modo de tela dividida.
-</p>
-
-<p>
- O usuário pode mudar para o modo de várias janelas das seguintes maneiras:
-</p>
-
-<ul>
- <li>Se o usuário abrir a <a href="{@docRoot}guide/components/recents.html">tela
- Overview</a> e pressionar longamente um
- título de atividade, poderá arrastá-la para uma parte destacada da
- tela para colocá-la no modo de várias janelas.
- </li>
-
- <li>Se o usuário pressionar longamente o botão Overview, o dispositivo colocará
- a atividade atual no modo de várias janelas e abrirá a tela Overview para
- permitir que o usuário escolha outra atividade para compartilhar a tela.
- </li>
-</ul>
-
-<p>
- Os usuários podem <a href="{@docRoot}guide/topics/ui/drag-drop.html">arrastar e
- soltar</a> dados de uma atividade para outra enquanto as atividades compartilham
- a tela. (Anteriormente, os usuários podiam apenas arrastar e soltar dados em uma única
- atividade.)
-</p>
-
-<h2 id="lifecycle">Ciclo de vida do modo de várias janelas</h2>
-
-<p>
- O modo de várias janelas não altera o <a href="{@docRoot}training/basics/activity-lifecycle/index.html">ciclo de vida
- da atividade</a>.
-</p>
-
-<p>
- No modo de várias janelas, somente a atividade com a qual o usuário interagiu mais recentemente
- fica ativa em um determinado momento. Essa atividade é considerada a atividade <em>superior</em>.
- Todas as outras atividades ficam no estado pausado, mesmo se visíveis.
- No entanto, o sistema atribui a essas atividades pausadas, mas visíveis, uma prioridade maior
- que a das atividades não visíveis. Se o usuário interagir com uma das
- atividades pausadas, ela será retomada e a atividade previamente superior
- será pausada.
-</p>
-
-<p class="note">
- <strong>Observação:</strong> em modo de suporte a várias janelas, um aplicativo pode estar no estado
- pausado e continuar visível ao usuário. Pode ser necessário que um aplicativo continue com suas
- atividades, mesmo se pausado. Por exemplo, um aplicativo que reproduz vídeo e que está no
- modo pausado, mas visível, deve continuar a exibir o vídeo. Por esse
- motivo, recomendamos que atividades que reproduzem vídeo <em>não</em> pausem o
- vídeo nos manipuladores {@link android.app.Activity#onPause onPause()}.
- Em vez disso, o vídeo deve ser pausado em {@link android.app.Activity#onStop
- onStop()} e a reprodução retomada em {@link android.app.Activity#onStart
- onStart()}.
-</p>
-
-<p>
- Quando o usuário coloca um aplicativo no modo de várias janelas, o sistema notifica a
- atividade sobre a mudança de configuração, como especificado em <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Processamento de alterações
- no tempo de execução</a>. Isso também acontece quando o usuário redimensiona o aplicativo ou
- coloca-o novamente no modo de tela cheia.
- Essencialmente, essa alteração afeta
- o ciclo de vida da atividade da mesma forma que quando o sistema notifica o aplicativo de que o dispositivo mudou
- do modo de retrato para paisagem, exceto que as dimensões do dispositivo são
- alteradas, em vez de simplesmente permutadas. Como discutido em <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Processamento de alterações
- no tempo de execução</a>, a sua atividade pode processar ela mesma a mudança de configuração ou
- permitir que o sistema destrua a atividade e recrie-a com as novas
- dimensões.
-</p>
-
-<p>
- Se o usuário redimensionar uma janela e aumentar uma de suas dimensões, o
- sistema redimensionará a atividade para corresponder à ação do usuário e emitirá <a href="{@docRoot}guide/topics/resources/runtime-changes.html">mudanças de tempo de execução</a>
- conforme necessário. Se o aplicativo demorar a desenhar nas áreas recém-expostas, o
- sistema preencherá temporariamente essas áreas com a cor especificada pelo atributo {@link
- android.R.attr#windowBackground windowBackground} ou pelo atributo de estilo padrão
- <code>windowBackgroundFallback</code>.
-</p>
-
-<h2 id="configuring">Configuração do aplicativo para o modo de várias janelas</h2>
-
-<p>
- Se o seu aplicativo for direcionado ao Android N, você poderá configurar como
- e se as atividades do aplicativo suportam a exibição em várias janelas. Você pode definir
- atributos no manifesto para controlar o tamanho e o layout.
- As configurações de atributos de uma atividade raiz se aplicam a todas as atividades
- em sua pilha de tarefas. Por exemplo, se a atividade raiz tiver
- <code>android:resizeableActivity</code> definido como true, todas as atividades
- na pilha de tarefas serão redimensionáveis.
-</p>
-
-<p class="note">
- <strong>Observação:</strong> se você compilar um aplicativo com várias orientações usando uma versão
- do SDK anterior ao Android N e o usuário usar o aplicativo em
- modo de suporte a várias janelas, o sistema redimensionará forçosamente o aplicativo. O sistema apresenta uma
- caixa de diálogo avisando o usuário de que o aplicativo pode se comportar de forma inesperada. O sistema
- <em>não</em> redimensiona aplicativos de orientação fixa; se
- o usuário tentar abrir um aplicativo de orientação fixa no modo de várias janelas,
- o aplicativo ocupará toda a tela.
-</p>
-
-<h4 id="resizeableActivity">android:resizeableActivity</h4>
-<p>
- Defina esse atributo no nó <code><activity></code> ou
- <code><application></code> em seu manifesto para ativar ou desativar a exibição em
- várias telas:
-</p>
-
-<pre>
-android:resizeableActivity=["true" | "false"]
-</pre>
-
-<p>
- Se esse atributo for definido como verdadeiro, a atividade poderá ser inicializada nos
- modos de tela dividida e forma livre. Se o atributo for definido como falso, a
- atividade não oferecerá suporte ao modo de várias janelas. Se esse valor for falso e o
- usuário tentar iniciar a atividade no modo de várias janelas, a atividade ocupará
- a tela inteira.
-</p>
-
-<p>
- Se o aplicativo for direcionado ao Android N, mas o valor desse atributo não for
- especificado, o atributo assumirá o valor padrão de verdadeiro.
-</p>
-
-<h4 id="supportsPictureInPicture">android:supportsPictureInPicture</h4>
-
-<p>
- Defina esse atributo no nó <code><activity></code> ou no seu manifesto para
- indicar se a atividade oferece suporte à exibição no modo de imagem em imagem. Esse
- atributo será ignorado se <code>android:resizeableActivity</code> for falso.
-</p>
-
-<pre>
-android:supportsPictureInPicture=["true" | "false"]
-</pre>
-
-<h3 id="layout">Atributos de layout</h3>
-
-<p>
- No Android N, o elemento de manifesto <code><layout></code>
- oferece suporte a diversos atributos que afetam o comportamento da atividade no
- modo de várias janelas:
-</p>
-
-<dl>
- <dt>
- <code>android:defaultWidth</code>
- </dt>
-
- <dd>
- Largura padrão da atividade quando iniciada no modo de forma livre.
- </dd>
-
- <dt>
- <code>android:defaultHeight</code>
- </dt>
-
- <dd>
- Altura padrão da atividade quando iniciada no modo de forma livre.
- </dd>
-
- <dt>
- <code>android:gravity</code>
- </dt>
-
- <dd>
- Posicionamento inicial da atividade quando iniciada no modo de forma livre. Consulte a
- referência de {@link android.view.Gravity} para obter os valores adequados.
- </dd>
-
- <dt>
- <code>android:minimalHeight</code>, <code>android:minimalWidth</code>
- </dt>
-
- <dd>
- Altura mínima e largura mínima para a atividade nos modos de tela dividida
- e forma livre. Se o usuário mover o divisor no modo de tela dividida
- para tornar uma atividade menor que o mínimo especificado, o sistema recortará
- a atividade para o tamanho solicitado pelo usuário.
- </dd>
-</dl>
-
-<p>
- Por exemplo, o código a seguir mostra como especificar um tamanho e uma localização
- padrão para a atividade, bem como o tamanho mínimo, quando a atividade é exibida no
- modo de forma livre:
-</p>
-
-<pre>
-<activity android:name=".MyActivity">
- <layout android:defaultHeight="500dp"
- android:defaultWidth="600dp"
- android:gravity="top|end"
- android:minimalHeight="450dp"
- android:minimalWidth="300dp" />
-</activity>
-</pre>
-
-<h2 id="running">Execução do aplicativo no modo de várias janelas</h2>
-
-<p>
- O Android N oferece nova funcionalidade para dar suporte a aplicativos que podem ser executados
- no modo de várias janelas.
-</p>
-
-<h3 id="disabled-features">Recursos desativados no modo de várias janelas</h3>
-
-<p>
- Alguns recursos são desativados ou ignorados quando um dispositivo está no modo de
- várias janelas, pois não fazem sentido para uma atividade que pode estar compartilhando a
- tela do dispositivo com outras atividades ou aplicativos. Esses recursos incluem:
-
-<ul>
- <li>Algumas opções de personalização de <a href="{@docRoot}training/system-ui/index.html">IU do sistema</a>
- são desativadas. Por exemplo, os aplicativos não podem ocultar a barra de status
- se não estiverem executando no modo de tela cheia.
- </li>
-
- <li>O sistema ignora as alterações no atributo <code><a href=
- "{@docRoot}guide/topics/manifest/activity-element.html#screen"
- >android:screenOrientation</a></code>.
- </li>
-</ul>
-
-<h3 id="change-notification">Notificações e consultas de mudança no modo de várias janelas</h3>
-
-<p>
- Os novos métodos a seguir foram adicionados à classe {@link android.app.Activity}
- para oferecer suporte à exibição em várias janelas. Para obter detalhes sobre cada método, consulte a
- <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência
- do N Preview SDK</a>.
-</p>
-
-<dl>
- <dt>
- <code>Activity.isInMultiWindowMode()</code>
- </dt>
-
- <dd>
- Chame para descobrir se a atividade está no modo de várias janelas.
- </dd>
-
- <dt>
- <code>Activity.isInPictureInPictureMode()</code>
- </dt>
-
- <dd>
- Chame para descobrir se a atividade está no modo de imagem em imagem.
-
- <p class="note">
- <strong>Observação:</strong> o modo de imagem em imagem é um caso especial do
- modo de várias janelas. Se <code>myActivity.isInPictureInPictureMode()</code>
- retornar true, <code>myActivity.isInMultiWindowMode()</code> também
- retornará true.
- </p>
- </dd>
-
- <dt>
- <code>Activity.onMultiWindowModeChanged()</code>
- </dt>
-
- <dd>
- O sistema chama esse método sempre que a atividade entra ou sai do
- modo de várias janelas. O sistema passará ao método o valor true se a
- atividade entrar no modo de várias janelas e false se a atividade
- sair do modo de várias janelas.
- </dd>
-
- <dt>
- <code>Activity.onPictureInPictureModeChanged()</code>
- </dt>
-
- <dd>
- O sistema chama esse método sempre que a atividade entra ou sai do
- modo de imagem em imagem. O sistema passará ao método o valor true se
- a atividade entrar no modo de várias janelas e false se a atividade
- sair do modo de várias janelas.
- </dd>
-</dl>
-
-<p>
- Existem também versões de {@link android.app.Fragment} para cada um desses
- métodos como, por exemplo, <code>Fragment.isInMultiWindowMode()</code>.
-</p>
-
-<h3 id="entering-pip">Entrar no modo de imagem em imagem</h3>
-
-<p>
- Para colocar uma atividade no modo de imagem em imagem, chame o novo método
- <code>Activity.enterPictureInPictureMode()</code>. Esse método não terá efeito se
- o dispositivo não oferecer suporte ao modo de imagem em imagem. Para obter mais informações,
- consulte a documentação do modo <a href="picture-in-picture.html">imagem em imagem</a>.
-</p>
-
-<h3 id="launch">Iniciar novas atividades no modo de várias janelas</h3>
-
-<p>
- Quando você iniciar uma nova atividade, poderá indicar ao sistema que a
- a nova atividade deverá ser exibida adjacente à atual, se possível. Para fazer
- isso, use o sinalizador
- <code>Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT</code>. A passagem
- desse sinalizador solicita o seguinte comportamento:
-</p>
-
-<ul>
- <li>Se o dispositivo estiver no modo de tela dividida, o sistema tentará criar a
- nova atividade ao lado da atividade que a iniciou para que as duas atividades
- compartilhem a tela. Nem sempre o sistema conseguirá fazer isso, mas as
- atividades ficarão adjacentes, se possível.
- </li>
-
- <li>Se o dispositivo não estiver no modo de tela dividida, esse sinalizador não terá efeito.
- </li>
-</ul>
-
-<p>
- Se um dispositivo estiver no modo de forma livre e você iniciar uma nova atividade, poderá
- especificar as dimensões e a posição na tela da nova atividade chamando
- <code>ActivityOptions.setLaunchBounds()</code>. Esse método não terá efeito se
- o dispositivo não estiver no modo de várias janelas.
-</p>
-
-<p class="note">
- <strong>Observação:</strong> se você iniciar uma atividade em uma pilha de tarefas, essa
- atividade substituirá a atividade na tela, herdando todas as
- propriedades de suporte a várias janelas. Se você quiser iniciar a nova atividade como janela
- separada no modo de várias janelas, inicie essa atividade em uma nova pilha de tarefas.
-</p>
-
-<h3 id="dnd">Suporte a arrastar e soltar</h3>
-
-<p>
- Os usuários podem <a href="{@docRoot}guide/topics/ui/drag-drop.html">arrastar e
- soltar</a> dados de uma atividade para outra enquanto as duas atividades
- compartilham a tela. (Anteriormente, os usuários podiam apenas arrastar e soltar dados em uma
- única atividade.) Por esse motivo, se o aplicativo não tem a funcionalidade de arrastar e soltar,
- pode ser uma boa ideia adicioná-la.
-</p>
-
-<p>
- O N Preview SDK estende o pacote <a href="{@docRoot}reference/android/view/package-summary.html"><code>android.view</code></a>
- para oferecer suporte ao recurso arrastar e soltar entre aplicativos. Para obter detalhes sobre os seguintes
- métodos e classes, consulte a <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência
- do Preview SDK</a>.
-</p>
-
-<dl>
- <dt>
- <code>android.view.DropPermissions</code>
- </dt>
-
- <dd>
- Objeto token responsável por especificar as permissões concedidas ao aplicativo
- que recebe uma ação de soltar.
- </dd>
-
- <dt>
- <code>View.startDragAndDrop()</code>
- </dt>
-
- <dd>
- Novo alias de {@link android.view.View#startDrag View.startDrag()}. Para
- ativar o recurso de arrastar e soltar entre atividades, passe o novo sinalizador
- <code>View.DRAG_FLAG_GLOBAL</code>. Se você precisar conceder permissões de URI à
- atividade de destino, passe os novos sinalizadores,
- <code>View.DRAG_FLAG_GLOBAL_URI_READ</code> ou
- <code>View.DRAG_FLAG_GLOBAL_URI_WRITE</code>, conforme o caso.
- </dd>
-
- <dt>
- <code>View.cancelDragAndDrop()</code>
- </dt>
-
- <dd>
- Cancela uma operação de arrastar em andamento. Somente pode ser chamado
- pelo aplicativo que originou a operação de arrastar.
- </dd>
-
- <dt>
- <code>View.updateDragShadow()</code>
- </dt>
-
- <dd>
- Substitui a sombra de arrastar para uma operação de arrastar em andamento. Somente
- pode ser chamado pelo aplicativo que originou a operação de arrastar.
- </dd>
-
- <dt>
- <code>Activity.requestDropPermissions()</code>
- </dt>
-
- <dd>
- Solicita as permissões dos URIs de conteúdo passados com {@link
- android.content.ClipData} contidos em {@link android.view.DragEvent}.
- </dd>
-</dl>
-
-<h2 id="testing">Teste do suporte a várias janelas em seu aplicativo</h2>
-
-<p>
- Atualizando ou não o seu aplicativo para o Android N, você deve
- verificar como ele se comporta no modo de várias janelas, pois um usuário pode tentar iniciá-lo
- no modo de várias janelas em um dispositivo executando o Android N.
-</p>
-
-<h3 id="configuring">Configuração de um dispositivo de teste</h3>
-
-<p>
- Se você instalar o Android N em um dispositivo, o modo de tela dividida
- será instalado automaticamente.
-</p>
-
-<h3 id="test-non-n">Se o aplicativo não foi compilado com o N Preview SDK</h3>
-
-<p>
- Se você não compilou o aplicativo com o N Preview SDK e o usuário tentar usar
- o aplicativo no modo de várias janelas, o sistema redimensionará obrigatoriamente o aplicativo, a menos que este
- declare uma orientação fixa.
-</p>
-
-<p>
- Se o aplicativo não declarar uma orientação fixa, inicie o aplicativo
- em um dispositivo executando Android N e tente colocar o aplicativo no modo
- de tela dividida. Verifique se a experiência do usuário é
- aceitável quando o aplicativo é redimensionado obrigatoriamente.
-</p>
-
-<p>
- Se o aplicativo declarar uma orientação fixa, você deverá tentar colocá-lo no
- modo de várias janelas. Verifique se, ao fazê-lo, o aplicativo continua
- no modo de tela cheia.
-</p>
-
-<h3 id="test-mw">Se você oferecer suporte ao modo de várias janelas</h3>
-
-<p>
- Se você compilar o aplicativo com o N Preview SDK e não tiver desativado o
- suporte a várias janelas, verifique o comportamento a seguir nos modos de tela dividida
- e forma livre.
-</p>
-
-<ul>
- <li>Inicie o aplicativo em modo de tela inteira e mude para o modo de várias janelas
- pressionando longamente o botão Overview. Verifique se o aplicativo alterna corretamente.
- </li>
-
- <li>Inicie o aplicativo diretamente no modo de várias janelas e verifique se o aplicativo
- é iniciado corretamente. Você pode iniciar um aplicativo no modo de várias telas pressionando o
- botão Overview, pressionando longamente a barra de título do aplicativo e arrastando-o
- para uma das áreas destacadas na tela.
- </li>
-
- <li>Redimensione o aplicativo no modo de tela dividida, arrastando a linha divisora.
- Verifique se o aplicativo é redimensionado sem falhar e se os elementos de IU necessários
- estão visíveis.
- </li>
-
- <li>Se você especificou dimensões mínimas para o aplicativo, tente redimensionar
- o aplicativo abaixo dessas dimensões. Verifique se não é possível redimensionar o aplicativo
- para um tamanho menor que o mínimo especificado.
- </li>
-
- <li>Em todos os testes, verifique se o desempenho do aplicativo é aceitável. Por
- exemplo, verifique se há uma demora muito grande para atualizar a IU após o
- redimensionamento do aplicativo.
- </li>
-</ul>
-
-<h4 id="test-checklist">Lista de verificação de teste</h4>
-
-<p>
- Para verificar o desempenho do aplicativo no modo de várias janelas, experimente as operações
- a seguir. Você deve tentar essas operações nos modos de tela dividida e
- várias telas, exceto onde houver instruções diferentes.
-</p>
-
-<ul>
- <li>Entre e saia do modo de várias janelas.
- </li>
-
- <li>Alterne do seu aplicativo para outro e verifique se o seu aplicativo se comporta
- corretamente enquanto visível, mas não ativo. Por exemplo, se o seu aplicativo estiver
- reproduzindo vídeo, verifique se a reprodução não é interrompida quando o usuário
- interage com outro aplicativo.
- </li>
-
- <li>No modo de tela dividida, tente mover a barra divisora para aumentar e reduzir
- o tamanho do aplicativo. Tente essas operações nas configurações lado a lado
- e um acima do outro. Verifique se o aplicativo não falha,
- se a funcionalidade essencial fica visível e se a operação de redimensionamento não demora
- demais.
- </li>
-
- <li>Execute várias operações de redimensionamento em rápida sucessão. Verifique se o
- aplicativo não falha nem apresenta vazamento de memória. Para obter informações sobre como verificar o uso de memória
- do aplicativo, consulte <a href="{@docRoot}tools/debugging/debugging-memory.html">
- Investigação do uso de RAM</a>.
- </li>
-
- <li>Use o aplicativo normalmente em diversas configurações diferentes de janela e
- verifique se o aplicativo se comporta corretamente. Verifique se o texto é legível e se os
- elementos de IU não ficam pequenos demais para a interação.
- </li>
-</ul>
-
-<h3 id="test-disabled-mw">Se você desativou o suporte a várias janelas</h3>
-
-<p>
- Se você desativou o suporte a várias janelas definindo
- <code>android:resizableActivity="false"</code>, inicie o aplicativo em
- um dispositivo executando Android N e tente colocá-lo nos modos
- de forma livre e tela dividida. Verifique se, ao fazê-lo, o aplicativo continua
- no modo de tela cheia.
-</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/pt-br/preview/features/picture-in-picture.jd b/docs/html-intl/intl/pt-br/preview/features/picture-in-picture.jd
deleted file mode 100644
index 4bdc545..0000000
--- a/docs/html-intl/intl/pt-br/preview/features/picture-in-picture.jd
+++ /dev/null
@@ -1,213 +0,0 @@
-page.title=Imagem em imagem
-page.keywords=preview,sdk,PIP,Picture-in-picture
-page.tags=androidn
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>Neste documento</h2>
-<ol>
- <li><a href="#declaring">Declarar que sua atividade oferece suporte ao modo de
-imagem em imagem</a></li>
- <li><a href="#pip_button">Alternar a atividade para o modo de imagem em imagem</a>
-</li>
- <li><a href="#handling_ui">Lidar com a IU durante o modo de imagem em imagem</a>
-</li>
- <li><a href="#continuing_playback">Continuar reprodução de vídeo no modo de
-imagem em imagem</a></li>
- <li><a href="#single_playback">Usar uma única atividade de reprodução para
-imagem em imagem</a></li>
- <li><a href="#best">Práticas recomendadas</a></li>
-</ol>
-
-<h2>Veja também</h2>
-<ol>
- <li><a href="{@docRoot}preview/features/multi-window.html">Suporte a
-várias janelas</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>No Android N, os usuários do Android TV agora podem assistir a um vídeo
-em uma janela fixada em um canto da tela enquanto navegam em
-aplicativos. O modo de imagem em imagem (PIP) permite que os aplicativos executem uma atividade de vídeo
-na janela fixada enquanto outra atividade continua em
-segundo plano. A janela do PIP permite que os usuários realizem várias tarefas enquanto usam seu aplicativo, o que os
-ajuda a ser mais produtivos.</p>
-
-<p>Seu aplicativo pode decidir quando acionar o modo de PIP. Veja alguns exemplos de
-quando entrar no modo de PIP:</p>
-
-<ul>
-<li>Seu aplicativo pode passar um vídeo para o modo de PIP quando o usuário
-sai do vídeo para procurar outro conteúdo.</li>
-<li>Seu aplicativo pode passar um vídeo para o modo de PIP quando um usuário assiste ao final
-de um episódio de conteúdo. A janela principal exibe informações promocionais ou de resumo
-sobre o próximo episódio da série.</li>
-<li>Seu aplicativo pode fornecer uma maneira de os usuários colocarem conteúdo adicional em uma fila enquanto
-assistem a um vídeo. O vídeo continua a ser reproduzido no modo de PIP enquanto a tela principal
-exibe uma atividade de seleção de conteúdo.</li>
-</ul>
-
-<p>A janela do modo de PIP tem 240x135 dp e é mostrada na camada superior de um dos
-quatro cantos da tela, escolhido pelo sistema. O usuário pode exibir um
-menu de PIP que permite que coloque a janela do PIP em tela inteira ou feche-a
-ao pressionar o botão <b>Home</b> do controle remoto. Se outro
-vídeo começar a ser reproduzido na tela principal, a janela do PIP será fechada
-automaticamente. Os usuários também podem fechar a janela do PIP em Recents.</p>
-
-<img src="{@docRoot}preview/images/pip-active.png" />
-<p class="img-caption"><strong>Figura 1.</strong> Um vídeo no modo de imagem em imagem
-visível no canto da tela enquanto o usuário navega por conteúdo
-na janela principal.</p>
-
-<p>O PIP utiliza as APIs de várias janelas disponíveis no Android N para
-fornecer a janela sobreposta de vídeo fixo. Para adicionar o modo de PIP ao seu aplicativo, você deve
-registrar as atividades que oferecem suporte a PIP, alternar a atividade para o modo de PIP conforme
-a necessidade e garantir que os elementos de IU sejam ocultados e que a reprodução do vídeo continue quando
-a atividade estiver no modo de PIP.</p>
-
-<h2 id="declaring">Declarar que sua atividade oferece suporte ao modo de imagem em imagem</h2>
-
-<p>Por padrão, o sistema não oferece suporte ao modo de PIP automaticamente para seus aplicativos.
-Se quiser esse suporte para seu aplicativo, registre a atividade
-de vídeo no manifesto definindo
-<code>android:supportsPictureInPicture</code> e
-<code>android:resizeableActivity</code> como <code>true</code>. Além disso, especifique
-que a atividade processa alterações na configuração de layout de forma que a atividade
-não seja reiniciada quando ocorrem essas alterações durante as transições do modo de PIP.</p>
-
-<pre>
-<activity android:name="VideoActivity"
- android:resizeableActivity="true"
- android:supportsPictureInPicture="true"
- android:configChanges=
- "screenSize|smallestScreenSize|screenLayout|orientation"
- ...
-</pre>
-
-<p>Ao registrar a atividade, lembre-se de que, no modo de PIP, ela
-é mostrada em uma pequena janela sobreposta em uma tela de TV. Atividades de reprodução de
-vídeo com uma quantidade mínima de itens de IU oferecem a melhor experiência do usuário. Atividades que contêm
-pequenos elementos de IU podem não oferecer uma boa experiência do usuário
-no modo de PIP, pois ele não conseguirá enxergar os detalhes desses elementos
-na janela do PIP.</p>
-
-<h2 id="pip_button">Alternar a atividade para o modo de imagem em imagem</h2>
-
-Quando precisar colocar a atividade no modo de PIP, chame
-<code>Activity.enterPictureInPictureMode()</code>. O exemplo a seguir
-entra no modo de PIP quando o usuário seleciona um botão dedicado ao PIP na barra de controle de
-uma mídia:</p>
-
-<pre>
-@Override
-public void onActionClicked(Action action) {
- if (action.getId() == R.id.lb_control_picture_in_picture) {
- getActivity().enterPictureInPictureMode();
- return;
- }
- ...
-</pre>
-
-<p>Adicionar um botão de PIP à barra de controle de mídia permite que o usuário entre no
-modo de PIP com facilidade ao controlar a reprodução de um vídeo.</p>
-
-<img src="{@docRoot}preview/images/pip-button.png" />
-<p class="img-caption"><strong>Figura 1.</strong> Um botão do
-modo de imagem em imagem em uma barra de controle de mídia.</p>
-
-<p>O Android N inclui uma nova classe
-<code>PlaybackControlsRow.PictureInPictureAction</code> que define ações do PIP
-para a barra de controle e usa o ícone do PIP.</p>
-
-<h2 id="handling_ui">Lidar com a IU durante o modo de imagem em imagem</h2>
-
-<p>Quando a atividade entra no modo de PIP, ela deve mostrar apenas a reprodução do
-vídeo. Remova elementos de IU antes que a atividade entre no modo de PIP
-e restaure esses elementos quando a atividade voltar ao modo de tela inteira.
-Substitua <code>Activity.onPictureInPictureModeChanged()</code> ou
-<code>Fragment.onPictureInPictureModeChanged()</code> e ative ou
-desative os elementos de interface conforme for necessário. Por exemplo:</p>
-
-<pre>
-@Override
-public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
- if (isInPictureInPictureMode) {
- // Hide the controls in picture-in-picture mode.
- ...
- } else {
- // Restore the playback UI based on the playback status.
- ...
- }
-}
-</pre>
-
-<h2 id="continuing_playback">Continuar reprodução de vídeo no modo de
-imagem em imagem</h2>
-
-<p>Quando a atividade entra no modo de PIP, o sistema a considera
-pausada e chama o método <code>onPause()</code> da atividade. A reprodução
-de vídeos não deverá ser pausada se a atividade
-for pausada devido ao modo de PIP. Verifique o PIP no método
-<code>onPause()</code> da atividade e realize a reprodução da forma apropriada. Por
-exemplo:</p>
-
-<pre>
-@Override
-public void onPause() {
- // If called while in PIP mode, do not pause playback
- if (isInPictureInPictureMode()) {
- // Continue playback
- ...
- }
- // If paused but not in PIP, pause playback if necessary
- ...
-}
-</pre>
-
-<p>Quando a atividade sai do modo de PIP e volta à tela inteira, o
-sistema retoma a atividade e chama o método <code>onResume()</code>.</p>
-
-<h2 id="single_playback">Usar uma única atividade de reprodução para
-imagem em imagem</h2>
-
-<p>Ao navegar pelo conteúdo
- da tela principal de seu aplicativo, um usuário pode selecionar um novo vídeo enquanto uma atividade de reprodução de vídeo estiver em modo de PIP. Reproduza o novo
- vídeo na atividade de reprodução existente em modo de tela cheia em vez de
-lançar uma nova atividade que pode confundir o usuário.</p>
-
-<p>Para que uma única atividade seja usada para solicitações de reprodução de vídeo e
-com o modo de PIP ativado ou desativado, conforme necessário, configure o
-<code>android:launchMode</code> da atividade para <code>singleTask</code> em seu manifesto.
-</p>
-
-<pre>
-<activity android:name="VideoActivity"
- ...
- android:supportsPictureInPicture="true"
- android:launchMode="singleTask"
- ...
-</pre>
-
-<p>Na atividade, modifique {@link android.app.Activity#onNewIntent
-Activity.onNewIntent()} e processe o novo vídeo, interrompendo qualquer
-reprodução existente, caso necessário.</p>
-
-<h2 id="best">Práticas recomendadas</h2>
-
-<p>O PIP é destinado a atividades que reproduzem vídeos em tela inteira. Ao passar
-a atividade para o modo de PIP, evite mostrar qualquer coisa que não seja o conteúdo do vídeo.
-Rastreie quando a atividade entrar no modo de PIP e oculte os elementos de IU, conforme descrito
-em <a href="#handling_ui">Lidar com a interface durante o modo de imagem em imagem</a>.</p>
-
-<p>Como a janela do PIP é mostrada como uma janela flutuante no canto da
-tela, você deve evitar exibir informações essenciais em qualquer área
-da janela principal que possa ser ocultada pela janela do PIP.</p>
-
-<p>Quando uma atividade está no modo de PIP, ela não recebe foco de entrada por padrão. Para
-receber eventos de entrada no modo de PIP, use
-<code>MediaSession.setMediaButtonReceiver()</code>.</p>
diff --git a/docs/html-intl/intl/pt-br/preview/features/scoped-folder-access.jd b/docs/html-intl/intl/pt-br/preview/features/scoped-folder-access.jd
deleted file mode 100644
index 6a58d76..0000000
--- a/docs/html-intl/intl/pt-br/preview/features/scoped-folder-access.jd
+++ /dev/null
@@ -1,148 +0,0 @@
-page.title=Acesso a diretórios com escopo
-page.keywords=preview,sdk,scoped directory access
-page.tags=androidn
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>Neste documento</h2>
- <ol>
- <li><a href="#accessing">Acessar um diretório de armazenamento externo</a></li>
- <li><a href="#removable">Acessar um diretório em uma mídia removível</a></li>
- <li><a href="#best">Práticas recomendadas</a></li>
- </ol>
-</div>
-</div>
-
-<p>Alguns aplicativos, como aplicativos de fotos, normalmente só precisam acessar diretórios específicos de um
-armazenamento externo, como o diretório <code>Pictures</code>. As abordagens
-existentes para o acesso de armazenamentos externos não foram desenvolvidas para fornecer com facilidade
-acesso direcionado a diretórios para esses tipos de aplicativos. Por exemplo:</p>
-
-<ul>
-<li>Solicitar {@link android.Manifest.permission#READ_EXTERNAL_STORAGE}
-ou {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} em seu manifesto
-permite o acesso a todos os diretórios públicos no armazenamento externo, o que pode ser mais do
-que o aplicativo precisa.</li>
-<li>Usar a
-<a href="{@docRoot}guide/topics/providers/document-provider.html">Estrutura de
-acesso ao armazenamento</a> geralmente faz com que o usuário selecione diretórios
-por meio de uma IU de sistema, o que é desnecessário se seu aplicativo sempre acessa o mesmo
-diretório externo.</li>
-</ul>
-
-<p>O Android N fornece uma nova API simplificada para acessar
-diretórios de armazenamento externo comuns. </p>
-
-<h2 id="accessing">Acessar um diretório de armazenamento externo</h2>
-
-<p>Use a classe <code>StorageManager</code> para obter a instância
-<code>StorageVolume</code> apropriada. Em seguida, crie uma intenção chamando o método
-<code>StorageVolume.createAccessIntent()</code> dessa instância.
-Use essa intenção para acessar os diretórios de armazenamento externo. Para obter uma lista de
-todos os volumes disponíveis, incluindo volumes de mídias removíveis, use
-<code>StorageManager.getVolumesList()</code>.</p>
-
-<p>Se você tiver informações sobre um arquivo específico, use
-<code>StorageManager.getStorageVolume(File)</code> para obter o
-<code>StorageVolume</code> que contém o arquivo. Chame
-<code>createAccessIntent()</code> neste <code>StorageVolume</code> para acessar
-o diretório de armazenamento externo para o arquivo.</p>
-
-<p>
-Em volumes secundários, como cartões SD externos, passe nulo ao chamar
-<code>StorageVolume.createAccessIntent()</code> para solicitar acesso ao
-volume todo em vez de um diretório específico.
-<code>StorageVolume.createAccessIntent()</code> retornará nulo se você passar
-nulo no volume principal ou se passar um nome de diretório inválido.
-</p>
-
-<p>O fragmento de código a seguir é um exemplo de como abrir o diretório
-<code>Pictures</code> no armazenamento compartilhado principal:</p>
-
-<pre>
-StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
-StorageVolume volume = sm.getPrimaryVolume();
-Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
-startActivityForResult(intent, request_code);
-</pre>
-
-<p>O sistema tenta conceder acesso ao diretório externo e,
-se necessário, confirma o acesso com o usuário usando uma IU simplificada:</p>
-
-<img src="{@docRoot}preview/images/scoped-folder-access-framed.png" srcset="{@docRoot}preview/images/scoped-folder-access-framed.png 1x,
-{@docRoot}preview/images/scoped-folder-access-framed_2x.png 2x" />
-<p class="img-caption"><strong>Figura 1.</strong> Um aplicativo solicitando
-acesso ao diretório Pictures.</p>
-
-<p>Se o usuário conceder o acesso, o sistema chamará sua substituição de
-<code>onActivityResult()</code> com um código de resultado de
-<code>Activity.RESULT_OK</code> e os dados de intenção que contêm o URI. Use
-o URI fornecido para acessar as informações do diretório, o que é semelhante a usar URIs
-retornados pela
-<a href="{@docRoot}guide/topics/providers/document-provider.html">Estrutura de
-acesso ao armazenamento</a>.</p>
-
-<p>Se o usuário não conceder o acesso, o sistema chamará sua substituição de
-<code>onActivityResult()</code> com um código de resultado de
-<code>Activity.RESULT_CANCELED</code> e dados de intenção nulos.</p>
-
-<p class="note"><b>Observação</b>: Ao obter acesso a um diretório externo específico,
-você também obtém acesso aos subdiretórios dentro do diretório em questão.</p>
-
-<h2 id="removable">Acessar um diretório em uma mídia removível</h2>
-
-<p>Para usar o Acesso a diretórios com escopo para acessar diretórios em uma mídia removível,
-primeiro adicione um {@link android.content.BroadcastReceiver} que escute a notificação
-{@link android.os.Environment#MEDIA_MOUNTED}. Por exemplo:</p>
-
-<pre>
-<receiver
- android:name=".MediaMountedReceiver"
- android:enabled="true"
- android:exported="true" >
- <intent-filter>
- <action android:name="android.intent.action.MEDIA_MOUNTED" />
- <data android:scheme="file" />
- </intent-filter>
-</receiver>
-</pre>
-
-<p>Quando o usuário monta uma mídia removível, como um cartão SD, o sistema envia uma notificação
-{@link android.os.Environment#MEDIA_MOUNTED}. Essa notificação
-fornece um objeto <code>StorageVolume</code> nos dados de intenção que
-você pode usar para acessar os diretórios na mídia removível. O exemplo a seguir
-acessa o diretório <code>Pictures</code> na mídia removível:</p>
-
-<pre>
-// BroadcastReceiver has already cached the MEDIA_MOUNTED
-// notification Intent in mediaMountedIntent
-StorageVolume volume = (StorageVolume)
- mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
-volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
-startActivityForResult(intent, request_code);
-</pre>
-
-<h2 id="best">Práticas recomendadas</h2>
-
-<p>Quando possível, mantenha o URI de acesso a diretórios externos para que você não precise
-solicitar acesso ao usuário várias vezes. Quando o usuário conceder o acesso, chame
-<code>getContentResolver().takePersistableUriPermssion()</code> com o
-URI de acesso ao diretório. O sistema manterá o URI e as solicitações de acesso
-subsequentes retornarão <code>RESULT_OK</code> e não mostrarão a IU de confirmação para o
-usuário.</p>
-
-<p>Se o usuário negar acesso a um diretório externo, não repita a
-solicitação imediatamente. Insistir em solicitações de acesso repetidas vezes gera uma experiência
-negativa para o usuário. Se uma solicitação for negada pelo usuário e o aplicativo solicitar acesso
-novamente, a IU exibirá uma caixa de seleção <b>Não perguntar novamente</b>.</p>
-
-<img src="{@docRoot}preview/images/scoped-folder-access-dont-ask.png" srcset="{@docRoot}preview/images/scoped-folder-access-dont-ask.png 1x,
-{@docRoot}preview/images/scoped-folder-access-dont-ask_2x.png 2x" />
-<p class="img-caption"><strong>Figura 1.</strong> Um aplicativo que faz uma
-segunda solicitação para acesso à mídia removível.</p>
-
-<p>Se o usuário selecionar <b>Não perguntar novamente</b> e negar a solicitação, todas
-as solicitações futuras para o diretório provenientes do aplicativo serão automaticamente
-negadas e a IU de solicitação não será apresentada ao usuário.</p>
\ No newline at end of file
diff --git a/docs/html-intl/intl/pt-br/preview/features/security-config.jd b/docs/html-intl/intl/pt-br/preview/features/security-config.jd
deleted file mode 100644
index 27d8f2e..0000000
--- a/docs/html-intl/intl/pt-br/preview/features/security-config.jd
+++ /dev/null
@@ -1,747 +0,0 @@
-page.title=Configuração de segurança de rede
-page.keywords=androidn,security,network
-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="#manifest">Adicionar um arquivo de configurações de segurança</a></li>
- <li><a href="#CustomTrust">Personalizar CAs confiáveis</a>
- <ol>
- <li><a href="#ConfigCustom">Configurar uma CA personalizada confiável</a></li>
- <li><a href="#LimitingCas">Limitar o conjunto de CAs confiáveis</a></li>
- <li><a href="#TrustingAdditionalCas">Confiar em CAs adicionais</a></li>
- </ol>
- </li>
- <li><a href="#TrustingDebugCa">CAs somente de depuração</a></li>
- <li><a href="#UsesCleartextTraffic">Cancelar uso de tráfego de texto simples</a></li>
- <li><a href="#CertificatePinning">Fixar certificados</a></li>
- <li><a href="#ConfigInheritance">Comportamento de herança de configuração</a></li>
- <li><a href="#FileFormat">Formato do arquivo de configurações</a></li>
-</ol>
-</div>
-</div>
-
-
-<p>
- O Android N inclui um recurso de configurações de segurança de rede
- que permite que os aplicativos personalizem as configurações de segurança de rede em um arquivo de configurações declarativo e seguro
- sem modificar o código do aplicativo. Essas configurações podem
- ser definidas para domínios específicos e para um aplicativo específico. Os principais
- recursos são:
-</p>
-
-<ul>
- <li>
- <b>Âncoras de confiança personalizadas:</b> personalize quais autoridades de certificado (CA)
- são confiáveis para as conexões seguras de um aplicativo. Por
- exemplo, confiar em certificados autoassinados privados ou restringir
- o conjunto de CAs públicas nas quais o aplicativo confia.
- </li>
-
- <li>
- <b>Substituições somente de depuração:</b> depure conexões seguras do aplicativo com segurança,
- sem adicionar riscos à base instalada.
- </li>
-
- <li>
- <b>Cancelar uso de tráfego de texto simples:</b> proteja aplicativos contra
- o uso acidental de tráfego de texto simples.
- </li>
-
- <li>
- <b>Fixar certificados:</b> restrinja a conexão segura de um aplicativo
- a certificados específicos.
- </li>
-</ul>
-
-
-<h2 id="manifest">Adicionar um arquivo de configurações de segurança</h2>
-
-<p>
- O recurso de configurações de segurança de rede usa um arquivo XML no qual você especifica
- as configurações do seu aplicativo. Inclua uma entrada no manifesto do seu
- aplicativo para apontar para esse arquivo. Este trecho de código de um manifesto
- demonstra como criar essa entrada:
-</p>
-
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<manifest ... >
- <application ... >
- <meta-data android:name="android.security.net.config"
- android:resource="@xml/network_security_config" />
- ...
- </application>
-</manifest>
-</pre>
-
-<h2 id="CustomTrust">Personalizar CAs confiáveis</h2>
-
-<p>
- Um aplicativo pode querer confiar em um conjunto personalizado de CAs em vez de no padrão
- da plataforma. Os motivos mais comuns para isso são:
-</p>
-
-<ul>
- <li>Conectar-se a um host com uma autoridade de certificado personalizada (autoassinada,
- emitida por uma CA corporativa interna etc.).
- </li>
-
- <li>Limitar o conjunto de CAs para apenas aquelas nas quais você confia em vez de todas
- as CAs pré-instaladas.
- </li>
-
- <li>Confiar em CAs adicionais não incluídas no sistema.
- </li>
-</ul>
-
-<p>
- Por padrão, conexões seguras (por exemplo, TLS, HTTPS) de todos os aplicativos confiam
- nas CAs pré-instaladas do sistema e os aplicativos direcionados ao nível da API 23
- (Android M) e inferior também confiam no repositório de CAs adicionadas pelo usuário por padrão. Um
- aplicativo pode personalizar as próprias conexões usando {@code base-config} (para
- personalização em todo o aplicativo) ou {@code domain-config} (para personalização
- por domínio).
-</p>
-
-
-<h3 id="ConfigCustom">Configurar uma CA personalizada</h3>
-
-<p>
- Suponhamos que você queira se conectar a um host que use um certificado SSL autoassinado
- ou a um host cujo certificado SSL foi emitido por uma CA não pública
- na qual confia, como a CA interna da sua empresa.
-</p>
-
-<p>
- <code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">example.com</domain>
- <trust-anchors>
- <certificates src="@raw/my_ca"/>
- </trust-anchors>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-<p>
- Adicione o certificado da CA autoassinada ou não pública em formato PEM ou DER em
- {@code res/raw/my_ca}.
-</p>
-
-
-<h3 id="LimitingCas">Limitar o conjunto de CAs confiáveis</h3>
-
-<p>
- Um aplicativo que não queira confiar em todas as CAs nas quais o sistema confia
- pode especificar o próprio conjunto limitado de CAs confiáveis. Isso protege o
- aplicativo contra certificados fraudulentos emitidos por qualquer outra CA.
-</p>
-
-<p>
- A configuração para limitar o conjunto de CAs confiáveis é semelhante a <a href="#TrustingACustomCa">confiar em uma CA personalizada</a> para um domínio específico, mas
- fornecendo várias CAs no recurso.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">secure.example.com</domain>
- <domain includeSubdomains="true">cdn.example.com</domain>
- <trust-anchors>
- <certificates src="@raw/trusted_roots"/>
- </trust-anchors>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-<p>
- Adicione as CAs confiáveis em formato PEM ou DER em {@code res/raw/trusted_roots}.
- Observe que, ao usar o formato PEM, o arquivo deve conter <em>somente</em> dados PEM,
- sem texto adicional. Você também pode fornecer vários elementos
- <a href="#certificates"><code><certificates></code></a>
-em vez de um.
-</p>
-
-
-<h3 id="TrustingAdditionalCas">
- Confiar em CAs adicionais
-</h3>
-
-<p>
- Um aplicativo pode querer confiar em CAs adicionais nas quais o sistema não confia.
- Isso pode ocorrer se o sistema ainda não incluiu a CA ou se a CA
- não atender aos requisitos de inclusão no sistema Android. O
- aplicativo pode fazer isso ao especificar várias fontes de certificados para uma
- configuração.
-</p>
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <base-config>
- <trust-anchors>
- <certificates src="@raw/extracas"/>
- <certificates src="system"/>
- </trust-anchors>
- </base-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="TrustingDebugCa">Configurar CAs para depuração</h2>
-
-<p>
- Ao depurar um aplicativo conectado por HTTPS, você pode querer
- se conectar a um servidor de desenvolvimento local que não tenha o certificado SSL
- do seu servidor de produção. Para fazer isso sem
- modificar o código do aplicativo, você pode especificar CAs somente de depuração que
- sejam confiáveis <i>apenas</i> quando <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">
-android:debuggable</a>
- for {@code true} ao usar {@code debug-overrides}. Normalmente, IDEs e ferramentas de compilação
- definem esse sinalizador automaticamente para compilações de não lançamento.
-</p>
-
-<p>
- Isso é mais seguro do que o código condicional normal, pois, como medida
- de segurança, os repositórios do aplicativo não aceitam aplicativos marcados como
- depuráveis.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <debug-overrides>
- <trust-anchors>
- <certificates src="@raw/debug_cas"/>
- </trust-anchors>
- </debug-overrides>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="UsesCleartextTraffic">Cancelar uso de tráfego de texto simples</h2>
-
-<p>
- Aplicativos que pretendem se conectar a destinos usando apenas conexões
- seguras podem cancelar o uso de texto simples de suporte (usando o protocolo HTTP não criptografado
- em vez de HTTPS) para esses destinos. Essa opção ajuda a evitar
- regressões acidentais em aplicativos devido a alterações nos URLs fornecidos por fontes externas,
- como servidores de back-end.
- Consulte {@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted
- NetworkSecurityPolicy.isCleartextTrafficPermitted()} para saber mais.
-</p>
-
-<p>
- Por exemplo, um aplicativo pode querer garantir que todas as conexões com {@code
- secure.example.com} sejam sempre realizadas por HTTPS para proteger o tráfego confidencial
- de redes hostis.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config usesCleartextTraffic="false">
- <domain includeSubdomains="true">secure.example.com</domain>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="CertificatePinning">Fixar certificados</h2>
-
-<p>
- Normalmente, um aplicativo confia em todas as CAs pré-instaladas. Se qualquer uma dessas CAs
- emitir um certificado fraudulento, o aplicativo estará em risco de ataques
- MiTM. Alguns aplicativos optam por limitar o conjunto de certificados que aceitam
- restringindo o conjunto de CAs ou fixando certificados.
-</p>
-
-<p>
- A fixação de certificados é realizada ao fornecer um conjunto de certificados pelo hash da
- chave pública (SubjectPublicKeyInfo do certificado X.509). Uma cadeia de certificados
- é válida somente se contiver pelo menos uma
- das chaves públicas fixadas.
-</p>
-
-<p>
- Observe que, ao usar a fixação de certificados, você deve sempre incluir uma chave de backup
- para que, se você for forçado a alternar para novas chaves ou alterar as CAs (ao
- fixar um certificado de CA ou um intermediário dessa CA), a
- conectividade do seu aplicativo não seja afetada. Caso contrário, você precisará enviar
- uma atualização ao aplicativo para restaurar a conectividade.
-</p>
-
-<p>
- Além disso, é possível definir um tempo de expiração para as fixações, após o qual
- elas não sejam mais realizadas. Isso ajuda a evitar problemas de conectividade
- em aplicativos que não foram atualizados. No entanto, definir um tempo de expiração
- para fixações pode permitir que as fixações sejam ignoradas.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">example.com</domain>
- <pin-set expiration="2018-01-01">
- <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
- <!-- backup pin -->
- <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
- </pin-set>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="ConfigInheritance">Comportamento de herança de configuração</h2>
-
-<p>
- Valores não definidos em uma configuração específica são herdados. Esse comportamento permite
- configurações mais complexas, mantendo o arquivo de configuração legível.
-</p>
-
-<p>
- Se um valor não for definido em uma entrada específica, o valor da próxima entrada
- mais genérica será usado. Valores não definidos em um {@code domain-config} são
- obtidos pelo {@code domain-config} pai, se aninhados, ou, caso contrário, pelo {@code
- base-config}. Valores não definidos no {@code base-config} usam os
- valores padrão da plataforma.
-</p>
-
-<p>
- Por exemplo, considere um caso no qual todas as conexões para subdomínios de {@code
- example.com} devem usar um conjunto personalizado de CAs. Além disso, o tráfego de texto simples para esses
- domínios é permitido <em>exceto</em> ao se conectar com {@code
- secure.example.com}. Ao aninhar a configuração para {@code
- secure.example.com} dentro da configuração para {@code example.com}, o
- {@code trust-anchors} não precisa ser duplicado.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">example.com</domain>
- <trust-anchors>
- <certificates src="@raw/my_ca"/>
- </trust-anchors>
- <domain-config cleartextTrafficPermitted="false">
- <domain includeSubdomains="true">secure.example.com</domain>
- </domain-config>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="FileFormat">Formato do arquivo de configurações</h2>
-
-<p>
- O recurso de configurações de segurança de rede usa um formato do arquivo XML.
- A estrutura geral desse arquivo é mostrada no seguinte exemplo de código:
-</p>
-
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <base-config>
- <trust-anchors>
- <certificates src="..."/>
- ...
- </trust-anchors>
- </base-config>
-
- <domain-config>
- <domain>android.com</domain>
- ...
- <trust-anchors>
- <certificates src="..."/>
- ...
- </trust-anchors>
- <pin-set>
- <pin digest="...">...</pin>
- ...
- </pin-set>
- </domain-config>
- ...
- <debug-overrides>
- <trust-anchors>
- <certificates src="..."/>
- ...
- </trust-anchors>
- </debug-overrides>
-</network-security-config>
-</pre>
-
-<p>
- As seções a seguir descrevem a sintaxe e outros detalhes do formato do
- arquivo.
-</p>
-
-<h3 id="network-security-config">
- <network-security-config>
-</h3>
-
-<dl class="xml">
- <dt>
- pode conter:
- </dt>
-
- <dd>
- 0 ou 1 de <code><a href="#base-config"><base-config></a></code><br>
- Qualquer número de <code><a href=
- "#domain-config"><domain-config></a></code><br>
- 0 ou 1 de <code><a href="#debug-overrides"><debug-overrides></a></code>
- </dd>
-</dl>
-
-<h3 id="base-config">
- <base-config>
-</h3>
-
-<dl class="xml">
- <dt>
- sintaxe:
- </dt>
-</dl>
-
-<pre class="stx">
-<base-config <a href=
-"#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
- ...
-</base-config>
-</pre>
-<dl class="xml">
- <dt>
- pode conter:
- </dt>
-
- <dd>
- <code><a href="#trust-anchors"><trust-anchors></a></code>
- </dd>
-
- <dt>
- descrição:
- </dt>
-
- <dd>
- A configuração padrão usada por todas as conexões cujo destino não é
- coberto por um <a href="#domain-config"><code>domain-config</code></a>.
-
-<p>
- Qualquer valor não definido usa os valores padrão da plataforma. A configuração padrão
- para aplicativos direcionados a níveis de API acima do 24:
-</p>
-
-<pre>
-<base-config usesCleartextTraffic="true">
- <trust-anchors>
- <certificates src="system" />
- </trust-anchors>
-</base-config>
-</pre>
-A configuração padrão para aplicativos direcionados a níveis de API 23 e inferiores:
-<pre>
-<base-config usesCleartextTraffic="true">
- <trust-anchors>
- <certificates src="system" />
- <certificates src="user" />
- </trust-anchors>
-</base-config>
-</pre>
-
- </dd>
-</dl>
-
-<h3 id="domain-config"><domain-config></h3>
-<dl class="xml">
-<dt>sintaxe:</dt>
-<dd>
-<pre class="stx"><domain-config <a href="#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
- ...
-</domain-config></pre>
-</dd>
-
-<dt>Pode conter:</dt>
-
-<dd>
-1 ou mais <code><a href="#domain"><domain></a></code>
-<br/>0 ou 1 <code><a href="#trust-anchors"><trust-anchors></a></code>
-<br/>0 ou 1 <code><a href="#pin-set"><pin-set></code></a>
-<br/>Qualquer número de <code><domain-config></code> aninhados</dd>
-
-<dt>Descrição</dt>
-<dd>A configuração usada para conexões com destinos específicos, conforme é definido pelos elementos {@code domain}.
-
-<p>Observe que, se vários elementos {@code domain-config} cobrirem um destino, a configuração com a regra de domínio correspondente
-mais específica (mais longa) será usada.</p></dd>
-</dl>
-
-
-<h3 id="domain"><domain></h3>
-
-<dl class="xml">
- <dt>
- sintaxe:
- </dt>
-
- <dd>
- <pre class="stx">
-<domain includeSubdomains=["true" | "false"]>example.com</domain>
-</pre>
- </dd>
-
- <dt>
- Atributos:
- </dt>
-
- <dd>
- <dl class="attr">
- <dt>
- {@code includeSubdomains}
- </dt>
-
- <dd>
- Se {@code "true"}, a regra de domínio corresponderá ao domínio e a todos os
- subdomínios, incluindo subdomínios de subdomínios. Caso contrário, a regra
- se aplica apenas a correspondências exatas.
- </dd>
- </dl>
- </dd>
-
- <dt>
- Descrição:
- </dt>
-</dl>
-
-<h3 id="debug-overrides"><debug-overrides></h3>
-
-<dl class="xml">
- <dt>
- sintaxe:
- </dt>
-
- <dd>
- <pre class="stx">
-<debug-overrides>
- ...
-</debug-overrides>
-</pre>
- </dd>
-
- <dt>
- Pode conter:
- </dt>
-
- <dd>
- 0 ou 1 <code><a href="#trust-anchors"><trust-anchors></a></code>
- </dd>
-
- <dt>
- Descrição:
- </dt>
-
- <dd>
- Substituições a serem aplicadas quando <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
- for {@code "true"}, o que normalmente ocorre em compilações de não lançamento
- geradas por IDEs e ferramentas de compilação. Âncoras de confiança especificadas em {@code
- debug-overrides} são adicionadas a todas as demais configurações e a fixação
- de certificados não é realizada quando a cadeia de certificados do servidor usa uma
- dessas âncoras de confiança somente de depuração. Se <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
- for {@code "false"}, esta seção será ignorada por completo.
- </dd>
-</dl>
-
-<h3 id="trust-anchors"><trust-anchors></h3>
-<dl class="xml">
- <dt>
- sintaxe:
- </dt>
-
- <dd>
- <pre class="stx">
-<trust-anchors>
-...
-</trust-anchors>
-</pre>
- </dd>
-
- <dt>
- Pode conter:
- </dt>
-
- <dd>
- Qualquer número de <code><a href="#certificates"><certificates></a></code>
- </dd>
-
- <dt>
- Descrição:
- </dt>
-
- <dd>
- Conjunto de âncoras de confiança para conexões seguras.
- </dd>
-</dl>
-
-
-<h3 id="certificates"><certificates></h3>
-<dl class="xml">
-<dt>sintaxe:</dt>
-<dd><pre class="stx"><certificates src=["system" | "user" | "<i>raw resource</i>"]
- overridePins=["true" | "false"] />
-</pre></dd>
-<dt>descrição:</dt>
-<dd>Conjunto de certificados X.509 para elementos {@code trust-anchors}.</dd>
-
-<dt>atributos:</dt>
-<dd><dl class="attr">
-<dt>{@code src}</dt>
-<dd>
-A fonte de certificados de CA, que pode ser um dos
-<ul>
- <li>IDs de recursos brutos que apontam para um arquivo que contém certificados X.509.
- Os certificados devem ser codificados em formato DER ou PEM. No caso de certificados PEM,
- o arquivo <em>não deve</em> conter dados não PEM adicionais, como
- comentários.
- </li>
-
- <li>{@code "system"} para os certificados de CA pré-instalados do sistema
- </li>
-
- <li>{@code "user"} para certificados de CA adicionados pelo usuário
- </li>
-</ul>
-</dd>
-
-<dt>{@code overridePins}</dt>
-<dd>
- <p>
- Especifica se as CAs dessa fonte ignoram a fixação de certificados. Se {@code
- “true”} e forem certificadas cadeias de certificados que incluam uma das CAs dessa
- fonte, a fixação não será realizada. Isso pode ser útil para depurar CAs
- ou permitir que o usuário execute ataques MiTM no tráfego seguro do seu aplicativo.
- </p>
-
- <p>
- O padrão é {@code "false"} a não ser que seja especificado em um elemento {@code debug-overrides}
-. Nesse caso, o padrão será {@code "true"}.
- </p>
-</dd>
-</dl>
-</dd>
-
-
-<h3 id="pin-set"><pin-set></h3>
-
-<dl class="xml">
- <dt>
- sintaxe:
- </dt>
-
- <dd>
-<pre class="stx">
-<pin-set expiration="date">
-...
-</pin-set>
-</pre>
- </dd>
-
- <dt>
- Pode conter:
- </dt>
-
- <dd>
- Qualquer número de <code><a href="#pin"><pin></a></code>
- </dd>
-
- <dt>
- Descrição:
- </dt>
-
- <dd>
- Um conjunto de fixações de chave pública. Para que uma conexão segura seja confiável, uma das
- chaves públicas na cadeia de confiança deve estar presente no conjunto de fixações. Consulte
- <code><a href="#pin"><pin></a></code> para saber mais sobre o formato das fixações.
- </dd>
-
- <dt>
- Atributos:
- </dt>
-
- <dd>
- <dl class="attr">
- <dt>
- {@code expiration}
- </dt>
-
- <dd>
- A data, no formato {@code yyyy-MM-dd}, após a qual as fixações
- expiram e são desativadas. Se o atributo não for definido, as fixações
- não expirarão.
- <p>
- A expiração ajuda a evitar problemas de conectividade em aplicativos que não
- recebem atualizações para o conjunto de fixações, por exemplo, porque o usuário
- desativou as atualizações do aplicativo.
- </p>
- </dd>
- </dl>
- </dd>
-</dl>
-
-<h3 id="pin"><pin></h3>
-<dl class="xml">
- <dt>
- sintaxe:
- </dt>
-
- <dd>
-<pre class="stx">
-<pin digest=["SHA-256"]>base64 encoded digest of X.509
- SubjectPublicKeyInfo (SPKI)</pin>
-</pre>
- </dd>
-
- <dt>
- Atributos:
- </dt>
-
- <dd>
- <dl class="attr">
- <dt>
- {@code digest}
- </dt>
-
- <dd>
- O algoritmo de resumo usado para gerar a fixação. No momento, apenas
- {@code "SHA-256"} é permitido.
- </dd>
- </dl>
- </dd>
-</dl>
diff --git a/docs/html-intl/intl/pt-br/preview/features/tv-recording-api.jd b/docs/html-intl/intl/pt-br/preview/features/tv-recording-api.jd
deleted file mode 100644
index 890e140..0000000
--- a/docs/html-intl/intl/pt-br/preview/features/tv-recording-api.jd
+++ /dev/null
@@ -1,142 +0,0 @@
-page.title=Gravação para TV
-page.keywords=preview,sdk,tv,recording
-page.tags=androidn
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>Neste documento</h2>
- <ol>
- <li><a href="#supporting">Indicar suporte para gravação</a></li>
- <li><a href="#recording">Gravar uma sessão</a></li>
- <li><a href="#errors">Solucionar erros de gravação</a></li>
- <li><a href="#sessions">Gerenciar sessões gravadas</a></li>
- <li><a href="#best">Práticas recomendadas</a></li>
- </ol>
-</div>
-</div>
-
-<p>Serviços de entrada de TV permitem que o usuário pause e retome a reprodução do canal por meio de
-APIs de time-shifting. O Android N expande o time-shifting
-ao permitir que o usuário salve várias sessões gravadas.</p>
-
-<p>Os usuários podem programar gravações antecipadamente ou iniciar uma gravação enquanto assistem a
-um programa. Quando o sistema salvar a gravação, o usuário poderá procurar, gerenciar
-e reproduzir a gravação usando o aplicativo de TV do sistema.</p>
-
-<p>Se quiser fornecer recursos de gravação para seu serviço de entrada de TV,
-indique para o sistema que o aplicativo oferece suporte a gravação, implemente
-a capacidade de gravar programas, solucione e comunique erros ocorridos
-durante a gravação e gerencie as sessões gravadas.</p>
-
-<p class="note"><strong>Observação:</strong> O aplicativo Live Channels ainda não
-oferece aos usuários uma forma de criar ou acessar gravações. Enquanto o aplicativo Live Channels não sofrer
- alterações, será difícil testar toda a experiência de
-gravação de seu serviço de entrada de TV.</p>
-
-<h2 id="supporting">Indicar suporte para gravação</h2>
-
-<p>Para informar ao sistema que seu serviço de entrada de TV oferece suporte a gravação, defina
- o atributo <code>android:canRecord</code> no arquivo XML de metadados do serviço
- como <code>true</code>:
-</p>
-
-<pre>
-<tv-input xmlns:android="http://schemas.android.com/apk/res/android"
- <b>android:canRecord="true"</b>
- android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />
-</pre>
-
-<p>Para obter mais informações sobre o arquivo de metadados do serviço, consulte
-<a href="{@docRoot}training/tv/tif/tvinput.html#manifest">Declarar seu serviço
-de entrada de TV no manifesto</a> (em inglês).
-</p>
-
-<p>Como alternativa, você pode indicar suporte a gravação em seu código usando
-estas etapas:</p>
-
-<ol>
-<li>No método <code>TvInputService.onCreate()</code>, crie um novo objeto
-<code>TvInputInfo</code> usando a classe <code>TvInputInfo.Builder</code>
-.</li>
-<li>Ao criar o novo objeto <code>TvInputInfo</code>, chame
-<code>setCanRecord(true)</code> antes de chamar <code>build()</code> para
-indicar que seu serviço oferece suporte a gravação.</li>
-<li>Registre seu objeto <code>TvInputInfo</code> com o sistema chamando
-<code>TvInputManager.updateTvInputInfo()</code>.</li>
-</ol>
-
-<h2 id="recording">Gravar uma sessão</h2>
-
-<p>Depois que o serviço de entrada de TV registrar que oferece suporte ao recurso
-de gravação, o sistema chamará seu
-<code>TvInputService.onCreateRecordingSession()</code> quando precisar acessar
-a implementação de gravação do seu aplicativo. Implemente sua própria subclasse
-<code>TvInputService.RecordingSession</code> e retorne-a
-quando o retorno de chamada <code>onCreateRecordingSession()</code>
-for acionado. Essa subclasse é responsável por alternar para os dados de canal corretos,
-gravando os dados solicitados e comunicando o status de gravação e os erros ao
-sistema.</p>
-
-<p>Quando o sistema chamar <code>RecordingSession.onTune()</code>, passando um
-URI de canal, acesse o canal especificado pelo URI. Notifique o sistema de que
-seu aplicativo acessou o canal desejado ao chamar <code>notifyTuned()</code>
-ou, se o aplicativo não conseguiu acessar o canal correto, chame
-<code>notifyError()</code>.</p>
-
-<p>Em seguida, o sistema invoca o retorno de chamada <code>RecordingSession.onStartRecording()</code>
-. O aplicativo deve iniciar a gravação imediatamente. Quando o sistema invoca
-esse retorno de chamada, ele pode fornecer um URI que contenha informações sobre o programa
-que será gravado. Quando a gravação for concluída, você deverá copiar esses
-dados para a tabela de dados <code>RecordedPrograms</code>.</p>
-
-<p>Por fim, o sistema chama <code>RecordingSession.onStopRecording()</code>.
-Nesse momento, o aplicativo deve interromper a gravação imediatamente. Também é preciso
-criar uma entrada na tabela <code>RecordedPrograms</code>. Essa entrada deve
-incluir o URI dos dados da sessão gravada na coluna
-<code>RecordedPrograms.COLUMN_RECORDING_DATA_URI</code> e qualquer informação
-sobre o programa fornecida pelo sistema na chamada inicial em
-<code>onStartRecording()</code>.</p>
-
-<p>Para saber mais sobre como acessar a tabela <code>RecordedPrograms</code>,
-consulte <a href="#sessions">Gerenciar sessões gravadas</a>.</p>
-
-<h2 id="errors">Solucionar erros de gravação</h2>
-
-<p>Se um erro ocorrer durante a gravação, inutilizando os dados gravados,
-notifique o sistema chamando <code>RecordingSession.notifyError()</code>.
-Também é possível chamar <code>notifyError()</code> depois que uma sessão de gravação é
-criada para informar ao sistema que seu aplicativo não pode mais gravar sessões.</p>
-
-<p>Se um erro ocorrer durante a gravação, mas você quiser fornecer uma gravação
-parcial que pode ser usada pelos usuários para reprodução, chame
-<code>RecordingSession.notifyRecordingStopped()</code> para permitir que o sistema
-use a sessão parcial.</p>
-
-<h2 id="sessions">Gerenciar sessões gravadas</h2>
-
-<p>O sistema mantém as informações de todas as sessões gravadas de todos
-os aplicativos de canais com recursos de gravação na tabela de provedor de conteúdo <code>TvContract.RecordedPrograms</code>
-. Essas informações podem ser acessadas pelo URI de conteúdo
-<code>RecordedPrograms.Uri</code>. Use APIs de provedores de conteúdo para
-ler, adicionar e excluir entradas dessa tabela.</p>
-
-<p>Para saber mais sobre como trabalhar com dados de provedores de conteúdo, consulte
-<a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
-Fundamentos do provedor de conteúdo</a> .</p>
-
-<h2 id="best">Práticas recomendadas</h2>
-
-<p>Dispositivos de TV podem ter armazenamento limitado, então tenha bom senso ao
-alocar armazenamento para salvar sessões gravadas. Use
-<code>RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)</code> quando
-não houver espaço suficiente para salvar uma sessão gravada.</p>
-
-<p>Quando o usuário iniciar a gravação, comece a gravar os dados assim
-que possível. Para facilitar esse processo, realize qualquer tarefa demorada imediatamente,
-como acessar e alocar o espaço de armazenamento, quando o sistema invocar o retorno de chamada
-<code>onCreateRecordingSession()</code>. Isso permite que você comece
-a gravar imediatamente após o acionamento do retorno de chamada <code>onStartRecording()</code>
-.</p>
diff --git a/docs/html-intl/intl/pt-br/preview/guide.jd b/docs/html-intl/intl/pt-br/preview/guide.jd
deleted file mode 100644
index b33369e..0000000
--- a/docs/html-intl/intl/pt-br/preview/guide.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="qv-wrapper">
- <div id="qv">
- <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/preview/index.jd b/docs/html-intl/intl/pt-br/preview/index.jd
deleted file mode 100644
index 58b2408..0000000
--- a/docs/html-intl/intl/pt-br/preview/index.jd
+++ /dev/null
@@ -1,131 +0,0 @@
-page.title=Android N Developer Preview
-page.tags="preview","developer"
-meta.tags="preview", "android"
-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">
- <div class="wrap" style="max-width:1100px;margin-top:0">
- <div class="cols dac-hero-content" style="padding-bottom:1em;">
-
- <div class="col-7of16 col-push-9of16" style="padding-left:2em">
- <h1 class="dac-hero-title">Android N Developer Preview</h1>
- <p class="dac-hero-description">
- Prepare-se para o Android N!
- <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">
- <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>-->
- </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>
- </div>
- <div class="dac-section dac-small">
- <div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/resources"
- data-cardSizes="6x2"
- data-maxResults="6"></div>
- </div>
- </div>
-</section>
-
-<div id="useUpdatedTemplates" style="display:none" 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>
- </a>
- <ul class="dac-actions">
- <li class="dac-action">
- <a class="dac-action-link" href="https://developer.android.com/preview/bug">
- <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
- </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>
- 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"
- data-query="type:blog+tag:androidn+tag:featured, type:youtube+tag:androidn+tag:featured"
- data-sortOrder="-timestamp"
- data-cardSizes="6x6"
- data-items-per-page="6"
- data-maxResults="15"
- data-initial-results="3"></div>
-</div></section>
-
-<section class="dac-section dac-gray"><div class="wrap">
- <h1 class="dac-section-title">Recursos</h1>
- <div class="dac-section-subtitle">
- Informações essenciais para ajudar você a preparar seus aplicativos para o Android N.
- </div>
-
- <div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/more"
- data-cardSizes="6x6"
- data-items-per-page="6"
- data-maxResults="15"
- data-initial-results="6"></div>
-
- </div>
-</section>
-
diff --git a/docs/html-intl/intl/pt-br/preview/license.jd b/docs/html-intl/intl/pt-br/preview/license.jd
deleted file mode 100644
index 7228bb0..0000000
--- a/docs/html-intl/intl/pt-br/preview/license.jd
+++ /dev/null
@@ -1,145 +0,0 @@
-page.title=Contrato de licença
-
-@jd:body
-
-<p>
-Para começar a usar o Android SDK Preview, você deve concordar com os seguintes termos e condições.
-Como descrito abaixo, observe que esta é uma versão de prévia do Android SDK, sujeita a alterações, que deve ser usada por seu risco. O Android SDK Preview não é uma versão estável e pode conter erros e defeitos que podem resultar em danos sérios aos sistemas de computador, aos dispositivos e aos dados.
-</p>
-
-<p>
-Este é o contrato de licença do Android SDK Preview (o “Contrato de Licença”).
-</p>
-<div class="sdk-terms" style="height:auto;border:0;padding:0;width:700px">
-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" refere-se à 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 “Compatível com Android” significa qualquer implementação do Android que (i) obedece ao documento Definição de Compatibilidade com Android, que pode ser encontrado no site de compatibilidade do Android (http://source.android.com/compatibility) que pode ser atualizado de tempos em tempos; e (ii) seja aprovado no Android Compatibility Test Suite (CTS).
-
-1.4 “Google” se refere à 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 deste Contrato de licença, a Google confere uma licença limitada, mundial, sem royalties, intransmissível, não exclusiva e não sublicenciável unicamente para o uso do Preview exclusivamente para o desenvolvimento de aplicativos executados para implementações compatíveis do Android.
-
-3.2 Você não poderá usar este Preview para desenvolver aplicativos para outras plataformas (incluindo implementações não compatíveis do Android) nem para desenvolver outro SDK. Você tem a liberdade para desenvolver aplicativos para outras plataformas, incluindo implementações não compatíveis do Android, desde que este Preview não seja usado para essa finalidade.
-
-3.3 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.4 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.5 O uso, a reprodução e a distribuição de componentes do Preview licenciado sob uma 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 situação regular 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 Preview que a Google fornece podem mudar sem aviso prévio e que as versões futuras do Preview podem ser incompatíveis com aplicativos desenvolvidos em versões anteriores do Preview. 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. O uso do Preview
-
-4.1 A Google entende que nada no Contrato de Licença dá a ela direitos, título nem interesse sobre o usuário (ou sobre os seus licenciadores) sob o presente Contrato de licença nem sobre quaisquer aplicativos de software que o usuário desenvolver usando o Preview, incluindo quaisquer direitos de propriedade intelectual que subsistem 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 de dados ou softwares dos e para os Estados Unidos ou 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 dos 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 que possa acessar 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 proprietários.
-
-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>
\ No newline at end of file
diff --git a/docs/html-intl/intl/pt-br/preview/overview.jd b/docs/html-intl/intl/pt-br/preview/overview.jd
deleted file mode 100644
index 1c81f6d..0000000
--- a/docs/html-intl/intl/pt-br/preview/overview.jd
+++ /dev/null
@@ -1,440 +0,0 @@
-page.title=Visão geral do programa
-page.metaDescription=Prepare seus aplicativos para a próxima versão do Android.
-page.image=images/cards/card-n-overview_2x.png
-meta.tags="preview", "developer", "android"
-page.tags="preview", "developer", "android"
-
-@jd:body
-<!--
-<div class="cols" style=
-"background-color:#f2daf5; padding: 5px 0;margin-bottom:1em; text-align:center;">
-<h3>
- Developer Preview 3 is now available
- </h3>
- <p>Includes final SDK and near-final system images</p>
- <div style="margin:auto 1em">
- <ul class="dac-section-links">
- <li class="dac-section-link">
- <a href="{@docRoot}preview/support.html#preview3-notes">
- <span class="dac-sprite dac-auto-chevron"></span>
- Read the Notes</a>
- </li>
-
- <li class="dac-section-link">
- <a href="{@docRoot}preview/support.html#preview3-get">
- <span class="dac-sprite dac-auto-chevron"></span>
- Get the Update</a>
- </li>
-
- <li class="dac-section-link">
- <a href="https://code.google.com/p/android-developer-preview/">
- <span class="dac-sprite dac-auto-chevron"></span>
- Report Issues</a>
- </li>
- </ul>
- </div>
-</div>
--->
-
-<p>
- Bem-vindo ao <strong>Android N Developer Preview</strong>, um programa que
- fornece tudo que é necessário para testar e otimizar os aplicativos para a próxima
- versão do Android. É de graça e você pode começar agora mesmo:
- basta fazer o download das ferramentas N Developer Preview.
-</p>
-
-
-
-
-
-
-
-<div style="background-color:#eceff1;padding:1em;">
-<div class="wrap">
- <div class="cols">
- <div class="col-4of12">
- <h5>
- Imagens de emulador e hardware
- </h5>
-
- <p>
- Execute e teste seus aplicativos em diversos dispositivos ou em um emulador.
-
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- Código de plataforma mais recente
- </h5>
-
- <p>
- Forneceremos atualizações mensais durante o Preview. Portanto, você testará de acordo com as alterações mais recentes da plataforma.
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- Prioridade para problemas de desenvolvimento
- </h5>
-
- <p>
- Durante as primeiras semanas, nós daremos prioridade aos problemas informados
- por desenvolvedores. Portanto, teste e forneça-nos feedback o quanto antes.
- </p>
- </div>
-
- </div>
-
- <div class="cols">
-
-
- <div class="col-4of12">
- <h5>
- Novos comportamentos e recursos
- </h5>
-
- <p>
- Comece a trabalhar mais cedo para oferecer suporte aos novos comportamentos da plataforma e desenvolver seus aplicativos com novos recursos.
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- Atualizações entregues por OTA
- </h5>
-
- <p>
- Atualizações OTA eficientes para qualquer dispositivo compatível por meio do
- programa beta do Android. Não é preciso atualizar manualmente.
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- Feedback e suporte
- </h5>
-
- <p>
- Informe problemas e dê-nos feedback usando o
-<a href="{@docRoot}preview/bug">issue tracker</a>. Conecte-se a outros
- desenvolvedores na
- <a href="{@docRoot}preview/dev-community">Comunidade N Developer</a>.
- </p>
- </div>
- </div>
-</div>
-</div>
-
-<!--
-<p>New in the Android N Developer Preview: </p>
-
-<ul>
- <li> Accompanying Android Beta Program for consumers, starting later in the preview</li>
- <li> More supported devices, including devices from OEM partners</li>
- <li> Seamless OTAs for your devices, from initial release to final N release without flashing</li>
-</ul>
--->
-
-<h2 id="timeline">Cronograma e atualizações</h2>
-<img src="{@docRoot}images/n-preview-updates_2x.png">
-
-<p>
- O N Developer Preview será executado a partir de 3 de março de 2016 até o último lançamento público do Android N
- para AOSP e OEMs, planejado para o terceiro trimestre de 2016.
-</p>
-
-<p>
- Nos marcos mais importantes do desenvolvimento, forneceremos atualizações para seu ambiente de teste e
- desenvolvimento. De modo geral, você pode esperar atualizações mensais (intervalo de
- 4 a 6 semanas). Os marcos estão listados abaixo.
-</p>
-
-<ul>
- <li><strong><a href="{@docRoot}preview/support.html#dp1">Preview 1</a></strong> (versão inicial, alfa)</li>
- <li><strong><a href="{@docRoot}preview/support.html#dp2">Preview 2</a></strong> (atualização incremental, alfa)</li>
- <li><strong><a href="{@docRoot}preview/support.html#dp3">Preview 3</a></strong> (atualização incremental, beta)</li>
- <li><strong>Preview 4</strong> (APIs finais e SDK oficial, publicação no Play)</li>
- <li><strong>Preview 5</strong> (imagens de sistema quase finalizadas para o teste final)</li>
- <li><strong>Versão final</strong> para AOSP e ecossistema</li>
-</ul>
-
-<p>
- Cada atualização inclui ferramentas do SDK, imagens de sistema do Preview, emuladores, documentação de
- referência e diferenças entre as APIs.
-</p>
-
-<p>
- Os <strong>três primeiros marcos do Preview</strong> oferecem um <strong>ambiente
- de teste e desenvolvimento antecipado</strong> para ajudar você a identificar
- problemas de compatibilidade em seus aplicativos atuais e planejar a migração ou o trabalho em recursos
- necessários para desenvolver para a nova plataforma. Esse é o período prioritário no qual você deve
- fornecer feedback sobre os recursos e as APIs e informar problemas de compatibilidade
- — para isso, use o <a href="{@docRoot}preview/bug">issue
- tracker</a>. As APIs sofrerão algumas alterações nessas atualizações.
-</p>
-
-<p>
- Nos <strong>Previews 4 e 5</strong>, você terá acesso às <strong>versões finais
- das APIs e do SDK do N</strong>, com as quais poderá desenvolver, além de imagens de sistema quase finalizadas
- para testar comportamentos e recursos do sistema. O Android N fornecerá um
- nível da API padrão no momento. Você poderá iniciar os testes finais de compatibilidade dos seus aplicativos
- legados e refinar códigos novos que usem as APIs ou os recursos do N.
-</p>
-
-<p>
- Também a partir do Preview 4, você poderá <strong>publicar aplicativos
- para dispositivos</strong> que executem o Android N no nível da API oficial, como
- dispositivos de consumidor que optaram pelo programa beta do Android. Será possível
- publicar nos canais alfa e beta do Google Play primeiro para testar
- seus aplicativos com clientes beta do Android antes de distribuir para os demais clientes
- da loja.
-</p>
-
-<p>
- Ao testar e desenvolver no Android N, recomendamos que você <strong>mantenha
- o ambiente de desenvolvimento atualizado</strong> à medida que atualizações do Preview são
- lançadas. Para facilitar o processo, você pode inscrever seus dispositivos de teste no
- programa beta do Android e receber <strong>atualizações por OTA</strong> em
- cada marco. Como alternativa, imagens atualizadas do Preview estão disponíveis para
- download e atualização manual.
-</p>
-
-<p>
- Notificaremos você quando as atualizações do Preview estiverem disponíveis por meio do <a href="http://android-developers.blogspot.com/">Android Developers Blog</a>, além
- deste site e da <a href="{@docRoot}preview/dev-community">Comunidade
- Android N Developer</a>.
-</p>
-
-
-<h2 id="preview_tools">O que o N Developer Preview inclui?</h2>
-
-<p>
- O N Developer Preview inclui tudo o que é necessário para testar seus aplicativos existentes
- em uma variedade de tamanhos de tela, tecnologias de rede, chipsets de CPU/GPU
- e arquiteturas de hardware.
-</p>
-
-<h3 id="sdk_tools">Ferramentas do SDK</h3>
-
-<p>É possível fazer o download desses componentes pelo SDK Manager no <a href="{@docRoot}studio/intro/update.html">Android Studio</a>:</p>
-
-<ul>
- <li> <strong>SDK e ferramentas</strong> do N Developer Preview
- <li> <strong>Imagem do sistema de emulador</strong> (32 bits e 64 bits) do N Developer Preview
- <li> <strong>Imagem do sistema de emulador para Android TV</strong> (32 bits) do N Developer Preview
- <li> Bibliotecas de suporte do N Developer Preview (para novos modelos de aplicativos)
-</ul>
-
-<p>
- Forneceremos atualizações para essas ferramentas de desenvolvimento em cada marco, conforme a necessidade.
-</p>
-
-<h3 id="hardware_system_images">Imagens do sistema de hardware</h3>
-
-<p>
- O N Developer Preview inclui imagens do Nexus e de outros sistemas de hardware que podem ser usadas ao
- testar e desenvolver em dispositivos físicos. Consulte a página <a href="{@docRoot}preview/download.html">Imagens de dispositivo</a> para ver a lista completa
- de imagens de hardware.
-</p>
-
-<p>
- Forneceremos imagens de sistema atualizadas para esses dispositivos em cada marco. Você
- pode fazer o download e atualizar as imagens de sistema manualmente
- em seus dispositivos de teste com a frequência necessária. Isso é especialmente útil para ambientes
- de teste automatizados nos quais seja preciso atualizar o dispositivo várias
- vezes.
-</p>
-
-<p class="note"><strong>Observação</strong>:
- <strong>dispositivos atualizados manualmente não receberão atualizações por OTA</strong> como no
- Preview do ano anterior. Neste ano, você recebe OTAs ao inscrever os dispositivos no
- programa beta do Android — veja detalhes na próxima seção.
-</p>
-
-<h3 id="android_beta">Atualizações por OTA no programa beta do Android</h3>
-
-<p>
- Uma novidade do Android N é um programa de atualização por OTA que automaticamente
- fornece as últimas atualizações da prévia do Android N diretamente para os dispositivos inscritos
- no programa. O programa é gratuito e está aberto a todos que tenham
- um dispositivo compatível registrado na conta do Google.
-</p>
-
-<p>
- Para se inscrever no programa, acesse o site do <a href="https://g.co/androidbeta">programa beta
- do Android</a>. Você
- verá uma lista de todos os dispositivos registrados em sua conta que estejam qualificados para inscrição no
- programa beta do Android.
-</p>
-
-<ol>
- <li> Escolha os dispositivos nos quais deseja receber atualizações do Android N
- <li> Clique em Enroll, leia e concorde com os termos de serviço e clique em OK
-</ol>
-
-<p>
- Seu dispositivo receberá uma atualização pouco tempo depois da inscrição. Na maioria dos casos,
- não é necessário fazer uma redefinição completa para migrar para o Android N, mas
- é recomendável fazer o backup de qualquer dado que você não queira perder antes de
- inscrever o dispositivo.
-</p>
-
-<p>
- Conforme as atualizações são enviadas ao seu dispositivo, recomendamos que elas sejam baixadas e
- instaladas assim que possível. Mantenha-se atualizado com as
- últimas mudanças na IU, no comportamento, nas APIs e nos recursos do sistema.
-</p>
-
-<p>
- Quando o Developer Preview for concluído, os dispositivos inscritos
- receberão uma atualização para a versão oficial do Android N.
-</p>
-
-<p>
- É possível cancelar a inscrição dos seus dispositivos no programa beta do Android a qualquer momento no
- site do beta do Android. Antes de cancelar a inscrição, não deixe de fazer o backup dos dados
- no dispositivo.
-</p>
-
- <p class="note"><strong>Observação</strong>:
- Ao cancelar a inscrição, <strong>seu dispositivo será redefinido para as configurações de fábrica</strong>
-, recebendo a última versão
- do Android 6.0 Marshmallow (não necessariamente a versão instalada
- antes da inscrição do dispositivo). Para garantir uma instalação limpa,
- seus dados serão apagados do dispositivo, incluindo contatos, mensagens,
- fotos etc.
-</p>
-
-<h3 id="documentation_and_sample_code">Exemplo de código e documentação</h3>
-
-<p>
- Estes recursos de documentação estão disponíveis no site do Developer Preview para
- ajudar você a saber mais sobre o Android N:
-</p>
-
-<ul>
- <li> <a href="{@docRoot}preview/setup-sdk.html">Preparação para desenvolver para o
-Android N</a> tem
- instruções passo a passo para você iniciar o trabalho.</li>
- <li> <a href="{@docRoot}preview/behavior-changes.html">Mudanças
- de comportamento</a> indicam as principais áreas a serem testadas.</li>
- <li> Documentação de novas APIs, incluindo uma <a href="{@docRoot}preview/api-overview.html">visão geral das APIs</a>, a
-<a href="{@docRoot}preview/setup-sdk.html#docs-dl">referência da
-API</a> disponível para download e guias de desenvolvedor detalhados sobre os recursos principais, como
-suporte para várias janelas, notificações agrupadas, suporte para vários idiomas e outros.
- <li> <a href="{@docRoot}preview/samples.html">Exemplo de código</a> que
- demonstra como oferecer suporte a permissões e outros novos recursos.
- <li> <a href="{@docRoot}preview/support.html#release-notes">Notas de versão</a>
- para a versão atual do N Developer Preview, incluindo notas de mudanças e
- relatórios de diferenças.
-</ul>
-
-<h4 id="reference">Referência da API para download</h4>
-
-<p>
- Durante as primeiras atualizações do Preview, você pode fazer o download da
- <a href="{@docRoot}preview/setup-sdk.html#docs-dl">referência da API
- mais recente para a plataforma Android N</a> como um arquivo zip separado. Esse download
- também inclui um relatório de diferenças que ajuda você a identificar as mudanças da API em relação à
- API 23 e à atualização anterior.
-</p>
-
-<p>
- Quando as APIs do Android N forem finalizadas e um nível da API oficial for atribuído,
- forneceremos a referência da API on-line em <a href="https://developer.android.com">https://developer.android.com</a>.
-</p>
-
-<h3 id="support_resources">
- Recursos de suporte
-</h3>
-
-<p>
- Ao testar e desenvolver no N Developer Preview, use estes canais para
- informar problemas e enviar feedback.
-</p>
-
-<ul>
- <li> O <a href="https://code.google.com/p/android-developer-preview/">Issue
- Tracker do N Developer Preview</a> é o <strong>canal principal de feedback.</strong> É possível informar erros,
- problemas de desempenho e feedback geral pelo issue tracker. Também é possível verificar os
-<a href="{@docRoot}preview/bugs">erros conhecidos</a> e
- encontrar etapas de resolução. Manteremos você atualizado sobre seu problema conforme ele seja avaliado e
- enviado para a equipe de engenharia do Android para análise. </li>
- <li> A <a href="{@docRoot}preview/dev-community">Comunidade Android N Developer</a> é
- uma comunidade do Google+ onde é possível <strong>se conectar a outros desenvolvedores</strong> que trabalham com o
- Android N. É possível compartilhar observações ou ideias, além de encontrar respostas
- para as dúvidas sobre o Android N. Moderaremos a comunidade e fornecemos respostas e
- orientações conforme for necessário.</li>
-</ul>
-
-<h3 id="targeting">Direcionamento, APIs do Preview e publicação</h3>
-
-<p>
- O N Developer Preview fornece um sistema apenas para desenvolvimento e uma biblioteca Android
- que <strong>não tem um nível da API padrão</strong>. Caso opte
- pelos comportamentos de compatibilidade para testar o aplicativo (o que é muito
- recomendado), é possível destinar a versão de prévia do Android N
-configurando o <code><a href=
- "{@docRoot}preview/setup-sdk.html#create-update">targetSdkVersion</a></code> do aplicativo
- para <code>“N”</code>.
-</p>
-
-<p>
- O Android N Developer Preview fornece <strong>APIs de prévia</strong>
- — as APIs não serão oficiais até o lançamento do SDK final,
- atualmente planejado para o terceiro trimestre de 2016. Isto significa que é possível
- <strong>esperar alterações secundárias de APIs</strong> com o tempo, especialmente
- durante as semanas iniciais do programa. Forneceremos um resumo das alterações
- com cada atualização do Android N Developer Preview.
-</p>
-
-<p class="note">
- <strong>Observação</strong>: Apesar de as APIs do Preview poderem ser alteradas, os
- comportamentos essenciais do sistema são estáveis e estão prontos para
- serem testados.
-</p>
-
-<p>
- O Google Play <strong>evita a publicação de aplicativos destinados para o N Developer
- Preview</strong>. Quando o SDK final do Android N estiver disponível, você poderá
- destinar o nível da API do Android N oficial e publicar o aplicativo no Google
- Play pelos canais de lançamento alfa e beta. Enquanto isso, caso queira
- distribuir um aplicativo destinado para Android N para testadores, é possível fazê-lo por e-mail ou
- por download direto do site.
-</p>
-
-<p>
- No lançamento completo do Android N para AOSP e OEMs, planejado para o terceiro trimestre de 2016,
- você poderá publicar seus aplicativos direcionados ao Android N no canal de lançamento
- público do Google Play.
-</p>
-
-
-<h2 id="how_to_get_started">Como começar</h2>
-
-<p>
- Para começar o teste do aplicativo com o Android N:
-</p>
-
-<ol>
- <li> Revise a <a href="{@docRoot}preview/api-overview.html">Visão geral da API</a>
- e as <a href="{@docRoot}preview/behavior-changes.html">Mudanças de comportamento</a> para
- ter uma ideia do que há de novo e como isto afeta os aplicativos. Especificamente,
- obtenha informações sobre os novos recursos de <a href="{@docRoot}preview/features/notification-updates.html">notificações</a> e
- o <a href="{@docRoot}preview/features/multi-window.html">suporte a várias janelas</a>.</li>
- <li> Configure seu ambiente seguindo as instruções para <a href="{@docRoot}preview/setup-sdk.html">Configurar o Preview SDK</a>
- e configurar os dispositivos de teste.</li>
- <li> Siga as instruções de <a href="https://developers.google.com/android/nexus/images">atualização
- manual</a> para instalar a última imagem de sistema do Android N no seu dispositivo. </li>
- <li> Consulte a <a href="{@docRoot}preview/setup-sdk.html#docs-dl">referência da API</a>
- e os <a href="{@docRoot}preview/samples.html">exemplos do Android N</a> para obter mais
- informações sobre os novos recursos de API e como usá-los no seu aplicativo.
- <li> Participe da <a href="{@docRoot}preview/dev-community">Comunidade Android N
- Developer</a> para obter as notícias mais recentes e conectar-se a outros
- desenvolvedores que trabalham com a nova plataforma.</li>
-</ol>
-
-<p>
- Agradecemos sua participação no programa Android N Developer Preview!
-</p>
diff --git a/docs/html-intl/intl/pt-br/preview/preview_toc.cs b/docs/html-intl/intl/pt-br/preview/preview_toc.cs
deleted file mode 100644
index 12cb423..0000000
--- a/docs/html-intl/intl/pt-br/preview/preview_toc.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-<ul id="nav">
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/overview.html" es-lang="Información general del programa" in-lang="Ikhtisar Program" ja-lang="プログラム概要" ko-lang="프로그램 개요" pt-br-lang="Visão geral do programa" ru-lang="Обзор программы" vi-lang="Tổng quan về Chương trình" zh-cn-lang="计划概览" zh-tw-lang="程式總覽"> Visão geral do programa</a></div>
- </li>
-
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/support.html"> Suporte e notas da versão</a></div>
- </li>
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/setup-sdk.html" es-lang="Configurar el SDK de la versión preliminar" in-lang="Menyiapkan Preview" ja-lang="Preview SDK のセットアップ" ko-lang="미리 보기 SDK 설정하기" pt-br-lang="Configuração do Preview SDK" ru-lang="Настройка пакета SDK Preview" vi-lang="Kiểm thử trên Thiết bị" zh-cn-lang="设置预览版 SDK" zh-tw-lang="設定預覽版 SDK"> Configurar o Preview</a></div>
- </li>
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/download.html" es-lang="Pruebe en un dispositivo" in-lang="Menguji pada Perangkat" ja-lang="デバイス上でテストする" ko-lang="기기에서 테스트" pt-br-lang="Testar em um dispositivo" ru-lang="Тестирование на устройстве" vi-lang="Kiểm thử trên Thiết bị" zh-cn-lang="在设备上测试" zh-tw-lang="在裝置上測試"> Testar em um dispositivo</a></div>
- </li>
-
-
- <li class="nav-section">
- <div class="nav-section-header"><a href="<?cs var:toroot ?>preview/behavior-changes.html" es-lang="Cambios en los comportamientos" in-lang="Perubahan Perilaku" ja-lang="動作の変更点" ko-lang="동작 변경" pt-br-lang="Mudanças de comportamento" ru-lang="Изменения в работе" vi-lang="Các thay đổi Hành vi" zh-cn-lang="行为变更" zh-tw-lang="行為變更">Alterações de comportamento</a></div>
- <ul>
- <li><a href="<?cs var:toroot ?>preview/features/background-optimization.html" es-lang="Optimizaciones en segundo plano" in-lang="Optimisasi Latar Belakang" ja-lang="バックグラウンド処理の最適化" ko-lang="백그라운드 최적화" pt-br-lang="Otimizações em segundo plano" ru-lang="Оптимизация фоновых процессов" vi-lang="Tối ưu hóa Chạy ngầm" zh-cn-lang="后台优化" zh-tw-lang="背景最佳化">Otimizações em segundo plano</a></li>
- <li><a href="<?cs var:toroot ?>preview/features/multilingual-support.html" es-lang="Idioma y configuración regional" in-lang="Bahasa dan Lokal" ja-lang="言語とロケール" ko-lang="언어 및 로케일" pt-br-lang="Idioma e localidade" ru-lang="Язык и языковой стандарт" vi-lang="Ngôn ngữ và Bản địa" zh-cn-lang="语言和区域设置" zh-tw-lang="語言和地區設定">Idioma e localidade</a></li>
- </ul>
- </li>
-
- <li class="nav-section">
- <div class="nav-section-header"><a href="<?cs var:toroot ?>preview/api-overview.html" es-lang="Información general de la API" in-lang="Android N untuk Pengembang" ja-lang="API の概要" ko-lang="API 개요" pt-br-lang="Visão geral da API" ru-lang="Обзор API-интерфейсов" vi-lang="Android N cho Nhà phát triển" zh-cn-lang="API 概览" zh-tw-lang="API 總覽">Android N for Developers</a></div>
- <ul>
-
- <li><a href="<?cs var:toroot ?>preview/features/multi-window.html" es-lang="Compatibilidad con ventanas múltiples" in-lang="Dukungan Multi-Jendela" ja-lang="マルチ ウィンドウのサポート" ko-lang="다중 창 지원" pt-br-lang="Suporte a várias janelas" ru-lang="Поддержка многооконного режима" vi-lang="Hỗ trợ đa cửa sổ" zh-cn-lang="多窗口支持" zh-tw-lang="多視窗支援"> Suporte a várias janelas</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/notification-updates.html" es-lang="Notificaciones" in-lang="Pemberitahuan" ja-lang="通知" ko-lang="알림" pt-br-lang="Notificações" ru-lang="Уведомления" vi-lang="Thông báo" zh-cn-lang="通知" zh-tw-lang="通知">Notificações</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/data-saver.html"> Economia de dados</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/tv-recording-api.html" es-lang="Grabación de TV" in-lang="Perekaman TV" ja-lang="TV の録画" ko-lang="TV 녹화" pt-br-lang="Gravação para TV" ru-lang="Запись ТВ" vi-lang="Ghi lại TV" zh-cn-lang="TV 录制" zh-tw-lang="電視錄製"> Gravação para TV</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/security-config.html" es-lang="Configuración de seguridad de la red" in-lang="Network Security Configuration" ja-lang="ネットワーク セキュリティ構成" ko-lang="네트워크 보안 구성" pt-br-lang="Configurações de segurança de rede" ru-lang="Конфигурация сетевой безопасности" vi-lang="Cấu hình Bảo mật mạng" zh-cn-lang="网络安全配置" zh-tw-lang="網路安全性設定"> Configurações de segurança de rede</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/icu4j-framework.html" es-lang="API de ICU4J del framework de Android" in-lang="ICU4J Android Framework API" ja-lang="ICU4J Android フレームワーク API" ko-lang="ICU4J Android 프레임워크 API" pt-br-lang="APIs de estrutura do Android para ICU4J" ru-lang="API-интерфейсы ICU4J в платформе Android" vi-lang="API Khuôn khổ Android ICU4J" zh-cn-lang="ICU4J Android 框架 API" zh-tw-lang="ICU4J Android 架構 API"> Suporte a ICU4J</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/j8-jack.html" es-lang="Funciones del lenguaje Java 8" in-lang="Fitur Bahasa Java 8" ja-lang="Java 8 の機能" ko-lang="Java 8 언어 기능" pt-br-lang="Recursos de linguagem do Java 8" ru-lang="Возможности языка Java 8" vi-lang="Tính năng của Ngôn ngữ Java 8" zh-cn-lang="Java 8 语言功能" zh-tw-lang="Java 8 語言功能"> Recursos de linguagem do Java 8</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/afw.html"> Mudanças no Android for Work</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/scoped-folder-access.html" es-lang="Acceso a directorios determinados" in-lang="Scoped Directory Access" ja-lang="特定のディレクトリへのアクセス" ko-lang="범위가 지정된 디렉터리 액세스" pt-br-lang="Acesso a diretórios com escopo" ru-lang="Доступ к выделенным каталогам" vi-lang="Truy cập Thư mục theo Phạm vi" zh-cn-lang="作用域目录访问" zh-tw-lang="限定範圍目錄存取"> Acesso a diretórios com escopo</a></li>
- </ul>
- </li>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/samples.html" es-lang="Ejemplos" in-lang="Contoh" ja-lang="サンプル" ko-lang="샘플" pt-br-lang="Exemplos" ru-lang="Примеры" zh-cn-lang="示例" zh-tw-lang="範例"> Exemplos</a></div>
- </li>
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/license.html" es-lang="Contrato de licencia" ja-lang="使用許諾契約" ko-lang="라이선스 계약" pt-br-lang="Contrato de licença" ru-lang="Лицензионное соглашение" zh-cn-lang="许可协议" zh-tw-lang="授權協議"> Contrato de licença</a></div>
- </li>
-
-</ul>
\ No newline at end of file
diff --git a/docs/html-intl/intl/pt-br/preview/samples.jd b/docs/html-intl/intl/pt-br/preview/samples.jd
deleted file mode 100644
index 16515e4..0000000
--- a/docs/html-intl/intl/pt-br/preview/samples.jd
+++ /dev/null
@@ -1,85 +0,0 @@
-page.title=Exemplos
-page.tags="preview", "samples", "android"
-page.image=images/cards/card-n-samples_2x.png
-@jd:body
-
-<p>
- Os exemplos de código a seguir são fornecidos para o Android N. Para
- fazer o download dos exemplos no Android Studio, selecione a opção de menu <b>File > Import
- Samples</b>.
-</p>
-
-<p class="note">
- <strong>Observação:</strong> Esses projetos disponíveis para download são projetados
- para uso com Gradle e Android Studio.
-</p>
-
-
-<h3 id="mw">Interface com várias janelas</h3>
-<img src="{@docRoot}preview/images/sample-multiwindow.png" style="float: left; padding-right: 0.5em" height="250" width="156" />
-<p>
- Este exemplo demonstra como aproveitar as vantagens de interfaces de usuário com várias janelas
- com seu aplicativo.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-MultiWindowPlayground">
-Obter no GitHub</a>
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="an">Notificações ativas</h3>
-<img src="{@docRoot}preview/images/sample-activenotifications.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
-<p>
- Este é um exemplo pré-existente que mostra um serviço simples que envia
- notificações usando NotificationCompat. Cada conversa não lida de um usuário
- é enviada como uma notificação distinta.
-</p>
-<p>
- Este exemplo foi atualizado para utilizar os novos recursos de notificação
- disponíveis no Android N.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-ActiveNotifications">
-Obter no GitHub</a>
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="ms">Serviço de mensagens</h3>
-<img src="{@docRoot}preview/images/sample-messagingservice.png" style="float: left; padding-right: 0.5em" height="250" width="150" />
-<p>
- Este é um exemplo pré-existente que demonstra como usar o
- NotificationManager para identificar quantas notificações um aplicativo está mostrando
- no momento.
-</p>
-<p>
- Este exemplo foi atualizado para utilizar os novos recursos de notificação
- disponíveis no Android N.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-MessagingService">
-Obter no GitHub</a>
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="fbe">Inicialização direta</h3>
-<img src="{@docRoot}preview/images/sample-directboot.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
-<p>
- Este exemplo demonstra como armazenar e acessar dados no armazenamento criptografado de um dispositivo
- que está sempre disponível enquanto o dispositivo é inicializado.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-DirectBoot">
-Obter no GitHub</a>
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="sda">Acesso a diretórios com escopo</h3>
-<img src="{@docRoot}preview/images/sample-scopeddirectoryaccess.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
-<p>
- Este exemplo demonstra como ler e gravar dados de diretórios
- específicos exigindo menos permissões.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-ScopedDirectoryAccess">
-Obter no GitHub</a>
-</p>
\ No newline at end of file
diff --git a/docs/html-intl/intl/pt-br/preview/setup-sdk.jd b/docs/html-intl/intl/pt-br/preview/setup-sdk.jd
deleted file mode 100644
index 9c1f035..0000000
--- a/docs/html-intl/intl/pt-br/preview/setup-sdk.jd
+++ /dev/null
@@ -1,187 +0,0 @@
-page.title=Configuração do Preview
-meta.keywords="preview", "android"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-sdk_2x.png
-
-@jd:body
-
-
-<div id="qv-wrapper">
- <div id="qv">
-<ol>
- <li><a href="#get-as13">Obter o Android Studio 2.1</a></li>
- <li><a href="#get-sdk">Obter o Android N SDK</a>
- <ol>
- <li><a href="#docs-dl">Documentação de referência</a>
- </ol>
- </li>
- <li><a href="#java8">Obter o Java 8 JDK</a></li>
- <li><a href="#create-update">Atualizar ou criar um projeto</a></li>
- <li><a href="#next">Próximas etapas</a></li>
-</ol>
- </div>
-</div>
-
-<p>Para desenvolver aplicativos para o Android N Preview, você precisa fazer algumas atualizações
-no ambiente de desenvolvedor, conforme é descrito nesta página.</p>
-
-<p>Para simplesmente testar a compatibilidade do seu aplicativo na imagem do sistema
-Android N, siga o guia para <a href="{@docRoot}preview/download.html">Testar em um dispositivo Android N</a>.</p>
-
-<img src="{@docRoot}preview/images/n-preview-setup.png" width="700" alt="" />
-
-
-<h2 id="get-as13">Obter o Android Studio 2.1</h2>
-
-<p>A plataforma Android N adiciona suporte para <a href="{@docRoot}preview/j8-jack.html">recursos de linguagem do Java 8</a>,
- o que requer um novo compilador chamado Jack. A versão mais recente do Jack
-só é compatível com o Android Studio 2.1 no momento. Portanto, se quiser
-usar os recursos de linguagem do Java 8, será preciso usar o Android Studio 2.1 para
-compilar seu aplicativo. Caso contrário, não será preciso usar o Jack, mas ainda será
-necessário atualizar para o JDK 8 para desenvolver para a plataforma Android N,
-conforme descrito abaixo.</p>
-
-<p>Se você já instalou o Android Studio, verifique se tem o Android
-Studio 2.1 ou superior clicando em <strong>Help > Check for Update</strong>
-(no Mac, <strong>Android Studio > Check for Updates</strong>).</p>
-
-<p>Se não o tiver, <a href="{@docRoot}studio/">baixe o Android
-Studio 2.1 aqui</a>.</p>
-
-
-<h2 id="get-sdk">Obter o N Preview SDK</h2>
-
-<p>Para começar a desenvolver com as APIs do Android N, instale o
-Android N Preview SDK no Android Studio da seguinte maneira:</p>
-
-<ol>
- <li>Abra o SDK Manager selecionando <strong>Tools > Android >
- SDK Manager</strong>.</li>
-
- <li>Na guia <strong>SDK Platforms</strong>, marque a caixa de seleção
- <strong>Android N Preview</strong>.</li>
-
- <li>Clique na guia <strong>SDK Tools</strong> e marque as caixas de seleção
- <strong>Android SDK Build Tools</strong>, <strong>Android SDK
- Platform-Tools</strong> e <strong>Android SDK Tools</strong>
-.
- </li>
-
- <li>Clique em <strong>OK</strong> e aceite os termos de licença
- de qualquer pacote que precise ser instalado.
- </li>
-</ol>
-
-<h3 id="docs-dl">Obter a documentação de referência do N Preview SDK</h3>
-
-<p>
- Informações detalhadas sobre as APIs do Android N são disponibilizadas na documentação de referência do N Preview
-, que pode ser baixada pela tabela a seguir.
- Este pacote contém uma versão off-line resumida do site de desenvolvedores do Android
- e inclui uma referência de API atualizada para as APIs do Android N, além de um relatório
- das diferenças entre as APIs.
-</p>
-
-<table>
- <tr>
- <th scope="col">Documentação</th>
- <th scope="col">Checksums</th>
- </tr>
- <tr>
- <td style="white-space: nowrap">
- <a href="{@docRoot}shareables/preview/n-preview-3-docs.zip">n-preview-3-docs.zip</a></td>
- <td width="100%">
- MD5: 19bcfd057a1f9dd01ffbb3d8ff7b8d81<br>
- SHA-1: 9224bd4445cd7f653c4c294d362ccb195a2101e7
- </td>
- </tr>
-<table>
-
-
-
-<h2 id="java8">Obter o Java 8 JDK</h2>
-
-<p>Para compilar o aplicativo para a plataforma Android N e usar algumas ferramentas com o
-Android Studio 2.1, é preciso instalar o Java 8 Developer Kit (JDK 8). Portanto, se
-não tiver a versão mais recente, baixe o JDK 8 agora mesmo.</p>
-
-<p>Em seguida, defina a versão do JDK no Android Studio da seguinte maneira:</p>
-
-<ol>
- <li>Abra um projeto Android no Android Studio e, em seguida, abra a caixa de diálogo
- Project Structure selecionando <strong>File >
- Project Structure</strong>. (Como alternativa, é possível definir o padrão
- para todos os projetos selecionando <strong>File > Other Settings >
- Default Project Structure</strong>.)
- </li>
- <li>No painel à esquerda da caixa de diálogo, clique em <strong>SDK Location</strong>.
- </li>
- <li>No campo <strong>JDK Location</strong>, insira o local do
- Java 8 JDK (clique no botão à direita
- para procurar em seus arquivos) e clique em <strong>OK</strong>.
- </li>
-</ol>
-
-<img src="{@docRoot}preview/images/studio-jdk-location.jpg" width="700" alt="" />
-
-
-<h2 id="create-update">Atualizar ou criar um projeto</h2>
-
-<p>
- Para usar as APIs do Android N, seu projeto deve ser configurado da maneira apropriada.
-</p>
-
-<p>Se planeja usar os recursos de linguagem do Java 8, consulte
-<a href="{@docRoot}preview/j8-jack.html">Recursos de linguagem do Java 8</a>
-para saber mais sobre os recursos do Java 8 com suporte e
-como configurar seu projeto com o compilador Jack.</p>
-
-
-<h3 id="update">Atualizar um projeto existente</h3>
-
-<p>Abra o arquivo
- <code>build.gradle</code> de seu módulo e atualize os valores da seguinte
- forma:
-</p>
-
-<pre>
-android {
- compileSdkVersion <strong>'android-N'</strong>
- buildToolsVersion <strong>'24.0.0-rc3'</strong>
- ...
-
- defaultConfig {
- minSdkVersion <strong>'N'</strong>
- targetSdkVersion <strong>'N'</strong>
- ...
- }
- ...
-}</pre>
-
-
-<h3 id="create">Criar um novo projeto</h3>
-
-
-<p>Para criar um novo projeto para desenvolvimento com o Android N Preview SDK:</p>
-
-<ol>
- <li>Clique em <strong>File > New Project</strong> e siga as etapas
- até chegar na página Target Android Devices.
- </li>
- <li>Nela, selecione a opção <strong>Phone and Tablet</strong>.</li>
- <li>Na opção <strong>Phone and Tablet</strong>, na lista <strong>Minimum
- SDK</strong>, selecione
- <strong>N: Android API 23, N Preview (Preview)</strong>.</li>
-</ol>
-
-
-<h2 id="next">Próximas etapas</h2>
-
-<ul>
- <li>Siga o guia para <a href="{@docRoot}preview/download.html">Testar em um dispositivo Android N</a>.</li>
- <li>Saiba mais sobre a plataforma Android N com
-<a href="{@docRoot}preview/behavior-changes.html">Mudanças de comportamento</a>
-e <a href="{@docRoot}preview/api-overview.html">Recursos de APIs do
-Android N</a>.</li>
-</ul>
-
diff --git a/docs/html-intl/intl/pt-br/preview/support.jd b/docs/html-intl/intl/pt-br/preview/support.jd
deleted file mode 100644
index 9ae32c8..0000000
--- a/docs/html-intl/intl/pt-br/preview/support.jd
+++ /dev/null
@@ -1,1188 +0,0 @@
-page.title=Notas da versão e suporte
-meta.keywords="preview", "android"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-support_2x.png
-
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>Neste documento</h2>
-
-<ul>
- <li><a href="#dp3">Developer Preview 3</a>
- <ul>
- <li><a href="#general">Alertas gerais</a></li>
- <li><a href="#new">Novidades no DP3</a></li>
- <li><a href="#ki">Problemas conhecidos</a></li>
- </ul>
- </li>
- <li><a href="#dp2">Developer Preview 2</a></li>
- <li><a href="#dp1">Developer Preview 1</a></li>
-</ul>
-
-<!--
-<h2>See Also</h2>
-<ol>
- <li></li>
-</ol>
--->
-
-</div>
-</div>
-
-<p>
- Estão disponíveis dois canais de suporte principais para quem está desenvolvendo ou testando
- com o Android N Developer Preview: Registre relatórios de erro em <a href="https://developer.android.com/preview/bug">https://developer.android.com/preview/bug</a> para
- erros específicos de dispositivo, do sistema e do Google App. Para problemas com outros aplicativos,
- entre em contato diretamente com o desenvolvedor.
-</p>
-
-<p>Para discutir problemas ou ideias com outros desenvolvedores que trabalham com o Android N, junte-se à
-<a href="{@docRoot}preview/dev-community">comunidade Developer Preview do Google+</a>.</p>
-
-<h2 id="dp3">Developer Preview 3</h2>
-
-<div class="wrap">
- <div class="cols">
- <div class="col-6of12">
- <p>
- <em>Data: Maio de 2016<br>
- Versão: NPD35K<br>
- Suporte do emulador: x86 & ARM (32/64 bits)<br>
- Serviços Google Play: 8.4</em>
- </p>
- </div>
- </div>
-</div>
-
-<h3 id="general">Alertas gerais</h3>
-
-<p>
- Esta versão do Developer Preview é para <strong>desenvolvedores de aplicativos e outros
- usuários iniciais</strong> e está disponível para uso diário, desenvolvimento ou
- testes de compatibilidade. Esteja ciente destas notas gerais sobre a
- versão:
-</p>
-
-<ul>
- <li>Esta versão pode ter vários <strong>problemas de estabilidade</strong> em
- dispositivos compatíveis. Os usuários podem encontrar instabilidade no sistema, como
- panes e falhas do kernel.
- </li>
-
- <li>Alguns aplicativos <strong>podem não funcionar como esperado</strong> na nova
- versão da plataforma. Isso inclui aplicativos do Google e outros aplicativos.
- </li>
-
- <li>O Developer Preview 3 foi <strong>aprovado pelo Compatibility Test Suite (CTS)
-</strong> nestes dispositivos: Nexus 5X, Nexus 6, Nexus 6P e Pixel
- C. Aplicativos que dependem de versões aprovadas pelo CTS
- funcionam normalmente nesses dispositivos (por exemplo, Android Pay).
- </li>
-
- <li>O Developer Preview 3 está <strong>disponível em todos os
- dispositivos compatíveis:</strong> Nexus 5X, Nexus 6, Nexus 6P, Nexus 9, Nexus Player, Pixel
- C, General Mobile 4G (Android One), assim como Sony Xperia Z3 (modelos D6603 e
- D6653).
-
- </li>
-</ul>
-
-
-<h3 id="new">Novidades no DP3</h3>
-
-<h4 id="">Modo RV para Android</h4>
-
-<p>
- O Android N adiciona compatibilidade de plataformas e otimizações para um novo Modo RV que dá aos
- desenvolvedores a capacidade de projetar experiências de RV móveis de alta qualidade para os usuários. Há
- diversas melhorias de desempenho, incluindo o acesso a um núcleo exclusivo da CPU
- para aplicativos de RV. Dentro dos aplicativos, é possível aproveitar o rastreamento inteligente
- da cabeça e notificações estéreo que funcionam para RV. Mais importante,
-o Android N oferece gráficos de latência muito baixa.
-</p>
-
-<p>
- Para obter mais informações, consulte o <a href="https://developers.google.com/vr/android/">Google VR SDK para Android</a>.
-</p>
-
-<h4 id="">Modo de desempenho sustentado</h4>
-
-<p>
- O Android N inclui compatibilidade opcional para <a href="{@docRoot}preview/api-overview.html#sustained_performance_api">modo de desempenho
-sustentado</a>, permitindo que OEMs ofereçam dicas sobre
- capacidades de desempenho do dispositivo para aplicativos de longa duração. Desenvolvedores de aplicativos podem usar
- essas dicas para ajustar os aplicativos para um nível de
- desempenho do dispositivo previsível e consistente em períodos longos de tempo. Desenvolvedores de aplicativos podem testar essa nova
- API na prévia para desenvolvedores apenas em dispositivos Nexus 6P.
-</p>
-
-<h4>Multiprocess WebView</h4>
-
-<p>
- A partir da versão 51 do Android N, o WebView executará conteúdo da web em um
- processo de segurança separado quando a opção de desenvolvedor “Multiprocess WebView”
- estiver ativada. A equipe do WebView quer ouvir comentários sobre compatibilidade e
- desempenho durante a execução no N antes de ativar o Multiprocess WebView em uma
- versão futura do Android. Nesta versão, regressões no tempo de inicialização, no
- uso de memória total e no desempenho de renderização do software são esperadas.
-</p>
-
-<p>
- Queremos
- ser informados se você encontrar problemas inesperados no modo multiprocesso. Entre em contato com a equipe WebView <a href="https://bugs.chromium.org/p/chromium/issues/entry?template=Webview%20Bugs">
- enviando um relatório de erros</a>.
-</p>
-
-<h4 id="">Auxiliar de atalhos de teclado</h4>
-
-<p>
- No Android N, o usuário pode pressionar <code>Meta+/</code> para acionar uma tela de <strong>atalhos
- de teclado</strong> que exibe todos os atalhos disponíveis do
- sistema e do aplicativo em questão. Os desenvolvedores podem adicionar os próprios atalhos ou
- ativar a tela de atalhos nos aplicativos. Consulte o <a href="{@docRoot}preview/api-overview.html#keyboard_shortcuts_helper">Auxiliar de
-atalhos de teclado</a> para saber mais.
-</p>
-
-<h4 id="">FrameMetrics API</h4>
-
-<p>
- O DP3 introduz uma nova <a href="{@docRoot}preview/api-overview.html#framemetrics_api">FrameMetrics API</a>
- que permite que um aplicativo monitore o desempenho de renderização da IU ao expor uma API pubsub de
- transmissão para transferir informações sobre sincronização de quadros para a
- janela atual do aplicativo. <code>FrameMetricsListener</code> pode ser usado para medir
- o desempenho da IU em nível de interação em produção com granularidade maior e
- sem precisar de uma conexão USB.
-</p>
-
-<h4 id="api-changes">Alterações de recursos e API</h4>
-
-<dl>
- <dt>
- Atalhos do inicializador e a Launcher Shortcuts API
- </dt>
-
- <dd>
- Decidimos adiar esse recurso para uma versão futura do Android. Planejamos
- remover as Launcher Shortcuts APIs (ShortcutManager e outros) da
- API pública do Android N a partir da próxima prévia para desenvolvedores.
- </dd>
-
- <dt>
- WebView JavaScript executado antes do carregamento da página
- </dt>
-
- <dd>
- Começando em aplicativos destinados para o Android N, o contexto do JavaScript é redefinido
- quando uma nova página é carregada. Atualmente, o contexto é transferido para
- a primeira página carregada em uma nova situação de {@link android.webkit.WebView}.
- Os desenvolvedores que desejam inserir JavaScript no {@link
- android.webkit.WebView} devem executar o script antes de a página
- começar a carregar.
- </dd>
-
- <dt>
- WebView de Geolocalização em origens desprotegidas
- </dt>
-
- <dd>
- Começando em aplicativos destinados ao Android N, a API de geolocalização será
- permitida apenas em origens seguras (por HTTPS). Essa política tem como objetivo proteger
- as informações privadas dos usuários quando eles estiverem usando uma conexão desprotegida.
- </dd>
-
- <dt>
- Economia de dados
- </dt>
-
- <dd>
- Começando no Developer Preview 3, os aplicativos podem usar uma intenção para exibir uma
- caixa de diálogo do sistema que permite que os usuários adicionem o aplicativo diretamente na
- lista de permissões da Economia de dados. Consulte a <a href="{@docRoot}preview/api-overview.html#data_saver">documentação sobre a Economia de dados
-</a> para obter mais detalhes.
- </dd>
-
- <dt>
- <a href="{@docRoot}preview/api-overview.html#number-blocking">Bloqueio de números</a>
- </dt>
-
- <dd>
- Se um usuário não autorizado tenta bloquear ou desbloquear um número, agora a
- operação falha com {@link java.lang.SecurityException}. (Anteriormente,
- a operação lançava {@link java.lang.UnsupportedOperationException}.)
- </dd>
-
- <dt>
- <a href="{@docRoot}preview/api-overview.html#tile_api">Quick Settings Tile
-API</a>
- </dt>
-
- <dd>
- Agora o sistema usa os metadados da atividade para decidir o modo do bloco.
- (Anteriormente, o modo do bloco era determinado pelo valor de retorno do
- <code>TileService.onTileAdded()</code>.) Para obter mais informações, consulte
-<code>TileService.META_DATA_ACTIVE_TILE</code> na <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Referência da API</a>, disponível para download.
- </dd>
-</dl>
-
-<h4 id="dp3-fixes">Correções de problemas relatados por desenvolvedores</h4>
-
-<p>
- Diversos problemas relatados por desenvolvedores foram corrigidos, incluindo:
-</p>
-
-<ul>
- <li>Reprodução de áudio por Bluetooth interrompida após 1 música (erro <a href="https://code.google.com/p/android/issues/detail?id=206889">206889</a>)
- </li>
-
- <li>Pixel C falha consistentemente (erro <a href="https://code.google.com/p/android/issues/detail?id=206962">206962</a>)
- </li>
-
- <li>Problemas de notificação do Relógio e Aviso (erro <a href="https://code.google.com/p/android/issues/detail?id=203094">203094</a>)
- </li>
-
- <li>Pixel C reinicia quando conectado ao MacBook Pro via cabo USB C (erro
- <a href="https://code.google.com/p/android/issues/detail?id=205432">205432</a>)
- </li>
-
- <li>Agenda errada por um dia (erro <a href="https://code.google.com/p/android/issues/detail?id=203002">203002</a>)
- </li>
-
- <li>TelephonyManager.getAllCellInfo retorna dados inválidos (erro <a href="https://code.google.com/p/android/issues/detail?id=203022">203022</a>)
- </li>
-
- <li>No Nexus 6p, o Bluetooth desconecta continuamente (erro <a href="https://code.google.com/p/android/issues/detail?id=208062">208062</a>)
- </li>
-</ul>
-
-<p>Para obter a lista completa de problemas corrigidos, consulte<a href="https://goo.gl/6uCKtf"> o
-issue tracker</a>.</p>
-
-<h3 id="ki">Problemas conhecidos</h3>
-
-<h4>Acessibilidade</h4>
-
-<ul>
- <li>Impossível ouvir a produção de TTS quando o valor de inclinação está configurado quase no nível máximo.
- </li>
-
- <li>Recursos e configurações de acessibilidade podem ser interrompidos quando o usuário adiciona um
- perfil de trabalho, incluindo gesto e configuração de ampliação. O
- estado de acessibilidade é restaurado na próxima vez em que o usuário toca nas configurações relacionadas.
- </li>
-</ul>
-
-<h4>Câmera</h4>
-
-<ul>
- <li>O aplicativo Câmera mostrou instabilidade; ele pode falhar em diversas
- circunstâncias, como quando é inicializado em modo de várias janelas.
- </li>
-
- <li>Pressionar o obturador continuamente no modo panorama pode fazer o
- aplicativo Câmera falhar.
- </li>
-</ul>
-
-<h4>Áudio</h4>
-<ul>
- <li>Um problema na plataforma do reprodutor de áudio impede alguns aplicativos de funcionarem
- normalmente. Por exemplo, o Skype e outros aplicativos são afetados por esse problema.
- </li>
-</ul>
-
-<h4>Conectividade</h4>
-
-
-<ul>
- <li>Quando um dispositivo Bluetooth Low Energy (BLE) de função periférica anuncia um
- serviço e um dispositivo BLE de função central é conectado, o dispositivo de função periférica
- é desconectado rapidamente.
- </li>
-
- <li>A conexão Wi-Fi pode cair quando a tela está desligada.
- </li>
-
- <li>Conexões RFCOMM são instáveis e podem resultar em corrompimento de dados e
- oscilação na conexão.
- </li>
-
- <li>Os estados de rede ativos ({@link android.net.NetworkInfo#getState
- NetworkInfo.getState()} e {@link android.net.NetworkInfo#getDetailedState
- NetworkInfo.getDetailedState()}) podem retornar valores incorretos durante algumas
- situações de segundo plano restritas.
- </li>
-</ul>
-
-
-<h4>
- Inicializador
-</h4>
-
-<ul>
- <li>A bandeja Todos os Aplicativos padrão do inicializador pode parar de responder após
- desligar e ligar a tela. Retornar à tela inicial e reinicializar
- a bandeja Todos os Aplicativos pode resolver o problema.
- </li>
-</ul>
-
-<h4>
- Teclado
-</h4>
-
-<ul>
- <li>Ao atualizar um dispositivo com Android 6.0 ou anterior para o N Developer
- Preview, o Teclado do Google não preserva os dados de preferências como configurações recentes de
- emoticons e som.
- </li>
-
- <li>O Teclado do Google em idioma indiano pode ficar instável.
- </li>
-
- <li>Ao inserir texto em um campo de senha, o usuário pode selecionar russo como
- o idioma de entrada, mas o teclado continua em inglês. Isso impede que o
- usuário insira senhas no idioma russo.
- </li>
-</ul>
-
-<h4>
- Localidades e idiomas
-</h4>
-
-<ul>
- <li>Ao usar localidade da direita para esquerda (RTL), o sistema pode
- alterar inesperadamente para apresentação de esquerda para direita (LTR) após a reinicialização do dispositivo.
- </li>
-</ul>
-
-<h4>Mídia</h4>
-
-<ul>
- <li>Reprodução de mídia instável no Nexus 9 e Nexus Player, incluindo
- problemas ao reproduzir vídeos em HD.
- </li>
-</ul>
-
-<h4>
- Modo de várias janelas
-</h4>
-
-<ul>
- <li>O dispositivo pode congelar após mudar a orientação em modo de várias janelas.
- </li>
-
- <li>Atualmente, diversos aplicativos apresentam problemas no modo de várias janelas:
- <ul>
- <li>A IU do sistema pode falhar ao ancorar o brilho de Settings > Display >
- Screen no modo de várias janelas.
- </li>
-
- <li>O aplicativo Câmera pode falhar quando inicializado em modo de várias janelas.
- </li>
-
- <li>O YouTube pode falhar quando inicializado em modo de várias janelas. Para corrigir o
- problema, você deve limpar os dados do aplicativo do YouTube em Storage > Apps >
- YouTube.
- </li>
- </ul>
- </li>
-</ul>
-
-<h4>
- Google Play Services
-</h4>
-
-<ul>
- <li>Aplicativos que usam Google Cast via Google Play Services podem ficar instáveis quando
- o usuário seleciona uma localidade do sistema que usa letras e números fora do
- intervalo ASCII.
- </li>
-</ul>
-
-<h4>
- Política do dispositivo do Android for Work e Google Apps
-</h4>
-
-<ul>
- <li>O aplicativo de Política do dispositivo pode falhar quando o usuário desbloqueia o dispositivo com a
- tela de “status da política do dispositivo” fixada.
- </li>
-
- <li>Depois de configurar o perfil de trabalho com a criptografia baseada em arquivos habilitada e
- desativar o perfil de trabalho, os usuários devem desbloquear o bloqueio de tela de perfil primário para poder
- acessar novamente os aplicativos do Work.
- </li>
-
- <li>O dispositivo é reinicializado após remover o padrão de bloqueio de segurança e abrir
- aplicativos de trabalho/pessoal no modo de várias janelas.
- </li>
-
- <li>A configuração DISALLOW_VPN_CONFIG faz com que a caixa de diálogo de autorização apareça como
- always-on-vpn pelo Cliente de política do dispositivo.
- </li>
-
- <li>O tráfego não é bloqueado até a VPN conectar no modo always-on-vpn.
- </li>
-</ul>
-
-<h4>
- Armazenamento externo
-</h4>
-
-<ul>
- <li>Aplicativos podem ficar instáveis quando o usuário os transfere do armazenamento interno
- para o armazenamento externo adotável (isso pode incluir um cartão SD ou dispositivos conectados
- via USB).
- </li>
-</ul>
-
-<h4>
- Zoom de tela e vários APKs no Google Play
-</h4>
-
-<ul>
- <li>Em dispositivos com Android N, o Google Play Services 9.0.83 relata incorretamente
- a densidade de tela atual em vez da densidade de tela estável. Quando o
- zoom de tela é habilitado nesses dispositivos, isso pode fazer com que o Google Play selecione uma
- versão de um aplicativo com vários APKs projetada para telas menores. Esse problema foi
- corrigido na próxima versão do Google Play Services e será incluído em uma versão
- próxima do Developer Preview.
- </li>
-
- <li>Em dispositivos com Android N, o Google Play Services 9.0.83 atualmente relata
- compatibilidade com Vulkan, mas não com a versão do Vulkan. Isso pode fazer com que o Google Play selecione uma
- versão de um aplicativo com vários APKs projetado para compatibilidade com versões anteriores do Vulkan em
- dispositivos compatíveis com versões mais recentes. Atualmente, o Google Play Store
- não aceita carregamento de aplicativos que usam segmentação de versão do Vulkan. Essa compatibilidade
- será adicionada ao Google Play Store no futuro e corrigida na próxima
- versão do Google Play Services (a ser incluída em uma versão futura do Developer Preview
-). Qualquer dispositivo N que estiver usando a versão 9.0.83 do Google Play Services
- continuará a receber versões dos aplicativos com segmentação básica de compatibilidade com o Vulkan.
- </li>
-</ul>
-
-<h4 id="">Notificações</h4>
-
-<ul>
- <li>MessagingStyle não exibe notificações com emissor “null” (próprio).
- </li>
-</ul>
-
-<h4 id="">Ferramentas para desenvolvedor</h4>
-
-<ul>
- <li>
- <code>adb</code> pode às vezes se desconectar durante o uso da depuração JDWP.
- </li>
-</ul>
-
-<!-- TBA, if any
-<h4>Device-specific issues</h4>
-
-<dl>
- <dt>
- <strong>Device Name</strong>
- </dt>
-
- <dd>
- Issue 1
- </dd>
-
- <dd>
- Issue 2
- </dd>
-</dl>
-
--->
-
-
-
-
-
-
-
-<!-- DP2 Release Notes Archive -->
-
-<h2 id="dp2">Developer Preview 2</h2>
-
-<div class="wrap">
- <div class="cols">
- <div class="col-6of12">
- <p>
- <em>Data: Abril de 2016<br>
- Versões: NPC91K, NPC91O<br>
- Suporte do emulador: x86 & ARM (32/64 bits)<br>
- Serviços Google Play: 8.4</em>
- </p>
- </div>
- </div>
-</div>
-
-<h3 id="dp2-new">Novidades no DP2</h3>
-
-<ul>
- <li>Compatibilidade da plataforma com Vulkan, uma nova API de renderização 3D que fornece
- controle explícito e com baixa sobrecarga da GPU (unidade de processamento gráfico), além de oferecer
- desempenho aprimorado para aplicativos com muitas chamadas de desenho. Para saber mais, consulte a
- <a href="{@docRoot}ndk/guides/graphics/index.html">documentação</a>.
- </li>
-
- <li>Novos emoticons de pessoas com compatibilidade com variações de tons de pele e glifos do Unicode 9.
- Os tons de pele e os novos emoticons não aparecerão até que os teclados adicionem compatibilidade para
- eles na paleta. Os aplicativos não precisam tomar medidas para
- aproveitar esses novos emoticons, a menos que usem uma fonte que não seja no sistema. Desenvolvedores
- IME devem incorporar a compatibilidade para os novos emoticons.
- </li>
-
- <li>
- <a href="{@docRoot}preview/api-overview.html#launcher_shortcuts">Launcher
- Shortcuts API</a>: Aplicativos que usam <code>ShortcutManager</code> para enviar
- atalhos para pontos de partida dentro deles mesmos para o inicializador.
- </li>
-
- <li>
- <a href="{@docRoot}preview/features/multi-window.html">Várias janelas</a>:
- Agora você pode especificar uma altura e um comprimento mínimos separados para uma
- atividade. Além disso, vários nomes de API foram ligeiramente alterados.
- </li>
-</ul>
-
-<h4 id="dp2-fixes">Correções de problemas relatados por desenvolvedores</h4>
-
-<p>
- Diversos problemas relatados por desenvolvedores foram corrigidos, incluindo:
-</p>
-
-<ul>
- <li>Impossível conectar com SSID oculto ou Wi-Fi sem transmissão. (erro <a href="https://code.google.com/p/android/issues/detail?id=203116">203116</a>)
- </li>
-
- <li>O estado mudo do microfone persiste em várias atividades. (erro <a href="https://code.google.com/p/android/issues/detail?id=205922">205922</a>)
- </li>
-
- <li>Alterar o foco no modo de várias janelas pausa o YouTube. (erro <a href="https://code.google.com/p/android/issues/detail?id=203424">203424</a>)
- </li>
-
- <li>Resposta direta pode fechar atividades abertas. (erro <a href="https://code.google.com/p/android/issues/detail?id=204411">204411</a>)
- </li>
-
- <li>Diversas correções de estabilidade.
- </li>
-</ul>
-
-<h3 id="dp2-general">Alertas gerais</h3>
-
-<p>
- Esta versão do Developer Preview é apenas para <strong>desenvolvedores de aplicativos</strong>
- e foi projetada para uso apenas em testes de compatibilidade e desenvolvimento inicial.
- Esteja ciente destas notas gerais sobre a versão:
-</p>
-
-<ul>
-
- <li>Os componentes da ferramenta de desenvolvimento e bibliotecas de suporte foram atualizados
- para a versão DP2. Lembre-se de atualizar seu ambiente de desenvolvimento de prévia
- antes de desenvolver para o DP2. Para obter instruções sobre como configurar seu ambiente
- de desenvolvimento, consulte
- <a href="{@docRoot}preview/setup-sdk.html">Configuração do Preview</a>.
- </li>
-
- <li>Esta versão tem diversos problemas de estabilidade e desempenho em todos os dispositivos,
- portanto, <strong>não é adequada para uso diário em celulares ou tablets</strong>,
- especialmente para quem não é desenvolvedor.
- </li>
-
- <li>A vida útil da bateria e o desempenho não foram otimizados nesta
- versão:
-
- <ul>
- <li>Sabe-se que o <strong>desempenho do sistema e de aplicativos fica lento/instável
- periodicamente</strong> e dispositivos podem parar de responder ocasionalmente. Esses
- problemas podem aumentar com o uso prolongado.
- </li>
-
- <li>A vida útil da bateria pode regredir nesta versão em casos de uso de ligar e
- desligar a tela.
- </li>
- </ul>
- </li>
-
- <li>Alguns <strong>aplicativos podem não funcionar normalmente</strong> no Developer Preview
- 2. Isso inclui aplicativos do Google e outros aplicativos.
- </li>
-
- <li>Esta versão inicial não foi aprovada pelo <strong>Compatibility Test Suite (CTS)
-</strong>. Aplicativos que dependem de versões aprovadas pelo CTS não funcionarão
- (por exemplo, o Android Pay).
- </li>
-
- <li>Essa versão de prévia é compatível com os dispositivos a seguir: Nexus 5X, Nexus 6,
- Nexus 6P, Nexus 9 e Pixel C, além do General Mobile 4G
- (Android One). Compatibilidade com o Nexus Player em breve.
- </li>
-
-
- <li><a href="https://github.com/googlesamples/android-testdpc/releases">TestDPC</a> foi
- atualizado para lidar com alterações na API entre o DP1 e o DP2.
- </li>
-</ul>
-
-<h3 id="dp2-ki">Problemas conhecidos</h3>
-
-<h4>Desempenho e bateria</h4>
-
-<ul>
- <li>Sabe-se que o desempenho do sistema e de aplicativos fica <strong>lento/instável
- periodicamente</strong> e o dispositivo pode parar de responder ocasionalmente. Esses
- problemas podem aumentar com o uso prolongado.
- </li>
-</ul>
-
-<h4>Contas do Google</h4>
-
-<ul>
- <li>Em alguns casos, podem ocorrer problemas com o
- <code>AccountManagerService</code> que impedem o login em contas do Google.
- </li>
-</ul>
-
-<h4>Atualização do sistema</h4>
-
-<ul>
- <li>O dispositivo pode reinicializar imediatamente após atualizar para o DP2.
- </li>
-</ul>
-
-<h4>Acessibilidade</h4>
-
-<ul>
- <li>Problemas ao ouvir a produção de texto para voz (TTS) quando o valor de inclinação está configurado
- quase no nível máximo.
- </li>
-</ul>
-
-<h4>Bluetooth</h4>
-
-<ul>
- <li>Características do Bluetooth Low Energy (LE) GATT usam o tipo de gravação
- errado e não serão enviadas a um dispositivo remoto. Assim, por exemplo, alguns dispositivos de fitness
- não funcionarão.
- </li>
-</ul>
-
-<h4>Assistente de configuração</h4>
-
-<ul>
- <li>A opção de restaurar dados em um dispositivo novo (ou dispositivo recentemente redefinido) da
- “Your Google Account” não pode ser realizada no assistente de configuração. Você deve restaurar os
- dados de um dispositivo existente selecionando “another Android device” no
- assistente de configuração ou configurá-lo como um novo dispositivo.
- </li>
-</ul>
-
-<h4>Desbloquear OEM</h4>
-
-<ul>
- <li>Em alguns dispositivos, <strong>Enable OEM unlock</strong> está desabilitado em
- “Developer Options” durante o uso do DP2.<br>
- <strong>Solução alternativa:</strong> Inscreva-se no
- programa beta do Android (se ainda não estiver inscrito) acessando
- <a href="https://www.google.com/android/beta" class="external-link">www.google.com/android/beta</a>. Depois, inscreva-se e aceite fazer
- o downgrade OTA. Cancelar a inscrição causa o downgrade para o Android 6.0. Agora você
- deve poder escolher <strong>Enable OEM unlock</strong> em
- “Developer Options”. Os dados pessoais são apagados após o downgrade do
- dispositivo; entretanto, o desbloqueio do bootloader pode já ter apagado esses dados.
- </li>
-</ul>
-
-<h4>Android for Work</h4>
-
-<ul>
- <li>Desafio de segurança de perfil de trabalho
- <ul>
- <li>Após a migração para o N ou após o usuário criar perfis de trabalho, os
- perfis de trabalho não podem criar chaves no armazenamento de chaves até o usuário alterar o
- padrão, o PIN ou a senha ou configurar um Desafio do Work.
- </li>
-
- <li>No modo de inicialização direta, aplicar as restrições de senha ao dispositivo
- faz com que o perfil de trabalho seja desbloqueado, mesmo se o dispositivo estiver bloqueado.
- Isso torna o perfil de trabalho acessível, mesmo que ele deva estar protegido
- pela tela de bloqueio do dispositivo.
- </li>
- </ul>
- </li>
-
- <li>Always on VPN
- <ul>
- <li>Se modo Always on VPN estiver ativado, mas uma VPN não estiver disponível, os aplicativos
- se conectarão pela rede comum. Os aplicativos devem ficar off-line se não há nenhuma
- conexão VPN disponível.
- </li>
-
- <li>Quando o modo Always On estiver ativado, a conexão por VPN não será estabelecida após
- um dispositivo reiniciar no modo de reinicialização direta, mesmo se o usuário desbloquear a
- tela de bloqueio protegida.
- </li>
- </ul>
- </li>
-
- <li>Suspensão de pacotes
- <ul>
- <li>Os administradores do dispositivo podem suspender pacotes críticos do sistema, o que pode provocar
- comportamentos inesperados, como realizar chamadas apesar de a caixa de diálogo “Telephone
- disabled” ser exibida.
- </li>
- </ul>
- </li>
-
- <li>Outros
- <ul>
- <li>O aplicativo de Configurações falha durante a inicialização se {@link
- android.os.UserManager#DISALLOW_MOUNT_PHYSICAL_MEDIA} está configurado como verdadeiro quando
- o usuário insere mídias físicas, como um cartão SD.
- </li>
-
- <li>A primeira verificação em um Perfil de trabalho leva vários minutos para
- ser concluída.
- </li>
- </ul>
- </li>
-</ul>
-
-<h4 id="vulkan">Vulkan:</h4>
-
-<ul>
- <li>Nexus 5X/6P</li>
- <ul>
- <li>Lacunas entre números de vinculação e outro número diferente de zero
- como o primeiro número de vinculação faz com que {@code vkCreateGraphicsPipeline()} falhe.</li>
- <li>O Vulkan exibe comportamento de amostragem incorreto em coordenadas projetadas de textura.</li>
- <li>na amostra multithreadCmdBuffer, {@code vkCmdClearColorImage()} falha quando
- é executado com o driver N-DP2.</li>
- <li>Valores de retorno do {@code vkGetPhysicalDeviceFormatProperties()} não configuram um valor
- para {@code VkFormatProperties::linearTilingFeatures}, que considera um valor de 0 como
- um resultado.</li>
- <li>Anexos do buffer de quadro de ponto flutuante do Vulkan não são tratados corretamente.</li>
- </ul>
- <li>Nexus Player</li>
- <ul>
- <li>Sombreadores SPIR-V podem acionar afirmações de driver.</li>
- <li>Algumas configurações de pipeline podem fazer {@code vkCreateGraphicsPipeline()}
- falhar.</li>
- </ul>
-</ul>
-
-<h4>Problemas específicos de dispositivos</h4>
-
-<dl>
- <dt>
- <strong>Android One</strong>
- </dt>
-
- <dd>
- A conexão de dados falha quando o dispositivo é alternado do slot 1 para o slot 2 do SIM.
- </dd>
-
- <dt>
- <strong>Pixel C</strong>
- </dt>
-
- <dd>
- Impossível ativar a opção “Always On” da Pesquisa de voz.
- </dd>
-
- <dt>
- <strong>Nexus 6</strong>
- </dt>
-
- <dd>
- Fotos da Câmera na orientação retrato ficam corrompidas, exceto em
- fotos HDR+.
- </dd>
-
- <dt>
- <strong>Nexus Player</strong>
- </dt>
-
- <dd>
- A reprodução de conteúdo HD do Netflix pode falhar no Nexus Player.
- </dd>
-
- <dd>
- Qualquer aplicativo que depende de alterações dinâmicas da resolução de vídeo pode falhar no
- Nexus Player.
- </dd>
-
- <dd>
- Qualquer aplicativo que usa o codec de vídeo VP9 pode falhar no Nexus Player.
- </dd>
-</dl>
-
-<!-- DP 1 release notes archive -->
-
-<h2 id="dp1">Developer Preview 1</h2>
-
-<div class="wrap">
- <div class="cols">
- <div class="col-6of12">
- <p>
- <em>Data: Março de 2016<br>
- Versões: NPC56P, NPC56R, atualizada: NPC56W, NPC56X<br>
- Suporte do emulador: x86 & ARM (32/64 bits)<br>
- Serviços Google Play: 8.4</em>
- </p>
- </div>
- </div>
-</div>
-
-<h3 id="dp1-general">Alertas gerais</h3>
-
-<p>
- Esta versão do Developer Preview é apenas para desenvolvedores de aplicativos e foi projetada para
- uso apenas em testes de compatibilidade e desenvolvimento inicial. Esteja ciente
- destas notas gerais sobre a versão:
-</p>
-<ul>
- <li>Esta versão tem diversos problemas de estabilidade e desempenho em todos os dispositivos,
- portanto, <em>não é adequada para uso diário em celulares ou tablets</em>,
- especialmente para quem não é desenvolvedor.
- </li>
-
- <li>Sabe-se que o desempenho do sistema e de aplicativos fica <strong>lento/instável
- periodicamente</strong> e o dispositivo pode parar de responder ocasionalmente. Esses
- problemas podem aumentar com o uso prolongado.
- </li>
-
- <li>A vida útil da bateria pode regredir nesta versão em casos de uso de ligar e
- desligar a tela.
- </li>
-
- <li>Alguns aplicativos podem não funcionar normalmente no Developer Preview 1. Isso inclui
- aplicativos do Google e outros aplicativos.
- </li>
-
- <li>Esta versão inicial não foi aprovada pelo Compatibility Test Suite (CTS). Aplicativos
- que dependem de versões aprovadas pelo CTS não funcionarão (por exemplo, o Android Pay).
- </li>
-
- <li>Essa versão de prévia é compatível com os dispositivos a seguir: Nexus 5X, Nexus 6,
- Nexus 6P, Nexus 9, Nexus Player e Pixel C, assim como o General Mobile 4G
- (Android One).
- </li>
-</ul>
-
-<h3 id="dp1-platform">Problemas da plataforma</h3>
-
-<h4>Desempenho e bateria</h4>
-
-<ul>
- <li>Sabe-se que o desempenho do sistema e de aplicativos fica <strong>lento/instável
- periodicamente</strong> e o dispositivo pode parar de responder ocasionalmente. Esses
- problemas podem aumentar com o uso prolongado.
- </li>
-
- <li>A vida útil da bateria pode regredir nesta versão em casos de uso de ligar e
- desligar a tela.
- </li>
-</ul>
-<h4 id="dialer">Discador</h4>
-
-<ul>
- <li>O aplicativo Discador não é compatível com a inicialização direta. Isso será resolvido mais tarde no
- N Developer Preview.
- </li>
-
- <li>A reprodução do correio de voz não funciona.
- </li>
-</ul>
-
-<h4>Microfone</h4>
-
-<ul>
- <li>O sistema pode incorretamente manter o microfone no estado mudo em todos os aplicativos e reinicializações. Se você colocar o microfone no mudo em um aplicativo e o estado persistir, abra qualquer aplicativo que tenha controles de som do telefone e desative o mudo.</li>
-</ul>
-
-<h4 id="ui">IU do sistema</h4>
-
-<ul>
- <li>Algumas strings novas ou modificadas na IU do sistema não foram traduzidas para todos
- os idiomas.
- </li>
-
- <li>A IU de visão geral ainda está em desenvolvimento e está sujeita a alterações. Por exemplo,
- pretendemos remover o temporizador que aparece quando o usuário alterna entre
- aplicativos.
- </li>
-
- <li>Os controles e botões de alternância das configurações podem ficar lentos ou parecer que pararam de responder.
- </li>
-
- <li>O design visual das notificações está sujeito a alterações.
- </li>
-
- <li>No aplicativo Gmail, o arquivamento direto de e-mails inclusos em um
- pacote de notificações não funciona corretamente.
- </li>
-</ul>
-
-<h4>Android for Work</h4>
-
-<ul>
- <li>Desafio de segurança de perfil de trabalho
- <ul>
- <li>Após a migração para o N ou após o usuário criar perfis de trabalho, os
- perfis de trabalho não podem criar chaves no armazenamento de chaves até o usuário alterar o
- padrão, o PIN ou a senha ou configurar um Desafio do Work.
- </li>
-
- <li>No modo de inicialização direta, aplicar as restrições de senha ao dispositivo
- faz com que o perfil de trabalho seja desbloqueado, mesmo se o dispositivo estiver bloqueado.
- Isso torna o perfil de trabalho acessível, mesmo que ele deva estar protegido
- pela tela de bloqueio do dispositivo.
- </li>
-
- <li>Quando o usuário insere senha e PIN errados, o sistema não
- exibe nenhuma mensagem informativa; em vez disso, ele apenas limpa o campo
- de entrada. Esse problema não afeta a entrada de padrão ou impressão digital.
- </li>
-
- <li>Em um tablet, o segundo plano exibido com o desafio do perfil de trabalho é
- desproporcionalmente pequeno.
- </li>
-
- <li>A versão da <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.enterprise.dmagent">
- Política do dispositivo do Google Apps</a> empacotada com o N Developer Preview
- ainda não é compatível com o recurso de Desafio de segurança de perfil de trabalho.
- Em vez disso, os desenvolvedores devem usar <a href="https://github.com/googlesamples/android-testdpc/releases">TestDPC</a>
- para testar esse recurso.
- </li>
- </ul>
- </li>
-
- <li>Always on VPN
- <ul>
- <li>Se o modo Always on VPN estiver ativado, mas uma VPN não estiver disponível, os aplicativos
- não especificados como exceções na política Always on se conectarão via
- rede comum. Exceto quando especificados como exceções na política Always on,
- os aplicativos deverão ficar off-line se não houver nenhuma conexão VPN disponível.
- <ul>
- <li>Quando o modo Always On estiver ativado, a conexão por VPN não será estabelecida
- após um dispositivo reiniciar no modo de reinicialização direta, mesmo se o usuário
- desbloquear a tela de bloqueio protegida.
- </li>
- </ul>
- </li>
- </ul>
- </li>
-
- <li>Contatos aprimorados
- <ul>
- <li>Dispositivos Bluetooth PBAP/MAP não exibem a identificação de chamadas para
- contatos de trabalho. A próxima versão do Preview corrige esse problema.
- </li>
- </ul>
- </li>
-
- <li>Modo de trabalho
- <ul>
- <li>O Google Now Launcher não mostra se o Modo de trabalho está ativado ou
- desativado. O Launcher também não exibe o estado de suspensão do aplicativo.
- </li>
-
- <li>Após o usuário desativar e ativar o Modo de trabalho, o sistema não exibe mais os
- widgets de aplicativos do perfil de trabalho, como a Agenda.
- </li>
- </ul>
- </li>
-
- <li>Suspensão de pacotes
- </li>
-
- <li>Os administradores do dispositivo podem suspender pacotes críticos do sistema, o que pode provocar
- comportamentos inesperados, como realizar chamadas apesar de a caixa de diálogo Telephone
- disabled ser exibida.
- </li>
-
- <li>Outros
- <ul>
- <li>O aplicativo de Configurações falha durante a inicialização se {@link
- android.os.UserManager#DISALLOW_MOUNT_PHYSICAL_MEDIA} está configurado como verdadeiro quando
- o usuário insere mídias físicas, como um cartão SD.
- </li>
-
- <li>O estado {@code DPM.setPackagesSuspended} não persiste quando o
- usuário desinstala e reinstala um aplicativo. O aplicativo deve continuar
- suspenso após a desinstalação/reinstalação ou os aplicativos suspensos não podem ser
- desinstalados.
- </li>
-
- <li>A primeira verificação em um Perfil de trabalho leva vários minutos para
- ser concluída. Isso pode fazer com que o aplicativo demore mais que o normal para se tornar
- visível na Play EMM API.
- </li>
-
- <li>Notificações dos aplicativos do perfil de trabalho não são visíveis para
- detectores de notificações instalados no perfil pessoal. Como resultado, o sistema
- não exibe Notificações conforme esperado.
- </li>
-
- </ul>
- </li>
-</ul>
-
-<h4 >Teclado</h4>
-
-<ul>
- <li>O pareamento por Bluetooth entre teclados e dispositivos Android pode ser instável.
- </li>
-</ul>
-
-<h4 >Vídeo</h4>
-
-<ul>
-<li>A reprodução de vídeos pode demorar e exibir interrupções.</li>
-</ul>
-
-<h4>Wi-Fi</h4>
-
-<ul>
- <li>Wi-Fi passou por refatoramento que pode alterar o
- comportamento de caso isolado da API. Especificamente, aplicativos que tentarem se conectar
- a redes específicas ou que tentarem se reconectar a redes deverão ser testados novamente.
- </li>
-
- <li>O cliente DHCP legado foi removido da plataforma. O único
- cliente DHCP compatível com a plataforma é o cliente DHCP introduzido no M.
- </li>
-</ul>
-
-<h4>Inicialização direta</h4>
-
-<ul>
- <li>NFC não funciona até o primeiro desbloqueio.
- <ul>
- <li>Quando um celular com Bluetooth habilitado é reiniciado, o Bluetooth não
- ativa automaticamente. Você deve reativar o Bluetooth manualmente.
- </li>
-
- <li>Sob certas circunstâncias, o toque padrão pode não soar para
- chamadas e mensagens de telefone. Esse comportamento foi corrigido na próxima
- versão do N Preview, com uma exceção (e solução alternativa):
- </li>
-
- <li>Em um dispositivos que não tenha sido apagado recentemente -- um que foi inicializado pelo
- menos uma vez desde que foi configurado no modo de inicialização direta -- o
- toque padrão de notificação não soa. O usuário pode resolver esse problema
- selecionando um toque manualmente em Settings.
- </li>
-
- <li>A inicialização direta não está ativa por padrão em dispositivos com uma versão do N
- Developer Preview. Para ativar a inicialização direta para testes e
- desenvolvimento, acesse Developer Options e toque em Convert to File Encryption.
- Nesta prévia de desenvolvedor, isso requer uma reconfiguração de fábrica para fazer o reparticionamento e
- a reformatação do dispositivo para a criptografia baseada em arquivos.
- </li>
- </ul>
- </li>
-</ul>
-
-<h4>Imagem em imagem para Android TV</h4>
-
-<ul>
- <li>A integração PIP na IU de Recents não foi finalizada e está sujeita a
- alterações.
- <ul>
- <li>A animação da janela PIP não é perfeita. Versões futuras do
- Preview melhorarão isso.
- </li>
- </ul>
- </li>
-
- <li style="list-style: none">Versões futuras do Preview melhorarão
- o design visual e o alinhamento do layout de PIP.
- </li>
-</ul>
-
-<h4>Relatórios de erros</h4>
-
-<ul>
- <li>Os relatórios de erros nem sempre são completados com sucesso (como solução alternativa,
- às vezes eles ainda podem ser acessados usando o fornecedor de documentação do relatório de erros
- no armazenamento interno).
- </li>
-</ul>
-
-<h4>Várias janelas em tela dividida</h4>
-
-<ul>
- <li>Os aplicativos podem falhar e apresentar comportamentos inesperados da IU quando colocados em
- modo de tela dividida. Esses são problemas de aplicativo que devem ser corrigidos pelo
- desenvolvedor do aplicativo.
- </li>
-
- <li>Quando o aplicativo é destinado para uma versão da plataforma Android anterior ao N,
- ele pode não funcionar com avisos de tela dividida que aparecem diversas vezes.
- </li>
-
- <li>Manter pressionado o botão Overview enquanto usa um aplicativo com uma
- orientação corrigida pode provocar um comportamento inesperado do aplicativo.
- </li>
-
- <li>Os aplicativos podem tremular durante o redimensionamento.
- </li>
-
- <li>As animações ainda não estão finalizadas.
- </li>
-</ul>
-
-<h4>Método de entrada</h4>
-
-<ul>
- <li>O Teclado do Google volta inesperadamente ao teclado genérico do Google
- quando <b>usa idiomas do sistema</b>, mas o Teclado do Google não é compatível com nenhum
- dos idiomas selecionados nas preferências de idioma do sistema. Ele deve
- voltar para inglês americano.
- <p>
- Alternativamente, você pode solucionar esse problema adicionando ao menos um idioma compatível com o
- Teclado do Google.
- </p>
- </li>
-</ul>
-
-<h4>Acessibilidade</h4>
-
-<ul>
- <li>TalkBack exibe problemas com recursos, incluindo Notifications, Quick
- Settings Tiles e exibição de várias janelas, que podem causar falhas no sistema ou
- uma falta de feedback falado do TalkBack. Versões futuras do Preview
- resolverão esses problemas.
- </li>
-</ul>
-
-<h3 id="dp1-device-sp">Observações e problemas específicos de dispositivos</h3>
-
-<h4>Nexus Player</h4>
-<ul>
- <li>Problemas de reprodução de vídeo, compatibilidade de aplicativo e estabilidade são esperados no
- Nexus Player nesta versão do Preview.
- </li>
-</ul>
-
-<h4>Pixel C</h4>
-<ul>
-<li>O redimensionamento de várias janelas pode causar falhas.</li>
-</ul>
-
-<h4>Nexus 9</h4>
-<ul>
-<li>Dispositivos Nexus 9 podem não ligar após receberem atualizações OTA
- via programa beta do Android. Para se recuperar desse problema, você deve tentar
- instalar manualmente a imagem OTA. Para obter mais informações, consulte
- <a href="{@docRoot}preview/download-ota.html">Aplicação de uma imagem OTA de dispositivo</a>.
-</li>
-</ul>
-
diff --git a/docs/html-intl/intl/pt-br/training/articles/direct-boot.jd b/docs/html-intl/intl/pt-br/training/articles/direct-boot.jd
new file mode 100644
index 0000000..d95f4cd
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/training/articles/direct-boot.jd
@@ -0,0 +1,181 @@
+page.title=Inicialização direta
+page.keywords=preview,sdk,direct boot
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>Neste documento</h2>
+ <ol>
+ <li><a href="#run">Solicitar acesso para executar durante a inicialização direta</a></li>
+ <li><a href="#access">Acesso ao armazenamento criptografado do dispositivo</a></li>
+ <li><a href="#notification">Receber notificação quando o usuário desbloquear</a></li>
+ <li><a href="#migrating">Migrar dados existentes</a></li>
+ <li><a href="#testing">Testar seu aplicativo com reconhecimento de criptografia</a></li>
+ </ol>
+</div>
+</div>
+
+<p>O Android N é executado em um modo seguro de <i>inicialização direta</i>
+quando o dispositivo é ligado, mas o usuário não o
+desbloqueia. Para isso, o sistema oferece dois locais de armazenamento para dados:</p>
+
+<ul>
+<li><i>O armazenamento criptografado de credenciais</i>, que é o local de armazenamento padrão
+e é disponibilizado apenas depois que o usuário desbloqueia o dispositivo.</li>
+<li><i>O armazenamento criptografado do dispositivo</i>, que é um local de armazenamento disponibilizado
+durante o modo de inicialização direta e depois que o usuário desbloqueia o dispositivo.</li>
+</ul>
+
+<p>Por padrão, aplicativos não são executados no modo de inicialização direta.
+Se seu aplicativo precisa executar ações durante esse modo, você pode registrar os
+componentes que devem ser executados. Alguns casos comuns
+para aplicativos que precisam ser executados no modo de inicialização direta:</p>
+
+<ul>
+<li>Aplicativos com notificações programadas, como aplicativos de
+despertador.</li>
+<li>Aplicativos que fornecem notificações importantes ao usuário, como aplicativos de SMS.</li>
+<li>Aplicativos que fornecem serviços de acessibilidade, como o Talkback.</li>
+</ul>
+
+<p>Se seu aplicativo precisar acessar dados enquanto estiver no modo de inicialização direta, use
+o armazenamento criptografado do dispositivo. O armazenamento criptografado do dispositivo contém dados
+criptografados com uma chave que só é disponibilizada depois que o dispositivo realizou
+uma inicialização verificada com sucesso.</p>
+
+<p>Para dados que devem ser criptografados com uma chave associada às credenciais
+do usuário, como um PIN ou uma senha, use o armazenamento criptografado de credenciais.
+Esse armazenamento só é disponibilizado depois que o usuário
+desbloquear o dispositivo com sucesso e até que ele reinicie o dispositivo novamente. Se o
+usuário ativar a tela de bloqueio após desbloquear o dispositivo, isso não bloqueará
+o armazenamento criptografado de credenciais.</p>
+
+<h2 id="run">Solicitar acesso para executar durante a inicialização direta</h2>
+
+<p>Aplicativos devem registrar seus componentes com o sistema antes de
+poderem ser executados no modo de inicialização direta ou acessar o armazenamento criptografado
+do dispositivo. Os aplicativos são registrados com o sistema ao marcar os componentes como
+<i>tendo reconhecimento de criptografia</i>. Para marcar seu componente como tendo reconhecimento de criptografia, defina o atributo
+<code>android:directBootAware</code> como true no manifesto.<p>
+
+<p>Componentes com reconhecimento de criptografia podem se registrar para receber uma mensagem de transmissão
+<code>LOCKED_BOOT_COMPLETED</code> do
+sistema quando o dispositivo é reiniciado. Nesse momento, o armazenamento criptografado do
+dispositivo é disponibilizado e pode executar tarefas
+necessárias durante o modo de inicialização, como o acionamento de um alarme programado.</p>
+
+<p>O snippet de código a seguir é um exemplo de como registrar um
+{@link android.content.BroadcastReceiver} como tendo reconhecimento de criptografia e adicionar um
+filtro de intenção para <code>LOCKED_BOOT_COMPLETED</code> no manifesto do aplicativo:</p>
+
+<pre>
+<receiver
+ android:directBootAware="true" >
+ ...
+ <intent-filter>
+ <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
+ </intent-filter>
+</receiver>
+</pre>
+
+<p>Quando o usuário desbloquear o dispositivo, todos os componentes poderão acessar o armazenamento
+criptografado do dispositivo e o armazenamento criptografado de credenciais.</p>
+
+<h2 id="access">Acesso ao armazenamento criptografado do dispositivo</h2>
+
+<p>Para acessar o armazenamento criptografado do dispositivo, crie uma segunda instância de
+{@link android.content.Context} chamando
+<code>Context.createDeviceProtectedStorageContext()</code>. Todas as chamadas da API
+de armazenamento que usam esse contexto acessam o armazenamento criptografado do dispositivo. O
+exemplo a seguir acessa o armazenamento criptografado do dispositivo e abre um
+arquivo de dados existente do aplicativo:</p>
+
+<pre>
+Context directBootContext = appContext.createDeviceProtectedStorageContext();
+// Access appDataFilename that lives in device encrypted storage
+FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
+// Use inStream to read content...
+</pre>
+
+<p>Use o armazenamento criptografado do dispositivo somente para
+informações que precisem ser acessadas durante o modo de inicialização direta.
+Não use o armazenamento criptografado do dispositivo como um repositório criptografado para fins gerais.
+Para informações particulares do usuário ou dados criptografados que não são necessários durante
+o modo de inicialização direta, use o armazenamento criptografado de credenciais.</p>
+
+<h2 id="notification">Receber notificação quando o usuário desbloquear</h2>
+
+<p>Quando o usuário desbloquear o dispositivo após a reinicialização, seu aplicativo poderá voltar
+a acessar o armazenamento criptografado de credenciais e usar serviços regulares do sistema que
+dependem das credenciais do usuário.</p>
+
+<p>Para receber uma notificação quando o usuário desbloquear o dispositivo após uma reinicialização,
+registre um {@link android.content.BroadcastReceiver} do componente em execução
+para ouvir a mensagem <code>ACTION_USER_UNLOCKED</code>. Você também pode
+receber a mensagem {@link android.content.Intent#ACTION_BOOT_COMPLETED
+ACTION_BOOT_COMPLETED} existente, que agora indica que o dispositivo foi inicializado e que
+o usuário o desbloqueou.</p>
+
+<p>Você pode enviar uma consulta diretamente se o usuário desbloquear o dispositivo chamando
+<code>UserManager.isUserUnlocked()</code>.</p>
+
+<h2 id="migrating">Migrar dados existentes</h2>
+
+<p>Se um usuário atualizar o dispositivo para usar o modo de inicialização direta, você poderá ter dados
+existentes que precisem ser migrados para o armazenamento criptografado do dispositivo. Use
+<code>Context.moveSharedPreferencesFrom()</code> e
+<code>Context.moveDatabaseFrom()</code> para migrar dados de preferências e do banco de
+dados entre o armazenamento criptografado de credenciais e o armazenamento criptografado do dispositivo.</p>
+
+<p>Tenha bom senso ao decidir quais dados migrar do armazenamento
+criptografado de credenciais para o armazenamento criptografado do dispositivo. Não migre
+informações particulares do usuário, como senhas ou tokens de autorização, para o
+armazenamento criptografado do dispositivo. Em alguns casos, pode ser necessário gerenciar
+conjuntos separados de dados nos dois repositórios criptografados.</p>
+
+<h2 id="testing">Testar seu aplicativo com reconhecimento de criptografia</h2>
+
+<p>Teste seu aplicativo com reconhecimento de criptografia usando o novo modo de inicialização direta. Existem duas
+maneiras de ativar a inicialização direta.</p>
+
+<p class="caution"><strong>Cuidado:</strong> ao ativar a inicialização direta,
+você apaga todos os dados do usuário no dispositivo.</p>
+
+<p>Em dispositivos compatíveis com o Android N instalado, ative a
+inicialização direta seguindo um destes procedimentos:</p>
+
+<ul>
+<li>No dispositivo, ative <b>Developer options</b>, se ainda não tiver feito isso,
+acessando <b>Settings > About phone</b> e tocando em <b>Build number</b>
+sete vezes. Quando a tela de opções do desenvolvedor for disponibilizada, acesse
+<b>Settings > Developer options</b> e selecione
+<b>Convert to file encryption</b>.</li>
+<li>Use os seguintes comandos de shell adb para ativar o modo de inicialização direta:
+<pre class="no-pretty-print">
+$ adb reboot-bootloader
+$ fastboot --wipe-and-use-fbe
+</pre>
+</li>
+</ul>
+
+<p>Um modo de inicialização direta emulado também está disponível, caso você precise trocar
+de modo nos dispositivos de teste. O modo emulado só deve ser usado durante
+o desenvolvimento e pode causar perda de dados. Para ativar o modo de inicialização direta,
+defina um padrão de bloqueio no dispositivo, escolha "No thanks", caso seja solicitada
+uma tela de inicialização segura ao definir esse padrão, e, em seguida, use o
+seguinte comando de shell adb:</p>
+
+<pre class="no-pretty-print">
+$ adb shell sm set-emulate-fbe true
+</pre>
+
+<p>Para desativar o modo de inicialização direta emulado, use o seguinte comando:</p>
+
+<pre class="no-pretty-print">
+$ adb shell sm set-emulate-fbe false
+</pre>
+
+<p>O uso desses comandos faz com que o dispositivo seja reinicializado.</p>
diff --git a/docs/html-intl/intl/pt-br/training/articles/scoped-directory-access.jd b/docs/html-intl/intl/pt-br/training/articles/scoped-directory-access.jd
new file mode 100644
index 0000000..215afd1
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/training/articles/scoped-directory-access.jd
@@ -0,0 +1,148 @@
+page.title=Acesso a diretórios com escopo
+page.keywords=preview,sdk,scoped directory access
+page.tags=androidn
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>Neste documento</h2>
+ <ol>
+ <li><a href="#accessing">Acessar um diretório de armazenamento externo</a></li>
+ <li><a href="#removable">Acessar um diretório em uma mídia removível</a></li>
+ <li><a href="#best">Práticas recomendadas</a></li>
+ </ol>
+</div>
+</div>
+
+<p>Alguns aplicativos, como aplicativos de fotos, normalmente só precisam acessar diretórios específicos de um
+armazenamento externo, como o diretório <code>Pictures</code>. As abordagens
+existentes para o acesso de armazenamentos externos não foram desenvolvidas para fornecer com facilidade
+acesso direcionado a diretórios para esses tipos de aplicativos. Por exemplo:</p>
+
+<ul>
+<li>Solicitar {@link android.Manifest.permission#READ_EXTERNAL_STORAGE}
+ou {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} em seu manifesto
+permite o acesso a todos os diretórios públicos no armazenamento externo, o que pode ser mais do
+que o aplicativo precisa.</li>
+<li>Usar a
+<a href="{@docRoot}guide/topics/providers/document-provider.html">Estrutura de
+acesso ao armazenamento</a> geralmente faz com que o usuário selecione diretórios
+por meio de uma IU de sistema, o que é desnecessário se seu aplicativo sempre acessa o mesmo
+diretório externo.</li>
+</ul>
+
+<p>O Android N fornece uma nova API simplificada para acessar
+diretórios de armazenamento externo comuns. </p>
+
+<h2 id="accessing">Acessar um diretório de armazenamento externo</h2>
+
+<p>Use a classe <code>StorageManager</code> para obter a instância
+<code>StorageVolume</code> apropriada. Em seguida, crie uma intenção chamando o método
+<code>StorageVolume.createAccessIntent()</code> dessa instância.
+Use essa intenção para acessar os diretórios de armazenamento externo. Para obter uma lista de
+todos os volumes disponíveis, incluindo volumes de mídias removíveis, use
+<code>StorageManager.getVolumesList()</code>.</p>
+
+<p>Se você tiver informações sobre um arquivo específico, use
+<code>StorageManager.getStorageVolume(File)</code> para obter o
+<code>StorageVolume</code> que contém o arquivo. Chame
+<code>createAccessIntent()</code> neste <code>StorageVolume</code> para acessar
+o diretório de armazenamento externo para o arquivo.</p>
+
+<p>
+Em volumes secundários, como cartões SD externos, passe nulo ao chamar
+<code>StorageVolume.createAccessIntent()</code> para solicitar acesso ao
+volume todo em vez de um diretório específico.
+<code>StorageVolume.createAccessIntent()</code> retornará nulo se você passar
+nulo no volume principal ou se passar um nome de diretório inválido.
+</p>
+
+<p>O fragmento de código a seguir é um exemplo de como abrir o diretório
+<code>Pictures</code> no armazenamento compartilhado principal:</p>
+
+<pre>
+StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
+StorageVolume volume = sm.getPrimaryVolume();
+Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+</pre>
+
+<p>O sistema tenta conceder acesso ao diretório externo e,
+se necessário, confirma o acesso com o usuário usando uma IU simplificada:</p>
+
+<img src="{@docRoot}images/android-7.0/scoped-directory-access-framed.png" srcset="{@docRoot}images/android-7.0/scoped-directory-access-framed.png 1x,
+{@docRoot}images/android-7.0/scoped-directory-access-framed_2x.png 2x" />
+<p class="img-caption"><strong>Figura 1.</strong> Um aplicativo solicitando
+acesso ao diretório Pictures.</p>
+
+<p>Se o usuário conceder o acesso, o sistema chamará sua substituição de
+<code>onActivityResult()</code> com um código de resultado de
+<code>Activity.RESULT_OK</code> e os dados de intenção que contêm o URI. Use
+o URI fornecido para acessar as informações do diretório, o que é semelhante a usar URIs
+retornados pela
+<a href="{@docRoot}guide/topics/providers/document-provider.html">Estrutura de
+acesso ao armazenamento</a>.</p>
+
+<p>Se o usuário não conceder o acesso, o sistema chamará sua substituição de
+<code>onActivityResult()</code> com um código de resultado de
+<code>Activity.RESULT_CANCELED</code> e dados de intenção nulos.</p>
+
+<p class="note"><b>Observação</b>: Ao obter acesso a um diretório externo específico,
+você também obtém acesso aos subdiretórios dentro do diretório em questão.</p>
+
+<h2 id="removable">Acessar um diretório em uma mídia removível</h2>
+
+<p>Para usar o Acesso a diretórios com escopo para acessar diretórios em uma mídia removível,
+primeiro adicione um {@link android.content.BroadcastReceiver} que escute a notificação
+{@link android.os.Environment#MEDIA_MOUNTED}. Por exemplo:</p>
+
+<pre>
+<receiver
+ android:name=".MediaMountedReceiver"
+ android:enabled="true"
+ android:exported="true" >
+ <intent-filter>
+ <action android:name="android.intent.action.MEDIA_MOUNTED" />
+ <data android:scheme="file" />
+ </intent-filter>
+</receiver>
+</pre>
+
+<p>Quando o usuário monta uma mídia removível, como um cartão SD, o sistema envia uma notificação
+{@link android.os.Environment#MEDIA_MOUNTED}. Essa notificação
+fornece um objeto <code>StorageVolume</code> nos dados de intenção que
+você pode usar para acessar os diretórios na mídia removível. O exemplo a seguir
+acessa o diretório <code>Pictures</code> na mídia removível:</p>
+
+<pre>
+// BroadcastReceiver has already cached the MEDIA_MOUNTED
+// notification Intent in mediaMountedIntent
+StorageVolume volume = (StorageVolume)
+ mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
+volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+</pre>
+
+<h2 id="best">Práticas recomendadas</h2>
+
+<p>Quando possível, mantenha o URI de acesso a diretórios externos para que você não precise
+solicitar acesso ao usuário várias vezes. Quando o usuário conceder o acesso, chame
+<code>getContentResolver().takePersistableUriPermssion()</code> com o
+URI de acesso ao diretório. O sistema manterá o URI e as solicitações de acesso
+subsequentes retornarão <code>RESULT_OK</code> e não mostrarão a IU de confirmação para o
+usuário.</p>
+
+<p>Se o usuário negar acesso a um diretório externo, não repita a
+solicitação imediatamente. Insistir em solicitações de acesso repetidas vezes gera uma experiência
+negativa para o usuário. Se uma solicitação for negada pelo usuário e o aplicativo solicitar acesso
+novamente, a IU exibirá uma caixa de seleção <b>Não perguntar novamente</b>.</p>
+
+<img src="{@docRoot}images/android-7.0/scoped-directory-access-dont-ask.png" srcset="{@docRoot}images/android-7.0/scoped-directory-access-dont-ask.png 1x,
+{@docRoot}images/android-7.0/scoped-directory-access-dont-ask_2x.png 2x" />
+<p class="img-caption"><strong>Figura 1.</strong> Um aplicativo que faz uma
+segunda solicitação para acesso à mídia removível.</p>
+
+<p>Se o usuário selecionar <b>Não perguntar novamente</b> e negar a solicitação, todas
+as solicitações futuras para o diretório provenientes do aplicativo serão automaticamente
+negadas e a IU de solicitação não será apresentada ao usuário.</p>
\ No newline at end of file
diff --git a/docs/html-intl/intl/pt-br/training/articles/security-config.jd b/docs/html-intl/intl/pt-br/training/articles/security-config.jd
new file mode 100644
index 0000000..2ba9b60
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/training/articles/security-config.jd
@@ -0,0 +1,747 @@
+page.title=Configuração de segurança de rede
+page.keywords=androidn,security,network
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>Neste documento</h2>
+<ol>
+ <li><a href="#manifest">Adicionar um arquivo de configurações de segurança</a></li>
+ <li><a href="#CustomTrust">Personalizar CAs confiáveis</a>
+ <ol>
+ <li><a href="#ConfigCustom">Configurar uma CA personalizada confiável</a></li>
+ <li><a href="#LimitingCas">Limitar o conjunto de CAs confiáveis</a></li>
+ <li><a href="#TrustingAdditionalCas">Confiar em CAs adicionais</a></li>
+ </ol>
+ </li>
+ <li><a href="#TrustingDebugCa">CAs somente de depuração</a></li>
+ <li><a href="#UsesCleartextTraffic">Cancelar uso de tráfego de texto simples</a></li>
+ <li><a href="#CertificatePinning">Fixar certificados</a></li>
+ <li><a href="#ConfigInheritance">Comportamento de herança de configuração</a></li>
+ <li><a href="#FileFormat">Formato do arquivo de configurações</a></li>
+</ol>
+</div>
+</div>
+
+
+<p>
+ O Android N inclui um recurso de configurações de segurança de rede
+ que permite que os aplicativos personalizem as configurações de segurança de rede em um arquivo de configurações declarativo e seguro
+ sem modificar o código do aplicativo. Essas configurações podem
+ ser definidas para domínios específicos e para um aplicativo específico. Os principais
+ recursos são:
+</p>
+
+<ul>
+ <li>
+ <b>Âncoras de confiança personalizadas:</b> personalize quais autoridades de certificado (CA)
+ são confiáveis para as conexões seguras de um aplicativo. Por
+ exemplo, confiar em certificados autoassinados privados ou restringir
+ o conjunto de CAs públicas nas quais o aplicativo confia.
+ </li>
+
+ <li>
+ <b>Substituições somente de depuração:</b> depure conexões seguras do aplicativo com segurança,
+ sem adicionar riscos à base instalada.
+ </li>
+
+ <li>
+ <b>Cancelar uso de tráfego de texto simples:</b> proteja aplicativos contra
+ o uso acidental de tráfego de texto simples.
+ </li>
+
+ <li>
+ <b>Fixar certificados:</b> restrinja a conexão segura de um aplicativo
+ a certificados específicos.
+ </li>
+</ul>
+
+
+<h2 id="manifest">Adicionar um arquivo de configurações de segurança</h2>
+
+<p>
+ O recurso de configurações de segurança de rede usa um arquivo XML no qual você especifica
+ as configurações do seu aplicativo. Inclua uma entrada no manifesto do seu
+ aplicativo para apontar para esse arquivo. Este trecho de código de um manifesto
+ demonstra como criar essa entrada:
+</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<manifest ... >
+ <application ... >
+ <meta-data android:name="android.security.net.config"
+ android:resource="@xml/network_security_config" />
+ ...
+ </application>
+</manifest>
+</pre>
+
+<h2 id="CustomTrust">Personalizar CAs confiáveis</h2>
+
+<p>
+ Um aplicativo pode querer confiar em um conjunto personalizado de CAs em vez de no padrão
+ da plataforma. Os motivos mais comuns para isso são:
+</p>
+
+<ul>
+ <li>Conectar-se a um host com uma autoridade de certificado personalizada (autoassinada,
+ emitida por uma CA corporativa interna etc.).
+ </li>
+
+ <li>Limitar o conjunto de CAs para apenas aquelas nas quais você confia em vez de todas
+ as CAs pré-instaladas.
+ </li>
+
+ <li>Confiar em CAs adicionais não incluídas no sistema.
+ </li>
+</ul>
+
+<p>
+ Por padrão, conexões seguras (por exemplo, TLS, HTTPS) de todos os aplicativos confiam
+ nas CAs pré-instaladas do sistema e os aplicativos direcionados ao nível da API 23
+ (Android M) e inferior também confiam no repositório de CAs adicionadas pelo usuário por padrão. Um
+ aplicativo pode personalizar as próprias conexões usando {@code base-config} (para
+ personalização em todo o aplicativo) ou {@code domain-config} (para personalização
+ por domínio).
+</p>
+
+
+<h3 id="ConfigCustom">Configurar uma CA personalizada</h3>
+
+<p>
+ Suponhamos que você queira se conectar a um host que use um certificado SSL autoassinado
+ ou a um host cujo certificado SSL foi emitido por uma CA não pública
+ na qual confia, como a CA interna da sua empresa.
+</p>
+
+<p>
+ <code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/my_ca"/>
+ </trust-anchors>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+<p>
+ Adicione o certificado da CA autoassinada ou não pública em formato PEM ou DER em
+ {@code res/raw/my_ca}.
+</p>
+
+
+<h3 id="LimitingCas">Limitar o conjunto de CAs confiáveis</h3>
+
+<p>
+ Um aplicativo que não queira confiar em todas as CAs nas quais o sistema confia
+ pode especificar o próprio conjunto limitado de CAs confiáveis. Isso protege o
+ aplicativo contra certificados fraudulentos emitidos por qualquer outra CA.
+</p>
+
+<p>
+ A configuração para limitar o conjunto de CAs confiáveis é semelhante a <a href="#TrustingACustomCa">confiar em uma CA personalizada</a> para um domínio específico, mas
+ fornecendo várias CAs no recurso.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">secure.example.com</domain>
+ <domain includeSubdomains="true">cdn.example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/trusted_roots"/>
+ </trust-anchors>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+<p>
+ Adicione as CAs confiáveis em formato PEM ou DER em {@code res/raw/trusted_roots}.
+ Observe que, ao usar o formato PEM, o arquivo deve conter <em>somente</em> dados PEM,
+ sem texto adicional. Você também pode fornecer vários elementos
+ <a href="#certificates"><code><certificates></code></a>
+em vez de um.
+</p>
+
+
+<h3 id="TrustingAdditionalCas">
+ Confiar em CAs adicionais
+</h3>
+
+<p>
+ Um aplicativo pode querer confiar em CAs adicionais nas quais o sistema não confia.
+ Isso pode ocorrer se o sistema ainda não incluiu a CA ou se a CA
+ não atender aos requisitos de inclusão no sistema Android. O
+ aplicativo pode fazer isso ao especificar várias fontes de certificados para uma
+ configuração.
+</p>
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <base-config>
+ <trust-anchors>
+ <certificates src="@raw/extracas"/>
+ <certificates src="system"/>
+ </trust-anchors>
+ </base-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="TrustingDebugCa">Configurar CAs para depuração</h2>
+
+<p>
+ Ao depurar um aplicativo conectado por HTTPS, você pode querer
+ se conectar a um servidor de desenvolvimento local que não tenha o certificado SSL
+ do seu servidor de produção. Para fazer isso sem
+ modificar o código do aplicativo, você pode especificar CAs somente de depuração que
+ sejam confiáveis <i>apenas</i> quando <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">
+android:debuggable</a>
+ for {@code true} ao usar {@code debug-overrides}. Normalmente, IDEs e ferramentas de compilação
+ definem esse sinalizador automaticamente para compilações de não lançamento.
+</p>
+
+<p>
+ Isso é mais seguro do que o código condicional normal, pois, como medida
+ de segurança, os repositórios do aplicativo não aceitam aplicativos marcados como
+ depuráveis.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <debug-overrides>
+ <trust-anchors>
+ <certificates src="@raw/debug_cas"/>
+ </trust-anchors>
+ </debug-overrides>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="UsesCleartextTraffic">Cancelar uso de tráfego de texto simples</h2>
+
+<p>
+ Aplicativos que pretendem se conectar a destinos usando apenas conexões
+ seguras podem cancelar o uso de texto simples de suporte (usando o protocolo HTTP não criptografado
+ em vez de HTTPS) para esses destinos. Essa opção ajuda a evitar
+ regressões acidentais em aplicativos devido a alterações nos URLs fornecidos por fontes externas,
+ como servidores de back-end.
+ Consulte {@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted
+ NetworkSecurityPolicy.isCleartextTrafficPermitted()} para saber mais.
+</p>
+
+<p>
+ Por exemplo, um aplicativo pode querer garantir que todas as conexões com {@code
+ secure.example.com} sejam sempre realizadas por HTTPS para proteger o tráfego confidencial
+ de redes hostis.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config usesCleartextTraffic="false">
+ <domain includeSubdomains="true">secure.example.com</domain>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="CertificatePinning">Fixar certificados</h2>
+
+<p>
+ Normalmente, um aplicativo confia em todas as CAs pré-instaladas. Se qualquer uma dessas CAs
+ emitir um certificado fraudulento, o aplicativo estará em risco de ataques
+ MiTM. Alguns aplicativos optam por limitar o conjunto de certificados que aceitam
+ restringindo o conjunto de CAs ou fixando certificados.
+</p>
+
+<p>
+ A fixação de certificados é realizada ao fornecer um conjunto de certificados pelo hash da
+ chave pública (SubjectPublicKeyInfo do certificado X.509). Uma cadeia de certificados
+ é válida somente se contiver pelo menos uma
+ das chaves públicas fixadas.
+</p>
+
+<p>
+ Observe que, ao usar a fixação de certificados, você deve sempre incluir uma chave de backup
+ para que, se você for forçado a alternar para novas chaves ou alterar as CAs (ao
+ fixar um certificado de CA ou um intermediário dessa CA), a
+ conectividade do seu aplicativo não seja afetada. Caso contrário, você precisará enviar
+ uma atualização ao aplicativo para restaurar a conectividade.
+</p>
+
+<p>
+ Além disso, é possível definir um tempo de expiração para as fixações, após o qual
+ elas não sejam mais realizadas. Isso ajuda a evitar problemas de conectividade
+ em aplicativos que não foram atualizados. No entanto, definir um tempo de expiração
+ para fixações pode permitir que as fixações sejam ignoradas.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <pin-set expiration="2018-01-01">
+ <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
+ <!-- backup pin -->
+ <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
+ </pin-set>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="ConfigInheritance">Comportamento de herança de configuração</h2>
+
+<p>
+ Valores não definidos em uma configuração específica são herdados. Esse comportamento permite
+ configurações mais complexas, mantendo o arquivo de configuração legível.
+</p>
+
+<p>
+ Se um valor não for definido em uma entrada específica, o valor da próxima entrada
+ mais genérica será usado. Valores não definidos em um {@code domain-config} são
+ obtidos pelo {@code domain-config} pai, se aninhados, ou, caso contrário, pelo {@code
+ base-config}. Valores não definidos no {@code base-config} usam os
+ valores padrão da plataforma.
+</p>
+
+<p>
+ Por exemplo, considere um caso no qual todas as conexões para subdomínios de {@code
+ example.com} devem usar um conjunto personalizado de CAs. Além disso, o tráfego de texto simples para esses
+ domínios é permitido <em>exceto</em> ao se conectar com {@code
+ secure.example.com}. Ao aninhar a configuração para {@code
+ secure.example.com} dentro da configuração para {@code example.com}, o
+ {@code trust-anchors} não precisa ser duplicado.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/my_ca"/>
+ </trust-anchors>
+ <domain-config cleartextTrafficPermitted="false">
+ <domain includeSubdomains="true">secure.example.com</domain>
+ </domain-config>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="FileFormat">Formato do arquivo de configurações</h2>
+
+<p>
+ O recurso de configurações de segurança de rede usa um formato do arquivo XML.
+ A estrutura geral desse arquivo é mostrada no seguinte exemplo de código:
+</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <base-config>
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ </base-config>
+
+ <domain-config>
+ <domain>android.com</domain>
+ ...
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ <pin-set>
+ <pin digest="...">...</pin>
+ ...
+ </pin-set>
+ </domain-config>
+ ...
+ <debug-overrides>
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ </debug-overrides>
+</network-security-config>
+</pre>
+
+<p>
+ As seções a seguir descrevem a sintaxe e outros detalhes do formato do
+ arquivo.
+</p>
+
+<h3 id="network-security-config">
+ <network-security-config>
+</h3>
+
+<dl class="xml">
+ <dt>
+ pode conter:
+ </dt>
+
+ <dd>
+ 0 ou 1 de <code><a href="#base-config"><base-config></a></code><br>
+ Qualquer número de <code><a href=
+ "#domain-config"><domain-config></a></code><br>
+ 0 ou 1 de <code><a href="#debug-overrides"><debug-overrides></a></code>
+ </dd>
+</dl>
+
+<h3 id="base-config">
+ <base-config>
+</h3>
+
+<dl class="xml">
+ <dt>
+ sintaxe:
+ </dt>
+</dl>
+
+<pre class="stx">
+<base-config <a href=
+"#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
+ ...
+</base-config>
+</pre>
+<dl class="xml">
+ <dt>
+ pode conter:
+ </dt>
+
+ <dd>
+ <code><a href="#trust-anchors"><trust-anchors></a></code>
+ </dd>
+
+ <dt>
+ descrição:
+ </dt>
+
+ <dd>
+ A configuração padrão usada por todas as conexões cujo destino não é
+ coberto por um <a href="#domain-config"><code>domain-config</code></a>.
+
+<p>
+ Qualquer valor não definido usa os valores padrão da plataforma. A configuração padrão
+ para aplicativos direcionados a níveis de API acima do 24:
+</p>
+
+<pre>
+<base-config usesCleartextTraffic="true">
+ <trust-anchors>
+ <certificates src="system" />
+ </trust-anchors>
+</base-config>
+</pre>
+A configuração padrão para aplicativos direcionados a níveis de API 23 e inferiores:
+<pre>
+<base-config usesCleartextTraffic="true">
+ <trust-anchors>
+ <certificates src="system" />
+ <certificates src="user" />
+ </trust-anchors>
+</base-config>
+</pre>
+
+ </dd>
+</dl>
+
+<h3 id="domain-config"><domain-config></h3>
+<dl class="xml">
+<dt>sintaxe:</dt>
+<dd>
+<pre class="stx"><domain-config <a href="#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
+ ...
+</domain-config></pre>
+</dd>
+
+<dt>Pode conter:</dt>
+
+<dd>
+1 ou mais <code><a href="#domain"><domain></a></code>
+<br/>0 ou 1 <code><a href="#trust-anchors"><trust-anchors></a></code>
+<br/>0 ou 1 <code><a href="#pin-set"><pin-set></code></a>
+<br/>Qualquer número de <code><domain-config></code> aninhados</dd>
+
+<dt>Descrição</dt>
+<dd>A configuração usada para conexões com destinos específicos, conforme é definido pelos elementos {@code domain}.
+
+<p>Observe que, se vários elementos {@code domain-config} cobrirem um destino, a configuração com a regra de domínio correspondente
+mais específica (mais longa) será usada.</p></dd>
+</dl>
+
+
+<h3 id="domain"><domain></h3>
+
+<dl class="xml">
+ <dt>
+ sintaxe:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<domain includeSubdomains=["true" | "false"]>example.com</domain>
+</pre>
+ </dd>
+
+ <dt>
+ Atributos:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code includeSubdomains}
+ </dt>
+
+ <dd>
+ Se {@code "true"}, a regra de domínio corresponderá ao domínio e a todos os
+ subdomínios, incluindo subdomínios de subdomínios. Caso contrário, a regra
+ se aplica apenas a correspondências exatas.
+ </dd>
+ </dl>
+ </dd>
+
+ <dt>
+ Descrição:
+ </dt>
+</dl>
+
+<h3 id="debug-overrides"><debug-overrides></h3>
+
+<dl class="xml">
+ <dt>
+ sintaxe:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<debug-overrides>
+ ...
+</debug-overrides>
+</pre>
+ </dd>
+
+ <dt>
+ Pode conter:
+ </dt>
+
+ <dd>
+ 0 ou 1 <code><a href="#trust-anchors"><trust-anchors></a></code>
+ </dd>
+
+ <dt>
+ Descrição:
+ </dt>
+
+ <dd>
+ Substituições a serem aplicadas quando <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
+ for {@code "true"}, o que normalmente ocorre em compilações de não lançamento
+ geradas por IDEs e ferramentas de compilação. Âncoras de confiança especificadas em {@code
+ debug-overrides} são adicionadas a todas as demais configurações e a fixação
+ de certificados não é realizada quando a cadeia de certificados do servidor usa uma
+ dessas âncoras de confiança somente de depuração. Se <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
+ for {@code "false"}, esta seção será ignorada por completo.
+ </dd>
+</dl>
+
+<h3 id="trust-anchors"><trust-anchors></h3>
+<dl class="xml">
+ <dt>
+ sintaxe:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<trust-anchors>
+...
+</trust-anchors>
+</pre>
+ </dd>
+
+ <dt>
+ Pode conter:
+ </dt>
+
+ <dd>
+ Qualquer número de <code><a href="#certificates"><certificates></a></code>
+ </dd>
+
+ <dt>
+ Descrição:
+ </dt>
+
+ <dd>
+ Conjunto de âncoras de confiança para conexões seguras.
+ </dd>
+</dl>
+
+
+<h3 id="certificates"><certificates></h3>
+<dl class="xml">
+<dt>sintaxe:</dt>
+<dd><pre class="stx"><certificates src=["system" | "user" | "<i>raw resource</i>"]
+ overridePins=["true" | "false"] />
+</pre></dd>
+<dt>descrição:</dt>
+<dd>Conjunto de certificados X.509 para elementos {@code trust-anchors}.</dd>
+
+<dt>atributos:</dt>
+<dd><dl class="attr">
+<dt>{@code src}</dt>
+<dd>
+A fonte de certificados de CA, que pode ser um dos
+<ul>
+ <li>IDs de recursos brutos que apontam para um arquivo que contém certificados X.509.
+ Os certificados devem ser codificados em formato DER ou PEM. No caso de certificados PEM,
+ o arquivo <em>não deve</em> conter dados não PEM adicionais, como
+ comentários.
+ </li>
+
+ <li>{@code "system"} para os certificados de CA pré-instalados do sistema
+ </li>
+
+ <li>{@code "user"} para certificados de CA adicionados pelo usuário
+ </li>
+</ul>
+</dd>
+
+<dt>{@code overridePins}</dt>
+<dd>
+ <p>
+ Especifica se as CAs dessa fonte ignoram a fixação de certificados. Se {@code
+ “true”} e forem certificadas cadeias de certificados que incluam uma das CAs dessa
+ fonte, a fixação não será realizada. Isso pode ser útil para depurar CAs
+ ou permitir que o usuário execute ataques MiTM no tráfego seguro do seu aplicativo.
+ </p>
+
+ <p>
+ O padrão é {@code "false"} a não ser que seja especificado em um elemento {@code debug-overrides}
+. Nesse caso, o padrão será {@code "true"}.
+ </p>
+</dd>
+</dl>
+</dd>
+
+
+<h3 id="pin-set"><pin-set></h3>
+
+<dl class="xml">
+ <dt>
+ sintaxe:
+ </dt>
+
+ <dd>
+<pre class="stx">
+<pin-set expiration="date">
+...
+</pin-set>
+</pre>
+ </dd>
+
+ <dt>
+ Pode conter:
+ </dt>
+
+ <dd>
+ Qualquer número de <code><a href="#pin"><pin></a></code>
+ </dd>
+
+ <dt>
+ Descrição:
+ </dt>
+
+ <dd>
+ Um conjunto de fixações de chave pública. Para que uma conexão segura seja confiável, uma das
+ chaves públicas na cadeia de confiança deve estar presente no conjunto de fixações. Consulte
+ <code><a href="#pin"><pin></a></code> para saber mais sobre o formato das fixações.
+ </dd>
+
+ <dt>
+ Atributos:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code expiration}
+ </dt>
+
+ <dd>
+ A data, no formato {@code yyyy-MM-dd}, após a qual as fixações
+ expiram e são desativadas. Se o atributo não for definido, as fixações
+ não expirarão.
+ <p>
+ A expiração ajuda a evitar problemas de conectividade em aplicativos que não
+ recebem atualizações para o conjunto de fixações, por exemplo, porque o usuário
+ desativou as atualizações do aplicativo.
+ </p>
+ </dd>
+ </dl>
+ </dd>
+</dl>
+
+<h3 id="pin"><pin></h3>
+<dl class="xml">
+ <dt>
+ sintaxe:
+ </dt>
+
+ <dd>
+<pre class="stx">
+<pin digest=["SHA-256"]>base64 encoded digest of X.509
+ SubjectPublicKeyInfo (SPKI)</pin>
+</pre>
+ </dd>
+
+ <dt>
+ Atributos:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code digest}
+ </dt>
+
+ <dd>
+ O algoritmo de resumo usado para gerar a fixação. No momento, apenas
+ {@code "SHA-256"} é permitido.
+ </dd>
+ </dl>
+ </dd>
+</dl>
diff --git a/docs/html-intl/intl/pt-br/training/basics/network-ops/data-saver.jd b/docs/html-intl/intl/pt-br/training/basics/network-ops/data-saver.jd
new file mode 100644
index 0000000..a9803b8
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/training/basics/network-ops/data-saver.jd
@@ -0,0 +1,234 @@
+page.title=Economia de dados
+metaDescription=User-enabled otimização de uso de dados.
+page.keywords="android N", "data usage", "metered network"
+page.image=images/cards/card-nyc_2x.jpg
+@jd:body
+
+<div id="tb-wrapper">
+ <div id="tb">
+ <h2>
+ Neste documento
+ </h2>
+
+ <ol>
+ <li>
+ <a href="#status">Verificação de preferências da Economia de dados</a>
+ <ol>
+ <li>
+ <a href="#request-whitelist">Solicitação de permissão para colocar na lista de permissões</a>
+ </li>
+ </ol>
+ </li>
+
+ <li>
+ <a href="#monitor-changes">Monitoramento de preferências do
+ Economia de dados</a>
+ </li>
+
+ <li>
+ <a href="#testing">Teste com comandos do Android Debug Bridge</a>
+ </li>
+ </ol>
+ </div>
+</div>
+
+<p>
+ Durante a vida útil de um smartphone, o custo do plano de dados pode
+facilmente exceder o custo do próprio dispositivo. No N Developer Preview, os usuários podem
+ ativar a Economia de dados no dispositivo como um todo para usar menos dados, seja
+ em roaming, perto do final do período de cobrança ou em pacotes de dados pré-pagos pequenos.
+</p>
+
+<p>
+ Quando um usuário ativa a Economia de dados em <strong>Settings</strong> e o dispositivo está
+em uma rede tarifada, o sistema bloqueia o uso de dados em segundo plano e avisa
+ aos aplicativos para reduzir o uso de dados no primeiro plano sempre que possível. Os usuários podem
+autorizar aplicativos específicos a usar dados tarifados em segundo plano, mesmo com a Economia
+ de dados ativada.
+</p>
+
+<p>
+ O N Developer Preview estende a API {@link android.net.ConnectivityManager}
+ para oferecer aos aplicativos uma forma de <a href="#status">recuperar as
+preferências do usuário para a Economia de dados</a> e <a href="#monitor-changes">monitorar
+as mudanças de preferências</a>. Como prática recomendada, os aplicativos devem verificar se o
+ usuário ativou a Economia de dados e tentar limitar o uso de dados em primeiro e
+ segundo plano.
+</p>
+
+<h2 id="status">
+ Verificação de preferências da Economia de dados
+</h2>
+
+<p>
+ No N Developer Preview, aplicativos podem usar a API {@link
+ android.net.ConnectivityManager} para determinar quais restrições
+ de uso de dados estão sendo aplicadas. O método {@code getRestrictBackgroundStatus()}
+ retorna um dos seguintes valores:
+</p>
+
+<dl>
+ <dt>
+ {@code RESTRICT_BACKGROUND_STATUS_DISABLED}
+ </dt>
+
+ <dd>
+ A Economia de dados está desativada.
+ </dd>
+
+ <dt>
+ {@code RESTRICT_BACKGROUND_STATUS_ENABLED}
+ </dt>
+
+ <dd>
+ O usuário ativou a Economia de dados para este aplicativo. Os aplicativos tentarão limitar o
+ uso de dados em primeiro plano e gerenciar as restrições ao
+ uso de dados em segundo plano.
+ </dd>
+
+ <dt>
+ {@code RESTRICT_BACKGROUND_STATUS_WHITELISTED}
+ </dt>
+
+ <dd>
+ O usuário ativou a Economia de dados, mas o aplicativo está na lista de permissões. Os aplicativos
+ ainda tentarão limitar o uso de dados em primeiro e segundo plano.
+ </dd>
+</dl>
+
+<p>
+ É prática recomendada limitar o uso de dados sempre que o dispositivo
+ estiver conectado a uma rede tarifada, mesmo que a Economia de dados esteja desativada e o aplicativo
+ esteja na lista de permissões. O modelo de código a seguir usa {@link
+ android.net.ConnectivityManager#isActiveNetworkMetered
+ ConnectivityManager.isActiveNetworkMetered()} e {@code
+ ConnectivityManager.getRestrictBackgroundStatus()} para determinar o volume máximo de dados
+ que o aplicativo pode usar:
+</p>
+
+<pre>
+ConnectivityManager connMgr = (ConnectivityManager)
+ getSystemService(Context.CONNECTIVITY_SERVICE);
+// Checks if the device is on a metered network
+if (connMgr.isActiveNetworkMetered()) {
+ // Checks user’s Data Saver settings.
+ switch (connMgr.getRestrictBackgroundStatus()) {
+ case RESTRICT_BACKGROUND_STATUS_ENABLED:
+ // Background data usage is blocked for this app. Wherever possible,
+ // the app should also use less data in the foreground.
+
+ case RESTRICT_BACKGROUND_STATUS_WHITELISTED:
+ // The app is whitelisted. Wherever possible,
+ // the app should use less data in the foreground and background.
+
+ case RESTRICT_BACKGROUND_STATUS_DISABLED:
+ // Data Saver is disabled. Since the device is connected to a
+ // metered network, the app should use less data wherever possible.
+ }
+} else {
+ // The device is not on a metered network.
+ // Use data as required to perform syncs, downloads, and updates.
+}
+</pre>
+
+<h3 id="request-whitelist">
+ Solicitação de permissão para colocar na lista de permissões
+</h3>
+
+<p>
+ Se o seu aplicativo precisa usar dados em segundo plano, ele pode solicitar permissão para
+ entrar na lista de permissões enviando uma intenção
+ <code>Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS</code>
+ que contenha o URI no nome de pacote do aplicativo, por exemplo,
+ <code>package:MY_APP_ID</code>.
+</p>
+
+<p>
+ O envio da intenção e do URI abre o aplicativo <strong>Settings</strong> e
+ exibe as configurações de uso de dados de seu aplicativo. O usuário pode decidir então se
+ ativará os dados em segundo plano para o aplicativo. Antes de enviar a intenção, é
+ prática recomendada perguntar primeiro ao usuário se ele deseja iniciar o
+aplicativo <strong>Settings</strong> com o objetivo de ativar o uso
+ de dados em segundo plano.
+</p>
+
+<h2 id="monitor-changes">
+ Monitoramento de alterações nas preferências da Economia de dados
+</h2>
+
+<p>
+ Os aplicativos podem monitorar alterações nas preferências da Economia de dados criando um {@link
+ android.content.BroadcastReceiver} para escutar {@code
+ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED} e registrar
+ dinamicamente o receptor em {@link android.content.Context#registerReceiver
+ Context.registerReceiver()}. Quando recebe esta transmissão, o aplicativo deve
+ <a href="#status">verificar se as novas preferências da Economia de dados afetam
+ as permissões</a> chamando {@code
+ ConnectivityManager.getRestrictBackgroundStatus()}.
+</p>
+
+<p class="note">
+ <strong>Observação:</strong> O sistema só envia esta transmissão para aplicativos que
+ se registram dinamicamente para recebê-la em {@link
+ android.content.Context#registerReceiver Context.registerReceiver()}. Os aplicativos
+ que se registrarem para receber a transmissão no manifesto não a
+ receberão.
+</p>
+
+<h2 id="testing">
+ Teste com comandos do Android Debug Bridge
+</h2>
+
+O <a href="{@docRoot}tools/help/adb.html">Android Debug Bridge (ADB)</a>
+oferece alguns comandos que podem ser usados para verificar e configurar permissões
+de rede:
+
+<dl>
+ <dt>
+ <code>$ adb shell dumpsys netpolicy</code>
+ </dt>
+
+ <dd>
+ Gera um relatório que inclui a configuração de restrição atual da rede de segundo plano global
+, os UIDs do pacote em lista de permissões e as permissões de rede
+ de outros pacotes conhecidos.
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy</code>
+ </dt>
+
+ <dd>
+ Exibe uma lista completa de comandos do Gerenciador de políticas de rede (netpolicy).
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy set restrict-background
+ <boolean></code>
+ </dt>
+
+ <dd>
+ Ativa ou desativa o modo da Economia de dados ao passar <code>true</code> ou
+ <code>false</code>, respectivamente.
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy add restrict-background-whitelist
+ <UID></code>
+ </dt>
+
+ <dd>
+ Adiciona o UID do pacote especificado à lista de permissões para permitir o uso de dados de segundo plano
+ tarifados.
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy remove restrict-background-whitelist
+ <UID></code>
+ </dt>
+
+ <dd>
+ Adiciona o UID do pacote especificado à lista de permissões para bloquear o uso de dados
+ de segundo plano tarifados enquanto a Economia de dados estiver ativada.
+ </dd>
+</dl>
diff --git a/docs/html-intl/intl/pt-br/training/tv/playback/picture-in-picture.jd b/docs/html-intl/intl/pt-br/training/tv/playback/picture-in-picture.jd
new file mode 100644
index 0000000..baa7d61
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/training/tv/playback/picture-in-picture.jd
@@ -0,0 +1,213 @@
+page.title=Imagem em imagem
+page.keywords=preview,sdk,PIP,Picture-in-picture
+page.tags=androidn
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>Neste documento</h2>
+<ol>
+ <li><a href="#declaring">Declarar que sua atividade oferece suporte ao modo de
+imagem em imagem</a></li>
+ <li><a href="#pip_button">Alternar a atividade para o modo de imagem em imagem</a>
+</li>
+ <li><a href="#handling_ui">Lidar com a IU durante o modo de imagem em imagem</a>
+</li>
+ <li><a href="#continuing_playback">Continuar reprodução de vídeo no modo de
+imagem em imagem</a></li>
+ <li><a href="#single_playback">Usar uma única atividade de reprodução para
+imagem em imagem</a></li>
+ <li><a href="#best">Práticas recomendadas</a></li>
+</ol>
+
+<h2>Veja também</h2>
+<ol>
+ <li><a href="{@docRoot}preview/features/multi-window.html">Suporte a
+várias janelas</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>No Android N, os usuários do Android TV agora podem assistir a um vídeo
+em uma janela fixada em um canto da tela enquanto navegam em
+aplicativos. O modo de imagem em imagem (PIP) permite que os aplicativos executem uma atividade de vídeo
+na janela fixada enquanto outra atividade continua em
+segundo plano. A janela do PIP permite que os usuários realizem várias tarefas enquanto usam seu aplicativo, o que os
+ajuda a ser mais produtivos.</p>
+
+<p>Seu aplicativo pode decidir quando acionar o modo de PIP. Veja alguns exemplos de
+quando entrar no modo de PIP:</p>
+
+<ul>
+<li>Seu aplicativo pode passar um vídeo para o modo de PIP quando o usuário
+sai do vídeo para procurar outro conteúdo.</li>
+<li>Seu aplicativo pode passar um vídeo para o modo de PIP quando um usuário assiste ao final
+de um episódio de conteúdo. A janela principal exibe informações promocionais ou de resumo
+sobre o próximo episódio da série.</li>
+<li>Seu aplicativo pode fornecer uma maneira de os usuários colocarem conteúdo adicional em uma fila enquanto
+assistem a um vídeo. O vídeo continua a ser reproduzido no modo de PIP enquanto a tela principal
+exibe uma atividade de seleção de conteúdo.</li>
+</ul>
+
+<p>A janela do modo de PIP tem 240x135 dp e é mostrada na camada superior de um dos
+quatro cantos da tela, escolhido pelo sistema. O usuário pode exibir um
+menu de PIP que permite que coloque a janela do PIP em tela inteira ou feche-a
+ao pressionar o botão <b>Home</b> do controle remoto. Se outro
+vídeo começar a ser reproduzido na tela principal, a janela do PIP será fechada
+automaticamente. Os usuários também podem fechar a janela do PIP em Recents.</p>
+
+<img src="{@docRoot}images/android-7.0/pip-active.png" />
+<p class="img-caption"><strong>Figura 1.</strong> Um vídeo no modo de imagem em imagem
+visível no canto da tela enquanto o usuário navega por conteúdo
+na janela principal.</p>
+
+<p>O PIP utiliza as APIs de várias janelas disponíveis no Android N para
+fornecer a janela sobreposta de vídeo fixo. Para adicionar o modo de PIP ao seu aplicativo, você deve
+registrar as atividades que oferecem suporte a PIP, alternar a atividade para o modo de PIP conforme
+a necessidade e garantir que os elementos de IU sejam ocultados e que a reprodução do vídeo continue quando
+a atividade estiver no modo de PIP.</p>
+
+<h2 id="declaring">Declarar que sua atividade oferece suporte ao modo de imagem em imagem</h2>
+
+<p>Por padrão, o sistema não oferece suporte ao modo de PIP automaticamente para seus aplicativos.
+Se quiser esse suporte para seu aplicativo, registre a atividade
+de vídeo no manifesto definindo
+<code>android:supportsPictureInPicture</code> e
+<code>android:resizeableActivity</code> como <code>true</code>. Além disso, especifique
+que a atividade processa alterações na configuração de layout de forma que a atividade
+não seja reiniciada quando ocorrem essas alterações durante as transições do modo de PIP.</p>
+
+<pre>
+<activity android:name="VideoActivity"
+ android:resizeableActivity="true"
+ android:supportsPictureInPicture="true"
+ android:configChanges=
+ "screenSize|smallestScreenSize|screenLayout|orientation"
+ ...
+</pre>
+
+<p>Ao registrar a atividade, lembre-se de que, no modo de PIP, ela
+é mostrada em uma pequena janela sobreposta em uma tela de TV. Atividades de reprodução de
+vídeo com uma quantidade mínima de itens de IU oferecem a melhor experiência do usuário. Atividades que contêm
+pequenos elementos de IU podem não oferecer uma boa experiência do usuário
+no modo de PIP, pois ele não conseguirá enxergar os detalhes desses elementos
+na janela do PIP.</p>
+
+<h2 id="pip_button">Alternar a atividade para o modo de imagem em imagem</h2>
+
+Quando precisar colocar a atividade no modo de PIP, chame
+<code>Activity.enterPictureInPictureMode()</code>. O exemplo a seguir
+entra no modo de PIP quando o usuário seleciona um botão dedicado ao PIP na barra de controle de
+uma mídia:</p>
+
+<pre>
+@Override
+public void onActionClicked(Action action) {
+ if (action.getId() == R.id.lb_control_picture_in_picture) {
+ getActivity().enterPictureInPictureMode();
+ return;
+ }
+ ...
+</pre>
+
+<p>Adicionar um botão de PIP à barra de controle de mídia permite que o usuário entre no
+modo de PIP com facilidade ao controlar a reprodução de um vídeo.</p>
+
+<img src="{@docRoot}images/android-7.0/pip-button.png" />
+<p class="img-caption"><strong>Figura 1.</strong> Um botão do
+modo de imagem em imagem em uma barra de controle de mídia.</p>
+
+<p>O Android N inclui uma nova classe
+<code>PlaybackControlsRow.PictureInPictureAction</code> que define ações do PIP
+para a barra de controle e usa o ícone do PIP.</p>
+
+<h2 id="handling_ui">Lidar com a IU durante o modo de imagem em imagem</h2>
+
+<p>Quando a atividade entra no modo de PIP, ela deve mostrar apenas a reprodução do
+vídeo. Remova elementos de IU antes que a atividade entre no modo de PIP
+e restaure esses elementos quando a atividade voltar ao modo de tela inteira.
+Substitua <code>Activity.onPictureInPictureModeChanged()</code> ou
+<code>Fragment.onPictureInPictureModeChanged()</code> e ative ou
+desative os elementos de interface conforme for necessário. Por exemplo:</p>
+
+<pre>
+@Override
+public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
+ if (isInPictureInPictureMode) {
+ // Hide the controls in picture-in-picture mode.
+ ...
+ } else {
+ // Restore the playback UI based on the playback status.
+ ...
+ }
+}
+</pre>
+
+<h2 id="continuing_playback">Continuar reprodução de vídeo no modo de
+imagem em imagem</h2>
+
+<p>Quando a atividade entra no modo de PIP, o sistema a considera
+pausada e chama o método <code>onPause()</code> da atividade. A reprodução
+de vídeos não deverá ser pausada se a atividade
+for pausada devido ao modo de PIP. Verifique o PIP no método
+<code>onPause()</code> da atividade e realize a reprodução da forma apropriada. Por
+exemplo:</p>
+
+<pre>
+@Override
+public void onPause() {
+ // If called while in PIP mode, do not pause playback
+ if (isInPictureInPictureMode()) {
+ // Continue playback
+ ...
+ }
+ // If paused but not in PIP, pause playback if necessary
+ ...
+}
+</pre>
+
+<p>Quando a atividade sai do modo de PIP e volta à tela inteira, o
+sistema retoma a atividade e chama o método <code>onResume()</code>.</p>
+
+<h2 id="single_playback">Usar uma única atividade de reprodução para
+imagem em imagem</h2>
+
+<p>Ao navegar pelo conteúdo
+ da tela principal de seu aplicativo, um usuário pode selecionar um novo vídeo enquanto uma atividade de reprodução de vídeo estiver em modo de PIP. Reproduza o novo
+ vídeo na atividade de reprodução existente em modo de tela cheia em vez de
+lançar uma nova atividade que pode confundir o usuário.</p>
+
+<p>Para que uma única atividade seja usada para solicitações de reprodução de vídeo e
+com o modo de PIP ativado ou desativado, conforme necessário, configure o
+<code>android:launchMode</code> da atividade para <code>singleTask</code> em seu manifesto.
+</p>
+
+<pre>
+<activity android:name="VideoActivity"
+ ...
+ android:supportsPictureInPicture="true"
+ android:launchMode="singleTask"
+ ...
+</pre>
+
+<p>Na atividade, modifique {@link android.app.Activity#onNewIntent
+Activity.onNewIntent()} e processe o novo vídeo, interrompendo qualquer
+reprodução existente, caso necessário.</p>
+
+<h2 id="best">Práticas recomendadas</h2>
+
+<p>O PIP é destinado a atividades que reproduzem vídeos em tela inteira. Ao passar
+a atividade para o modo de PIP, evite mostrar qualquer coisa que não seja o conteúdo do vídeo.
+Rastreie quando a atividade entrar no modo de PIP e oculte os elementos de IU, conforme descrito
+em <a href="#handling_ui">Lidar com a interface durante o modo de imagem em imagem</a>.</p>
+
+<p>Como a janela do PIP é mostrada como uma janela flutuante no canto da
+tela, você deve evitar exibir informações essenciais em qualquer área
+da janela principal que possa ser ocultada pela janela do PIP.</p>
+
+<p>Quando uma atividade está no modo de PIP, ela não recebe foco de entrada por padrão. Para
+receber eventos de entrada no modo de PIP, use
+<code>MediaSession.setMediaButtonReceiver()</code>.</p>
diff --git a/docs/html-intl/intl/pt-br/training/tv/tif/content-recording.jd b/docs/html-intl/intl/pt-br/training/tv/tif/content-recording.jd
new file mode 100644
index 0000000..c6d7bb7
--- /dev/null
+++ b/docs/html-intl/intl/pt-br/training/tv/tif/content-recording.jd
@@ -0,0 +1,142 @@
+page.title=Gravação para TV
+page.keywords=preview,sdk,tv,recording
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>Neste documento</h2>
+ <ol>
+ <li><a href="#supporting">Indicar suporte para gravação</a></li>
+ <li><a href="#recording">Gravar uma sessão</a></li>
+ <li><a href="#errors">Solucionar erros de gravação</a></li>
+ <li><a href="#sessions">Gerenciar sessões gravadas</a></li>
+ <li><a href="#best">Práticas recomendadas</a></li>
+ </ol>
+</div>
+</div>
+
+<p>Serviços de entrada de TV permitem que o usuário pause e retome a reprodução do canal por meio de
+APIs de time-shifting. O Android N expande o time-shifting
+ao permitir que o usuário salve várias sessões gravadas.</p>
+
+<p>Os usuários podem programar gravações antecipadamente ou iniciar uma gravação enquanto assistem a
+um programa. Quando o sistema salvar a gravação, o usuário poderá procurar, gerenciar
+e reproduzir a gravação usando o aplicativo de TV do sistema.</p>
+
+<p>Se quiser fornecer recursos de gravação para seu serviço de entrada de TV,
+indique para o sistema que o aplicativo oferece suporte a gravação, implemente
+a capacidade de gravar programas, solucione e comunique erros ocorridos
+durante a gravação e gerencie as sessões gravadas.</p>
+
+<p class="note"><strong>Observação:</strong> O aplicativo Live Channels ainda não
+oferece aos usuários uma forma de criar ou acessar gravações. Enquanto o aplicativo Live Channels não sofrer
+ alterações, será difícil testar toda a experiência de
+gravação de seu serviço de entrada de TV.</p>
+
+<h2 id="supporting">Indicar suporte para gravação</h2>
+
+<p>Para informar ao sistema que seu serviço de entrada de TV oferece suporte a gravação, defina
+ o atributo <code>android:canRecord</code> no arquivo XML de metadados do serviço
+ como <code>true</code>:
+</p>
+
+<pre>
+<tv-input xmlns:android="http://schemas.android.com/apk/res/android"
+ <b>android:canRecord="true"</b>
+ android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />
+</pre>
+
+<p>Para obter mais informações sobre o arquivo de metadados do serviço, consulte
+<a href="{@docRoot}training/tv/tif/tvinput.html#manifest">Declarar seu serviço
+de entrada de TV no manifesto</a> (em inglês).
+</p>
+
+<p>Como alternativa, você pode indicar suporte a gravação em seu código usando
+estas etapas:</p>
+
+<ol>
+<li>No método <code>TvInputService.onCreate()</code>, crie um novo objeto
+<code>TvInputInfo</code> usando a classe <code>TvInputInfo.Builder</code>
+.</li>
+<li>Ao criar o novo objeto <code>TvInputInfo</code>, chame
+<code>setCanRecord(true)</code> antes de chamar <code>build()</code> para
+indicar que seu serviço oferece suporte a gravação.</li>
+<li>Registre seu objeto <code>TvInputInfo</code> com o sistema chamando
+<code>TvInputManager.updateTvInputInfo()</code>.</li>
+</ol>
+
+<h2 id="recording">Gravar uma sessão</h2>
+
+<p>Depois que o serviço de entrada de TV registrar que oferece suporte ao recurso
+de gravação, o sistema chamará seu
+<code>TvInputService.onCreateRecordingSession()</code> quando precisar acessar
+a implementação de gravação do seu aplicativo. Implemente sua própria subclasse
+<code>TvInputService.RecordingSession</code> e retorne-a
+quando o retorno de chamada <code>onCreateRecordingSession()</code>
+for acionado. Essa subclasse é responsável por alternar para os dados de canal corretos,
+gravando os dados solicitados e comunicando o status de gravação e os erros ao
+sistema.</p>
+
+<p>Quando o sistema chamar <code>RecordingSession.onTune()</code>, passando um
+URI de canal, acesse o canal especificado pelo URI. Notifique o sistema de que
+seu aplicativo acessou o canal desejado ao chamar <code>notifyTuned()</code>
+ou, se o aplicativo não conseguiu acessar o canal correto, chame
+<code>notifyError()</code>.</p>
+
+<p>Em seguida, o sistema invoca o retorno de chamada <code>RecordingSession.onStartRecording()</code>
+. O aplicativo deve iniciar a gravação imediatamente. Quando o sistema invoca
+esse retorno de chamada, ele pode fornecer um URI que contenha informações sobre o programa
+que será gravado. Quando a gravação for concluída, você deverá copiar esses
+dados para a tabela de dados <code>RecordedPrograms</code>.</p>
+
+<p>Por fim, o sistema chama <code>RecordingSession.onStopRecording()</code>.
+Nesse momento, o aplicativo deve interromper a gravação imediatamente. Também é preciso
+criar uma entrada na tabela <code>RecordedPrograms</code>. Essa entrada deve
+incluir o URI dos dados da sessão gravada na coluna
+<code>RecordedPrograms.COLUMN_RECORDING_DATA_URI</code> e qualquer informação
+sobre o programa fornecida pelo sistema na chamada inicial em
+<code>onStartRecording()</code>.</p>
+
+<p>Para saber mais sobre como acessar a tabela <code>RecordedPrograms</code>,
+consulte <a href="#sessions">Gerenciar sessões gravadas</a>.</p>
+
+<h2 id="errors">Solucionar erros de gravação</h2>
+
+<p>Se um erro ocorrer durante a gravação, inutilizando os dados gravados,
+notifique o sistema chamando <code>RecordingSession.notifyError()</code>.
+Também é possível chamar <code>notifyError()</code> depois que uma sessão de gravação é
+criada para informar ao sistema que seu aplicativo não pode mais gravar sessões.</p>
+
+<p>Se um erro ocorrer durante a gravação, mas você quiser fornecer uma gravação
+parcial que pode ser usada pelos usuários para reprodução, chame
+<code>RecordingSession.notifyRecordingStopped()</code> para permitir que o sistema
+use a sessão parcial.</p>
+
+<h2 id="sessions">Gerenciar sessões gravadas</h2>
+
+<p>O sistema mantém as informações de todas as sessões gravadas de todos
+os aplicativos de canais com recursos de gravação na tabela de provedor de conteúdo <code>TvContract.RecordedPrograms</code>
+. Essas informações podem ser acessadas pelo URI de conteúdo
+<code>RecordedPrograms.Uri</code>. Use APIs de provedores de conteúdo para
+ler, adicionar e excluir entradas dessa tabela.</p>
+
+<p>Para saber mais sobre como trabalhar com dados de provedores de conteúdo, consulte
+<a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
+Fundamentos do provedor de conteúdo</a> .</p>
+
+<h2 id="best">Práticas recomendadas</h2>
+
+<p>Dispositivos de TV podem ter armazenamento limitado, então tenha bom senso ao
+alocar armazenamento para salvar sessões gravadas. Use
+<code>RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)</code> quando
+não houver espaço suficiente para salvar uma sessão gravada.</p>
+
+<p>Quando o usuário iniciar a gravação, comece a gravar os dados assim
+que possível. Para facilitar esse processo, realize qualquer tarefa demorada imediatamente,
+como acessar e alocar o espaço de armazenamento, quando o sistema invocar o retorno de chamada
+<code>onCreateRecordingSession()</code>. Isso permite que você comece
+a gravar imediatamente após o acionamento do retorno de chamada <code>onStartRecording()</code>
+.</p>
diff --git a/docs/html-intl/intl/ru/about/versions/nougat/android-7.0-changes.jd b/docs/html-intl/intl/ru/about/versions/nougat/android-7.0-changes.jd
new file mode 100644
index 0000000..11a2495
--- /dev/null
+++ b/docs/html-intl/intl/ru/about/versions/nougat/android-7.0-changes.jd
@@ -0,0 +1,480 @@
+page.title=Изменения в работе
+page.keywords=preview,sdk,compatibility
+meta.tags="предварительная версия", "совместимость"
+page.tags="preview", "developer preview"
+page.image=images/cards/card-n-changes_2x.png
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>Содержание документа</h2>
+
+<ol>
+ <li><a href="#perf">Повышение производительности</a>
+ <ol>
+ <li><a href="#doze">Режим Doze</a></li>
+ <li><a href="#bg-opt">Оптимизация фоновых процессов</a></li>
+ </ol>
+ </li>
+ <li><a href="#perm">Изменения разрешений</a></li>
+ <li><a href="#accessibility">Улучшенные специальные возможности</a>
+ <ol>
+ <li><a href="#screen-zoom">Масштабирование экрана</a></li>
+ <li><a href="#vision-settings">Vision Settings в мастере настройки</a></li>
+ </ol>
+ </li>
+ <li><a href="#ndk">Связь приложений NDK с библиотеками платформы</a></li>
+ <li><a href="#afw">Android for Work</a></li>
+</ol>
+
+<h2>Дополнительно</h2>
+<ol>
+ <li><a href="{@docRoot}preview/api-overview.html">Обзор API-интерфейсов Android N</a>
+</li>
+</ol>
+
+</div>
+</div>
+
+
+<p>
+ Наряду с новыми функциями и возможностями в Android N появились различные изменения
+работы системы и API. В этом документе рассматриваются некоторые наиболее важные
+изменения, которые следует понимать и учитывать при разработке приложений.
+
+</p>
+
+<p>
+ Если вы ранее публиковали приложения для Android, то примите во внимание,
+что эти изменения в платформе могут повлиять на работу ваших уже опубликованных приложений.
+</p>
+
+
+<h2 id="perf">Повышение производительности</h2>
+
+<p>
+ Изменения в работе системы Android N нацелены на более экономное использование заряда аккумулятора
+и оперативной памяти, а также на повышение производительности приложений. Эти изменения могут повлиять
+на системные уведомления и доступность системных ресурсов для вашего приложения. Вам следует
+ознакомиться с этими изменениями и оценить, какие исправления могут понадобиться вашему приложению для соответствия этим изменениям.
+
+</p>
+
+<h3 id="doze">Режим Doze</h3>
+
+<p>
+ Появившийся в Android 6.0 (уровень API 23), режим Doze экономит заряд аккумулятора,
+откладывая процессорные и сетевые операции, когда устройство находится не на зарядке,
+оно неподвижно, и его экран погашен. Android N расширяет возможности
+режима Doze, применяя частичный набор процессорных и сетевых ограничений
+в тех случаях, когда устройство находится не на зарядке, с погашенным экраном, но не обязательно неподвижно,
+например, когда оно находится в кармане пользователя.
+</p>
+
+
+<img src="{@docRoot}images/android-7.0/doze-diagram-1.png" alt="" height="251px" id="figure1" />
+<p class="img-caption">
+ <strong>Рис. 1.</strong> Иллюстрация применения первого уровня ограничений активности системы в режиме Doze
+для экономии заряда аккумулятора.
+</p>
+
+<p>
+ Когда устройство питается от аккумулятора и его экран отключен в течение некоторого промежутка времени,
+устройство переходит в режим Doze и применяет первый частичный набор ограничений: закрывается доступ приложений
+к сети, откладывается выполнение заданий и синхронизации. Если устройство
+остается неподвижным в течение определенного времени после перехода в режим Doze, система применяет
+остальные ограничения Doze для {@link android.os.PowerManager.WakeLock},
+оповещений {@link android.app.AlarmManager}, сканирования GPS и Wi-Fi. Независимо от того, были применены
+все или только некоторые ограничения режима Doze, устройство периодически пробуждается на короткий промежуток времени,
+в течение которого приложениям разрешается сетевой доступ
+и выполнение отложенных заданий или синхронизации.
+</p>
+
+
+<img src="{@docRoot}images/android-7.0/doze-diagram-2.png" alt="" id="figure2" />
+<p class="img-caption">
+ <strong>Рис. 2.</strong> Иллюстрация применения второго уровня ограничений активности системы в режиме Doze
+после того, как устройство неподвижно в течение определенного времени.
+</p>
+
+<p>
+ Следует отметить, что включение экрана или подключение к источнику питания приводит
+к выходу устройства из режима Doze и
+снимает эти ограничения обработки. Эти дополнительные особенности поведения
+не влияют на советы и рекомендации по адаптации приложений к предыдущей
+версии режима Doze из Android 6.0 (уровень API 23), которые были рассмотрены в документе
+<a href="{@docRoot}training/monitoring-device-state/doze-standby.html">Оптимизация для режима Doze и режима ожидания для приложений</a>.
+Вы должны следовать этим рекомендациям (например, использовать Google Cloud Messaging (GCM)
+для отправки и получения сообщений) и приступить к планированию обновлений для соответствия дополнительному поведению режима
+Doze.
+</p>
+
+
+<h3 id="bg-opt">Проект Svelte: оптимизация фоновых процессов</h3>
+
+<p>
+ В Android N удалены три неявных широковещательной рассылки с целью оптимизации
+потребления памяти и энергии. Причиной этого изменения стало то, что неявные
+широковещательные рассылки часто запускали приложения, которые прослушивали их в
+фоновом режиме. Удаление этих рассылок может существенно улучшить производительность устройства
+и работу интерфейса пользователя.
+</p>
+
+<p>
+ На мобильных устройствах часто могут происходить изменения подключения, например, при переключении
+между Wi-Fi и мобильным трафиком. Сейчас приложения могут следить за изменениями
+подключения, зарегистрировавшись в качестве получателя для неявных широковещательных рассылок {@link
+ android.net.ConnectivityManager#CONNECTIVITY_ACTION} в своем манифесте.
+Поскольку для получения этих рассылок регистрируются многие приложения, каждое
+переключение сети может вызвать их активацию и одновременную обработку рассылки.
+
+</p>
+
+<p>
+ Подобным образом приложения могут регистрироваться для получения неявных широковещательных рассылок {@link
+ android.hardware.Camera#ACTION_NEW_PICTURE} и {@link
+ android.hardware.Camera#ACTION_NEW_VIDEO} от других приложений, например от камеры.
+Когда пользователь делает снимок с помощью приложения камеры, эти приложения активируются
+для обработки широковещательной рассылки.
+</p>
+
+<p>
+ Для устранения этих проблем Android N применяет следующие
+способы оптимизации.
+</p>
+
+<ul>
+ <li>Приложения для Android N не получают широковещательные рассылки {@link
+ android.net.ConnectivityManager#CONNECTIVITY_ACTION}, даже если в их манифесте
+указаны требования получения уведомлений об этих событиях. Приложения в активном режиме
+могут следить за событиями {@code CONNECTIVITY_CHANGE} в своем
+основном потоке, если они запрашивают уведомление через {@link
+ android.content.BroadcastReceiver}.
+ </li>
+
+ <li>Приложения не могут отправлять или получать широковещательные рассылки {@link
+ android.hardware.Camera#ACTION_NEW_PICTURE} и {@link
+ android.hardware.Camera#ACTION_NEW_VIDEO}. Эта оптимизация влияет на все приложения, включая те, которые не предназначены для Android N.
+
+ </li>
+</ul>
+
+<p>
+ В будущих выпусках Android могут быть отменены другие неявные широковещательные рассылки,
+а также отменена привязка некоторых фоновых служб. Поэтому следует избегать зависимостей
+(или удалить их) в виде объявленных в манифесте получателей неявных широковещательных рассылок
+или фоновых служб.
+</p>
+
+<p>
+ Платформа Android предоставляет несколько решений, позволяющих отказаться от таких
+неявных широковещательных рассылок или фоновых служб. Например, в API {@link
+ android.app.job.JobScheduler} реализован надежный механизм планирования сетевых операций,
+который запускается при выполнении определенных условий, например при подключении к безлимитной сети. Вы можете даже использовать {@link
+ android.app.job.JobScheduler}, чтобы реагировать на изменения поставщиков контента.
+
+</p>
+
+<p>
+ Дополнительная информация об этом изменении в работе системы и соответствующей
+адаптации приложений содержится в документе <a href="{@docRoot}preview/features/background-optimization.html">Оптимизация фоновых процессов</a>.
+
+</p>
+
+
+<h2 id="perm">Изменения разрешений</h2>
+
+<p>
+ В Android N внесены изменения разрешений, которые могут повлиять на ваше приложение,
+включая разрешения учетных записей пользователей и новое разрешение на запись
+во внешнем хранилище. Ниже приводится краткое описание разрешений, измененных в
+предварительной версии.
+</p>
+
+<ul>
+ <li>{@code GET_ACCOUNTS} (устарело)
+ <p>
+ Разрешение GET_ACCOUNTS теперь считается устаревшим. Система игнорирует это разрешение
+для приложений, разработанных для Android N.
+ </p>
+ </li>
+
+</ul>
+
+
+
+<h2 id="accessibility">Улучшенные специальные возможности</h2>
+
+<p>
+ В Android N внесены изменения, которые должны сделать платформу более удобной для пользователей
+со слабым или нарушенным зрением. Эти изменения в целом
+не требуют исправления кода вашего приложения, однако вам следует проверить их
+и протестировать на своем приложении, чтобы оценить их возможное влияние на интерфейс
+пользователя.
+</p>
+
+
+<h3 id="screen-zoom">Масштабирование экрана</h3>
+
+<p>
+ Android N позволяет пользователям установить параметр <strong>Display size</strong>, который увеличивает или уменьшает
+все элементы на экране, делая таким образом устройство более удобным
+для пользователей со слабым зрением. Пользователи не могут масштабировать экран до ширины менее
+<a href="http://developer.android.com/guide/topics/resources/providing-resources.html"> sw320dp</a> (ширина экрана Nexus 4, обычного телефона среднего размера).
+
+</p>
+
+<div class="cols">
+
+<div class="col-6">
+ <img src="{@docRoot}images/android-7.0/screen-zoom-1.png" alt="" height="XXX" id="figure1" />
+</div>
+<div class="col-6">
+ <img src="{@docRoot}images/android-7.0/screen-zoom-2.png" alt="" height="XXX" id="figure1" />
+</div>
+
+</div> <!-- end cols -->
+<p class="img-caption">
+ <strong>Рис. 3.</strong> На экране справа показан эффект
+увеличения параметра Display size на устройстве под управлением Android N.
+</p>
+
+
+<p>
+ При изменении плотности экрана устройства система уведомляет запущенные приложения следующим способами.
+
+</p>
+
+<ul>
+ <li>Если приложение предназначено для API уровня 23 или ниже, система автоматически завершает
+все его фоновые процессы. Это означает, что если пользователь переходит из такого приложения
+на экран <em>Settings</em> и изменяет параметр
+<strong>Display size</strong>, то система завершает работу приложения таким же образом,
+как в случае нехватки памяти. Если у приложения имеются процессы, работающие в активном режиме,
+система уведомляет эти процессы об изменении конфигурации согласно описанию в документе
+<a href="{@docRoot}guide/topics/resources/runtime-changes.html">Обработка изменений
+в режиме выполнения</a>, как в случае изменения ориентации устройства.
+ </li>
+
+ <li>Если приложение разработано для Android N, все его процессы
+(активные и фоновые) уведомляются об изменении конфигурации, как это описано в документе
+<a href="{@docRoot}guide/topics/resources/runtime-changes.html">Обработка изменений в режиме выполнения</a>.
+
+ </li>
+</ul>
+
+<p>
+ Большинству приложений не требуются какие-либо изменения для поддержки этой возможности при условии,
+что эти приложения соответствуют рекомендациям по разработке для Android. Необходимо проверить следующие моменты.
+</p>
+
+<ul>
+ <li>Протестируйте свое приложение на устройстве с шириной экрана <code><a href=
+ "{@docRoot}guide/topics/resources/providing-resources.html">sw320dp</a></code>
+и убедитесь в его корректной работе.
+ </li>
+
+ <li>При изменении конфигурации устройства обновите в кэше все данные, зависящие от плотности экрана,
+такие как кэшированные растровые изображения или ресурсы, загруженные из сети.
+Проверьте изменения конфигурации, когда приложение возобновляет свою работу после паузы.
+
+ <p class="note">
+ <strong>Примечание.</strong> Если вы кэшируете данные, зависящие от конфигурации, рекомендуется
+добавить к ним релевантные метаданные, описывающие, например, подходящий размер экрана
+или плотность пикселей для этих данных. Эти метаданные помогут решить,
+нужно ли обновлять кэшированные данные после изменения конфигурации.
+
+ </p>
+ </li>
+
+ <li>Избегайте указания абсолютных размеров в пикселях, поскольку они не масштабируются вместе с изменением плотности экрана.
+Вместо этого указывайте размеры в <a href="{@docRoot}guide/practices/screens_support.html">независимых от плотности пикселях</a> (<code>dp</code>).
+
+ </li>
+</ul>
+
+<h3 id="vision-settings">Vision Settings в мастере настройки</h3>
+
+<p>
+ В Android N появились настройки Vision Settings на экране приветствия, где пользователи могут установить
+следующие параметры специальных возможностей на новом устройстве:
+<strong>Magnification gesture</strong>, <strong>Font size</strong>,
+<strong>Display size</strong> и <strong>TalkBack</strong>. В результате этого изменения
+становятся более заметными ошибки, связанные с различными настройками экрана. Чтобы
+оценить влияние этой функции, следует протестировать свое приложение, включив эти настройки
+на экране <strong>Settings >
+Accessibility</strong>.
+</p>
+
+<h2 id="ndk">Связь приложений NDK с библиотеками платформы</h2>
+
+<p>
+ В Android N внесены изменения пространства имен, предотвращающие загрузку закрытых API-интерфейсов.
+Если вы используете NDK, то вы должны использовать только открытые API-интерфейсы платформы Android.
+Использование закрытых API в следующем официальном выпуске Android
+может привести к ошибке и завершению работы приложения.
+</p>
+
+<p>
+ Чтобы предупредить вас об использовании закрытых API, приложения, запущенные на устройстве с Android N,
+создают сообщение об ошибке в журнале устройства (logcat) при вызове закрытого API.
+Эта ошибка также отображается на экране устройства в виде сообщения, информирующего о ситуации.
+Вам следует проверить код приложения, отказаться от применения
+закрытых API и тщательно протестировать приложение на
+тестовом устройстве или эмуляторе.
+</p>
+
+<p>
+ Если ваше приложение зависит от библиотек платформы, ознакомьтесь в документации NDK
+со стандартными способами замены общих закрытых API их открытыми эквивалентами.
+Вы можете ссылаться на библиотеки платформы, не замечая этого,
+особенно если ваше приложение использует библиотеку, которая является частью платформы (например,
+<code>libpng</code>), но не входит в состав NDK. В этом случае убедитесь, что ваш
+пакет APK содержит все файлы .so, на которые вы намеревались ссылаться.
+</p>
+
+<p class="caution">
+ <strong>Внимание!</strong> Некоторые сторонние библиотеки могут ссылаться на закрытые
+API. Приложение, использующее такие библиотеки, может завершиться с ошибкой при запуске в следующем
+официальном выпуске Android.
+</p>
+
+<p>
+ Приложения не должны зависеть от библиотек платформы (или использовать их), которые не входят в состав
+NDK, поскольку эти библиотеки могут изменяться или отсутствовать в разных выпусках Android.
+Примером такого изменения может служить переход от OpenSSL к BoringSSL.
+Разные устройства также могут обладать разными уровнями совместимости, поскольку
+для библиотек платформы, не включенных в
+NDK, отсутствуют требования к совместимости. Если вам необходимо обратиться к библиотекам не из состава NDK на более старых устройствах, эту загрузку следует
+сделать зависимой от уровня Android API.
+</p>
+
+<p>
+ Для помощи в диагностике проблем подобного рода ниже приведены несколько примеров ошибок Java и NDK,
+с которым вы можете столкнуться при создании приложения для Android N.
+</p>
+
+<p>Пример ошибки Java:</p>
+<pre class="no-pretty-print">
+java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so"
+ is not accessible for the namespace "classloader-namespace"
+</pre>
+
+<p>Пример ошибки NDK:</p>
+<pre class="no-pretty-print">
+dlopen failed: cannot locate symbol "__system_property_get" referenced by ...
+</pre>
+
+
+<p>
+ Ниже приведены некоторые стандартные способы устранения подобных ошибок в приложениях.
+</p>
+
+<ul>
+ <li>Использование getJavaVM и getJNIEnv из libandroid_runtime.so может быть заменено
+стандартными функциями JNI:
+<pre class="no-pretty-print">
+AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h>
+AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or
+JavaVM::AttachCurrentThread from <jni.h>.
+</pre>
+ </li>
+
+ <li>Использование символа {@code property_get} из {@code libcutils.so} может быть
+заменено открытой альтернативой {@code __system_property_get}.
+Для этого используйте {@code __system_property_get} со следующим включением include:
+<pre>
+#include <sys/system_properties.h>
+</pre>
+ </li>
+
+ <li>Использование символа {@code SSL_ctrl} из {@code libcrypto.so} должно быть заменено локальной версией.
+Например, вы должны статически связать
+{@code libcyrpto.a} в своем файле {@code .so} или динамически включить в свое приложение собственную библиотеку
+{@code libcrypto.so} из BoringSSL или OpenSSL.
+ </li>
+</ul>
+
+<h2 id="afw">Android for Work</h2>
+<p>
+ Android N содержит изменения для приложений, предназначенных для Android for Work, включая изменения установки сертификата,
+сброса пароля, управления вторичным пользователем,
+и доступа к идентификаторам устройства. Если вы создаете приложение для среды
+Android for Work, вам следует ознакомиться с этими изменениями и откорректировать
+приложение соответствующим образом.
+</p>
+
+<ul>
+ <li>Вы должны установить делегированный установщик сертификатов, прежде чем DPC сможет его настроить.
+ Для приложений владельца профиля и устройства, разработанных под N SDK, необходимо установить
+ делегированный установщик сертификатов, прежде чем контроллер политик устройства
+(DPC) вызовет метод
+<code>DevicePolicyManager.setCertInstallerPackage()</code>. В случае отсутствия установщика
+система выдаст ошибку
+<code>IllegalArgumentException</code>.
+ </li>
+
+ <li>Ограничения сброса пароля для администраторов устройства теперь применяются для владельцев
+профиля. Администраторы устройства более не могут использовать
+<code>DevicePolicyManager.resetPassword()</code> для сброса или изменения
+установленных паролей. Администраторы по-прежнему могут установить пароль, но только тогда, когда для устройства не установлен
+пароль, PIN-код или графический шаблон.
+ </li>
+
+ <li>Владельцы устройства и профиля могут управлять учетными записями даже при наличии ограничений.
+Они могут вызывать API-интерфейсы управления учетными записями
+даже при установленных ограничениях пользователя <code>DISALLOW_MODIFY_ACCOUNTS</code>.
+ </li>
+
+ <li>Владельцам устройства стало проще управлять дополнительными пользователями. Когда устройство
+находится в режиме владельца устройства, автоматически включается ограничение <code>DISALLOW_ADD_USER</code>.
+Это предотвращает создание неуправляемых дополнительных пользователей.
+Кроме того, прекращено использование методов <code>CreateUser()</code> и
+<code>createAndInitial()</code>, которые заменены новым методом
+<code>DevicePolicyManager.createAndManageUser()</code>.
+ </li>
+
+ <li>Владельцы устройства получили доступ к идентификаторам устройства. Владелец устройства может получить MAC-адрес
+Wi-Fi для устройства, используя метод
+<code>DevicePolicyManagewr.getWifiMacAddress()</code>. Если интерфейс Wi-Fi никогда не включался
+на устройстве, этот метод возвращает значение {@code null}.
+ </li>
+</ul>
+
+<p>
+ Дополнительная информация об изменениях Android for Work в Android N содержится в документе
+<a href="{@docRoot}preview/features/afw.html">Обновления Android for Work</a>.
+</p>
+
+<h2 id="other">Другие важные моменты</h2>
+
+<ul>
+<li>Процесс приложения, запущенного под Android N, но разработанного для API более низкого уровня,
+завершается, если пользователь изменяет размер экрана. Приложение
+должно корректно обработать такой сценарий. В противном случае оно завершится с ошибкой, если пользователь
+запустит его с экрана последних задач.
+
+<p>
+Вы должны протестировать свое приложение и убедиться,
+что оно не будет работать подобным образом.
+Для этого можно вызвать аналогичную ошибку,
+принудительно завершив процесс приложения через DDMS.
+</p>
+
+<p>
+Приложения для N и последующих версий Android не завершаются автоматически при изменении плотности экрана,
+однако они могут плохо реагировать на изменения конфигурации.
+</p>
+</li>
+
+<li>
+Приложения для Android N должны уметь корректно обрабатывать изменения конфигурации
+и не должны завершаться с ошибкой при последующих запусках. Вы можете проверить поведение приложения,
+изменив размер шрифта (<strong>Setting</strong> >
+<strong>Display</strong> > <strong>Font size</strong>) и перезапустив затем приложение
+с экрана последних задач.
+</li>
+</ul>
+
diff --git a/docs/html-intl/intl/ru/about/versions/nougat/android-7.0-samples.jd b/docs/html-intl/intl/ru/about/versions/nougat/android-7.0-samples.jd
new file mode 100644
index 0000000..d1dcdb7
--- /dev/null
+++ b/docs/html-intl/intl/ru/about/versions/nougat/android-7.0-samples.jd
@@ -0,0 +1,85 @@
+page.title=Примеры
+page.tags="preview", "samples", "android"
+page.image=images/cards/card-n-samples_2x.png
+@jd:body
+
+<p>
+ Следующие примеры кода представлены для Android N. Чтобы
+загрузить примеры в Android Studio, выберите в меню <b>File > Import
+Samples</b>.
+</p>
+
+<p class="note">
+ <strong>Примечание.</strong> Эти загружаемые проекты предназначены для
+использования с Gradle и Android Studio.
+</p>
+
+
+<h3 id="mw">Многооконный режим</h3>
+<img src="{@docRoot}images/android-7.0/sample-multiwindow.png" style="float: left; padding-right: 0.5em" height="250" width="156" />
+<p>
+ В данном примере показаны преимущества многооконного
+интерфейса для вашего приложения.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-MultiWindowPlayground">
+Загрузить с сайта GitHub</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="an">Активные уведомления</h3>
+<img src="{@docRoot}images/android-7.0/sample-activenotifications.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ В этом ранее созданном примере показана простая служба, которая отправляет
+уведомления с помощью NotificationCompat. Каждое непрочитанное сообщение от пользователя
+отправляется отдельным уведомлением.
+</p>
+<p>
+ Этот пример был обновлен с использованием новых функций уведомлений,
+доступных в Android N.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-ActiveNotifications">
+Загрузить с сайта GitHub</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="ms">Служба сообщений</h3>
+<img src="{@docRoot}images/android-7.0/sample-messagingservice.png" style="float: left; padding-right: 0.5em" height="250" width="150" />
+<p>
+ В этом предварительно созданном примере показано, как использовать
+NotificationManager для определения количества уведомлений,
+отображаемого приложением.
+</p>
+<p>
+ Этот пример был обновлен с использованием новых функций уведомлений,
+доступных в Android N.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-MessagingService">
+Загрузить с сайта GitHub</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="fbe">Режим Direct Boot</h3>
+<img src="{@docRoot}images/android-7.0/sample-directboot.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ В данном примере показано как сохранять и считывать данные в зашифрованном
+хранилище, которое всегда доступно только на загруженном устройстве.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-DirectBoot">
+Загрузить с сайта GitHub</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="sda">Доступ к выделенным каталогам</h3>
+<img src="{@docRoot}images/android-7.0/sample-scopeddirectoryaccess.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ В данном примере показано, как выполнять чтение и запись данных из определенных
+каталогов при уменьшении числа требуемых разрешений.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-ScopedDirectoryAccess">
+Загрузить с сайта GitHub</a>
+</p>
diff --git a/docs/html-intl/intl/ru/about/versions/nougat/android-7.0.jd b/docs/html-intl/intl/ru/about/versions/nougat/android-7.0.jd
new file mode 100644
index 0000000..24a93a8
--- /dev/null
+++ b/docs/html-intl/intl/ru/about/versions/nougat/android-7.0.jd
@@ -0,0 +1,676 @@
+page.title=Android N для разработчиков
+meta.tags="предварительная версия", "androidn"
+page.tags="preview", "developer preview"
+page.image=images/cards/card-n-apis_2x.png
+@jd:body
+
+
+
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>Основные возможности для разработчиков</h2>
+ <ol>
+ <ul style="list-style-type:none;">
+ <li><a href="#multi-window_support">Поддержка многооконного режима</a></li>
+ <li><a href="#notification_enhancements">Уведомления</a></li>
+ <li><a href="#jit_aot">Динамическая/предварительная компиляция</a></li>
+ <li><a href="#quick_path_to_app_install">Быстрый способ установки приложения</a></li>
+ <li><a href="#doze_on_the_go">Сон на ходу: режим Doze</a></li>
+ <li><a href="#background_optimizations">Оптимизация фоновых процессов</a></li>
+ <li><a href="#data_saver">Экономия трафика</a></li>
+ <li><a href="#tile_api">API панели быстрых настроек</a></li>
+ <li><a href="#number-blocking">Блокировка номеров</a></li>
+ <li><a href="#call_screening">Фильтрация вызовов</a></li>
+ <li><a href="#multi-locale_languages">Языки и языковые настройки</a></li>
+ <li><a href="#icu4">API-интерфейсы ICU4J в Android</a></li>
+ <li><a href="#gles_32">API OpenGL ES 3.2</a></li>
+ <li><a href="#android_tv_recording">Запись Android TV</a></li>
+ <li><a href="#android_for_work">Android for Work</a></li>
+ <li><a href="#accessibility_enhancements">Специальные возможности</a></li>
+ <li><a href="#direct_boot">Режим Direct Boot</a></li>
+ <li><a href="#key_attestation">Аттестация ключей</a></li>
+ <li><a href="#network_security_config">Конфигурация сетевой безопасности</a></li>
+ <li><a href="#default_trusted_ca">Доверенный центр сертификации по умолчанию</a></li>
+ <li><a href="apk_signature_v2">Схема получения подписи APK, версия 2</a></li>
+ <li><a href="#scoped_directory_access">Доступ к выделенным каталогам</a></li>
+ </ol>
+</div>
+</div>
+
+
+
+<p>Система Android N еще находится в активной стадии разработки, но ее уже можно опробовать в виде предварительной версии
+N Developer Preview. В следующих разделах рассматриваются некоторые из
+ ее новых возможностей для разработчиков. </p>
+
+<p>
+ Обязательно изучите раздел <a href="{@docRoot}preview/behavior-changes.html">Изменения в работе</a>, в котором описаны
+изменения платформы, способные повлиять на работу приложений, ознакомьтесь более подробно с основными возможностями
+в руководствах для разработчиков и загрузите <a href="{@docRoot}preview/setup-sdk.html#docs-dl">справочник по API</a> с подробным описанием новых
+API-интерфейсов.
+</p>
+
+<h2 id="multi-window_support">Поддержка многооконного режима</h2>
+
+
+<p>В Android N представлена новая долгожданная функция многозадачности
+– многооконный режим. </p>
+
+ <p>Теперь пользователи смогут открывать на экране два приложения одновременно. </p>
+ <ul>
+ <li>На телефонах и планшетах под управлением
+Android N пользователи могут запустить два приложения рядом или друг над другом
+в режиме разделенного экрана. Размеры окон приложений можно изменить с помощью
+разделителя между ними. </li>
+
+<li>На устройствах Android TV для приложений будет доступен <a href="{@docRoot}preview/features/picture-in-picture.html">режим
+"картинка в картинке"</a>, который позволит приложению отображать контент, пока пользователь просматривает другие приложения или
+взаимодействует с ними. Более подробная информация приведена ниже. </li>
+ </ul>
+
+<div class="col-4of10">
+<img src="{@docRoot}images/android-7.0/mw-portrait.png" alt="" style="height:460px;padding-left:1em;" id="img-split-screen" />
+<p class="img-caption">
+ <strong>Рис. 1.</strong> Приложения в режиме разделенного экрана.
+</p>
+ </div>
+
+<p>Поддержка многооконного режима открывает новые возможности привлечения пользователей,
+особенно на планшетах и других устройствах с большим размером экрана. Вы можете даже включить в своем приложении функцию перетаскивания
+для удобного перемещения контента между приложениями – отличный
+способ улучшить пользовательский интерфейс. </p>
+
+<p>Вы можете легко добавить поддержку многооконного режима в свое приложение и настроить его
+работу с окнами экрана. Например, вы можете определить минимальные допустимые размеры,
+до которых пользователи могут уменьшить окно приложения.
+Вы можете также отключить многооконный режим для своего приложения, чтобы
+система отображала его только в полноэкранном режиме.</p>
+
+<p>
+ Дополнительная информация содержится в документе для разработчиков <a href="{@docRoot}preview/features/multi-window.html">Поддержка многооконного режима</a>.
+
+</p>
+
+<h2 id="notification_enhancements">Новые возможности уведомлений</h2>
+
+<p>В Android N изменен дизайн уведомлений, которые стали проще и удобнее.
+Ниже приведены некоторые изменения.</p>
+
+<ul>
+ <li>
+ <strong>Обновления шаблонов</strong>. В новых шаблонах уведомлений
+сделан акцент на изображении и аватаре контакта. Разработчики смогут
+использовать новые шаблоны с минимальными изменениями своего кода.
+ </li>
+
+ <li>
+ <strong>Группы уведомлений</strong>. Система может группировать уведомления,
+например по теме сообщений, и отображать группу. Пользователь может применять к группам
+действия, например, закрывать их или архивировать. Если вы ранее выполняли реализацию
+уведомлений для Android Wear, то вам уже должна быть знакома эта
+модель.
+ </li>
+
+ <li>
+ <strong>Непосредственный ответ в уведомлении</strong>.
+Android теперь поддерживает функцию внутренних ответов в приложениях для общения в режиме реального времени. Это позволяет быстро ответить на
+СМС или текстовое сообщение непосредственно в интерфейсе уведомления.
+ </li>
+
+ <li>
+ <strong>Собственные представления</strong>. Два новых API-интерфейса позволяют применять системные элементы,
+такие как заголовки и действия уведомлений, при использовании собственных представлений в
+уведомлениях.
+ </li>
+</ul>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-1.png" alt="" style="padding:.5em;max-width:226px">
+</div>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-3.png" alt="" style="padding:.5em;max-width:226px">
+</div>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-2.png" alt="" style="padding:.5em;max-width:226px">
+</div>
+
+
+<p class="img-caption">
+ <strong>Рис. 2.</strong> Группы уведомлений и непосредственный ответ.
+</p>
+
+<p>Способы реализации новых возможностей описаны в руководстве
+<a href="{@docRoot}preview/features/notification-updates.html">Уведомления</a>.
+</p>
+
+
+
+<h2 id="jit_aot">Профильная динамическая/предварительная компиляция</h2>
+
+<p>В Android N добавлен динамический (JIT) компилятор с профилированием кода для среды
+ART, который позволяет постоянно улучшать производительность приложений Android во время их работы.
+JIT-компилятор дополняет текущий предварительный (AOT) компилятор ART
+и помогает повысить производительность, сократить потребление памяти, а также ускорить обновления приложений и системы.
+</p>
+
+<p>Профильная компиляция позволяет ART управлять AOT/JIT-компиляцией каждого приложения
+в соответствии с его фактическим использованием и характеристиками устройства. Например,
+ART ведет профиль часто используемых методов каждого приложения, которые она может предварительно скомпилировать
+и кэшировать для оптимальной производительности. Компиляция остальных частей приложения откладывается до того момента,
+когда они действительно понадобятся.</p>
+
+<p>Кроме повышения производительности основных частей приложения профильная
+компиляция помогает сократить общее использование оперативной памяти приложением, в том числе связанными двоичными файлами.
+Эта возможность особенно важна для устройств с небольшим объемом памяти.</p>
+
+<p>ART управляет профильной компиляцией с минимальным потреблением заряда
+аккумулятора. Предварительная компиляция выполняется только тогда, когда устройство неактивно
+и находится на зарядке, поэтому заблаговременное выполнение этой работы экономит время и энергию.</p>
+
+<h2 id="quick_path_to_app_install">Быстрый способ установки приложения</h2>
+
+<p>Одним из наиболее ощутимых преимуществ JIT-компилятора ART является скорость установки приложений
+и обновлений системы. Даже большие приложения, требовавшие нескольких минут для своей оптимизации и установки на
+Android 6.0 , теперь могут быть установлены за секунды.
+ Обновления системы также выполняются быстрее, поскольку стадия оптимизации теперь отсутствует. </p>
+
+<h2 id="doze_on_the_go">Сон на ходу: режим Doze</h2>
+
+<p>В Android 6.0 был введен системный режим Doze для экономии заряда аккумулятора. В этом режиме
+выполнение процессорных и сетевых операций приложений откладывается, когда устройство не используется и неподвижно – например, лежит на столе или в ящике.
+ </p>
+
+<p>В Android N режим Doze сделал шаг вперед и экономит заряд аккумулятора на ходу.
+Каждый раз, когда экран выключается на определенный промежуток времени и устройство не заряжается,
+Doze применяет частичный набор знакомых ограничений процессорной и сетевой активности приложений.
+Это означает, что пользователи могут экономить заряд аккумулятора, даже когда их устройство лежит в кармане.
+</p>
+
+
+<img src="/preview/images/doze-diagram-1.png" alt="" id="figure1" />
+<p class="img-caption">
+ <strong>Рис. 3.</strong> Режим Doze теперь применяет
+энергосберегающие ограничения, даже когда устройство находится в движении.
+</p>
+
+
+<p>Вскоре после блокировки экрана, когда устройство питается от аккумулятора, режим Doze
+ограничивает сетевой доступ и откладывает выполнение заданий и синхронизации. В течение коротких периодов пробуждения
+для приложений открывается доступ к сети и разрешается выполнение отложенных
+заданий и операций синхронизации. Включение экрана или подключение к источнику питания выводит
+устройство из режима Doze.</p>
+
+<p>Если устройство снова остается неподвижным в течение определенного периода времени (с погашенным экраном и питанием от аккумулятора),
+Doze применяет полный набор процессорных и сетевых ограничений к {@link
+android.os.PowerManager.WakeLock}, {@link android.app.AlarmManager} оповещениям и сканированию
+GPS/Wi-Fi.</p>
+
+<p>Рекомендации по адаптации приложения для режима Doze не зависят от того, двигается устройство или нет,
+поэтому если вы уже обновили свое приложение для оптимальной работы
+в режиме Doze, то все уже готово. Если нет, начните <a href="{@docRoot}training/monitoring-device-state/doze-standby.html#assessing_your_app">адаптацию
+приложения для режима Doze</a> прямо сейчас.</p>
+
+<h2 id="background_optimizations">Проект Svelte: оптимизация фоновых процессов</h2>
+
+<p>Продолжено развитие проекта Svelte, нацеленного на сокращение использования оперативной памяти системой и приложениями
+в различных устройствах экосистемы Android. В Android N проект
+Svelte уделяет особое внимание оптимизации работы приложений в фоновом режиме. </p>
+
+<p>Работа в фоновом режиме является важной частью большинства приложений. Организация ее надлежащим образом
+может сделать интерфейс пользователя быстрым, отзывчивым и контекстно-зависимым.
+В противном случае фоновая обработка может напрасно потреблять оперативную память (и
+заряд аккумулятора) и негативно влиять на производительность других приложений. </p>
+
+<p>Начиная с Android 5.0, предпочтительным и оптимальным для пользователей способом выполнения фоновых операций стало использование планировщика {@link android.app.job.JobScheduler}.
+Приложения могут планировать свои задания, позволяя системе оптимизировать их на основе состояния памяти,
+питания и сетевого соединения. Планировщик JobScheduler прост в использовании и обеспечивает необходимый контроль,
+поэтому он рекомендуется для применения во всех приложениях.
+ </p>
+
+<p>
+ Другим хорошим вариантом является планировщик <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
+<code>GCMNetworkManager</code></a> в составе служб Google Play, который
+предлагает аналогичные возможности планирования заданий и совместимость с прежними версиями
+Android.
+</p>
+
+<p>Мы продолжаем расширять область применения планировщиков <code>JobScheduler</code> и
+<code>GCMNetworkManager</code>.
+Например, в Android N теперь можно планировать фоновую обработку на основании
+изменений поставщиков контента. В то же время мы начинаем исключать некоторые
+устаревшие шаблоны, которые могут ухудшить производительность системы,
+особенно на устройствах с малым объемом памяти.</p>
+
+<p>В Android N удалены три часто используемые неявные рассылки —
+ {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, {@link
+android.hardware.Camera#ACTION_NEW_PICTURE} и {@link
+android.hardware.Camera#ACTION_NEW_VIDEO}, — поскольку они могут пробудить
+фоновые процессы сразу нескольких приложений, повысив потребление памяти и заряда аккумулятора. Если
+ваше приложение получает эти рассылки, используйте преимущество N Developer Preview для миграции на
+<code>JobScheduler</code> и связанные с ним API-интерфейсы. </p>
+
+<p>
+ Дополнительная информация содержится в документе <a href="{@docRoot}preview/features/background-optimization.html">Оптимизация
+фоновых процессов</a>.
+</p>
+
+
+<h2 id="data_saver">Экономия трафика</h2>
+
+<div class="col-5of12" style="margin-right:1.5em;">
+<img src="{@docRoot}images/android-7.0/datasaver.png" style="border:2px solid #ddd">
+
+<p class="img-caption" style="padding-right:2em;">
+ <strong>Рис. 4.</strong> Настройка экономии трафика.
+</p>
+ </div>
+
+<p>В течение срока эксплуатации мобильного устройства стоимость сотового трафика обычно
+превышает стоимость самого устройства. Для многих пользователей сотовый трафик является
+весьма дорогим ресурсом, который они хотели бы сэкономить. </p>
+
+<p>В Android N появился режим экономии трафика – новая системная служба, которая помогает сократить
+использование сотового трафика приложениями в роуминге, в конце периода тарификации
+или для небольших предоплаченных пакетов трафика. Режим экономии трафика дает пользователям возможность контроля использования сотового трафика приложениями
+и позволяет разработчикам повысить эффективность работы служб.
+ </p>
+
+<p>Когда пользователь включает экономию трафика в панели <strong>Settings</strong> и устройство подключено к тарифицируемой сети,
+ система блокирует использование фонового трафика и сигнализирует приложениям
+о необходимости сократить по возможности использование трафика в активном режиме, например: ограничить скорость передачи данных
+потокового вещания, уменьшить качество изображений, отложить оптимистичное предварительное кэширование
+и т.д. Пользователи могут поместить определенные приложения в белый список, разрешив им тарифицируемую фоновую передачу данных
+даже при включенном режиме экономии трафика.</p>
+
+<p>Android N расширяет применение класса {@link android.net.ConnectivityManager}, позволяя приложениям
+<a href="{@docRoot}preview/features/data-saver.html#status">выяснять пользовательские настройки
+экономии трафика</a> и <a href="{@docRoot}preview/features/data-saver.html#monitor-changes">отслеживать
+изменения этих настроек</a>. Все приложения должны проверять, был ли включен режим экономии трафика,
+и пытаться ограничить использование трафика в фоновом и активном режимах.</p>
+
+
+<h2 id="tile_api">API панели быстрых настроек</h2>
+
+
+<div style="float:right;max-width:320px">
+<img src="{@docRoot}images/android-7.0/quicksettings.png" style="padding-left:1.5em;">
+
+<p class="img-caption" style="padding-left:2em;">
+ <strong>Рис. 5.</strong> Плитки быстрых настроек в панели уведомлений.
+</p>
+
+
+ </div><p>Быстрые настройки являются простым и популярным способом доступа к основным настройкам и действиям
+непосредственно из панели уведомлений. В Android N возможности быстрых настроек
+были расширены – они стали еще более полезными и удобными. </p>
+
+<p>Добавлено пространство для дополнительных плиток быстрых настроек, к которым можно
+обратиться с разбитой на страницы области экрана, проведя пальцем влево или вправо. Пользователи
+также могут контролировать состав и место отображения этих элементов – их можно добавлять или двигать обычным перетаскиванием.
+ </p>
+
+<p>Для разработчиков Android N также предлагает новый API, который позволяет определить собственные плитки
+быстрых настроек для удобного доступа пользователей к основным элементам управления и действиям вашего приложения.</p>
+
+<p>
+ Плитки быстрых настроек резервируются для элементов управления или действий, которые либо требуются срочно,
+ либо часто используются. Их не следует использовать в качестве ярлыков
+для запуска приложений.
+</p>
+
+<p>
+ После определения плитки можно показать пользователям, которые смогут добавить их на
+панель быстрых настроек обычным перетаскиванием.
+</p>
+
+<p>
+ Дополнительную информацию о создании плиток приложений можно найти в описании
+<code>android.service.quicksettings.Tile</code> в загружаемом <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Справочнике по API</a>.
+</p>
+
+
+
+<h2 id="number-blocking">Блокировка номеров</h2>
+
+<p>Платформа Android N теперь поддерживает блокировку номеров и предоставляет
+API-интерфейс платформы, который позволяет поставщикам услуг вести список блокируемых номеров. Этот список доступен для чтения и записи стандартным приложениям
+для СМС, звонков и приложениям поставщика.
+Для других приложений это список недоступен.</p>
+
+<p>Сделав блокировку номеров стандартной функцией платформы, Android предоставляет приложениям
+единообразный способ поддержки блокировки номеров на разных устройствах.
+Приложения также получают следующие преимущества:</p>
+
+<ul>
+ <li> Номера, блокируемые при вызовах, также блокируются в текстовых сообщениях.
+ <li> Заблокированные номера могут быть сохранены при переустановках и переносах на другие устройства с помощью функции резервного копирования и восстановления.
+
+ <li> Разные приложения могут использовать один и тот же список блокируемых номеров.
+</ul>
+
+<p>Кроме того, возможность интеграции приложения оператора мобильной сети в Android означает, что операторы могут
+читать список блокируемых номеров на устройстве и выполнять блокировку для пользователя на своей стороне,
+предотвращая доставку пользователю нежелательных вызовов и текстовых сообщений через какого-либо посредника,
+например, через конечную точку VOIP или переадресацию звонков.</p>
+
+<p>
+ Дополнительную информацию можно найти в описании <code>android.provider.BlockedNumberContract</code>
+в загружаемом <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Справочнике по API</a>.
+
+</p>
+
+<h2 id="call_screening">Фильтрация вызовов</h2>
+
+<p>
+ Android N дает возможность стандартному приложению для звонков фильтровать входящие вызовы. Для этого
+в приложении для звонков реализована новая служба <code>CallScreeningService</code>,
+которая позволяет приложению выполнять ряд действий на основании
+{@link android.telecom.Call.Details Call.Details} входящего вызова, например:
+</p>
+
+<ul>
+ <li> отклонить входящий вызов;
+ <li> не регистрировать вызов в журнале вызовов;
+ <li> не показывать пользователю уведомление о вызове.
+</ul>
+
+<p>
+ Дополнительную информацию можно найти в описании <code>android.telecom.CallScreeningService</code>
+в загружаемом <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Справочнике по API</a>.
+
+</p>
+
+
+<h2 id="multi-locale_languages">Поддержка нескольких языковых настроек, дополнительные языки</h2>
+
+
+<p>Android N теперь позволяет пользователям выбрать <strong>несколько языковых настроек</strong>
+для улучшенной поддержки случаев двуязычного применения. Приложения могут использовать
+новый API для получения выбранных пользователем языковых настроек и затем предоставлять более сложные
+интерфейсы для многоязычных пользователей, например: показывать результаты поиска
+на нескольких языках; не предлагать перевод веб-страниц с того языка, который уже знаком пользователю.
+</p>
+
+<p>Вместе с поддержкой нескольких языковых настроек Android N также расширяет список доступных языков.
+Для каждого распространенного
+языка, такого как английский, испанский, французский и арабский, предлагается более 25 вариантов. Также добавлена частичная
+поддержка более 100 новых языков.</p>
+
+<p>Приложения могут получить список языковых настроек, установленных пользователем, вызвав метод <code>LocaleList.GetDefault()</code>. Для поддержки расширенного количества языковых настроек в Android N изменен способ
+разрешения ресурсов. Вам следует обязательно проверить и убедиться в том,
+что ваши приложения работают надлежащим образом с новой логикой разрешения ресурсов.</p>
+
+<p>Дополнительная информация о новом способе разрешения ресурсов и соответствующие рекомендации содержатся
+в документе <a href="{@docRoot}preview/features/multilingual-support.html">Поддержка нескольких языков</a>.</p>
+
+<h2 id="icu4">API-интерфейсы ICU4J в Android</h2>
+
+<p>
+ Платформа Android N теперь предлагает частичный набор API-интерфейсов <a href="http://site.icu-project.org/">ICU4J</a> в
+пакете <code>android.icu</code>. Миграция выполняется легко и в основном заключается
+в простом изменении пространства имен с <code>com.java.icu</code> на
+<code>android.icu</code>. Если вы уже используете пакет ICU4J в своих приложениях,
+переход на API-интерфейсы <code>android.icu</code>, предоставленные платформой Android,
+может существенно сократить размер пакетов APK.
+</p>
+
+<p>
+ Дополнительные сведения по Android ICU4J API содержатся в документе <a href="{@docRoot}preview/features/icu4j-framework.html">Поддержка ICU4J</a>.
+</p>
+
+
+
+<h2 id="gles_32">API OpenGL™ ES 3.2</h2>
+
+<p>В платформу Android N добавлены интерфейсы и поддержка OpenGL ES 3.2, включая следующие возможности.</p>
+
+<ul>
+ <li> Все расширения из <a class="external-link" href="https://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">Android Extension Pack</a></a> (AEP) кроме <code>EXT_texture_sRGB_decode</code>.
+ <li> Кадровые буферы с плавающей запятой для HDR и отложенного затенения.
+ <li> Вызовы отрисовки BaseVertex для улучшения пакетной обработки и потоковой передачи данных.
+ <li> Эффективный контроль обращений к буферу для сокращения служебных операций WebGL.
+</ul>
+
+<p>API-интерфейс платформы для OpenGL ES 3.2 в Android N предоставляется классом
+<code>GLES32</code>. При использовании OpenGL ES 3.2 обязательно следует объявить требование
+в файле манифеста с помощью тега <code><uses-feature></code> и атрибута
+<code>android:glEsVersion</code>. </p>
+
+<p>Для получения дополнительных сведений об использовании OpenGL ES, включая
+определение версии, поддерживаемой устройством, см. <a href="{@docRoot}guide/topics/graphics/opengl.html">Руководство по API OpenGL ES</a>.</p>
+
+
+<h2 id="android_tv_recording">Запись Android TV</h2>
+
+<p>В Android N добавлена возможность записи и воспроизведения контента из служб Android TV
+через новые API-интерфейсы записи. Службы телевидения на основе существующих API
+с временным сдвигом могут контролировать выбор данных телеканала для записи, сохранение
+сеансов записи и управлять взаимодействием пользователя с записанным контентом. </p>
+
+<p>Дополнительная информация содержится в документе <a href="{@docRoot}preview/features/tv-recording-api.html">API-интерфейсы записи Android TV</a>.</p>
+
+
+<h2 id="android_for_work">Android for Work</h2>
+
+<p>В Android for Work добавлены много новых возможностей и API-интерфейсов для устройств под управлением Android N.
+Некоторые из них приведены ниже. Полный список обновлений Android for Work, касающихся
+Android N, содержится в списке изменений Android for Work.</p>
+
+<h3 id="work_profile_security_challenge">Пароль безопасности для рабочего профиля </h3>
+
+<p>
+ Владельцы профиля могут установить отдельный пароль безопасности для приложений, запускаемых в рабочем профиле.
+Когда пользователь пытается открыть любые рабочие
+приложения, выводится запрос пароля. Успешный ввод пароля снимает блокировку рабочего профиля
+и, при необходимости, дешифрует его. Владельцы профиля
+могут отправить пользователю запрос <code>ACTION_SET_NEW_PASSWORD</code>, предлагающий установить рабочий пароль,
+ или запрос <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code>, предлагающий установить пароль блокировки устройства.
+
+</p>
+
+<p>
+ Владельцы профиля могут устанавливать различные политики паролей для рабочей проверки безопасности
+(например, длину PIN-кода, возможность использования отпечатка пальца
+для разблокировки профиля) с помощью <code>setPasswordQuality()</code>,
+<code>setPasswordMinimumLength()</code> и других связанных методов. Владелец
+профиля может также установить блокировку устройства с помощью экземпляра <code>DevicePolicyManager</code>,
+возвращаемого новым методом <code>getParentProfileInstance()</code>.
+Кроме того, владельцы профиля могут настроить экран учетных данных для рабочей проверки безопасности
+с помощью новых методов <code>setOrganizationColor()</code> и
+<code>setOrganizationName()</code>.
+</p>
+<h3 id="turn_off_work">Выключение рабочего режима </h3>
+
+<p>Пользователи устройства с рабочим профилем могут переключать рабочий режим. Когда рабочий режим
+выключен, управляемый им пользователь временно выходит из системы, что отключает приложения рабочего профиля,
+фоновую синхронизацию и уведомления. Также отключается приложение владельца профиля.
+При выключенном рабочем режиме система отображает постоянный значок состояния,
+напоминая пользователю о том, что он не может запустить рабочие приложения. Средство запуска при этом указывает,
+что рабочие приложения и виджеты недоступны. </p>
+
+<h3 id="always_on_vpn">Постоянное подключение к VPN </h3>
+
+<p>Владельцы устройства и профиля могут обеспечить постоянное подключение рабочих приложений через указанную сеть
+VPN. Система автоматически подключается к этой VPN после загрузки устройства.
+</p>
+
+<p>
+ Для этого в интерфейсе <code>DevicePolicyManager</code> используются новые методы
+<code>setAlwaysOnVpnPackage()</code> и
+<code>getAlwaysOnVpnPackage()</code>.
+</p>
+
+<p>Поскольку привязка служб VPN может быть выполнена непосредственно системой без взаимодействия с приложениями,
+клиентам VPN требуется обрабатывать новые точки доступа для постоянного подключения к VPN. Как и раньше,
+службы для системы указываются фильтром намерений, соответствующим действию
+<code>android.net.VpnService</code>. </p>
+
+<p>
+ Пользователи могут вручную установить клиентов постоянного подключения к VPN, реализующих методы
+<code>VPNService</code>, на экране настроек основного пользователя
+<strong>Settings>More>Vpn</strong>.
+</p>
+
+<h2 id="accessibility_enhancements">Расширение специальных возможностей</h2>
+
+<p>Android N теперь предлагает настройки Vision Settings непосредственно на экране приветствия при начальной установке нового устройства.
+Это значительно упрощает пользователям обнаружение и настройку на своих устройствах
+специальных возможностей, включая жесты увеличения, размер шрифта, размер экрана и
+функцию TalkBack. </p>
+
+<p>Благодаря более приметному расположению этих настроек пользователи
+чаще будут пробовать ваше приложение с включенными специальными возможностями. Обязательно протестируйте ваше приложение с этими настройками,
+включив их на экране Settings >
+Accessibility.</p>
+
+<p>Также в Android N предусмотрены службы специальных возможностей которые помогут пользователям с нарушениями двигательных функций
+касаться экрана. Новый API позволяет встроить в службы такие
+возможности, как отслеживание лица, отслеживание взгляда, сканирование точек и другой функционал, соответствующий потребностям
+этих пользователей.</p>
+
+<p>Дополнительную информацию можно найти в описании <code>android.accessibilityservice.GestureDescription</code>
+ в загружаемом <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Справочнике по API</a>.</p>
+
+
+<h2 id="direct_boot">Режим Direct Boot</h2>
+
+<p>Режим Direct Boot ускоряет загрузку устройства и позволяет зарегистрированным приложениям
+сохранить ограниченную функциональность даже после непредвиденной перезагрузки.
+Например, если зашифрованное устройство перезагрузится, когда пользователь спит,
+уведомления о зарегистрированных предупреждениях, сообщениях и входящих вызовах будут поступать пользователю, как в обычном режиме.
+Это также означает, что специальные возможности могут быть доступны сразу после перезагрузки.
+</p>
+
+<p>Режим Direct Boot использует преимущество шифрования на уровне файлов в Android N
+для применения детализированных политик шифрования к данным системы и приложений.
+Система использует хранилище, зашифрованное на уровне устройства, для выбранных системных данных и данных из явным образом зарегистрированных приложений.
+По умолчанию для всех остальных системных данных, пользовательских данных, приложений и
+данных приложений используется хранилище, зашифрованное на уровне учетной записи. </p>
+
+<p>При загрузке система запускается в ограниченном режиме с доступом к данным, зашифрованным
+на уровне устройства, и без общего доступа к приложениям и данным.
+Если у вас есть компоненты, которые должны быть запущены в этом режиме, их можно зарегистрировать,
+установив соответствующий флаг в манифесте. После перезагрузки система активирует зарегистрированные
+компоненты с помощью рассылки намерения <code>LOCKED_BOOT_COMPLETED</code>.
+ Система обеспечивает доступность зарегистрированных данных приложений, зашифрованных на уровне устройства,
+до разблокировки экрана. Все остальные данные остаются недоступными, пока пользователь не подтвердит свои учетную информацию на экране блокировки,
+после чего данные будут расшифрованы. </p>
+
+Дополнительная информация приведена в документе <a href="{@docRoot}preview/features/direct-boot.html">Direct Boot</a>.</p>
+</p>
+
+
+<h2 id="key_attestation">Аттестация ключей</h2>
+
+<p>Аппаратные хранилища ключей обеспечивают безопасный метод создания, хранения,
+и использования криптографических ключей на устройствах Android. Они защищают ключи от
+ядра Linux, потенциальных уязвимостей Android и извлечения из устройств
+с корневым доступом.</p>
+
+<p>Чтобы упростить и повысить безопасность использования аппаратных хранилищ ключей
+в Android N введена возможность аттестации ключей. Приложения и внешние хранилища ключей могут использовать аттестацию,
+чтобы определить, является ли пара ключей RSA или EC
+аппаратной, какие свойства имеет эта пара ключей и какие ограничения применяются
+к ее использованию и сроку действия. </p>
+
+<p>Приложения и службы внешних хранилищ могут запросить информацию о паре ключей
+через сертификат аттестации X.509, который должен быть подписан действительным ключом
+аттестации. Ключ аттестации представляет собой ключ подписи ECDSA, который
+встраивается в аппаратное хранилище ключей устройства при его изготовлении на заводе.
+Поэтому сертификат аттестации, подписанный действительным ключом аттестации,
+подтверждает существование аппаратного хранилища ключей вместе со сведениями о парах ключей в таком хранилище.
+</p>
+
+<p>Чтобы убедиться в том, что устройство использует безопасный официальный заводской образ Android,
+для аттестации ключей требуется предоставление <a class="external-link" href="https://source.android.com/security/verifiedboot/verified-boot.html#bootloader_requirements">загрузчиком</a> устройства
+следующей информации о <a class="external-link" href="https://source.android.com/security/trusty/index.html">доверенной
+среде выполнения (TEE)</a>:</p>
+
+<ul>
+<li>версия ОС и исправлений, установленных на устройстве;</li>
+<li>открытый ключ <a href="https://source.android.com/security/verifiedboot/index.html" class="external-link">подтвержденной загрузки</a> и состояние блокировки.</li>
+ </ul>
+
+<p>Дополнительная информация об аппаратном хранилище ключей содержится
+в соответствующем <a href="https://source.android.com/security/keystore/" class="external-link">руководстве</a>.</p>
+
+<p>В дополнение к аттестации ключей в Android N также добавлены ключи,
+привязанные к отпечаткам пальцев, которые не отменяются при регистрации новых отпечатков.</p>
+
+<h2 id="network_security_config">Конфигурация сетевой безопасности</h2>
+
+<p>В Android N приложения могут безопасно настраивать поведение своих защищенных (HTTPS, TLS)
+подключений, без каких-либо изменений кода, используя декларативную
+<em>конфигурацию сетевой безопасности</em> вместо обычных ненадежных
+программных API-интерфейсов (например, X509TrustManager).</p>
+
+ <p>Поддерживаемые возможности:</p>
+<ul>
+<li><b>Пользовательские якоря доверия.</b> Позволяют приложению определить доверенные
+центры сертификации (ЦС) для его защищенных соединений. Например,
+приложение может доверять определенным самозаверенным сертификатам или ограниченному набору общих ЦС.
+</li>
+<li><b>Замена при отладке.</b> Позволяет разработчику безопасно отладить
+защищенные соединения своего приложения без дополнительного риска для установленной базы.
+
+</li>
+<li><b>Отказ от передачи данных открытым текстом.</b> Позволяет приложению защитить себя от
+случайной передачи данных открытым текстом.</li>
+<li><b>Прикрепление сертификатов.</b> Дополнительная возможность, позволяющая приложению
+ограничить доверенные ключи сервера для защищенных соединений.</li>
+</ul>
+
+<p>Дополнительная информация содержится в документе <a href="{@docRoot}preview/features/security-config.html">Конфигурация сетевой безопасности</a>.
+</p>
+
+<h2 id="default_trusted_ca">Доверенный центр сертификации по умолчанию</h2>
+
+<p>По умолчанию приложения для Android N могут доверять только системным сертификатам
+и не доверяют ЦС, добавленным пользователем. Если приложению для Android N
+требуется доверять пользовательским ЦС, ему следует указать в
+<a href="{@docRoot}preview/features/security-config.html">конфигурации сетевой безопасности</a> эти доверенные пользовательские ЦС.
+</p>
+
+<h2 id="apk_signature_v2">Схема получения подписи APK, версия 2</h2>
+
+<p>Класс PackageManager теперь поддерживает подтверждение приложений с использованием схемы подписи APK
+версии 2. Вторая версия схемы подписи APK применяется ко всему файлу,
+что существенно ускоряет подтверждение и повышает надежность, позволяя обнаруживать любые несанкционированные изменения файлов APK.
+</p>
+
+<p>Для поддержки обратной совместимости пакет APK должен быть подписан с помощью первой версии схемы
+(схема подписи JAR) до того, как он будет подписан по схеме версии 2.
+Подпись по схеме версии 2 не пройдет подтверждение, если APK будет подписан дополнительным сертификатом
+после добавления подписи по схеме версии 2. </p>
+
+<p>Поддержка подписи APK по схеме версии 2 будет доступна в последующих выпусках N Developer
+Preview.</p>
+
+<h2 id="scoped_directory_access">Доступ к выделенным каталогам</h2>
+
+<p>В Android N приложения могут использовать новые API-интерфейсы для запроса доступа к конкретным каталогам <a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">внешнего хранилища</a>,
+включая каталоги на съемных носителях, таких как SD-карты.
+Новые API-интерфейсы значительно упрощают доступ к стандартным каталогам
+внешнего хранилища, таким как <code>Pictures</code>. Например, приложения, работающие с фотографиями,
+могут использовать эти API-интерфейсы вместо
+<code>READ_EXTERNAL_STORAGE</code>, который разрешает доступ ко всем каталогам
+хранилища или платформы Storage Access Framework, благодаря чему выполняется переход к указанному каталогу.
+</p>
+
+<p>Кроме того, новые API-интерфейсы упрощают процедуру предоставления доступа к внешнему хранилищу для приложения.
+Если вы применяете новые API, система использует простой интерфейс разрешений,
+в котором четко указаны каталоги, к которым приложение запрашивает доступ.
+</p>
+
+<p>Дополнительная информация содержится в документации для разработчиков
+<a href="{@docRoot}preview/features/scoped-folder-access.html">Доступ к выделенным каталогам</a>.
+</p>
+
+
+
+
+
+
diff --git a/docs/html-intl/intl/ru/about/versions/nougat/index.jd b/docs/html-intl/intl/ru/about/versions/nougat/index.jd
new file mode 100644
index 0000000..0365061
--- /dev/null
+++ b/docs/html-intl/intl/ru/about/versions/nougat/index.jd
@@ -0,0 +1,110 @@
+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
+
+<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-8of16" style="padding-left:2em">
+ <h1 class="dac-hero-title">Android 7.0 Nougat</h1>
+ <p class="dac-hero-description">
+ Подготовьтесь к выходу Android Nougat!
+<strong>Протестируйте свои приложения</strong> на Nexus и других устройствах. Поддержите нововведения
+системы, позволяющие <strong>снизить потребление энергии и памяти</strong>.
+Добавьте в свои приложения <strong>многооконный режим</strong>,
+<strong>возможность прямой отправки ответов из уведомлений</strong> и другие функции.
+ </p>
+
+ <a class="dac-hero-cta" href="{@docRoot}about/versions/nougat/android-7.0.html">
+ <span class="dac-sprite dac-auto-chevron"></span>
+ Начало работы
+ </a>
+ </div>
+ <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></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>
+</section>
+
+<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://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/dev-community">
+ <i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
+ Вступить в сообщество разработчиков
+ </a>
+ </li>
+ </ul>
+ </div><!-- end .wrap -->
+</div><!-- end .dac-actions -->
+
+<section class="dac-section dac-light dac-small" id="latest"><div class="wrap">
+ <h2 class="norule">Latest</h2>
+ <div class="resource-widget resource-flow-layout col-16"
+ data-query="type:blog+tag:androidn+tag:featured, type:youtube+tag:androidn+tag:featured"
+ data-sortOrder="-timestamp"
+ data-cardSizes="6x6"
+ data-items-per-page="6"
+ data-maxResults="15"
+ data-initial-results="3"></div>
+</div></section>
+
+<section class="dac-section dac-gray" id="videos"><div class="wrap">
+ <h1 class="dac-section-title">Videos</h1>
+ <div class="dac-section-subtitle">
+ 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: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>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ru/preview/j8-jack.jd b/docs/html-intl/intl/ru/guide/platform/j8-jack.jd
similarity index 100%
rename from docs/html-intl/intl/ru/preview/j8-jack.jd
rename to docs/html-intl/intl/ru/guide/platform/j8-jack.jd
diff --git a/docs/html-intl/intl/ru/guide/topics/ui/multi-window.jd b/docs/html-intl/intl/ru/guide/topics/ui/multi-window.jd
new file mode 100644
index 0000000..3583616
--- /dev/null
+++ b/docs/html-intl/intl/ru/guide/topics/ui/multi-window.jd
@@ -0,0 +1,582 @@
+page.title=Поддержка многооконного режима
+page.metaDescription=Новые возможности в Android N для одновременного отображения нескольких приложений.
+page.keywords="multi-window", "android N", "split screen", "free-form"
+
+@jd:body
+
+<div id="tb-wrapper">
+ <div id="tb">
+ <h2>Содержание документа</h2>
+ <ol>
+ <li><a href="#overview">Обзор</a></li>
+ <li><a href="#lifecycle">Жизненный цикл многооконного режима</a></li>
+ <li><a href="#configuring">Настройка приложения для многооконного
+ режима</a></li>
+ <li><a href="#running">Запуск приложения в многооконном режиме</a></li>
+ <li><a href="#testing">Тестирование приложения в многооконном режиме</a></li>
+ </ol>
+ <h2>См. также:</h2>
+ <ol>
+ <li><a class="external-link" href="https://github.com/googlesamples/android-MultiWindowPlayground">Пример
+ многооконного демонстрационного приложения</a></li>
+ </ol>
+ </div>
+</div>
+
+<p>
+ В Android N добавлена поддержка отображения нескольких приложений
+ одновременно. На мобильных устройствах два приложения могут быть запущены рядом
+ или друг над другом в режиме <em>разделения экрана</em>. На телевизорах приложения могут
+ использовать режим <em>"картинка в картинке"</em>, чтобы воспроизводить видео,
+ пока пользователи работают с другим приложением.
+</p>
+
+<p>
+ Если вы создаете приложение с использованием N Preview SDK, вы можете указать, как оно
+ будет действовать в многооконном режиме. Например, можно задать минимальные
+ допустимые размеры окна приложения. Также можно отключить многооконный режим для приложения,
+ чтобы оно отображалось только в полноэкранном
+ режиме.
+</p>
+
+<h2 id="overview">Обзор</h2>
+
+<p>
+ В Android N несколько приложений могут одновременно находиться на экране. Например,
+ пользователь может разделить экран, чтобы просматривать веб-страницу
+ слева и писать сообщение электронной почты справа. Возможности пользователя зависят от
+ устройства.
+</p>
+
+<ul>
+ <li>На мобильных устройствах с Android N доступен режим
+ разделения экрана. В этом режиме два приложения отображаются рядом
+ или друг над другом. Пользователь может перетащить
+ линию разделения, чтобы увеличить окно одного приложения и уменьшить окно другого.
+ </li>
+
+ <li>На устройствах Nexus Player с Android N для приложений
+ будет доступен <a href="picture-in-picture.html">режим "картинка в картинке"</a>, который
+ позволит приложению отображать контент, пока пользователь просматривает
+ другие приложения или взаимодействует с ними.
+ </li>
+
+ <li>Производители более крупных устройств могут активировать
+ режим произвольной формы, где пользователь может любым образом изменять размер каждого окна. В этом случае
+ помимо режима разделения экрана
+ на устройстве будет доступен и этот режим.
+ </li>
+</ul>
+
+<img src="{@docRoot}images/android-7.0/mw-splitscreen.png" alt="" width="650" srcset="{@docRoot}images/android-7.0/mw-splitscreen.png 1x,
+ {@docRoot}images/android-7.0/mw-splitscreen_2x.png 2x," id="img-split-screen" />
+<p class="img-caption">
+ <strong>Рис. 1.</strong> Два приложения отображаются рядом в режиме разделения экрана.
+</p>
+
+<p>
+ Пользователь может перейти в многооконный режим следующими способами.
+</p>
+
+<ul>
+ <li>Если пользователь откроет <a href="{@docRoot}guide/components/recents.html">экран
+ обзора</a> и длительно нажмет
+ название операции, ее можно будет перетащить в выделенную часть
+ экрана и переключить в многооконный режим.
+ </li>
+
+ <li>Если пользователь длительно нажмет кнопку "Обзор", устройство
+ переключит текущую операцию в многооконный режим и откроет экран обзора,
+ где пользователь сможет выбрать другую операцию для совместного отображения.
+ </li>
+</ul>
+
+<p>
+ Пользователи могут <a href="{@docRoot}guide/topics/ui/drag-drop.html">перетаскивать</a>
+данные между окнами операций в режиме
+ совместного отображения. (Ранее перетаскивать данные можно было только в рамках
+ одной операции).
+</p>
+
+<h2 id="lifecycle">Жизненный цикл многооконного режима</h2>
+
+<p>
+ Многооконный режим не меняет <a href="{@docRoot}training/basics/activity-lifecycle/index.html">жизненный
+ цикл операции</a>.
+</p>
+
+<p>
+ В этом режиме в каждый момент времени активной
+ является только последняя операция, с которой взаимодействовал пользователь. Такая операция считается <em>самой верхней</em>.
+ Все другие операции приостановлены, даже если они отображаются.
+ Однако система отдает приостановленным, но видимым операциям более
+ высокий приоритет, чем невидимым. Если пользователь взаимодействует с
+ одной из приостановленных операций, она возобновляется, а прежняя самая верхняя
+ операция приостанавливается.
+</p>
+
+<p class="note">
+ <strong>Примечание.</strong> В многооконном режиме приложение может быть приостановлено
+ и по-прежнему видимо для пользователя. Приложению может потребоваться
+ продолжать свои операции, даже если оно приостановлено. Например, видимое приостановленное приложение,
+ воспроизводящее видео, будет по-прежнему показывать видео. Поэтому
+ мы <em>не</em> рекомендуем приостанавливать воспроизведение
+ в обработчиках {@link android.app.Activity#onPause onPause()} таких приложений.
+ Вместо этого следует приостановить видео в {@link android.app.Activity#onStop
+ onStop()} и возобновить воспроизведение в {@link android.app.Activity#onStart
+ onStart()}.
+</p>
+
+<p>
+ Если пользователь переводит приложение в многооконный режим, система
+ уведомляет операцию об изменении конфигурации, как указано в документе <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Обработка изменений
+ во время выполнения</a>. По сути это изменение так же действует
+на жизненный цикл операции, как уведомление приложения системой
+о переходе устройства из вертикальной ориентации в
+ горизонтальную, только изменяются размеры экрана, а не ориентация. Как описано в документе <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Обработка изменений
+ во время выполнения</a>, операция может обработать изменение
+ конфигурации самостоятельно или может позволить системе
+ удалить окно операции и создать его заново с новыми размерами.
+</p>
+
+<p>
+ Если пользователь увеличивает одну из сторон окна, система меняет
+ размер окна операции в соответствии с действием пользователя и применяет <a href="{@docRoot}guide/topics/resources/runtime-changes.html">изменения в режиме выполнения</a>
+ по мере необходимости. Если приложение не успевает отрисовать новые области, система
+ временно заполняет их цветом, заданным атрибутом {@link
+ android.R.attr#windowBackground windowBackground} или атрибутом стиля
+ <code>windowBackgroundFallback</code> по умолчанию.
+</p>
+
+<h2 id="configuring">Настройка приложения для многооконного режима</h2>
+
+<p>
+ Если ваше приложение предназначено для Android N, вы
+ можете указать, каким образом поддерживают (и поддерживают ли) операции вашего приложения многооконный режим. Атрибуты управления размером и макетом устанавливаются
+ в манифесте.
+ Настройки атрибутов корневой операции применяются
+ ко всем операциям в ее стеке задач.
+</p>
+
+<p class="note">
+ <strong>Примечание.</strong> Если приложение с поддержкой различной
+ ориентации было создано с версией SDK,
+ более ранней, чем Android N, и пользователь запустит это приложение в многооконном режиме, система принудительно изменит размер приложения. Система отображает диалоговое окно
+ с предупреждением о том, что приложение может работать непредвиденным образом. Система
+ <em>не</em> меняет размер окна для приложений с
+ фиксированной ориентацией. Если пользователь попытается открыть такое приложение
+ в многооконном режиме, оно займет весь экран.
+</p>
+
+<h4 id="resizeableActivity">android:resizeableActivity</h4>
+<p>
+ Установите этот атрибут в узле <code><activity></code> или
+ <code><application></code> манифеста, чтобы включить или отключить многооконный
+ режим:
+</p>
+
+<pre>
+android:resizeableActivity=["true" | "false"]
+</pre>
+
+<p>
+ Если для этого атрибута задано значение true, операцию можно запускать
+ в режимах разделения экрана и произвольной формы. Если для атрибута задано значение false,
+ операция не поддерживает многооконный режим. Если значение равно false и
+ пользователь пытается запустить операцию в многооконном режиме, она
+ занимает весь экран.
+</p>
+
+<p>
+ Если приложение предназначено для Android N, но
+значение для этого атрибута не было указано, то по умолчанию используется значение true.
+</p>
+
+<h4 id="supportsPictureInPicture">android:supportsPictureInPicture</h4>
+
+<p>
+ Установите этот атрибут в узле <code><activity></code> манифеста,
+ чтобы указать, поддерживает ли операция режим "картинка в картинке". Этот
+ атрибут не принимается во внимание, если для <code>android:resizeableActivity</code> установлено значение false.
+</p>
+
+<pre>
+android:supportsPictureInPicture=["true" | "false"]
+</pre>
+
+<h3 id="layout">Атрибуты макета</h3>
+
+<p>
+ В Android N элемент манифеста <code><layout></code> поддерживает
+ несколько атрибутов, которые определяют поведение
+ операции в многооконном режиме.
+</p>
+
+<dl>
+ <dt>
+ <code>android:defaultWidth</code>
+ </dt>
+
+ <dd>
+ Ширина окна операции по умолчанию в режиме произвольной формы.
+ </dd>
+
+ <dt>
+ <code>android:defaultHeight</code>
+ </dt>
+
+ <dd>
+ Высота окна операции по умолчанию в режиме произвольной формы.
+ </dd>
+
+ <dt>
+ <code>android:gravity</code>
+ </dt>
+
+ <dd>
+ Начальная позиция окна операции в режиме произвольной формы. Допустимые значения
+ см. в описании класса {@link android.view.Gravity}.
+ </dd>
+
+ <dt>
+ <code>android:minimalSize</code>
+ </dt>
+
+ <dd>
+ Минимальные значения высоты и ширины окна операции в режимах разделения экрана
+ и произвольной формы. Если пользователь перемещает разделительную линию
+ в режиме разделения экрана, чтобы сделать размер окна операции
+ меньше указанного минимума, система обрезает его до запрошенного пользователем размера.
+ </dd>
+</dl>
+
+<p>
+ В следующем примере кода показано, как задать размер и
+ позицию окна операции по умолчанию, а также ее минимальный размер в
+ режиме произвольной формы:
+</p>
+
+<pre>
+<activity android:name=".MyActivity">
+ <layout android:defaultHeight="500dp"
+ android:defaultWidth="600dp"
+ android:gravity="top|end"
+ android:minimalSize="450dp" />
+</activity>
+</pre>
+
+<h2 id="running">Запуск приложения в многооконном режиме</h2>
+
+<p>
+ Android N предоставляет новые возможности для поддержки
+ приложений в многооконном режиме.
+</p>
+
+<h3 id="disabled-features">Недоступные возможности в многооконном режиме</h3>
+
+<p>
+ Некоторые возможности отключены или игнорируются в многооконном
+ режиме, потому что они не имеют смысла для операции, которая отображается
+ на экране устройства одновременно с другими операциями или приложениями. Ниже приведены примеры таких возможностей.
+
+<ul>
+ <li>Отключены некоторые параметры настройки <a href="{@docRoot}training/system-ui/index.html">системного интерфейса</a>.
+ Например, приложения не могут
+ скрыть строку состояния, если они не работают в полноэкранном режиме.
+ </li>
+
+ <li>Система не учитывает изменения атрибута <code><a href=
+ "{@docRoot}guide/topics/manifest/activity-element.html#screen"
+ >android:screenOrientation</a></code>.
+ </li>
+</ul>
+
+<h3 id="change-notification">Уведомления об изменениях и запросы в многооконном режиме</h3>
+
+<p>
+ Для поддержки многооконного режима в класс {@link android.app.Activity}
+ были добавлены следующие методы. Подробнее о каждом из них см. в
+ <a href="{@docRoot}preview/setup-sdk.html#docs-dl">справочнике по N Preview SDK</a>.
+</p>
+
+<dl>
+ <dt>
+ <code>Activity.inMultiWindow()</code>
+ </dt>
+
+ <dd>
+ Вызовите этот метод, чтобы узнать, находится ли операция в многооконном режиме.
+ </dd>
+
+ <dt>
+ <code>Activity.inPictureInPicture()</code>
+ </dt>
+
+ <dd>
+ Вызовите этот метод, чтобы узнать, находится ли операция в режиме "картинка в картинке".
+
+ <p class="note">
+ <strong>Примечание.</strong> Режим "картинка в картинке" — это частный
+ случай многооконного режима. Если метод <code>myActivity.inPictureInPicture()</code>
+ возвращает значение true, <code>myActivity.inMultiWindow()</code> также возвращает
+ true.
+ </p>
+ </dd>
+
+ <dt>
+ <code>Activity.onMultiWindowChanged()</code>
+ </dt>
+
+ <dd>
+ Система вызывает этот метод, когда операция переходит в многооконный
+ режим или выходит из него. Система передает методу значение true, если
+ операция входит в многооконный режим, и значение false, если
+ она выходит из него.
+ </dd>
+
+ <dt>
+ <code>Activity.onPictureInPictureChanged()</code>
+ </dt>
+
+ <dd>
+ Система вызывает этот метод, когда операция переходит в режим
+ "картинка в картинке". Система передает методу значение true,
+ если операция входит в режим "картинка в картинке", и значение false,
+ если она выходит из него.
+ </dd>
+</dl>
+
+<p>
+ Также существуют версии {@link android.app.Fragment} для этих методов,
+например, <code>Fragment.inMultiWindow()</code>.
+</p>
+
+<h3 id="entering-pip">Переход в режим "картинка в картинке"</h3>
+
+<p>
+ Чтобы перевести операцию в режим "картинка в картинке",
+ вызовите новый метод <code>Activity.enterPictureInPicture()</code>. Этот метод игнорируется, если
+ устройство не поддерживает режим "картинка в картинке". Дополнительная информация содержится в документации
+ <a href="picture-in-picture.html">Режим "картинка в картинке"</a>.
+</p>
+
+<h3 id="launch">Запуск новых операций в многооконном режиме</h3>
+
+<p>
+ При запуске новой операции можно сообщить системе, что окно новой
+ операции следует показать рядом с текущим, если это возможно. Для этого
+ используйте флаг
+ <code>Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT</code>. Этот
+ флаг запрашивает следующее поведение.
+</p>
+
+<ul>
+ <li>Если устройство находится в режиме разделения экрана, система пытается
+ создать окно новой операции рядом с окном запустившей ее операции,
+ чтобы разместить две операции на экране. Не гарантируется, что система сможет это сделать, но если
+ это возможно, операции отображаются рядом друг с другом.
+ </li>
+
+ <li>Если устройство не находится в режиме разделения экрана, этот флаг не учитывается.
+ </li>
+</ul>
+
+<p>
+ Если при запуске
+ новой операции устройство находится в режиме произвольной формы, вы можете задать размеры и позицию окна новой операции,
+ вызвав метод <code>ActivityOptions.setLaunchBounds()</code>. Этот метод игнорируется, если
+ устройство не находится в многооконном режиме.
+</p>
+
+<p class="note">
+ <strong>Примечание.</strong> Если запустить операцию в стеке задач,
+ она заменит операцию на экране, унаследовав все ее
+ свойства многооконного режима. Чтобы запустить новую операцию в отдельном
+ окне в многооконном режиме, ее следует запустить в новом стеке задач.
+</p>
+
+<h3 id="dnd">Поддержка перетаскивания</h3>
+
+<p>
+ Пользователи могут <a href="{@docRoot}guide/topics/ui/drag-drop.html">перетаскивать</a> данные
+ между окнами операций в режиме
+ совместного отображения. (Ранее перетаскивать данные можно было только в рамках
+ одной операции). Поэтому вы можете реализовать функции перетаскивания
+ в своем приложении, если оно еще их не поддерживает.
+</p>
+
+<p>
+ В N Preview SDK пакет <a href="{@docRoot}reference/android/view/package-summary.html"><code>android.view</code></a>
+ расширен для поддержки перетаскивания между приложениями. Дополнительная информация о нижеприведенных классах
+ и методах содержится в <a href="{@docRoot}preview/setup-sdk.html#docs-dl">справочнике по N
+ Preview SDK</a>.
+</p>
+
+<dl>
+ <dt>
+ <code>android.view.DropPermissions</code>
+ </dt>
+
+ <dd>
+ Объект токена для указания разрешений
+ приложению, в которое перетаскиваются данные.
+ </dd>
+
+ <dt>
+ <code>View.startDragAndDrop()</code>
+ </dt>
+
+ <dd>
+ Новый псевдоним для {@link android.view.View#startDrag View.startDrag()}. Чтобы
+ разрешить перетаскивание между операциями, передайте
+ новый флаг <code>View.DRAG_FLAG_GLOBAL</code>. Если вам нужно предоставить принимающей операции разрешения на чтение или запись URI,
+ передайте новый флаг
+ <code>View.DRAG_FLAG_GLOBAL_URI_READ</code> или
+ <code>View.DRAG_FLAG_GLOBAL_URI_WRITE</code> соответственно.
+ </dd>
+
+ <dt>
+ <code>View.cancelDragAndDrop()</code>
+ </dt>
+
+ <dd>
+ Отменяет текущую операцию перетаскивания. Этот метод может вызвать только
+ приложение, в котором была инициирована операция перетаскивания.
+ </dd>
+
+ <dt>
+ <code>View.updateDragShadow()</code>
+ </dt>
+
+ <dd>
+ Заменяет тень текущей операции перетаскивания. Этот метод может вызвать только приложение,
+ в котором была инициирована операция перетаскивания.
+ </dd>
+
+ <dt>
+ <code>Activity.requestDropPermissions()</code>
+ </dt>
+
+ <dd>
+ Запрашивает разрешения для URI контента, переданных в объекте {@link
+ android.content.ClipData} в {@link android.view.DragEvent}.
+ </dd>
+</dl>
+
+<h2 id="testing">Тестирование приложения в многооконном режиме</h2>
+
+<p>
+ Независимо от того, обновляете ли вы свое приложение для Android N, вам необходимо
+ подтвердить его поведение в многооконном
+ режиме на тот случай, если пользователь попытается запустить его в этом режиме на устройстве с Android N.
+</p>
+
+<h3 id="configuring">Настройка тестового устройства</h3>
+
+<p>
+ Если установить Android N на устройстве, режим разделения
+ экрана будет поддерживаться автоматически.
+</p>
+
+<h3 id="test-non-n">Если приложение было создано без использования N Preview SDK</h3>
+
+<p>
+ Если вы не применяли N Preview SDK для создания приложения и пользователь
+ попытается запустить его в многооконном режиме, система принудительно
+ изменит размер окна приложения, если его ориентация не зафиксирована.
+</p>
+
+<p>
+ Если для приложения не задана фиксированная ориентация, вам
+ следует запустить его на устройстве с Android N и попытаться
+ перевести его в режим разделения экрана. Убедитесь, что приложение
+ работает нормально после принудительного изменения размера.
+</p>
+
+<p>
+ Если для приложения задана фиксированная ориентация, попытайтесь
+ перевести его в многооконный режим. Убедитесь, что при этом
+ приложение остается в полноэкранном режиме.
+</p>
+
+<h3 id="test-mw">Если приложение поддерживает многооконный режим</h3>
+
+<p>
+ Если вы использовали N Preview SDK для создания приложения и не
+ отключили поддержку многооконного режима, проверьте работу
+ приложения, как описано далее, в режимах разделения экрана и произвольной формы.
+</p>
+
+<ul>
+ <li>Запустите приложение в полноэкранном режиме, а затем переключитесь
+ в многооконный режим долгим нажатием кнопки "Обзор". Убедитесь, что приложение корректно переключается между режимами.
+ </li>
+
+ <li>Запустите приложение непосредственно в многооконном режиме
+ и убедитесь, что оно работает нормально. Вы можете запустить приложение в многооконном режиме, нажав
+ кнопку "Обзор", затем длительно нажав строку заголовка приложения и
+ перетащив ее в одну из выделенных областей на экране.
+ </li>
+
+ <li>Измените размер окна приложения в режиме разделения экрана, перетащив линию разделения.
+ Убедитесь, что изменение размера не приводит к сбою и что необходимые
+ элементы интерфейса остаются видимыми.
+ </li>
+
+ <li>Если вы указали минимальные размеры окна приложения, попытайтесь
+ установить размер меньше минимального. Убедитесь в невозможности установить размер
+ меньше указанного минимума.
+ </li>
+
+ <li>Во время всех тестов следите за производительностью приложения — она должна быть приемлемой. Например,
+ убедитесь, что после изменения размера окна приложения не возникает большой
+ задержки обновления интерфейса.
+ </li>
+</ul>
+
+<h4 id="test-checklist">Контрольный список тестирования</h4>
+
+<p>
+ Для проверки производительности приложения в многооконном режиме
+ выполните следующие операции. Попытайтесь выполнить их в режиме разделения экрана и
+ в многооконном режиме, если не указано иное.
+</p>
+
+<ul>
+ <li>Перейдите в многооконный режим и выйдите из него.
+ </li>
+
+ <li>Переключитесь из своего приложения в другое приложение и убедитесь,
+ что приложение работает нормально, если оно видимо, но не активно. Например, если приложение
+ показывает видео, оно должно продолжать воспроизведение, когда
+ пользователь работает с другим приложением.
+ </li>
+
+ <li>В режиме разделения экрана попробуйте перемещать линию
+ разделения, увеличивая и уменьшая окно приложения. Попробуйте выполнить эти операции, когда окна двух
+ приложений находятся рядом и друг над другом. Убедитесь, что приложение не завершается с ошибкой,
+ необходимые элементы видны и изменение размера не занимает
+ слишком много времени.
+ </li>
+
+ <li>Быстро измените размер окна приложения несколько раз подряд. Убедитесь, что
+ приложение не зависает и не вызывает утечку памяти. Информация о проверке использования памяти
+ приложением содержится в документе <a href="{@docRoot}tools/debugging/debugging-memory.html">
+Анализ использования оперативной памяти</a>.
+ </li>
+
+ <li>Поработайте с приложением в различных оконных конфигурациях и
+ убедитесь, что оно ведет себя должным образом. Текст должен легко читаться, а
+ элементы интерфейса не должны быть слишком маленькими.
+ </li>
+</ul>
+
+<h3 id="test-disabled-mw">Если вы отключили поддержку многооконного режима</h3>
+
+<p>
+ Если вы отключили поддержку многооконного режима,
+ установив атрибут <code>android:resizableActivity="false"</code>, запустите
+ приложение на устройстве с Android N и
+ попытайтесь перевести его в режимы произвольной формы и разделения экрана. Убедитесь, что при этом
+ приложение остается в полноэкранном режиме.
+</p>
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/api-overview.jd b/docs/html-intl/intl/ru/preview/api-overview.jd
deleted file mode 100644
index 887ea63..0000000
--- a/docs/html-intl/intl/ru/preview/api-overview.jd
+++ /dev/null
@@ -1,676 +0,0 @@
-page.title=Android N для разработчиков
-meta.tags="предварительная версия", "androidn"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-apis_2x.png
-@jd:body
-
-
-
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>Основные возможности для разработчиков</h2>
- <ol>
- <ul style="list-style-type:none;">
- <li><a href="#multi-window_support">Поддержка многооконного режима</a></li>
- <li><a href="#notification_enhancements">Уведомления</a></li>
- <li><a href="#jit_aot">Динамическая/предварительная компиляция</a></li>
- <li><a href="#quick_path_to_app_install">Быстрый способ установки приложения</a></li>
- <li><a href="#doze_on_the_go">Сон на ходу: режим Doze</a></li>
- <li><a href="#background_optimizations">Оптимизация фоновых процессов</a></li>
- <li><a href="#data_saver">Экономия трафика</a></li>
- <li><a href="#tile_api">API панели быстрых настроек</a></li>
- <li><a href="#number-blocking">Блокировка номеров</a></li>
- <li><a href="#call_screening">Фильтрация вызовов</a></li>
- <li><a href="#multi-locale_languages">Языки и языковые настройки</a></li>
- <li><a href="#icu4">API-интерфейсы ICU4J в Android</a></li>
- <li><a href="#gles_32">API OpenGL ES 3.2</a></li>
- <li><a href="#android_tv_recording">Запись Android TV</a></li>
- <li><a href="#android_for_work">Android for Work</a></li>
- <li><a href="#accessibility_enhancements">Специальные возможности</a></li>
- <li><a href="#direct_boot">Режим Direct Boot</a></li>
- <li><a href="#key_attestation">Аттестация ключей</a></li>
- <li><a href="#network_security_config">Конфигурация сетевой безопасности</a></li>
- <li><a href="#default_trusted_ca">Доверенный центр сертификации по умолчанию</a></li>
- <li><a href="apk_signature_v2">Схема получения подписи APK, версия 2</a></li>
- <li><a href="#scoped_directory_access">Доступ к выделенным каталогам</a></li>
- </ol>
-</div>
-</div>
-
-
-
-<p>Система Android N еще находится в активной стадии разработки, но ее уже можно опробовать в виде предварительной версии
-N Developer Preview. В следующих разделах рассматриваются некоторые из
- ее новых возможностей для разработчиков. </p>
-
-<p>
- Обязательно изучите раздел <a href="{@docRoot}preview/behavior-changes.html">Изменения в работе</a>, в котором описаны
-изменения платформы, способные повлиять на работу приложений, ознакомьтесь более подробно с основными возможностями
-в руководствах для разработчиков и загрузите <a href="{@docRoot}preview/setup-sdk.html#docs-dl">справочник по API</a> с подробным описанием новых
-API-интерфейсов.
-</p>
-
-<h2 id="multi-window_support">Поддержка многооконного режима</h2>
-
-
-<p>В Android N представлена новая долгожданная функция многозадачности
-– многооконный режим. </p>
-
- <p>Теперь пользователи смогут открывать на экране два приложения одновременно. </p>
- <ul>
- <li>На телефонах и планшетах под управлением
-Android N пользователи могут запустить два приложения рядом или друг над другом
-в режиме разделенного экрана. Размеры окон приложений можно изменить с помощью
-разделителя между ними. </li>
-
-<li>На устройствах Android TV для приложений будет доступен <a href="{@docRoot}preview/features/picture-in-picture.html">режим
-"картинка в картинке"</a>, который позволит приложению отображать контент, пока пользователь просматривает другие приложения или
-взаимодействует с ними. Более подробная информация приведена ниже. </li>
- </ul>
-
-<div class="col-4of10">
-<img src="{@docRoot}preview/images/mw-portrait.png" alt="" style="height:460px;padding-left:1em;" id="img-split-screen" />
-<p class="img-caption">
- <strong>Рис. 1.</strong> Приложения в режиме разделенного экрана.
-</p>
- </div>
-
-<p>Поддержка многооконного режима открывает новые возможности привлечения пользователей,
-особенно на планшетах и других устройствах с большим размером экрана. Вы можете даже включить в своем приложении функцию перетаскивания
-для удобного перемещения контента между приложениями – отличный
-способ улучшить пользовательский интерфейс. </p>
-
-<p>Вы можете легко добавить поддержку многооконного режима в свое приложение и настроить его
-работу с окнами экрана. Например, вы можете определить минимальные допустимые размеры,
-до которых пользователи могут уменьшить окно приложения.
-Вы можете также отключить многооконный режим для своего приложения, чтобы
-система отображала его только в полноэкранном режиме.</p>
-
-<p>
- Дополнительная информация содержится в документе для разработчиков <a href="{@docRoot}preview/features/multi-window.html">Поддержка многооконного режима</a>.
-
-</p>
-
-<h2 id="notification_enhancements">Новые возможности уведомлений</h2>
-
-<p>В Android N изменен дизайн уведомлений, которые стали проще и удобнее.
-Ниже приведены некоторые изменения.</p>
-
-<ul>
- <li>
- <strong>Обновления шаблонов</strong>. В новых шаблонах уведомлений
-сделан акцент на изображении и аватаре контакта. Разработчики смогут
-использовать новые шаблоны с минимальными изменениями своего кода.
- </li>
-
- <li>
- <strong>Группы уведомлений</strong>. Система может группировать уведомления,
-например по теме сообщений, и отображать группу. Пользователь может применять к группам
-действия, например, закрывать их или архивировать. Если вы ранее выполняли реализацию
-уведомлений для Android Wear, то вам уже должна быть знакома эта
-модель.
- </li>
-
- <li>
- <strong>Непосредственный ответ в уведомлении</strong>.
-Android теперь поддерживает функцию внутренних ответов в приложениях для общения в режиме реального времени. Это позволяет быстро ответить на
-СМС или текстовое сообщение непосредственно в интерфейсе уведомления.
- </li>
-
- <li>
- <strong>Собственные представления</strong>. Два новых API-интерфейса позволяют применять системные элементы,
-такие как заголовки и действия уведомлений, при использовании собственных представлений в
-уведомлениях.
- </li>
-</ul>
-
-<div class="col-4of12">
- <img src="{@docRoot}preview/images/notifications-1.png" alt="" style="padding:.5em;max-width:226px">
-</div>
-
-<div class="col-4of12">
- <img src="{@docRoot}preview/images/notifications-3.png" alt="" style="padding:.5em;max-width:226px">
-</div>
-
-<div class="col-4of12">
- <img src="{@docRoot}preview/images/notifications-2.png" alt="" style="padding:.5em;max-width:226px">
-</div>
-
-
-<p class="img-caption">
- <strong>Рис. 2.</strong> Группы уведомлений и непосредственный ответ.
-</p>
-
-<p>Способы реализации новых возможностей описаны в руководстве
-<a href="{@docRoot}preview/features/notification-updates.html">Уведомления</a>.
-</p>
-
-
-
-<h2 id="jit_aot">Профильная динамическая/предварительная компиляция</h2>
-
-<p>В Android N добавлен динамический (JIT) компилятор с профилированием кода для среды
-ART, который позволяет постоянно улучшать производительность приложений Android во время их работы.
-JIT-компилятор дополняет текущий предварительный (AOT) компилятор ART
-и помогает повысить производительность, сократить потребление памяти, а также ускорить обновления приложений и системы.
-</p>
-
-<p>Профильная компиляция позволяет ART управлять AOT/JIT-компиляцией каждого приложения
-в соответствии с его фактическим использованием и характеристиками устройства. Например,
-ART ведет профиль часто используемых методов каждого приложения, которые она может предварительно скомпилировать
-и кэшировать для оптимальной производительности. Компиляция остальных частей приложения откладывается до того момента,
-когда они действительно понадобятся.</p>
-
-<p>Кроме повышения производительности основных частей приложения профильная
-компиляция помогает сократить общее использование оперативной памяти приложением, в том числе связанными двоичными файлами.
-Эта возможность особенно важна для устройств с небольшим объемом памяти.</p>
-
-<p>ART управляет профильной компиляцией с минимальным потреблением заряда
-аккумулятора. Предварительная компиляция выполняется только тогда, когда устройство неактивно
-и находится на зарядке, поэтому заблаговременное выполнение этой работы экономит время и энергию.</p>
-
-<h2 id="quick_path_to_app_install">Быстрый способ установки приложения</h2>
-
-<p>Одним из наиболее ощутимых преимуществ JIT-компилятора ART является скорость установки приложений
-и обновлений системы. Даже большие приложения, требовавшие нескольких минут для своей оптимизации и установки на
-Android 6.0 , теперь могут быть установлены за секунды.
- Обновления системы также выполняются быстрее, поскольку стадия оптимизации теперь отсутствует. </p>
-
-<h2 id="doze_on_the_go">Сон на ходу: режим Doze</h2>
-
-<p>В Android 6.0 был введен системный режим Doze для экономии заряда аккумулятора. В этом режиме
-выполнение процессорных и сетевых операций приложений откладывается, когда устройство не используется и неподвижно – например, лежит на столе или в ящике.
- </p>
-
-<p>В Android N режим Doze сделал шаг вперед и экономит заряд аккумулятора на ходу.
-Каждый раз, когда экран выключается на определенный промежуток времени и устройство не заряжается,
-Doze применяет частичный набор знакомых ограничений процессорной и сетевой активности приложений.
-Это означает, что пользователи могут экономить заряд аккумулятора, даже когда их устройство лежит в кармане.
-</p>
-
-
-<img src="/preview/images/doze-diagram-1.png" alt="" id="figure1" />
-<p class="img-caption">
- <strong>Рис. 3.</strong> Режим Doze теперь применяет
-энергосберегающие ограничения, даже когда устройство находится в движении.
-</p>
-
-
-<p>Вскоре после блокировки экрана, когда устройство питается от аккумулятора, режим Doze
-ограничивает сетевой доступ и откладывает выполнение заданий и синхронизации. В течение коротких периодов пробуждения
-для приложений открывается доступ к сети и разрешается выполнение отложенных
-заданий и операций синхронизации. Включение экрана или подключение к источнику питания выводит
-устройство из режима Doze.</p>
-
-<p>Если устройство снова остается неподвижным в течение определенного периода времени (с погашенным экраном и питанием от аккумулятора),
-Doze применяет полный набор процессорных и сетевых ограничений к {@link
-android.os.PowerManager.WakeLock}, {@link android.app.AlarmManager} оповещениям и сканированию
-GPS/Wi-Fi.</p>
-
-<p>Рекомендации по адаптации приложения для режима Doze не зависят от того, двигается устройство или нет,
-поэтому если вы уже обновили свое приложение для оптимальной работы
-в режиме Doze, то все уже готово. Если нет, начните <a href="{@docRoot}training/monitoring-device-state/doze-standby.html#assessing_your_app">адаптацию
-приложения для режима Doze</a> прямо сейчас.</p>
-
-<h2 id="background_optimizations">Проект Svelte: оптимизация фоновых процессов</h2>
-
-<p>Продолжено развитие проекта Svelte, нацеленного на сокращение использования оперативной памяти системой и приложениями
-в различных устройствах экосистемы Android. В Android N проект
-Svelte уделяет особое внимание оптимизации работы приложений в фоновом режиме. </p>
-
-<p>Работа в фоновом режиме является важной частью большинства приложений. Организация ее надлежащим образом
-может сделать интерфейс пользователя быстрым, отзывчивым и контекстно-зависимым.
-В противном случае фоновая обработка может напрасно потреблять оперативную память (и
-заряд аккумулятора) и негативно влиять на производительность других приложений. </p>
-
-<p>Начиная с Android 5.0, предпочтительным и оптимальным для пользователей способом выполнения фоновых операций стало использование планировщика {@link android.app.job.JobScheduler}.
-Приложения могут планировать свои задания, позволяя системе оптимизировать их на основе состояния памяти,
-питания и сетевого соединения. Планировщик JobScheduler прост в использовании и обеспечивает необходимый контроль,
-поэтому он рекомендуется для применения во всех приложениях.
- </p>
-
-<p>
- Другим хорошим вариантом является планировщик <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
-<code>GCMNetworkManager</code></a> в составе служб Google Play, который
-предлагает аналогичные возможности планирования заданий и совместимость с прежними версиями
-Android.
-</p>
-
-<p>Мы продолжаем расширять область применения планировщиков <code>JobScheduler</code> и
-<code>GCMNetworkManager</code>.
-Например, в Android N теперь можно планировать фоновую обработку на основании
-изменений поставщиков контента. В то же время мы начинаем исключать некоторые
-устаревшие шаблоны, которые могут ухудшить производительность системы,
-особенно на устройствах с малым объемом памяти.</p>
-
-<p>В Android N удалены три часто используемые неявные рассылки —
- {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, {@link
-android.hardware.Camera#ACTION_NEW_PICTURE} и {@link
-android.hardware.Camera#ACTION_NEW_VIDEO}, — поскольку они могут пробудить
-фоновые процессы сразу нескольких приложений, повысив потребление памяти и заряда аккумулятора. Если
-ваше приложение получает эти рассылки, используйте преимущество N Developer Preview для миграции на
-<code>JobScheduler</code> и связанные с ним API-интерфейсы. </p>
-
-<p>
- Дополнительная информация содержится в документе <a href="{@docRoot}preview/features/background-optimization.html">Оптимизация
-фоновых процессов</a>.
-</p>
-
-
-<h2 id="data_saver">Экономия трафика</h2>
-
-<div class="col-5of12" style="margin-right:1.5em;">
-<img src="{@docRoot}preview/images/datasaver.png" style="border:2px solid #ddd">
-
-<p class="img-caption" style="padding-right:2em;">
- <strong>Рис. 4.</strong> Настройка экономии трафика.
-</p>
- </div>
-
-<p>В течение срока эксплуатации мобильного устройства стоимость сотового трафика обычно
-превышает стоимость самого устройства. Для многих пользователей сотовый трафик является
-весьма дорогим ресурсом, который они хотели бы сэкономить. </p>
-
-<p>В Android N появился режим экономии трафика – новая системная служба, которая помогает сократить
-использование сотового трафика приложениями в роуминге, в конце периода тарификации
-или для небольших предоплаченных пакетов трафика. Режим экономии трафика дает пользователям возможность контроля использования сотового трафика приложениями
-и позволяет разработчикам повысить эффективность работы служб.
- </p>
-
-<p>Когда пользователь включает экономию трафика в панели <strong>Settings</strong> и устройство подключено к тарифицируемой сети,
- система блокирует использование фонового трафика и сигнализирует приложениям
-о необходимости сократить по возможности использование трафика в активном режиме, например: ограничить скорость передачи данных
-потокового вещания, уменьшить качество изображений, отложить оптимистичное предварительное кэширование
-и т.д. Пользователи могут поместить определенные приложения в белый список, разрешив им тарифицируемую фоновую передачу данных
-даже при включенном режиме экономии трафика.</p>
-
-<p>Android N расширяет применение класса {@link android.net.ConnectivityManager}, позволяя приложениям
-<a href="{@docRoot}preview/features/data-saver.html#status">выяснять пользовательские настройки
-экономии трафика</a> и <a href="{@docRoot}preview/features/data-saver.html#monitor-changes">отслеживать
-изменения этих настроек</a>. Все приложения должны проверять, был ли включен режим экономии трафика,
-и пытаться ограничить использование трафика в фоновом и активном режимах.</p>
-
-
-<h2 id="tile_api">API панели быстрых настроек</h2>
-
-
-<div style="float:right;max-width:320px">
-<img src="{@docRoot}preview/images/quicksettings.png" style="padding-left:1.5em;">
-
-<p class="img-caption" style="padding-left:2em;">
- <strong>Рис. 5.</strong> Плитки быстрых настроек в панели уведомлений.
-</p>
-
-
- </div><p>Быстрые настройки являются простым и популярным способом доступа к основным настройкам и действиям
-непосредственно из панели уведомлений. В Android N возможности быстрых настроек
-были расширены – они стали еще более полезными и удобными. </p>
-
-<p>Добавлено пространство для дополнительных плиток быстрых настроек, к которым можно
-обратиться с разбитой на страницы области экрана, проведя пальцем влево или вправо. Пользователи
-также могут контролировать состав и место отображения этих элементов – их можно добавлять или двигать обычным перетаскиванием.
- </p>
-
-<p>Для разработчиков Android N также предлагает новый API, который позволяет определить собственные плитки
-быстрых настроек для удобного доступа пользователей к основным элементам управления и действиям вашего приложения.</p>
-
-<p>
- Плитки быстрых настроек резервируются для элементов управления или действий, которые либо требуются срочно,
- либо часто используются. Их не следует использовать в качестве ярлыков
-для запуска приложений.
-</p>
-
-<p>
- После определения плитки можно показать пользователям, которые смогут добавить их на
-панель быстрых настроек обычным перетаскиванием.
-</p>
-
-<p>
- Дополнительную информацию о создании плиток приложений можно найти в описании
-<code>android.service.quicksettings.Tile</code> в загружаемом <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Справочнике по API</a>.
-</p>
-
-
-
-<h2 id="number-blocking">Блокировка номеров</h2>
-
-<p>Платформа Android N теперь поддерживает блокировку номеров и предоставляет
-API-интерфейс платформы, который позволяет поставщикам услуг вести список блокируемых номеров. Этот список доступен для чтения и записи стандартным приложениям
-для СМС, звонков и приложениям поставщика.
-Для других приложений это список недоступен.</p>
-
-<p>Сделав блокировку номеров стандартной функцией платформы, Android предоставляет приложениям
-единообразный способ поддержки блокировки номеров на разных устройствах.
-Приложения также получают следующие преимущества:</p>
-
-<ul>
- <li> Номера, блокируемые при вызовах, также блокируются в текстовых сообщениях.
- <li> Заблокированные номера могут быть сохранены при переустановках и переносах на другие устройства с помощью функции резервного копирования и восстановления.
-
- <li> Разные приложения могут использовать один и тот же список блокируемых номеров.
-</ul>
-
-<p>Кроме того, возможность интеграции приложения оператора мобильной сети в Android означает, что операторы могут
-читать список блокируемых номеров на устройстве и выполнять блокировку для пользователя на своей стороне,
-предотвращая доставку пользователю нежелательных вызовов и текстовых сообщений через какого-либо посредника,
-например, через конечную точку VOIP или переадресацию звонков.</p>
-
-<p>
- Дополнительную информацию можно найти в описании <code>android.provider.BlockedNumberContract</code>
-в загружаемом <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Справочнике по API</a>.
-
-</p>
-
-<h2 id="call_screening">Фильтрация вызовов</h2>
-
-<p>
- Android N дает возможность стандартному приложению для звонков фильтровать входящие вызовы. Для этого
-в приложении для звонков реализована новая служба <code>CallScreeningService</code>,
-которая позволяет приложению выполнять ряд действий на основании
-{@link android.telecom.Call.Details Call.Details} входящего вызова, например:
-</p>
-
-<ul>
- <li> отклонить входящий вызов;
- <li> не регистрировать вызов в журнале вызовов;
- <li> не показывать пользователю уведомление о вызове.
-</ul>
-
-<p>
- Дополнительную информацию можно найти в описании <code>android.telecom.CallScreeningService</code>
-в загружаемом <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Справочнике по API</a>.
-
-</p>
-
-
-<h2 id="multi-locale_languages">Поддержка нескольких языковых настроек, дополнительные языки</h2>
-
-
-<p>Android N теперь позволяет пользователям выбрать <strong>несколько языковых настроек</strong>
-для улучшенной поддержки случаев двуязычного применения. Приложения могут использовать
-новый API для получения выбранных пользователем языковых настроек и затем предоставлять более сложные
-интерфейсы для многоязычных пользователей, например: показывать результаты поиска
-на нескольких языках; не предлагать перевод веб-страниц с того языка, который уже знаком пользователю.
-</p>
-
-<p>Вместе с поддержкой нескольких языковых настроек Android N также расширяет список доступных языков.
-Для каждого распространенного
-языка, такого как английский, испанский, французский и арабский, предлагается более 25 вариантов. Также добавлена частичная
-поддержка более 100 новых языков.</p>
-
-<p>Приложения могут получить список языковых настроек, установленных пользователем, вызвав метод <code>LocaleList.GetDefault()</code>. Для поддержки расширенного количества языковых настроек в Android N изменен способ
-разрешения ресурсов. Вам следует обязательно проверить и убедиться в том,
-что ваши приложения работают надлежащим образом с новой логикой разрешения ресурсов.</p>
-
-<p>Дополнительная информация о новом способе разрешения ресурсов и соответствующие рекомендации содержатся
-в документе <a href="{@docRoot}preview/features/multilingual-support.html">Поддержка нескольких языков</a>.</p>
-
-<h2 id="icu4">API-интерфейсы ICU4J в Android</h2>
-
-<p>
- Платформа Android N теперь предлагает частичный набор API-интерфейсов <a href="http://site.icu-project.org/">ICU4J</a> в
-пакете <code>android.icu</code>. Миграция выполняется легко и в основном заключается
-в простом изменении пространства имен с <code>com.java.icu</code> на
-<code>android.icu</code>. Если вы уже используете пакет ICU4J в своих приложениях,
-переход на API-интерфейсы <code>android.icu</code>, предоставленные платформой Android,
-может существенно сократить размер пакетов APK.
-</p>
-
-<p>
- Дополнительные сведения по Android ICU4J API содержатся в документе <a href="{@docRoot}preview/features/icu4j-framework.html">Поддержка ICU4J</a>.
-</p>
-
-
-
-<h2 id="gles_32">API OpenGL™ ES 3.2</h2>
-
-<p>В платформу Android N добавлены интерфейсы и поддержка OpenGL ES 3.2, включая следующие возможности.</p>
-
-<ul>
- <li> Все расширения из <a class="external-link" href="https://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">Android Extension Pack</a></a> (AEP) кроме <code>EXT_texture_sRGB_decode</code>.
- <li> Кадровые буферы с плавающей запятой для HDR и отложенного затенения.
- <li> Вызовы отрисовки BaseVertex для улучшения пакетной обработки и потоковой передачи данных.
- <li> Эффективный контроль обращений к буферу для сокращения служебных операций WebGL.
-</ul>
-
-<p>API-интерфейс платформы для OpenGL ES 3.2 в Android N предоставляется классом
-<code>GLES32</code>. При использовании OpenGL ES 3.2 обязательно следует объявить требование
-в файле манифеста с помощью тега <code><uses-feature></code> и атрибута
-<code>android:glEsVersion</code>. </p>
-
-<p>Для получения дополнительных сведений об использовании OpenGL ES, включая
-определение версии, поддерживаемой устройством, см. <a href="{@docRoot}guide/topics/graphics/opengl.html">Руководство по API OpenGL ES</a>.</p>
-
-
-<h2 id="android_tv_recording">Запись Android TV</h2>
-
-<p>В Android N добавлена возможность записи и воспроизведения контента из служб Android TV
-через новые API-интерфейсы записи. Службы телевидения на основе существующих API
-с временным сдвигом могут контролировать выбор данных телеканала для записи, сохранение
-сеансов записи и управлять взаимодействием пользователя с записанным контентом. </p>
-
-<p>Дополнительная информация содержится в документе <a href="{@docRoot}preview/features/tv-recording-api.html">API-интерфейсы записи Android TV</a>.</p>
-
-
-<h2 id="android_for_work">Android for Work</h2>
-
-<p>В Android for Work добавлены много новых возможностей и API-интерфейсов для устройств под управлением Android N.
-Некоторые из них приведены ниже. Полный список обновлений Android for Work, касающихся
-Android N, содержится в списке изменений Android for Work.</p>
-
-<h3 id="work_profile_security_challenge">Пароль безопасности для рабочего профиля </h3>
-
-<p>
- Владельцы профиля могут установить отдельный пароль безопасности для приложений, запускаемых в рабочем профиле.
-Когда пользователь пытается открыть любые рабочие
-приложения, выводится запрос пароля. Успешный ввод пароля снимает блокировку рабочего профиля
-и, при необходимости, дешифрует его. Владельцы профиля
-могут отправить пользователю запрос <code>ACTION_SET_NEW_PASSWORD</code>, предлагающий установить рабочий пароль,
- или запрос <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code>, предлагающий установить пароль блокировки устройства.
-
-</p>
-
-<p>
- Владельцы профиля могут устанавливать различные политики паролей для рабочей проверки безопасности
-(например, длину PIN-кода, возможность использования отпечатка пальца
-для разблокировки профиля) с помощью <code>setPasswordQuality()</code>,
-<code>setPasswordMinimumLength()</code> и других связанных методов. Владелец
-профиля может также установить блокировку устройства с помощью экземпляра <code>DevicePolicyManager</code>,
-возвращаемого новым методом <code>getParentProfileInstance()</code>.
-Кроме того, владельцы профиля могут настроить экран учетных данных для рабочей проверки безопасности
-с помощью новых методов <code>setOrganizationColor()</code> и
-<code>setOrganizationName()</code>.
-</p>
-<h3 id="turn_off_work">Выключение рабочего режима </h3>
-
-<p>Пользователи устройства с рабочим профилем могут переключать рабочий режим. Когда рабочий режим
-выключен, управляемый им пользователь временно выходит из системы, что отключает приложения рабочего профиля,
-фоновую синхронизацию и уведомления. Также отключается приложение владельца профиля.
-При выключенном рабочем режиме система отображает постоянный значок состояния,
-напоминая пользователю о том, что он не может запустить рабочие приложения. Средство запуска при этом указывает,
-что рабочие приложения и виджеты недоступны. </p>
-
-<h3 id="always_on_vpn">Постоянное подключение к VPN </h3>
-
-<p>Владельцы устройства и профиля могут обеспечить постоянное подключение рабочих приложений через указанную сеть
-VPN. Система автоматически подключается к этой VPN после загрузки устройства.
-</p>
-
-<p>
- Для этого в интерфейсе <code>DevicePolicyManager</code> используются новые методы
-<code>setAlwaysOnVpnPackage()</code> и
-<code>getAlwaysOnVpnPackage()</code>.
-</p>
-
-<p>Поскольку привязка служб VPN может быть выполнена непосредственно системой без взаимодействия с приложениями,
-клиентам VPN требуется обрабатывать новые точки доступа для постоянного подключения к VPN. Как и раньше,
-службы для системы указываются фильтром намерений, соответствующим действию
-<code>android.net.VpnService</code>. </p>
-
-<p>
- Пользователи могут вручную установить клиентов постоянного подключения к VPN, реализующих методы
-<code>VPNService</code>, на экране настроек основного пользователя
-<strong>Settings>More>Vpn</strong>.
-</p>
-
-<h2 id="accessibility_enhancements">Расширение специальных возможностей</h2>
-
-<p>Android N теперь предлагает настройки Vision Settings непосредственно на экране приветствия при начальной установке нового устройства.
-Это значительно упрощает пользователям обнаружение и настройку на своих устройствах
-специальных возможностей, включая жесты увеличения, размер шрифта, размер экрана и
-функцию TalkBack. </p>
-
-<p>Благодаря более приметному расположению этих настроек пользователи
-чаще будут пробовать ваше приложение с включенными специальными возможностями. Обязательно протестируйте ваше приложение с этими настройками,
-включив их на экране Settings >
-Accessibility.</p>
-
-<p>Также в Android N предусмотрены службы специальных возможностей которые помогут пользователям с нарушениями двигательных функций
-касаться экрана. Новый API позволяет встроить в службы такие
-возможности, как отслеживание лица, отслеживание взгляда, сканирование точек и другой функционал, соответствующий потребностям
-этих пользователей.</p>
-
-<p>Дополнительную информацию можно найти в описании <code>android.accessibilityservice.GestureDescription</code>
- в загружаемом <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Справочнике по API</a>.</p>
-
-
-<h2 id="direct_boot">Режим Direct Boot</h2>
-
-<p>Режим Direct Boot ускоряет загрузку устройства и позволяет зарегистрированным приложениям
-сохранить ограниченную функциональность даже после непредвиденной перезагрузки.
-Например, если зашифрованное устройство перезагрузится, когда пользователь спит,
-уведомления о зарегистрированных предупреждениях, сообщениях и входящих вызовах будут поступать пользователю, как в обычном режиме.
-Это также означает, что специальные возможности могут быть доступны сразу после перезагрузки.
-</p>
-
-<p>Режим Direct Boot использует преимущество шифрования на уровне файлов в Android N
-для применения детализированных политик шифрования к данным системы и приложений.
-Система использует хранилище, зашифрованное на уровне устройства, для выбранных системных данных и данных из явным образом зарегистрированных приложений.
-По умолчанию для всех остальных системных данных, пользовательских данных, приложений и
-данных приложений используется хранилище, зашифрованное на уровне учетной записи. </p>
-
-<p>При загрузке система запускается в ограниченном режиме с доступом к данным, зашифрованным
-на уровне устройства, и без общего доступа к приложениям и данным.
-Если у вас есть компоненты, которые должны быть запущены в этом режиме, их можно зарегистрировать,
-установив соответствующий флаг в манифесте. После перезагрузки система активирует зарегистрированные
-компоненты с помощью рассылки намерения <code>LOCKED_BOOT_COMPLETED</code>.
- Система обеспечивает доступность зарегистрированных данных приложений, зашифрованных на уровне устройства,
-до разблокировки экрана. Все остальные данные остаются недоступными, пока пользователь не подтвердит свои учетную информацию на экране блокировки,
-после чего данные будут расшифрованы. </p>
-
-Дополнительная информация приведена в документе <a href="{@docRoot}preview/features/direct-boot.html">Direct Boot</a>.</p>
-</p>
-
-
-<h2 id="key_attestation">Аттестация ключей</h2>
-
-<p>Аппаратные хранилища ключей обеспечивают безопасный метод создания, хранения,
-и использования криптографических ключей на устройствах Android. Они защищают ключи от
-ядра Linux, потенциальных уязвимостей Android и извлечения из устройств
-с корневым доступом.</p>
-
-<p>Чтобы упростить и повысить безопасность использования аппаратных хранилищ ключей
-в Android N введена возможность аттестации ключей. Приложения и внешние хранилища ключей могут использовать аттестацию,
-чтобы определить, является ли пара ключей RSA или EC
-аппаратной, какие свойства имеет эта пара ключей и какие ограничения применяются
-к ее использованию и сроку действия. </p>
-
-<p>Приложения и службы внешних хранилищ могут запросить информацию о паре ключей
-через сертификат аттестации X.509, который должен быть подписан действительным ключом
-аттестации. Ключ аттестации представляет собой ключ подписи ECDSA, который
-встраивается в аппаратное хранилище ключей устройства при его изготовлении на заводе.
-Поэтому сертификат аттестации, подписанный действительным ключом аттестации,
-подтверждает существование аппаратного хранилища ключей вместе со сведениями о парах ключей в таком хранилище.
-</p>
-
-<p>Чтобы убедиться в том, что устройство использует безопасный официальный заводской образ Android,
-для аттестации ключей требуется предоставление <a class="external-link" href="https://source.android.com/security/verifiedboot/verified-boot.html#bootloader_requirements">загрузчиком</a> устройства
-следующей информации о <a class="external-link" href="https://source.android.com/security/trusty/index.html">доверенной
-среде выполнения (TEE)</a>:</p>
-
-<ul>
-<li>версия ОС и исправлений, установленных на устройстве;</li>
-<li>открытый ключ <a href="https://source.android.com/security/verifiedboot/index.html" class="external-link">подтвержденной загрузки</a> и состояние блокировки.</li>
- </ul>
-
-<p>Дополнительная информация об аппаратном хранилище ключей содержится
-в соответствующем <a href="https://source.android.com/security/keystore/" class="external-link">руководстве</a>.</p>
-
-<p>В дополнение к аттестации ключей в Android N также добавлены ключи,
-привязанные к отпечаткам пальцев, которые не отменяются при регистрации новых отпечатков.</p>
-
-<h2 id="network_security_config">Конфигурация сетевой безопасности</h2>
-
-<p>В Android N приложения могут безопасно настраивать поведение своих защищенных (HTTPS, TLS)
-подключений, без каких-либо изменений кода, используя декларативную
-<em>конфигурацию сетевой безопасности</em> вместо обычных ненадежных
-программных API-интерфейсов (например, X509TrustManager).</p>
-
- <p>Поддерживаемые возможности:</p>
-<ul>
-<li><b>Пользовательские якоря доверия.</b> Позволяют приложению определить доверенные
-центры сертификации (ЦС) для его защищенных соединений. Например,
-приложение может доверять определенным самозаверенным сертификатам или ограниченному набору общих ЦС.
-</li>
-<li><b>Замена при отладке.</b> Позволяет разработчику безопасно отладить
-защищенные соединения своего приложения без дополнительного риска для установленной базы.
-
-</li>
-<li><b>Отказ от передачи данных открытым текстом.</b> Позволяет приложению защитить себя от
-случайной передачи данных открытым текстом.</li>
-<li><b>Прикрепление сертификатов.</b> Дополнительная возможность, позволяющая приложению
-ограничить доверенные ключи сервера для защищенных соединений.</li>
-</ul>
-
-<p>Дополнительная информация содержится в документе <a href="{@docRoot}preview/features/security-config.html">Конфигурация сетевой безопасности</a>.
-</p>
-
-<h2 id="default_trusted_ca">Доверенный центр сертификации по умолчанию</h2>
-
-<p>По умолчанию приложения для Android N могут доверять только системным сертификатам
-и не доверяют ЦС, добавленным пользователем. Если приложению для Android N
-требуется доверять пользовательским ЦС, ему следует указать в
-<a href="{@docRoot}preview/features/security-config.html">конфигурации сетевой безопасности</a> эти доверенные пользовательские ЦС.
-</p>
-
-<h2 id="apk_signature_v2">Схема получения подписи APK, версия 2</h2>
-
-<p>Класс PackageManager теперь поддерживает подтверждение приложений с использованием схемы подписи APK
-версии 2. Вторая версия схемы подписи APK применяется ко всему файлу,
-что существенно ускоряет подтверждение и повышает надежность, позволяя обнаруживать любые несанкционированные изменения файлов APK.
-</p>
-
-<p>Для поддержки обратной совместимости пакет APK должен быть подписан с помощью первой версии схемы
-(схема подписи JAR) до того, как он будет подписан по схеме версии 2.
-Подпись по схеме версии 2 не пройдет подтверждение, если APK будет подписан дополнительным сертификатом
-после добавления подписи по схеме версии 2. </p>
-
-<p>Поддержка подписи APK по схеме версии 2 будет доступна в последующих выпусках N Developer
-Preview.</p>
-
-<h2 id="scoped_directory_access">Доступ к выделенным каталогам</h2>
-
-<p>В Android N приложения могут использовать новые API-интерфейсы для запроса доступа к конкретным каталогам <a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">внешнего хранилища</a>,
-включая каталоги на съемных носителях, таких как SD-карты.
-Новые API-интерфейсы значительно упрощают доступ к стандартным каталогам
-внешнего хранилища, таким как <code>Pictures</code>. Например, приложения, работающие с фотографиями,
-могут использовать эти API-интерфейсы вместо
-<code>READ_EXTERNAL_STORAGE</code>, который разрешает доступ ко всем каталогам
-хранилища или платформы Storage Access Framework, благодаря чему выполняется переход к указанному каталогу.
-</p>
-
-<p>Кроме того, новые API-интерфейсы упрощают процедуру предоставления доступа к внешнему хранилищу для приложения.
-Если вы применяете новые API, система использует простой интерфейс разрешений,
-в котором четко указаны каталоги, к которым приложение запрашивает доступ.
-</p>
-
-<p>Дополнительная информация содержится в документации для разработчиков
-<a href="{@docRoot}preview/features/scoped-folder-access.html">Доступ к выделенным каталогам</a>.
-</p>
-
-
-
-
-
-
diff --git a/docs/html-intl/intl/ru/preview/behavior-changes.jd b/docs/html-intl/intl/ru/preview/behavior-changes.jd
deleted file mode 100644
index a048660..0000000
--- a/docs/html-intl/intl/ru/preview/behavior-changes.jd
+++ /dev/null
@@ -1,480 +0,0 @@
-page.title=Изменения в работе
-page.keywords=preview,sdk,compatibility
-meta.tags="предварительная версия", "совместимость"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-changes_2x.png
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>Содержание документа</h2>
-
-<ol>
- <li><a href="#perf">Повышение производительности</a>
- <ol>
- <li><a href="#doze">Режим Doze</a></li>
- <li><a href="#bg-opt">Оптимизация фоновых процессов</a></li>
- </ol>
- </li>
- <li><a href="#perm">Изменения разрешений</a></li>
- <li><a href="#accessibility">Улучшенные специальные возможности</a>
- <ol>
- <li><a href="#screen-zoom">Масштабирование экрана</a></li>
- <li><a href="#vision-settings">Vision Settings в мастере настройки</a></li>
- </ol>
- </li>
- <li><a href="#ndk">Связь приложений NDK с библиотеками платформы</a></li>
- <li><a href="#afw">Android for Work</a></li>
-</ol>
-
-<h2>Дополнительно</h2>
-<ol>
- <li><a href="{@docRoot}preview/api-overview.html">Обзор API-интерфейсов Android N</a>
-</li>
-</ol>
-
-</div>
-</div>
-
-
-<p>
- Наряду с новыми функциями и возможностями в Android N появились различные изменения
-работы системы и API. В этом документе рассматриваются некоторые наиболее важные
-изменения, которые следует понимать и учитывать при разработке приложений.
-
-</p>
-
-<p>
- Если вы ранее публиковали приложения для Android, то примите во внимание,
-что эти изменения в платформе могут повлиять на работу ваших уже опубликованных приложений.
-</p>
-
-
-<h2 id="perf">Повышение производительности</h2>
-
-<p>
- Изменения в работе системы Android N нацелены на более экономное использование заряда аккумулятора
-и оперативной памяти, а также на повышение производительности приложений. Эти изменения могут повлиять
-на системные уведомления и доступность системных ресурсов для вашего приложения. Вам следует
-ознакомиться с этими изменениями и оценить, какие исправления могут понадобиться вашему приложению для соответствия этим изменениям.
-
-</p>
-
-<h3 id="doze">Режим Doze</h3>
-
-<p>
- Появившийся в Android 6.0 (уровень API 23), режим Doze экономит заряд аккумулятора,
-откладывая процессорные и сетевые операции, когда устройство находится не на зарядке,
-оно неподвижно, и его экран погашен. Android N расширяет возможности
-режима Doze, применяя частичный набор процессорных и сетевых ограничений
-в тех случаях, когда устройство находится не на зарядке, с погашенным экраном, но не обязательно неподвижно,
-например, когда оно находится в кармане пользователя.
-</p>
-
-
-<img src="{@docRoot}preview/images/doze-diagram-1.png" alt="" height="251px" id="figure1" />
-<p class="img-caption">
- <strong>Рис. 1.</strong> Иллюстрация применения первого уровня ограничений активности системы в режиме Doze
-для экономии заряда аккумулятора.
-</p>
-
-<p>
- Когда устройство питается от аккумулятора и его экран отключен в течение некоторого промежутка времени,
-устройство переходит в режим Doze и применяет первый частичный набор ограничений: закрывается доступ приложений
-к сети, откладывается выполнение заданий и синхронизации. Если устройство
-остается неподвижным в течение определенного времени после перехода в режим Doze, система применяет
-остальные ограничения Doze для {@link android.os.PowerManager.WakeLock},
-оповещений {@link android.app.AlarmManager}, сканирования GPS и Wi-Fi. Независимо от того, были применены
-все или только некоторые ограничения режима Doze, устройство периодически пробуждается на короткий промежуток времени,
-в течение которого приложениям разрешается сетевой доступ
-и выполнение отложенных заданий или синхронизации.
-</p>
-
-
-<img src="{@docRoot}preview/images/doze-diagram-2.png" alt="" id="figure2" />
-<p class="img-caption">
- <strong>Рис. 2.</strong> Иллюстрация применения второго уровня ограничений активности системы в режиме Doze
-после того, как устройство неподвижно в течение определенного времени.
-</p>
-
-<p>
- Следует отметить, что включение экрана или подключение к источнику питания приводит
-к выходу устройства из режима Doze и
-снимает эти ограничения обработки. Эти дополнительные особенности поведения
-не влияют на советы и рекомендации по адаптации приложений к предыдущей
-версии режима Doze из Android 6.0 (уровень API 23), которые были рассмотрены в документе
-<a href="{@docRoot}training/monitoring-device-state/doze-standby.html">Оптимизация для режима Doze и режима ожидания для приложений</a>.
-Вы должны следовать этим рекомендациям (например, использовать Google Cloud Messaging (GCM)
-для отправки и получения сообщений) и приступить к планированию обновлений для соответствия дополнительному поведению режима
-Doze.
-</p>
-
-
-<h3 id="bg-opt">Проект Svelte: оптимизация фоновых процессов</h3>
-
-<p>
- В Android N удалены три неявных широковещательной рассылки с целью оптимизации
-потребления памяти и энергии. Причиной этого изменения стало то, что неявные
-широковещательные рассылки часто запускали приложения, которые прослушивали их в
-фоновом режиме. Удаление этих рассылок может существенно улучшить производительность устройства
-и работу интерфейса пользователя.
-</p>
-
-<p>
- На мобильных устройствах часто могут происходить изменения подключения, например, при переключении
-между Wi-Fi и мобильным трафиком. Сейчас приложения могут следить за изменениями
-подключения, зарегистрировавшись в качестве получателя для неявных широковещательных рассылок {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION} в своем манифесте.
-Поскольку для получения этих рассылок регистрируются многие приложения, каждое
-переключение сети может вызвать их активацию и одновременную обработку рассылки.
-
-</p>
-
-<p>
- Подобным образом приложения могут регистрироваться для получения неявных широковещательных рассылок {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} и {@link
- android.hardware.Camera#ACTION_NEW_VIDEO} от других приложений, например от камеры.
-Когда пользователь делает снимок с помощью приложения камеры, эти приложения активируются
-для обработки широковещательной рассылки.
-</p>
-
-<p>
- Для устранения этих проблем Android N применяет следующие
-способы оптимизации.
-</p>
-
-<ul>
- <li>Приложения для Android N не получают широковещательные рассылки {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION}, даже если в их манифесте
-указаны требования получения уведомлений об этих событиях. Приложения в активном режиме
-могут следить за событиями {@code CONNECTIVITY_CHANGE} в своем
-основном потоке, если они запрашивают уведомление через {@link
- android.content.BroadcastReceiver}.
- </li>
-
- <li>Приложения не могут отправлять или получать широковещательные рассылки {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} и {@link
- android.hardware.Camera#ACTION_NEW_VIDEO}. Эта оптимизация влияет на все приложения, включая те, которые не предназначены для Android N.
-
- </li>
-</ul>
-
-<p>
- В будущих выпусках Android могут быть отменены другие неявные широковещательные рассылки,
-а также отменена привязка некоторых фоновых служб. Поэтому следует избегать зависимостей
-(или удалить их) в виде объявленных в манифесте получателей неявных широковещательных рассылок
-или фоновых служб.
-</p>
-
-<p>
- Платформа Android предоставляет несколько решений, позволяющих отказаться от таких
-неявных широковещательных рассылок или фоновых служб. Например, в API {@link
- android.app.job.JobScheduler} реализован надежный механизм планирования сетевых операций,
-который запускается при выполнении определенных условий, например при подключении к безлимитной сети. Вы можете даже использовать {@link
- android.app.job.JobScheduler}, чтобы реагировать на изменения поставщиков контента.
-
-</p>
-
-<p>
- Дополнительная информация об этом изменении в работе системы и соответствующей
-адаптации приложений содержится в документе <a href="{@docRoot}preview/features/background-optimization.html">Оптимизация фоновых процессов</a>.
-
-</p>
-
-
-<h2 id="perm">Изменения разрешений</h2>
-
-<p>
- В Android N внесены изменения разрешений, которые могут повлиять на ваше приложение,
-включая разрешения учетных записей пользователей и новое разрешение на запись
-во внешнем хранилище. Ниже приводится краткое описание разрешений, измененных в
-предварительной версии.
-</p>
-
-<ul>
- <li>{@code GET_ACCOUNTS} (устарело)
- <p>
- Разрешение GET_ACCOUNTS теперь считается устаревшим. Система игнорирует это разрешение
-для приложений, разработанных для Android N.
- </p>
- </li>
-
-</ul>
-
-
-
-<h2 id="accessibility">Улучшенные специальные возможности</h2>
-
-<p>
- В Android N внесены изменения, которые должны сделать платформу более удобной для пользователей
-со слабым или нарушенным зрением. Эти изменения в целом
-не требуют исправления кода вашего приложения, однако вам следует проверить их
-и протестировать на своем приложении, чтобы оценить их возможное влияние на интерфейс
-пользователя.
-</p>
-
-
-<h3 id="screen-zoom">Масштабирование экрана</h3>
-
-<p>
- Android N позволяет пользователям установить параметр <strong>Display size</strong>, который увеличивает или уменьшает
-все элементы на экране, делая таким образом устройство более удобным
-для пользователей со слабым зрением. Пользователи не могут масштабировать экран до ширины менее
-<a href="http://developer.android.com/guide/topics/resources/providing-resources.html"> sw320dp</a> (ширина экрана Nexus 4, обычного телефона среднего размера).
-
-</p>
-
-<div class="cols">
-
-<div class="col-6">
- <img src="{@docRoot}preview/images/screen-zoom-1.png" alt="" height="XXX" id="figure1" />
-</div>
-<div class="col-6">
- <img src="{@docRoot}preview/images/screen-zoom-2.png" alt="" height="XXX" id="figure1" />
-</div>
-
-</div> <!-- end cols -->
-<p class="img-caption">
- <strong>Рис. 3.</strong> На экране справа показан эффект
-увеличения параметра Display size на устройстве под управлением Android N.
-</p>
-
-
-<p>
- При изменении плотности экрана устройства система уведомляет запущенные приложения следующим способами.
-
-</p>
-
-<ul>
- <li>Если приложение предназначено для API уровня 23 или ниже, система автоматически завершает
-все его фоновые процессы. Это означает, что если пользователь переходит из такого приложения
-на экран <em>Settings</em> и изменяет параметр
-<strong>Display size</strong>, то система завершает работу приложения таким же образом,
-как в случае нехватки памяти. Если у приложения имеются процессы, работающие в активном режиме,
-система уведомляет эти процессы об изменении конфигурации согласно описанию в документе
-<a href="{@docRoot}guide/topics/resources/runtime-changes.html">Обработка изменений
-в режиме выполнения</a>, как в случае изменения ориентации устройства.
- </li>
-
- <li>Если приложение разработано для Android N, все его процессы
-(активные и фоновые) уведомляются об изменении конфигурации, как это описано в документе
-<a href="{@docRoot}guide/topics/resources/runtime-changes.html">Обработка изменений в режиме выполнения</a>.
-
- </li>
-</ul>
-
-<p>
- Большинству приложений не требуются какие-либо изменения для поддержки этой возможности при условии,
-что эти приложения соответствуют рекомендациям по разработке для Android. Необходимо проверить следующие моменты.
-</p>
-
-<ul>
- <li>Протестируйте свое приложение на устройстве с шириной экрана <code><a href=
- "{@docRoot}guide/topics/resources/providing-resources.html">sw320dp</a></code>
-и убедитесь в его корректной работе.
- </li>
-
- <li>При изменении конфигурации устройства обновите в кэше все данные, зависящие от плотности экрана,
-такие как кэшированные растровые изображения или ресурсы, загруженные из сети.
-Проверьте изменения конфигурации, когда приложение возобновляет свою работу после паузы.
-
- <p class="note">
- <strong>Примечание.</strong> Если вы кэшируете данные, зависящие от конфигурации, рекомендуется
-добавить к ним релевантные метаданные, описывающие, например, подходящий размер экрана
-или плотность пикселей для этих данных. Эти метаданные помогут решить,
-нужно ли обновлять кэшированные данные после изменения конфигурации.
-
- </p>
- </li>
-
- <li>Избегайте указания абсолютных размеров в пикселях, поскольку они не масштабируются вместе с изменением плотности экрана.
-Вместо этого указывайте размеры в <a href="{@docRoot}guide/practices/screens_support.html">независимых от плотности пикселях</a> (<code>dp</code>).
-
- </li>
-</ul>
-
-<h3 id="vision-settings">Vision Settings в мастере настройки</h3>
-
-<p>
- В Android N появились настройки Vision Settings на экране приветствия, где пользователи могут установить
-следующие параметры специальных возможностей на новом устройстве:
-<strong>Magnification gesture</strong>, <strong>Font size</strong>,
-<strong>Display size</strong> и <strong>TalkBack</strong>. В результате этого изменения
-становятся более заметными ошибки, связанные с различными настройками экрана. Чтобы
-оценить влияние этой функции, следует протестировать свое приложение, включив эти настройки
-на экране <strong>Settings >
-Accessibility</strong>.
-</p>
-
-<h2 id="ndk">Связь приложений NDK с библиотеками платформы</h2>
-
-<p>
- В Android N внесены изменения пространства имен, предотвращающие загрузку закрытых API-интерфейсов.
-Если вы используете NDK, то вы должны использовать только открытые API-интерфейсы платформы Android.
-Использование закрытых API в следующем официальном выпуске Android
-может привести к ошибке и завершению работы приложения.
-</p>
-
-<p>
- Чтобы предупредить вас об использовании закрытых API, приложения, запущенные на устройстве с Android N,
-создают сообщение об ошибке в журнале устройства (logcat) при вызове закрытого API.
-Эта ошибка также отображается на экране устройства в виде сообщения, информирующего о ситуации.
-Вам следует проверить код приложения, отказаться от применения
-закрытых API и тщательно протестировать приложение на
-тестовом устройстве или эмуляторе.
-</p>
-
-<p>
- Если ваше приложение зависит от библиотек платформы, ознакомьтесь в документации NDK
-со стандартными способами замены общих закрытых API их открытыми эквивалентами.
-Вы можете ссылаться на библиотеки платформы, не замечая этого,
-особенно если ваше приложение использует библиотеку, которая является частью платформы (например,
-<code>libpng</code>), но не входит в состав NDK. В этом случае убедитесь, что ваш
-пакет APK содержит все файлы .so, на которые вы намеревались ссылаться.
-</p>
-
-<p class="caution">
- <strong>Внимание!</strong> Некоторые сторонние библиотеки могут ссылаться на закрытые
-API. Приложение, использующее такие библиотеки, может завершиться с ошибкой при запуске в следующем
-официальном выпуске Android.
-</p>
-
-<p>
- Приложения не должны зависеть от библиотек платформы (или использовать их), которые не входят в состав
-NDK, поскольку эти библиотеки могут изменяться или отсутствовать в разных выпусках Android.
-Примером такого изменения может служить переход от OpenSSL к BoringSSL.
-Разные устройства также могут обладать разными уровнями совместимости, поскольку
-для библиотек платформы, не включенных в
-NDK, отсутствуют требования к совместимости. Если вам необходимо обратиться к библиотекам не из состава NDK на более старых устройствах, эту загрузку следует
-сделать зависимой от уровня Android API.
-</p>
-
-<p>
- Для помощи в диагностике проблем подобного рода ниже приведены несколько примеров ошибок Java и NDK,
-с которым вы можете столкнуться при создании приложения для Android N.
-</p>
-
-<p>Пример ошибки Java:</p>
-<pre class="no-pretty-print">
-java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so"
- is not accessible for the namespace "classloader-namespace"
-</pre>
-
-<p>Пример ошибки NDK:</p>
-<pre class="no-pretty-print">
-dlopen failed: cannot locate symbol "__system_property_get" referenced by ...
-</pre>
-
-
-<p>
- Ниже приведены некоторые стандартные способы устранения подобных ошибок в приложениях.
-</p>
-
-<ul>
- <li>Использование getJavaVM и getJNIEnv из libandroid_runtime.so может быть заменено
-стандартными функциями JNI:
-<pre class="no-pretty-print">
-AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h>
-AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or
-JavaVM::AttachCurrentThread from <jni.h>.
-</pre>
- </li>
-
- <li>Использование символа {@code property_get} из {@code libcutils.so} может быть
-заменено открытой альтернативой {@code __system_property_get}.
-Для этого используйте {@code __system_property_get} со следующим включением include:
-<pre>
-#include <sys/system_properties.h>
-</pre>
- </li>
-
- <li>Использование символа {@code SSL_ctrl} из {@code libcrypto.so} должно быть заменено локальной версией.
-Например, вы должны статически связать
-{@code libcyrpto.a} в своем файле {@code .so} или динамически включить в свое приложение собственную библиотеку
-{@code libcrypto.so} из BoringSSL или OpenSSL.
- </li>
-</ul>
-
-<h2 id="afw">Android for Work</h2>
-<p>
- Android N содержит изменения для приложений, предназначенных для Android for Work, включая изменения установки сертификата,
-сброса пароля, управления вторичным пользователем,
-и доступа к идентификаторам устройства. Если вы создаете приложение для среды
-Android for Work, вам следует ознакомиться с этими изменениями и откорректировать
-приложение соответствующим образом.
-</p>
-
-<ul>
- <li>Вы должны установить делегированный установщик сертификатов, прежде чем DPC сможет его настроить.
- Для приложений владельца профиля и устройства, разработанных под N SDK, необходимо установить
- делегированный установщик сертификатов, прежде чем контроллер политик устройства
-(DPC) вызовет метод
-<code>DevicePolicyManager.setCertInstallerPackage()</code>. В случае отсутствия установщика
-система выдаст ошибку
-<code>IllegalArgumentException</code>.
- </li>
-
- <li>Ограничения сброса пароля для администраторов устройства теперь применяются для владельцев
-профиля. Администраторы устройства более не могут использовать
-<code>DevicePolicyManager.resetPassword()</code> для сброса или изменения
-установленных паролей. Администраторы по-прежнему могут установить пароль, но только тогда, когда для устройства не установлен
-пароль, PIN-код или графический шаблон.
- </li>
-
- <li>Владельцы устройства и профиля могут управлять учетными записями даже при наличии ограничений.
-Они могут вызывать API-интерфейсы управления учетными записями
-даже при установленных ограничениях пользователя <code>DISALLOW_MODIFY_ACCOUNTS</code>.
- </li>
-
- <li>Владельцам устройства стало проще управлять дополнительными пользователями. Когда устройство
-находится в режиме владельца устройства, автоматически включается ограничение <code>DISALLOW_ADD_USER</code>.
-Это предотвращает создание неуправляемых дополнительных пользователей.
-Кроме того, прекращено использование методов <code>CreateUser()</code> и
-<code>createAndInitial()</code>, которые заменены новым методом
-<code>DevicePolicyManager.createAndManageUser()</code>.
- </li>
-
- <li>Владельцы устройства получили доступ к идентификаторам устройства. Владелец устройства может получить MAC-адрес
-Wi-Fi для устройства, используя метод
-<code>DevicePolicyManagewr.getWifiMacAddress()</code>. Если интерфейс Wi-Fi никогда не включался
-на устройстве, этот метод возвращает значение {@code null}.
- </li>
-</ul>
-
-<p>
- Дополнительная информация об изменениях Android for Work в Android N содержится в документе
-<a href="{@docRoot}preview/features/afw.html">Обновления Android for Work</a>.
-</p>
-
-<h2 id="other">Другие важные моменты</h2>
-
-<ul>
-<li>Процесс приложения, запущенного под Android N, но разработанного для API более низкого уровня,
-завершается, если пользователь изменяет размер экрана. Приложение
-должно корректно обработать такой сценарий. В противном случае оно завершится с ошибкой, если пользователь
-запустит его с экрана последних задач.
-
-<p>
-Вы должны протестировать свое приложение и убедиться,
-что оно не будет работать подобным образом.
-Для этого можно вызвать аналогичную ошибку,
-принудительно завершив процесс приложения через DDMS.
-</p>
-
-<p>
-Приложения для N и последующих версий Android не завершаются автоматически при изменении плотности экрана,
-однако они могут плохо реагировать на изменения конфигурации.
-</p>
-</li>
-
-<li>
-Приложения для Android N должны уметь корректно обрабатывать изменения конфигурации
-и не должны завершаться с ошибкой при последующих запусках. Вы можете проверить поведение приложения,
-изменив размер шрифта (<strong>Setting</strong> >
-<strong>Display</strong> > <strong>Font size</strong>) и перезапустив затем приложение
-с экрана последних задач.
-</li>
-</ul>
-
diff --git a/docs/html-intl/intl/ru/preview/download.jd b/docs/html-intl/intl/ru/preview/download.jd
deleted file mode 100644
index 3af4a5a..0000000
--- a/docs/html-intl/intl/ru/preview/download.jd
+++ /dev/null
@@ -1,550 +0,0 @@
-page.title=Тестирование на устройстве
-meta.tags="предварительная версия", "nexus","образ системы"
-page.tags="preview", "androidn"
-page.image=images/cards/card-n-downloads_2x.png
-
-@jd:body
-
-<div style="position:relative; min-height:600px">
-
- <div class="wrap" id="tos" style="position:absolute;display:none;width:inherit;">
-
- <p class="sdk-terms-intro">Прежде чем приступить к загрузке и установке компонентов
-пакета SDK для Android Preview, примите следующие положения и
-условия.</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, если такие доступны) передается в соответствии с положениями настоящего Лицензионного соглашения. Настоящее Лицензионное соглашение является юридически обязывающим договором между компанией Google и любым лицом, использующим Preview.
-
-1.2. В настоящем Лицензионном соглашении термин "Android" означает набор программного обеспечения Android для устройств, предлагаемый к использованию в рамках проекта Android Open Source Project, который доступен на веб-сайте http://source.android.com/ (сведения, размещенные на этом сайте, могут периодически обновляться).
-
-1.3 "Совместимость с Android" означает любую реализацию Android, которая (i) соответствует документу "Определение совместимости с Android", доступному на веб-сайте о совместимости Android (http://source.android.com/compatibility), где оно периодически обновляется; а также (ii) успешно прошедшему проверку с помощью пакета Android Compatibility Test Suite (CTS).
-
-1.4. Под термином "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 Вы не должны использовать Preview для разработки приложений для других платформ (включая несовместимые реализации Android) или для разработки других SDK. У вас есть право разрабатывать приложения для других платформ (включая несовместимые реализации Android) при условии, что Preview не используется для этих целей.
-
-3.3. Вы соглашаетесь с тем, что Google или третьим сторонам принадлежат все юридические и имущественные права, а также правовой интерес в отношении Preview, в том числе любые права на объекты интеллектуальной собственности, которые имеются в Preview. Термин "Права на интеллектуальную собственность" означает все возможные права в рамках патентного права, авторского права, закона о коммерческой тайне, закона о товарных знаках, а также иные возможные имущественные права. Google оставляет за собой все права, не предоставленные вам в явном виде.
-
-3.4. Вам запрещается использовать Preview в любых целях, которые однозначно не определены в настоящем Лицензионном соглашении. За исключением случаев, предусмотренных применимыми сторонними лицензиями, вам запрещается: (a) копировать (за исключением резервного копирования), изменять, адаптировать, повторно распространять, декомпилировать, осуществлять инженерный анализ, деассемблировать или создавать производные элементы Preview или иной его части; а также (b) загружать любую часть Preview в мобильные телефоны или иные устройства, помимо персонального компьютера, объединять любые части Preview с другим программным обеспечением, распространять любое программное обеспечение или устройства, содержащие части 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 будет прекращена после выпуска официальной версии пакета Android SDK.
-
-Ваши учетные данные разработчика
-
-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 выпускает окончательную версию 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. В максимально допустимой законом степени вы соглашаетесь защищать, освобождать от ответственности и возможных претензий компанию 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="#device-preview">Настройка устройства</a>
- <ol>
- <li><a href="#ota">Получение обновлений по беспроводной связи</a></li>
- <li><a href="#flash">Запись во флэш-память устройства вручную</a></li>
- <li><a href="#revertDevice">Удаление</a></li>
- </ol>
- </li>
- <li><a href="#setupAVD">Настройка эмулятора</a></li>
- </ol>
- </div>
-</div>
-
-<p>
- Для запуска и тестирования приложения на новой платформе необходимо настроить среду выполнения Android N
-. Это можно выполнить одним из следующих способов:
-</p>
-
-<ul>
- <li>установить Android N на поддерживаемом устройстве;</li>
- <li>настроить эмулятор Android с операционной системой Android N.</li>
-</ul>
-
-<p>
- Если вы хотите выполнить просто тестирование совместимости приложения и
-новой платформы, вам нужен только текущий APK и устройство или
-эмулятор. Для простого тестирования не требуется обновлять всю среду
-разработки.
-</p>
-
-<p>
- Если вы хотите изменить приложение, сделав Android N целевой ОС, или использовать новые API-интерфейсы Android N,
-необходимо настроить среду разработки, которая поддерживает
-Android N. <a href="{@docRoot}preview/setup-sdk.html">Настройка в целях разработки для
-Android N</a> имеет ряд особенностей.
-</p>
-
-
-<h2 id="device-preview">Настройка устройства</h2>
-
-<p>
- Программа N Developer Preview предлагает системные обновления,
-которые можно использовать для тестирования приложений на различных устройствах: от телефонов до планшетов и телевизоров.
-</p>
-
-<p>
- Если у вас есть поддерживаемое устройство, вы сможете обновить его до ключевой сборки Developer
-Preview одним из следующих способов.
-</p>
-
-<ul>
- <li><strong>Зарегистрируйте устройство для получения автоматических обновлений системы по беспроводной связи</strong> в рамках
-<a href="https://g.co/androidbeta">программы бета-тестирования Android</a>. После регистрации ваше устройство будет регулярно получать
-по беспроводной связи обновления всех ключевых сборок в N Developer Preview. Такой
-способ рекомендуется потому, что он обеспечивает простой переход с текущей
-среды с помощью различных выпусков N Developer Preview.</li>
- <li><strong>Загрузите системный образ Developer Preview и запишите его во флэш-память устройства</strong>.
-Обновления по беспроводной связи не предоставляются для устройств, запись во флэш-память которых выполнялась вручную, но такие
-устройства можно зарегистрировать в программе бета-тестирования Android для получения обновлений по беспроводной связи. </li>
-</ul>
-
-<h3 id="ota">Регистрация устройства для получения автоматических обновлений по беспроводной связи</h3>
-
-<p>
- Если у вас есть поддерживаемое устройство (см. список в таблице "Загрузки"),
-вы можете получать обновления предварительных версий Android по беспроводной связи,
-зарегистрировав устройство в <a href="https://g.co/androidbeta">программе бета-тестирования Android</a>. Эти обновления автоматически
-загружаются и устанавливаются на устройство как официальные
-системные обновления.
-</p>
-
-<p>
- Отменить регистрацию устройства можно в любое время. Устройство будет по беспроводной связи получать последнюю
-версию Android, доступную для него
-(например, Android 6.0 Marshmallow). Для обновления потребуется полный сброс
-настроек устройства в целях удаления с устройства всех данных пользователя. Перед отменой регистрации устройства <strong>выполните резервное копирование
-наиболее важных данных</strong>.
-</p>
-
-<p>
- Для получения дополнительной информации по регистрации устройства см.
-веб-сайт <a href="https://g.co/androidbeta">программы бета-тестирование Android</a>.
-</p>
-
-<p class="note"><strong>Примечание.</strong>
-Для отмены регистрации требуется полный сброс настроек устройства. Выполните
-резервное копирование наиболее важных данных.
-</p>
-
-<h3 id="flash">Запись во флэш-память устройства вручную</h3>
-
-<p>
- В любое время вы можете загрузить последний системный образ Developer Preview и
-вручную записать его во флэш-память устройства. См. информацию в следующей таблице, чтобы загрузить системный образ
-для своего тестового устройства. Запись вручную во флэш-память устройства удобна, если требуется
-точное управление средой тестирования или частая переустановка,
-например при автоматическом тестировании.
-</p>
-
-<!-- You can flash by ota or system image --><p>
- При установке системного образа <strong>с устройства будут удалены все
-данные</strong>, поэтому сначала необходимо выполнить резервное копирование данных.
-</p>
-
-<p>
- После резервного копирования данных устройства и загрузки системного образа,
- соответствующего этому устройству, выполните инструкции, которые приведены по адресу <a href="https://developers.google.com/android/nexus/images#instructions">developers.google.com/android</a>,
-чтобы записать этот образ во флэш-память устройства.
-</p>
-
-<p>
- Записанные вручную системные образы <strong>не
-получают автоматические обновления</strong> ключевых сборок Developer Preview
-по беспроводной связи. Регулярно обновляйте свою среду и выполняйте запись
-нового системного образа во флэш-память устройства при каждом выпуске ключевой сборки Developer Preview.
-</p>
-
-<p>
- Если вы захотите получить обновления по беспроводной связи после записи на устройство вручную,
-вам нужно просто зарегистрировать устройство в <a href="https://g.co/androidbeta">программе
-бета-тестировании Android</a>. Вы можете зарегистрировать устройство в любое время для получения следующего обновления предварительной версии
-по беспроводной связи.
-</p>
-
-<table>
- <tr>
- <th scope="col">Устройство</th>
- <th scope="col">Файлы для загрузки и контрольные суммы</th>
- </tr>
-
- <tr id="bullhead">
- <td>Nexus 5X <br>"bullhead"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >bullhead-npd90g-factory-7a0ca1bc.tgz</a><br>
- MD5: e7a9a3061335c1e0c8be2588f13290af<br>
- SHA-1: 7a0ca1bcfa51bbefde34243603bc79c7dec214a1
- </td>
- </tr>
-
- <tr id="shamu">
- <td>Nexus 6 <br>"shamu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >shamu-npd90g-factory-f7a4e3a9.tgz</a><br>
- MD5: 2fb572ddcfca67bb1d741be97492a9ed<br>
- SHA-1: f7a4e3a96c797827492998e855c8f9efbfc8559a
- </td>
- </tr>
-
- <tr id="angler">
- <td>Nexus 6P <br>"angler"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >angler-npd90g-factory-cd9ac81e.tgz</a><br>
- MD5: 2370c30f3ef1d0684c1de5216a5d90fe<br>
- SHA-1: cd9ac81ec7f4a646ac6054eecbf2ea4c4b89b054
- </td>
- </tr>
-
- <tr id="volantis">
- <td>Nexus 9 <br>"volantis"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantis-npd90g-factory-41b55406.tgz</a><br>
- MD5: cefa78950141da2a7c75e887717e3c8f<br>
- SHA-1: 41b554060263a7ef16e4be8422cbd6caca26e00f
- </td>
- </tr>
-
- <tr id="volantisg">
- <td>Nexus 9G <br>"volantisg"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantisg-npd90g-factory-610492be.tgz</a><br>
- MD5: 2f36dc0d0fab02ab78be500677ec239f<br>
- SHA-1: 610492bedfc4127023040ecb2c89239a78a900ad
- </td>
- </tr>
-
- <tr id="fugu">
- <td>Nexus Player <br>"fugu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >fugu-npd90g-factory-0fe95694.tgz</a><br>
- MD5: f4cb48f919e4c29c631de21416c612e2<br>
- SHA-1: 0fe95694e7bc41e4c3ac0e4438cd77102a0aa8b4
- </td>
- </tr>
-
- <tr id="ryu">
- <td>Pixel C <br>"ryu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >ryu-npd90g-factory-f4da981c.tgz</a><br>
- MD5: d9f0e40b6c20d274831e8a7d285fd887<br>
- SHA-1: f4da981c70576133321e2858e52fe2c990e68a75
- </td>
- </tr>
-
- <tr id="seed">
- <td>General Mobile 4G (Android One) <br>"seed"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >seed_l8150-npd90g-factory-48f59c99.tgz</a><br>
- MD5: 0ed565c509594072822d71c65b48ec8e<br>
- SHA-1: 48f59c99ac43d1cd2f5656a283bb9868581663a8
- </td>
- </tr>
-
-</table>
-
-<h3 id="revertDevice">Удаление предварительной версии с устройства</h3>
-
-<p>
- Удаление предварительной версии с устройства можно выполнить одним из
-следующих способов. </p>
- <ul>
- <li><strong>Получить заводской образ системы</strong> и вручную
-записать его во флэш-память устройства.
- <ul>
- <li>При использовании <strong>устройств Nexus и Pixel C</strong> ссылки для загрузки см. на странице
-<a href="http://developers.google.com/android/nexus/images">Заводские образы
-для устройств Nexus</a>. </li>
- <li>Для <strong>других устройств</strong> обратитесь напрямую к производителю устройства.
- Если устройство поддерживается
-программой бета-тестирования Android, вы можете зарегистрировать его для
-участия в программе, а затем, если потребуется, отменить регистрацию (см. ниже).</li>
- </ul>
- </li>
- <li><strong>Отмена регистрации устройства в программе бета-тестировании Android</strong>. Если
-устройство зарегистрировано в <a href="https://g.co/androidbeta">программе бета-тестировании
-Android</a>, можно в любое время отменить регистрацию независимо от типа устройства.
- <p>
- Устройство будет получать по беспроводной связи последнюю версию
-Android, доступную для устройства (например, Android 6.0 Marshmallow).
- Для обновления требуется полный сброс настроек устройства в целях удаления с устройства
-всех данных пользователя. Поэтому перед отменой регистрации устройства <strong>выполните резервное копирование наиболее важных данных</strong>.
-
- </p>
- </li>
-</ul>
-
-<p class="note"><strong>Примечание.</strong>
-Удаление системного образа Developer Preview до
-завершения программы требует полного сброса настроек устройства и приводит к удалению всех данных пользователя
-на этом устройстве.
-</p>
-
-
-<h2 id="setupAVD">Настройка эмулятора</h2>
-
-<p>Чтобы использовать эмулятор Android для запуска Android N Preview, необходимо
-загрузить Android N Preview SDK и создать виртуальное устройство для
-эмулятора.</p>
-
-<p>Сначала загрузите Android N Preview SDK, сделав это следующим образом (если вы получили его
-во время <a href="{@docRoot}preview/setup-sdk.html">настройки
-в целях разработки для Android N</a>, этот шаг можно пропустить).
-
-<ol>
- <li>В Android Studio откройте окно "Settings"
-(<strong>File > Settings</strong> в Windows/Linux или
-<strong>Android Studio > Preferences</strong> для Mac). В левой
-панели выберите <strong>Appearance & Behavior >
-System Settings > Android SDK</strong>.
-
- <li>Перейдите на вкладку <strong>SDK Platforms</strong> и установите флажок
-<strong>Android N Preview</strong>.</li>
-
- <li>Откройте вкладку <strong>SDK Tools</strong> и затем установите флажки
-<strong>Android SDK Build Tools</strong>, <strong>Android SDK
-Platform-Tools</strong>, <strong>Android SDK Tools</strong>.
-
- </li>
-
- <li>Нажмите <strong>OK</strong> и примите лицензионные
-соглашения для всех устанавливаемых пакетов.
- </li>
-</ol>
-
-<p>У вас должны быть пакеты <strong>Android SDK Built-Tools 24.0 0 rc1</strong>,
-<strong>Platform-Tools 24.0.0 rc1</strong> и <strong>SDK Tools
-25.0.9</strong>. Если вы не обновите SDK Tools до версии 25.0.9, вы не сможете
-запустить системный образ x86_64 для Android N.</p>
-
-
-<p>Теперь необходимо создать виртуальное устройство с системным образом Android N.</p>
-
-<ol>
- <li>Откройте AVD Manager, выбрав <strong>Tools > Android >
-AVD Manager</strong>.</li>
- <li>Нажмите <strong>Create Virtual Device</strong>.</li>
- <li>Выберите устройство, например: Nexus 5X, Nexus 6P, Nexus 9 или Android TV,
-затем нажмите <strong>Next</strong>.</li>
- <li>Выберите системный образ <strong>N</strong> (с
-<strong>x86</strong> ABI), затем нажмите <strong>Next</strong>.
-(Эмулятором Android в настоящий момент поддерживаются только системные образы x86
-для Android N Preview.)
- <li>Выполните остальные настройки конфигурации AVD и нажмите
-<strong>Finish</strong>.</li>
-</ol>
-
-<p>Теперь можно запустить эмулятор Android с Android N Preview AVD.</p>
-
-<p>
-Для обеспечения эффективной работы эмулятора Android установите
-Android Studio 2.1 Preview с поддержкой <a href="http://tools.android.com/tech-docs/emulator">Android Emulator 2.0 Beta</a>,
-который обеспечивает более высокую производительность по сравнению с эмулятором в
-Android Studio 1.5.</p>
-
-<p class="note"><strong>Примечание.</strong>
-Если вы используете Android Studio 2.0 Beta, в нем есть известная неисправность,
-которая не позволяет создавать AVD с системными образами N Preview, поэтому вам потребуется
-использовать Android Studio 2.1 Preview для создания AVD.
-</p>
-
-<p>Для получения дополнительной информации о создании виртуальных устройств см. страницу <a href="{@docRoot}tools/devices/index.html">Управление виртуальными устройствами</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/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/direct-boot.jd b/docs/html-intl/intl/ru/preview/features/direct-boot.jd
deleted file mode 100644
index 3392c13..0000000
--- a/docs/html-intl/intl/ru/preview/features/direct-boot.jd
+++ /dev/null
@@ -1,181 +0,0 @@
-page.title=Режим Direct Boot
-page.keywords=preview,sdk,direct boot
-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="#run">Запрос доступа для запуска в режиме Direct Boot</a></li>
- <li><a href="#access">Доступ к шифрованному хранилищу данных устройства</a></li>
- <li><a href="#notification">Уведомление о разблокировке пользователем</a></li>
- <li><a href="#migrating">Перенос имеющихся данных</a></li>
- <li><a href="#testing">Тестирование приложения с поддержкой шифрования</a></li>
- </ol>
-</div>
-</div>
-
-<p>Android N работает в защищенном режиме <i>Direct Boot,</i> когда
-устройство было включено, но не разблокировано пользователем.
- Для поддержки такого режима работы в системе имеется два хранилища данных:</p>
-
-<ul>
-<li><i>Хранилище, зашифрованное на уровне учетных данных.</i>Это хранилище используется по умолчанию
-и доступно только тогда, когда пользователь разблокирует устройство.</li>
-<li><i>Хранилище, зашифрованное на уровне устройства.</i>Это хранилище доступно в режиме
-Direct Boot и тогда, когда пользователь разблокирует устройство.</li>
-</ul>
-
-<p>По умолчанию в режиме Direct Boot приложения не работают.
-Если вашему приложению требуется выполнять какие-то действия в режиме Direct Boot, вы можете зарегистрировать
-компоненты приложения, которые должны быть запущены в этом режиме. Некоторые распространенные примеры использования
-приложений, выполняющих операции в режиме Direct Boot:</p>
-
-<ul>
-<li>Приложения с уведомлениями по расписанию, например,
-будильники.</li>
-<li>Приложения, посылающие пользователю важные уведомления, например, приложения СМС.</li>
-<li>Приложения для лиц с ограниченными возможностями, например, Talkback.</li>
-</ul>
-
-<p>Если вашему приложению требуется доступ к данным в режиме Direct Boot, используйте
-шифрованное хранилище устройства. Шифрованное хранилище устройства содержит данные,
-зашифрованные с помощью ключа, доступного только после
-успешной подтвержденной загрузки устройства.</p>
-
-<p>Если данные следует шифровать с помощью ключа, связанного с учетными данными
-пользователя (например, с PIN-кодом или паролем), используйте хранилище, требующее ввода учетных данных.
-Такое хранилище доступно только после успешной
-разблокировки устройства пользователем и до тех пор, пока пользователь не перезапустит устройство. Если
-пользователь включает экран блокировки после разблокировки устройства, шифрованное хранилище,
-требующее ввода учетных данных, не блокируется.</p>
-
-<h2 id="run">Запрос доступа для запуска в режиме Direct Boot</h2>
-
-<p>Прежде
-чем работать в режиме Direct Boot или получать доступ к шифрованному
-хранилищу устройства, приложения должны зарегистрировать свои компоненты в системе. Приложения регистрируются в системе, помечая компоненты как
-<i>поддерживающие шифрование</i>. Чтобы пометить компонент как поддерживающий шифрование, нужно установить для атрибута
-<code>android:encryptionAware</code> в манифесте значение true.<p>
-
-<p>Компоненты, поддерживающие шифрование, можно регистрировать для получения
-<code>LOCKED_BOOT_COMPLETED</code> широковещательных сообщений от
-системы после перезапуска устройства. В этот момент шифрованное хранилище устройства
-доступно, и компонент может выполнять необходимые задачи в режиме
-Direct Boot, например, включать будильник по расписанию.</p>
-
-<p>В следующем фрагменте кода приведен пример регистрации компонента
-{@link android.content.BroadcastReceiver} как поддерживающего шифрование и добавления
-фильтра намерения <code>LOCKED_BOOT_COMPLETED</code> в манифест приложения:</p>
-
-<pre>
-<receiever
- android:encryptionAware="true" >
- ...
- <intent-filter>
- <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
- </intent-filter>
-</receiver>
-</pre>
-
-<p>После разблокировки устройства пользователем все компоненты имеют доступ к шифрованному хранилищу устройства
-и к шифрованному хранилищу, требующему ввода учетных данных.</p>
-
-<h2 id="access">Доступ к шифрованному хранилищу данных устройства</h2>
-
-<p>Для получения доступа к шифрованному хранилищу устройства следует создать второй экземпляр
-{@link android.content.Context} посредством вызова
-<code>Context.createDeviceEncryptedStorageContext()</code>. Все вызовы API
-системы хранения данных с использованием этого контекста получают доступ к шифрованному хранилищу устройства. В
-следующем примере показано, как получить доступ к шифрованному хранилищу устройства и открыть существующий
-файл данных приложения:</p>
-
-<pre>
-Context directBootContext = Context.createDeviceEncryptedStorageContext();
-// Access appDataFilename that lives in device encrypted storage
-FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
-// Use inStream to read content...
-</pre>
-
-<p>Шифрованное хранилище устройства следует использовать только для
-информации, которая должна быть доступна в режиме Direct Boot.
-Шифрованное хранилище устройства не следует использовать в качестве шифрованного хранилища общего назначения.
-Для хранения данных пользователя или шифрованных данных, которые не требуются в режиме
-Direct Boot, следует использовать шифрованное хранилище, требующее ввода учетных данных.</p>
-
-<h2 id="notification">Уведомление о разблокировке пользователем</h2>
-
-<p>Когда после перезагрузки устройства пользователь разблокирует его, ваше приложение может переключиться на
-шифрованное хранилище, требующее ввода учетных данных, и использовать обычные системные службы,
-зависящие от учетных данных пользователя.</p>
-
-<p>Чтобы приложение получало уведомления о разблокировке устройства пользователем после перезагрузки,
-необходимо зарегистрировать {@link android.content.BroadcastReceiver} работающего компонента
-для отслеживания сообщения <code>ACTION_USER_UNLOCKED</code>. Также приложение может
-получать существующее сообщение {@link android.content.Intent#ACTION_BOOT_COMPLETED
-ACTION_BOOT_COMPLETED}, которое теперь указывает, что устройство загружено и разблокировано
-пользователем.</p>
-
-<p>Приложение может направлять запрос напрямую, если пользователь разблокирует устройство посредством вызова
-<code>UserManager.isUserUnlocked()</code>.</p>
-
-<h2 id="migrating">Перенос имеющихся данных</h2>
-
-<p>Если пользователь обновит свое устройство для использования режима Direct Boot, вашему приложению может потребоваться перенести
-имеющиеся данные в шифрованное хранилище устройства. Используйте
-<code>Context.migrateSharedPreferencesFrom()</code> и
-<code>Context.migrateDatabaseFrom()</code> для переноса данных о настройках и содержимого баз данных
-между шифрованным хранилищем, требующим ввода учетных данных, и шифрованным хранилищем устройства.</p>
-
-<p>Хорошо обдумайте, какие данные следует перенести из
-шифрованного хранилища, требующего ввода учетных данных, в шифрованное хранилище устройства. Не следует переносить в
-шифрованное хранилище устройства личные данные пользователя, такие как
-пароли или токены авторизации. В некоторых случаях вашему приложению может потребоваться работать
-с отдельными наборами данных в двух шифрованных хранилищах.</p>
-
-<h2 id="testing">Тестирование приложения с поддержкой шифрования</h2>
-
-<p>Протестируйте свое приложение с поддержкой шифрования в новом режиме Direct Boot. Существуют
-два способа включить режим Direct Boot.</p>
-
-<p class="caution"><strong>Внимание!</strong> При включении режима Direct Boot
-с устройства удаляются все данные пользователя.</p>
-
-<p>Чтобы включить режим
-Direct Boot на поддерживаемых устройствах с Android N, выполните одну из следующих последовательностей действий.</p>
-
-<ul>
-<li>Включите на устройстве параметры разработчика <b>Developer options</b>, если вы еще не сделали этого ранее. Для этого
-перейдите на экран <b>Settings > About phone</b> и нажмите семь раз <b>Build number</b>.
- Когда параметры разработчика станут доступны, откройте раздел
-<b>Settings > Developer options</b> и выберите
-<b>Convert to file encryption</b>.</li>
-<li>Используйте следующие команды оболочки adb для включения режима Direct Boot:
-<pre class="no-pretty-print">
-$ adb reboot-bootloader
-$ fastboot --wipe-and-use-fbe
-</pre>
-</li>
-</ul>
-
-<p>Если вам требуется переключать
-режимы на тестовых устройствах, вы можете использовать эмуляцию режима Direct Boot. Режим эмуляции следует использовать только для целей
-разработки, в нем возможна потеря данных. Чтобы включить эмуляцию режима Direct Boot,
-установите режим блокировки устройства, выберите пункт "No thanks", если система предлагает открыть
-защищенный экран запуска при установке режима блокировки, а затем используйте
-следующую команду оболочки adb:</p>
-
-<pre class="no-pretty-print">
-$ adb shell sm set-emulate-fbe true
-</pre>
-
-<p>Для отключения эмуляции режима Direct Boot нужно использовать следующую команду:</p>
-
-<pre class="no-pretty-print">
-$ adb shell sm set-emulate-fbe false
-</pre>
-
-<p>При использовании этих команд устройство перезагружается.</p>
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/multi-window.jd b/docs/html-intl/intl/ru/preview/features/multi-window.jd
deleted file mode 100644
index b45766c..0000000
--- a/docs/html-intl/intl/ru/preview/features/multi-window.jd
+++ /dev/null
@@ -1,582 +0,0 @@
-page.title=Поддержка многооконного режима
-page.metaDescription=Новые возможности в Android N для одновременного отображения нескольких приложений.
-page.keywords="multi-window", "android N", "split screen", "free-form"
-
-@jd:body
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>Содержание документа</h2>
- <ol>
- <li><a href="#overview">Обзор</a></li>
- <li><a href="#lifecycle">Жизненный цикл многооконного режима</a></li>
- <li><a href="#configuring">Настройка приложения для многооконного
- режима</a></li>
- <li><a href="#running">Запуск приложения в многооконном режиме</a></li>
- <li><a href="#testing">Тестирование приложения в многооконном режиме</a></li>
- </ol>
- <h2>См. также:</h2>
- <ol>
- <li><a class="external-link" href="https://github.com/googlesamples/android-MultiWindowPlayground">Пример
- многооконного демонстрационного приложения</a></li>
- </ol>
- </div>
-</div>
-
-<p>
- В Android N добавлена поддержка отображения нескольких приложений
- одновременно. На мобильных устройствах два приложения могут быть запущены рядом
- или друг над другом в режиме <em>разделения экрана</em>. На телевизорах приложения могут
- использовать режим <em>"картинка в картинке"</em>, чтобы воспроизводить видео,
- пока пользователи работают с другим приложением.
-</p>
-
-<p>
- Если вы создаете приложение с использованием N Preview SDK, вы можете указать, как оно
- будет действовать в многооконном режиме. Например, можно задать минимальные
- допустимые размеры окна приложения. Также можно отключить многооконный режим для приложения,
- чтобы оно отображалось только в полноэкранном
- режиме.
-</p>
-
-<h2 id="overview">Обзор</h2>
-
-<p>
- В Android N несколько приложений могут одновременно находиться на экране. Например,
- пользователь может разделить экран, чтобы просматривать веб-страницу
- слева и писать сообщение электронной почты справа. Возможности пользователя зависят от
- устройства.
-</p>
-
-<ul>
- <li>На мобильных устройствах с Android N доступен режим
- разделения экрана. В этом режиме два приложения отображаются рядом
- или друг над другом. Пользователь может перетащить
- линию разделения, чтобы увеличить окно одного приложения и уменьшить окно другого.
- </li>
-
- <li>На устройствах Nexus Player с Android N для приложений
- будет доступен <a href="picture-in-picture.html">режим "картинка в картинке"</a>, который
- позволит приложению отображать контент, пока пользователь просматривает
- другие приложения или взаимодействует с ними.
- </li>
-
- <li>Производители более крупных устройств могут активировать
- режим произвольной формы, где пользователь может любым образом изменять размер каждого окна. В этом случае
- помимо режима разделения экрана
- на устройстве будет доступен и этот режим.
- </li>
-</ul>
-
-<img src="{@docRoot}preview/images/mw-splitscreen.png" alt="" width="650" srcset="{@docRoot}preview/images/mw-splitscreen.png 1x,
- {@docRoot}preview/images/mw-splitscreen_2x.png 2x," id="img-split-screen" />
-<p class="img-caption">
- <strong>Рис. 1.</strong> Два приложения отображаются рядом в режиме разделения экрана.
-</p>
-
-<p>
- Пользователь может перейти в многооконный режим следующими способами.
-</p>
-
-<ul>
- <li>Если пользователь откроет <a href="{@docRoot}guide/components/recents.html">экран
- обзора</a> и длительно нажмет
- название операции, ее можно будет перетащить в выделенную часть
- экрана и переключить в многооконный режим.
- </li>
-
- <li>Если пользователь длительно нажмет кнопку "Обзор", устройство
- переключит текущую операцию в многооконный режим и откроет экран обзора,
- где пользователь сможет выбрать другую операцию для совместного отображения.
- </li>
-</ul>
-
-<p>
- Пользователи могут <a href="{@docRoot}guide/topics/ui/drag-drop.html">перетаскивать</a>
-данные между окнами операций в режиме
- совместного отображения. (Ранее перетаскивать данные можно было только в рамках
- одной операции).
-</p>
-
-<h2 id="lifecycle">Жизненный цикл многооконного режима</h2>
-
-<p>
- Многооконный режим не меняет <a href="{@docRoot}training/basics/activity-lifecycle/index.html">жизненный
- цикл операции</a>.
-</p>
-
-<p>
- В этом режиме в каждый момент времени активной
- является только последняя операция, с которой взаимодействовал пользователь. Такая операция считается <em>самой верхней</em>.
- Все другие операции приостановлены, даже если они отображаются.
- Однако система отдает приостановленным, но видимым операциям более
- высокий приоритет, чем невидимым. Если пользователь взаимодействует с
- одной из приостановленных операций, она возобновляется, а прежняя самая верхняя
- операция приостанавливается.
-</p>
-
-<p class="note">
- <strong>Примечание.</strong> В многооконном режиме приложение может быть приостановлено
- и по-прежнему видимо для пользователя. Приложению может потребоваться
- продолжать свои операции, даже если оно приостановлено. Например, видимое приостановленное приложение,
- воспроизводящее видео, будет по-прежнему показывать видео. Поэтому
- мы <em>не</em> рекомендуем приостанавливать воспроизведение
- в обработчиках {@link android.app.Activity#onPause onPause()} таких приложений.
- Вместо этого следует приостановить видео в {@link android.app.Activity#onStop
- onStop()} и возобновить воспроизведение в {@link android.app.Activity#onStart
- onStart()}.
-</p>
-
-<p>
- Если пользователь переводит приложение в многооконный режим, система
- уведомляет операцию об изменении конфигурации, как указано в документе <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Обработка изменений
- во время выполнения</a>. По сути это изменение так же действует
-на жизненный цикл операции, как уведомление приложения системой
-о переходе устройства из вертикальной ориентации в
- горизонтальную, только изменяются размеры экрана, а не ориентация. Как описано в документе <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Обработка изменений
- во время выполнения</a>, операция может обработать изменение
- конфигурации самостоятельно или может позволить системе
- удалить окно операции и создать его заново с новыми размерами.
-</p>
-
-<p>
- Если пользователь увеличивает одну из сторон окна, система меняет
- размер окна операции в соответствии с действием пользователя и применяет <a href="{@docRoot}guide/topics/resources/runtime-changes.html">изменения в режиме выполнения</a>
- по мере необходимости. Если приложение не успевает отрисовать новые области, система
- временно заполняет их цветом, заданным атрибутом {@link
- android.R.attr#windowBackground windowBackground} или атрибутом стиля
- <code>windowBackgroundFallback</code> по умолчанию.
-</p>
-
-<h2 id="configuring">Настройка приложения для многооконного режима</h2>
-
-<p>
- Если ваше приложение предназначено для Android N, вы
- можете указать, каким образом поддерживают (и поддерживают ли) операции вашего приложения многооконный режим. Атрибуты управления размером и макетом устанавливаются
- в манифесте.
- Настройки атрибутов корневой операции применяются
- ко всем операциям в ее стеке задач.
-</p>
-
-<p class="note">
- <strong>Примечание.</strong> Если приложение с поддержкой различной
- ориентации было создано с версией SDK,
- более ранней, чем Android N, и пользователь запустит это приложение в многооконном режиме, система принудительно изменит размер приложения. Система отображает диалоговое окно
- с предупреждением о том, что приложение может работать непредвиденным образом. Система
- <em>не</em> меняет размер окна для приложений с
- фиксированной ориентацией. Если пользователь попытается открыть такое приложение
- в многооконном режиме, оно займет весь экран.
-</p>
-
-<h4 id="resizeableActivity">android:resizeableActivity</h4>
-<p>
- Установите этот атрибут в узле <code><activity></code> или
- <code><application></code> манифеста, чтобы включить или отключить многооконный
- режим:
-</p>
-
-<pre>
-android:resizeableActivity=["true" | "false"]
-</pre>
-
-<p>
- Если для этого атрибута задано значение true, операцию можно запускать
- в режимах разделения экрана и произвольной формы. Если для атрибута задано значение false,
- операция не поддерживает многооконный режим. Если значение равно false и
- пользователь пытается запустить операцию в многооконном режиме, она
- занимает весь экран.
-</p>
-
-<p>
- Если приложение предназначено для Android N, но
-значение для этого атрибута не было указано, то по умолчанию используется значение true.
-</p>
-
-<h4 id="supportsPictureInPicture">android:supportsPictureInPicture</h4>
-
-<p>
- Установите этот атрибут в узле <code><activity></code> манифеста,
- чтобы указать, поддерживает ли операция режим "картинка в картинке". Этот
- атрибут не принимается во внимание, если для <code>android:resizeableActivity</code> установлено значение false.
-</p>
-
-<pre>
-android:supportsPictureInPicture=["true" | "false"]
-</pre>
-
-<h3 id="layout">Атрибуты макета</h3>
-
-<p>
- В Android N элемент манифеста <code><layout></code> поддерживает
- несколько атрибутов, которые определяют поведение
- операции в многооконном режиме.
-</p>
-
-<dl>
- <dt>
- <code>android:defaultWidth</code>
- </dt>
-
- <dd>
- Ширина окна операции по умолчанию в режиме произвольной формы.
- </dd>
-
- <dt>
- <code>android:defaultHeight</code>
- </dt>
-
- <dd>
- Высота окна операции по умолчанию в режиме произвольной формы.
- </dd>
-
- <dt>
- <code>android:gravity</code>
- </dt>
-
- <dd>
- Начальная позиция окна операции в режиме произвольной формы. Допустимые значения
- см. в описании класса {@link android.view.Gravity}.
- </dd>
-
- <dt>
- <code>android:minimalSize</code>
- </dt>
-
- <dd>
- Минимальные значения высоты и ширины окна операции в режимах разделения экрана
- и произвольной формы. Если пользователь перемещает разделительную линию
- в режиме разделения экрана, чтобы сделать размер окна операции
- меньше указанного минимума, система обрезает его до запрошенного пользователем размера.
- </dd>
-</dl>
-
-<p>
- В следующем примере кода показано, как задать размер и
- позицию окна операции по умолчанию, а также ее минимальный размер в
- режиме произвольной формы:
-</p>
-
-<pre>
-<activity android:name=".MyActivity">
- <layout android:defaultHeight="500dp"
- android:defaultWidth="600dp"
- android:gravity="top|end"
- android:minimalSize="450dp" />
-</activity>
-</pre>
-
-<h2 id="running">Запуск приложения в многооконном режиме</h2>
-
-<p>
- Android N предоставляет новые возможности для поддержки
- приложений в многооконном режиме.
-</p>
-
-<h3 id="disabled-features">Недоступные возможности в многооконном режиме</h3>
-
-<p>
- Некоторые возможности отключены или игнорируются в многооконном
- режиме, потому что они не имеют смысла для операции, которая отображается
- на экране устройства одновременно с другими операциями или приложениями. Ниже приведены примеры таких возможностей.
-
-<ul>
- <li>Отключены некоторые параметры настройки <a href="{@docRoot}training/system-ui/index.html">системного интерфейса</a>.
- Например, приложения не могут
- скрыть строку состояния, если они не работают в полноэкранном режиме.
- </li>
-
- <li>Система не учитывает изменения атрибута <code><a href=
- "{@docRoot}guide/topics/manifest/activity-element.html#screen"
- >android:screenOrientation</a></code>.
- </li>
-</ul>
-
-<h3 id="change-notification">Уведомления об изменениях и запросы в многооконном режиме</h3>
-
-<p>
- Для поддержки многооконного режима в класс {@link android.app.Activity}
- были добавлены следующие методы. Подробнее о каждом из них см. в
- <a href="{@docRoot}preview/setup-sdk.html#docs-dl">справочнике по N Preview SDK</a>.
-</p>
-
-<dl>
- <dt>
- <code>Activity.inMultiWindow()</code>
- </dt>
-
- <dd>
- Вызовите этот метод, чтобы узнать, находится ли операция в многооконном режиме.
- </dd>
-
- <dt>
- <code>Activity.inPictureInPicture()</code>
- </dt>
-
- <dd>
- Вызовите этот метод, чтобы узнать, находится ли операция в режиме "картинка в картинке".
-
- <p class="note">
- <strong>Примечание.</strong> Режим "картинка в картинке" — это частный
- случай многооконного режима. Если метод <code>myActivity.inPictureInPicture()</code>
- возвращает значение true, <code>myActivity.inMultiWindow()</code> также возвращает
- true.
- </p>
- </dd>
-
- <dt>
- <code>Activity.onMultiWindowChanged()</code>
- </dt>
-
- <dd>
- Система вызывает этот метод, когда операция переходит в многооконный
- режим или выходит из него. Система передает методу значение true, если
- операция входит в многооконный режим, и значение false, если
- она выходит из него.
- </dd>
-
- <dt>
- <code>Activity.onPictureInPictureChanged()</code>
- </dt>
-
- <dd>
- Система вызывает этот метод, когда операция переходит в режим
- "картинка в картинке". Система передает методу значение true,
- если операция входит в режим "картинка в картинке", и значение false,
- если она выходит из него.
- </dd>
-</dl>
-
-<p>
- Также существуют версии {@link android.app.Fragment} для этих методов,
-например, <code>Fragment.inMultiWindow()</code>.
-</p>
-
-<h3 id="entering-pip">Переход в режим "картинка в картинке"</h3>
-
-<p>
- Чтобы перевести операцию в режим "картинка в картинке",
- вызовите новый метод <code>Activity.enterPictureInPicture()</code>. Этот метод игнорируется, если
- устройство не поддерживает режим "картинка в картинке". Дополнительная информация содержится в документации
- <a href="picture-in-picture.html">Режим "картинка в картинке"</a>.
-</p>
-
-<h3 id="launch">Запуск новых операций в многооконном режиме</h3>
-
-<p>
- При запуске новой операции можно сообщить системе, что окно новой
- операции следует показать рядом с текущим, если это возможно. Для этого
- используйте флаг
- <code>Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT</code>. Этот
- флаг запрашивает следующее поведение.
-</p>
-
-<ul>
- <li>Если устройство находится в режиме разделения экрана, система пытается
- создать окно новой операции рядом с окном запустившей ее операции,
- чтобы разместить две операции на экране. Не гарантируется, что система сможет это сделать, но если
- это возможно, операции отображаются рядом друг с другом.
- </li>
-
- <li>Если устройство не находится в режиме разделения экрана, этот флаг не учитывается.
- </li>
-</ul>
-
-<p>
- Если при запуске
- новой операции устройство находится в режиме произвольной формы, вы можете задать размеры и позицию окна новой операции,
- вызвав метод <code>ActivityOptions.setLaunchBounds()</code>. Этот метод игнорируется, если
- устройство не находится в многооконном режиме.
-</p>
-
-<p class="note">
- <strong>Примечание.</strong> Если запустить операцию в стеке задач,
- она заменит операцию на экране, унаследовав все ее
- свойства многооконного режима. Чтобы запустить новую операцию в отдельном
- окне в многооконном режиме, ее следует запустить в новом стеке задач.
-</p>
-
-<h3 id="dnd">Поддержка перетаскивания</h3>
-
-<p>
- Пользователи могут <a href="{@docRoot}guide/topics/ui/drag-drop.html">перетаскивать</a> данные
- между окнами операций в режиме
- совместного отображения. (Ранее перетаскивать данные можно было только в рамках
- одной операции). Поэтому вы можете реализовать функции перетаскивания
- в своем приложении, если оно еще их не поддерживает.
-</p>
-
-<p>
- В N Preview SDK пакет <a href="{@docRoot}reference/android/view/package-summary.html"><code>android.view</code></a>
- расширен для поддержки перетаскивания между приложениями. Дополнительная информация о нижеприведенных классах
- и методах содержится в <a href="{@docRoot}preview/setup-sdk.html#docs-dl">справочнике по N
- Preview SDK</a>.
-</p>
-
-<dl>
- <dt>
- <code>android.view.DropPermissions</code>
- </dt>
-
- <dd>
- Объект токена для указания разрешений
- приложению, в которое перетаскиваются данные.
- </dd>
-
- <dt>
- <code>View.startDragAndDrop()</code>
- </dt>
-
- <dd>
- Новый псевдоним для {@link android.view.View#startDrag View.startDrag()}. Чтобы
- разрешить перетаскивание между операциями, передайте
- новый флаг <code>View.DRAG_FLAG_GLOBAL</code>. Если вам нужно предоставить принимающей операции разрешения на чтение или запись URI,
- передайте новый флаг
- <code>View.DRAG_FLAG_GLOBAL_URI_READ</code> или
- <code>View.DRAG_FLAG_GLOBAL_URI_WRITE</code> соответственно.
- </dd>
-
- <dt>
- <code>View.cancelDragAndDrop()</code>
- </dt>
-
- <dd>
- Отменяет текущую операцию перетаскивания. Этот метод может вызвать только
- приложение, в котором была инициирована операция перетаскивания.
- </dd>
-
- <dt>
- <code>View.updateDragShadow()</code>
- </dt>
-
- <dd>
- Заменяет тень текущей операции перетаскивания. Этот метод может вызвать только приложение,
- в котором была инициирована операция перетаскивания.
- </dd>
-
- <dt>
- <code>Activity.requestDropPermissions()</code>
- </dt>
-
- <dd>
- Запрашивает разрешения для URI контента, переданных в объекте {@link
- android.content.ClipData} в {@link android.view.DragEvent}.
- </dd>
-</dl>
-
-<h2 id="testing">Тестирование приложения в многооконном режиме</h2>
-
-<p>
- Независимо от того, обновляете ли вы свое приложение для Android N, вам необходимо
- подтвердить его поведение в многооконном
- режиме на тот случай, если пользователь попытается запустить его в этом режиме на устройстве с Android N.
-</p>
-
-<h3 id="configuring">Настройка тестового устройства</h3>
-
-<p>
- Если установить Android N на устройстве, режим разделения
- экрана будет поддерживаться автоматически.
-</p>
-
-<h3 id="test-non-n">Если приложение было создано без использования N Preview SDK</h3>
-
-<p>
- Если вы не применяли N Preview SDK для создания приложения и пользователь
- попытается запустить его в многооконном режиме, система принудительно
- изменит размер окна приложения, если его ориентация не зафиксирована.
-</p>
-
-<p>
- Если для приложения не задана фиксированная ориентация, вам
- следует запустить его на устройстве с Android N и попытаться
- перевести его в режим разделения экрана. Убедитесь, что приложение
- работает нормально после принудительного изменения размера.
-</p>
-
-<p>
- Если для приложения задана фиксированная ориентация, попытайтесь
- перевести его в многооконный режим. Убедитесь, что при этом
- приложение остается в полноэкранном режиме.
-</p>
-
-<h3 id="test-mw">Если приложение поддерживает многооконный режим</h3>
-
-<p>
- Если вы использовали N Preview SDK для создания приложения и не
- отключили поддержку многооконного режима, проверьте работу
- приложения, как описано далее, в режимах разделения экрана и произвольной формы.
-</p>
-
-<ul>
- <li>Запустите приложение в полноэкранном режиме, а затем переключитесь
- в многооконный режим долгим нажатием кнопки "Обзор". Убедитесь, что приложение корректно переключается между режимами.
- </li>
-
- <li>Запустите приложение непосредственно в многооконном режиме
- и убедитесь, что оно работает нормально. Вы можете запустить приложение в многооконном режиме, нажав
- кнопку "Обзор", затем длительно нажав строку заголовка приложения и
- перетащив ее в одну из выделенных областей на экране.
- </li>
-
- <li>Измените размер окна приложения в режиме разделения экрана, перетащив линию разделения.
- Убедитесь, что изменение размера не приводит к сбою и что необходимые
- элементы интерфейса остаются видимыми.
- </li>
-
- <li>Если вы указали минимальные размеры окна приложения, попытайтесь
- установить размер меньше минимального. Убедитесь в невозможности установить размер
- меньше указанного минимума.
- </li>
-
- <li>Во время всех тестов следите за производительностью приложения — она должна быть приемлемой. Например,
- убедитесь, что после изменения размера окна приложения не возникает большой
- задержки обновления интерфейса.
- </li>
-</ul>
-
-<h4 id="test-checklist">Контрольный список тестирования</h4>
-
-<p>
- Для проверки производительности приложения в многооконном режиме
- выполните следующие операции. Попытайтесь выполнить их в режиме разделения экрана и
- в многооконном режиме, если не указано иное.
-</p>
-
-<ul>
- <li>Перейдите в многооконный режим и выйдите из него.
- </li>
-
- <li>Переключитесь из своего приложения в другое приложение и убедитесь,
- что приложение работает нормально, если оно видимо, но не активно. Например, если приложение
- показывает видео, оно должно продолжать воспроизведение, когда
- пользователь работает с другим приложением.
- </li>
-
- <li>В режиме разделения экрана попробуйте перемещать линию
- разделения, увеличивая и уменьшая окно приложения. Попробуйте выполнить эти операции, когда окна двух
- приложений находятся рядом и друг над другом. Убедитесь, что приложение не завершается с ошибкой,
- необходимые элементы видны и изменение размера не занимает
- слишком много времени.
- </li>
-
- <li>Быстро измените размер окна приложения несколько раз подряд. Убедитесь, что
- приложение не зависает и не вызывает утечку памяти. Информация о проверке использования памяти
- приложением содержится в документе <a href="{@docRoot}tools/debugging/debugging-memory.html">
-Анализ использования оперативной памяти</a>.
- </li>
-
- <li>Поработайте с приложением в различных оконных конфигурациях и
- убедитесь, что оно ведет себя должным образом. Текст должен легко читаться, а
- элементы интерфейса не должны быть слишком маленькими.
- </li>
-</ul>
-
-<h3 id="test-disabled-mw">Если вы отключили поддержку многооконного режима</h3>
-
-<p>
- Если вы отключили поддержку многооконного режима,
- установив атрибут <code>android:resizableActivity="false"</code>, запустите
- приложение на устройстве с Android N и
- попытайтесь перевести его в режимы произвольной формы и разделения экрана. Убедитесь, что при этом
- приложение остается в полноэкранном режиме.
-</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/ru/preview/features/picture-in-picture.jd b/docs/html-intl/intl/ru/preview/features/picture-in-picture.jd
deleted file mode 100644
index 5be0bff..0000000
--- a/docs/html-intl/intl/ru/preview/features/picture-in-picture.jd
+++ /dev/null
@@ -1,186 +0,0 @@
-page.title=Режим "картинка в картинке"
-page.keywords=preview,sdk,PIP,Picture-in-picture
-page.tags=androidn
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>Содержание документа</h2>
-<ol>
- <li><a href="#declaring">Декларация поддержки операцией режима
-"картинка в картинке"</a></li>
- <li><a href="#pip_button">Переключение операции в режим "картинка в картинке"</a>
-</li>
- <li><a href="#handling_ui">Работа пользовательского интерфейса в режиме "картинка в картинке"</a>
-</li>
- <li><a href="#continuing_playback">Продолжение воспроизведения видео в режиме
-"картинка в картинке"</a></li>
- <li><a href="#best">Советы и рекомендации</a></li>
-</ol>
-
-<h2>См. также:</h2>
-<ol>
- <li><a href="{@docRoot}preview/features/multi-window.html">Поддержка
-многооконного режима</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>В Android N пользователи Android TV могут смотреть видео
-в закрепленном окне в углу экрана во время работы в
-приложениях. Режим "картинка в картинке" (PIP) позволяет приложениям отображать видео
-в закрепленном окне одновременно с выполнением другой операции
-фоновом режиме. Окно PIP обеспечивает возможность многозадачности внутри вашего приложения, что
-повышает продуктивность работы пользователей.</p>
-
-<p>Ваше приложение может определить момент активации режима PIP. Ниже приведено несколько примеров
-моментов перехода в режим PIP:</p>
-
-<ul>
-<li>Ваше приложение может перевести видео в режим PIP, когда пользователь переходит
-от видео к просмотру другого контента.</li>
-<li>Ваше приложение может переключить видео в режим PIP, когда пользователь смотрит конец
-эпизода контента. На основном экране отображается рекламная или сводная информация
-о следующем эпизоде серии.</li>
-<li>Ваше приложение может предоставить пользователям возможность добавлять в очередь дополнительный контент при
-просмотре видео. В режиме PIP видео продолжает воспроизводиться, когда на основном
-экране отображается операция выбора контента.</li>
-</ul>
-
-<p>Окно PIP имеет размеры 240x135 dp и отображается на самом верхнем слое в одном из
-четырех углов экрана по выбору системы. Пользователь может вызвать
-меню PIP, позволяющее переключать окно PIP в полноэкранный режим, или закрыть окно
-PIP долгим нажатием кнопки <b>Home</b> на пульте дистанционного управления. Если на главном экране начнется воспроизведение другого
-видео, окно PIP автоматически
-закроется. Пользователи также могут закрыть окно PIP, используя экран последних задач.</p>
-
-<img src="{@docRoot}preview/images/pip-active.png" />
-<p class="img-caption"><strong>Рисунок 1.</strong> Видео в режиме "картинка в картинке"
- отображается в углу экрана, пока пользователь просматривает
-контент на главном экране.</p>
-
-<p>Режим PIP использует многооконные API-интерфейсы в Android N для
-отображения закрепленного окна с видео на верхнем слое. Чтобы добавить в приложение функцию PIP, вам нужно зарегистрировать
-операции, поддерживающие PIP, добавить необходимые переключения операции в режим PIP,
-а также обеспечить скрытие элементов пользовательского интерфейса и воспроизведение видео в то время, когда
-операция находится в режиме PIP.</p>
-
-<h2 id="declaring">Декларация поддержки операцией режима "картинка в картинке"</h2>
-
-<p>По умолчанию в системе отсутствует автоматическая поддержка режима PIP для приложений.
-Если вы хотите, чтобы ваше приложение поддерживало режим PIP, зарегистрируйте операцию
-воспроизведения видео в манифесте приложения, установив для параметров
-<code>android:supportsPictureInPicture</code> и
-<code>android:resizeableActivity</code> значение <code>true</code>. Также укажите, что
-ваша операция обрабатывает изменения конфигурации макета экрана, чтобы эта операция не
-запускалась заново в случае изменения макета при переходах в режиме PIP.</p>
-
-<pre>
-<activity android:name="VideoActivity"
- android:resizeableActivity="true"
- android:supportsPictureInPicture="true"
- android:configChanges=
- "screenSize|smallestScreenSize|screenLayout|orientation"
- ...
-</pre>
-
-<p>При регистрации операции помните, что в режиме PIP она
-отображается в небольшом наложенном окне на экране телевизора. Для пользователей наиболее удобны операции
-воспроизведения видео с минимальным пользовательским интерфейсом. Операции
-с небольшими элементами пользовательского интерфейса могут оказаться неудобными для пользователей
-в режиме PIP, потому что в окне PIP пользователи
-не видят деталей этих элементов.</p>
-
-<h2 id="pip_button">Переключение операции в режим "картинка в картинке"</h2>
-
-Если вам нужно переключить операцию в режим PIP, вызовите метод
-<code>Activity.enterPictureInPicture()</code>. В следующем примере показано переключение
-в режим PIP, когда пользователь нажимает кнопку PIP на панели
-управления мультимедиа:</p>
-
-<pre>
-@Override
-public void onActionClicked(Action action) {
- if (action.getId() == R.id.lb_control_picture_in_picture) {
- getActivity().enterPictureInPicture();
- return;
- }
- ...
-</pre>
-
-<p>Добавление кнопки PIP на панель управления мультимедиа позволяет пользователям легко переключаться
-в режим PIP с сохранением возможностей управления воспроизведением видео.</p>
-
-<img src="{@docRoot}preview/images/pip-button.png" />
-<p class="img-caption"><strong>Рисунок 1.</strong> Кнопка режима "картинка в картинке"
-на панели управления мультимедиа.</p>
-
-<p>В Android N входит новый класс
-<code>PlaybackControlsRow.PictureInPictureAction</code>, который определяет действия PIP
-на панели управления и использует значок PIP.</p>
-
-<h2 id="handling_ui">Работа пользовательского интерфейса в режиме "картинка в картинке"</h2>
-
-<p>Когда операция переходит в режим PIP, она должна отображать только воспроизведение
-видео. Уберите элементы пользовательского интерфейса перед переходом операции в режим PIP
-и восстановите их после возвращения операции в полноэкранный режим.
-Переопределите <code>Activity.onPictureInPictureChanged()</code> или
-<code>Fragment.onPictureInPictureChanged()</code> и включайте или
-отключайте элементы пользовательского интерфейса по мере необходимости, например:</p>
-
-<pre>
-@Override
-public void onPictureInPictureChanged(boolean inPictureInPicture) {
- if (inPictureInPicture) {
- // Hide the controls in picture-in-picture mode.
- ...
- } else {
- // Restore the playback UI based on the playback status.
- ...
- }
-}
-</pre>
-
-<h2 id="continuing_playback">Продолжение воспроизведения видео в режиме
-"картинка в картинке"</h2>
-
-<p>Когда операция переключается в режим PIP, система видит ее в состоянии
-паузы и вызывает метод <code>onPause()</code> этой операции. При этом воспроизведение видео
-должно продолжаться без паузы, если операция
-приостановлена в режиме PIP. Проверьте режим PIP в методе
-<code>onPause()</code> своей операции и обеспечьте обработку воспроизведения соответствующим образом,
-например:</p>
-
-<pre>
-@Override
-public void onPause() {
- // If called due to PIP, do not pause playback
- if (inPictureInPicture()) {
- // Continue playback
- ...
- }
- // If paused but not in PIP, pause playback if necessary
- ...
-}
-</pre>
-
-<p>Когда операция возвращается из режима PIP в полноэкранный режим, система
-возобновляет выполнение операции и вызывает метод<code>onResume()</code> вашего приложения.</p>
-
-<h2 id="best">Советы и рекомендации</h2>
-
-<p>Режим PIP предназначается для операций, воспроизводящих видео в полноэкранном режиме. При переключении
-операции в режим PIP следует избегать отображения любых элементов, кроме видео.
-Отслеживайте моменты перехода операции в режим PIP и скрывайте элементы пользовательского интерфейса, как описано в
-разделе <a href="#handling_ui">Работа пользовательского интерфейса в режиме "картинка в картинке"</a>.</p>
-
-<p>Поскольку окно PIP отображается в виде плавающего окна в углу экрана,
-следует избегать отображения критически важной информации на основном экране
-в любой области, которая может быть закрыта окном PIP.</p>
-
-<p>По умолчанию фокус ввода не переключается на операцию, которая находится в режиме PIP. Для
-получения событий ввода в режиме PIP следует использовать
-<code>MediaSession.setMediaButtonReceiver()</code>.</p>
diff --git a/docs/html-intl/intl/ru/preview/features/scoped-folder-access.jd b/docs/html-intl/intl/ru/preview/features/scoped-folder-access.jd
deleted file mode 100644
index 51a4c4d..0000000
--- a/docs/html-intl/intl/ru/preview/features/scoped-folder-access.jd
+++ /dev/null
@@ -1,124 +0,0 @@
-page.title=Доступ к выделенным каталогам
-page.keywords=preview,sdk,scoped directory access
-page.tags=androidn
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>Содержание документа</h2>
- <ol>
- <li><a href="#accessing">Доступ к каталогу во внешнем хранилище</a></li>
- <li><a href="#removable">Доступ к каталогу на съемном носителе</a></li>
- <li><a href="#best">Советы и рекомендации</a></li>
- </ol>
-</div>
-</div>
-
-<p>Некоторым приложениям (например, фотоприложениям) обычно требуется доступ только к отдельным каталогам
-внешнего хранилища, например, к каталогу <code>Pictures</code>. Существующие
-методы доступа к внешним хранилищам не предназначены для обеспечения приложениям такого типа удобного
-доступа к выделенным каталогам. Например:</p>
-
-<ul>
-<li>Запросы {@link android.Manifest.permission#READ_EXTERNAL_STORAGE}
-или {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} в манифесте
-разрешают доступ ко всем общедоступным каталогам внешнего хранилища, хотя
-вашему приложению может не требоваться такой уровень доступа.</li>
-<li>При использовании инфраструктуры
-<a href="{@docRoot}guide/topics/providers/document-provider.html">Storage
-Access Framework</a> пользователь обычно выбирает каталоги через
-системный пользовательский интерфейс, что не требуется, если приложение всегда использует один
-и тот же внешний каталог.</li>
-</ul>
-
-<p>Android N предоставляет новый упрощенный API для доступа
-к распространенным каталогам внешнего хранилища. </p>
-
-<h2 id="accessing">Доступ к каталогу во внешнем хранилище</h2>
-
-<p>Используйте класс <code>StorageManager</code> для получения соответствующего экземпляра
-<code>StorageVolume</code>. Затем создайте намерение, вызвав метод
-<code>StorageVolume.createAccessIntent()</code> этого экземпляра.
-Используйте это намерение для доступа к каталогам внешнего хранилища. Чтобы получить список
-всех доступных томов, в том числе томов на съемных носителях, используйте
-<code>StorageManager.getVolumesList()</code>.</p>
-
-<p>В следующем фрагменте кода приведен пример того, как открывать каталог
-<code>Pictures</code> в главном общем хранилище:</p>
-
-<pre>
-StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
-StorageVolume volume = sm.getPrimaryVolume();
-Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
-startActivityForResult(intent, request_code);
-</pre>
-
-<p>Система пытается предоставить доступ к внешнему каталогу и, при необходимости,
-запрашивает подтверждение доступа у пользователя с помощью упрощенного пользовательского интерфейса:</p>
-
-<img src="{@docRoot}preview/images/scoped-folder-access-framed.png" srcset="{@docRoot}preview/images/scoped-folder-access-framed.png 1x,
-{@docRoot}preview/images/scoped-folder-access-framed_2x.png 2x" />
-<p class="img-caption"><strong>Рисунок 1.</strong> Приложение запрашивает
-доступ к каталогу Pictures.</p>
-
-<p>Если пользователь предоставляет доступ, система вызывает переопределенный метод
-<code>onActivityResult()</code> с кодом результата
-<code>Activity.RESULT_OK</code>, а также данные намерения, содержащие URI. Используйте
-предоставленный URI для доступа к данным каталога аналогично использованию URI,
-возвращаемых
-<a href="{@docRoot}guide/topics/providers/document-provider.html">Storage
-Access Framework</a>.</p>
-
-<p>Если пользователь не предоставляет доступ, система вызывает переопределенный метод
-<code>onActivityResult()</code> с кодом результата
-<code>Activity.RESULT_CANCELED</code> и отсутствующими данными намерения.</p>
-
-<p class="note"><b>Примечание.</b> При получении доступа к определенному внешнему каталогу
-приложение также получает доступ к вложенным в него каталогам.</p>
-
-<h2 id="removable">Доступ к каталогу на съемном носителе</h2>
-
-<p>Чтобы использовать доступ к выделенным каталогам на съемном носителе,
-сначала нужно добавить объект {@link android.content.BroadcastReceiver}, отслеживающий уведомления
-{@link android.os.Environment#MEDIA_MOUNTED}, например:</p>
-
-<pre>
-<receiver
- android:name=".MediaMountedReceiver"
- android:enabled="true"
- android:exported="true" >
- <intent-filter>
- <action android:name="android.intent.action.MEDIA_MOUNTED" />
- <data android:scheme="file" />
- </intent-filter>
-</receiver>
-</pre>
-
-<p>Когда пользователь подключает съемный носитель, например SD-карту, система отправляет уведомление
-{@link android.os.Environment#MEDIA_MOUNTED}. Это уведомление
-предоставляет в данных намерения объект <code>StorageVolume</code>, который вы можете использовать
-для доступа к каталогам на съемном носителе. В следующем примере показано,
-как осуществляется доступ к каталогу <code>Pictures</code> на съемном носителе:</p>
-
-<pre>
-// BroadcastReceiver has already cached the MEDIA_MOUNTED
-// notification Intent in mediaMountedIntent
-StorageVolume volume = (StorageVolume)
- mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
-volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
-startActivityForResult(intent, request_code);
-</pre>
-
-<h2 id="best">Советы и рекомендации</h2>
-
-<p>По возможности оставляйте постоянный URI для доступа к внешнему каталогу, чтобы приложению не
-приходилось многократно запрашивать у пользователя разрешение на доступ. После предоставления доступа пользователем вызовите метод
-<code>getContentResolver().takePersistableUriPermssion()</code> для
-URI доступа к каталогу. Система сохранит постоянный URI и при последующих запросах
-доступа будет возвращать ответ <code>RESULT_OK</code>. Таким образом, приложение не будет постоянно выводить
-окно с запросом подтверждения пользователя.</p>
-
-<p>Если пользователь запрещает доступ к внешнему каталогу, не нужно сразу
-же запрашивать доступ повторно. Пользователю может не понравиться, если приложение будет постоянно настаивать на
-получении доступа.</p>
diff --git a/docs/html-intl/intl/ru/preview/features/security-config.jd b/docs/html-intl/intl/ru/preview/features/security-config.jd
deleted file mode 100644
index 5294a4f..0000000
--- a/docs/html-intl/intl/ru/preview/features/security-config.jd
+++ /dev/null
@@ -1,745 +0,0 @@
-page.title=Конфигурация сетевой безопасности
-page.keywords=androidn,security,network
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>Содержание документа</h2>
-<ol>
- <li><a href="#manifest">Добавление файла конфигурации безопасности</a></li>
- <li><a href="#CustomTrust">Настройка доверенных ЦС</a>
- <ol>
- <li><a href="#ConfigCustom">Настройка доверенного пользовательского ЦС</a></li>
- <li><a href="#LimitingCas">Ограничение набора доверенных ЦС</a></li>
- <li><a href="#TrustingAdditionalCas">Добавление дополнительных ЦС в доверенные</a></li>
- </ol>
- </li>
- <li><a href="#TrustingDebugCa">ЦС для отладки</a></li>
- <li><a href="#UsesCleartextTraffic">Отказ от передачи данных открытым текстом</a></li>
- <li><a href="#CertificatePinning">Прикрепление сертификатов</a></li>
- <li><a href="#ConfigInheritance">Поведение при наследовании конфигурации</a></li>
- <li><a href="#FileFormat">Формат файла конфигурации</a></li>
-</ol>
-</div>
-</div>
-
-
-<p>
- В Android N имеется функция "Конфигурация сетевой безопасности",
- позволяющая приложениям настраивать свои параметры сетевой безопасности в защищенном
- декларативном файле конфигурации без изменения программного кода приложения. Эти параметры можно
- настроить для определенных областей и приложений. Основные
- возможности этой функции:
-</p>
-
-<ul>
- <li>
- <b>Пользовательские якоря доверия.</b> Настройка доверенных центров сертификации (ЦС)
- для защищенных соединений приложения. Примером может служить
- настройка доверия определенным самозаверенным сертификатам или ограничение
- набора общих ЦС, которым доверяет приложение.
- </li>
-
- <li>
- <b>Замена при отладке.</b> Безопасная отладка защищенных соединений приложения
- без дополнительного риска для установленной базы.
- </li>
-
- <li>
- <b>Отказ от передачи данных открытым текстом.</b> Защита приложений от
- случайной передачи данных открытым текстом.
- </li>
-
- <li>
- <b>Прикрепление сертификатов.</b> Ограничение защищенных соединений приложения
- определенными сертификатами.
- </li>
-</ul>
-
-
-<h2 id="manifest">Добавление файла конфигурации безопасности</h2>
-
-<p>
- Функция конфигурации сетевой безопасности использует файл XML, где вы можете указать
- настройки своего приложения. Вы должны включить в манифест своего приложения
- запись, указывающую на этот файл. В следующем отрывке кода из манифеста
- показано, как создать такую запись:
-</p>
-
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-...
-<app ...>
- <meta-data android:name="android.security.net.config"
- android:resource="@xml/network_security_config" />
- ...
-</app>
-</pre>
-
-<h2 id="CustomTrust">Настройка доверенных ЦС</h2>
-
-<p>
- Приложению может потребоваться возможность доверять пользовательскому набору центров сертификации (ЦС) вместо набора ЦС платформы, установленного по умолчанию.
- Наиболее распространенные причины:
-</p>
-
-<ul>
- <li>Подключение к узлу с пользовательским ЦС (самозаверенным,
- внутренним корпоративным ЦС и т. д.)
- </li>
-
- <li>Ограничение списка только доверенными ЦС вместо
- предустановленных.
- </li>
-
- <li>Добавление дополнительных ЦС, не установленных в системе, в список доверенных.
- </li>
-</ul>
-
-<p>
- По умолчанию защищенные соединения всех приложений (например, TLS, HTTPS) доверяют
- предустановленным системным ЦС, а приложения для API уровня 23
- (Android M) и ниже также по умолчанию доверяют ЦС, добавленным пользователем. Приложение
- может настраивать свои соединения, используя {@code base-config} (для
- настройки на уровне приложения) или {@code domain-config} (для настройки на уровне
- доменов).
-</p>
-
-
-<h3 id="ConfigCustom">Настройка пользовательского ЦС</h3>
-
-<p>
- Предположим, вы хотите подключиться к своему узлу, использующему самозаверенный сертификат SSL,
- или к узлу, чей сертификат SSL был выпущен закрытым ЦС,
- которому вы доверяете, например внутренним ЦС вашей компании.
-</p>
-
-<p>
- <code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">example.com</domain>
- <trust-anchors>
- <certificates src="@raw/my_ca"/>
- </trust-anchors>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-<p>
- Добавьте самозаверенный сертификат или сертификат закрытого ЦС в формате PEM или DER в
- {@code res/raw/my_ca}.
-</p>
-
-
-<h3 id="LimitingCas">Ограничение набора доверенных ЦС</h3>
-
-<p>
- Если приложению не нужно доверять всем ЦС, которым доверяет система, для него
- можно указать сокращенный набор доверенных ЦС. Это позволит защитить
- приложение от поддельных сертификатов, выпущенных любыми другими ЦС.
-</p>
-
-<p>
- Настройка ограниченного набора доверенных ЦС похожа на <a href="#TrustingACustomCa">настройку доверия пользовательскому ЦС</a> для определенного домена, за тем исключением,
- что в ресурсе указывается несколько ЦС.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">secure.example.com</domain>
- <domain includeSubdomains="true">cdn.example.com</domain>
- <trust-anchors>
- <certificates src="@raw/trusted_roots"/>
- </trust-anchors>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-<p>
- Добавьте список доверенных ЦС в формате PEM или DER в {@code res/raw/trusted_roots}.
- Обратите внимание, что файл в формате PEM должен содержать <em>только</em> данные PEM
- без какого-либо дополнительного текста. Вы также можете указать несколько элементов
- <a href="#certificates"><code><certificates></code></a>
-вместо одного.
-</p>
-
-
-<h3 id="TrustingAdditionalCas">
- Добавление дополнительных ЦС в доверенные
-</h3>
-
-<p>
- Приложению может потребоваться доверять дополнительным ЦС, которые не входят в список доверенных ЦС системы.
- Это может быть связано с тем, что эти ЦС еще не добавлены в систему или
- не соответствуют требованиям для включения в систему Android. Приложение
- может добавить такие ЦС в доверенные, указав несколько источников сертификатов для
- конфигурации.
-</p>
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <base-config>
- <trust-anchors>
- <certificates src="@raw/extracas"/>
- <certificates src="system"/>
- </trust-anchors>
- </base-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="TrustingDebugCa">Настройка конфигурации ЦС для отладки</h2>
-
-<p>
- При отладке приложения, которое использует для подключения протокол HTTPS, вам может потребоваться
- подключение к локальному серверу разработки, у которого нет сертификата SSL
- для рабочего сервера. Чтобы выполнить отладку без изменения кода
- приложения, вы можете указать ЦС для отладки,
- которые входят в число доверенных, <i>только</i> если для параметра <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">
-android:debuggable</a>
- установлено значение {@code true} с использованием {@code debug-overrides}. Обычно среды разработки и инструменты
- сборки устанавливают этот флаг автоматически для всех сборок, кроме выпускаемой версии.
-</p>
-
-<p>
- Такая схема работы более безопасна, чем использование обычного условного кода, поскольку в качестве
- меры предосторожности магазины приложений не принимают приложения, помеченные
- как доступные для отладки.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <debug-overrides>
- <trust-anchors>
- <certificates src="@raw/debug_cas"/>
- </trust-anchors>
- </debug-overrides>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="UsesCleartextTraffic">Отказ от передачи данных открытым текстом</h2>
-
-<p>
- Приложения, которым нужно подключаться к узлам только через защищенные соединения,
- могут отказаться от поддержки передачи данных открытым текстом (с использованием нешифрованного протокола HTTP
- вместо HTTPS) на эти узлы. Эта возможность помогает предотвратить
- случайные неполадки в приложениях, связанные с изменениями URL-адресов, предоставленных внешними
- источниками, например, инфраструктурными серверами.
- Дополнительную информацию можно найти в описании метода {@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted
- NetworkSecurityPolicy.isCleartextTrafficPermitted()}.
-</p>
-
-<p>
- Например, приложение может потребовать обязательное использование протокола HTTPS для всех соединений с {@code
- secure.example.com}, чтобы защитить важный трафик
- от небезопасных сетей.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config usesCleartextTraffic="false">
- <domain includeSubdomains="true">secure.example.com</domain>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="CertificatePinning">Прикрепление сертификатов</h2>
-
-<p>
- Обычно приложение доверяет всем предустановленным ЦС. Если любой из этих ЦС выпустит
- поддельный сертификат, приложение подвергается риску атаки с перехватом данных.
- Некоторым приложениям требуется ограничить принимаемый набор сертификатов
- либо ограничением списка доверенных ЦС, либо прикреплением сертификатов.
-</p>
-
-<p>
- Прикрепление сертификатов осуществляется путем предоставления набора сертификатов через хэш
- открытого ключа (SubjectPublicKeyInfo сертификата X.509). В этом случае цепочка
- сертификатов будет действительна, только если она содержит хотя бы один
- прикрепленный открытый ключ.
-</p>
-
-<p>
- При использовании прикрепления сертификатов всегда необходимо добавлять резервный
- ключ, чтобы работа приложения не пострадала при необходимости перехода на новые ключи или смены ЦС (при
- прикреплении сертификата ЦС или посредника этого ЦС).
- Без резервного ключа для восстановления возможности подключения приложения потребуется срочно выпускать
- его обновление.
-</p>
-
-<p>
- Кроме того, существует возможность установить срок прикрепления, по истечении которого
- прикрепление не выполняется. Это помогает предотвратить проблемы с подключением
- приложений, которые не были обновлены. Однако установка срока действия
- прикреплений позволяет обойти их ограничения.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">example.com</domain>
- <pin-set expiration="2018-01-01">
- <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
- <!-- backup pin -->
- <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="ConfigInheritance">Поведение при наследовании конфигурации</h2>
-
-<p>
- Значения, не установленные в определенной конфигурации, наследуются. Такое поведение позволяет создавать более
- сложные конфигурации, сохраняя при этом файл конфигурации в читаемом виде.
-</p>
-
-<p>
- Если в определенной записи не установлено значение, используется значение из следующей более общей записи.
- Значения, не установленные в {@code domain-config},
- берутся из родительского элемента {@code domain-config} в многоуровневых конфигурациях или из элемента {@code
- base-config} в простых конфигурациях. Для значений, не установленных в {@code base-config}, используются
- значения по умолчанию для платформы.
-</p>
-
-<p>
- Рассмотрим пример, где все соединения с доменами нижнего уровня {@code
- example.com} должны использовать пользовательский набор ЦС. Кроме того, для этих доменов разрешена
- передача данных открытым текстом, <em>кроме</em> случаев подключения к {@code
- secure.example.com}. При вложении конфигурации {@code
- secure.example.com} в конфигурацию {@code example.com} не требуется дублирование
- {@code trust-anchors}.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">example.com</domain>
- <trust-anchors>
- <certificates src="@raw/my_ca"/>
- </trust-anchors>
- <domain-config cleartextTrafficPermitted="false">
- <domain includeSubdomains="true">secure.example.com</domain>
- </domain-config>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="FileFormat">Формат файла конфигурации</h2>
-
-<p>
- Функция конфигурации сетевой безопасности использует формат файлов XML.
- Общая структура файла показана в следующем примере кода:
-</p>
-
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <base-config>
- <trust-anchors>
- <certificates src="..."/>
- ...
- </trust-anchors>
- </base-config>
-
- <domain-config>
- <domain>android.com</domain>
- ...
- <trust-anchors>
- <certificates src="..."/>
- ...
- </trust-anchors>
- <pin-set>
- <pin digest="...">...</pin>
- ...
- </pin-set>
- </domain-config>
- ...
- <debug-overrides>
- <trust-anchors>
- <certificates src="..."/>
- ...
- </trust-anchors>
- </debug-overrides>
-</network-security-config>
-</pre>
-
-<p>
- В следующих разделах содержится описание синтаксиса и других деталей формата
- файла.
-</p>
-
-<h3 id="network-security-config">
- <network-security-config>
-</h3>
-
-<dl class="xml">
- <dt>
- Может содержать:
- </dt>
-
- <dd>
- 0 или 1 <code><a href="#base-config"><base-config></a></code><br>
- Любое количество <code><a href=
- "#domain-config"><domain-config></a></code><br>
- 0 или 1 <code><a href="#debug-overrides"><debug-overrides></a></code>
- </dd>
-</dl>
-
-<h3 id="base-config">
- <base-config>
-</h3>
-
-<dl class="xml">
- <dt>
- Синтаксис:
- </dt>
-</dl>
-
-<pre class="stx">
-<base-config <a href=
-"#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
- ...
-</base-config>
-</pre>
-<dl class="xml">
- <dt>
- Может содержать:
- </dt>
-
- <dd>
- <code><a href="#trust-anchors"><trust-anchors></a></code>
- </dd>
-
- <dt>
- Описание:
- </dt>
-
- <dd>
- Конфигурация по умолчанию, используемая всеми подключениями к узлам, не входящим в <a href="#domain-config"><code>domain-config</code></a>.
-
-
-<p>
- Если значения не установлены, используются значения по умолчанию для платформы. Конфигурация по умолчанию
- для приложений, использующих API уровня 24 или выше:
-</p>
-
-<pre>
-<base-config usesCleartextTraffic="true">
- <trust-anchors>
- <certificates src="system" />
- </trust-anchors>
-</base-config>
-</pre>
-Конфигурация по умолчанию для приложений, использующих API уровня 23 или ниже:
-<pre>
-<base-config usesCleartextTraffic="true">
- <trust-anchors>
- <certificates src="system" />
- <certificates src="user" />
- </trust-anchors>
-</base-config>
-</pre>
-
- </dd>
-</dl>
-
-<h3 id="domain-config"><domain-config></h3>
-<dl class="xml">
-<dt>Синтаксис:</dt>
-<dd>
-<pre class="stx"><domain-config <a href="#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
- ...
-</domain-config></pre>
-</dd>
-
-<dt>Может содержать:</dt>
-
-<dd>
-1 или более <code><a href="#domain"><domain></a></code>
-<br/>0 или 1 <code><a href="#trust-anchors"><trust-anchors></a></code>
-<br/>0 или 1 <code><a href="#pin-set"><pin-set></code></a>
-<br/>Любое количество вложенных <code><domain-config></code></dd>
-
-<dt>Описание</dt>
-<dd>Конфигурация, используемая для подключения к конкретным узлам, определенными элементами {@code domain}.
-
-<p>Если для узла назначения существует несколько элементов {@code domain-config}, используется правило для наиболее конкретного (самого длинного) совпадающего домена.
-</p></dd>
-</dl>
-
-
-<h3 id="domain"><domain></h3>
-
-<dl class="xml">
- <dt>
- Синтаксис:
- </dt>
-
- <dd>
- <pre class="stx">
-<domain includeSubdomains=["true" | "false"]>example.com</domain>
-</pre>
- </dd>
-
- <dt>
- Атрибуты:
- </dt>
-
- <dd>
- <dl class="attr">
- <dt>
- {@code includeSubdomains}
- </dt>
-
- <dd>
- Если значение равно {@code "true"}, то правило домена соответствует указанному домену и всем доменам его
- нижних уровней. В противном случае правило действует
- только для полных совпадений.
- </dd>
- </dl>
- </dd>
-
- <dt>
- Описание:
- </dt>
-</dl>
-
-<h3 id="debug-overrides"><debug-overrides></h3>
-
-<dl class="xml">
- <dt>
- Синтаксис:
- </dt>
-
- <dd>
- <pre class="stx">
-<debug-overrides>
- ...
-</debug-overrides>
-</pre>
- </dd>
-
- <dt>
- Может содержать:
- </dt>
-
- <dd>
- 0 или 1 <code><a href="#trust-anchors"><trust-anchors></a></code>
- </dd>
-
- <dt>
- Описание:
- </dt>
-
- <dd>
- Переопределения применяются, когда параметр <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
- имеет значение {@code "true"}, что обычно верно для промежуточных сборок,
- создаваемых средами разработки и инструментами сборки. Якоря доверия, указанные в {@code
- debug-overrides}, добавляются ко всем другим конфигурациям, и прикрепление
- сертификатов не выполняется, если цепочка сертификатов сервера использует один из этих
- якорей доверия, предназначенных только для отладки. Если параметр <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
- имеет значение {@code "false"}, этот раздел полностью игнорируется.
- </dd>
-</dl>
-
-<h3 id="trust-anchors"><trust-anchors></h3>
-<dl class="xml">
- <dt>
- Синтаксис:
- </dt>
-
- <dd>
- <pre class="stx">
-<trust-anchors>
-...
-</trust-anchors>
-</pre>
- </dd>
-
- <dt>
- Может содержать:
- </dt>
-
- <dd>
- Любое количество <code><a href="#certificates"><certificates></a></code>
- </dd>
-
- <dt>
- Описание:
- </dt>
-
- <dd>
- Набор якорей доверия для защищенных соединений.
- </dd>
-</dl>
-
-
-<h3 id="certificates"><certificates></h3>
-<dl class="xml">
-<dt>Синтаксис:</dt>
-<dd><pre class="stx"><certificates src=["system" | "user" | "<i>raw resource</i>"]
- overridePins=["true" | "false"] />
-</pre></dd>
-<dt>Описание:</dt>
-<dd>Набор сертификатов X.509 для элементов {@code trust-anchors}.</dd>
-
-<dt>Атрибуты:</dt>
-<dd><dl class="attr">
-<dt>{@code src}</dt>
-<dd>
-Источник сертификатов ЦС может представлять собой
-<ul>
- <li>идентификатор исходного ресурса, указывающий на файл с сертификатами X.509.
- Сертификаты должны быть закодированы в формате DER или PEM. При использовании сертификатов PEM
- файл <em>не должен</em> содержать ничего, кроме данных PEM, например,
- комментариев.
- </li>
-
- <li>{@code "system"} для предустановленных в системе сертификатов ЦС
- </li>
-
- <li>{@code "user"} для добавленных пользователем сертификатов ЦС
- </li>
-</ul>
-</dd>
-
-<dt>{@code overridePins}</dt>
-<dd>
- <p>
- Указывает, пропускается ли прикрепление сертификатов для ЦС из этого источника. Если значение равно {@code
- "true"}, то прикрепление сертификатов не выполняется для цепочек сертификатов, проходящих через один из ЦС этого
- источника. Это применяется для отладки ЦС
- или для разрешения пользователю перехватывать защищенный трафик вашего приложения.
- </p>
-
- <p>
- По умолчанию используется значение {@code "false"}, но если указан элемент {@code debug-overrides},
- то по умолчанию используется значение {@code "true"}.
- </p>
-</dd>
-</dl>
-</dd>
-
-
-<h3 id="pin-set"><pin-set></h3>
-
-<dl class="xml">
- <dt>
- Синтаксис:
- </dt>
-
- <dd>
-<pre class="stx">
-<pin-set expiration="date">
-...
-</pin-set>
-</pre>
- </dd>
-
- <dt>
- Может содержать:
- </dt>
-
- <dd>
- Любое количество <code><a href="#pin"><pin></a></code>
- </dd>
-
- <dt>
- Описание:
- </dt>
-
- <dd>
- Набор прикрепленных открытых ключей. Чтобы защищенное соединение было доверенным, один из
- открытых ключей в цепочке доверия должен входить в набор прикрепленных ключей. Формат ключей указан в
- <code><a href="#pin"><pin></a></code>.
- </dd>
-
- <dt>
- Атрибуты:
- </dt>
-
- <dd>
- <dl class="attr">
- <dt>
- {@code expiration}
- </dt>
-
- <dd>
- Дата в формате {@code yyyy-MM-dd}, начиная с которой истекает срок прикрепления
- и оно отключается. Если этот атрибут не установлен,
- срок прикрепления не истекает.
- <p>
- Истечение срока прикрепления помогает предотвратить проблемы с подключением в приложениях, которые
- не получают обновления набора прикрепленных элементов, например в связи с тем, что пользователь
- отключил обновления приложений.
- </p>
- </dd>
- </dl>
- </dd>
-</dl>
-
-<h3 id="pin"><pin></h3>
-<dl class="xml">
- <dt>
- Синтаксис:
- </dt>
-
- <dd>
-<pre class="stx">
-<pin digest=["SHA-256"]>base64 encoded digest of X.509
- SubjectPublicKeyInfo (SPKI)</pin>
-</pre>
- </dd>
-
- <dt>
- Атрибуты:
- </dt>
-
- <dd>
- <dl class="attr">
- <dt>
- {@code digest}
- </dt>
-
- <dd>
- Алгоритм хэширования, используемый для создания прикреплений. В настоящее время поддерживается только алгоритм
- {@code "SHA-256"}.
- </dd>
- </dl>
- </dd>
-</dl>
diff --git a/docs/html-intl/intl/ru/preview/features/tv-recording-api.jd b/docs/html-intl/intl/ru/preview/features/tv-recording-api.jd
deleted file mode 100644
index 5e6ce45..0000000
--- a/docs/html-intl/intl/ru/preview/features/tv-recording-api.jd
+++ /dev/null
@@ -1,121 +0,0 @@
-page.title=Запись ТВ
-page.keywords=preview,sdk,tv,recording
-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="#supporting">Указание на поддержку записи</a></li>
- <li><a href="#recording">Запись сеанса</a></li>
- <li><a href="#errors">Обработка ошибок записи</a></li>
- <li><a href="#sessions">Управление записанными сеансами</a></li>
- <li><a href="#best">Советы и рекомендации</a></li>
- </ol>
-</div>
-</div>
-
-<p>Службы телевидения позволяют пользователю ставить воспроизведение телеканалов на паузу и возобновлять его, используя
-для этого API-интерфейсы с временным сдвигом. Android N расширяет возможности временного сдвига,
-позволяя пользователю сохранять несколько записанных сеансов.</p>
-
-<p>Пользователи могут планировать запись заранее или начинать ее во время просмотра
-программы. После сохранения записей в системе пользователь может просматривать их в браузере, управлять ими
-и воспроизводить их с помощью телевизионного приложения.</p>
-
-<p>Если вы хотите добавить функцию записи в службу ТВ,
-вы должны указать системе, что ваше приложение поддерживает запись, и реализовать
-возможности записи программ, обработки любых ошибок, возникающих
-во время записи, вывода сообщений об ошибках, а также управления записанными сеансами.</p>
-
-<h2 id="supporting">Указание на поддержку записи</h2>
-
-<p>Чтобы сообщить системе, что ваша служба ТВ поддерживает запись, выполните
-следующие шаги:</p>
-
-<ol>
-<li>В методе <code>TvInputService.onCreate()</code> создайте новый объект
-<code>TvInputInfo</code>, используя класс <code>TvInputInfo.Builder</code>.
-</li>
-<li>При создании нового объекта <code>TvInputInfo</code> вызовите метод
-<code>setCanRecord(true)</code> до вызова <code>build()</code>,
-чтобы указать на то, что служба поддерживает запись.</li>
-<li>Зарегистрируйте объект <code>TvInputInfo</code> в системе посредством вызова метода
-<code>TvInputService.updateTvInputInfo()</code>.</li>
-</ol>
-
-<h2 id="recording">Запись сеанса</h2>
-
-<p>Когда служба ТВ зарегистрирует поддержку записи,
-система будет вызывать ваш метод
-<code>TvInputService.onCreateRecordingSession()</code>, когда ей потребуется доступ
-к функции записи в вашем приложении. Реализуйте собственный подкласс
-<code>TvInputService.RecordingSession</code> и возвращайте его
-при получении обратного вызова <code>onCreateRecordingSession()</code>.
- Этот подкласс отвечает за переключение на данные нужного канала,
-запись запрошенных данных, а также передачу системе информации о состоянии записи
-и ошибках.</p>
-
-<p>Когда система будет вызывать метод <code>RecordingSession.onTune()</code>, передавая в него
-URI канала, приложение должно переключаться на канал, указанный URI. Сообщите системе о том, что
-приложение настроилось на желаемый канал, вызвав метод <code>notifyTuned()</code>.
-Если приложению не удалось настроиться на желаемый канал, оно должно вызвать метод
-<code>notifyError()</code>.</p>
-
-<p>Затем система передает обратный вызов <code>RecordingSession.onStartRecording()</code>.
- После этого приложение должно сразу же начать запись. Когда система передает
-этот обратный вызов, она может указать URI с информацией о программе
-для записи. После завершения записи эти данные нужно
-скопировать в таблицу данных <code>RecordedPrograms</code>.</p>
-
-<p>Наконец, система вызывает метод <code>RecordingSession.onStopRecording()</code>.
-В этот момент приложение должно сразу же прекратить запись. Также вам нужно будет
-создать запись в таблице <code>RecordedPrograms</code>. Эта запись должна
-содержать URI записанных данных в столбце
-<code>RecordedPrograms.COLUMN_RECORDING_DATA_URI</code>, а также любую информацию
-о программе, которая была предоставлена системой в исходном вызове
-<code>onStartRecording()</code>.</p>
-
-<p>Более подробную информацию о доступе к таблице <code>RecordedPrograms</code>
-можно найти в разделе <a href="#sessions">Управление записанными сеансами</a>.</p>
-
-<h2 id="errors">Обработка ошибок записи</h2>
-
-<p>Если во время записи возникла ошибка, в результате которой записанные данные стали непригодными для использования,
-то об этом нужно сообщить системе, вызвав метод <code>RecordingSession.notifyError()</code>.
-Аналогичным образом, вы можете вызвать метод <code>notifyError()</code> после создания сеанса записи,
-чтобы сообщить системе, что приложение больше не может записывать сеансы.</p>
-
-<p>Если в процессе записи возникла ошибка, но вы хотите предоставить пользователям
-приемлемую часть записи для воспроизведения, вызовите
-<code>RecordingSession.notifyRecordingStopped()</code>, чтобы дать системе возможность
-использовать частичный сеанс.</p>
-
-<h2 id="sessions">Управление записанными сеансами</h2>
-
-<p>Система хранит информацию обо всех записанных сеансах всех
-приложений, поддерживающих запись каналов, в таблице поставщиков контента <code>TvContract.RecordedPrograms</code>.
- Эта информация доступна через URI контента
-<code>RecordedPrograms.Uri</code>. Используйте API-интерфейсы поставщиков контента для
-чтения, добавления и удаления записей из этой таблицы.</p>
-
-<p>Дополнительную информацию о работе с данными поставщиков контента можно найти в разделе
-<a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
-Основные сведения о поставщике контента</a>.</p>
-
-<h2 id="best">Советы и рекомендации</h2>
-
-<p>Объем хранилищ на телевизионных устройствах может быть ограничен, поэтому следует разумно
-распределять доступные хранилища для хранения записанных сеансов. Используйте
-<code>RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)</code>, когда для сохранения записанного сеанса
-недостаточно места.</p>
-
-<p>Когда пользователь инициирует запись, приложение должно как можно скорее начать записывать
-данные. Для этого рекомендуется заранее выполнить все продолжительные задачи,
-такие как получение доступа к хранилищу и распределение свободного места, когда система передает обратный вызов
-<code>onCreateRecordingSession()</code>. Это позволяет сразу же начать
-запись после получения обратного вызова <code>onStartRecording()</code>.
-</p>
diff --git a/docs/html-intl/intl/ru/preview/index.jd b/docs/html-intl/intl/ru/preview/index.jd
deleted file mode 100644
index 9bb56ba..0000000
--- a/docs/html-intl/intl/ru/preview/index.jd
+++ /dev/null
@@ -1,120 +0,0 @@
-page.title=Android N Developer Preview
-page.tags="preview","developer"
-meta.tags="предварительная версия", "android"
-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">
- <div class="wrap" style="max-width:1100px;margin-top:0">
- <div class="cols dac-hero-content" style="padding-bottom:1em;">
-
- <div class="col-7of16 col-push-9of16" style="padding-left:2em">
- <h1 class="dac-hero-title">Android N Developer Preview</h1>
- <p class="dac-hero-description">
- Подготовьтесь к выходу Android N!
-<strong>Протестируйте свои приложения</strong> на Nexus и других устройствах. Поддержите нововведения
-системы, позволяющие <strong>снизить потребление энергии и памяти</strong>.
-Добавьте в свои приложения <strong>многооконный режим</strong>,
-<strong>возможность прямой отправки ответов из уведомлений</strong> и другие функции.
- </p>
-
- <a class="dac-hero-cta" href="{@docRoot}preview/overview.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>-->
- </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>
- </div>
- <div class="dac-section dac-small">
- <div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/resources"
- data-cardSizes="6x2"
- data-maxResults="6"></div>
- </div>
- </div>
-</section>
-
-<div id="useUpdatedTemplates" style="display:none" 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>
- </a>
- <ul class="dac-actions">
- <li class="dac-action">
- <a class="dac-action-link" href="https://developer.android.com/preview/bug">
- <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>
- Вступить в сообщество разработчиков
- </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"><div class="wrap">
- <h1 class="dac-section-title">Ресурсы</h1>
- <div class="dac-section-subtitle">
- Важная информация, которая поможет вам подготовить ваши приложения для работы в Android N.
- </div>
-
- <div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/more"
- data-cardSizes="6x6"
- data-items-per-page="6"
- data-maxResults="15"
- data-initial-results="6"></div>
-
- </div>
-</section>
-
diff --git a/docs/html-intl/intl/ru/preview/overview.jd b/docs/html-intl/intl/ru/preview/overview.jd
deleted file mode 100644
index 303e9ce..0000000
--- a/docs/html-intl/intl/ru/preview/overview.jd
+++ /dev/null
@@ -1,440 +0,0 @@
-page.title=Обзор программы
-page.metaDescription=Подготовьте свои приложения к выходу следующей версии Android.
-page.image=images/cards/card-n-overview_2x.png
-meta.tags="предварительная версия", "разработчик", "android"
-page.tags="preview", "developer", "android"
-
-@jd:body
-<!--
-<div class="cols" style=
-"background-color:#f2daf5; padding: 5px 0;margin-bottom:1em; text-align:center;">
-<h3>
- Developer Preview 3 is now available
- </h3>
- <p>Includes final SDK and near-final system images</p>
- <div style="margin:auto 1em">
- <ul class="dac-section-links">
- <li class="dac-section-link">
- <a href="{@docRoot}preview/support.html#preview3-notes">
- <span class="dac-sprite dac-auto-chevron"></span>
- Read the Notes</a>
- </li>
-
- <li class="dac-section-link">
- <a href="{@docRoot}preview/support.html#preview3-get">
- <span class="dac-sprite dac-auto-chevron"></span>
- Get the Update</a>
- </li>
-
- <li class="dac-section-link">
- <a href="https://code.google.com/p/android-developer-preview/">
- <span class="dac-sprite dac-auto-chevron"></span>
- Report Issues</a>
- </li>
- </ul>
- </div>
-</div>
--->
-
-<p>
- Добро пожаловать в программу <strong>Android N Developer Preview</strong>, участники
-которой получают все необходимое для тестирования и оптимизации
-своих приложений для следующей версии платформы Android. Участие в программе бесплатно, вам предоставляется возможность использовать
-инструменты N Developer Preview сразу же после их загрузки.
-</p>
-
-
-
-
-
-
-
-<div style="background-color:#eceff1;padding:1em;">
-<div class="wrap">
- <div class="cols">
- <div class="col-4of12">
- <h5>
- Образы для эмулятора и оборудования
- </h5>
-
- <p>
- Запустите и протестируйте свои приложения на широком спектре устройств или на эмуляторе.
-
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- Самый актуальный код платформы
- </h5>
-
- <p>
- Во время знакомства с предварительной версией платформы мы будем предоставлять ежемесячные обновления, поэтому вы сможете протестировать самые актуальные изменения в платформе.
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- Приоритетное исправление ошибок, зафиксированных разработчиками
- </h5>
-
- <p>
- В течение первых нескольких недель мы будем рассматривать отчеты об ошибках, поступающие от разработчиков, в приоритетном порядке,
-поэтому не теряйте времени и приступайте к тестированию и составлению отзывов как можно раньше.
- </p>
- </div>
-
- </div>
-
- <div class="cols">
-
-
- <div class="col-4of12">
- <h5>
- Новые возможности и новые функции
- </h5>
-
- <p>
- Заранее начните реализовывать в своих приложениях поддержку расширенной функциональности платформы.
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- Получение обновлений по беспроводной связи
- </h5>
-
- <p>
- Простое и удобное получение обновлений по беспроводной связи для поддерживаемых устройств в рамках программы бета-тестирования
-Android. Запись во флэш-память устройства не требуется.
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- Отзывы и поддержка
- </h5>
-
- <p>
- Отправляйте отзывы и сообщайте о проблемах с помощью нашей
-<a href="{@docRoot}preview/bug">системы отслеживания ошибок</a>. Общайтесь с другими
-разработчиками в
-<a href="{@docRoot}preview/dev-community">сообществе разработчиков для Android N</a>.
- </p>
- </div>
- </div>
-</div>
-</div>
-
-<!--
-<p>New in the Android N Developer Preview: </p>
-
-<ul>
- <li> Accompanying Android Beta Program for consumers, starting later in the preview</li>
- <li> More supported devices, including devices from OEM partners</li>
- <li> Seamless OTAs for your devices, from initial release to final N release without flashing</li>
-</ul>
--->
-
-<h2 id="timeline">График и обновления</h2>
-<img src="{@docRoot}images/n-preview-updates_2x.png">
-
-<p>
- Срок действия программы N Developer Preview запланирован с 9 марта 2016 г. и до выпуска окончательной версии Android N
-для AOSP и OEM, который состоится в третьем квартале 2016 г.
-</p>
-
-<p>
- На ключевых этапах разработки платформы мы предоставим обновления для среды разработки и
-тестирования. Выход обновлений запланирован каждый месяц (с интервалом
-4-6 недель). Основные этапы показаны ниже.
-</p>
-
-<ul>
- <li><strong><a href="{@docRoot}preview/support.html#dp1">Предварительная версия 1</a></strong> (первоначальный выпуск, альфа-версия)</li>
- <li><strong><a href="{@docRoot}preview/support.html#dp2">Предварительная версия 2</a></strong> (инкрементальное обновление, альфа-версия)</li>
- <li><strong>Предварительная версия 3</strong> (инкрементальное обновление, бета-версия)</li>
- <li><strong>Предварительная версия 4</strong> (окончательные версии API и официальный SDK, публикация в Google Play)</li>
- <li><strong>Предварительная версия 5</strong> (практически готовые системные образы для заключительного тестирования)</li>
- <li><strong>Выпуск окончательной версии</strong> в AOSP и экосистеме</li>
-</ul>
-
-<p>
- Каждое обновление включает инструменты SDK, системные образы предварительной версии, эмуляторы, справочную
-документацию и описание отличий в API.
-</p>
-
-<p>
- На <strong>первых трех ключевых этапах предварительной версии</strong> предоставляется <strong>начальная среда
-тестирования и разработки</strong>, которая позволяет выявить
-проблемы совместимости в текущих приложениях и спланировать миграцию или доработку функций,
-требуемых для новой платформы. В течение этого времени вы можете предоставлять
-отзывы о функциях и API, а также проблемах совместимости файлов
-с помощью <a href="{@docRoot}preview/bug">системы отслеживания
-ошибок</a>. Обновления могут включать некоторые изменения API.
-</p>
-
-<p>
- В <strong>предварительных версиях 4 и 5</strong> вам будет предоставлен доступ к <strong>окончательным
-версиям API-интерфейсов и SDK системы N</strong>, а также к практически готовым системным образам
-для тестирования работоспособности и возможностей системы. Android N будет содержать API
-стандартного уровня. Вы сможете начать заключительное тестирование совместимости старых
-приложений и отладить новый код, в котором используются API-интерфейсы или возможности системы N.
-</p>
-
-<p>
- Начиная с предварительной версии 4, вы сможете <strong>публиковать приложения на
-устройствах</strong> под управлением Android N, используя API-интерфейсы официального уровня, например на
-пользовательских устройствах, участвующих в программе бета-тестирования Android. Вы можете
-выполнить публикацию сначала на альфа- и бета-каналах Google Play для тестирования
-приложений с помощью пользователей бета-версии Android перед их размещением в
-магазине для общего доступа.
-</p>
-
-<p>
- Мы настоятельно рекомендуем вам в ходе тестирования и разработки приложений для Android N <strong>постоянно
-обновлять вашу среду разработки</strong> по мере выхода обновлений
-предварительной версии. Для упрощения процесса вы можете зарегистрировать тестовые устройства в программе
-бета-тестирования Android и получать <strong>обновления по беспроводной связи</strong> на
-каждом ключевом этапе. Кроме того, обновленные образы предварительной версии можно загрузить
-и записать во флэш-память устройства вручную.
-</p>
-
-<p>
- Мы будем сообщать о появлении обновлений предварительной версии в <a href="http://android-developers.blogspot.com/">блоге разработчиков Android</a>, а
-также на этом сайте и в <a href="{@docRoot}preview/dev-community">сообществе разработчиков для
-Android N</a>.
-</p>
-
-
-<h2 id="preview_tools">Состав программы N Developer Preview</h2>
-
-<p>
- N Developer Preview содержит все, что необходимо для тестирования ваших существующих
-приложений на экранах различных размеров, тестирования с использованием различных сетевых технологий, наборов микросхем ЦП и графических процессоров,
-а также различных архитектур оборудования.
-</p>
-
-<h3 id="sdk_tools">Инструменты SDK</h3>
-
-<p>С помощью менеджера SDK в <a href="{@docRoot}sdk/installing/adding-packages.html">Android Studio</a> вы сможете загрузить следующие компоненты:</p>
-
-<ul>
- <li> <strong>SDK и инструменты</strong> N Developer Preview;
- <li> <strong>системный образ эмулятора</strong> (32- и 64-разрядная версии) для N Developer Preview;
- <li> <strong>системный образ эмулятора для Android TV</strong> (32-разрядная версия) N Developer Preview;
- <li> поддерживаемые библиотеки N Developer Preview (для новых шаблонов приложений).
-</ul>
-
-<p>
- При необходимости мы предоставляем обновления инструментов разработки на каждом ключевом этапе.
-</p>
-
-<h3 id="hardware_system_images">Системные образы оборудования</h3>
-
-<p>
- N Developer Preview включает системные образы для Nexus и других устройств, которые можно использовать при
-тестировании и разработке на физических устройствах. См. полный список аппаратных образов на странице <a href="{@docRoot}preview/download.html">Образы устройств</a>.
-
-</p>
-
-<p>
- Мы будем предоставлять обновленные системные образы для этих устройств на каждом ключевом этапе. Вы
-также сможете загружать и записывать обновленные системные образы во флэш-память тестовых устройств
-вручную всегда, когда это будет необходимо. Это особенно удобно для автоматических
-сред тестирования, где может требоваться многократная перезапись в флэш-память
-устройства.
-</p>
-
-<p class="note"><strong>Примечание</strong>.
-<strong>В отличие от предварительной версии прошлого года, для устройств, запись во флэш-память которых выполнялась вручную, обновления по беспроводной связи предоставляться не будут</strong>.
-В этом году вы можете получать обновления по беспроводной связи, зарегистрировав устройства в программе
-бета-тестирования Android, см. подробные сведения в следующем разделе.
-</p>
-
-<h3 id="android_beta">Обновления по беспроводной связи в рамках программы бета-тестирования Android</h3>
-
-<p>
- Новой функцией Android N является программа получения обновлений по сети, которая автоматически
-предоставляет последние обновления предварительной версии Android N непосредственно на устройства, зарегистрированные
-в программе тестирования. Участие в программе бесплатно и доступно всем, кто имеет поддерживаемые устройства,
-привязанные к учетной записи Google.
-</p>
-
-<p>
- Для регистрации посетите веб-сайт <a href="https://g.co/androidbeta">программы бета-тестирования
-Android</a>. Вы увидите
-список всех устройств, привязанных к учетной записи, которые можно зарегистрировать
-в программе бета-тестирования Android.
-</p>
-
-<ol>
- <li> Выберите устройства, для которых требуется получать обновления Android N.
- <li> Нажмите Enroll, прочтите условия использования и подтвердите согласие с ними, затем нажмите OK.
-</ol>
-
-<p>
- После регистрации на устройство придет обновление. В большинстве случаев
-для перехода на Android N не требуется выполнять полный сброс конфигурационных данных, однако,
-рекомендуется выполнить резервное копирование важных данных перед
-регистрацией устройства в программе.
-</p>
-
-<p>
- При получении устройством обновлений рекомендуется загружать и
-устанавливать максимально быстро. Это требуется, чтобы быть в курсе
-последних изменений системного интерфейса, возможностей системы, особенностей API-интерфейсов и функций.
-</p>
-
-<p>
- По завершению программы тестирования Developer Preview на зарегистрированные устройства
-будет отправлено обновление с официальной версией Android N.
-</p>
-
-<p>
- Вы можете отменить регистрацию устройств в программе бета-тестирования Android в любое время на сайте
-программы. Перед отменой регистрации выполните резервное копирование данных на
-устройстве.
-</p>
-
- <p class="note"><strong>Примечание</strong>.
-При отмене регистрации <strong>на вашем устройстве выполняется восстановление заводских настроек</strong>
-для последней версии
-Android 6.0 Marshmallow (не обязательно той версии, которая
-была установлена до регистрации устройства). Для обеспечения правильности установки
-ваши данные будут удалены с устройства, включая контакты, сообщения,
-фотографии и др.
-</p>
-
-<h3 id="documentation_and_sample_code">Документация и примеры кода</h3>
-
-<p>
- Для ознакомления с Android N на сайте программы Developer Preview
-представлены следующие документы.
-</p>
-
-<ul>
- <li> <a href="{@docRoot}preview/setup-sdk.html">Настройка в целях разработки для
-Android N</a> – содержит
-пошаговые инструкции по началу работы.</li>
- <li> <a href="{@docRoot}preview/behavior-changes.html">Обзор изменений в
-работе системы</a> – указывает ключевые области для тестирования.</li>
- <li> Документация по новым API-интерфейсам, включая <a href="{@docRoot}preview/api-overview.html">Обзор API</a>, доступный для загрузки
-<a href="{@docRoot}preview/setup-sdk.html#docs-dl">Справочник по
-API</a> и подробные руководства для разработчиков, в которых освещаются такие ключевые возможности, как поддержка многооконного режима,
-группирование уведомлений, поддержка нескольких языковых настроек и др.
- <li> <a href="{@docRoot}preview/samples.html">Примеры кода</a>, где
-можно посмотреть реализацию поддержки разрешений доступа и других новых функций.
- <li> <a href="{@docRoot}preview/support.html#release-notes">Примечания к выпуску</a>
-для текущей версии N Developer Preview, включая информацию об изменениях и
-отчеты о различиях.
-</ul>
-
-<h4 id="reference">Справочник по API, доступный для загрузки</h4>
-
-<p>
- На этапе ранних обновлений предварительной версии вы сможете загрузить последний
-<a href="{@docRoot}preview/setup-sdk.html#docs-dl">Справочник по API
-для платформы Android N</a> в виде zip-архива. В нем также
-содержится отчет о различиях, позволяющий легко определить изменения в API-интерфейсах между
-API 23 и предыдущими версиями.
-</p>
-
-<p>
- После окончательного утверждения API-интерфейсов Android N и назначения официального уровня API,
-вам будет предоставлен онлайн-справочник по этому API-интерфейсу по адресу <a href="https://developer.android.com">https://developer.android.com</a>.
-</p>
-
-<h3 id="support_resources">
- Ресурсы поддержки
-</h3>
-
-<p>
- При тестировании и разработке приложений в рамках программы N Developer Preview используйте следующие каналы
-для отправки отчетов о проблемах и отзывов.
-</p>
-
-<ul>
- <li> <a href="https://code.google.com/p/android-developer-preview/">Система отслеживания ошибок
-в N Developer Preview</a> является <strong>основным каналом для отправки отзывов.</strong> С его помощью можно сообщать об ошибках, проблемах
-производительности и отправлять общие отзывы. Вы также сможете ознакомиться со списком
-<a href="{@docRoot}preview/bug">известных проблем</a> и
-выполнить поиск обходных путей для них. Мы будем держать вас в курсе по вашему вопросу после его сортировки и отправки
-на рассмотрение инженерам Android. </li>
- <li> <a href="{@docRoot}preview/dev-community">Сообщество разработчиков для Android N</a> – это
-сообщество Google+, где можно <strong>общаться с другими разработчиками</strong>, работающими с
-Android N. Делитесь в сообществе своими наблюдениями и идеями, а также находите ответы на
-вопросы об Android N. Мы будем просматривать ваши сообщения и предоставлять ответы
-и необходимые рекомендации.</li>
-</ul>
-
-<h3 id="targeting">Выбор целевого уровня, предварительные версии API и публикация приложений</h3>
-
-<p>
- Платформа N Developer Preview предоставляет ориентированные на разработку систему и библиотеку Android,
-в которых <strong>отсутствуют API-интерфейсы стандартного уровня</strong>. Если вы не хотите
-проверять свое приложение на совместимость (хотя мы настоятельно
-рекомендуем сделать это), выберите целевую предварительную версию Android N, задав для
-параметра <code><a href=
- "{@docRoot}preview/setup-sdk.html#create-update">targetSdkVersion</a></code>
-своего приложения значение <code>“N”</code>.
-</p>
-
-<p>
- В Android N Developer Preview представлены <strong>предварительные версии API-интерфейсов</strong>.
-Они не будут официально публиковаться до выпуска окончательной версии пакета SDK,
-намеченного на третий квартал 2016 г. Это значит, что в
-<strong>API-интерфейсы могут вноситься небольшие изменения</strong>, особенно в первые недели после
-запуска программы. Мы будем предоставлять вам сводку об изменениях с каждым
-обновлением Android N Developer Preview.
-</p>
-
-<p class="note">
- <strong>Примечание</strong>. Несмотря на возможные изменения в предварительных версиях API-интерфейсов,
-соответствующие функциональные возможности системы работают стабильно и уже готовы для
-тестирования.
-</p>
-
-<p>
- Политика Google Play <strong>однозначно запрещает публикацию приложений, разработанных для N Developer
-Preview</strong>. Когда будет доступен окончательный SDK для Android N, вы сможете
-установить в качестве целевого API-интерфейс Android N официального уровня и опубликовать приложение в Google
-Play через альфа- и бета-каналы выпуска. Тем временем, если вы хотите распространить приложение, предназначенное для проверки под
-Android N, используйте для этого электронную почту или разместите такие приложения на своем сайте
-для прямой загрузки.
-</p>
-
-<p>
- После выхода полной версии Android N для AOSP и OEM, запланированного на третий квартал 2016 г.,
-можно будет публиковать приложения для Android N в общем доступе на
-Google Play.
-</p>
-
-
-<h2 id="how_to_get_started">Начало работы</h2>
-
-<p>
- Чтобы приступить к тестированию своего приложения в Android N, выполните следующие действия.
-</p>
-
-<ol>
- <li> Ознакомьтесь с <a href="{@docRoot}preview/api-overview.html">Обзором API</a>
-и сведениями об <a href="{@docRoot}preview/behavior-changes.html">изменениях в работе</a>, чтобы
-получить представление о новых возможностях платформы и о том, как это может повлиять на ваши приложения. В частности, узнайте подробнее
-о новых возможностях в отношении <a href="{@docRoot}preview/features/notification-updates.html">уведомлений</a> и
-<a href="{@docRoot}preview/features/multi-window.html">поддержки многооконного режима</a>.</li>
- <li> Настройте свою среду, руководствуясь инструкциями в документе <a href="{@docRoot}preview/setup-sdk.html">Настройка пакета SDK для предварительной версии</a>
-и рекомендациями по конфигурированию тестовых устройств.</li>
- <li> Соблюдайте <a href="https://developers.google.com/android/nexus/images">инструкции
-по записи во флэш-память</a> при выполнении записи системного образа Android N на устройство. </li>
- <li> Просмотрите <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Справочник по API</a>
-и <a href="{@docRoot}preview/samples.html">примеры кода Android N</a>, чтобы узнать больше
-о новых возможностях API-интерфейсов и о том, как использовать их в ваших приложениях.
- <li> Присоединяйтесь к <a href="{@docRoot}preview/dev-community">сообществу разработчиков
-Android N</a>, чтобы всегда быть в курсе последних новостей и общаться с другими
-разработчиками, работающими с новой платформой.</li>
-</ol>
-
-<p>
- Благодарим за участие в программе Android N Developer Preview!
-</p>
diff --git a/docs/html-intl/intl/ru/preview/samples.jd b/docs/html-intl/intl/ru/preview/samples.jd
deleted file mode 100644
index 1f674f3..0000000
--- a/docs/html-intl/intl/ru/preview/samples.jd
+++ /dev/null
@@ -1,85 +0,0 @@
-page.title=Примеры
-page.tags="preview", "samples", "android"
-page.image=images/cards/card-n-samples_2x.png
-@jd:body
-
-<p>
- Следующие примеры кода представлены для Android N. Чтобы
-загрузить примеры в Android Studio, выберите в меню <b>File > Import
-Samples</b>.
-</p>
-
-<p class="note">
- <strong>Примечание.</strong> Эти загружаемые проекты предназначены для
-использования с Gradle и Android Studio.
-</p>
-
-
-<h3 id="mw">Многооконный режим</h3>
-<img src="{@docRoot}preview/images/sample-multiwindow.png" style="float: left; padding-right: 0.5em" height="250" width="156" />
-<p>
- В данном примере показаны преимущества многооконного
-интерфейса для вашего приложения.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-MultiWindowPlayground">
-Загрузить с сайта GitHub</a>
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="an">Активные уведомления</h3>
-<img src="{@docRoot}preview/images/sample-activenotifications.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
-<p>
- В этом ранее созданном примере показана простая служба, которая отправляет
-уведомления с помощью NotificationCompat. Каждое непрочитанное сообщение от пользователя
-отправляется отдельным уведомлением.
-</p>
-<p>
- Этот пример был обновлен с использованием новых функций уведомлений,
-доступных в Android N.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-ActiveNotifications">
-Загрузить с сайта GitHub</a>
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="ms">Служба сообщений</h3>
-<img src="{@docRoot}preview/images/sample-messagingservice.png" style="float: left; padding-right: 0.5em" height="250" width="150" />
-<p>
- В этом предварительно созданном примере показано, как использовать
-NotificationManager для определения количества уведомлений,
-отображаемого приложением.
-</p>
-<p>
- Этот пример был обновлен с использованием новых функций уведомлений,
-доступных в Android N.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-MessagingService">
-Загрузить с сайта GitHub</a>
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="fbe">Режим Direct Boot</h3>
-<img src="{@docRoot}preview/images/sample-directboot.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
-<p>
- В данном примере показано как сохранять и считывать данные в зашифрованном
-хранилище, которое всегда доступно только на загруженном устройстве.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-DirectBoot">
-Загрузить с сайта GitHub</a>
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="sda">Доступ к выделенным каталогам</h3>
-<img src="{@docRoot}preview/images/sample-scopeddirectoryaccess.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
-<p>
- В данном примере показано, как выполнять чтение и запись данных из определенных
-каталогов при уменьшении числа требуемых разрешений.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-ScopedDirectoryAccess">
-Загрузить с сайта GitHub</a>
-</p>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ru/preview/setup-sdk.jd b/docs/html-intl/intl/ru/preview/setup-sdk.jd
deleted file mode 100644
index 6ae86e9..0000000
--- a/docs/html-intl/intl/ru/preview/setup-sdk.jd
+++ /dev/null
@@ -1,223 +0,0 @@
-page.title=Установка предварительной
-версииmeta.keywords="предварительная версия", "android"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-sdk_2x.png
-
-@jd:body
-
-
-<div id="qv-wrapper">
- <div id="qv">
-<ol>
- <li><a href="#get-as13">Установка Android Studio 2.1</a></li>
- <li><a href="#get-sdk">Установка Android N SDK</a>
- <ol>
- <li><a href="#docs-dl">Справочная документация</a>
- </ol>
- </li>
- <li><a href="#java8">Установка Java 8 JDK и JRE</a></li>
- <li><a href="#create-update">Обновление или создание проекта</a></li>
- <li><a href="#next">Дальнейшие действия</a></li>
-</ol>
- </div>
-</div>
-
-<p>Создание приложений для Android N Preview требует некоторых обновлений среды разработки,
-описанных в этом документе.</p>
-
-<p>Чтобы просто протестировать совместимость вашего приложения на системном образе
-Android N, следуйте рекомендациям руководства <a href="{@docRoot}preview/download.html">Тест на устройстве Android N</a>.</p>
-
-<img src="{@docRoot}preview/images/n-preview-setup.png" width="700" alt="" />
-
-
-<h2 id="get-as13">Установка Android Studio 2.1 (предварительная версия)</h2>
-
-<p>Платформа Android N добавляет поддержку <a href="{@docRoot}preview/j8-jack.html">возможностей языка Java 8</a>,
-которые требуют наличия нового компилятора, именуемого Jack. Последняя версия Jack
-в настоящее время поддерживается только в Android Studio 2.1. Поэтому если вы хотите использовать возможности
-языка Java 8 для
-разработки своего приложения, вам понадобится Android Studio 2.1. В противном случае вам не потребуется использовать компилятор Jack,
-однако все равно придется выполнить обновление до JDK 8 для компиляции под платформу Android N,
-как описано ниже.
-</p>
-
-<p>Предварительная версия Android Studio 2.1 в настоящее время доступна на канале обновлений Canary.
-Если у вас уже есть Android Studio
-и вы не хотите обновлять ее до версии канала Canary, вы можете загрузить
-Android Studio 2.1 для отдельной установки и использовать ее для разработки
-под Android N, не затрагивая основную среду Android Studio.
-</p>
-
-<p>Чтобы загрузить Android Studio 2.1 для отдельной установки, выполните следующие шаги
-(если вы хотите обновить существующую установку Android Studio до версии 2.1, начните с шага 4).
-</p>
-
-<ol>
- <li>Измените название существующей установки Android Studio, добавив к ней номер версии.
-Таким образом, при установке новая версия не заменит собой существующую.
-</li>
- <li>Загрузите соответствующий ZIP-архив для своей операционной системы со
-<a href="http://tools.android.com/download/studio/canary/latest">страницы загрузки канала Canary</a>.
- </li>
- <li>Разархивируйте пакет и переместите содержимое Android Studio 2.1 в подходящее
-место для приложений вашей системы, затем запустите программу установки.</li>
- <li>Откройте окно "Settings"
-(<strong>File > Settings</strong> для Windows/Linux, или
-<strong>Android Studio > Preferences</strong> для Mac). В левой
-панели выберите <strong>Appearance & Behavior > System Settings >
-Updates</strong>.
- </li>
- <li>На панели "Updates" установите флажок <strong>Automatically
-check updates for</strong> и выберите
-<strong>Canary Channel</strong> в выпадающем списке.
- </li>
-</ol>
-
-<p>Оставьте это окно настроек открытым для следующего шага.</p>
-
-
-<h2 id="get-sdk">Установка N Preview SDK</h2>
-
-<p>Чтобы начать разработку с использованием API-интерфейсов Android N, необходимо установить
-Android N Preview SDK в Android Studio, выполнив следующие шаги.</p>
-
-<ol>
- <li>На открытой панели "Updates" (шаг 4 выше)
-установите флажок <strong>Automatically
-check updates for Android SDK</strong> и выберите
-<strong>Preview Channel</strong> в выпадающем списке.
- </li>
- <li>Щелкните <strong>Check Now</strong>.</li>
-
- <li>В левой панели выберите <strong>Appearance & Behavior > System
-Settings > Android SDK</strong>.
-
- <li>Выберите вкладку <strong>SDK Platforms</strong> и установите флажок
-<strong>Android N Preview</strong>.</li>
-
- <li>Откройте вкладку <strong>SDK Tools</strong> и установите флажки
-<strong>Android SDK Build Tools</strong>, <strong>Android SDK
-Platform-Tools</strong> и <strong>Android SDK Tools</strong>.
-
- </li>
-
- <li>Нажмите <strong>OK</strong> и примите лицензионные
-соглашения для всех устанавливаемых пакетов.
- </li>
-</ol>
-
-<h3 id="docs-dl">Загрузка справочной документации по N Preview</h3>
-
-<p>
- Подробная информация по API-интерфейсам Android N содержится в справочной документации N Preview,
-которую можно загрузить из следующей таблицы.
-Этот пакет содержит сокращенную автономную версию веб-сайта для разработчиков Android
-и включает в себя обновленный справочник по API-интерфейсам Android N, а также сведения о различиях
-API.
-</p>
-
-<table>
- <tr>
- <th scope="col">Документация</th>
- <th scope="col">Контрольные суммы</th>
- </tr>
- <tr>
- <td style="white-space: nowrap">
- <a href="{@docRoot}shareables/preview/n-preview-1-docs.zip">n-preview-1-docs.zip</a></td>
- <td width="100%">
- MD5: 4ab33ccbe698f46f125cc5b807cf9c2f<br>
- SHA-1: 6a3880b3ccd19614daae5a4d0698ea6ae11c20a5
- </td>
- </tr>
-</table>
-
-
-
-<h2 id="java8">Установка Java 8 JDK и JRE</h2>
-
-<p>Чтобы скомпилировать ваше приложение для платформы Android N, необходимо использовать
-Java 8 Developer Kit (JDK 8), а для использования некоторых инструментов с Android
-Studio 2.1 необходимо установить Java 8 Runtime Environment (JRE 8). Поэтому если у вас еще
-нет последних версий каждого из этих пакетов, загрузите JDK 8 и JRE 8
-прямо сейчас.</p>
-
-<p>Установите версию JDK в Android Studio, выполнив следующие шаги.</p>
-
-<ol>
- <li>Откройте проект Android в Android Studio, затем откройте
-окно "Project Structure", выбрав <strong>File > Project
-Structure</strong>. (Вы также можете установить структуру по умолчанию для всех проектов,
-выбрав <strong>File > Other Settings > Default Project Structure</strong>).
-
- </li>
- <li>В левой панели окна щелкните <strong>SDK Location</strong>.
- </li>
- <li>В поле <strong>JDK Location</strong> укажите расположение
-Java 8 JDK (нажмите кнопку справа
-для просмотра своих файлов), затем нажмите <strong>OK</strong>.
- </li>
-</ol>
-
-<img src="{@docRoot}preview/images/studio-jdk-location.jpg" width="700" alt="" />
-
-
-<h2 id="create-update">Обновление или создание проекта</h2>
-
-<p>
- Для использования API-интерфейсов Android N ваш проект должен быть сконфигурирован соответствующим образом.
-</p>
-
-<p>Если вы планируете использовать возможности языка Java 8, ознакомьтесь в документе
-<a href="{@docRoot}preview/j8-jack.html">Возможности языка Java 8</a>
-с информацией о поддерживаемых возможностях Java 8 и о настройке
-проекта с компилятором Jack.</p>
-
-
-<h3 id="update">Обновление существующего проекта</h3>
-
-<p>Откройте файл
-<code>build.gradle</code> для своего модуля и укажите в нем следующие значения:
-
-</p>
-
-<pre>
-android {
- compileSdkVersion <strong>'android-N'</strong>
- buildToolsVersion <strong>'24.0.0-rc1'</strong>
- ...
-
- defaultConfig {
- minSdkVersion <strong>'N'</strong>
- targetSdkVersion <strong>'N'</strong>
- ...
- }
- ...
-}</pre>
-
-
-<h3 id="create">Создание нового проекта</h3>
-
-
-<p>Чтобы создать новый проект разработки с использованием Android N Preview SDK выполните следующие действия.</p>
-
-<ol>
- <li>Выберите <strong>File > New Project</strong> и выполняйте указания, пока не перейдете на страницу
-"Target Android Devices".
- </li>
- <li>На этой странице выберите вариант <strong>Phone and Tablet</strong>.</li>
- <li>В разделе <strong>Phone and Tablet</strong> перейдите в список <strong>Minimum
-SDK</strong> и выберите
-<strong>N: Android API 23, N Preview (Preview)</strong>.</li>
-</ol>
-
-
-<h2 id="next">Дальнейшие действия</h2>
-
-<ul>
- <li>Выполните рекомендации руководства <a href="{@docRoot}preview/download.html">Тест на устройстве Android N</a>.</li>
- <li>Более подробную информацию о платформе Android N можно найти в документе
-<a href="{@docRoot}preview/behavior-changes.html">Изменения в работе</a>
-и в описании <a href="{@docRoot}preview/api-overview.html">API-интерфейсов и возможностей Android N</a>.
-</li>
-</ul>
diff --git a/docs/html-intl/intl/ru/training/articles/direct-boot.jd b/docs/html-intl/intl/ru/training/articles/direct-boot.jd
new file mode 100644
index 0000000..98849fe
--- /dev/null
+++ b/docs/html-intl/intl/ru/training/articles/direct-boot.jd
@@ -0,0 +1,181 @@
+page.title=Режим Direct Boot
+page.keywords=preview,sdk,direct boot
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>Содержание документа</h2>
+ <ol>
+ <li><a href="#run">Запрос доступа для запуска в режиме Direct Boot</a></li>
+ <li><a href="#access">Доступ к шифрованному хранилищу данных устройства</a></li>
+ <li><a href="#notification">Уведомление о разблокировке пользователем</a></li>
+ <li><a href="#migrating">Перенос имеющихся данных</a></li>
+ <li><a href="#testing">Тестирование приложения с поддержкой шифрования</a></li>
+ </ol>
+</div>
+</div>
+
+<p>Android N работает в защищенном режиме <i>Direct Boot,</i> когда
+устройство было включено, но не разблокировано пользователем.
+ Для поддержки такого режима работы в системе имеется два хранилища данных:</p>
+
+<ul>
+<li><i>Хранилище, зашифрованное на уровне учетных данных.</i>Это хранилище используется по умолчанию
+и доступно только тогда, когда пользователь разблокирует устройство.</li>
+<li><i>Хранилище, зашифрованное на уровне устройства.</i>Это хранилище доступно в режиме
+Direct Boot и тогда, когда пользователь разблокирует устройство.</li>
+</ul>
+
+<p>По умолчанию в режиме Direct Boot приложения не работают.
+Если вашему приложению требуется выполнять какие-то действия в режиме Direct Boot, вы можете зарегистрировать
+компоненты приложения, которые должны быть запущены в этом режиме. Некоторые распространенные примеры использования
+приложений, выполняющих операции в режиме Direct Boot:</p>
+
+<ul>
+<li>Приложения с уведомлениями по расписанию, например,
+будильники.</li>
+<li>Приложения, посылающие пользователю важные уведомления, например, приложения СМС.</li>
+<li>Приложения для лиц с ограниченными возможностями, например, Talkback.</li>
+</ul>
+
+<p>Если вашему приложению требуется доступ к данным в режиме Direct Boot, используйте
+шифрованное хранилище устройства. Шифрованное хранилище устройства содержит данные,
+зашифрованные с помощью ключа, доступного только после
+успешной подтвержденной загрузки устройства.</p>
+
+<p>Если данные следует шифровать с помощью ключа, связанного с учетными данными
+пользователя (например, с PIN-кодом или паролем), используйте хранилище, требующее ввода учетных данных.
+Такое хранилище доступно только после успешной
+разблокировки устройства пользователем и до тех пор, пока пользователь не перезапустит устройство. Если
+пользователь включает экран блокировки после разблокировки устройства, шифрованное хранилище,
+требующее ввода учетных данных, не блокируется.</p>
+
+<h2 id="run">Запрос доступа для запуска в режиме Direct Boot</h2>
+
+<p>Прежде
+чем работать в режиме Direct Boot или получать доступ к шифрованному
+хранилищу устройства, приложения должны зарегистрировать свои компоненты в системе. Приложения регистрируются в системе, помечая компоненты как
+<i>поддерживающие шифрование</i>. Чтобы пометить компонент как поддерживающий шифрование, нужно установить для атрибута
+<code>android:encryptionAware</code> в манифесте значение true.<p>
+
+<p>Компоненты, поддерживающие шифрование, можно регистрировать для получения
+<code>LOCKED_BOOT_COMPLETED</code> широковещательных сообщений от
+системы после перезапуска устройства. В этот момент шифрованное хранилище устройства
+доступно, и компонент может выполнять необходимые задачи в режиме
+Direct Boot, например, включать будильник по расписанию.</p>
+
+<p>В следующем фрагменте кода приведен пример регистрации компонента
+{@link android.content.BroadcastReceiver} как поддерживающего шифрование и добавления
+фильтра намерения <code>LOCKED_BOOT_COMPLETED</code> в манифест приложения:</p>
+
+<pre>
+<receiever
+ android:encryptionAware="true" >
+ ...
+ <intent-filter>
+ <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
+ </intent-filter>
+</receiver>
+</pre>
+
+<p>После разблокировки устройства пользователем все компоненты имеют доступ к шифрованному хранилищу устройства
+и к шифрованному хранилищу, требующему ввода учетных данных.</p>
+
+<h2 id="access">Доступ к шифрованному хранилищу данных устройства</h2>
+
+<p>Для получения доступа к шифрованному хранилищу устройства следует создать второй экземпляр
+{@link android.content.Context} посредством вызова
+<code>Context.createDeviceEncryptedStorageContext()</code>. Все вызовы API
+системы хранения данных с использованием этого контекста получают доступ к шифрованному хранилищу устройства. В
+следующем примере показано, как получить доступ к шифрованному хранилищу устройства и открыть существующий
+файл данных приложения:</p>
+
+<pre>
+Context directBootContext = Context.createDeviceEncryptedStorageContext();
+// Access appDataFilename that lives in device encrypted storage
+FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
+// Use inStream to read content...
+</pre>
+
+<p>Шифрованное хранилище устройства следует использовать только для
+информации, которая должна быть доступна в режиме Direct Boot.
+Шифрованное хранилище устройства не следует использовать в качестве шифрованного хранилища общего назначения.
+Для хранения данных пользователя или шифрованных данных, которые не требуются в режиме
+Direct Boot, следует использовать шифрованное хранилище, требующее ввода учетных данных.</p>
+
+<h2 id="notification">Уведомление о разблокировке пользователем</h2>
+
+<p>Когда после перезагрузки устройства пользователь разблокирует его, ваше приложение может переключиться на
+шифрованное хранилище, требующее ввода учетных данных, и использовать обычные системные службы,
+зависящие от учетных данных пользователя.</p>
+
+<p>Чтобы приложение получало уведомления о разблокировке устройства пользователем после перезагрузки,
+необходимо зарегистрировать {@link android.content.BroadcastReceiver} работающего компонента
+для отслеживания сообщения <code>ACTION_USER_UNLOCKED</code>. Также приложение может
+получать существующее сообщение {@link android.content.Intent#ACTION_BOOT_COMPLETED
+ACTION_BOOT_COMPLETED}, которое теперь указывает, что устройство загружено и разблокировано
+пользователем.</p>
+
+<p>Приложение может направлять запрос напрямую, если пользователь разблокирует устройство посредством вызова
+<code>UserManager.isUserUnlocked()</code>.</p>
+
+<h2 id="migrating">Перенос имеющихся данных</h2>
+
+<p>Если пользователь обновит свое устройство для использования режима Direct Boot, вашему приложению может потребоваться перенести
+имеющиеся данные в шифрованное хранилище устройства. Используйте
+<code>Context.migrateSharedPreferencesFrom()</code> и
+<code>Context.migrateDatabaseFrom()</code> для переноса данных о настройках и содержимого баз данных
+между шифрованным хранилищем, требующим ввода учетных данных, и шифрованным хранилищем устройства.</p>
+
+<p>Хорошо обдумайте, какие данные следует перенести из
+шифрованного хранилища, требующего ввода учетных данных, в шифрованное хранилище устройства. Не следует переносить в
+шифрованное хранилище устройства личные данные пользователя, такие как
+пароли или токены авторизации. В некоторых случаях вашему приложению может потребоваться работать
+с отдельными наборами данных в двух шифрованных хранилищах.</p>
+
+<h2 id="testing">Тестирование приложения с поддержкой шифрования</h2>
+
+<p>Протестируйте свое приложение с поддержкой шифрования в новом режиме Direct Boot. Существуют
+два способа включить режим Direct Boot.</p>
+
+<p class="caution"><strong>Внимание!</strong> При включении режима Direct Boot
+с устройства удаляются все данные пользователя.</p>
+
+<p>Чтобы включить режим
+Direct Boot на поддерживаемых устройствах с Android N, выполните одну из следующих последовательностей действий.</p>
+
+<ul>
+<li>Включите на устройстве параметры разработчика <b>Developer options</b>, если вы еще не сделали этого ранее. Для этого
+перейдите на экран <b>Settings > About phone</b> и нажмите семь раз <b>Build number</b>.
+ Когда параметры разработчика станут доступны, откройте раздел
+<b>Settings > Developer options</b> и выберите
+<b>Convert to file encryption</b>.</li>
+<li>Используйте следующие команды оболочки adb для включения режима Direct Boot:
+<pre class="no-pretty-print">
+$ adb reboot-bootloader
+$ fastboot --wipe-and-use-fbe
+</pre>
+</li>
+</ul>
+
+<p>Если вам требуется переключать
+режимы на тестовых устройствах, вы можете использовать эмуляцию режима Direct Boot. Режим эмуляции следует использовать только для целей
+разработки, в нем возможна потеря данных. Чтобы включить эмуляцию режима Direct Boot,
+установите режим блокировки устройства, выберите пункт "No thanks", если система предлагает открыть
+защищенный экран запуска при установке режима блокировки, а затем используйте
+следующую команду оболочки adb:</p>
+
+<pre class="no-pretty-print">
+$ adb shell sm set-emulate-fbe true
+</pre>
+
+<p>Для отключения эмуляции режима Direct Boot нужно использовать следующую команду:</p>
+
+<pre class="no-pretty-print">
+$ adb shell sm set-emulate-fbe false
+</pre>
+
+<p>При использовании этих команд устройство перезагружается.</p>
diff --git a/docs/html-intl/intl/ru/training/articles/scoped-directory-access.jd b/docs/html-intl/intl/ru/training/articles/scoped-directory-access.jd
new file mode 100644
index 0000000..3e67d35
--- /dev/null
+++ b/docs/html-intl/intl/ru/training/articles/scoped-directory-access.jd
@@ -0,0 +1,124 @@
+page.title=Доступ к выделенным каталогам
+page.keywords=preview,sdk,scoped directory access
+page.tags=androidn
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>Содержание документа</h2>
+ <ol>
+ <li><a href="#accessing">Доступ к каталогу во внешнем хранилище</a></li>
+ <li><a href="#removable">Доступ к каталогу на съемном носителе</a></li>
+ <li><a href="#best">Советы и рекомендации</a></li>
+ </ol>
+</div>
+</div>
+
+<p>Некоторым приложениям (например, фотоприложениям) обычно требуется доступ только к отдельным каталогам
+внешнего хранилища, например, к каталогу <code>Pictures</code>. Существующие
+методы доступа к внешним хранилищам не предназначены для обеспечения приложениям такого типа удобного
+доступа к выделенным каталогам. Например:</p>
+
+<ul>
+<li>Запросы {@link android.Manifest.permission#READ_EXTERNAL_STORAGE}
+или {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} в манифесте
+разрешают доступ ко всем общедоступным каталогам внешнего хранилища, хотя
+вашему приложению может не требоваться такой уровень доступа.</li>
+<li>При использовании инфраструктуры
+<a href="{@docRoot}guide/topics/providers/document-provider.html">Storage
+Access Framework</a> пользователь обычно выбирает каталоги через
+системный пользовательский интерфейс, что не требуется, если приложение всегда использует один
+и тот же внешний каталог.</li>
+</ul>
+
+<p>Android N предоставляет новый упрощенный API для доступа
+к распространенным каталогам внешнего хранилища. </p>
+
+<h2 id="accessing">Доступ к каталогу во внешнем хранилище</h2>
+
+<p>Используйте класс <code>StorageManager</code> для получения соответствующего экземпляра
+<code>StorageVolume</code>. Затем создайте намерение, вызвав метод
+<code>StorageVolume.createAccessIntent()</code> этого экземпляра.
+Используйте это намерение для доступа к каталогам внешнего хранилища. Чтобы получить список
+всех доступных томов, в том числе томов на съемных носителях, используйте
+<code>StorageManager.getVolumesList()</code>.</p>
+
+<p>В следующем фрагменте кода приведен пример того, как открывать каталог
+<code>Pictures</code> в главном общем хранилище:</p>
+
+<pre>
+StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
+StorageVolume volume = sm.getPrimaryVolume();
+Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+</pre>
+
+<p>Система пытается предоставить доступ к внешнему каталогу и, при необходимости,
+запрашивает подтверждение доступа у пользователя с помощью упрощенного пользовательского интерфейса:</p>
+
+<img src="{@docRoot}images/android-7.0/scoped-directory-access-framed.png" srcset="{@docRoot}images/android-7.0/scoped-directory-access-framed.png 1x,
+{@docRoot}images/android-7.0/scoped-directory-access-framed_2x.png 2x" />
+<p class="img-caption"><strong>Рисунок 1.</strong> Приложение запрашивает
+доступ к каталогу Pictures.</p>
+
+<p>Если пользователь предоставляет доступ, система вызывает переопределенный метод
+<code>onActivityResult()</code> с кодом результата
+<code>Activity.RESULT_OK</code>, а также данные намерения, содержащие URI. Используйте
+предоставленный URI для доступа к данным каталога аналогично использованию URI,
+возвращаемых
+<a href="{@docRoot}guide/topics/providers/document-provider.html">Storage
+Access Framework</a>.</p>
+
+<p>Если пользователь не предоставляет доступ, система вызывает переопределенный метод
+<code>onActivityResult()</code> с кодом результата
+<code>Activity.RESULT_CANCELED</code> и отсутствующими данными намерения.</p>
+
+<p class="note"><b>Примечание.</b> При получении доступа к определенному внешнему каталогу
+приложение также получает доступ к вложенным в него каталогам.</p>
+
+<h2 id="removable">Доступ к каталогу на съемном носителе</h2>
+
+<p>Чтобы использовать доступ к выделенным каталогам на съемном носителе,
+сначала нужно добавить объект {@link android.content.BroadcastReceiver}, отслеживающий уведомления
+{@link android.os.Environment#MEDIA_MOUNTED}, например:</p>
+
+<pre>
+<receiver
+ android:name=".MediaMountedReceiver"
+ android:enabled="true"
+ android:exported="true" >
+ <intent-filter>
+ <action android:name="android.intent.action.MEDIA_MOUNTED" />
+ <data android:scheme="file" />
+ </intent-filter>
+</receiver>
+</pre>
+
+<p>Когда пользователь подключает съемный носитель, например SD-карту, система отправляет уведомление
+{@link android.os.Environment#MEDIA_MOUNTED}. Это уведомление
+предоставляет в данных намерения объект <code>StorageVolume</code>, который вы можете использовать
+для доступа к каталогам на съемном носителе. В следующем примере показано,
+как осуществляется доступ к каталогу <code>Pictures</code> на съемном носителе:</p>
+
+<pre>
+// BroadcastReceiver has already cached the MEDIA_MOUNTED
+// notification Intent in mediaMountedIntent
+StorageVolume volume = (StorageVolume)
+ mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
+volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+</pre>
+
+<h2 id="best">Советы и рекомендации</h2>
+
+<p>По возможности оставляйте постоянный URI для доступа к внешнему каталогу, чтобы приложению не
+приходилось многократно запрашивать у пользователя разрешение на доступ. После предоставления доступа пользователем вызовите метод
+<code>getContentResolver().takePersistableUriPermssion()</code> для
+URI доступа к каталогу. Система сохранит постоянный URI и при последующих запросах
+доступа будет возвращать ответ <code>RESULT_OK</code>. Таким образом, приложение не будет постоянно выводить
+окно с запросом подтверждения пользователя.</p>
+
+<p>Если пользователь запрещает доступ к внешнему каталогу, не нужно сразу
+же запрашивать доступ повторно. Пользователю может не понравиться, если приложение будет постоянно настаивать на
+получении доступа.</p>
diff --git a/docs/html-intl/intl/ru/training/articles/security-config.jd b/docs/html-intl/intl/ru/training/articles/security-config.jd
new file mode 100644
index 0000000..dee9b77b
--- /dev/null
+++ b/docs/html-intl/intl/ru/training/articles/security-config.jd
@@ -0,0 +1,745 @@
+page.title=Конфигурация сетевой безопасности
+page.keywords=androidn,security,network
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>Содержание документа</h2>
+<ol>
+ <li><a href="#manifest">Добавление файла конфигурации безопасности</a></li>
+ <li><a href="#CustomTrust">Настройка доверенных ЦС</a>
+ <ol>
+ <li><a href="#ConfigCustom">Настройка доверенного пользовательского ЦС</a></li>
+ <li><a href="#LimitingCas">Ограничение набора доверенных ЦС</a></li>
+ <li><a href="#TrustingAdditionalCas">Добавление дополнительных ЦС в доверенные</a></li>
+ </ol>
+ </li>
+ <li><a href="#TrustingDebugCa">ЦС для отладки</a></li>
+ <li><a href="#UsesCleartextTraffic">Отказ от передачи данных открытым текстом</a></li>
+ <li><a href="#CertificatePinning">Прикрепление сертификатов</a></li>
+ <li><a href="#ConfigInheritance">Поведение при наследовании конфигурации</a></li>
+ <li><a href="#FileFormat">Формат файла конфигурации</a></li>
+</ol>
+</div>
+</div>
+
+
+<p>
+ В Android N имеется функция "Конфигурация сетевой безопасности",
+ позволяющая приложениям настраивать свои параметры сетевой безопасности в защищенном
+ декларативном файле конфигурации без изменения программного кода приложения. Эти параметры можно
+ настроить для определенных областей и приложений. Основные
+ возможности этой функции:
+</p>
+
+<ul>
+ <li>
+ <b>Пользовательские якоря доверия.</b> Настройка доверенных центров сертификации (ЦС)
+ для защищенных соединений приложения. Примером может служить
+ настройка доверия определенным самозаверенным сертификатам или ограничение
+ набора общих ЦС, которым доверяет приложение.
+ </li>
+
+ <li>
+ <b>Замена при отладке.</b> Безопасная отладка защищенных соединений приложения
+ без дополнительного риска для установленной базы.
+ </li>
+
+ <li>
+ <b>Отказ от передачи данных открытым текстом.</b> Защита приложений от
+ случайной передачи данных открытым текстом.
+ </li>
+
+ <li>
+ <b>Прикрепление сертификатов.</b> Ограничение защищенных соединений приложения
+ определенными сертификатами.
+ </li>
+</ul>
+
+
+<h2 id="manifest">Добавление файла конфигурации безопасности</h2>
+
+<p>
+ Функция конфигурации сетевой безопасности использует файл XML, где вы можете указать
+ настройки своего приложения. Вы должны включить в манифест своего приложения
+ запись, указывающую на этот файл. В следующем отрывке кода из манифеста
+ показано, как создать такую запись:
+</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+...
+<app ...>
+ <meta-data android:name="android.security.net.config"
+ android:resource="@xml/network_security_config" />
+ ...
+</app>
+</pre>
+
+<h2 id="CustomTrust">Настройка доверенных ЦС</h2>
+
+<p>
+ Приложению может потребоваться возможность доверять пользовательскому набору центров сертификации (ЦС) вместо набора ЦС платформы, установленного по умолчанию.
+ Наиболее распространенные причины:
+</p>
+
+<ul>
+ <li>Подключение к узлу с пользовательским ЦС (самозаверенным,
+ внутренним корпоративным ЦС и т. д.)
+ </li>
+
+ <li>Ограничение списка только доверенными ЦС вместо
+ предустановленных.
+ </li>
+
+ <li>Добавление дополнительных ЦС, не установленных в системе, в список доверенных.
+ </li>
+</ul>
+
+<p>
+ По умолчанию защищенные соединения всех приложений (например, TLS, HTTPS) доверяют
+ предустановленным системным ЦС, а приложения для API уровня 23
+ (Android M) и ниже также по умолчанию доверяют ЦС, добавленным пользователем. Приложение
+ может настраивать свои соединения, используя {@code base-config} (для
+ настройки на уровне приложения) или {@code domain-config} (для настройки на уровне
+ доменов).
+</p>
+
+
+<h3 id="ConfigCustom">Настройка пользовательского ЦС</h3>
+
+<p>
+ Предположим, вы хотите подключиться к своему узлу, использующему самозаверенный сертификат SSL,
+ или к узлу, чей сертификат SSL был выпущен закрытым ЦС,
+ которому вы доверяете, например внутренним ЦС вашей компании.
+</p>
+
+<p>
+ <code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/my_ca"/>
+ </trust-anchors>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+<p>
+ Добавьте самозаверенный сертификат или сертификат закрытого ЦС в формате PEM или DER в
+ {@code res/raw/my_ca}.
+</p>
+
+
+<h3 id="LimitingCas">Ограничение набора доверенных ЦС</h3>
+
+<p>
+ Если приложению не нужно доверять всем ЦС, которым доверяет система, для него
+ можно указать сокращенный набор доверенных ЦС. Это позволит защитить
+ приложение от поддельных сертификатов, выпущенных любыми другими ЦС.
+</p>
+
+<p>
+ Настройка ограниченного набора доверенных ЦС похожа на <a href="#TrustingACustomCa">настройку доверия пользовательскому ЦС</a> для определенного домена, за тем исключением,
+ что в ресурсе указывается несколько ЦС.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">secure.example.com</domain>
+ <domain includeSubdomains="true">cdn.example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/trusted_roots"/>
+ </trust-anchors>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+<p>
+ Добавьте список доверенных ЦС в формате PEM или DER в {@code res/raw/trusted_roots}.
+ Обратите внимание, что файл в формате PEM должен содержать <em>только</em> данные PEM
+ без какого-либо дополнительного текста. Вы также можете указать несколько элементов
+ <a href="#certificates"><code><certificates></code></a>
+вместо одного.
+</p>
+
+
+<h3 id="TrustingAdditionalCas">
+ Добавление дополнительных ЦС в доверенные
+</h3>
+
+<p>
+ Приложению может потребоваться доверять дополнительным ЦС, которые не входят в список доверенных ЦС системы.
+ Это может быть связано с тем, что эти ЦС еще не добавлены в систему или
+ не соответствуют требованиям для включения в систему Android. Приложение
+ может добавить такие ЦС в доверенные, указав несколько источников сертификатов для
+ конфигурации.
+</p>
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <base-config>
+ <trust-anchors>
+ <certificates src="@raw/extracas"/>
+ <certificates src="system"/>
+ </trust-anchors>
+ </base-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="TrustingDebugCa">Настройка конфигурации ЦС для отладки</h2>
+
+<p>
+ При отладке приложения, которое использует для подключения протокол HTTPS, вам может потребоваться
+ подключение к локальному серверу разработки, у которого нет сертификата SSL
+ для рабочего сервера. Чтобы выполнить отладку без изменения кода
+ приложения, вы можете указать ЦС для отладки,
+ которые входят в число доверенных, <i>только</i> если для параметра <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">
+android:debuggable</a>
+ установлено значение {@code true} с использованием {@code debug-overrides}. Обычно среды разработки и инструменты
+ сборки устанавливают этот флаг автоматически для всех сборок, кроме выпускаемой версии.
+</p>
+
+<p>
+ Такая схема работы более безопасна, чем использование обычного условного кода, поскольку в качестве
+ меры предосторожности магазины приложений не принимают приложения, помеченные
+ как доступные для отладки.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <debug-overrides>
+ <trust-anchors>
+ <certificates src="@raw/debug_cas"/>
+ </trust-anchors>
+ </debug-overrides>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="UsesCleartextTraffic">Отказ от передачи данных открытым текстом</h2>
+
+<p>
+ Приложения, которым нужно подключаться к узлам только через защищенные соединения,
+ могут отказаться от поддержки передачи данных открытым текстом (с использованием нешифрованного протокола HTTP
+ вместо HTTPS) на эти узлы. Эта возможность помогает предотвратить
+ случайные неполадки в приложениях, связанные с изменениями URL-адресов, предоставленных внешними
+ источниками, например, инфраструктурными серверами.
+ Дополнительную информацию можно найти в описании метода {@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted
+ NetworkSecurityPolicy.isCleartextTrafficPermitted()}.
+</p>
+
+<p>
+ Например, приложение может потребовать обязательное использование протокола HTTPS для всех соединений с {@code
+ secure.example.com}, чтобы защитить важный трафик
+ от небезопасных сетей.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config usesCleartextTraffic="false">
+ <domain includeSubdomains="true">secure.example.com</domain>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="CertificatePinning">Прикрепление сертификатов</h2>
+
+<p>
+ Обычно приложение доверяет всем предустановленным ЦС. Если любой из этих ЦС выпустит
+ поддельный сертификат, приложение подвергается риску атаки с перехватом данных.
+ Некоторым приложениям требуется ограничить принимаемый набор сертификатов
+ либо ограничением списка доверенных ЦС, либо прикреплением сертификатов.
+</p>
+
+<p>
+ Прикрепление сертификатов осуществляется путем предоставления набора сертификатов через хэш
+ открытого ключа (SubjectPublicKeyInfo сертификата X.509). В этом случае цепочка
+ сертификатов будет действительна, только если она содержит хотя бы один
+ прикрепленный открытый ключ.
+</p>
+
+<p>
+ При использовании прикрепления сертификатов всегда необходимо добавлять резервный
+ ключ, чтобы работа приложения не пострадала при необходимости перехода на новые ключи или смены ЦС (при
+ прикреплении сертификата ЦС или посредника этого ЦС).
+ Без резервного ключа для восстановления возможности подключения приложения потребуется срочно выпускать
+ его обновление.
+</p>
+
+<p>
+ Кроме того, существует возможность установить срок прикрепления, по истечении которого
+ прикрепление не выполняется. Это помогает предотвратить проблемы с подключением
+ приложений, которые не были обновлены. Однако установка срока действия
+ прикреплений позволяет обойти их ограничения.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <pin-set expiration="2018-01-01">
+ <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
+ <!-- backup pin -->
+ <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="ConfigInheritance">Поведение при наследовании конфигурации</h2>
+
+<p>
+ Значения, не установленные в определенной конфигурации, наследуются. Такое поведение позволяет создавать более
+ сложные конфигурации, сохраняя при этом файл конфигурации в читаемом виде.
+</p>
+
+<p>
+ Если в определенной записи не установлено значение, используется значение из следующей более общей записи.
+ Значения, не установленные в {@code domain-config},
+ берутся из родительского элемента {@code domain-config} в многоуровневых конфигурациях или из элемента {@code
+ base-config} в простых конфигурациях. Для значений, не установленных в {@code base-config}, используются
+ значения по умолчанию для платформы.
+</p>
+
+<p>
+ Рассмотрим пример, где все соединения с доменами нижнего уровня {@code
+ example.com} должны использовать пользовательский набор ЦС. Кроме того, для этих доменов разрешена
+ передача данных открытым текстом, <em>кроме</em> случаев подключения к {@code
+ secure.example.com}. При вложении конфигурации {@code
+ secure.example.com} в конфигурацию {@code example.com} не требуется дублирование
+ {@code trust-anchors}.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/my_ca"/>
+ </trust-anchors>
+ <domain-config cleartextTrafficPermitted="false">
+ <domain includeSubdomains="true">secure.example.com</domain>
+ </domain-config>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="FileFormat">Формат файла конфигурации</h2>
+
+<p>
+ Функция конфигурации сетевой безопасности использует формат файлов XML.
+ Общая структура файла показана в следующем примере кода:
+</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <base-config>
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ </base-config>
+
+ <domain-config>
+ <domain>android.com</domain>
+ ...
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ <pin-set>
+ <pin digest="...">...</pin>
+ ...
+ </pin-set>
+ </domain-config>
+ ...
+ <debug-overrides>
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ </debug-overrides>
+</network-security-config>
+</pre>
+
+<p>
+ В следующих разделах содержится описание синтаксиса и других деталей формата
+ файла.
+</p>
+
+<h3 id="network-security-config">
+ <network-security-config>
+</h3>
+
+<dl class="xml">
+ <dt>
+ Может содержать:
+ </dt>
+
+ <dd>
+ 0 или 1 <code><a href="#base-config"><base-config></a></code><br>
+ Любое количество <code><a href=
+ "#domain-config"><domain-config></a></code><br>
+ 0 или 1 <code><a href="#debug-overrides"><debug-overrides></a></code>
+ </dd>
+</dl>
+
+<h3 id="base-config">
+ <base-config>
+</h3>
+
+<dl class="xml">
+ <dt>
+ Синтаксис:
+ </dt>
+</dl>
+
+<pre class="stx">
+<base-config <a href=
+"#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
+ ...
+</base-config>
+</pre>
+<dl class="xml">
+ <dt>
+ Может содержать:
+ </dt>
+
+ <dd>
+ <code><a href="#trust-anchors"><trust-anchors></a></code>
+ </dd>
+
+ <dt>
+ Описание:
+ </dt>
+
+ <dd>
+ Конфигурация по умолчанию, используемая всеми подключениями к узлам, не входящим в <a href="#domain-config"><code>domain-config</code></a>.
+
+
+<p>
+ Если значения не установлены, используются значения по умолчанию для платформы. Конфигурация по умолчанию
+ для приложений, использующих API уровня 24 или выше:
+</p>
+
+<pre>
+<base-config usesCleartextTraffic="true">
+ <trust-anchors>
+ <certificates src="system" />
+ </trust-anchors>
+</base-config>
+</pre>
+Конфигурация по умолчанию для приложений, использующих API уровня 23 или ниже:
+<pre>
+<base-config usesCleartextTraffic="true">
+ <trust-anchors>
+ <certificates src="system" />
+ <certificates src="user" />
+ </trust-anchors>
+</base-config>
+</pre>
+
+ </dd>
+</dl>
+
+<h3 id="domain-config"><domain-config></h3>
+<dl class="xml">
+<dt>Синтаксис:</dt>
+<dd>
+<pre class="stx"><domain-config <a href="#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
+ ...
+</domain-config></pre>
+</dd>
+
+<dt>Может содержать:</dt>
+
+<dd>
+1 или более <code><a href="#domain"><domain></a></code>
+<br/>0 или 1 <code><a href="#trust-anchors"><trust-anchors></a></code>
+<br/>0 или 1 <code><a href="#pin-set"><pin-set></code></a>
+<br/>Любое количество вложенных <code><domain-config></code></dd>
+
+<dt>Описание</dt>
+<dd>Конфигурация, используемая для подключения к конкретным узлам, определенными элементами {@code domain}.
+
+<p>Если для узла назначения существует несколько элементов {@code domain-config}, используется правило для наиболее конкретного (самого длинного) совпадающего домена.
+</p></dd>
+</dl>
+
+
+<h3 id="domain"><domain></h3>
+
+<dl class="xml">
+ <dt>
+ Синтаксис:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<domain includeSubdomains=["true" | "false"]>example.com</domain>
+</pre>
+ </dd>
+
+ <dt>
+ Атрибуты:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code includeSubdomains}
+ </dt>
+
+ <dd>
+ Если значение равно {@code "true"}, то правило домена соответствует указанному домену и всем доменам его
+ нижних уровней. В противном случае правило действует
+ только для полных совпадений.
+ </dd>
+ </dl>
+ </dd>
+
+ <dt>
+ Описание:
+ </dt>
+</dl>
+
+<h3 id="debug-overrides"><debug-overrides></h3>
+
+<dl class="xml">
+ <dt>
+ Синтаксис:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<debug-overrides>
+ ...
+</debug-overrides>
+</pre>
+ </dd>
+
+ <dt>
+ Может содержать:
+ </dt>
+
+ <dd>
+ 0 или 1 <code><a href="#trust-anchors"><trust-anchors></a></code>
+ </dd>
+
+ <dt>
+ Описание:
+ </dt>
+
+ <dd>
+ Переопределения применяются, когда параметр <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
+ имеет значение {@code "true"}, что обычно верно для промежуточных сборок,
+ создаваемых средами разработки и инструментами сборки. Якоря доверия, указанные в {@code
+ debug-overrides}, добавляются ко всем другим конфигурациям, и прикрепление
+ сертификатов не выполняется, если цепочка сертификатов сервера использует один из этих
+ якорей доверия, предназначенных только для отладки. Если параметр <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
+ имеет значение {@code "false"}, этот раздел полностью игнорируется.
+ </dd>
+</dl>
+
+<h3 id="trust-anchors"><trust-anchors></h3>
+<dl class="xml">
+ <dt>
+ Синтаксис:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<trust-anchors>
+...
+</trust-anchors>
+</pre>
+ </dd>
+
+ <dt>
+ Может содержать:
+ </dt>
+
+ <dd>
+ Любое количество <code><a href="#certificates"><certificates></a></code>
+ </dd>
+
+ <dt>
+ Описание:
+ </dt>
+
+ <dd>
+ Набор якорей доверия для защищенных соединений.
+ </dd>
+</dl>
+
+
+<h3 id="certificates"><certificates></h3>
+<dl class="xml">
+<dt>Синтаксис:</dt>
+<dd><pre class="stx"><certificates src=["system" | "user" | "<i>raw resource</i>"]
+ overridePins=["true" | "false"] />
+</pre></dd>
+<dt>Описание:</dt>
+<dd>Набор сертификатов X.509 для элементов {@code trust-anchors}.</dd>
+
+<dt>Атрибуты:</dt>
+<dd><dl class="attr">
+<dt>{@code src}</dt>
+<dd>
+Источник сертификатов ЦС может представлять собой
+<ul>
+ <li>идентификатор исходного ресурса, указывающий на файл с сертификатами X.509.
+ Сертификаты должны быть закодированы в формате DER или PEM. При использовании сертификатов PEM
+ файл <em>не должен</em> содержать ничего, кроме данных PEM, например,
+ комментариев.
+ </li>
+
+ <li>{@code "system"} для предустановленных в системе сертификатов ЦС
+ </li>
+
+ <li>{@code "user"} для добавленных пользователем сертификатов ЦС
+ </li>
+</ul>
+</dd>
+
+<dt>{@code overridePins}</dt>
+<dd>
+ <p>
+ Указывает, пропускается ли прикрепление сертификатов для ЦС из этого источника. Если значение равно {@code
+ "true"}, то прикрепление сертификатов не выполняется для цепочек сертификатов, проходящих через один из ЦС этого
+ источника. Это применяется для отладки ЦС
+ или для разрешения пользователю перехватывать защищенный трафик вашего приложения.
+ </p>
+
+ <p>
+ По умолчанию используется значение {@code "false"}, но если указан элемент {@code debug-overrides},
+ то по умолчанию используется значение {@code "true"}.
+ </p>
+</dd>
+</dl>
+</dd>
+
+
+<h3 id="pin-set"><pin-set></h3>
+
+<dl class="xml">
+ <dt>
+ Синтаксис:
+ </dt>
+
+ <dd>
+<pre class="stx">
+<pin-set expiration="date">
+...
+</pin-set>
+</pre>
+ </dd>
+
+ <dt>
+ Может содержать:
+ </dt>
+
+ <dd>
+ Любое количество <code><a href="#pin"><pin></a></code>
+ </dd>
+
+ <dt>
+ Описание:
+ </dt>
+
+ <dd>
+ Набор прикрепленных открытых ключей. Чтобы защищенное соединение было доверенным, один из
+ открытых ключей в цепочке доверия должен входить в набор прикрепленных ключей. Формат ключей указан в
+ <code><a href="#pin"><pin></a></code>.
+ </dd>
+
+ <dt>
+ Атрибуты:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code expiration}
+ </dt>
+
+ <dd>
+ Дата в формате {@code yyyy-MM-dd}, начиная с которой истекает срок прикрепления
+ и оно отключается. Если этот атрибут не установлен,
+ срок прикрепления не истекает.
+ <p>
+ Истечение срока прикрепления помогает предотвратить проблемы с подключением в приложениях, которые
+ не получают обновления набора прикрепленных элементов, например в связи с тем, что пользователь
+ отключил обновления приложений.
+ </p>
+ </dd>
+ </dl>
+ </dd>
+</dl>
+
+<h3 id="pin"><pin></h3>
+<dl class="xml">
+ <dt>
+ Синтаксис:
+ </dt>
+
+ <dd>
+<pre class="stx">
+<pin digest=["SHA-256"]>base64 encoded digest of X.509
+ SubjectPublicKeyInfo (SPKI)</pin>
+</pre>
+ </dd>
+
+ <dt>
+ Атрибуты:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code digest}
+ </dt>
+
+ <dd>
+ Алгоритм хэширования, используемый для создания прикреплений. В настоящее время поддерживается только алгоритм
+ {@code "SHA-256"}.
+ </dd>
+ </dl>
+ </dd>
+</dl>
diff --git a/docs/html-intl/intl/ru/training/tv/playback/picture-in-picture.jd b/docs/html-intl/intl/ru/training/tv/playback/picture-in-picture.jd
new file mode 100644
index 0000000..fc26368
--- /dev/null
+++ b/docs/html-intl/intl/ru/training/tv/playback/picture-in-picture.jd
@@ -0,0 +1,186 @@
+page.title=Режим "картинка в картинке"
+page.keywords=preview,sdk,PIP,Picture-in-picture
+page.tags=androidn
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>Содержание документа</h2>
+<ol>
+ <li><a href="#declaring">Декларация поддержки операцией режима
+"картинка в картинке"</a></li>
+ <li><a href="#pip_button">Переключение операции в режим "картинка в картинке"</a>
+</li>
+ <li><a href="#handling_ui">Работа пользовательского интерфейса в режиме "картинка в картинке"</a>
+</li>
+ <li><a href="#continuing_playback">Продолжение воспроизведения видео в режиме
+"картинка в картинке"</a></li>
+ <li><a href="#best">Советы и рекомендации</a></li>
+</ol>
+
+<h2>См. также:</h2>
+<ol>
+ <li><a href="{@docRoot}preview/features/multi-window.html">Поддержка
+многооконного режима</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>В Android N пользователи Android TV могут смотреть видео
+в закрепленном окне в углу экрана во время работы в
+приложениях. Режим "картинка в картинке" (PIP) позволяет приложениям отображать видео
+в закрепленном окне одновременно с выполнением другой операции
+фоновом режиме. Окно PIP обеспечивает возможность многозадачности внутри вашего приложения, что
+повышает продуктивность работы пользователей.</p>
+
+<p>Ваше приложение может определить момент активации режима PIP. Ниже приведено несколько примеров
+моментов перехода в режим PIP:</p>
+
+<ul>
+<li>Ваше приложение может перевести видео в режим PIP, когда пользователь переходит
+от видео к просмотру другого контента.</li>
+<li>Ваше приложение может переключить видео в режим PIP, когда пользователь смотрит конец
+эпизода контента. На основном экране отображается рекламная или сводная информация
+о следующем эпизоде серии.</li>
+<li>Ваше приложение может предоставить пользователям возможность добавлять в очередь дополнительный контент при
+просмотре видео. В режиме PIP видео продолжает воспроизводиться, когда на основном
+экране отображается операция выбора контента.</li>
+</ul>
+
+<p>Окно PIP имеет размеры 240x135 dp и отображается на самом верхнем слое в одном из
+четырех углов экрана по выбору системы. Пользователь может вызвать
+меню PIP, позволяющее переключать окно PIP в полноэкранный режим, или закрыть окно
+PIP долгим нажатием кнопки <b>Home</b> на пульте дистанционного управления. Если на главном экране начнется воспроизведение другого
+видео, окно PIP автоматически
+закроется. Пользователи также могут закрыть окно PIP, используя экран последних задач.</p>
+
+<img src="{@docRoot}images/android-7.0/pip-active.png" />
+<p class="img-caption"><strong>Рисунок 1.</strong> Видео в режиме "картинка в картинке"
+ отображается в углу экрана, пока пользователь просматривает
+контент на главном экране.</p>
+
+<p>Режим PIP использует многооконные API-интерфейсы в Android N для
+отображения закрепленного окна с видео на верхнем слое. Чтобы добавить в приложение функцию PIP, вам нужно зарегистрировать
+операции, поддерживающие PIP, добавить необходимые переключения операции в режим PIP,
+а также обеспечить скрытие элементов пользовательского интерфейса и воспроизведение видео в то время, когда
+операция находится в режиме PIP.</p>
+
+<h2 id="declaring">Декларация поддержки операцией режима "картинка в картинке"</h2>
+
+<p>По умолчанию в системе отсутствует автоматическая поддержка режима PIP для приложений.
+Если вы хотите, чтобы ваше приложение поддерживало режим PIP, зарегистрируйте операцию
+воспроизведения видео в манифесте приложения, установив для параметров
+<code>android:supportsPictureInPicture</code> и
+<code>android:resizeableActivity</code> значение <code>true</code>. Также укажите, что
+ваша операция обрабатывает изменения конфигурации макета экрана, чтобы эта операция не
+запускалась заново в случае изменения макета при переходах в режиме PIP.</p>
+
+<pre>
+<activity android:name="VideoActivity"
+ android:resizeableActivity="true"
+ android:supportsPictureInPicture="true"
+ android:configChanges=
+ "screenSize|smallestScreenSize|screenLayout|orientation"
+ ...
+</pre>
+
+<p>При регистрации операции помните, что в режиме PIP она
+отображается в небольшом наложенном окне на экране телевизора. Для пользователей наиболее удобны операции
+воспроизведения видео с минимальным пользовательским интерфейсом. Операции
+с небольшими элементами пользовательского интерфейса могут оказаться неудобными для пользователей
+в режиме PIP, потому что в окне PIP пользователи
+не видят деталей этих элементов.</p>
+
+<h2 id="pip_button">Переключение операции в режим "картинка в картинке"</h2>
+
+Если вам нужно переключить операцию в режим PIP, вызовите метод
+<code>Activity.enterPictureInPicture()</code>. В следующем примере показано переключение
+в режим PIP, когда пользователь нажимает кнопку PIP на панели
+управления мультимедиа:</p>
+
+<pre>
+@Override
+public void onActionClicked(Action action) {
+ if (action.getId() == R.id.lb_control_picture_in_picture) {
+ getActivity().enterPictureInPicture();
+ return;
+ }
+ ...
+</pre>
+
+<p>Добавление кнопки PIP на панель управления мультимедиа позволяет пользователям легко переключаться
+в режим PIP с сохранением возможностей управления воспроизведением видео.</p>
+
+<img src="{@docRoot}images/android-7.0/pip-button.png" />
+<p class="img-caption"><strong>Рисунок 1.</strong> Кнопка режима "картинка в картинке"
+на панели управления мультимедиа.</p>
+
+<p>В Android N входит новый класс
+<code>PlaybackControlsRow.PictureInPictureAction</code>, который определяет действия PIP
+на панели управления и использует значок PIP.</p>
+
+<h2 id="handling_ui">Работа пользовательского интерфейса в режиме "картинка в картинке"</h2>
+
+<p>Когда операция переходит в режим PIP, она должна отображать только воспроизведение
+видео. Уберите элементы пользовательского интерфейса перед переходом операции в режим PIP
+и восстановите их после возвращения операции в полноэкранный режим.
+Переопределите <code>Activity.onPictureInPictureChanged()</code> или
+<code>Fragment.onPictureInPictureChanged()</code> и включайте или
+отключайте элементы пользовательского интерфейса по мере необходимости, например:</p>
+
+<pre>
+@Override
+public void onPictureInPictureChanged(boolean inPictureInPicture) {
+ if (inPictureInPicture) {
+ // Hide the controls in picture-in-picture mode.
+ ...
+ } else {
+ // Restore the playback UI based on the playback status.
+ ...
+ }
+}
+</pre>
+
+<h2 id="continuing_playback">Продолжение воспроизведения видео в режиме
+"картинка в картинке"</h2>
+
+<p>Когда операция переключается в режим PIP, система видит ее в состоянии
+паузы и вызывает метод <code>onPause()</code> этой операции. При этом воспроизведение видео
+должно продолжаться без паузы, если операция
+приостановлена в режиме PIP. Проверьте режим PIP в методе
+<code>onPause()</code> своей операции и обеспечьте обработку воспроизведения соответствующим образом,
+например:</p>
+
+<pre>
+@Override
+public void onPause() {
+ // If called due to PIP, do not pause playback
+ if (inPictureInPicture()) {
+ // Continue playback
+ ...
+ }
+ // If paused but not in PIP, pause playback if necessary
+ ...
+}
+</pre>
+
+<p>Когда операция возвращается из режима PIP в полноэкранный режим, система
+возобновляет выполнение операции и вызывает метод<code>onResume()</code> вашего приложения.</p>
+
+<h2 id="best">Советы и рекомендации</h2>
+
+<p>Режим PIP предназначается для операций, воспроизводящих видео в полноэкранном режиме. При переключении
+операции в режим PIP следует избегать отображения любых элементов, кроме видео.
+Отслеживайте моменты перехода операции в режим PIP и скрывайте элементы пользовательского интерфейса, как описано в
+разделе <a href="#handling_ui">Работа пользовательского интерфейса в режиме "картинка в картинке"</a>.</p>
+
+<p>Поскольку окно PIP отображается в виде плавающего окна в углу экрана,
+следует избегать отображения критически важной информации на основном экране
+в любой области, которая может быть закрыта окном PIP.</p>
+
+<p>По умолчанию фокус ввода не переключается на операцию, которая находится в режиме PIP. Для
+получения событий ввода в режиме PIP следует использовать
+<code>MediaSession.setMediaButtonReceiver()</code>.</p>
diff --git a/docs/html-intl/intl/ru/training/tv/tif/content-recording.jd b/docs/html-intl/intl/ru/training/tv/tif/content-recording.jd
new file mode 100644
index 0000000..19d6db3
--- /dev/null
+++ b/docs/html-intl/intl/ru/training/tv/tif/content-recording.jd
@@ -0,0 +1,121 @@
+page.title=Запись ТВ
+page.keywords=preview,sdk,tv,recording
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>Содержание документа</h2>
+ <ol>
+ <li><a href="#supporting">Указание на поддержку записи</a></li>
+ <li><a href="#recording">Запись сеанса</a></li>
+ <li><a href="#errors">Обработка ошибок записи</a></li>
+ <li><a href="#sessions">Управление записанными сеансами</a></li>
+ <li><a href="#best">Советы и рекомендации</a></li>
+ </ol>
+</div>
+</div>
+
+<p>Службы телевидения позволяют пользователю ставить воспроизведение телеканалов на паузу и возобновлять его, используя
+для этого API-интерфейсы с временным сдвигом. Android N расширяет возможности временного сдвига,
+позволяя пользователю сохранять несколько записанных сеансов.</p>
+
+<p>Пользователи могут планировать запись заранее или начинать ее во время просмотра
+программы. После сохранения записей в системе пользователь может просматривать их в браузере, управлять ими
+и воспроизводить их с помощью телевизионного приложения.</p>
+
+<p>Если вы хотите добавить функцию записи в службу ТВ,
+вы должны указать системе, что ваше приложение поддерживает запись, и реализовать
+возможности записи программ, обработки любых ошибок, возникающих
+во время записи, вывода сообщений об ошибках, а также управления записанными сеансами.</p>
+
+<h2 id="supporting">Указание на поддержку записи</h2>
+
+<p>Чтобы сообщить системе, что ваша служба ТВ поддерживает запись, выполните
+следующие шаги:</p>
+
+<ol>
+<li>В методе <code>TvInputService.onCreate()</code> создайте новый объект
+<code>TvInputInfo</code>, используя класс <code>TvInputInfo.Builder</code>.
+</li>
+<li>При создании нового объекта <code>TvInputInfo</code> вызовите метод
+<code>setCanRecord(true)</code> до вызова <code>build()</code>,
+чтобы указать на то, что служба поддерживает запись.</li>
+<li>Зарегистрируйте объект <code>TvInputInfo</code> в системе посредством вызова метода
+<code>TvInputService.updateTvInputInfo()</code>.</li>
+</ol>
+
+<h2 id="recording">Запись сеанса</h2>
+
+<p>Когда служба ТВ зарегистрирует поддержку записи,
+система будет вызывать ваш метод
+<code>TvInputService.onCreateRecordingSession()</code>, когда ей потребуется доступ
+к функции записи в вашем приложении. Реализуйте собственный подкласс
+<code>TvInputService.RecordingSession</code> и возвращайте его
+при получении обратного вызова <code>onCreateRecordingSession()</code>.
+ Этот подкласс отвечает за переключение на данные нужного канала,
+запись запрошенных данных, а также передачу системе информации о состоянии записи
+и ошибках.</p>
+
+<p>Когда система будет вызывать метод <code>RecordingSession.onTune()</code>, передавая в него
+URI канала, приложение должно переключаться на канал, указанный URI. Сообщите системе о том, что
+приложение настроилось на желаемый канал, вызвав метод <code>notifyTuned()</code>.
+Если приложению не удалось настроиться на желаемый канал, оно должно вызвать метод
+<code>notifyError()</code>.</p>
+
+<p>Затем система передает обратный вызов <code>RecordingSession.onStartRecording()</code>.
+ После этого приложение должно сразу же начать запись. Когда система передает
+этот обратный вызов, она может указать URI с информацией о программе
+для записи. После завершения записи эти данные нужно
+скопировать в таблицу данных <code>RecordedPrograms</code>.</p>
+
+<p>Наконец, система вызывает метод <code>RecordingSession.onStopRecording()</code>.
+В этот момент приложение должно сразу же прекратить запись. Также вам нужно будет
+создать запись в таблице <code>RecordedPrograms</code>. Эта запись должна
+содержать URI записанных данных в столбце
+<code>RecordedPrograms.COLUMN_RECORDING_DATA_URI</code>, а также любую информацию
+о программе, которая была предоставлена системой в исходном вызове
+<code>onStartRecording()</code>.</p>
+
+<p>Более подробную информацию о доступе к таблице <code>RecordedPrograms</code>
+можно найти в разделе <a href="#sessions">Управление записанными сеансами</a>.</p>
+
+<h2 id="errors">Обработка ошибок записи</h2>
+
+<p>Если во время записи возникла ошибка, в результате которой записанные данные стали непригодными для использования,
+то об этом нужно сообщить системе, вызвав метод <code>RecordingSession.notifyError()</code>.
+Аналогичным образом, вы можете вызвать метод <code>notifyError()</code> после создания сеанса записи,
+чтобы сообщить системе, что приложение больше не может записывать сеансы.</p>
+
+<p>Если в процессе записи возникла ошибка, но вы хотите предоставить пользователям
+приемлемую часть записи для воспроизведения, вызовите
+<code>RecordingSession.notifyRecordingStopped()</code>, чтобы дать системе возможность
+использовать частичный сеанс.</p>
+
+<h2 id="sessions">Управление записанными сеансами</h2>
+
+<p>Система хранит информацию обо всех записанных сеансах всех
+приложений, поддерживающих запись каналов, в таблице поставщиков контента <code>TvContract.RecordedPrograms</code>.
+ Эта информация доступна через URI контента
+<code>RecordedPrograms.Uri</code>. Используйте API-интерфейсы поставщиков контента для
+чтения, добавления и удаления записей из этой таблицы.</p>
+
+<p>Дополнительную информацию о работе с данными поставщиков контента можно найти в разделе
+<a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
+Основные сведения о поставщике контента</a>.</p>
+
+<h2 id="best">Советы и рекомендации</h2>
+
+<p>Объем хранилищ на телевизионных устройствах может быть ограничен, поэтому следует разумно
+распределять доступные хранилища для хранения записанных сеансов. Используйте
+<code>RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)</code>, когда для сохранения записанного сеанса
+недостаточно места.</p>
+
+<p>Когда пользователь инициирует запись, приложение должно как можно скорее начать записывать
+данные. Для этого рекомендуется заранее выполнить все продолжительные задачи,
+такие как получение доступа к хранилищу и распределение свободного места, когда система передает обратный вызов
+<code>onCreateRecordingSession()</code>. Это позволяет сразу же начать
+запись после получения обратного вызова <code>onStartRecording()</code>.
+</p>
diff --git a/docs/html-intl/intl/vi/about/versions/nougat/android-7.0-changes.jd b/docs/html-intl/intl/vi/about/versions/nougat/android-7.0-changes.jd
new file mode 100644
index 0000000..58834a5
--- /dev/null
+++ b/docs/html-intl/intl/vi/about/versions/nougat/android-7.0-changes.jd
@@ -0,0 +1,480 @@
+page.title=Các thay đổi Hành vi
+page.keywords=preview,sdk,compatibility
+meta.tags="preview", "compatibility"
+page.tags="preview", "developer preview"
+page.image=images/cards/card-n-changes_2x.png
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>Trong tài liệu này</h2>
+
+<ol>
+ <li><a href="#perf">Cải thiện Hiệu năng</a>
+ <ol>
+ <li><a href="#doze">Chế độ Ngủ sâu</a></li>
+ <li><a href="#bg-opt">Tối ưu hóa Chạy ngầm</a></li>
+ </ol>
+ </li>
+ <li><a href="#perm">Thay đổi Quyền</a></li>
+ <li><a href="#accessibility">Cải thiện Trợ năng</a>
+ <ol>
+ <li><a href="#screen-zoom">Thu phóng Màn hình</a></li>
+ <li><a href="#vision-settings">Cài đặt Khả năng nhìn trong Trình Thiết lập</a></li>
+ </ol>
+ </li>
+ <li><a href="#ndk">Liên kết Ứng dụng NDK với Thư viện Nền tảng</a></li>
+ <li><a href="#afw">Android cho Công việc</a></li>
+</ol>
+
+<h2>Xem thêm</h2>
+<ol>
+ <li><a href="{@docRoot}preview/api-overview.html">
+ Tổng quan về API Android N</a></li>
+</ol>
+
+</div>
+</div>
+
+
+<p>
+ Với các tính năng và khả năng mới, Android N
+ cũng có một số các thay đổi hành vi của hệ thống và API. Tài liệu
+ này nêu bật một số các thay đổi quan trọng mà bạn cần biết và cân nhắc cho
+ ứng dụng của mình.
+</p>
+
+<p>
+ Nếu bạn đã từng phát hành ứng dụng cho Android, hãy lưu ý rằng các thay đổi
+ trong nền tảng này có thể tác động đến ứng dụng của bạn.
+</p>
+
+
+<h2 id="perf">Cải thiện Hiệu năng</h2>
+
+<p>
+ Android N có chứa các thay đổi hành vi của hệ thống nhằm cải thiện thời lượng
+ pin của thiết bị, sử dụng RAM và hiệu năng ứng dụng. Các thay đổi này có thể tác động đến
+ tính khả dụng của tài nguyên và các thông báo hệ thống đối tới ứng dụng. Bạn
+ nên tìm hiểu các thay đổi này và đánh giá xem ứng dụng cần phải điều chỉnh như thế nào đối với
+ các thay đổi.
+</p>
+
+<h3 id="doze">Chế độ Ngủ sâu</h3>
+
+<p>
+ Được đưa vào Android 6.0 (Mức API 23), Chế độ Ngủ sâu cải thiện thời lượng pin bằng cách
+ trì hoãn các hoạt động của CPU và mạng khi người dùng không cắm sạc,
+ không di chuyển và tắt màn hình thiết bị. Android N
+ thêm các cải tiến cho Chế độ Ngủ sâu bằng cách sử dụng một tập con các hạn chế của CPU và mạng
+ khi thiết bị không được cắm sạc với màn hình bị tắt, nhưng không nhất thiết
+ phải để một chỗ, ví dụ như một thiết bị cầm tay di chuyển trong túi của người dùng.
+</p>
+
+
+<img src="{@docRoot}images/android-7.0/doze-diagram-1.png" alt="" height="251px" id="figure1" />
+<p class="img-caption">
+ <strong>Hình 1.</strong> Minh họa cách thức Chế độ Ngủ sâu áp dụng ở cấp đầu tiên của
+ các hạn chế hoạt động hệ thống nhằm cải thiện thời lượng pin.
+</p>
+
+<p>
+ Khi một thiết bị dùng nguồn điện từ pin và màn hình bị tắt trong một khoảng thời gian
+ nhất định, thiết bị sẽ chuyển vào Chế độ Ngủ sâu và áp dụng tập con đầu tiên của các hạn chế: Nó
+ sẽ ngắt truy cập mạng của ứng dụng và trì hoãn các tác vụ và các đồng bộ. Nếu thiết bị
+ được đặt một chỗ trong một khoảng thời gian nhất định sau khi vào Chế độ Ngủ sâu thì hệ thống sẽ áp dụng
+ các hạn chế còn lại của Chế độ Ngủ sâu thành {@link android.os.PowerManager.WakeLock}, báo thức
+{@link android.app.AlarmManager}, GPS, quét Wi-Fi. Cho dù
+ một số hoặc tất cả các hạn chế của Chế độ Ngủ sâu có được áp dụng hay không thì hệ thống sẽ đánh thức
+ thiết bị trong các khoảng thời gian bảo trì ngắn, trong đó các ứng dụng được phép
+ truy cập mạng và có thể thực thi mọi tác vụ/đồng bộ bị trì hoãn.
+</p>
+
+
+<img src="{@docRoot}images/android-7.0/doze-diagram-2.png" alt="" id="figure2" />
+<p class="img-caption">
+ <strong>Hình 2.</strong> Minh họa cách Chế độ Ngủ sâu áp dụng cấp thứ hai của
+ các hạn chế hoạt động hệ thống sau khi thiết bị được đặt một chỗ trong một khoảng thời gian nhất định.
+</p>
+
+<p>
+ Lưu ý rằng việc bật màn hình hoặc cắm sạc sẽ đưa thiết bị thoát Chế độ Ngủ sâu và
+ loại bỏ các hạn chế xử lý này. Hành vi bổ sung này không
+ ảnh hưởng đến các khuyến nghị và các thực hành tốt nhất khi thích ứng cho ứng dụng của bạn với phiên bản
+ Chế độ Ngủ sâu được đưa vào Android 6.0 (API mức 23) trước đó, như mô tả trong
+ <a href="{@docRoot}training/monitoring-device-state/doze-standby.html">
+ Tối ưu hóa Chế độ Ngủ sâu và Chế độ Chờ của Ứng dụng</a>. Bạn nên tiếp tục
+ làm theo các khuyến nghị đó, ví dụ như sử dụng Google Cloud Messaging (GCM) để
+ gửi và nhận tin nhắn, và hãy tiến hành áp dụng các bản cập nhật để nhận
+ hành vi Chế độ Ngủ sâu bổ sung.
+</p>
+
+
+<h3 id="bg-opt">Dự án Svelte: Tối ưu hóa Chạy ngầm</h3>
+
+<p>
+ Android N gỡ bỏ ba truyền phát không biểu thị để giúp tối ưu hóa cả
+ việc sử dụng bộ nhớ lẫn tiêu thụ điện năng. Thay đổi này là điều cần thiết bởi các truyền phát
+ không biểu thị thường xuyên khởi động các ứng dụng đã được đăng ký để lắng nghe chúng dưới
+ nền. Gỡ bỏ các truyền phát này có thể đem lại lợi ích lớn đối với hiệu năng
+ của thiết bị và trải nghiệm người dùng.
+</p>
+
+<p>
+ Các thiết bị di động thường xuyên gặp phải những thay đổi về kết nối, chẳng hạn như khi di chuyển
+ giữa Wi-Fi và dữ liệu di động. Hiện tại, các ứng dụng có thể theo dõi những thay đổi về
+ kết nối bằng cách đăng ký một bộ thu truyền phát cho {@link
+ android.net.ConnectivityManager#CONNECTIVITY_ACTION} không biểu thị trong bản kê khai
+ của chúng. Vì nhiều ứng dụng đăng ký để nhận truyền phát này do đó một hoạt động chuyển mạng
+ duy nhất cũng có thể khiến tất cả các ứng dụng thức dậy và xử lý truyền phát đó ngay
+ lập tức.
+</p>
+
+<p>
+ Tương tự, các ứng dụng có thể đăng ký nhận truyền phát {@link
+ android.hardware.Camera#ACTION_NEW_PICTURE} và {@link
+ android.hardware.Camera#ACTION_NEW_VIDEO} không biểu thị từ các ứng dụng khác, ví dụ như
+ứng dụng Camera. Khi một người dùng chụp ảnh với ứng dụng Camera thì những ứng dụng này sẽ thức dậy
+ để xử lý truyền phát đó.
+</p>
+
+<p>
+ Để loại bỏ các vấn đề này, Android N áp dụng các cách tối ưu hóa
+ sau:
+</p>
+
+<ul>
+ <li>Ứng dụng nhắm mục tiêu Android N sẽ không nhận các truyền phát {@link
+ android.net.ConnectivityManager#CONNECTIVITY_ACTION}, ngay cả khi chúng
+ có các mục nhập của trong bản kê khai yêu cầu thông báo về các sự kiện này. Những ứng dụng đang chạy
+ ở tiền cảnh vẫn có thể lắng nghe {@code CONNECTIVITY_CHANGE} qua
+ luồng chính của chúng nếu yêu cầu thông báo bằng {@link
+ android.content.BroadcastReceiver}.
+ </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}. Cách tối ưu này
+ tác động đến mọi ứng dụng, không chỉ các ứng dụng nhắm mục tiêu Android N.
+ </li>
+</ul>
+
+<p>
+ Các lần phát hành Android sau này có thể loại bỏ thêm các truyền phát không biểu thị, cũng
+ như các dịch vụ chạy ngầm không còn liên kết. Vì lý do này, bạn nên tránh dùng hoặc
+ gỡ bỏ các phụ thuộc trên các bộ thu được khai báo trong bản kê khai đối với các truyền phát không biểu thị,
+ cũng như các dịch vụ chạy ngầm.
+</p>
+
+<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ị hoặc các dịch vụ chạy ngầm này. Ví dụ, API {@link
+ android.app.job.JobScheduler} 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ột
+ mạng không đo lưu lượng. Bạn còn có thể sử dụng {@link
+ android.app.job.JobScheduler} để phản ứng lại các thay đổi đối với trình cung cấp nội dung.
+</p>
+
+<p>
+ Để biết thêm thông tin về thay đổi hành vi này và cách thích ứng ứng dụng của bạn,
+ hãy xem <a href="{@docRoot}preview/features/background-optimization.html">Tối ưu hóa
+ Chạy ngầm</a>.
+</p>
+
+
+<h2 id="perm">Thay đổi Quyền</h2>
+
+<p>
+ Android N có các thay đổi đối với quyền có thể tác động đến ứng dụng của bạn,
+ bao gồm các quyền tài khoản người dùng và một quyền mới cho phép ghi vào
+ bộ nhớ ngoài. Sau đây là phần tóm tắt các quyền đã thay đổi trong
+ bản xem trước:
+</p>
+
+<ul>
+ <li>{@code GET_ACCOUNTS} (Bị loại bỏ)
+ <p>
+ Quyền GET_ACCOUNTS nay đã bị loại bỏ. Hệ thống sẽ bỏ qua quyền
+ này đối với các ứng dụng nhắm mục tiêu Android N.
+ </p>
+ </li>
+
+</ul>
+
+
+
+<h2 id="accessibility">Cải thiện Trợ năng</h2>
+
+<p>
+ Android N có các thay đổi nhằm nâng cao khả năng sử dụng
+ của nền tảng cho những người dùng có thị lực kém hoặc khiếm thị. Nhìn chung, các thay đổi này sẽ không
+ yêu cầu thay đổi mã nguồn trong ứng dụng của bạn. Tuy nhiên, bạn cần xem lại
+ các tính năng này và kiểm thử chúng với ứng dụng của mình để đánh giá các tác động tiềm tàng đối với trải nghiệm
+ người dùng.
+</p>
+
+
+<h3 id="screen-zoom">Thu phóng Màn hình</h3>
+
+<p>
+ Android N cho phép người dùng đặt <strong>Display size</strong> để phóng to
+ hoặc thu nhỏ tất cả các phần tử trên màn hình, nhờ đó cải thiện trợ năng của thiết bị
+ cho những người dùng có thị lực kém. Người dùng không thể thu phóng màn hình vượt quá chiều rộng màn hình
+ tối thiểu <a href="http://developer.android.com/guide/topics/resources/providing-resources.html">
+ sw320dp</a>. Đây là chiều rộng của Nexus 4, một máy điện thoại phổ biến có kích cỡ trung bình.
+</p>
+
+<div class="cols">
+
+<div class="col-6">
+ <img src="{@docRoot}images/android-7.0/screen-zoom-1.png" alt="" height="XXX" id="figure1" />
+</div>
+<div class="col-6">
+ <img src="{@docRoot}images/android-7.0/screen-zoom-2.png" alt="" height="XXX" id="figure1" />
+</div>
+
+</div> <!-- end cols -->
+<p class="img-caption">
+ <strong>Hình 3.</strong> Màn hình bên phải hiển thị tác động của
+ việc tăng kích cỡ Hiển thị của một thiết bị đang chạy ảnh hệ thống Android N.
+</p>
+
+
+<p>
+ Khi mật độ của thiết bị thay đổi, hệ thống sẽ thông báo cho các ứng dụng đang chạy theo
+ những cách sau:
+</p>
+
+<ul>
+ <li>Nếu một ứng dụng nhắm mục tiêu mức API 23 hoặc thấp hơn thì hệ thống sẽ tự động tắt
+ tất cả các tiến trình chạy ngầm của ứng dụng đó. Điều này có nghĩa là nếu một người dùng rời khỏi
+ ứng dụng đó để mở màn hình <em>Settings</em> và thay đổi
+ <strong>Display size</strong> thì hệ thống sẽ tắt ứng dụng giống
+ như trong trường hợp thiết bị thiếu bộ nhớ. Nếu ứng dụng đó có bất kỳ tiến trình nào
+ chạy ở tiền cảnh thì hệ thống sẽ thông báo cho các tiến trình đó về thay đổi cấu hình như
+ mô tả trong <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Xử lý
+ Thay đổi Thời gian chạy</a>, giống như hướng của thiết bị vừa thay đổi.
+ </li>
+
+ <li>Nếu ứng dụng nhắm mục tiêu Android N thì mọi tiến trình của nó
+ (chạy ở tiền cảnh và chạy ngầm) đều được thông báo về thay đổi cấu hình như
+ mô tả trong <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Xử lý
+ Thay đổi Thời gian chạy</a>.
+ </li>
+</ul>
+
+<p>
+ Hầu hết các ứng dụng không cần thực hiện bất kỳ thay đổi nào để hỗ trợ tính năng này, miễn là
+ các ứng dụng đó tuân theo các thực hành tốt nhất của Android. Những điều cụ thể cần kiểm tra:
+</p>
+
+<ul>
+ <li>Kiểm thử ứng dụng của bạn trên một thiết bị có chiều rộng màn hình <code><a href=
+ "{@docRoot}guide/topics/resources/providing-resources.html">sw320dp</a></code>
+ và đảm bảo nó hoạt động đúng.
+ </li>
+
+ <li>Khi cấu hình của thiết bị thay đổi, hãy cập nhật mọi thông tin được lưu trữ trong bộ đệm
+ phụ thuộc vào mật độ, ví dụ như các ảnh bitmap được lưu đệm hoặc các tài nguyên được tải từ
+ mạng. Hãy kiểm tra các thay đổi cấu hình khi ứng dụng khôi phục từ trạng thái
+ tạm dừng.
+ <p class="note">
+ <strong>Lưu ý:</strong> Nếu bạn lưu trữ trong bộ đệm các dữ liệu phụ thuộc vào cấu hình thì nên
+ thêm siêu dữ liệu liên quan như kích cỡ
+ màn hình phù hợp hoặc mật độ điểm ảnh cho dữ liệu đó. Việc lưu siêu dữ liệu này cho phép bạn
+ quyết định liệu bạn có cần phải làm mới dữ liệu được lưu trữ đệm sau khi một cấu hình
+ thay đổi.
+ </p>
+ </li>
+
+ <li>Tránh chỉ định các kích thước theo đơn vị px vì chúng không thay đổi tỉ lệ theo
+ mật độ màn hình. Thay vào đó, hãy chỉ định các kích thước bằng các đơn vị <a href="{@docRoot}guide/practices/screens_support.html">điểm ảnh
+ độc lập với mật độ</a> (<code>dp</code>).
+ </li>
+</ul>
+
+<h3 id="vision-settings">Cài đặt Khả năng nhìn trong Trình Thiết lập</h3>
+
+<p>
+ Android N có Cài đặt Khả năng nhìn trên màn hình Chào mừng, nơi người dùng có thể
+ thiết lập các cài đặt trợ năng sau đây trên một thiết bị mới:
+ <strong>Magnification gesture</strong>, <strong>Font size</strong>,
+ <strong>Display size</strong> và <strong>TalkBack</strong>. Thay đổi này
+ sẽ tăng khả năng thấy được các khiếm khuyết liên quan đến những cài đặt màn hình khác nhau. Để
+ đánh giá tác động của tính năng này, bạn có thể kiểm thử ứng dụng của mình với các
+ cài đặt sau được bật. Bạn có thể tìm các cài đặt này trong <strong>Settings >
+ Accessibility</strong>.
+</p>
+
+<h2 id="ndk">Liên kết Ứng dụng NDK với Thư viện Nền tảng</h2>
+
+<p>
+ Android N có các thay đổi đối với không gian tên để ngăn việc tải các API không công khai.
+ Nếu bạn sử dụng NDK, bạn chỉ nên sử dụng các API công khai từ nền tảng
+ Android. Sử dụng các API không công khai trong bản phát hành chính thức tiếp theo của Android
+ có thể khiến ứng dụng bị treo.
+</p>
+
+<p>
+ Để cảnh báo cho bạn việc sử dụng các API không công khai, các ứng dụng chạy trên thiết bị
+ Android N sẽ tạo ra một lỗi trong phần xuất ra của logcat khi một ứng dụng gọi một API không công khai.
+ Lỗi này cũng được hiển thị trên màn hình thiết bị dưới dạng thông báo để hỗ trợ
+ nâng cao nhận biết đối với tình huống này. Bạn nên xem lại mã của ứng dụng để
+ gỡ bỏ phần sử dụng các API nền tảng không công khai và kiểm thử kỹ lưỡng ứng dụng bằng
+ một thiết bị hoặc bộ giả lập của bản xem trước.
+</p>
+
+<p>
+ Nếu ứng dụng của bạn phụ thuộc vào các thư viện của nền tảng, hãy xem tài liệu NDK để biết
+ các cách khắc phục cơ bản nhằm thay thế các API không công khai bằng các API công khai tương ứng.
+ Bạn cũng có thể liên kết với các thư viện của nền tảng mà không nhận biết ứng dụng,
+ đặc biệt nếu ứng dụng của bạn sử dụng thư viện thuộc một phần của nền tảng (như
+ <code>libpng</code>), nhưng không thuộc NDK. Trong trường hợp đó, hãy đảm bảo rằng
+ tệp APK của bạn có chứa tất cả các tệp .so bạn dự định liên kết với.
+</p>
+
+<p class="caution">
+ <strong>Cẩn trọng:</strong> Một số thư viện của bên thứ ba có thể liên kết với các API
+ không công khai. Nếu ứng dụng của bạn sử dụng các thư viện này thì ứng dụng của bạn có thể gặp lỗi sụp đổ khi đang chạy
+ trong lần phát hành Android chính thức kế tiếp.
+</p>
+
+<p>
+ Các ứng dụng không nên phụ thuộc vào hoặc sử dụng các thư viện gốc không kèm theo trong
+ NDK bởi vì chúng có thể thay đổi hoặc bị gỡ bỏ khỏi khi phát hành bản Android khác
+ thay cho bản cũ. Việc chuyển từ OpenSSL sang BoringSSL là một ví dụ về sự thay đổi đó.
+ Ngoài ra, các thiết bị khác nhau có thể cung cấp các mức độ tương thích khác nhau bởi
+ không có yêu cầu nào về khả năng tương thích cho các thư viện nền tảng không đi kèm với
+ NDK. Nếu bạn buộc phải sử dụng các thư viện không thuộc NDK trên các thiết bị cũ, hãy thực hiện
+ quá trình tải phụ thuộc vào mức Android API.
+</p>
+
+<p>
+ Nhằm giúp bạn chẩn đoán các loại vấn đề này, sau đây là một số lỗi Java và NDK
+ ví dụ bạn có thể gặp phải khi cố dựng ứng dụng với Android N:
+</p>
+
+<p>Ví dụ lỗi Java:</p>
+<pre class="no-pretty-print">
+java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so"
+ is not accessible for the namespace "classloader-namespace"
+</pre>
+
+<p>Ví dụ lỗi NDK:</p>
+<pre class="no-pretty-print">
+dlopen failed: cannot locate symbol "__system_property_get" referenced by ...
+</pre>
+
+
+<p>
+ Sau đây là một số cách khắc phục đối với ứng dụng gặp phải các kiểu lỗi này:
+</p>
+
+<ul>
+ <li>Việc sử dụng getJavaVM và getJNIEnv trong libandroid_runtime.so có thể được thay
+ bằng các hàm JNI chuẩn:
+<pre class="no-pretty-print">
+AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h>
+AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or
+JavaVM::AttachCurrentThread from <jni.h>.
+</pre>
+ </li>
+
+ <li>Việc sử dụng ký hiệu {@code property_get} trong {@code libcutils.so} có thể được
+ thay bằng phương thức {@code __system_property_get} công khai thay thế.
+ Để làm điều này, hãy dùng {@code __system_property_get} với câu lệnh include sau:
+<pre>
+#include <sys/system_properties.h>
+</pre>
+ </li>
+
+ <li>Việc sử dụng ký hiệu {@code SSL_ctrl} trong {@code libcrypto.so} nên được
+ thay bằng một ký hiệu cục bộ của ứng dụng. Ví dụ, bạn nên liên kết tĩnh
+ {@code libcyrpto.a} trong tệp {@code .so} hoặc thêm tham chiếu
+ {@code libcrypto.so} động của riêng mình từ BoringSSL hoặc OpenSSL trong ứng dụng của bạn.
+ </li>
+</ul>
+
+<h2 id="afw">Android cho Công việc</h2>
+<p>
+ Android N có các thay đổi cho ứng dụng nhắm mục tiêu Android cho Công việc, bao gồm
+ các thay đổi đối với cài đặt chứng chỉ, đặt lại mật khẩu, quản lý người dùng
+ thứ hai và truy cập các mã định danh của thiết bị. Nếu bạn đang dựng các ứng dụng dành cho
+ các môi trường Android cho Công việc thì bạn nên xem lại các thay đổi này và chỉnh sửa
+ ứng dụng của mình cho phù hợp.
+</p>
+
+<ul>
+ <li>Bạn phải cài đặt một trình cài đặt chứng chỉ ủy thác trước khi DPC có thể đặt
+ nó. Đối với cả ứng dụng người sở hữu cấu hình và ứng dụng người sở hữu thiết bị nhắm mục tiêu SDK N, bạn cần
+ cài đặt trình cài đặt chứng chỉ ủy thác trước khi trình kiểm soát
+ chính sách của thiết bị (DPC) gọi
+ <code>DevicePolicyManager.setCertInstallerPackage()</code>. Nếu trình cài đặt
+ chưa được cài thì hệ thống sẽ đưa ra một
+ <code>IllegalArgumentException</code>.
+ </li>
+
+ <li>Giờ đây các hạn chế đặt lại mật khẩu cho người quản lý thiết bị sẽ áp dụng với người sở hữu
+ cấu hình. Người quản lý thiết bị không thể sử dụng
+ <code>DevicePolicyManager.resetPassword()</code> được nữa để xóa mật khẩu hoặc thay đổi
+ các mật khẩu đã đặt. Người quản lý thiết bị vẫn có thể đặt một mật khẩu nhưng chỉ
+ khi thiết bị không có mật khẩu, mã PIN hoặc mẫu hình.
+ </li>
+
+ <li>Người sở hữu thiết bị hoặc cấu hình có thể quản lý các tài khoản ngay cả khi các hạn chế được
+ đặt. Người sở hữu thiết bị và người sở hữu cấu hình có thể gọi các API Quản lý tài khoản
+ ngay cả khi các hạn chế người dùng <code>DISALLOW_MODIFY_ACCOUNTS</code> đã có sẵn.
+ </li>
+
+ <li>Người sở hữu thiết bị có thể quản lý những người dùng thứ cấp dễ dàng hơn. Khi một thiết bị
+ đang chạy trong chế độ người sở hữu thiết bị, hạn chế <code>DISALLOW_ADD_USER</code>
+ sẽ được đặt tự động. Điều này ngăn người dùng tạo các người dùng
+ thứ cấp không được quản lý. Ngoài ra, các phương thức <code>CreateUser()</code> và
+ <code>createAndInitial()</code> đã bị loại bỏ; phương thức
+<code>DevicePolicyManager.createAndManageUser()</code> mới sẽ thay thế chúng.
+ </li>
+
+ <li>Người sở hữu thiết bị có thể truy cập các mã định danh của thiết bị. Một người sở hữu thiết bị có thể truy cập
+ địa chỉ MAC của Wi-Fi của một thiết bị, bằng phương thức
+ <code>DevicePolicyManagewr.getWifiMacAddress()</code>. Nếu Wi-Fi chưa từng
+ được bật trên thiết bị đó thì phương thức này sẽ trả về một giá trị {@code null}.
+ </li>
+</ul>
+
+<p>
+ Để biết thêm thông tin về các thay đổi đối với Android cho Công việc trong Android N, hãy xem
+ <a href="{@docRoot}preview/features/afw.html">Cập nhật của Android cho Công việc</a>.
+</p>
+
+<h2 id="other">Các điểm quan trọng khác</h2>
+
+<ul>
+<li>Khi một ứng dụng đang chạy trên Android N nhưng nhắm mục tiêu mức API thấp hơn,
+và người dùng thay đổi kích cỡ hiển thị thì tiến trình của ứng dụng sẽ bị tắt. Ứng dụng
+phải có khả năng xử lý tình huống này một cách tinh tế. Nếu không, ứng dụng sẽ bị lỗi sụp đổ
+khi người dùng khôi phục nó từ mục Gần đây.
+
+<p>
+Bạn cần kiểm thử ứng dụng để đảm bảo
+rằng hành vi này không xảy ra.
+Bạn có thể thực hiện điều đó bằng cách gây ra một lỗi sụp đổ giống vậy
+khi tắt ứng dụng một cách thủ công qua DDMS.
+</p>
+
+<p>
+Các ứng dụng nhắm mục tiêu N và cao hơn sẽ không bị tắt tự động khi có các thay đổi về mật độ;
+tuy nhiên, chúng có thể phản hồi khó khăn đối với các thay đổi cấu hình.
+</p>
+</li>
+
+<li>
+Các ứng dụng trên Android N cần có khả năng xử lý các thay đổi cấu hình một cách tinh tế,
+và không bị lỗi sụp đổ trong các lần khởi động tiếp theo. Bạn có thể kiểm tra hành vi ứng dụng
+bằng cách thay đổi kích cỡ phông chữ (<strong>Setting</strong> >
+<strong>Display</strong> > <strong>Font size</strong>), và sau đó khôi phục
+ứng dụng từ mục Gần đây.
+</li>
+</ul>
+
diff --git a/docs/html-intl/intl/vi/about/versions/nougat/android-7.0-samples.jd b/docs/html-intl/intl/vi/about/versions/nougat/android-7.0-samples.jd
new file mode 100644
index 0000000..448c39d
--- /dev/null
+++ b/docs/html-intl/intl/vi/about/versions/nougat/android-7.0-samples.jd
@@ -0,0 +1,85 @@
+page.title=Samples
+page.tags="preview", "samples", "android"
+page.image=images/cards/card-n-samples_2x.png
+@jd:body
+
+<p>
+ Các mã mẫu sau được dành cho Android N. Để
+ tải xuống mã mẫu cho Android Studio, hãy chọn tùy chọn trong menu <b>File > Import
+ Samples</b>.
+</p>
+
+<p class="note">
+ <strong>Chú ý:</strong>Các dự án có thể tải xuống này được thiết kế
+ để sử dụng với Gradle và Android Studio.
+</p>
+
+
+<h3 id="mw">Dùng thử đa cửa sổ</h3>
+<img src="{@docRoot}images/android-7.0/sample-multiwindow.png" style="float: left; padding-right: 0.5em" height="250" width="156" />
+<p>
+ Ví dụ này minh họa cách tận dụng giao diện người dùng
+ đa cửa sổ với ứng dụng của bạn.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-MultiWindowPlayground">
+ Tải mã trên GitHub</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="an">Thông báo đang Hoạt động</h3>
+<img src="{@docRoot}images/android-7.0/sample-activenotifications.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ Đây là ví dụ đã có sẵn, minh họa một dịch vụ đơn giản để gửi
+ thông báo bằng cách sử dụng NotificationCompat. Mỗi cuộc hội thoại chưa đọc từ một người dùng
+ sẽ được gửi dưới dạng một thông báo riêng.
+</p>
+<p>
+ Ví dụ này đã được cập nhật để tận dụng các tính năng thông báo mới
+ có trong Android N.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-ActiveNotifications">
+ Tải mã trên GitHub</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="ms">Dịch vụ Nhắn tin</h3>
+<img src="{@docRoot}images/android-7.0/sample-messagingservice.png" style="float: left; padding-right: 0.5em" height="250" width="150" />
+<p>
+ Đây là một ví dụ đã có sẵn, minh họa cách sử dụng
+ NotificationManager để cho biết có bao nhiêu thông báo một ứng dụng hiện
+ đang hiển thị.
+</p>
+<p>
+ Ví dụ này đã được cập nhật để tận dụng các tính năng thông báo mới
+ có trong Android N.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-MessagingService">
+ Tải mã trên GitHub</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="fbe">Khởi động Trực tiếp</h3>
+<img src="{@docRoot}images/android-7.0/sample-directboot.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ Ví dụ này minh họa cách lưu trữ và truy cập dữ liệu trên bộ lưu trữ
+ mã hóa thiết bị, luôn khả dụng khi thiết bị được khởi động.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-DirectBoot">
+ Tải mã trên GitHub</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="sda">Truy cập Thư mục theo Phạm vi</h3>
+<img src="{@docRoot}images/android-7.0/sample-scopeddirectoryaccess.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ Ví dụ này minh họa cách đọc và ghi dữ liệu từ các thư mục
+ cụ thể trong khi cần ít quyền hơn.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-ScopedDirectoryAccess">
+ Tải mã trên GitHub</a>
+</p>
diff --git a/docs/html-intl/intl/vi/about/versions/nougat/android-7.0.jd b/docs/html-intl/intl/vi/about/versions/nougat/android-7.0.jd
new file mode 100644
index 0000000..b218a4e
--- /dev/null
+++ b/docs/html-intl/intl/vi/about/versions/nougat/android-7.0.jd
@@ -0,0 +1,676 @@
+page.title=Android N cho Nhà phát triển
+meta.tags="preview", "androidn"
+page.tags="preview", "developer preview"
+page.image=images/cards/card-n-apis_2x.png
+@jd:body
+
+
+
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>Các tính năng chính cho nhà phát triển</h2>
+ <ol>
+ <ul style="list-style-type:none;">
+ <li><a href="#multi-window_support">Hỗ trợ đa cửa sổ</a></li>
+ <li><a href="#notification_enhancements">Thông báo</a></li>
+ <li><a href="#jit_aot">Biên dịch JIT/AOT</a></li>
+ <li><a href="#quick_path_to_app_install">Cài đặt ứng dụng nhanh chóng</a></li>
+ <li><a href="#doze_on_the_go">Chế độ Ngủ sâu khi di chuyển</a></li>
+ <li><a href="#background_optimizations">Tối ưu hóa chạy ngầm</a></li>
+ <li><a href="#data_saver">Tiết kiệm dữ liệu</a></li>
+ <li><a href="#tile_api">API cho ô Cài đặt nhanh</a></li>
+ <li><a href="#number-blocking">Chặn số</a></li>
+ <li><a href="#call_screening">Sàng lọc cuộc gọi</a></li>
+ <li><a href="#multi-locale_languages">Bản địa và ngôn ngữ</a></li>
+ <li><a href="#icu4">API ICU4J trong Android</a></li>
+ <li><a href="#gles_32">API OpenGL ES 3.2</a></li>
+ <li><a href="#android_tv_recording">Ghi lại trên Android TV</a></li>
+ <li><a href="#android_for_work">Android cho Công việc</a></li>
+ <li><a href="#accessibility_enhancements">Trợ năng</a></li>
+ <li><a href="#direct_boot">Khởi động Trực tiếp</a></li>
+ <li><a href="#key_attestation">Chứng thực khóa</a></li>
+ <li><a href="#network_security_config">Cấu hình Bảo mật mạng</a></li>
+ <li><a href="#default_trusted_ca">CA an toàn mặc định</a></li>
+ <li><a href="apk_signature_v2">Lược đồ chữ ký số v2 cho tệp APK</a></li>
+ <li><a href="#scoped_directory_access">Truy cập thư mục theo phạm vi</a></li>
+ </ol>
+</div>
+</div>
+
+
+
+<p>Android N vẫn đang trong quá trình phát triển nhưng bây giờ bạn có thể dùng thử
+dưới dạng N Developer Preview. Các phần dưới đây sẽ nêu bật một số
+tính năng mới cho nhà phát triển. </p>
+
+<p>
+ Bạn cần xem <a href="{@docRoot}preview/behavior-changes.html">Các thay đổi Hành vi</a> để biết được
+ những phần thay đổi của nền tảng có thể ảnh hưởng đến ứng dụng của bạn, hãy xem
+ các hướng dẫn cho nhà phát triển để biết thêm về những tính năng chính và tải xuống tài liệu <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Tham khảo API</a> để biết chi tiết về
+ các API mới.
+</p>
+
+<h2 id="multi-window_support">Hỗ trợ đa cửa sổ</h2>
+
+
+<p>Trong Android N, chúng tôi sẽ đưa vào nền tảng một tính năng đa nhiệm mới
+ rất được mong đợi — hỗ trợ đa cửa sổ. </p>
+
+ <p>Giờ đây người dùng có thể nhanh chóng mở đồng thời hai ứng dụng trên màn hình. </p>
+ <ul>
+ <li>Trên điện thoại và máy tính bảng
+chạy Android N, người dùng có thể chạy hai ứng dụng song song hai bên hoặc
+ trên dưới trong chế độ chia đôi màn hình. Người dùng có thể thay đổi kích thước của ứng dụng bằng cách kéo
+thanh phân chia ở giữa. </li>
+
+<li>Trên thiết bị Android TV, các ứng dụng có thể tự đặt vào <a href="{@docRoot}preview/features/picture-in-picture.html">chế độ
+hình-trong-hình</a>, cho phép ứng dụng tiếp tục hiển thị nội dung khi người dùng duyệt web hoặc
+tương tác với ứng dụng khác. Hãy xem bên dưới để biết thêm thông tin. </li>
+ </ul>
+
+<div class="col-4of10">
+<img src="{@docRoot}images/android-7.0/mw-portrait.png" alt="" style="height:460px;padding-left:1em;" id="img-split-screen" />
+<p class="img-caption">
+ <strong>Hình 1.</strong> Các ứng dụng chạy trong chế độ chia màn hình.
+</p>
+ </div>
+
+<p>Đặc biệt là trên máy tính bảng và các thiết bị màn hình lớn khác, việc hỗ trợ đa cửa sổ
+cho phép bạn mang lại những cách thức mới thu hút người dùng. Thậm chí bạn còn có thể cho phép kéo thả trong
+ứng dụng để người dùng kéo nội dung một cách thuận tiện vào hoặc ra ngoài ứng dụng của bạn — đây là một cách
+nâng cao trải nghiệm của người dùng rất hiệu quả. </p>
+
+<p>Thêm tính năng hỗ trợ đa màn hình vào ứng dụng của bạn và cấu hình cách thức
+xử lý hiển thị đa cửa sổ là điều rất đơn giản. Ví dụ, bạn có thể chỉ định kích thước
+tối thiểu cho phép của hoạt động, ngăn người dùng thay đổi kích thước của hoạt động nhỏ hơn
+kích thước đó. Bạn cũng có thể vô hiệu hóa hiển thị đa cửa sổ cho ứng dụng của mình, giúp
+ đảm bảo hệ thống sẽ chỉ hiển thị ứng dụng của bạn ở chế độ toàn màn hình.</p>
+
+<p>
+ Để biết thêm thông tin, hãy xem tài liệu cho nhà phát triển <a href="{@docRoot}preview/features/multi-window.html">Hỗ trợ đa cửa sổ</a>
+.
+</p>
+
+<h2 id="notification_enhancements">Cải tiến thông báo</h2>
+
+<p>Chúng tôi đã thiết kế lại thông báo trong Android N để chúng được sử dụng dễ dàng và nhanh
+hơn. Một số các thay đổi bao gồm:</p>
+
+<ul>
+ <li>
+ <strong>Cập nhật Mẫu</strong>: Chúng tôi đã cập nhật các mẫu thông báo để
+ tạo điểm nhấn mới cho ảnh gây ấn tượng và ảnh đại diện. Nhà phát triển sẽ có thể
+ tận dụng các mẫu mới nhưng chỉ cần thực hiện một số chỉnh sửa nhỏ trong mã nguồn của họ.
+ </li>
+
+ <li>
+ <strong>Thông báo gộp</strong>: Hệ thống có thể nhóm các tin nhắn
+ lại với nhau, ví dụ như theo chủ đề tin nhắn và hiển thị thành nhóm. Người dùng có thể
+ thực hiện các thao tác như Hủy hoặc Lưu trữ chúng ngay tại chỗ. Nếu bạn từng
+ triển khai các thông báo cho Android Wear thì bạn đã làm quen với
+ mô hình này.
+ </li>
+
+ <li>
+ <strong>Trả lời trực tiếp</strong>: Đối với những ứng dụng giao tiếp theo thời gian thực,
+ hệ thống Android sẽ hỗ trợ trả lời ngay tại chỗ để người dùng có thể nhanh chóng phản hồi lại
+ một tin nhắn SMS hoặc tin nhắn văn bản trực tiếp bên trong giao diện thông báo đó.
+ </li>
+
+ <li>
+ <strong>Dạng xem tùy chỉnh</strong>: Hai API mới cho phép bạn sử dụng các trang trí
+ hệ thống như tiêu đề và hành động của thông báo khi sử dụng các dạng xem
+ tùy chỉnh trong thông báo.
+ </li>
+</ul>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-1.png" alt="" style="padding:.5em;max-width:226px">
+</div>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-3.png" alt="" style="padding:.5em;max-width:226px">
+</div>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-2.png" alt="" style="padding:.5em;max-width:226px">
+</div>
+
+
+<p class="img-caption">
+ <strong>Hình 2.</strong> Thông báo gộp và trả lời trực tiếp.
+</p>
+
+<p>Hãy xem
+ hướng dẫn về <a href="{@docRoot}preview/features/notification-updates.html">Thông báo</a>
+ để biết cách triển khai các tính năng mới này.</p>
+
+
+
+<h2 id="jit_aot">Biên dịch JIT/AOT theo cấu hình</h2>
+
+<p>Trong Android N, chúng tôi đã bổ sung một trình biên dịch Just in Time (JIT) có mã được cấu hình cho
+ART, cho phép nó nâng cao hiệu năng của các ứng dụng Android tức thì khi
+chạy. Trình biên dịch JIT bổ trợ thêm cho trình biên dịch Ahead of Time (AOT) của ART
+và giúp cải hiện hiệu năng thời gian chạy, tiết kiệm không gian lưu trữ và tăng tốc độ các bản cập nhật của
+ứng dụng và cập nhật của hệ thống.</p>
+
+<p>Biên dịch theo cấu hình cho phép ART quản lý quá trình biên dịch AOT/JIT của từng ứng dụng
+tùy theo sử dụng thực tế cũng như các điều kiện trên thiết bị. Ví
+dụ, ART sẽ duy trì một cấu hình cho các phương thức hay dùng nhất của mỗi ứng dụng và có thể biên dịch trước
+rồi tạo bộ đệm cho các phương thức đó để có hiệu năng cao nhất. Những phần khác của ứng dụng
+sẽ được giữ nguyên không biên dịch cho đến khi chúng thực sự được sử dụng.</p>
+
+<p>Bên cạnh nâng cao hiệu năng cho các phần chính của ứng dụng, quá trình biên dịch
+theo cấu hình còn giúp giảm tổng lượng RAM được sử dụng của ứng dụng, bao gồm cả các
+tệp nhị phân liên quan. Tính năng này đặc biệt quan trọng trên các thiết bị ít bộ nhớ.</p>
+
+<p>ART sẽ quản lý quá trình biên dịch theo cấu hình bằng cách giảm tối thiểu tác động đến
+pin của thiết bị. Nó sẽ tiến hành quá trình biên dịch trước chỉ khi nào thiết bị nhàn rỗi và
+đang sạc, giúp tiết kiệm thời gian và pin bằng cách thực hiện công việc đó trước.</p>
+
+<h2 id="quick_path_to_app_install">Cài đặt ứng dụng nhanh chóng</h2>
+
+<p>Một trong những lợi ích dễ thấy nhất của trình biên dịch JIT của ART là tốc độ cài đặt
+ứng dụng và cập nhật hệ thống. Ngay cả các ứng dụng lớn cần vài phút để
+tối ưu và cài đặt trong Android 6.0 thì giờ đây có thể cài đặt chỉ trong một vài
+giây. Các cập nhật cho hệ thống cũng sẽ nhanh hơn vì không còn bước tối ưu hóa nữa. </p>
+
+<h2 id="doze_on_the_go">Chế độ Ngủ sâu khi di chuyển...</h2>
+
+<p>Chế độ Ngủ sâu đã được giới thiệu trong Android 6.0. Đây là một chế độ của hệ thống giúp tiết kiệm pin bằng cách trì hoãn
+các hoạt động CPU và mạng của ứng dụng khi thiết bị đang nhàn rỗi, ví dụ như khi thiết bị
+đang nằm trên bàn hoặc trong ngăn kéo. </p>
+
+<p>Giờ đây Chế độ Ngủ sâu trong Android N đã được cải tiến thêm và tiết kiệm pin ngay cả khi đang di chuyển.
+Bất kỳ khi nào màn hình đang tắt trong một khoảng thời gian và thiết bị không được cắm sạc thì
+Chế độ Ngủ sâu sẽ áp dụng tập con của các hạn chế CPU và mạng quen thuộc đối với các ứng dụng.
+Điều này có nghĩa là người dùng có thể tiết kiệm pin ngay cả khi đang mang thiết bị trong túi
+của họ.</p>
+
+
+<img src="/preview/images/doze-diagram-1.png" alt="" id="figure1" />
+<p class="img-caption">
+ <strong>Hình 3.</strong> Chế độ Ngủ sâu đang áp dụng
+ các hạn chế để cải thiện thời lượng pin ngay cả khi thiết bị không được đặt một chỗ.
+</p>
+
+
+<p>Sau một khoảng thời gian ngắn khi màn hình tắt và thiết bị chỉ chạy bằng nguồn pin, Chế độ Ngủ sâu
+sẽ hạn chế truy cập mạng và trì hoãn các tác vụ, đồng bộ. Trong các khoảng thời gian
+bảo trì ngắn, các ứng dụng sẽ được phép truy cập mạng và mọi tác vụ/đồng bộ
+bị trì hoãn sẽ được thực thi. Bật màn hình hoặc cắm sạc vào thiết bị sẽ đưa
+thiết bị thoát khỏi Chế độ Ngủ sâu.</p>
+
+<p>Khi để thiết bị nằm một chỗ lần nữa với màn hình được tắt và chạy bằng pin trong một
+khoảng thời gian thì Chế độ Ngủ sâu sẽ áp dụng toàn bộ các hạn chế CPU và mạng đối với {@link
+android.os.PowerManager.WakeLock}, báo thức {@link android.app.AlarmManager} và quét
+GPS/Wi-Fi.</p>
+
+<p>Bạn có thể áp dụng các thực hành tốt nhất tương tự để điều chỉnh ứng dụng của mình cho Chế độ Ngủ sâu cho dù
+thiết bị có đang di chuyển hay đứng yên. Do đó, nếu bạn đã cập nhật ứng dụng để xử lý
+Chế độ Ngủ sâu một cách tinh tế thì bạn hoàn toàn yên tâm. Nếu không, hãy tiến hành <a href="{@docRoot}training/monitoring-device-state/doze-standby.html#assessing_your_app">làm cho
+ ứng dụng thích ứng với Chế độ Ngủ sâu</a> ngay.</p>
+
+<h2 id="background_optimizations">Dự án Svelte: Tối ưu hóa chạy ngầm</h2>
+
+<p>Dự án Svelte là một nỗ lực liên tục nhằm tối giảm sử dụng RAM của hệ thống và các ứng dụng
+trên khắp hệ sinh thái các thiết bị Android. Trong Android N, dự án
+Svelte tập trung vào việc tối ưu hóa cách thức các ứng dụng chạy ngầm. </p>
+
+<p>Xử lý chạy ngầm là một phần quan trọng của hầu hết các ứng dụng. Khi sử dụng đúng cách, nó
+có thể giúp cho trải nghiệm người dùng của bạn trở nên tuyệt vời — tức thì, nhanh chóng và nhận biết được bối cảnh.
+Khi không sử dụng đúng cách, xử lý chạy ngầm có thể tiêu tốn RAM (và
+pin) một cách không cần thiết cũng như ảnh hưởng đến hiệu năng hệ thống cho các ứng dụng khác. </p>
+
+<p>Kể từ Android 5.0, {@link android.app.job.JobScheduler} đã trở thành
+cách thức được ưu tiên để thực hiện công việc chạy ngầm thích hợp
+cho người dùng. Ứng dụng có thể lên lịch cho các tác vụ trong khi cho phép hệ thống tối ưu hóa dựa trên
+các điều kiện về bộ nhớ, nguồn điện và kết nối. JobScheduler đem lại khả năng kiểm soát và
+sự đơn giản, và chúng tôi muốn mọi ứng dụng đều sử dụng nó. </p>
+
+<p>
+ Một giải pháp hiệu quả khác là <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
+ <code>GCMNetworkManager</code></a>, thuộc một phần của Dịch vụ Google Play, cho phép
+ lên lịch tác vụ tương tự với khả năng tương thích trên các phiên bản Android
+ cũ.
+</p>
+
+<p>Chúng tôi đang tiếp tục kế thừa <code>JobScheduler</code> và
+<code>GCMNetworkManager</code> để đáp ứng nhiều hơn
+các trường hợp sử dụng của bạn — ví dụ như trong Android N giờ đây bạn đã có thể lên lịch cho công việc
+chạy ngầm dựa vào những thay đổi trong các Trình cung cấp Nội dung. Đồng thời, chúng tôi đang tiến hành
+loại bỏ một số mẫu cũ có thể làm giảm hiệu năng hệ thống,
+đặc biệt trên các thiết bị ít bộ nhớ.</p>
+
+<p>Trong Android N, chúng tôi sẽ loại bỏ ba truyền phát không biểu thị được sử dụng phổ biến —
+{@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, {@link
+ android.hardware.Camera#ACTION_NEW_PICTURE} và {@link
+ android.hardware.Camera#ACTION_NEW_VIDEO} — bởi vì các truyền phát này có thể đánh thức
+các tiến trình chạy ngầm của nhiều ứng dụng cùng lúc và sử dụng quá mức bộ nhớ và pin. Nếu
+ứng dụng của bạn đang nhận các truyền phát này thì hãy tận dụng N Developer Preview để
+ chuyển sang <code>JobScheduler</code> và các API liên quan khác thay thế. </p>
+
+<p>
+ Hãy xem tài liệu <a href="{@docRoot}preview/features/background-optimization.html">Tối ưu hóa
+ Chạy ngầm</a> để biết thêm chi tiết.
+</p>
+
+
+<h2 id="data_saver">Tiết kiệm dữ liệu</h2>
+
+<div class="col-5of12" style="margin-right:1.5em;">
+<img src="{@docRoot}images/android-7.0/datasaver.png" style="border:2px solid #ddd">
+
+<p class="img-caption" style="padding-right:2em;">
+ <strong>Hình 4.</strong> Tính năng Tiết kiệm dữ liệu trong mục Settings.
+</p>
+ </div>
+
+<p>Trong vòng đời của một thiết bị di động thì chi phí gói cước dữ liệu di động về cơ bản
+sẽ cao hơn giá thành của chính thiết bị đó. Đối với nhiều người dùng, dữ liệu di động là một
+tài nguyên đắt đỏ họ muốn sử dụng tiết kiệm. </p>
+
+<p>Android N đã đưa vào chế độ Tiết kiệm dữ liệu, một dịch vụ hệ thống mới giúp giảm
+sử dụng dữ liệu di động, cho dù là chuyển vùng, gần đến kỳ thanh toán cước,
+hoặc trên một gói dữ liệu trả trước khiêm tốn. Tiết kiệm dữ liệu cho người dùng kiểm soát cách thức ứng dụng
+sử dụng dữ liệu di động và cho phép nhà phát triển cung cấp dịch vụ hiệu quả hơn khi Tiết kiệm
+dữ liệu được bật. </p>
+
+<p>Khi người dùng bật Tiết kiệm dữ liệu trong <strong>Settings</strong> và thiết bị đang
+sử dụng một mạng có đo lưu lượng thì hệ thống sẽ chặn việc sử dụng dữ liệu chạy ngầm và truyền tín hiệu cho ứng dụng
+để sử dụng ít dữ liệu hơn ở tiền cảnh bất cứ khi nào có thể — chẳng hạn như bằng cách giới hạn
+bit rate để truyền phát, giảm chất lượng hình ảnh, trì hoãn tạo trước bộ đệm để tối ưu,
+v.v. Người dùng có thể lập danh sách các ứng dụng cụ thể được phép sử dụng
+dữ liệu có tính lưu lượng được chạy ngầm ngay cả khi Tiết kiệm dữ liệu được bật.</p>
+
+<p>Android N mở rộng lớp {@link android.net.ConnectivityManager} để cung cấp cho các ứng dụng một
+cách thức <a href="{@docRoot}preview/features/data-saver.html#status">truy xuất
+các tùy chọn Tiết kiệm dữ liệu của người dùng</a> và <a href="{@docRoot}preview/features/data-saver.html#monitor-changes">theo dõi
+các thay đổi của tùy chọn</a>. Mọi ứng dụng cần kiểm tra xem người dùng đó đã bật Tiết kiệm
+Dữ liệu hay chưa và cố gắng giới hạn sử dụng dữ liệu chạy ở tiền cảnh và chạy ngầm.</p>
+
+
+<h2 id="tile_api">API cho ô Cài đặt nhanh</h2>
+
+
+<div style="float:right;max-width:320px">
+<img src="{@docRoot}images/android-7.0/quicksettings.png" style="padding-left:1.5em;">
+
+<p class="img-caption" style="padding-left:2em;">
+ <strong>Hình 5.</strong> Các ô Cài đặt nhanh trong vùng hiển thị thông báo.
+</p>
+
+
+ </div><p>Cài đặt nhanh là một cách phổ biến và đơn giản để hiển thị các cài đặt và hành động quan trọng,
+trực tiếp từ khu vực thông báo. Trong Android N, chúng tôi đã mở rộng phạm vi của
+Cài đặt nhanh để khiến nó trở nên hữu ích và thuận tiện hơn nữa. </p>
+
+<p>Chúng tôi đã thêm không gian cho các ô Cài đặt nhanh mà người dùng có thể
+truy cập trên toàn bộ một vùng hiển thị được phân trang bằng cách vuốt sang trái hoặc phải. Chúng tôi cũng
+cho người dùng kiểm soát những ô Cài đặt nhanh nào sẽ xuất hiện và vị trí xuất hiện
+của chúng — người dùng chỉ cần kéo và thả để thêm hoặc di chuyển các ô. </p>
+
+<p>Đối với nhà phát triển, Android N cũng bổ sung một API mới cho phép định nghĩa các ô
+ Cài đặt nhanh của riêng bạn giúp người dùng dễ dàng truy cập tới các điều khiển và hành động quan trọng trong ứng dụng của bạn.</p>
+
+<p>
+ Các ô Cài đặt nhanh được dành riêng cho các điều khiển hoặc hành động
+ khẩn cấp hoặc thường xuyên được sử dụng, không nên dùng làm lối tắt để
+ khởi chạy một ứng dụng.
+</p>
+
+<p>
+ Một khi đã định nghĩa các ô của mình bạn có thể làm nổi chúng lên trước người dùng để họ có thể thêm
+ các ô này vào Cài đặt nhanh bằng cách chỉ cần kéo và thả.
+</p>
+
+<p>
+ Để biết thêm thông tin về việc tạo một ô ứng dụng, hãy xem
+ <code>android.service.quicksettings.Tile</code> trong tài liệu <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Tham khảo API</a> có thể tải xuống.
+</p>
+
+
+
+<h2 id="number-blocking">Chặn số</h2>
+
+<p>Android N đã hỗ trợ chặn số điện thoại trong nền tảng này và cung cấp một
+ API khuôn khổ cho phép các nhà cung cấp dịch vụ duy trì một danh sách số bị chặn.
+Ứng dụng SMS mặc định, ứng dụng gọi điện mặc định và các ứng dụng của nhà cung cấp có thể đọc và
+ghi vào danh sách số bị chặn. Các ứng dụng khác không thể truy cập vào danh sách này.</p>
+
+<p>Thông qua việc đưa chặn số thành một tính năng tiêu chuẩn của nền tảng, Android sẽ cung cấp
+cách thức thống nhất để các ứng dụng hỗ trợ chặn số trên một loạt các
+thiết bị. Những lợi ích mà ứng dụng có thể tận dụng gồm:</p>
+
+<ul>
+ <li> Số bị chặn cuộc gọi cũng sẽ bị chặn tin nhắn văn bản
+ <li> Số bị chặn có thể được duy trì qua các lần thiết lập lại và qua nhiều thiết bị thông qua tính năng Sao lưu &
+Khôi phục
+ <li> Nhiều ứng dụng có thể sử dụng cùng một danh sách số bị chặn
+</ul>
+
+<p>Ngoài ra, việc tích hợp ứng dụng của nhà mạng thông qua Android cũng đồng nghĩa là các nhà mạng có thể
+đọc danh sách số bị chặn trên thiết bị và thực hiện chặn số từ phía nhà cung cấp dịch vụ
+cho người dùng để ngăn các cuộc gọi và tin nhắn văn bản không mong muốn tiếp cận người dùng
+thông qua bất kỳ phương tiện nào, ví dụ như điểm cuối VOIP hoặc điện thoại chuyển cuộc gọi.</p>
+
+<p>
+ Để biết thêm thông tin, hãy xem <code>android.provider.BlockedNumberContract</code>
+ trong tài liệu <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Tham khảo
+ API</a> có thể tải xuống.
+</p>
+
+<h2 id="call_screening">Sàng lọc cuộc gọi</h2>
+
+<p>
+ Android N cho phép ứng dụng gọi điện mặc định sàng lọc các cuộc gọi đến. Ứng dụng
+ gọi điện thực hiện điều này bằng cách thực thi <code>CallScreeningService</code> mới,
+ cho phép ứng dụng gọi điện thực hiện một số hành động dựa trên
+ {@link android.telecom.Call.Details Call.Details} của cuộc gọi đến như:
+</p>
+
+<ul>
+ <li> Từ chối cuộc gọi đến
+ <li> Không cho phép cuộc gọi lưu trong nhật ký cuộc gọi
+ <li> Không hiển thị thông báo về cuộc gọi cho người dùng
+</ul>
+
+<p>
+ Để biết thêm thông tin, hãy xem <code>android.telecom.CallScreeningService</code>
+ trong tài liệu <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Tham khảo
+ API</a> có thể tải xuống.
+</p>
+
+
+<h2 id="multi-locale_languages">Hỗ trợ đa bản địa, thêm nhiều ngôn ngữ</h2>
+
+
+<p>Android N cho phép người dùng chọn <strong>đa bản địa</strong> trong Settings,
+để hỗ trợ tốt hơn cho các trường hợp song ngữ. Các ứng dụng có thể sử dụng
+một API mới để truy xuất các bản địa được chọn của người dùng và sau đó mang đến
+trải nghiệm người dùng tinh tế hơn cho người dùng đa bản địa — như hiển thị các kết quả tìm kiếm bằng
+nhiều ngôn ngữ và không yêu cầu dịch các trang web sang ngôn ngữ mà
+người dùng đã biết.</p>
+
+<p>Ngoài hỗ trợ đa bản địa, Android N cũng mở rộng danh sách các ngôn ngữ
+khả dụng đối với người dùng. Nền tảng này cung cấp hơn 25 biến thể cho các ngôn ngữ
+được sử dụng phổ biến như Tiếng Anh, Tây Ban Nha, Pháp và Ả-rập. Nó cũng bổ sung hỗ trợ
+một phần cho hơn 100 ngôn ngữ mới.</p>
+
+<p>Các ứng dụng có thể truy xuất danh sách bộ bản địa theo người dùng bằng cách gọi <code>LocaleList.GetDefault()</code>. Để hỗ trợ số lượng bản địa mở rộng, Android N đang thay đổi cách thức
+phân giải tài nguyên. Hãy đảm bảo bạn kiểm tra và xác minh rằng ứng dụng của mình
+đang hoạt động như mong muốn theo lô-gic phân giải tài nguyên mới này.</p>
+
+<p>Để tìm hiểu về hành vi phân giải tài nguyên mới và các thực hành tốt nhất bạn nên
+thực hiện theo, hãy xem mục <a href="{@docRoot}preview/features/multilingual-support.html">Hỗ trợ đa ngôn ngữ</a>.</p>
+
+<h2 id="icu4">API ICU4J trong Android</h2>
+
+<p>
+ Android N đã cung cấp một tập nhỏ các API <a href="http://site.icu-project.org/">ICU4J</a> trong khuôn khổ Android thuộc
+ gói <code>android.icu</code>. Việc chuyển nhập sang rất dễ dàng và hầu hết chỉ liên quan đến
+ việc đổi từ không gian tên <code>com.java.icu</code> thành
+ <code>android.icu</code>. Nếu bạn đang sử dụng gói ICU4J trong ứng dụng
+ của mình thì việc chuyển đổi sang các API <code>android.icu</code> được cung cấp trong khuôn khổ
+ Android có thể giúp làm giảm đáng kể kích thước của tệp APK.
+</p>
+
+<p>
+ Để tìm hiểu thêm về API ICU4J trên Android, hãy xem <a href="{@docRoot}preview/features/icu4j-framework.html">Hỗ trợ ICU4J</a>.
+</p>
+
+
+
+<h2 id="gles_32">API OpenGL™ ES 3.2</h2>
+
+<p>Android N bổ sung các giao diện khuôn khổ và hỗ trợ nền tảng cho OpenGL ES 3.2, bao gồm:</p>
+
+<ul>
+ <li> Mọi phần mở rộng trong <a class="external-link" href="https://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">Gói Tiện ích mở rộng Android</a></a> (AEP) ngoại trừ <code>EXT_texture_sRGB_decode</code>
+ <li> Bộ đệm khung hình dấu chấm động cho HDR và tạo bóng trì hoãn.
+ <li> Các lệnh vẽ BaseVertex cho phép chia gói và truyền phát hiệu quả hơn.
+ <li> Kiểm soát truy cập bộ đệm mạnh mẽ để giảm phí tổn quản lý của WebGL.
+</ul>
+
+<p>API khuôn khổ cho OpenGL ES 3.2 trên Android N được cung cấp với lớp
+<code>GLES32</code>. Khi sử dụng OpenGL ES 3.2, hãy đảm bảo khai báo
+yêu cầu trong tệp bản kê khai của bạn bằng thẻ <code><uses-feature></code> và
+thuộc tính <code>android:glEsVersion</code>. </p>
+
+<p>Để biết thông tin về sử dụng OpenGL ES, bao gồm cách kiểm tra phiên bản
+ OpenGL ES được hỗ trợ của thiết bị tại thời gian chạy, hãy xem mục <a href="{@docRoot}guide/topics/graphics/opengl.html">Hướng dẫn API OpenGL ES</a>.</p>
+
+
+<h2 id="android_tv_recording">Ghi lại trên Android TV</h2>
+
+<p>Android N bổ sung khả năng ghi và phát lại nội dung từ các dịch vụ
+nguồn vào của Android TV thông qua các API ghi lại. Được xây dựng dựa trên các API
+chuyển dịch thời gian sẵn có, các dịch vụ nguồn vào TV có thể kiểm soát dữ liệu của kênh nào được phép ghi lại, cách thức
+lưu trữ các phiên được ghi lại cũng như quản lý tương tác của người dùng với nội dung ghi lại. </p>
+
+<p>Để biết thêm thông tin, hãy xem <a href="{@docRoot}preview/features/tv-recording-api.html">API ghi lại của Android TV</a>.</p>
+
+
+<h2 id="android_for_work">Android cho Công việc</h2>
+
+<p>Android cho Công việc bổ sung nhiều tính năng mới và các API cho thiết bị chạy Android N.
+Dưới đây là một số điểm nổi bật — để xem danh sách đầy đủ các cập nhật của Android N
+liên quan đến Android cho Công việc, vui lòng xem Các thay đổi của Android cho Công việc.</p>
+
+<h3 id="work_profile_security_challenge">Thử thách bảo mật cấu hình công việc </h3>
+
+<p>
+ Người sở hữu cấu hình có thể chỉ định một thử thách bảo mật riêng cho các ứng dụng đang chạy trong
+ cấu hình công việc. Thử thách công việc được hiển thị khi người dùng cố gắng mở
+ bất kỳ ứng dụng công việc nào. Hoàn tất thành công thử thách bảo mật sẽ mở khóa
+ cấu hình công việc và giải mã nó nếu cần. Đối với người sở hữu cấu hình,
+ <code>ACTION_SET_NEW_PASSWORD</code> sẽ yêu cầu người dùng đặt một thử thách
+ công việc và <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> sẽ yêu cầu
+ người dùng đặt khóa thiết bị.
+</p>
+
+<p>
+ Người sở hữu cấu hình có thể đặt các chính sách mật khẩu riêng biệt cho thử thách công việc
+ (như độ dài mã PIN cần thiết hoặc có thể sử dụng dấu vân tay
+ để mở khóa cấu hình hay không) bằng <code>setPasswordQuality()</code>,
+ <code>setPasswordMinimumLength()</code> và các phương thức liên quan. Người sở hữu
+ cấu hình cũng có thể cài khóa thiết bị bằng thực thể <code>DevicePolicyManager</code>
+ được trả về bởi phương thức <code>getParentProfileInstance()</code> mới.
+ Ngoài ra, người sở hữu cấu hình có thể tùy chỉnh màn hình xác thực thông tin cho
+ thử thách công việc bằng các phương thức <code>setOrganizationColor()</code> và
+ <code>setOrganizationName()</code> mới.
+</p>
+<h3 id="turn_off_work">Tắt công việc </h3>
+
+<p>Trên một thiết bị có cấu hình công việc, người dùng có thể bật hoặc tắt chế độ công việc. Khi chế độ công việc được
+tắt người dùng được quản lý sẽ tạm thời bị tắt, khiến vô hiệu hóa các ứng dụng
+cấu hình công việc, đồng bộ chạy ngầm và các thông báo. Điều này bao gồm cả ứng dụng
+của người sở hữu cấu hình. Khi chế độ công việc bị tắt, hệ thống sẽ hiển thị biểu tượng
+trạng thái liên tục để nhắc người dùng đó rằng họ không thể khởi chạy các ứng dụng công việc. Trình khởi chạy
+sẽ chỉ báo rằng các ứng dụng và widget công việc không khả dụng. </p>
+
+<h3 id="always_on_vpn">VPN luôn bật </h3>
+
+<p>Người sở hữu thiết bị và người sở hữu cấu hình có thể đảm bảo rằng những ứng dụng công việc luôn kết nối
+thông qua một VPN chỉ định. Hệ thống sẽ tự động khởi động VPN đó sau khi
+thiết bị khởi động.</p>
+
+<p>
+ Các phương thức <code>DevicePolicyManager</code> mới gồm
+ <code>setAlwaysOnVpnPackage()</code> và
+ <code>getAlwaysOnVpnPackage()</code>.
+</p>
+
+<p>Do các dịch vụ VPN có thể được gắn kết trực tiếp bởi hệ thống mà không cần tương tác
+của ứng dụng, các máy khách VPN cần xử lý các điểm bắt đầu cho VPN luôn bật. Giống
+trước đây, các dịch vụ được chỉ định tới hệ thống bằng một bộ lọc ý định phù hợp với
+hành động <code>android.net.VpnService</code>. </p>
+
+<p>
+ Người dùng cũng có thể đặt thủ công các máy khách VPN luôn bật có cài đặt các phương thức
+ <code>VPNService</code> trong người dùng chính bằng
+ <strong>Settings>More>Vpn</strong>.
+</p>
+
+<h2 id="accessibility_enhancements">Cải tiến trợ năng</h2>
+
+<p>Android N nay đã hỗ trợ Cài đặt Khả năng nhìn trực tiếp trên màn hình Chào mừng khi thiết lập
+thiết bị mới. Điều này giúp người dùng rất dễ dàng khám phá và cấu hình
+các tính năng trợ năng trên thiết bị của họ, bao gồm cử chỉ phóng đại, cỡ
+phông chữ, kích thước hiển thị và TalkBack. </p>
+
+<p>Với các tính năng trợ năng được bố trí ngày càng dễ thấy hơn, khi được bật
+khả năng người dùng sẽ thử ứng dụng của bạn sẽ cao hơn. Hãy đảm bảo bạn kiểm thử ứng dụng của mình
+trước với các cài đặt này được bật. Bạn có thể bật chúng trong Settings >
+Accessibility.</p>
+
+<p>Ngoài ra, trong Android N, các dịch vụ trợ năng đã có thể trợ giúp người dùng bị các tổn thương
+vận động chạm vào màn hình. API mới cho phép xây dựng các dịch vụ với những
+tính năng như theo dõi chuyển động của khuôn mặt, theo dõi chuyển động của mắt, quét điểm, v.v. nhằm
+đáp ứng nhu cầu những người dùng này.</p>
+
+<p>Để biết thêm thông tin, hãy xem <code>android.accessibilityservice.GestureDescription</code>
+ trong tài liệu <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Tham khảo API</a> có thể tải xuống.</p>
+
+
+<h2 id="direct_boot">Khởi động Trực tiếp</h2>
+
+<p>Khởi động Trực tiếp cải thiện thời gian khởi động của thiết bị và cho phép các ứng dụng
+đã đăng ký có chức năng hạn chế ngay cả sau khi khởi động lại ngoài dự kiến.
+Ví dụ, nếu một thiết bị được mã hóa khởi động lại khi người dùng đang ngủ thì
+báo thức, tin nhắn và các cuộc gọi đến đã đăng ký có thể tiếp tục thông báo
+cho người dùng như thường lệ. Điều này cũng có nghĩa là các dịch vụ trợ năng cũng sẽ
+ khả dụng ngay sau khi khởi động xong.</p>
+
+<p>Khởi động Trực tiếp sử dụng mã hóa theo tệp trong Android N
+để bật các chính sách mã hóa chi tiết cho cả dữ liệu của hệ thống và ứng dụng.
+Hệ thống sẽ sử dụng một bộ lưu trữ mã hóa thiết bị cho dữ liệu hệ thống được chọn và dữ liệu ứng dụng
+đã đăng ký công khai. Theo mặc định, một bộ lưu trữ mã hóa thông tin xác thực sẽ được sử dụng cho mọi
+ dữ liệu hệ thống, dữ liệu người dùng, ứng dụng và dữ liệu của ứng dụng khác. </p>
+
+<p>Trong quá trình khởi động, hệ thống sẽ khởi động vào chế độ hạn chế và chỉ có quyền truy cập tới
+dữ liệu mã hóa thiết bị mà thôi, và không có quyền truy cập thông thường tới ứng dụng hoặc dữ liệu.
+Nếu bạn có các thành phần muốn chạy trong chế độ này thì bạn có thể đăng ký
+chúng bằng cách đặt cờ trong bản kê khai. Sau khi khởi động, hệ thống sẽ kích hoạt
+các thành phần đã đăng ký bằng cách truyền phát ý định <code>LOCKED_BOOT_COMPLETED</code>
+. Hệ thống sẽ đảm bảo cho dữ liệu mã hóa thiết bị đã đăng ký sẽ khả dụng
+trước khi mở khóa. Mọi dữ liệu khác sẽ không khả dụng cho tới khi Người dùng xác nhận thông tin xác thực trên màn hình khóa
+ của họ để giải mã nó. </p>
+
+Để biết thêm thông tin, hãy xem <a href="{@docRoot}preview/features/direct-boot.html">Khởi động Trực tiếp</a>.</p>
+</p>
+
+
+<h2 id="key_attestation">Chứng thực khóa</h2>
+
+<p>Các bộ lưu trữ khóa dựa trên phần cứng cung cấp một phương thức an toàn hơn rất nhiều để tạo, lưu trữ,
+và sử dụng các khóa mật mã trên thiết bị Android. Chúng bảo vệ các khóa trước
+nhân Linux, trước các lỗ hổng bảo mật tiềm tàng của Android và trước việc trích xuất
+từ các máy bị giành quyền điều khiển và bị can thiệp vào các tệp hệ thống (máy bị root).</p>
+
+<p>Android N đã đưa ra tính năng Chứng thực khóa để sử dụng các bộ lưu trữ khóa dựa trên phần cứng một cách
+ dễ dàng và bảo mật hơn. Các ứng dụng và dịch vụ không thuộc thiết bị có thể sử dụng Chứng thực
+khóa để xác định chắc chắn xem một cặp khóa RSA hoặc EC có
+dựa trên phần cứng hay không, các đặc điểm của cặp khóa đó là gì và
+ các ràng buộc nào được áp dụng cho việc sử dụng và tính hợp lệ của cặp khóa đó. </p>
+
+<p>Các ứng dụng và dịch vụ không thuộc thiết bị có thể yêu cầu thông tin về một cặp khóa
+thông qua chứng chỉ chứng thực X.509. Chứng chỉ này phải được ký bởi một khóa
+chứng thực hợp lệ. Khóa chứng thực là một khóa ký ECDSA, được
+đưa vào bộ lưu trữ khóa dựa trên phần cứng của thiết bị tại nhà máy.
+Do đó, một chứng chỉ chứng thực được ký bởi khóa
+chứng thực hợp lệ sẽ xác nhận sự tồn tại của bộ lưu trữ khóa dựa trên phần cứng, kèm theo
+ chi tiết về các cặp khóa trong bộ lưu trữ khóa đó.</p>
+
+<p>Để chắc chắn thiết bị đang sử dụng ảnh
+Android bảo mật, chính thức từ nhà máy, Chứng thực khóa yêu cầu <a class="external-link" href="https://source.android.com/security/verifiedboot/verified-boot.html#bootloader_requirements">bootloader</a>
+ của thiết bị cung cấp thông tin sau cho <a class="external-link" href="https://source.android.com/security/trusty/index.html">Môi trường Thực thi
+ An toàn (TEE)</a>:</p>
+
+<ul>
+<li>Phiên bản HĐH và cấp vá lỗi được cài đặt trên thiết bị</li>
+<li>Khóa công khai <a href="https://source.android.com/security/verifiedboot/index.html" class="external-link">Khởi động được xác thực</a> và trạng thái khóa</li>
+ </ul>
+
+<p>Để biết thêm thông tin về tính năng bộ lưu trữ khóa dựa trên phần cứng,
+hãy xem hướng dẫn <a href="https://source.android.com/security/keystore/" class="external-link">Bộ lưu trữ khóa dựa trên phần cứng</a>.</p>
+
+<p>Ngoài Chứng thực khóa, Android N cũng giới thiệu
+ các khóa dựa vào vân tay mà không được thu hồi khi đăng ký vân tay.</p>
+
+<h2 id="network_security_config">Cấu hình Bảo mật mạng</h2>
+
+<p>Trong Android N, các ứng dụng có thể tùy biến hành vi của các kết nối
+bảo mật (HTTPS, TLS) của chúng một cách an toàn mà không cần chỉnh sửa mã nhờ sử dụng khai báo
+<em>Cấu hình Bảo mật mạng</em> thay vì sử dụng các API lập trình truyền thống
+dễ xảy ra lỗi (vd: X509TrustManager).</p>
+
+ <p>Các tính năng được hỗ trợ:</p>
+<ul>
+<li><b>Nguồn tin cậy tùy chỉnh.</b> Cho phép một ứng dụng tùy chỉnh
+Nhà cung cấp chứng chỉ (CA) nào sẽ được tin cậy cho các kết nối bảo mật của ứng dụng. Ví
+dụ, tin cậy các chứng chỉ tự ký cụ thể hoặc một bộ giới hạn các CA công khai.
+</li>
+<li><b>Chỉ khống chế khi gỡ lỗi.</b> Cho phép nhà phát triển ứng dụng an toàn gỡ lỗi
+các kết nối bảo mật của ứng dụng mà không tạo thêm rủi ro cho phần cơ sở
+đã cài đặt.
+</li>
+<li><b>Không sử dụng truyền gửi văn bản chưa mã hóa.</b> Cho phép một ứng dụng tự bảo vệ mình khỏi việc
+vô tình sử dụng truyền gửi văn bản chưa mã hóa cleartext.</li>
+<li><b>Ghim chứng chỉ.</b> Một tính năng nâng cao cho phép một ứng dụng
+ giới hạn các khóa máy chủ nào là an toàn đối với các kết nối bảo mật.</li>
+</ul>
+
+<p>Để biết thêm thông tin, hãy xem <a href="{@docRoot}preview/features/security-config.html">Cấu hình Bảo mật
+ mạng</a>.</p>
+
+<h2 id="default_trusted_ca">Nhà cung cấp Chứng chỉ An toàn mặc định</h2>
+
+<p>Theo mặc định, các ứng dụng nhắm mục tiêu Android N chỉ tin cậy các chứng chỉ do hệ thống cấp
+và không còn tin cậy các Nhà cung cấp chứng chỉ (CA) do người dùng thêm vào. Các ứng dụng nhắm mục tiêu Android
+N muốn tin cậy các CA do người dùng thêm vào nên sử dụng
+<a href="{@docRoot}preview/features/security-config.html">Cấu hình Bảo mật mạng</a> để
+chỉ định cách thức tin cậy các CA của người dùng.</p>
+
+<h2 id="apk_signature_v2">Lược đồ chữ ký số v2 cho tệp APK</h2>
+
+<p>Lớp PackageManager nay đã hỗ trợ xác thực ứng dụng bằng Lược đồ chữ ký số v2
+APK. Lược đồ chữ ký số v2 APK là một lược đồ chữ ký số trên toàn bộ tệp
+làm tăng đáng kể tốc độ xác thực và tăng cường sự bảo đảm
+ toàn vẹn bằng cách phát hiện các thay đổi trái phép đối với các tệp APK.</p>
+
+<p>Để bảo đảm tương thích ngược, một tệp APK phải được ký bằng lược đồ
+chữ ký số v1 (Lược đồ chữ ký số JAR) trước khi được ký bằng lược đồ chữ ký số v2.
+Với lược đồ chữ ký số v2, quá trình xác thực sẽ thất bại nếu bạn ký tệp APK bằng một
+ chứng chỉ khác sau khi ký bằng lược đồ v2. </p>
+
+<p>Hỗ trợ cho lược đồ chữ ký số v2 cho tệp AKP sẽ có sau trong N Developer
+Preview.</p>
+
+<h2 id="scoped_directory_access">Truy cập thư mục theo phạm vi</h2>
+
+<p>Trong Android N, ứng dụng có thể sử dụng các API mới để yêu cầu truy cập vào các thư mục <a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">bộ nhớ lưu trữ
+ngoài</a> riêng, bao gồm các thư mục trên phương tiện có thể tháo ra như thẻ
+SD. Các API mới đã tối giản cách thức ứng dụng của bạn truy cập các thư mục lưu trữ ngoài
+tiêu chuẩn như thư mục <code>Pictures</code>. Các ứng dụng
+như ứng dụng quản lý ảnh có thể sử dụng các API này thay vì sử dụng
+<code>READ_EXTERNAL_STORAGE</code> để cấp quyền truy cập tới mọi thư mục
+lưu trữ, hoặc Khuôn khổ Truy cập Lưu trữ để giúp người dùng di chuyển tới
+thư mục đó.</p>
+
+<p>Ngoài ra, các API mới này cũng đơn giản hóa các bước mà người dùng thực hiện để cấp quyền truy cập
+bộ nhớ lưu trữ ngoài cho ứng dụng của bạn. Khi bạn sử dụng các API mới, hệ thống sẽ sử dụng một UI cấp quyền
+đơn giản cung cấp các thông tin chi tiết rõ ràng về thư mục nào ứng dụng đang
+yêu cầu quyền truy cập.</p>
+
+<p>Để biết thêm thông tin, hãy xem tài liệu cho nhà phát triển
+<a href="{@docRoot}preview/features/scoped-folder-access.html">Truy cập
+Thư mục theo Phạm vi</a>.</p>
+
+
+
+
+
+
diff --git a/docs/html-intl/intl/vi/about/versions/nougat/index.jd b/docs/html-intl/intl/vi/about/versions/nougat/index.jd
new file mode 100644
index 0000000..2d57fa6
--- /dev/null
+++ b/docs/html-intl/intl/vi/about/versions/nougat/index.jd
@@ -0,0 +1,110 @@
+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
+
+<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-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 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}about/versions/nougat/android-7.0.html">
+ <span class="dac-sprite dac-auto-chevron"></span>
+ Bắt đầu
+ </a>
+ </div>
+ <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></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>
+</section>
+
+
+<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://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/dev-community">
+ <i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
+ Tham gia cộng đồng nhà phát triển
+ </a>
+ </li>
+ </ul>
+ </div><!-- end .wrap -->
+</div><!-- end .dac-actions -->
+
+<section class="dac-section dac-light dac-small" id="latest"><div class="wrap">
+ <h2 class="norule">Latest</h2>
+ <div class="resource-widget resource-flow-layout col-16"
+ data-query="type:blog+tag:androidn+tag:featured, type:youtube+tag:androidn+tag:featured"
+ data-sortOrder="-timestamp"
+ data-cardSizes="6x6"
+ data-items-per-page="6"
+ data-maxResults="15"
+ data-initial-results="3"></div>
+</div></section>
+
+<section class="dac-section dac-gray" id="videos"><div class="wrap">
+ <h1 class="dac-section-title">Videos</h1>
+ <div class="dac-section-subtitle">
+ 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: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>
\ No newline at end of file
diff --git a/docs/html-intl/intl/vi/preview/j8-jack.jd b/docs/html-intl/intl/vi/guide/platform/j8-jack.jd
similarity index 100%
rename from docs/html-intl/intl/vi/preview/j8-jack.jd
rename to docs/html-intl/intl/vi/guide/platform/j8-jack.jd
diff --git a/docs/html-intl/intl/vi/guide/topics/ui/multi-window.jd b/docs/html-intl/intl/vi/guide/topics/ui/multi-window.jd
new file mode 100644
index 0000000..3317d1c
--- /dev/null
+++ b/docs/html-intl/intl/vi/guide/topics/ui/multi-window.jd
@@ -0,0 +1,582 @@
+page.title=Hỗ trợ đa cửa sổ
+page.metaDescription=Hỗ trợ mới trong Android N để hiển thị nhiều hơn một ứng dụng cùng lúc.
+page.keywords="multi-window", "android N", "split screen", "free-form"
+
+@jd:body
+
+<div id="tb-wrapper">
+ <div id="tb">
+ <h2>Trong tài liệu này</h2>
+ <ol>
+ <li><a href="#overview">Tổng quan</a></li>
+ <li><a href="#lifecycle">Vòng đời đa cửa sổ</a></li>
+ <li><a href="#configuring">Cấu hình Ứng dụng của bạn cho Chế độ
+ Đa cửa sổ</a></li>
+ <li><a href="#running">Chạy Ứng dụng của bạn trong Chế độ Đa cửa sổ</a></li>
+ <li><a href="#testing">Kiểm thử Hỗ trợ Đa cửa sổ của Ứng dụng của bạn</a></li>
+ </ol>
+ <h2>Xem thêm</h2>
+ <ol>
+ <li><a class="external-link" href="https://github.com/googlesamples/android-MultiWindowPlayground">Ứng dụng mẫu Multi-Windows
+ Playground</a></li>
+ </ol>
+ </div>
+</div>
+
+<p>
+ Android N thêm hỗ trợ cho hiển thị đồng thời nhiều hơn một ứng dụng
+ vào cùng một thời điểm. Trên thiết bị cầm tay, hai ứng dụng có thể chạy song song hoặc
+ trên dưới nhau trong chế độ <em>chia màn hình</em>. Trên thiết bị TV, ứng dụng có thể
+ sử dụng chế độ <em>ảnh trong ảnh</em> để tiếp tục phát lại video trong khi người dùng
+ đang tương tác với ứng dụng khác.
+</p>
+
+<p>
+ Nếu bạn dựng ứng dụng của bạn bằng N Preview SDK, bạn có thể cấu hình cách ứng dụng của bạn
+ xử lý hiển thị đa cửa sổ. Ví dụ, bạn có thể quy định
+ các kích thước tối thiểu cho phép của hoạt động của bạn. Bạn cũng có thể vô hiệu hóa hiển thị đa cửa sổ cho
+ ứng dụng của bạn, đảm bảo rằng hệ thống chỉ hiển thị ứng dụng của bạn trong chế độ
+ toàn màn hình.
+</p>
+
+<h2 id="overview">Tổng quan</h2>
+
+<p>
+ Android N cho phép một vài ứng dụng chia sẻ màn hình ngay lập tức. Ví
+ dụ, người dùng có thể chia đôi màn hình ra, xem một trang web ở bên trái màn hình
+ trong khi đang tạo email ở bên phải màn hình. Trải nghiệm này của người dùng phụ thuộc vào
+ thiết bị:
+</p>
+
+<ul>
+ <li>Thiết bị cầm tay đang chạy Android N có chế độ
+ chia màn hình. Trong chế độ này, hệ thống sẽ lấp đầy màn hình bằng hai ứng dụng
+ song song nhau hoặc trên dưới. Người dùng có thể kéo đường chia
+ phân tách hai ứng dụng để hiển thị một ứng dụng rộng hơn và ứng dụng còn lại nhỏ đi.
+ </li>
+
+ <li>Trên Trình phát Nexus đang chạy Android N, các ứng dụng có thể tự đặt chúng
+ vào trong <a href="picture-in-picture.html">chế độ ảnh trong ảnh</a>, cho phép
+ các ứng dụng này tiếp tục hiển thị nội dung khi người dùng duyệt web hoặc tương tác với
+ ứng dụng khác.
+ </li>
+
+ <li>Các nhà sản xuất thiết bị có kích cỡ lớn hơn có thể chọn kích hoạt chế độ
+ hình dạng tự do, trong đó người dùng có thể tự do thay đổi kích thước mỗi hoạt động. Nếu
+ nhà sản xuất đã kích hoạt tính năng này, ngoài
+ chế độ chia màn hình, thiết bị sẽ còn có chế độ hình dạng tự do.
+ </li>
+</ul>
+
+<img src="{@docRoot}images/android-7.0/mw-splitscreen.png" alt="" width="650" srcset="{@docRoot}images/android-7.0/mw-splitscreen.png 1x,
+ {@docRoot}images/android-7.0/mw-splitscreen_2x.png 2x," id="img-split-screen" />
+<p class="img-caption">
+ <strong>Hình 1.</strong> Hai ứng dụng chạy trong chế độ chia màn hình.
+</p>
+
+<p>
+ Người dùng có thể chuyển vào trong chế độ đa cửa sổ bằng các cách sau:
+</p>
+
+<ul>
+ <li>Nếu người dùng mở màn hình <a href="{@docRoot}guide/components/recents.html">Overview
+ </a> và thực hiện nhấn giữ
+ tiêu đề của hoạt động, họ có thể kéo hoạt động đó đến phần được tô sáng của
+ màn hình để đặt hoạt động đó vào trong chế độ đa cửa sổ.
+ </li>
+
+ <li>Nếu người dùng thực hiện nhấn giữ nút Overview, thiết bị sẽ đặt
+ hoạt động hiện tại vào trong chế độ đa cửa sổ, và mở màn hình Overview để
+ cho phép người dùng chọn một hoạt động khác để chia sẻ màn hình.
+ </li>
+</ul>
+
+<p>
+ Người dùng có thể <a href="{@docRoot}guide/topics/ui/drag-drop.html">kéo và
+ thả</a> từ một hoạt động sang một hoạt động khác trong khi các hoạt động này vẫn đang chia sẻ
+ cùng một màn hình. (Trước đó, người dùng chỉ có thể kéo và thả dữ liệu trong một hoạt động
+ đơn lẻ.)
+</p>
+
+<h2 id="lifecycle">Vòng đời đa cửa sổ</h2>
+
+<p>
+ Chế độ đa cửa sổ không thay đổi <a href="{@docRoot}training/basics/activity-lifecycle/index.html">vòng đời
+ của hoạt động</a>.
+</p>
+
+<p>
+ Trong chế độ đa cửa sổ, chỉ hoạt động mà người dùng đã tương tác gần đây nhất
+ mới hoạt động trong khoảng thời gian xác định. Hoạt động này được cân nhắc <em>ở trên cùng</em>.
+ Tất cả các hoạt động khác sẽ ở trong tình trạng tạm dừng, ngay cả khi chúng vẫn hiển thị.
+ Tuy nhiên, hệ thống sẽ cấp mức ưu tiên cao hơn cho hoạt động bị tạm dừng nhưng vẫn hiển thị này
+ so với các hoạt động không hiển thị. Nếu người dùng tương tác với một trong những
+ hoạt động bị tạm dừng, hoạt động đó sẽ được tiếp tục, và hoạt động trên cùng trước đó
+ sẽ bị tạm dừng.
+</p>
+
+<p class="note">
+ <strong>Lưu ý:</strong> Trong chế độ đa cửa sổ, một ứng dụng có thể trong trạng thái
+ tạm dừng và vẫn hiển thị với người dùng. Ứng dụng có thể cần tiếp tục
+ các hoạt động của nó thậm chí trong khi đamg bị tạm dừng. Ví dụ, một ứng dụng phát video đang ở trong
+ chế độ tạm dừng nhưng vẫn hiển thị thì sẽ tiếp tục hiển thị video của nó. Vì lý do
+ này, chúng tôi đề nghị các hoạt động phát video <em>không</em> tạm dừng
+ video trong trình xử lý{@link android.app.Activity#onPause onPause()}.
+ Thay vào đó, các ứng dụng nên tạm dừng video trong {@link android.app.Activity#onStop
+ onStop()}, và tiếp tục phát lại trong {@link android.app.Activity#onStart
+ onStart()}.
+</p>
+
+<p>
+ Khi người dùng đặt một ứng dụng vào trong chế độ đa cửa sổ, hệ thống sẽ thông báo về
+ hoạt động thay đổi cấu hình đó, như được quy định trong <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Xử lý Thay đổi
+ Thời gian chạy</a>. Về cơ bản, thay đổi này có ngụ ý về vòng đời hoạt động tương tự
+ vì khi hệ thống thông báo cho ứng dụng rằng thiết bị đã chuyển
+ từ chế độ hướng dọc sang chế độ ngang, ngoại trừ trường hợp các kích thước của thiết bị
+ đã được thay đổi thay vì chỉ bị hoán đổi. Như đã thảo luận trong phần <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Xử lý Thay đổi
+ Thời gian chạy</a>, hoạt động của bạn có thể tự xử lý thay đổi cấu hình này, hoặc nó
+ có thể cho phép hệ thống hủy hoạt động này và tạo lại nó với
+ các kích thước mới.
+</p>
+
+<p>
+ Nếu người dùng thay đổi kích thước của một cửa sổ và làm nó rộng hơn ở bất kỳ kích thước nào,
+ hệ thống sẽ thay đổi kích thước của hoạt động để khớp với hành động của người dùng và phát hành <a href="{@docRoot}guide/topics/resources/runtime-changes.html">các thay đổi thời gian chạy</a>
+ nếu cần. Nếu ứng dụng bị trễ lại trong khi vẽ các vùng mới được hiển thị,
+ hệ thống sẽ tạm thời lấp đầy các vùng đó bằng một màu được quy định bởi thuộc tính {@link
+ android.R.attr#windowBackground windowBackground} hoặc bằng thuộc tính kiểu
+ <code>windowBackgroundFallback</code> mặc định.
+</p>
+
+<h2 id="configuring">Cấu hình Ứng dụng của bạn cho Chế độ Đa cửa sổ</h2>
+
+<p>
+ Nếu ứng dụng của bạn nhắm đến Android N, bạn có thể cấu hình cách thức và
+ liệu các hoạt động của ứng dụng có hỗ trợ hiển thị đa cửa sổ không. Bạn có thể đặt
+ các thuộc tính trong bản kê khai của bạn để kiểm soát cả kích cỡ và bố trí.
+ Cài đặt thuộc tính của hoạt động gốc sẽ áp dụng cho tất cả các hoạt động
+ nằm trong ngăn xếp hoạt động của nó.
+</p>
+
+<p class="note">
+ <strong>Lưu ý:</strong> Nếu bạn dựng một ứng dụng đa hướng bằng phiên bản
+ SDK thấp hơn Android N, và người dùng sử dụng ứng dụng đó trong
+ chế độ đa cửa sổ, hệ thống sẽ bắt buộc thay đổi kích thước của ứng dụng đó. Hệ thống sẽ hiển thị một
+ hộp hội thoại cảnh báo người dùng rằng ứng dụng này có thể có hành vi không như kỳ vọng. Hệ thống
+ <em>không</em> thay đổi kích cỡ của ứng dụng có hướng cố định; nếu
+ người dùng cố mở một ứng dụng có hướng cố định dưới chế độ đa cửa sổ,
+ ứng dụng này sẽ chiếm toàn bộ màn hình.
+</p>
+
+<h4 id="resizeableActivity">android:resizeableActivity</h4>
+<p>
+ Đặt thuộc tính này trong <code><activity></code> của bản kê khai của bạn hoặc node
+ <code><application></code> để kích hoạt hoặc vô hiệu hóa hiển thị
+ đa cửa sổ:
+</p>
+
+<pre>
+android:resizeableActivity=["true" | "false"]
+</pre>
+
+<p>
+ Nếu thuộc tính này được đặt thành true, hoạt động có thể được khởi chạy trong
+ chế độ chia màn hình và hình dạng tự do. Nếu thuộc tính này được đặt thành false,
+ hoạt động sẽ không hỗ trợ chế độ đa cửa sổ. Nếu giá trị này là false, và
+ người dùng cố khởi chạy hoạt động trong chế độ đa cửa sổ, hoạt động đó sẽ
+ chiếm toàn màn hình.
+</p>
+
+<p>
+ Nếu ứng dụng của bạn nhắm đến Android N, nhưng bạn chưa quy định giá trị
+ cho thuộc tính này, giá trị của thuộc tính sẽ mặc định đặt là true.
+</p>
+
+<h4 id="supportsPictureInPicture">android:supportsPictureInPicture</h4>
+
+<p>
+ Đặt thuộc tính này trong node <code><activity></code> của bản kê khai của bạn để
+ cho biết liệu hoạt động này có hỗ trợ hiển thị ảnh trong ảnh hay không. Thuộc tính
+ này được bỏ qua nếu <code>android:resizeableActivity</code> là false.
+</p>
+
+<pre>
+android:supportsPictureInPicture=["true" | "false"]
+</pre>
+
+<h3 id="layout">Thuộc tính bố trí</h3>
+
+<p>
+ Với Android N, phần tử bản kê khai <code><layout></code>
+ có hỗ trợ một số thuộc tính sẽ ảnh hưởng đến cách hoạt động có hành vi như thế nào trong
+ chế độ đa cửa sổ:
+</p>
+
+<dl>
+ <dt>
+ <code>android:defaultWidth</code>
+ </dt>
+
+ <dd>
+ Chiều rộng mặc định của hoạt động khi được khởi chạy trong chế độ hình dạng tự do.
+ </dd>
+
+ <dt>
+ <code>android:defaultHeight</code>
+ </dt>
+
+ <dd>
+ Chiều cao mặc định của hoạt động khi được khởi chạy trong chế độ hình dạng tự do.
+ </dd>
+
+ <dt>
+ <code>android:gravity</code>
+ </dt>
+
+ <dd>
+ Vị trí ban đầu của hoạt động khi được khởi chạy trong chế độ hình dạng tự do. Xem tham chiếu
+ {@link android.view.Gravity} về các giá trị phù hợp.
+ </dd>
+
+ <dt>
+ <code>android:minimalSize</code>
+ </dt>
+
+ <dd>
+ Chiều cao và chiều rộng tối thiểu cho hoạt động trong cả chế độ chia màn hình
+ và chế độ hình dạng tự do. Nếu người dùng di chuyển thanh phân chia trong chế độ chia màn hình
+ để làm cho hoạt động nhỏ hơn mức tối thiểu quy định, hệ thống sẽ cắt xén
+ hoạt động đó thành kích cỡ mà người dùng yêu cầu.
+ </dd>
+</dl>
+
+<p>
+ Ví dụ, đoạn mã sau đây sẽ cho biết cách quy định kích thước và vị trí mặc định
+ của một hoạt động và kích thước tối thiểu của nó, khi hoạt động được hiển thị trong
+ chế độ hình dạng tự do:
+</p>
+
+<pre>
+<activity android:name=".MyActivity">
+ <layout android:defaultHeight="500dp"
+ android:defaultWidth="600dp"
+ android:gravity="top|end"
+ android:minimalSize="450dp" />
+</activity>
+</pre>
+
+<h2 id="running">Chạy Ứng dụng của bạn trong Chế độ Đa cửa sổ</h2>
+
+<p>
+ Android N có tính năng mới để hỗ trợ các ứng dụng có thể chạy
+ trong chế độ đa cửa sổ.
+</p>
+
+<h3 id="disabled-features">Các tính năng bị vô hiệu hóa trong Chế độ Đa cửa sổ</h3>
+
+<p>
+ Một số tính năng bị vô hiệu hóa hoặc bỏ qua khi một thiết bị đang ở chế độ
+ đa cửa sổ bởi các tính năng này không có ý nghĩa đối với một hoạt động có thể đang chia sẻ
+ màn hình thiết bị với các hoạt động hoặc ứng dụng khác. Các tính năng đó bao gồm:
+
+<ul>
+ <li>Ví dụ, một vài tùy chọn tùy chỉnh <a href="{@docRoot}training/system-ui/index.html">System UI</a>
+ sẽ bị vô hiệu hóa, ứng dụng không thể ẩn thanh trạng thái
+ nếu chúng đang chạy trong chế độ toàn màn hình.
+ </li>
+
+ <li>Hệ thống sẽ bỏ qua các thay đổi đối với thuộc tính <code><a href=
+ "{@docRoot}guide/topics/manifest/activity-element.html#screen"
+ >android:screenOrientation</a></code>.
+ </li>
+</ul>
+
+<h3 id="change-notification">Thông báo và truy vấn thay đổi đa cửa sổ</h3>
+
+<p>
+ Các phương thức mới sau đây đã được thêm vào lớp {@link android.app.Activity}
+ để hỗ trợ hiển thị đa cửa sổ. Để biết chi tiết về mỗi phương thức, xem
+ <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Tham chiếu N Preview SDK</a>.
+</p>
+
+<dl>
+ <dt>
+ <code>Activity.inMultiWindow()</code>
+ </dt>
+
+ <dd>
+ Lệnh gọi để tìm hiểu xem hoạt động có đang ở chế độ đa cửa sổ hay không.
+ </dd>
+
+ <dt>
+ <code>Activity.inPictureInPicture()</code>
+ </dt>
+
+ <dd>
+ Lệnh gọi để tìm hiểu xem hoạt động có đang ở chế độ ảnh trong ảnh hay không.
+
+ <p class="note">
+ <strong>Lưu ý:</strong> Chế độ Ảnh trong ảnh là trường hợp đặc biệt
+ của chế độ đa cửa sổ. Nếu <code>myActivity.inPictureInPicture()</code>
+ trả về là true, thì <code>myActivity.inMultiWindow()</code> cũng trả về là
+ true.
+ </p>
+ </dd>
+
+ <dt>
+ <code>Activity.onMultiWindowChanged()</code>
+ </dt>
+
+ <dd>
+ Hệ thống sẽ gọi phương thức này bất cứ khi nào hoạt động đi vào trong hay ra ngoài
+ chế độ đa cửa sổ. Hệ thống sẽ chuyển cho phương thức giá trị true nếu
+ hoạt động đang đi vào chế độ đa cửa sổ, và false nếu hoạt động
+ đang rời chế độ đa cửa sổ.
+ </dd>
+
+ <dt>
+ <code>Activity.onPictureInPictureChanged()</code>
+ </dt>
+
+ <dd>
+ Hệ thống sẽ gọi phương thức này bất cứ khi nào hoạt động đi vào trong hay ra ngoài
+ chế độ ảnh trong ảnh. Hệ thống sẽ chuyển cho phương thức một giá trị true nếu
+ hoạt động đang đi vào chế độ ảnh trong ảnh, và false nếu hoạt động
+ đang rời chế độ ảnh trong ảnh.
+ </dd>
+</dl>
+
+<p>
+ Cũng có các phiên bản {@link android.app.Fragment} của từng phương thức
+ này, ví dụ như <code>Fragment.inMultiWindow()</code>.
+</p>
+
+<h3 id="entering-pip">Vào chế độ ảnh trong ảnh</h3>
+
+<p>
+ Để đặt một hoạt động vào trong chế độ ảnh trong ảnh, hãy gọi phương thức mới
+ <code>Activity.enterPictureInPicture()</code>. Phương thức này sẽ không có ảnh hưởng nếu
+ thiết bị không hỗ trợ chế độ ảnh trong ảnh. Để biết thêm thông tin,
+ hãy xem tài liệu <a href="picture-in-picture.html">Ảnh trong ảnh</a>.
+</p>
+
+<h3 id="launch">Khởi chạy Hoạt động Mới trong Chế độ Đa cửa sổ</h3>
+
+<p>
+ Khi bạn khởi chạy một hoạt động mới, bạn có thể gợi ý cho hệ thống rằng hoạt động
+ mới sẽ được hiển thị liền kề hoạt động hiện tại, nếu có thể. Để thực hiện điều
+ này, hãy dùng cờ
+ <code>Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT</code>. Việc chuyển
+ cờ này yêu cầu hành vi sau:
+</p>
+
+<ul>
+ <li>Nếu thiết bị đang ở chế độ chia màn hình, hệ thống sẽ cố tạo ra
+ hoạt động mới bên cạnh hoạt động đã khởi chạy nó, vì vậy hai hoạt động này
+ sẽ chia sẻ cùng một màn hình. Hệ thống không được đảm bảo có thể làm được điều này, nhưng nó
+ làm cho các hoạt động ở liền kề nhau nếu có thể.
+ </li>
+
+ <li>Nếu thiết bị không ở chế độ chia màn hình, cờ này sẽ không có tác dụng.
+ </li>
+</ul>
+
+<p>
+ Nếu thiết bị đang ở chế độ hình dạng tự do và bạn đang khởi chạy một hoạt động mới, bạn có thể
+ quy định kích thước của hoạt động mới và vị trí màn hình bằng cách gọi
+ <code>ActivityOptions.setLaunchBounds()</code>. Phương thức này sẽ không có ảnh hưởng nếu
+ thiết bị không ở chế độ đa cửa sổ.
+</p>
+
+<p class="note">
+ <strong>Lưu ý:</strong> Nếu bạn khởi chạy một hoạt động trong một ngăn xếp tác vụ, hoạt động
+ này sẽ thay thế hoạt động trên màn hình, kế thừa tất cả các thuộc tính đa cửa sổ
+ của nó. Nếu bạn muốn khởi chạy hoạt động mới dưới dạng một cửa sổ
+ riêng trong chế độ đa cửa sổ, bạn phải khởi chạy nó trong một ngăn xếp tác vụ mới.
+</p>
+
+<h3 id="dnd">Hỗ trợ kéo và thả</h3>
+
+<p>
+ Người dùng có thể <a href="{@docRoot}guide/topics/ui/drag-drop.html">kéo và
+ thả</a> dữ liệu từ một hoạt động này sang một hoạt động khác trong khi các hoạt động này vẫn đang
+ chia sẻ cùng một màn hình. (Trước đó, người dùng chỉ có thể kéo và thả dữ liệu trong một
+ hoạt động đơn lẻ.) Vì lý do này, bạn có thể muốn thêm tính năng kéo và thả
+ vào ứng dụng của bạn nếu ứng dụng của bạn hiện không hỗ trợ tính năng này.
+</p>
+
+<p>
+ N Preview SDK mở rộng gói <a href="{@docRoot}reference/android/view/package-summary.html"><code>android.view</code></a>
+ để hỗ trợ kéo và thả giữa các ứng dụng. Để biết chi tiết về các lớp và phương thức
+ sau, hãy xem <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Tham chiếu N
+ Preview SDK</a>.
+</p>
+
+<dl>
+ <dt>
+ <code>android.view.DropPermissions</code>
+ </dt>
+
+ <dd>
+ Đối tượng mã thông báo chịu trách nhiệm về việc quy định các quyền cấp cho ứng dụng
+ nhận được thao tác thả.
+ </dd>
+
+ <dt>
+ <code>View.startDragAndDrop()</code>
+ </dt>
+
+ <dd>
+ Bí danh mới cho {@link android.view.View#startDrag View.startDrag()}. Để
+ kích hoạt kéo và thả giữa các hoạt động, hãy chuyển cờ mới
+ <code>View.DRAG_FLAG_GLOBAL</code>. Nếu bạn cần cấp quyền URI cho
+ hoạt động của đối tượng nhận, hãy chuyển các cờ mới
+ <code>View.DRAG_FLAG_GLOBAL_URI_READ</code> hoặc
+ <code>View.DRAG_FLAG_GLOBAL_URI_WRITE</code>, nếu phù hợp.
+ </dd>
+
+ <dt>
+ <code>View.cancelDragAndDrop()</code>
+ </dt>
+
+ <dd>
+ Hủy thao tác kéo hiện đang diễn ra. Chỉ có thể được gọi bằng
+ ứng dụng đã khởi nguồn thao tác kéo đó.
+ </dd>
+
+ <dt>
+ <code>View.updateDragShadow()</code>
+ </dt>
+
+ <dd>
+ Thay thế bóng kéo cho thao tác kéo hiện đang diễn ra. Chỉ có thể
+ được gọi bằng ứng dụng đã khởi nguồn thao tác kéo đó.
+ </dd>
+
+ <dt>
+ <code>Activity.requestDropPermissions()</code>
+ </dt>
+
+ <dd>
+ Yêu cầu các quyền cho URI nội dung đã chuyển với {@link
+ android.content.ClipData} có chứa trong {@link android.view.DragEvent}.
+ </dd>
+</dl>
+
+<h2 id="testing">Kiểm thử Hỗ trợ Đa cửa sổ của Ứng dụng của bạn</h2>
+
+<p>
+ Dù cho bạn có cập nhật ứng dụng của mình lên Android N hay không, bạn cũng nên
+ xác minh cách thiết bị có hành vi như thế nào trong chế độ đa cửa sổ trong trường hợp người dùng cố khởi chạy nó
+ ở chế độ đa cửa sổ trên thiết bị chạy Android N.
+</p>
+
+<h3 id="configuring">Cấu hình Thiết bị Kiểm thử</h3>
+
+<p>
+ Nếu bạn cài đặt Android N trên thiết bị, chế độ chia màn hình
+ sẽ được tự động hỗ trợ.
+</p>
+
+<h3 id="test-non-n">Nếu ứng dụng của bạn không được dựng bằng N Preview SDK</h3>
+
+<p>
+ Nếu bạn dựng ứng dụng của mình bằng N Preview SDK, và người dùng cố sử dụng ứng dụng này
+ trong chế độ đa cửa sổ, hệ thống sẽ bắt buộc thay đổi kích thước của ứng dụng đó trừ khi ứng dụng này
+ khai báo hướng cố định.
+</p>
+
+<p>
+ Nếu ứng dụng không khai báo hướng cố định, bạn nên khởi chạy ứng dụng của bạn
+ trên thiết bị đang chạy Android N và cố đặt ứng dụng vào trong
+ chế độ chia màn hình. Xác minh rằng trải nghiệm người dùng là
+ chấp nhận được khi ứng dụng bị bắt buộc thay đổi kích cỡ.
+</p>
+
+<p>
+ Nếu ứng dụng khai báo hướng cố định, bạn nên cố đặt ứng dụng vào trong
+ chế độ đa cửa sổ. Xác minh xem khi bạn làm như vậy, ứng dụng vẫn giữ
+ ở chế độ toàn màn hình.
+</p>
+
+<h3 id="test-mw">Nếu bạn hỗ trợ chế độ đa cửa sổ</h3>
+
+<p>
+ Nếu bạn dựng ứng dụng của bạn bằng N Preview SDK và chưa vô hiệu hóa
+ hỗ trợ đa cửa sổ, hãy xác minh hành vi sau dưới chế độ chia màn hình
+ và chế độ hình dạng tự do.
+</p>
+
+<ul>
+ <li>Khởi chạy ứng dụng trong chế độ toàn màn hình, rồi chuyển sang chế độ đa cửa sổ bằng cách
+ nhấn giữ nút Overview. Xác minh rằng ứng dụng đã chuyển đổi đúng cách.
+ </li>
+
+ <li>Khởi chạy ứng dụng trực tiếp trong chế độ đa cửa sổ, và xác thực rằng ứng dụng này
+ khởi chạy đúng cách. Bạn có thể khởi chạy ứng dụng trong chế độ đa cửa sổ bằng cách nhấn vào nút
+ Overview, rồi nhấn giữ vào thanh tiều đề của ứng dụng của bạn và kéo nó
+ đến một trong những vùng được tô sáng trên màn hình.
+ </li>
+
+ <li>Thay đổi kích thước ứng dụng của bạn trong chế độ chia màn hình bằng cách kéo đường phân chia.
+ Xác minh rằng ứng dụng thay đổi kích thước mà không bị lỗi, và các phần tử UI cần thiết
+ vẫn hiển thị.
+ </li>
+
+ <li>Nếu bạn đã quy định các kích cỡ tối thiểu cho ứng dụng của bạn, hãy cố thay đổi kích thước của ứng dụng
+ sao cho nhỏ hơn các kích thước đã quy định đó. Xác minh rằng bạn không thể thay đổi kích cỡ của ứng dụng để
+ nhỏ hơn kích cỡ tối thiểu đã quy định.
+ </li>
+
+ <li>Thông qua tất cả các bài kiểm thử, hãy xác minh rằng hiệu năng của ứng dụng của bạn là có thể chấp nhận được. Ví
+ dụ, xác minh rằng sẽ không bị trễ quá lâu để cập nhật UI sau khi
+ ứng dụng bị thay đổi kích thước.
+ </li>
+</ul>
+
+<h4 id="test-checklist">Danh sách kiểm thử</h4>
+
+<p>
+ Để xác minh hiệu năng ứng dụng của bạn trong chế độ đa cửa sổ, hãy thử các thao tác
+ sau. Bạn nên thử các thao tác này trong cả chế độ chia màn hình và
+ chế độ đa cửa sổ, trừ khi có lưu ý khác.
+</p>
+
+<ul>
+ <li>Vào và rời chế độ đa cửa sổ.
+ </li>
+
+ <li>Hãy chuyển từ ứng dụng của bạn sang ứng dụng khác, và xác minh rằng ứng dụng có hành vi
+ đúng cách trong khi nó hiển thị nhưng không hoạt động. Ví dụ nếu ứng dụng của bạn đang
+ phát video, hãy xác minh rằng video tiếp tục phát trong khi người dùng đang
+ tương tác với một ứng dụng khác.
+ </li>
+
+ <li>Trong chế độ chia màn hình, hãy thử di chuyển thanh phân chia để làm cho ứng dụng của bạn
+ rộng hơn và nhỏ hơn. Thử các thao tác này trong cả cấu hình song song và
+ trên dưới. Xác minh rằng ứng dụng không bị treo,
+ các chức năng thiết yếu vẫn hiển thị, và thao tác thay đổi kích cỡ không quá
+ lâu.
+ </li>
+
+ <li>Thực hiện một vài thao tác thay đổi kích cỡ nối tiếp nhau thật nhanh. Xác minh rằng ứng dụng
+ của bạn không bị lỗi hoặc bị rò rỉ bộ nhớ. Để biết thông tin về kiểm tra việc sử dụng bộ nhớ của
+ ứng dụng, xem <a href="{@docRoot}tools/debugging/debugging-memory.html">
+ Kiểm tra Sử dụng RAM của bạn</a>.
+ </li>
+
+ <li>Sử dụng ứng dụng của bạn như thông thường trong một số cấu hình cửa sổ khác nhau, và
+ xác minh rằng ứng dụng có hành vi bình thường. Xác minh rằng có thể đọc được các chữ và
+ các phần tử UI không quá nhỏ để tương tác với chúng.
+ </li>
+</ul>
+
+<h3 id="test-disabled-mw">Nếu bạn đã vô hiệu hóa hỗ trợ đa cửa sổ</h3>
+
+<p>
+ Nếu bạn đã vô hiệu hóa hỗ trợ đa cửa sổ bằng cách đặt
+ <code>android:resizableActivity="false"</code>, bạn nên khởi chạy ứng dụng của mình trên
+ thiết bị chạy Android N và cố đặt ứng dụng này vào trong
+ cả chế độ hình dạng tự do và chế độ chia màn hình. Xác minh xem khi bạn làm như vậy, ứng dụng vẫn giữ
+ ở chế độ toàn màn hình.
+</p>
diff --git a/docs/html-intl/intl/vi/preview/api-overview.jd b/docs/html-intl/intl/vi/preview/api-overview.jd
deleted file mode 100644
index 5abc2f8..0000000
--- a/docs/html-intl/intl/vi/preview/api-overview.jd
+++ /dev/null
@@ -1,676 +0,0 @@
-page.title=Android N cho Nhà phát triển
-meta.tags="preview", "androidn"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-apis_2x.png
-@jd:body
-
-
-
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>Các tính năng chính cho nhà phát triển</h2>
- <ol>
- <ul style="list-style-type:none;">
- <li><a href="#multi-window_support">Hỗ trợ đa cửa sổ</a></li>
- <li><a href="#notification_enhancements">Thông báo</a></li>
- <li><a href="#jit_aot">Biên dịch JIT/AOT</a></li>
- <li><a href="#quick_path_to_app_install">Cài đặt ứng dụng nhanh chóng</a></li>
- <li><a href="#doze_on_the_go">Chế độ Ngủ sâu khi di chuyển</a></li>
- <li><a href="#background_optimizations">Tối ưu hóa chạy ngầm</a></li>
- <li><a href="#data_saver">Tiết kiệm dữ liệu</a></li>
- <li><a href="#tile_api">API cho ô Cài đặt nhanh</a></li>
- <li><a href="#number-blocking">Chặn số</a></li>
- <li><a href="#call_screening">Sàng lọc cuộc gọi</a></li>
- <li><a href="#multi-locale_languages">Bản địa và ngôn ngữ</a></li>
- <li><a href="#icu4">API ICU4J trong Android</a></li>
- <li><a href="#gles_32">API OpenGL ES 3.2</a></li>
- <li><a href="#android_tv_recording">Ghi lại trên Android TV</a></li>
- <li><a href="#android_for_work">Android cho Công việc</a></li>
- <li><a href="#accessibility_enhancements">Trợ năng</a></li>
- <li><a href="#direct_boot">Khởi động Trực tiếp</a></li>
- <li><a href="#key_attestation">Chứng thực khóa</a></li>
- <li><a href="#network_security_config">Cấu hình Bảo mật mạng</a></li>
- <li><a href="#default_trusted_ca">CA an toàn mặc định</a></li>
- <li><a href="apk_signature_v2">Lược đồ chữ ký số v2 cho tệp APK</a></li>
- <li><a href="#scoped_directory_access">Truy cập thư mục theo phạm vi</a></li>
- </ol>
-</div>
-</div>
-
-
-
-<p>Android N vẫn đang trong quá trình phát triển nhưng bây giờ bạn có thể dùng thử
-dưới dạng N Developer Preview. Các phần dưới đây sẽ nêu bật một số
-tính năng mới cho nhà phát triển. </p>
-
-<p>
- Bạn cần xem <a href="{@docRoot}preview/behavior-changes.html">Các thay đổi Hành vi</a> để biết được
- những phần thay đổi của nền tảng có thể ảnh hưởng đến ứng dụng của bạn, hãy xem
- các hướng dẫn cho nhà phát triển để biết thêm về những tính năng chính và tải xuống tài liệu <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Tham khảo API</a> để biết chi tiết về
- các API mới.
-</p>
-
-<h2 id="multi-window_support">Hỗ trợ đa cửa sổ</h2>
-
-
-<p>Trong Android N, chúng tôi sẽ đưa vào nền tảng một tính năng đa nhiệm mới
- rất được mong đợi — hỗ trợ đa cửa sổ. </p>
-
- <p>Giờ đây người dùng có thể nhanh chóng mở đồng thời hai ứng dụng trên màn hình. </p>
- <ul>
- <li>Trên điện thoại và máy tính bảng
-chạy Android N, người dùng có thể chạy hai ứng dụng song song hai bên hoặc
- trên dưới trong chế độ chia đôi màn hình. Người dùng có thể thay đổi kích thước của ứng dụng bằng cách kéo
-thanh phân chia ở giữa. </li>
-
-<li>Trên thiết bị Android TV, các ứng dụng có thể tự đặt vào <a href="{@docRoot}preview/features/picture-in-picture.html">chế độ
-hình-trong-hình</a>, cho phép ứng dụng tiếp tục hiển thị nội dung khi người dùng duyệt web hoặc
-tương tác với ứng dụng khác. Hãy xem bên dưới để biết thêm thông tin. </li>
- </ul>
-
-<div class="col-4of10">
-<img src="{@docRoot}preview/images/mw-portrait.png" alt="" style="height:460px;padding-left:1em;" id="img-split-screen" />
-<p class="img-caption">
- <strong>Hình 1.</strong> Các ứng dụng chạy trong chế độ chia màn hình.
-</p>
- </div>
-
-<p>Đặc biệt là trên máy tính bảng và các thiết bị màn hình lớn khác, việc hỗ trợ đa cửa sổ
-cho phép bạn mang lại những cách thức mới thu hút người dùng. Thậm chí bạn còn có thể cho phép kéo thả trong
-ứng dụng để người dùng kéo nội dung một cách thuận tiện vào hoặc ra ngoài ứng dụng của bạn — đây là một cách
-nâng cao trải nghiệm của người dùng rất hiệu quả. </p>
-
-<p>Thêm tính năng hỗ trợ đa màn hình vào ứng dụng của bạn và cấu hình cách thức
-xử lý hiển thị đa cửa sổ là điều rất đơn giản. Ví dụ, bạn có thể chỉ định kích thước
-tối thiểu cho phép của hoạt động, ngăn người dùng thay đổi kích thước của hoạt động nhỏ hơn
-kích thước đó. Bạn cũng có thể vô hiệu hóa hiển thị đa cửa sổ cho ứng dụng của mình, giúp
- đảm bảo hệ thống sẽ chỉ hiển thị ứng dụng của bạn ở chế độ toàn màn hình.</p>
-
-<p>
- Để biết thêm thông tin, hãy xem tài liệu cho nhà phát triển <a href="{@docRoot}preview/features/multi-window.html">Hỗ trợ đa cửa sổ</a>
-.
-</p>
-
-<h2 id="notification_enhancements">Cải tiến thông báo</h2>
-
-<p>Chúng tôi đã thiết kế lại thông báo trong Android N để chúng được sử dụng dễ dàng và nhanh
-hơn. Một số các thay đổi bao gồm:</p>
-
-<ul>
- <li>
- <strong>Cập nhật Mẫu</strong>: Chúng tôi đã cập nhật các mẫu thông báo để
- tạo điểm nhấn mới cho ảnh gây ấn tượng và ảnh đại diện. Nhà phát triển sẽ có thể
- tận dụng các mẫu mới nhưng chỉ cần thực hiện một số chỉnh sửa nhỏ trong mã nguồn của họ.
- </li>
-
- <li>
- <strong>Thông báo gộp</strong>: Hệ thống có thể nhóm các tin nhắn
- lại với nhau, ví dụ như theo chủ đề tin nhắn và hiển thị thành nhóm. Người dùng có thể
- thực hiện các thao tác như Hủy hoặc Lưu trữ chúng ngay tại chỗ. Nếu bạn từng
- triển khai các thông báo cho Android Wear thì bạn đã làm quen với
- mô hình này.
- </li>
-
- <li>
- <strong>Trả lời trực tiếp</strong>: Đối với những ứng dụng giao tiếp theo thời gian thực,
- hệ thống Android sẽ hỗ trợ trả lời ngay tại chỗ để người dùng có thể nhanh chóng phản hồi lại
- một tin nhắn SMS hoặc tin nhắn văn bản trực tiếp bên trong giao diện thông báo đó.
- </li>
-
- <li>
- <strong>Dạng xem tùy chỉnh</strong>: Hai API mới cho phép bạn sử dụng các trang trí
- hệ thống như tiêu đề và hành động của thông báo khi sử dụng các dạng xem
- tùy chỉnh trong thông báo.
- </li>
-</ul>
-
-<div class="col-4of12">
- <img src="{@docRoot}preview/images/notifications-1.png" alt="" style="padding:.5em;max-width:226px">
-</div>
-
-<div class="col-4of12">
- <img src="{@docRoot}preview/images/notifications-3.png" alt="" style="padding:.5em;max-width:226px">
-</div>
-
-<div class="col-4of12">
- <img src="{@docRoot}preview/images/notifications-2.png" alt="" style="padding:.5em;max-width:226px">
-</div>
-
-
-<p class="img-caption">
- <strong>Hình 2.</strong> Thông báo gộp và trả lời trực tiếp.
-</p>
-
-<p>Hãy xem
- hướng dẫn về <a href="{@docRoot}preview/features/notification-updates.html">Thông báo</a>
- để biết cách triển khai các tính năng mới này.</p>
-
-
-
-<h2 id="jit_aot">Biên dịch JIT/AOT theo cấu hình</h2>
-
-<p>Trong Android N, chúng tôi đã bổ sung một trình biên dịch Just in Time (JIT) có mã được cấu hình cho
-ART, cho phép nó nâng cao hiệu năng của các ứng dụng Android tức thì khi
-chạy. Trình biên dịch JIT bổ trợ thêm cho trình biên dịch Ahead of Time (AOT) của ART
-và giúp cải hiện hiệu năng thời gian chạy, tiết kiệm không gian lưu trữ và tăng tốc độ các bản cập nhật của
-ứng dụng và cập nhật của hệ thống.</p>
-
-<p>Biên dịch theo cấu hình cho phép ART quản lý quá trình biên dịch AOT/JIT của từng ứng dụng
-tùy theo sử dụng thực tế cũng như các điều kiện trên thiết bị. Ví
-dụ, ART sẽ duy trì một cấu hình cho các phương thức hay dùng nhất của mỗi ứng dụng và có thể biên dịch trước
-rồi tạo bộ đệm cho các phương thức đó để có hiệu năng cao nhất. Những phần khác của ứng dụng
-sẽ được giữ nguyên không biên dịch cho đến khi chúng thực sự được sử dụng.</p>
-
-<p>Bên cạnh nâng cao hiệu năng cho các phần chính của ứng dụng, quá trình biên dịch
-theo cấu hình còn giúp giảm tổng lượng RAM được sử dụng của ứng dụng, bao gồm cả các
-tệp nhị phân liên quan. Tính năng này đặc biệt quan trọng trên các thiết bị ít bộ nhớ.</p>
-
-<p>ART sẽ quản lý quá trình biên dịch theo cấu hình bằng cách giảm tối thiểu tác động đến
-pin của thiết bị. Nó sẽ tiến hành quá trình biên dịch trước chỉ khi nào thiết bị nhàn rỗi và
-đang sạc, giúp tiết kiệm thời gian và pin bằng cách thực hiện công việc đó trước.</p>
-
-<h2 id="quick_path_to_app_install">Cài đặt ứng dụng nhanh chóng</h2>
-
-<p>Một trong những lợi ích dễ thấy nhất của trình biên dịch JIT của ART là tốc độ cài đặt
-ứng dụng và cập nhật hệ thống. Ngay cả các ứng dụng lớn cần vài phút để
-tối ưu và cài đặt trong Android 6.0 thì giờ đây có thể cài đặt chỉ trong một vài
-giây. Các cập nhật cho hệ thống cũng sẽ nhanh hơn vì không còn bước tối ưu hóa nữa. </p>
-
-<h2 id="doze_on_the_go">Chế độ Ngủ sâu khi di chuyển...</h2>
-
-<p>Chế độ Ngủ sâu đã được giới thiệu trong Android 6.0. Đây là một chế độ của hệ thống giúp tiết kiệm pin bằng cách trì hoãn
-các hoạt động CPU và mạng của ứng dụng khi thiết bị đang nhàn rỗi, ví dụ như khi thiết bị
-đang nằm trên bàn hoặc trong ngăn kéo. </p>
-
-<p>Giờ đây Chế độ Ngủ sâu trong Android N đã được cải tiến thêm và tiết kiệm pin ngay cả khi đang di chuyển.
-Bất kỳ khi nào màn hình đang tắt trong một khoảng thời gian và thiết bị không được cắm sạc thì
-Chế độ Ngủ sâu sẽ áp dụng tập con của các hạn chế CPU và mạng quen thuộc đối với các ứng dụng.
-Điều này có nghĩa là người dùng có thể tiết kiệm pin ngay cả khi đang mang thiết bị trong túi
-của họ.</p>
-
-
-<img src="/preview/images/doze-diagram-1.png" alt="" id="figure1" />
-<p class="img-caption">
- <strong>Hình 3.</strong> Chế độ Ngủ sâu đang áp dụng
- các hạn chế để cải thiện thời lượng pin ngay cả khi thiết bị không được đặt một chỗ.
-</p>
-
-
-<p>Sau một khoảng thời gian ngắn khi màn hình tắt và thiết bị chỉ chạy bằng nguồn pin, Chế độ Ngủ sâu
-sẽ hạn chế truy cập mạng và trì hoãn các tác vụ, đồng bộ. Trong các khoảng thời gian
-bảo trì ngắn, các ứng dụng sẽ được phép truy cập mạng và mọi tác vụ/đồng bộ
-bị trì hoãn sẽ được thực thi. Bật màn hình hoặc cắm sạc vào thiết bị sẽ đưa
-thiết bị thoát khỏi Chế độ Ngủ sâu.</p>
-
-<p>Khi để thiết bị nằm một chỗ lần nữa với màn hình được tắt và chạy bằng pin trong một
-khoảng thời gian thì Chế độ Ngủ sâu sẽ áp dụng toàn bộ các hạn chế CPU và mạng đối với {@link
-android.os.PowerManager.WakeLock}, báo thức {@link android.app.AlarmManager} và quét
-GPS/Wi-Fi.</p>
-
-<p>Bạn có thể áp dụng các thực hành tốt nhất tương tự để điều chỉnh ứng dụng của mình cho Chế độ Ngủ sâu cho dù
-thiết bị có đang di chuyển hay đứng yên. Do đó, nếu bạn đã cập nhật ứng dụng để xử lý
-Chế độ Ngủ sâu một cách tinh tế thì bạn hoàn toàn yên tâm. Nếu không, hãy tiến hành <a href="{@docRoot}training/monitoring-device-state/doze-standby.html#assessing_your_app">làm cho
- ứng dụng thích ứng với Chế độ Ngủ sâu</a> ngay.</p>
-
-<h2 id="background_optimizations">Dự án Svelte: Tối ưu hóa chạy ngầm</h2>
-
-<p>Dự án Svelte là một nỗ lực liên tục nhằm tối giảm sử dụng RAM của hệ thống và các ứng dụng
-trên khắp hệ sinh thái các thiết bị Android. Trong Android N, dự án
-Svelte tập trung vào việc tối ưu hóa cách thức các ứng dụng chạy ngầm. </p>
-
-<p>Xử lý chạy ngầm là một phần quan trọng của hầu hết các ứng dụng. Khi sử dụng đúng cách, nó
-có thể giúp cho trải nghiệm người dùng của bạn trở nên tuyệt vời — tức thì, nhanh chóng và nhận biết được bối cảnh.
-Khi không sử dụng đúng cách, xử lý chạy ngầm có thể tiêu tốn RAM (và
-pin) một cách không cần thiết cũng như ảnh hưởng đến hiệu năng hệ thống cho các ứng dụng khác. </p>
-
-<p>Kể từ Android 5.0, {@link android.app.job.JobScheduler} đã trở thành
-cách thức được ưu tiên để thực hiện công việc chạy ngầm thích hợp
-cho người dùng. Ứng dụng có thể lên lịch cho các tác vụ trong khi cho phép hệ thống tối ưu hóa dựa trên
-các điều kiện về bộ nhớ, nguồn điện và kết nối. JobScheduler đem lại khả năng kiểm soát và
-sự đơn giản, và chúng tôi muốn mọi ứng dụng đều sử dụng nó. </p>
-
-<p>
- Một giải pháp hiệu quả khác là <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
- <code>GCMNetworkManager</code></a>, thuộc một phần của Dịch vụ Google Play, cho phép
- lên lịch tác vụ tương tự với khả năng tương thích trên các phiên bản Android
- cũ.
-</p>
-
-<p>Chúng tôi đang tiếp tục kế thừa <code>JobScheduler</code> và
-<code>GCMNetworkManager</code> để đáp ứng nhiều hơn
-các trường hợp sử dụng của bạn — ví dụ như trong Android N giờ đây bạn đã có thể lên lịch cho công việc
-chạy ngầm dựa vào những thay đổi trong các Trình cung cấp Nội dung. Đồng thời, chúng tôi đang tiến hành
-loại bỏ một số mẫu cũ có thể làm giảm hiệu năng hệ thống,
-đặc biệt trên các thiết bị ít bộ nhớ.</p>
-
-<p>Trong Android N, chúng tôi sẽ loại bỏ ba truyền phát không biểu thị được sử dụng phổ biến —
-{@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} và {@link
- android.hardware.Camera#ACTION_NEW_VIDEO} — bởi vì các truyền phát này có thể đánh thức
-các tiến trình chạy ngầm của nhiều ứng dụng cùng lúc và sử dụng quá mức bộ nhớ và pin. Nếu
-ứng dụng của bạn đang nhận các truyền phát này thì hãy tận dụng N Developer Preview để
- chuyển sang <code>JobScheduler</code> và các API liên quan khác thay thế. </p>
-
-<p>
- Hãy xem tài liệu <a href="{@docRoot}preview/features/background-optimization.html">Tối ưu hóa
- Chạy ngầm</a> để biết thêm chi tiết.
-</p>
-
-
-<h2 id="data_saver">Tiết kiệm dữ liệu</h2>
-
-<div class="col-5of12" style="margin-right:1.5em;">
-<img src="{@docRoot}preview/images/datasaver.png" style="border:2px solid #ddd">
-
-<p class="img-caption" style="padding-right:2em;">
- <strong>Hình 4.</strong> Tính năng Tiết kiệm dữ liệu trong mục Settings.
-</p>
- </div>
-
-<p>Trong vòng đời của một thiết bị di động thì chi phí gói cước dữ liệu di động về cơ bản
-sẽ cao hơn giá thành của chính thiết bị đó. Đối với nhiều người dùng, dữ liệu di động là một
-tài nguyên đắt đỏ họ muốn sử dụng tiết kiệm. </p>
-
-<p>Android N đã đưa vào chế độ Tiết kiệm dữ liệu, một dịch vụ hệ thống mới giúp giảm
-sử dụng dữ liệu di động, cho dù là chuyển vùng, gần đến kỳ thanh toán cước,
-hoặc trên một gói dữ liệu trả trước khiêm tốn. Tiết kiệm dữ liệu cho người dùng kiểm soát cách thức ứng dụng
-sử dụng dữ liệu di động và cho phép nhà phát triển cung cấp dịch vụ hiệu quả hơn khi Tiết kiệm
-dữ liệu được bật. </p>
-
-<p>Khi người dùng bật Tiết kiệm dữ liệu trong <strong>Settings</strong> và thiết bị đang
-sử dụng một mạng có đo lưu lượng thì hệ thống sẽ chặn việc sử dụng dữ liệu chạy ngầm và truyền tín hiệu cho ứng dụng
-để sử dụng ít dữ liệu hơn ở tiền cảnh bất cứ khi nào có thể — chẳng hạn như bằng cách giới hạn
-bit rate để truyền phát, giảm chất lượng hình ảnh, trì hoãn tạo trước bộ đệm để tối ưu,
-v.v. Người dùng có thể lập danh sách các ứng dụng cụ thể được phép sử dụng
-dữ liệu có tính lưu lượng được chạy ngầm ngay cả khi Tiết kiệm dữ liệu được bật.</p>
-
-<p>Android N mở rộng lớp {@link android.net.ConnectivityManager} để cung cấp cho các ứng dụng một
-cách thức <a href="{@docRoot}preview/features/data-saver.html#status">truy xuất
-các tùy chọn Tiết kiệm dữ liệu của người dùng</a> và <a href="{@docRoot}preview/features/data-saver.html#monitor-changes">theo dõi
-các thay đổi của tùy chọn</a>. Mọi ứng dụng cần kiểm tra xem người dùng đó đã bật Tiết kiệm
-Dữ liệu hay chưa và cố gắng giới hạn sử dụng dữ liệu chạy ở tiền cảnh và chạy ngầm.</p>
-
-
-<h2 id="tile_api">API cho ô Cài đặt nhanh</h2>
-
-
-<div style="float:right;max-width:320px">
-<img src="{@docRoot}preview/images/quicksettings.png" style="padding-left:1.5em;">
-
-<p class="img-caption" style="padding-left:2em;">
- <strong>Hình 5.</strong> Các ô Cài đặt nhanh trong vùng hiển thị thông báo.
-</p>
-
-
- </div><p>Cài đặt nhanh là một cách phổ biến và đơn giản để hiển thị các cài đặt và hành động quan trọng,
-trực tiếp từ khu vực thông báo. Trong Android N, chúng tôi đã mở rộng phạm vi của
-Cài đặt nhanh để khiến nó trở nên hữu ích và thuận tiện hơn nữa. </p>
-
-<p>Chúng tôi đã thêm không gian cho các ô Cài đặt nhanh mà người dùng có thể
-truy cập trên toàn bộ một vùng hiển thị được phân trang bằng cách vuốt sang trái hoặc phải. Chúng tôi cũng
-cho người dùng kiểm soát những ô Cài đặt nhanh nào sẽ xuất hiện và vị trí xuất hiện
-của chúng — người dùng chỉ cần kéo và thả để thêm hoặc di chuyển các ô. </p>
-
-<p>Đối với nhà phát triển, Android N cũng bổ sung một API mới cho phép định nghĩa các ô
- Cài đặt nhanh của riêng bạn giúp người dùng dễ dàng truy cập tới các điều khiển và hành động quan trọng trong ứng dụng của bạn.</p>
-
-<p>
- Các ô Cài đặt nhanh được dành riêng cho các điều khiển hoặc hành động
- khẩn cấp hoặc thường xuyên được sử dụng, không nên dùng làm lối tắt để
- khởi chạy một ứng dụng.
-</p>
-
-<p>
- Một khi đã định nghĩa các ô của mình bạn có thể làm nổi chúng lên trước người dùng để họ có thể thêm
- các ô này vào Cài đặt nhanh bằng cách chỉ cần kéo và thả.
-</p>
-
-<p>
- Để biết thêm thông tin về việc tạo một ô ứng dụng, hãy xem
- <code>android.service.quicksettings.Tile</code> trong tài liệu <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Tham khảo API</a> có thể tải xuống.
-</p>
-
-
-
-<h2 id="number-blocking">Chặn số</h2>
-
-<p>Android N đã hỗ trợ chặn số điện thoại trong nền tảng này và cung cấp một
- API khuôn khổ cho phép các nhà cung cấp dịch vụ duy trì một danh sách số bị chặn.
-Ứng dụng SMS mặc định, ứng dụng gọi điện mặc định và các ứng dụng của nhà cung cấp có thể đọc và
-ghi vào danh sách số bị chặn. Các ứng dụng khác không thể truy cập vào danh sách này.</p>
-
-<p>Thông qua việc đưa chặn số thành một tính năng tiêu chuẩn của nền tảng, Android sẽ cung cấp
-cách thức thống nhất để các ứng dụng hỗ trợ chặn số trên một loạt các
-thiết bị. Những lợi ích mà ứng dụng có thể tận dụng gồm:</p>
-
-<ul>
- <li> Số bị chặn cuộc gọi cũng sẽ bị chặn tin nhắn văn bản
- <li> Số bị chặn có thể được duy trì qua các lần thiết lập lại và qua nhiều thiết bị thông qua tính năng Sao lưu &
-Khôi phục
- <li> Nhiều ứng dụng có thể sử dụng cùng một danh sách số bị chặn
-</ul>
-
-<p>Ngoài ra, việc tích hợp ứng dụng của nhà mạng thông qua Android cũng đồng nghĩa là các nhà mạng có thể
-đọc danh sách số bị chặn trên thiết bị và thực hiện chặn số từ phía nhà cung cấp dịch vụ
-cho người dùng để ngăn các cuộc gọi và tin nhắn văn bản không mong muốn tiếp cận người dùng
-thông qua bất kỳ phương tiện nào, ví dụ như điểm cuối VOIP hoặc điện thoại chuyển cuộc gọi.</p>
-
-<p>
- Để biết thêm thông tin, hãy xem <code>android.provider.BlockedNumberContract</code>
- trong tài liệu <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Tham khảo
- API</a> có thể tải xuống.
-</p>
-
-<h2 id="call_screening">Sàng lọc cuộc gọi</h2>
-
-<p>
- Android N cho phép ứng dụng gọi điện mặc định sàng lọc các cuộc gọi đến. Ứng dụng
- gọi điện thực hiện điều này bằng cách thực thi <code>CallScreeningService</code> mới,
- cho phép ứng dụng gọi điện thực hiện một số hành động dựa trên
- {@link android.telecom.Call.Details Call.Details} của cuộc gọi đến như:
-</p>
-
-<ul>
- <li> Từ chối cuộc gọi đến
- <li> Không cho phép cuộc gọi lưu trong nhật ký cuộc gọi
- <li> Không hiển thị thông báo về cuộc gọi cho người dùng
-</ul>
-
-<p>
- Để biết thêm thông tin, hãy xem <code>android.telecom.CallScreeningService</code>
- trong tài liệu <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Tham khảo
- API</a> có thể tải xuống.
-</p>
-
-
-<h2 id="multi-locale_languages">Hỗ trợ đa bản địa, thêm nhiều ngôn ngữ</h2>
-
-
-<p>Android N cho phép người dùng chọn <strong>đa bản địa</strong> trong Settings,
-để hỗ trợ tốt hơn cho các trường hợp song ngữ. Các ứng dụng có thể sử dụng
-một API mới để truy xuất các bản địa được chọn của người dùng và sau đó mang đến
-trải nghiệm người dùng tinh tế hơn cho người dùng đa bản địa — như hiển thị các kết quả tìm kiếm bằng
-nhiều ngôn ngữ và không yêu cầu dịch các trang web sang ngôn ngữ mà
-người dùng đã biết.</p>
-
-<p>Ngoài hỗ trợ đa bản địa, Android N cũng mở rộng danh sách các ngôn ngữ
-khả dụng đối với người dùng. Nền tảng này cung cấp hơn 25 biến thể cho các ngôn ngữ
-được sử dụng phổ biến như Tiếng Anh, Tây Ban Nha, Pháp và Ả-rập. Nó cũng bổ sung hỗ trợ
-một phần cho hơn 100 ngôn ngữ mới.</p>
-
-<p>Các ứng dụng có thể truy xuất danh sách bộ bản địa theo người dùng bằng cách gọi <code>LocaleList.GetDefault()</code>. Để hỗ trợ số lượng bản địa mở rộng, Android N đang thay đổi cách thức
-phân giải tài nguyên. Hãy đảm bảo bạn kiểm tra và xác minh rằng ứng dụng của mình
-đang hoạt động như mong muốn theo lô-gic phân giải tài nguyên mới này.</p>
-
-<p>Để tìm hiểu về hành vi phân giải tài nguyên mới và các thực hành tốt nhất bạn nên
-thực hiện theo, hãy xem mục <a href="{@docRoot}preview/features/multilingual-support.html">Hỗ trợ đa ngôn ngữ</a>.</p>
-
-<h2 id="icu4">API ICU4J trong Android</h2>
-
-<p>
- Android N đã cung cấp một tập nhỏ các API <a href="http://site.icu-project.org/">ICU4J</a> trong khuôn khổ Android thuộc
- gói <code>android.icu</code>. Việc chuyển nhập sang rất dễ dàng và hầu hết chỉ liên quan đến
- việc đổi từ không gian tên <code>com.java.icu</code> thành
- <code>android.icu</code>. Nếu bạn đang sử dụng gói ICU4J trong ứng dụng
- của mình thì việc chuyển đổi sang các API <code>android.icu</code> được cung cấp trong khuôn khổ
- Android có thể giúp làm giảm đáng kể kích thước của tệp APK.
-</p>
-
-<p>
- Để tìm hiểu thêm về API ICU4J trên Android, hãy xem <a href="{@docRoot}preview/features/icu4j-framework.html">Hỗ trợ ICU4J</a>.
-</p>
-
-
-
-<h2 id="gles_32">API OpenGL™ ES 3.2</h2>
-
-<p>Android N bổ sung các giao diện khuôn khổ và hỗ trợ nền tảng cho OpenGL ES 3.2, bao gồm:</p>
-
-<ul>
- <li> Mọi phần mở rộng trong <a class="external-link" href="https://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">Gói Tiện ích mở rộng Android</a></a> (AEP) ngoại trừ <code>EXT_texture_sRGB_decode</code>
- <li> Bộ đệm khung hình dấu chấm động cho HDR và tạo bóng trì hoãn.
- <li> Các lệnh vẽ BaseVertex cho phép chia gói và truyền phát hiệu quả hơn.
- <li> Kiểm soát truy cập bộ đệm mạnh mẽ để giảm phí tổn quản lý của WebGL.
-</ul>
-
-<p>API khuôn khổ cho OpenGL ES 3.2 trên Android N được cung cấp với lớp
-<code>GLES32</code>. Khi sử dụng OpenGL ES 3.2, hãy đảm bảo khai báo
-yêu cầu trong tệp bản kê khai của bạn bằng thẻ <code><uses-feature></code> và
-thuộc tính <code>android:glEsVersion</code>. </p>
-
-<p>Để biết thông tin về sử dụng OpenGL ES, bao gồm cách kiểm tra phiên bản
- OpenGL ES được hỗ trợ của thiết bị tại thời gian chạy, hãy xem mục <a href="{@docRoot}guide/topics/graphics/opengl.html">Hướng dẫn API OpenGL ES</a>.</p>
-
-
-<h2 id="android_tv_recording">Ghi lại trên Android TV</h2>
-
-<p>Android N bổ sung khả năng ghi và phát lại nội dung từ các dịch vụ
-nguồn vào của Android TV thông qua các API ghi lại. Được xây dựng dựa trên các API
-chuyển dịch thời gian sẵn có, các dịch vụ nguồn vào TV có thể kiểm soát dữ liệu của kênh nào được phép ghi lại, cách thức
-lưu trữ các phiên được ghi lại cũng như quản lý tương tác của người dùng với nội dung ghi lại. </p>
-
-<p>Để biết thêm thông tin, hãy xem <a href="{@docRoot}preview/features/tv-recording-api.html">API ghi lại của Android TV</a>.</p>
-
-
-<h2 id="android_for_work">Android cho Công việc</h2>
-
-<p>Android cho Công việc bổ sung nhiều tính năng mới và các API cho thiết bị chạy Android N.
-Dưới đây là một số điểm nổi bật — để xem danh sách đầy đủ các cập nhật của Android N
-liên quan đến Android cho Công việc, vui lòng xem Các thay đổi của Android cho Công việc.</p>
-
-<h3 id="work_profile_security_challenge">Thử thách bảo mật cấu hình công việc </h3>
-
-<p>
- Người sở hữu cấu hình có thể chỉ định một thử thách bảo mật riêng cho các ứng dụng đang chạy trong
- cấu hình công việc. Thử thách công việc được hiển thị khi người dùng cố gắng mở
- bất kỳ ứng dụng công việc nào. Hoàn tất thành công thử thách bảo mật sẽ mở khóa
- cấu hình công việc và giải mã nó nếu cần. Đối với người sở hữu cấu hình,
- <code>ACTION_SET_NEW_PASSWORD</code> sẽ yêu cầu người dùng đặt một thử thách
- công việc và <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> sẽ yêu cầu
- người dùng đặt khóa thiết bị.
-</p>
-
-<p>
- Người sở hữu cấu hình có thể đặt các chính sách mật khẩu riêng biệt cho thử thách công việc
- (như độ dài mã PIN cần thiết hoặc có thể sử dụng dấu vân tay
- để mở khóa cấu hình hay không) bằng <code>setPasswordQuality()</code>,
- <code>setPasswordMinimumLength()</code> và các phương thức liên quan. Người sở hữu
- cấu hình cũng có thể cài khóa thiết bị bằng thực thể <code>DevicePolicyManager</code>
- được trả về bởi phương thức <code>getParentProfileInstance()</code> mới.
- Ngoài ra, người sở hữu cấu hình có thể tùy chỉnh màn hình xác thực thông tin cho
- thử thách công việc bằng các phương thức <code>setOrganizationColor()</code> và
- <code>setOrganizationName()</code> mới.
-</p>
-<h3 id="turn_off_work">Tắt công việc </h3>
-
-<p>Trên một thiết bị có cấu hình công việc, người dùng có thể bật hoặc tắt chế độ công việc. Khi chế độ công việc được
-tắt người dùng được quản lý sẽ tạm thời bị tắt, khiến vô hiệu hóa các ứng dụng
-cấu hình công việc, đồng bộ chạy ngầm và các thông báo. Điều này bao gồm cả ứng dụng
-của người sở hữu cấu hình. Khi chế độ công việc bị tắt, hệ thống sẽ hiển thị biểu tượng
-trạng thái liên tục để nhắc người dùng đó rằng họ không thể khởi chạy các ứng dụng công việc. Trình khởi chạy
-sẽ chỉ báo rằng các ứng dụng và widget công việc không khả dụng. </p>
-
-<h3 id="always_on_vpn">VPN luôn bật </h3>
-
-<p>Người sở hữu thiết bị và người sở hữu cấu hình có thể đảm bảo rằng những ứng dụng công việc luôn kết nối
-thông qua một VPN chỉ định. Hệ thống sẽ tự động khởi động VPN đó sau khi
-thiết bị khởi động.</p>
-
-<p>
- Các phương thức <code>DevicePolicyManager</code> mới gồm
- <code>setAlwaysOnVpnPackage()</code> và
- <code>getAlwaysOnVpnPackage()</code>.
-</p>
-
-<p>Do các dịch vụ VPN có thể được gắn kết trực tiếp bởi hệ thống mà không cần tương tác
-của ứng dụng, các máy khách VPN cần xử lý các điểm bắt đầu cho VPN luôn bật. Giống
-trước đây, các dịch vụ được chỉ định tới hệ thống bằng một bộ lọc ý định phù hợp với
-hành động <code>android.net.VpnService</code>. </p>
-
-<p>
- Người dùng cũng có thể đặt thủ công các máy khách VPN luôn bật có cài đặt các phương thức
- <code>VPNService</code> trong người dùng chính bằng
- <strong>Settings>More>Vpn</strong>.
-</p>
-
-<h2 id="accessibility_enhancements">Cải tiến trợ năng</h2>
-
-<p>Android N nay đã hỗ trợ Cài đặt Khả năng nhìn trực tiếp trên màn hình Chào mừng khi thiết lập
-thiết bị mới. Điều này giúp người dùng rất dễ dàng khám phá và cấu hình
-các tính năng trợ năng trên thiết bị của họ, bao gồm cử chỉ phóng đại, cỡ
-phông chữ, kích thước hiển thị và TalkBack. </p>
-
-<p>Với các tính năng trợ năng được bố trí ngày càng dễ thấy hơn, khi được bật
-khả năng người dùng sẽ thử ứng dụng của bạn sẽ cao hơn. Hãy đảm bảo bạn kiểm thử ứng dụng của mình
-trước với các cài đặt này được bật. Bạn có thể bật chúng trong Settings >
-Accessibility.</p>
-
-<p>Ngoài ra, trong Android N, các dịch vụ trợ năng đã có thể trợ giúp người dùng bị các tổn thương
-vận động chạm vào màn hình. API mới cho phép xây dựng các dịch vụ với những
-tính năng như theo dõi chuyển động của khuôn mặt, theo dõi chuyển động của mắt, quét điểm, v.v. nhằm
-đáp ứng nhu cầu những người dùng này.</p>
-
-<p>Để biết thêm thông tin, hãy xem <code>android.accessibilityservice.GestureDescription</code>
- trong tài liệu <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Tham khảo API</a> có thể tải xuống.</p>
-
-
-<h2 id="direct_boot">Khởi động Trực tiếp</h2>
-
-<p>Khởi động Trực tiếp cải thiện thời gian khởi động của thiết bị và cho phép các ứng dụng
-đã đăng ký có chức năng hạn chế ngay cả sau khi khởi động lại ngoài dự kiến.
-Ví dụ, nếu một thiết bị được mã hóa khởi động lại khi người dùng đang ngủ thì
-báo thức, tin nhắn và các cuộc gọi đến đã đăng ký có thể tiếp tục thông báo
-cho người dùng như thường lệ. Điều này cũng có nghĩa là các dịch vụ trợ năng cũng sẽ
- khả dụng ngay sau khi khởi động xong.</p>
-
-<p>Khởi động Trực tiếp sử dụng mã hóa theo tệp trong Android N
-để bật các chính sách mã hóa chi tiết cho cả dữ liệu của hệ thống và ứng dụng.
-Hệ thống sẽ sử dụng một bộ lưu trữ mã hóa thiết bị cho dữ liệu hệ thống được chọn và dữ liệu ứng dụng
-đã đăng ký công khai. Theo mặc định, một bộ lưu trữ mã hóa thông tin xác thực sẽ được sử dụng cho mọi
- dữ liệu hệ thống, dữ liệu người dùng, ứng dụng và dữ liệu của ứng dụng khác. </p>
-
-<p>Trong quá trình khởi động, hệ thống sẽ khởi động vào chế độ hạn chế và chỉ có quyền truy cập tới
-dữ liệu mã hóa thiết bị mà thôi, và không có quyền truy cập thông thường tới ứng dụng hoặc dữ liệu.
-Nếu bạn có các thành phần muốn chạy trong chế độ này thì bạn có thể đăng ký
-chúng bằng cách đặt cờ trong bản kê khai. Sau khi khởi động, hệ thống sẽ kích hoạt
-các thành phần đã đăng ký bằng cách truyền phát ý định <code>LOCKED_BOOT_COMPLETED</code>
-. Hệ thống sẽ đảm bảo cho dữ liệu mã hóa thiết bị đã đăng ký sẽ khả dụng
-trước khi mở khóa. Mọi dữ liệu khác sẽ không khả dụng cho tới khi Người dùng xác nhận thông tin xác thực trên màn hình khóa
- của họ để giải mã nó. </p>
-
-Để biết thêm thông tin, hãy xem <a href="{@docRoot}preview/features/direct-boot.html">Khởi động Trực tiếp</a>.</p>
-</p>
-
-
-<h2 id="key_attestation">Chứng thực khóa</h2>
-
-<p>Các bộ lưu trữ khóa dựa trên phần cứng cung cấp một phương thức an toàn hơn rất nhiều để tạo, lưu trữ,
-và sử dụng các khóa mật mã trên thiết bị Android. Chúng bảo vệ các khóa trước
-nhân Linux, trước các lỗ hổng bảo mật tiềm tàng của Android và trước việc trích xuất
-từ các máy bị giành quyền điều khiển và bị can thiệp vào các tệp hệ thống (máy bị root).</p>
-
-<p>Android N đã đưa ra tính năng Chứng thực khóa để sử dụng các bộ lưu trữ khóa dựa trên phần cứng một cách
- dễ dàng và bảo mật hơn. Các ứng dụng và dịch vụ không thuộc thiết bị có thể sử dụng Chứng thực
-khóa để xác định chắc chắn xem một cặp khóa RSA hoặc EC có
-dựa trên phần cứng hay không, các đặc điểm của cặp khóa đó là gì và
- các ràng buộc nào được áp dụng cho việc sử dụng và tính hợp lệ của cặp khóa đó. </p>
-
-<p>Các ứng dụng và dịch vụ không thuộc thiết bị có thể yêu cầu thông tin về một cặp khóa
-thông qua chứng chỉ chứng thực X.509. Chứng chỉ này phải được ký bởi một khóa
-chứng thực hợp lệ. Khóa chứng thực là một khóa ký ECDSA, được
-đưa vào bộ lưu trữ khóa dựa trên phần cứng của thiết bị tại nhà máy.
-Do đó, một chứng chỉ chứng thực được ký bởi khóa
-chứng thực hợp lệ sẽ xác nhận sự tồn tại của bộ lưu trữ khóa dựa trên phần cứng, kèm theo
- chi tiết về các cặp khóa trong bộ lưu trữ khóa đó.</p>
-
-<p>Để chắc chắn thiết bị đang sử dụng ảnh
-Android bảo mật, chính thức từ nhà máy, Chứng thực khóa yêu cầu <a class="external-link" href="https://source.android.com/security/verifiedboot/verified-boot.html#bootloader_requirements">bootloader</a>
- của thiết bị cung cấp thông tin sau cho <a class="external-link" href="https://source.android.com/security/trusty/index.html">Môi trường Thực thi
- An toàn (TEE)</a>:</p>
-
-<ul>
-<li>Phiên bản HĐH và cấp vá lỗi được cài đặt trên thiết bị</li>
-<li>Khóa công khai <a href="https://source.android.com/security/verifiedboot/index.html" class="external-link">Khởi động được xác thực</a> và trạng thái khóa</li>
- </ul>
-
-<p>Để biết thêm thông tin về tính năng bộ lưu trữ khóa dựa trên phần cứng,
-hãy xem hướng dẫn <a href="https://source.android.com/security/keystore/" class="external-link">Bộ lưu trữ khóa dựa trên phần cứng</a>.</p>
-
-<p>Ngoài Chứng thực khóa, Android N cũng giới thiệu
- các khóa dựa vào vân tay mà không được thu hồi khi đăng ký vân tay.</p>
-
-<h2 id="network_security_config">Cấu hình Bảo mật mạng</h2>
-
-<p>Trong Android N, các ứng dụng có thể tùy biến hành vi của các kết nối
-bảo mật (HTTPS, TLS) của chúng một cách an toàn mà không cần chỉnh sửa mã nhờ sử dụng khai báo
-<em>Cấu hình Bảo mật mạng</em> thay vì sử dụng các API lập trình truyền thống
-dễ xảy ra lỗi (vd: X509TrustManager).</p>
-
- <p>Các tính năng được hỗ trợ:</p>
-<ul>
-<li><b>Nguồn tin cậy tùy chỉnh.</b> Cho phép một ứng dụng tùy chỉnh
-Nhà cung cấp chứng chỉ (CA) nào sẽ được tin cậy cho các kết nối bảo mật của ứng dụng. Ví
-dụ, tin cậy các chứng chỉ tự ký cụ thể hoặc một bộ giới hạn các CA công khai.
-</li>
-<li><b>Chỉ khống chế khi gỡ lỗi.</b> Cho phép nhà phát triển ứng dụng an toàn gỡ lỗi
-các kết nối bảo mật của ứng dụng mà không tạo thêm rủi ro cho phần cơ sở
-đã cài đặt.
-</li>
-<li><b>Không sử dụng truyền gửi văn bản chưa mã hóa.</b> Cho phép một ứng dụng tự bảo vệ mình khỏi việc
-vô tình sử dụng truyền gửi văn bản chưa mã hóa cleartext.</li>
-<li><b>Ghim chứng chỉ.</b> Một tính năng nâng cao cho phép một ứng dụng
- giới hạn các khóa máy chủ nào là an toàn đối với các kết nối bảo mật.</li>
-</ul>
-
-<p>Để biết thêm thông tin, hãy xem <a href="{@docRoot}preview/features/security-config.html">Cấu hình Bảo mật
- mạng</a>.</p>
-
-<h2 id="default_trusted_ca">Nhà cung cấp Chứng chỉ An toàn mặc định</h2>
-
-<p>Theo mặc định, các ứng dụng nhắm mục tiêu Android N chỉ tin cậy các chứng chỉ do hệ thống cấp
-và không còn tin cậy các Nhà cung cấp chứng chỉ (CA) do người dùng thêm vào. Các ứng dụng nhắm mục tiêu Android
-N muốn tin cậy các CA do người dùng thêm vào nên sử dụng
-<a href="{@docRoot}preview/features/security-config.html">Cấu hình Bảo mật mạng</a> để
-chỉ định cách thức tin cậy các CA của người dùng.</p>
-
-<h2 id="apk_signature_v2">Lược đồ chữ ký số v2 cho tệp APK</h2>
-
-<p>Lớp PackageManager nay đã hỗ trợ xác thực ứng dụng bằng Lược đồ chữ ký số v2
-APK. Lược đồ chữ ký số v2 APK là một lược đồ chữ ký số trên toàn bộ tệp
-làm tăng đáng kể tốc độ xác thực và tăng cường sự bảo đảm
- toàn vẹn bằng cách phát hiện các thay đổi trái phép đối với các tệp APK.</p>
-
-<p>Để bảo đảm tương thích ngược, một tệp APK phải được ký bằng lược đồ
-chữ ký số v1 (Lược đồ chữ ký số JAR) trước khi được ký bằng lược đồ chữ ký số v2.
-Với lược đồ chữ ký số v2, quá trình xác thực sẽ thất bại nếu bạn ký tệp APK bằng một
- chứng chỉ khác sau khi ký bằng lược đồ v2. </p>
-
-<p>Hỗ trợ cho lược đồ chữ ký số v2 cho tệp AKP sẽ có sau trong N Developer
-Preview.</p>
-
-<h2 id="scoped_directory_access">Truy cập thư mục theo phạm vi</h2>
-
-<p>Trong Android N, ứng dụng có thể sử dụng các API mới để yêu cầu truy cập vào các thư mục <a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">bộ nhớ lưu trữ
-ngoài</a> riêng, bao gồm các thư mục trên phương tiện có thể tháo ra như thẻ
-SD. Các API mới đã tối giản cách thức ứng dụng của bạn truy cập các thư mục lưu trữ ngoài
-tiêu chuẩn như thư mục <code>Pictures</code>. Các ứng dụng
-như ứng dụng quản lý ảnh có thể sử dụng các API này thay vì sử dụng
-<code>READ_EXTERNAL_STORAGE</code> để cấp quyền truy cập tới mọi thư mục
-lưu trữ, hoặc Khuôn khổ Truy cập Lưu trữ để giúp người dùng di chuyển tới
-thư mục đó.</p>
-
-<p>Ngoài ra, các API mới này cũng đơn giản hóa các bước mà người dùng thực hiện để cấp quyền truy cập
-bộ nhớ lưu trữ ngoài cho ứng dụng của bạn. Khi bạn sử dụng các API mới, hệ thống sẽ sử dụng một UI cấp quyền
-đơn giản cung cấp các thông tin chi tiết rõ ràng về thư mục nào ứng dụng đang
-yêu cầu quyền truy cập.</p>
-
-<p>Để biết thêm thông tin, hãy xem tài liệu cho nhà phát triển
-<a href="{@docRoot}preview/features/scoped-folder-access.html">Truy cập
-Thư mục theo Phạm vi</a>.</p>
-
-
-
-
-
-
diff --git a/docs/html-intl/intl/vi/preview/behavior-changes.jd b/docs/html-intl/intl/vi/preview/behavior-changes.jd
deleted file mode 100644
index 3060fbf..0000000
--- a/docs/html-intl/intl/vi/preview/behavior-changes.jd
+++ /dev/null
@@ -1,480 +0,0 @@
-page.title=Các thay đổi Hành vi
-page.keywords=preview,sdk,compatibility
-meta.tags="preview", "compatibility"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-changes_2x.png
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>Trong tài liệu này</h2>
-
-<ol>
- <li><a href="#perf">Cải thiện Hiệu năng</a>
- <ol>
- <li><a href="#doze">Chế độ Ngủ sâu</a></li>
- <li><a href="#bg-opt">Tối ưu hóa Chạy ngầm</a></li>
- </ol>
- </li>
- <li><a href="#perm">Thay đổi Quyền</a></li>
- <li><a href="#accessibility">Cải thiện Trợ năng</a>
- <ol>
- <li><a href="#screen-zoom">Thu phóng Màn hình</a></li>
- <li><a href="#vision-settings">Cài đặt Khả năng nhìn trong Trình Thiết lập</a></li>
- </ol>
- </li>
- <li><a href="#ndk">Liên kết Ứng dụng NDK với Thư viện Nền tảng</a></li>
- <li><a href="#afw">Android cho Công việc</a></li>
-</ol>
-
-<h2>Xem thêm</h2>
-<ol>
- <li><a href="{@docRoot}preview/api-overview.html">
- Tổng quan về API Android N</a></li>
-</ol>
-
-</div>
-</div>
-
-
-<p>
- Với các tính năng và khả năng mới, Android N
- cũng có một số các thay đổi hành vi của hệ thống và API. Tài liệu
- này nêu bật một số các thay đổi quan trọng mà bạn cần biết và cân nhắc cho
- ứng dụng của mình.
-</p>
-
-<p>
- Nếu bạn đã từng phát hành ứng dụng cho Android, hãy lưu ý rằng các thay đổi
- trong nền tảng này có thể tác động đến ứng dụng của bạn.
-</p>
-
-
-<h2 id="perf">Cải thiện Hiệu năng</h2>
-
-<p>
- Android N có chứa các thay đổi hành vi của hệ thống nhằm cải thiện thời lượng
- pin của thiết bị, sử dụng RAM và hiệu năng ứng dụng. Các thay đổi này có thể tác động đến
- tính khả dụng của tài nguyên và các thông báo hệ thống đối tới ứng dụng. Bạn
- nên tìm hiểu các thay đổi này và đánh giá xem ứng dụng cần phải điều chỉnh như thế nào đối với
- các thay đổi.
-</p>
-
-<h3 id="doze">Chế độ Ngủ sâu</h3>
-
-<p>
- Được đưa vào Android 6.0 (Mức API 23), Chế độ Ngủ sâu cải thiện thời lượng pin bằng cách
- trì hoãn các hoạt động của CPU và mạng khi người dùng không cắm sạc,
- không di chuyển và tắt màn hình thiết bị. Android N
- thêm các cải tiến cho Chế độ Ngủ sâu bằng cách sử dụng một tập con các hạn chế của CPU và mạng
- khi thiết bị không được cắm sạc với màn hình bị tắt, nhưng không nhất thiết
- phải để một chỗ, ví dụ như một thiết bị cầm tay di chuyển trong túi của người dùng.
-</p>
-
-
-<img src="{@docRoot}preview/images/doze-diagram-1.png" alt="" height="251px" id="figure1" />
-<p class="img-caption">
- <strong>Hình 1.</strong> Minh họa cách thức Chế độ Ngủ sâu áp dụng ở cấp đầu tiên của
- các hạn chế hoạt động hệ thống nhằm cải thiện thời lượng pin.
-</p>
-
-<p>
- Khi một thiết bị dùng nguồn điện từ pin và màn hình bị tắt trong một khoảng thời gian
- nhất định, thiết bị sẽ chuyển vào Chế độ Ngủ sâu và áp dụng tập con đầu tiên của các hạn chế: Nó
- sẽ ngắt truy cập mạng của ứng dụng và trì hoãn các tác vụ và các đồng bộ. Nếu thiết bị
- được đặt một chỗ trong một khoảng thời gian nhất định sau khi vào Chế độ Ngủ sâu thì hệ thống sẽ áp dụng
- các hạn chế còn lại của Chế độ Ngủ sâu thành {@link android.os.PowerManager.WakeLock}, báo thức
-{@link android.app.AlarmManager}, GPS, quét Wi-Fi. Cho dù
- một số hoặc tất cả các hạn chế của Chế độ Ngủ sâu có được áp dụng hay không thì hệ thống sẽ đánh thức
- thiết bị trong các khoảng thời gian bảo trì ngắn, trong đó các ứng dụng được phép
- truy cập mạng và có thể thực thi mọi tác vụ/đồng bộ bị trì hoãn.
-</p>
-
-
-<img src="{@docRoot}preview/images/doze-diagram-2.png" alt="" id="figure2" />
-<p class="img-caption">
- <strong>Hình 2.</strong> Minh họa cách Chế độ Ngủ sâu áp dụng cấp thứ hai của
- các hạn chế hoạt động hệ thống sau khi thiết bị được đặt một chỗ trong một khoảng thời gian nhất định.
-</p>
-
-<p>
- Lưu ý rằng việc bật màn hình hoặc cắm sạc sẽ đưa thiết bị thoát Chế độ Ngủ sâu và
- loại bỏ các hạn chế xử lý này. Hành vi bổ sung này không
- ảnh hưởng đến các khuyến nghị và các thực hành tốt nhất khi thích ứng cho ứng dụng của bạn với phiên bản
- Chế độ Ngủ sâu được đưa vào Android 6.0 (API mức 23) trước đó, như mô tả trong
- <a href="{@docRoot}training/monitoring-device-state/doze-standby.html">
- Tối ưu hóa Chế độ Ngủ sâu và Chế độ Chờ của Ứng dụng</a>. Bạn nên tiếp tục
- làm theo các khuyến nghị đó, ví dụ như sử dụng Google Cloud Messaging (GCM) để
- gửi và nhận tin nhắn, và hãy tiến hành áp dụng các bản cập nhật để nhận
- hành vi Chế độ Ngủ sâu bổ sung.
-</p>
-
-
-<h3 id="bg-opt">Dự án Svelte: Tối ưu hóa Chạy ngầm</h3>
-
-<p>
- Android N gỡ bỏ ba truyền phát không biểu thị để giúp tối ưu hóa cả
- việc sử dụng bộ nhớ lẫn tiêu thụ điện năng. Thay đổi này là điều cần thiết bởi các truyền phát
- không biểu thị thường xuyên khởi động các ứng dụng đã được đăng ký để lắng nghe chúng dưới
- nền. Gỡ bỏ các truyền phát này có thể đem lại lợi ích lớn đối với hiệu năng
- của thiết bị và trải nghiệm người dùng.
-</p>
-
-<p>
- Các thiết bị di động thường xuyên gặp phải những thay đổi về kết nối, chẳng hạn như khi di chuyển
- giữa Wi-Fi và dữ liệu di động. Hiện tại, các ứng dụng có thể theo dõi những thay đổi về
- kết nối bằng cách đăng ký một bộ thu truyền phát cho {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION} không biểu thị trong bản kê khai
- của chúng. Vì nhiều ứng dụng đăng ký để nhận truyền phát này do đó một hoạt động chuyển mạng
- duy nhất cũng có thể khiến tất cả các ứng dụng thức dậy và xử lý truyền phát đó ngay
- lập tức.
-</p>
-
-<p>
- Tương tự, các ứng dụng có thể đăng ký nhận truyền phát {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} và {@link
- android.hardware.Camera#ACTION_NEW_VIDEO} không biểu thị từ các ứng dụng khác, ví dụ như
-ứng dụng Camera. Khi một người dùng chụp ảnh với ứng dụng Camera thì những ứng dụng này sẽ thức dậy
- để xử lý truyền phát đó.
-</p>
-
-<p>
- Để loại bỏ các vấn đề này, Android N áp dụng các cách tối ưu hóa
- sau:
-</p>
-
-<ul>
- <li>Ứng dụng nhắm mục tiêu Android N sẽ không nhận các truyền phát {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION}, ngay cả khi chúng
- có các mục nhập của trong bản kê khai yêu cầu thông báo về các sự kiện này. Những ứng dụng đang chạy
- ở tiền cảnh vẫn có thể lắng nghe {@code CONNECTIVITY_CHANGE} qua
- luồng chính của chúng nếu yêu cầu thông báo bằng {@link
- android.content.BroadcastReceiver}.
- </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}. Cách tối ưu này
- tác động đến mọi ứng dụng, không chỉ các ứng dụng nhắm mục tiêu Android N.
- </li>
-</ul>
-
-<p>
- Các lần phát hành Android sau này có thể loại bỏ thêm các truyền phát không biểu thị, cũng
- như các dịch vụ chạy ngầm không còn liên kết. Vì lý do này, bạn nên tránh dùng hoặc
- gỡ bỏ các phụ thuộc trên các bộ thu được khai báo trong bản kê khai đối với các truyền phát không biểu thị,
- cũng như các dịch vụ chạy ngầm.
-</p>
-
-<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ị hoặc các dịch vụ chạy ngầm này. Ví dụ, API {@link
- android.app.job.JobScheduler} 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ột
- mạng không đo lưu lượng. Bạn còn có thể sử dụng {@link
- android.app.job.JobScheduler} để phản ứng lại các thay đổi đối với trình cung cấp nội dung.
-</p>
-
-<p>
- Để biết thêm thông tin về thay đổi hành vi này và cách thích ứng ứng dụng của bạn,
- hãy xem <a href="{@docRoot}preview/features/background-optimization.html">Tối ưu hóa
- Chạy ngầm</a>.
-</p>
-
-
-<h2 id="perm">Thay đổi Quyền</h2>
-
-<p>
- Android N có các thay đổi đối với quyền có thể tác động đến ứng dụng của bạn,
- bao gồm các quyền tài khoản người dùng và một quyền mới cho phép ghi vào
- bộ nhớ ngoài. Sau đây là phần tóm tắt các quyền đã thay đổi trong
- bản xem trước:
-</p>
-
-<ul>
- <li>{@code GET_ACCOUNTS} (Bị loại bỏ)
- <p>
- Quyền GET_ACCOUNTS nay đã bị loại bỏ. Hệ thống sẽ bỏ qua quyền
- này đối với các ứng dụng nhắm mục tiêu Android N.
- </p>
- </li>
-
-</ul>
-
-
-
-<h2 id="accessibility">Cải thiện Trợ năng</h2>
-
-<p>
- Android N có các thay đổi nhằm nâng cao khả năng sử dụng
- của nền tảng cho những người dùng có thị lực kém hoặc khiếm thị. Nhìn chung, các thay đổi này sẽ không
- yêu cầu thay đổi mã nguồn trong ứng dụng của bạn. Tuy nhiên, bạn cần xem lại
- các tính năng này và kiểm thử chúng với ứng dụng của mình để đánh giá các tác động tiềm tàng đối với trải nghiệm
- người dùng.
-</p>
-
-
-<h3 id="screen-zoom">Thu phóng Màn hình</h3>
-
-<p>
- Android N cho phép người dùng đặt <strong>Display size</strong> để phóng to
- hoặc thu nhỏ tất cả các phần tử trên màn hình, nhờ đó cải thiện trợ năng của thiết bị
- cho những người dùng có thị lực kém. Người dùng không thể thu phóng màn hình vượt quá chiều rộng màn hình
- tối thiểu <a href="http://developer.android.com/guide/topics/resources/providing-resources.html">
- sw320dp</a>. Đây là chiều rộng của Nexus 4, một máy điện thoại phổ biến có kích cỡ trung bình.
-</p>
-
-<div class="cols">
-
-<div class="col-6">
- <img src="{@docRoot}preview/images/screen-zoom-1.png" alt="" height="XXX" id="figure1" />
-</div>
-<div class="col-6">
- <img src="{@docRoot}preview/images/screen-zoom-2.png" alt="" height="XXX" id="figure1" />
-</div>
-
-</div> <!-- end cols -->
-<p class="img-caption">
- <strong>Hình 3.</strong> Màn hình bên phải hiển thị tác động của
- việc tăng kích cỡ Hiển thị của một thiết bị đang chạy ảnh hệ thống Android N.
-</p>
-
-
-<p>
- Khi mật độ của thiết bị thay đổi, hệ thống sẽ thông báo cho các ứng dụng đang chạy theo
- những cách sau:
-</p>
-
-<ul>
- <li>Nếu một ứng dụng nhắm mục tiêu mức API 23 hoặc thấp hơn thì hệ thống sẽ tự động tắt
- tất cả các tiến trình chạy ngầm của ứng dụng đó. Điều này có nghĩa là nếu một người dùng rời khỏi
- ứng dụng đó để mở màn hình <em>Settings</em> và thay đổi
- <strong>Display size</strong> thì hệ thống sẽ tắt ứng dụng giống
- như trong trường hợp thiết bị thiếu bộ nhớ. Nếu ứng dụng đó có bất kỳ tiến trình nào
- chạy ở tiền cảnh thì hệ thống sẽ thông báo cho các tiến trình đó về thay đổi cấu hình như
- mô tả trong <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Xử lý
- Thay đổi Thời gian chạy</a>, giống như hướng của thiết bị vừa thay đổi.
- </li>
-
- <li>Nếu ứng dụng nhắm mục tiêu Android N thì mọi tiến trình của nó
- (chạy ở tiền cảnh và chạy ngầm) đều được thông báo về thay đổi cấu hình như
- mô tả trong <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Xử lý
- Thay đổi Thời gian chạy</a>.
- </li>
-</ul>
-
-<p>
- Hầu hết các ứng dụng không cần thực hiện bất kỳ thay đổi nào để hỗ trợ tính năng này, miễn là
- các ứng dụng đó tuân theo các thực hành tốt nhất của Android. Những điều cụ thể cần kiểm tra:
-</p>
-
-<ul>
- <li>Kiểm thử ứng dụng của bạn trên một thiết bị có chiều rộng màn hình <code><a href=
- "{@docRoot}guide/topics/resources/providing-resources.html">sw320dp</a></code>
- và đảm bảo nó hoạt động đúng.
- </li>
-
- <li>Khi cấu hình của thiết bị thay đổi, hãy cập nhật mọi thông tin được lưu trữ trong bộ đệm
- phụ thuộc vào mật độ, ví dụ như các ảnh bitmap được lưu đệm hoặc các tài nguyên được tải từ
- mạng. Hãy kiểm tra các thay đổi cấu hình khi ứng dụng khôi phục từ trạng thái
- tạm dừng.
- <p class="note">
- <strong>Lưu ý:</strong> Nếu bạn lưu trữ trong bộ đệm các dữ liệu phụ thuộc vào cấu hình thì nên
- thêm siêu dữ liệu liên quan như kích cỡ
- màn hình phù hợp hoặc mật độ điểm ảnh cho dữ liệu đó. Việc lưu siêu dữ liệu này cho phép bạn
- quyết định liệu bạn có cần phải làm mới dữ liệu được lưu trữ đệm sau khi một cấu hình
- thay đổi.
- </p>
- </li>
-
- <li>Tránh chỉ định các kích thước theo đơn vị px vì chúng không thay đổi tỉ lệ theo
- mật độ màn hình. Thay vào đó, hãy chỉ định các kích thước bằng các đơn vị <a href="{@docRoot}guide/practices/screens_support.html">điểm ảnh
- độc lập với mật độ</a> (<code>dp</code>).
- </li>
-</ul>
-
-<h3 id="vision-settings">Cài đặt Khả năng nhìn trong Trình Thiết lập</h3>
-
-<p>
- Android N có Cài đặt Khả năng nhìn trên màn hình Chào mừng, nơi người dùng có thể
- thiết lập các cài đặt trợ năng sau đây trên một thiết bị mới:
- <strong>Magnification gesture</strong>, <strong>Font size</strong>,
- <strong>Display size</strong> và <strong>TalkBack</strong>. Thay đổi này
- sẽ tăng khả năng thấy được các khiếm khuyết liên quan đến những cài đặt màn hình khác nhau. Để
- đánh giá tác động của tính năng này, bạn có thể kiểm thử ứng dụng của mình với các
- cài đặt sau được bật. Bạn có thể tìm các cài đặt này trong <strong>Settings >
- Accessibility</strong>.
-</p>
-
-<h2 id="ndk">Liên kết Ứng dụng NDK với Thư viện Nền tảng</h2>
-
-<p>
- Android N có các thay đổi đối với không gian tên để ngăn việc tải các API không công khai.
- Nếu bạn sử dụng NDK, bạn chỉ nên sử dụng các API công khai từ nền tảng
- Android. Sử dụng các API không công khai trong bản phát hành chính thức tiếp theo của Android
- có thể khiến ứng dụng bị treo.
-</p>
-
-<p>
- Để cảnh báo cho bạn việc sử dụng các API không công khai, các ứng dụng chạy trên thiết bị
- Android N sẽ tạo ra một lỗi trong phần xuất ra của logcat khi một ứng dụng gọi một API không công khai.
- Lỗi này cũng được hiển thị trên màn hình thiết bị dưới dạng thông báo để hỗ trợ
- nâng cao nhận biết đối với tình huống này. Bạn nên xem lại mã của ứng dụng để
- gỡ bỏ phần sử dụng các API nền tảng không công khai và kiểm thử kỹ lưỡng ứng dụng bằng
- một thiết bị hoặc bộ giả lập của bản xem trước.
-</p>
-
-<p>
- Nếu ứng dụng của bạn phụ thuộc vào các thư viện của nền tảng, hãy xem tài liệu NDK để biết
- các cách khắc phục cơ bản nhằm thay thế các API không công khai bằng các API công khai tương ứng.
- Bạn cũng có thể liên kết với các thư viện của nền tảng mà không nhận biết ứng dụng,
- đặc biệt nếu ứng dụng của bạn sử dụng thư viện thuộc một phần của nền tảng (như
- <code>libpng</code>), nhưng không thuộc NDK. Trong trường hợp đó, hãy đảm bảo rằng
- tệp APK của bạn có chứa tất cả các tệp .so bạn dự định liên kết với.
-</p>
-
-<p class="caution">
- <strong>Cẩn trọng:</strong> Một số thư viện của bên thứ ba có thể liên kết với các API
- không công khai. Nếu ứng dụng của bạn sử dụng các thư viện này thì ứng dụng của bạn có thể gặp lỗi sụp đổ khi đang chạy
- trong lần phát hành Android chính thức kế tiếp.
-</p>
-
-<p>
- Các ứng dụng không nên phụ thuộc vào hoặc sử dụng các thư viện gốc không kèm theo trong
- NDK bởi vì chúng có thể thay đổi hoặc bị gỡ bỏ khỏi khi phát hành bản Android khác
- thay cho bản cũ. Việc chuyển từ OpenSSL sang BoringSSL là một ví dụ về sự thay đổi đó.
- Ngoài ra, các thiết bị khác nhau có thể cung cấp các mức độ tương thích khác nhau bởi
- không có yêu cầu nào về khả năng tương thích cho các thư viện nền tảng không đi kèm với
- NDK. Nếu bạn buộc phải sử dụng các thư viện không thuộc NDK trên các thiết bị cũ, hãy thực hiện
- quá trình tải phụ thuộc vào mức Android API.
-</p>
-
-<p>
- Nhằm giúp bạn chẩn đoán các loại vấn đề này, sau đây là một số lỗi Java và NDK
- ví dụ bạn có thể gặp phải khi cố dựng ứng dụng với Android N:
-</p>
-
-<p>Ví dụ lỗi Java:</p>
-<pre class="no-pretty-print">
-java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so"
- is not accessible for the namespace "classloader-namespace"
-</pre>
-
-<p>Ví dụ lỗi NDK:</p>
-<pre class="no-pretty-print">
-dlopen failed: cannot locate symbol "__system_property_get" referenced by ...
-</pre>
-
-
-<p>
- Sau đây là một số cách khắc phục đối với ứng dụng gặp phải các kiểu lỗi này:
-</p>
-
-<ul>
- <li>Việc sử dụng getJavaVM và getJNIEnv trong libandroid_runtime.so có thể được thay
- bằng các hàm JNI chuẩn:
-<pre class="no-pretty-print">
-AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h>
-AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or
-JavaVM::AttachCurrentThread from <jni.h>.
-</pre>
- </li>
-
- <li>Việc sử dụng ký hiệu {@code property_get} trong {@code libcutils.so} có thể được
- thay bằng phương thức {@code __system_property_get} công khai thay thế.
- Để làm điều này, hãy dùng {@code __system_property_get} với câu lệnh include sau:
-<pre>
-#include <sys/system_properties.h>
-</pre>
- </li>
-
- <li>Việc sử dụng ký hiệu {@code SSL_ctrl} trong {@code libcrypto.so} nên được
- thay bằng một ký hiệu cục bộ của ứng dụng. Ví dụ, bạn nên liên kết tĩnh
- {@code libcyrpto.a} trong tệp {@code .so} hoặc thêm tham chiếu
- {@code libcrypto.so} động của riêng mình từ BoringSSL hoặc OpenSSL trong ứng dụng của bạn.
- </li>
-</ul>
-
-<h2 id="afw">Android cho Công việc</h2>
-<p>
- Android N có các thay đổi cho ứng dụng nhắm mục tiêu Android cho Công việc, bao gồm
- các thay đổi đối với cài đặt chứng chỉ, đặt lại mật khẩu, quản lý người dùng
- thứ hai và truy cập các mã định danh của thiết bị. Nếu bạn đang dựng các ứng dụng dành cho
- các môi trường Android cho Công việc thì bạn nên xem lại các thay đổi này và chỉnh sửa
- ứng dụng của mình cho phù hợp.
-</p>
-
-<ul>
- <li>Bạn phải cài đặt một trình cài đặt chứng chỉ ủy thác trước khi DPC có thể đặt
- nó. Đối với cả ứng dụng người sở hữu cấu hình và ứng dụng người sở hữu thiết bị nhắm mục tiêu SDK N, bạn cần
- cài đặt trình cài đặt chứng chỉ ủy thác trước khi trình kiểm soát
- chính sách của thiết bị (DPC) gọi
- <code>DevicePolicyManager.setCertInstallerPackage()</code>. Nếu trình cài đặt
- chưa được cài thì hệ thống sẽ đưa ra một
- <code>IllegalArgumentException</code>.
- </li>
-
- <li>Giờ đây các hạn chế đặt lại mật khẩu cho người quản lý thiết bị sẽ áp dụng với người sở hữu
- cấu hình. Người quản lý thiết bị không thể sử dụng
- <code>DevicePolicyManager.resetPassword()</code> được nữa để xóa mật khẩu hoặc thay đổi
- các mật khẩu đã đặt. Người quản lý thiết bị vẫn có thể đặt một mật khẩu nhưng chỉ
- khi thiết bị không có mật khẩu, mã PIN hoặc mẫu hình.
- </li>
-
- <li>Người sở hữu thiết bị hoặc cấu hình có thể quản lý các tài khoản ngay cả khi các hạn chế được
- đặt. Người sở hữu thiết bị và người sở hữu cấu hình có thể gọi các API Quản lý tài khoản
- ngay cả khi các hạn chế người dùng <code>DISALLOW_MODIFY_ACCOUNTS</code> đã có sẵn.
- </li>
-
- <li>Người sở hữu thiết bị có thể quản lý những người dùng thứ cấp dễ dàng hơn. Khi một thiết bị
- đang chạy trong chế độ người sở hữu thiết bị, hạn chế <code>DISALLOW_ADD_USER</code>
- sẽ được đặt tự động. Điều này ngăn người dùng tạo các người dùng
- thứ cấp không được quản lý. Ngoài ra, các phương thức <code>CreateUser()</code> và
- <code>createAndInitial()</code> đã bị loại bỏ; phương thức
-<code>DevicePolicyManager.createAndManageUser()</code> mới sẽ thay thế chúng.
- </li>
-
- <li>Người sở hữu thiết bị có thể truy cập các mã định danh của thiết bị. Một người sở hữu thiết bị có thể truy cập
- địa chỉ MAC của Wi-Fi của một thiết bị, bằng phương thức
- <code>DevicePolicyManagewr.getWifiMacAddress()</code>. Nếu Wi-Fi chưa từng
- được bật trên thiết bị đó thì phương thức này sẽ trả về một giá trị {@code null}.
- </li>
-</ul>
-
-<p>
- Để biết thêm thông tin về các thay đổi đối với Android cho Công việc trong Android N, hãy xem
- <a href="{@docRoot}preview/features/afw.html">Cập nhật của Android cho Công việc</a>.
-</p>
-
-<h2 id="other">Các điểm quan trọng khác</h2>
-
-<ul>
-<li>Khi một ứng dụng đang chạy trên Android N nhưng nhắm mục tiêu mức API thấp hơn,
-và người dùng thay đổi kích cỡ hiển thị thì tiến trình của ứng dụng sẽ bị tắt. Ứng dụng
-phải có khả năng xử lý tình huống này một cách tinh tế. Nếu không, ứng dụng sẽ bị lỗi sụp đổ
-khi người dùng khôi phục nó từ mục Gần đây.
-
-<p>
-Bạn cần kiểm thử ứng dụng để đảm bảo
-rằng hành vi này không xảy ra.
-Bạn có thể thực hiện điều đó bằng cách gây ra một lỗi sụp đổ giống vậy
-khi tắt ứng dụng một cách thủ công qua DDMS.
-</p>
-
-<p>
-Các ứng dụng nhắm mục tiêu N và cao hơn sẽ không bị tắt tự động khi có các thay đổi về mật độ;
-tuy nhiên, chúng có thể phản hồi khó khăn đối với các thay đổi cấu hình.
-</p>
-</li>
-
-<li>
-Các ứng dụng trên Android N cần có khả năng xử lý các thay đổi cấu hình một cách tinh tế,
-và không bị lỗi sụp đổ trong các lần khởi động tiếp theo. Bạn có thể kiểm tra hành vi ứng dụng
-bằng cách thay đổi kích cỡ phông chữ (<strong>Setting</strong> >
-<strong>Display</strong> > <strong>Font size</strong>), và sau đó khôi phục
-ứng dụng từ mục Gần đây.
-</li>
-</ul>
-
diff --git a/docs/html-intl/intl/vi/preview/download.jd b/docs/html-intl/intl/vi/preview/download.jd
deleted file mode 100644
index 8b2a272..0000000
--- a/docs/html-intl/intl/vi/preview/download.jd
+++ /dev/null
@@ -1,550 +0,0 @@
-page.title=Kiểm thử trên Thiết bị
-meta.tags="preview", "nexus","system image"
-page.tags="preview", "androidn"
-page.image=images/cards/card-n-downloads_2x.png
-
-@jd:body
-
-<div style="position:relative; min-height:600px">
-
- <div class="wrap" id="tos" style="position:absolute;display:none;width:inherit;">
-
- <p class="sdk-terms-intro">Trước khi tải xuống và cài đặt các thành phần của
- Android Preview SDK, bạn phải đồng ý với các điều khoản và
- điều kiện sau.</p>
-
- <h2 class="norule">Điều khoản và Điều kiện</h2>
-
- <div class="sdk-terms" onfocus="this.blur()" style="width:678px">
-Đây là Thỏa thuận Cấp phép Android SDK Preview (gọi là “Thỏa thuận Cấp phép”).
-
-1. Giới thiệu
-
-1.1 Android SDK Preview (trong Thỏa thuận Cấp phép này gọi là “Preview” và cụ thể bao gồm các tệp hệ thống Android, các API dạng gói, và các tệp thư viện Preview, nếu và khi nào chúng được cung cấp) được cấp phép cho bạn theo các điều khoản của Thỏa thuận Cấp phép này. Thỏa thuận Cấp phép này hợp thành một hợp đồng ràng buộc pháp lý giữa bạn và Google liên quan đến việc bạn sử dụng Preview.
-
-1.2 "Android" có nghĩa là chồng phần mềm Android cho thiết bị, được cung cấp theo Dự án Nguồn mở Android, nằm ở địa chỉ URL sau: http://source.android.com/, được cập nhật trong từng thời kỳ.
-
-1.3 “Tương thích Android” nghĩa là bất cứ triển khai Android nào (i) tuân thủ theo tài liệu Định nghĩa Tính tương thích Android, có thể được tìm thấy tại trang web về tính tương thích Android (http://source.android.com/compatibility) và có thể được cập nhật theo thời gian; và (ii) vượt qua thành công Gói Kiểm tra Tính tương thích Android (CTS).
-
-1.4 "Google" có nghĩa là Google Inc., một công ty ở Delaware với trụ sở kinh doanh chính tại 1600 Amphitheatre Parkway, Mountain View, CA 94043, Hoa Kỳ.
-
-2. Chấp thuận Thỏa thuận Cấp phép
-
-2.1 Để sử dụng Preview, trước tiên bạn phải đồng ý với Thỏa thuận Cấp phép. Bạn không được sử dụng Preview nếu không chấp nhận Thỏa thuận Cấp phép này.
-
-2.2 Bằng việc nhấp vào chấp nhận và/hoặc sử dụng Preview, theo đây bạn đồng ý với các điều khoản của Thỏa thuận Cấp phép này.
-
-2.3 Bạn không được sử dụng Preview và không được chấp nhận Thỏa thuận Cấp phép nếu bạn là người bị cấm nhận Preview theo pháp luật của Hoa Kỳ hoặc các quốc gia khác bao gồm quốc gia nơi bạn cư trú hoặc nơi mà bạn sử dụng Preview từ đó.
-
-2.4 Nếu bạn sẽ sử dụng Preview trong nội bộ công ty hoặc tổ chức của bạn thì bạn đồng ý chịu ràng buộc bởi Thỏa thuận Cấp phép này đại diện cho bên tuyển dụng của mình hoặc đơn vị khác, và bạn tuyên bố và bảo đảm rằng bạn có đầy đủ thẩm quyền pháp lý để ràng buộc bên tuyển dụng của mình hoặc đơn vị đó với Thỏa thuận Cấp phép này. Nếu bạn không có thẩm quyền cần thiết, bạn không được chấp nhận Thỏa thuận Cấp phép này hoặc sử dụng Preview đại diện cho bên tuyển dụng của mình hoặc đơn vị khác.
-
-3. Giấy phép Preview từ Google
-
-3.1 Tùy thuộc vào các điều khoản của Thỏa thuận Cấp phép này, Google cấp cho bạn một giấy phép giới hạn, toàn cầu, miễn phí sử dụng, không thể chuyển nhượng, không độc quyền và không thể cấp phép lại để sử dụng Preview cho mục đích duy nhất là phát triển các ứng dụng cho các triển khai Android tương thích.
-
-3.2 Bạn không được sử dụng Preview này để phát triển các ứng dụng cho các nền tảng khác (bao gồm các triển khai Android không tương thích) hoặc để phát triển một bộ SDK khác. Bạn dĩ nhiên được phát triển các ứng dụng cho các nền tảng khác, bao gồm các triển khai Android không tương thích, miễn là Preview này không được sử dụng cho mục đích đó.
-
-3.3 Bạn đồng ý rằng Google hoặc các bên thứ ba sở hữu tất cả quyền, quyền sở hữu hoặc lợi ích hợp pháp trong và đối với Preview, bao gồm bất kỳ Quyền Sở hữu Trí tuệ nào nằm trong Preview. "Quyền Sở hữu Trí tuệ" có nghĩa là bất kỳ và tất cả các quyền theo luật về bằng sáng chế, luật về bản quyền, luật về bí mật thương mại, luật về nhãn hiệu thương mại và bất kỳ và tất cả các quyền sở hữu khác. Google bảo lưu tất cả các quyền không được cấp phép rõ ràng cho bạn.
-
-3.4 Bạn không được sử dụng Preview cho bất kỳ mục đích nào không được cho phép rõ ràng bởi Thỏa thuận Cấp phép này. Trừ trường hợp được yêu cầu bởi giấy phép của bên thứ ba có liên quan, bạn không được: (a) sao chép (trừ trường hợp sao lưu), sửa đổi, điều chỉnh cho phù hợp, phân phối lại, biên dịch ngược, kỹ thuật đảo ngược, phân rã, hoặc tạo sản phẩm phái sinh từ Preview hay bất kỳ phần nào của Preview; hoặc (b) tải bất kỳ phần nào của Preview lên một thiết bị cầm tay di động hoặc bất kỳ thiết bị phần cứng nào khác ngoại trừ máy tính cá nhân, kết hợp bất kỳ phần nào của Preview với phần mềm khác, hay phân phối bất kỳ phần mềm hay thiết bị nào tích hợp một phần của Preview.
-
-3.5 Việc sử dụng, tái tạo lại và phân phối các thành phần của Preview được cấp phép theo một giấy phép phần mềm nguồn mở được chi phối chủ yếu bởi các điều khoản của giấy phép phần mềm nguồn mở đó chứ không phải Thỏa thuận Cấp phép này. Bạn đồng ý duy trì một giấy phép có uy tín liên quan đến các giấy phép phần mềm mã nguồn mở theo tất cả các quyền được cấp và phải tránh bất kỳ hành động nào có thể chấm dứt, đình chỉ hoặc vi phạm các quyền đó.
-
-3.6 Bạn đồng ý rằng hình thức và tính chất của Preview mà Google cung cấp có thể thay đổi mà không có thông báo trước cho bạn và rằng các phiên bản sau này của Preview có thể không tương thích với các ứng dụng được phát triển trên những phiên bản trước của Preview. Bạn đồng ý rằng Google có thể ngừng (vĩnh viễn hoặc tạm thời) việc cung cấp Preview (hoặc bất kỳ tính năng nào trong Preview) cho bạn hoặc cho người dùng nói chung toàn quyền theo quyết định của Google, mà không cần thông báo trước cho bạn.
-
-3.7 Không có bất cứ nội dung nào trong Thỏa thuận Cấp phép này trao cho bạn quyền sử dụng bất kỳ tên thương mại, thương hiệu, dấu hiệu dịch vụ, logo, tên miền, hoặc các tính năng nhãn hiệu đặc biệt nào khác.
-
-3.8 Bạn đồng ý rằng bạn sẽ không gỡ bỏ, che đậy, hoặc sửa đổi bất kỳ thông báo quyền sở hữu nào (bao gồm các thông báo về bản quyền và thương hiệu) mà có thể gắn với hoặc có trong Preview.
-
-4. Việc Bạn sử dụng Preview
-
-4.1 Google đồng ý rằng không có bất cứ nội dung nào trong Thỏa thuận Cấp phép này cấp cho Google bất cứ quyền, quyền sở hữu hay lợi ích nào từ bạn (hay bên cấp phép của bạn) theo Thỏa thuận Cấp phép này trong hoặc đối với bất kỳ ứng dụng phần mềm nào mà bạn phát triển bằng cách sử dụng Preview, bao gồm bất kỳ quyền sở hữu trí tuệ nào nằm trong những ứng dụng đó.
-
-4.2 Bạn đồng ý sử dụng Preview và viết ứng dụng chỉ cho các mục đích được cho phép bởi (a) Thỏa thuận Cấp phép này và (b) bất kỳ luật, quy định hoặc thực hành áp dụng nào hoặc hướng dẫn được chấp nhận chung ở các vùng tài phán liên quan (bao gồm bất kỳ luật nào về việc xuất dữ liệu hoặc phần mềm đến và từ Hoa Kỳ hoặc các quốc gia có liên quan khác).
-
-4.3 Bạn đồng ý rằng nếu bạn sử dụng Preview để phát triển ứng dụng, bạn sẽ bảo vệ quyền riêng tư và các quyền hợp pháp của người dùng. Nếu người dùng cung cấp cho bạn tên người dùng, mật khẩu hoặc thông tin đăng nhập hay thông tin cá nhân khác, bạn phải thông báo cho người dùng rằng thông tin sẽ có sẵn cho ứng dụng của bạn, và bạn phải cung cấp thông báo về quyền riêng tư và sự bảo vệ thỏa đáng về mặt pháp lý cho những người dùng đó. Nếu ứng dụng của bạn lưu trữ thông tin cá nhân hoặc nhạy cảm được cung cấp bởi người dùng, ứng dụng phải làm vậy một cách bảo mật. Nếu người dùng cung cấp cho bạn thông tin về Tài khoản Google, ứng dụng của bạn chỉ được sử dụng thông tin đó để truy cập Tài khoản Google của người dùng khi, và chỉ cho các mục đích giới hạn mà mỗi người dùng đã cấp phép cho bạn để thực hiện.
-
-4.4 Bạn đồng ý rằng bạn sẽ không tham gia vào bất kỳ hoạt động nào với Preview, bao gồm việc phát triển hoặc phân phối một ứng dụng, mà can thiệp vào, làm gián đoạn, gây thiệt hại, hoặc truy cập một cách trái phép vào máy chủ, mạng hoặc tài sản hay dịch vụ khác của Google hoặc bất kỳ bên thứ ba nào.
-
-4.5 Bạn đồng ý rằng bạn hoàn toàn chịu trách nhiệm về (và rằng Google không có trách nhiệm đối với bạn hay bất kỳ bên thứ ba nào về) bất kỳ dữ liệu, nội dung hay tài nguyên nào mà bạn tạo lập, truyền hoặc hiển thị thông qua Android và/hoặc các ứng dụng cho Android, và về hậu quả của những hành động của bạn (bao gồm bất kỳ tổn thất hay thiệt hại nào mà Google có thể phải gánh chịu) bởi việc làm như vậy.
-
-4.6 Bạn đồng ý rằng bạn hoàn toàn chịu trách nhiệm về (và rằng Google không có trách nhiệm đối với bạn hay bất kỳ bên thứ ba nào về) bất kỳ sự vi phạm nào đối với các nghĩa vụ của bạn theo Thỏa thuận Cấp phép này, bất kỳ hợp đồng với bên thứ ba áp dụng nào hoặc các Điều khoản Dịch vụ, hoặc bất kỳ luật hay quy định áp dụng nào, và về hậu quả của những hành động của bạn (bao gồm bất kỳ tổn thất hay thiệt hại nào mà Google hoặc bất kỳ bên thứ ba nào có thể phải gánh chịu) do bất kỳ sự vi phạm nào như vậy.
-
-4.7 Preview đang được phát triển, và việc kiểm thử và phản hồi của bạn là một phần quan trọng trong quá trình phát triển này. Bằng việc sử dụng Preview, bạn thừa nhận rằng việc triển khai một số tính năng vẫn còn đang được phát triển và rằng bạn không nên dựa vào Preview có đầy đủ chức năng của một phiên bản ổn định. Bạn đồng ý không công khai phân phối hoặc gửi bất kỳ ứng dụng nào bằng Preview này bởi Preview này sẽ không còn được hỗ trợ sau khi Android SDK bản chính thức được phát hành.
-
-5. Thông tin Xác thực Nhà phát triển của bạn
-
-5.1 Bạn đồng ý rằng bạn chịu trách nhiệm duy trì tính bảo mật của bất kỳ thông tin xác thực nhà phát triển nào mà có thể được phát hành cho bạn bởi Google hoặc bạn có thể tự chọn và rằng bạn sẽ hoàn toàn chịu trách nhiệm về tất cả ứng dụng được phát triển theo thông tin xác thực nhà phát triển của bạn.
-
-6. Quyền riêng tư và Thông tin
-
-6.1 Để tiếp tục đổi mới và cải thiện Preview, Google có thể thu thập một số thống kê về sử dụng từ phần mềm bao gồm nhưng không giới hạn mã định danh duy nhất, địa chỉ IP liên kết, số phiên bản của phần mềm, và thông tin về những công cụ và/hoặc dịch vụ trong Preview đang được sử dụng và chúng đang được sử dụng như thế nào. Trước khi bất kỳ thông tin nào được thu thập, Preview sẽ thông báo cho bạn và xin phép sự đồng ý của bạn. Nếu bạn từ chối cho phép, thông tin sẽ không được thu thập.
-
-6.2 Dữ liệu thu thập được kiểm tra chung để cải thiện Preview và được duy trì theo Chính sách Quyền riêng tư của Google tại http://www.google.com/policies/privacy/.
-
-7. Ứng dụng của Bên thứ ba
-
-7.1 Nếu bạn sử dụng Preview để chạy các ứng dụng được phát triển bởi một bên thứ ba hoặc truy cập dữ liệu, nội dung hoặc tài nguyên được cung cấp bởi một bên thứ ba, bạn đồng ý rằng Google không chịu trách nhiệm về những ứng dụng, dữ liệu, nội dung hoặc tài nguyên đó. Bạn hiểu rằng tất cả dữ liệu, nội dung hoặc tài nguyên mà bạn có thể truy cập thông qua các ứng dụng của bên thứ ba như vậy hoàn toàn thuộc trách nhiệm của người cung cấp chúng và rằng Google không chịu trách nhiệm về bất kỳ tổn thất hay thiệt hại nào mà bạn có thể gặp phải do kết quả từ việc sử dụng hay truy cập bất kỳ ứng dụng của bên thứ ba, dữ liệu, nội dung hay tài nguyên nào như vậy.
-
-7.2 Bạn cần ý thức được rằng dữ liệu, nội dung và tài nguyên được trình chiếu cho bạn thông qua một ứng dụng của bên thứ ba như vậy có thể được bảo vệ bởi các quyền sở hữu trí tuệ thuộc sở hữu của các nhà cung cấp (hoặc bởi cá nhân hoặc công ty khác đại diện cho họ). Bạn không được sửa đổi, thuê, cho thuê, cho vay, bán, phân phối hoặc tạo sản phẩm phái sinh dựa trên những dữ liệu, nội dung hoặc tài nguyên này (hoặc toàn bộ hoặc một phần) trừ khi bạn đã được cấp phép cụ thể để làm vậy bởi chủ sở hữu có liên quan.
-
-7.3 Bạn hiểu rằng việc bạn sử dụng các ứng dụng, dữ liệu, nội dung hoặc tài nguyên của bên thứ ba như vậy có thể phải tuân thủ các điều khoản riêng giữa bạn và bên thứ ba có liên quan.
-
-8. Sử dụng các API Google
-
-8.1 Các API Google
-
-8.1.1 Nếu bạn sử dụng bất kỳ API nào để truy xuất dữ liệu từ Google, bạn hiểu rằng dữ liệu có thể được bảo vệ bởi quyền sở hữu trí tuệ thuộc sở hữu của Google hoặc những bên cung cấp dữ liệu (hoặc bởi cá nhân hoặc công ty khác đại diện cho họ). Việc bạn sử dụng bất kỳ API nào như vậy có thể phải tuân theo các Điều khoản Dịch vụ bổ sung. Bạn không được sửa đổi, thuê, cho thuê, cho vay, bán, phân phối hoặc tạo sản phẩm phái sinh dựa trên dữ liệu này (hoặc toàn bộ hoặc một phần) trừ khi được cho phép bởi các Điều khoản Dịch vụ có liên quan.
-
-8.1.2 Nếu bạn sử dụng bất kỳ API nào để truy xuất dữ liệu của một người dùng từ Google, bạn hiểu và đồng ý rằng bạn sẽ chỉ truy xuất dữ liệu với sự cho phép rõ ràng của người dùng và chỉ khi, và cho các mục đích giới hạn mà người dùng đã được cấp quyền để thực hiện.
-
-9. Chấm dứt Thỏa thuận Cấp phép
-
-9.1 Thỏa thuận Cấp phép sẽ tiếp tục áp dụng cho đến khi được chấm dứt hoặc bởi bạn hoặc Google như quy định dưới đây.
-
-9.2 Nếu bạn muốn chấm dứt Thỏa thuận Cấp phép, bạn có thể làm như vậy bằng cách ngừng sử dụng Preview và bất kỳ thông tin nhà phát triển nào có liên quan.
-
-9.3 Bất cứ lúc nào, Google đều có thể chấm dứt Thỏa thuận Cấp phép này, có hoặc không có nguyên nhân, sau khi thông báo cho bạn.
-
-9.4 Thỏa thuận Cấp phép sẽ tự động chấm dứt mà không cần có thông báo hay hành động khác tùy theo sự việc nào sớm hơn:
-(A) khi Google ngừng cung cấp Preview hoặc một số thành phần nhất định của Preview cho người dùng ở quốc gia mà bạn đang cư trú hoặc nơi bạn đang sử dụng dịch vụ; và
-(B) Google phát hành một phiên bản phát hành cuối cùng của Android SDK.
-
-9.5 Khi Thỏa thuận Cấp phép bị chấm dứt, giấy phép đã cấp cho bạn trong Thỏa thuận Cấp phép sẽ chấm dứt, ngay lập tức bạn sẽ ngừng tất cả việc sử dụng Preview này, và các quy định tại khoản 10, 11, 12 và 14 sẽ vẫn còn hiệu lực mãi mãi.
-
-10. ĐIỀU KHOẢN MIỄN TRỪ
-
-10.1 BẠN HIỂU VÀ ĐỒNG Ý RÕ RÀNG RẰNG VIỆC BẠN SỬ DỤNG PREVIEW HOÀN TOÀN LÀ RỦI RO CỦA BẠN VÀ RẰNG PREVIEW ĐƯỢC CUNG CẤP TRÊN CƠ SỞ “NGUYÊN TRẠNG” VÀ “CÓ SẴN” MÀ KHÔNG CÓ BẤT KỲ SỰ BẢO ĐẢM NÀO TỪ GOOGLE.
-
-10.2 VIỆC BẠN SỬ DỤNG PREVIEW VÀ BẤT KỲ TÀI NGUYÊN NÀO ĐƯỢC TẢI XUỐNG HOẶC CÓ ĐƯỢC BẰNG CÁCH KHÁC THÔNG QUA VIỆC SỬ DỤNG PREVIEW LÀ QUYẾT ĐỊNH VÀ RỦI RO CỦA CHÍNH BẠN VÀ BẠN HOÀN TOÀN CHỊU TRÁCH NHIỆM VỀ BẤT KỲ THIỆT HẠI NÀO ĐỐI VỚI HỆ THỐNG MÁY TÍNH HOẶC THIẾT BỊ KHÁC HOẶC VIỆC MẤT DỮ LIỆU LÀ KẾT QUẢ TỪ VIỆC SỬ DỤNG ĐÓ. KHÔNG GIỚI HẠN TRONG NỘI DUNG TRÊN, BẠN HIỂU RẰNG PREVIEW KHÔNG PHẢI LÀ BẢN PHÁT HÀNH ỔN ĐỊNH VÀ CÓ THỂ CHỨA LỖI, KHIẾM KHUYẾT VÀ CÁC LỖ HỔNG BẢO MẬT CÓ THỂ DẪN ĐẾN THIỆT HẠI ĐÁNG KỂ, BAO GỒM MẤT KHẢ NĂNG SỬ DỤNG HOÀN TOÀN, KHÔNG THỂ PHỤC HỒI ĐƯỢC CỦA HỆ THỐNG MÁY TÍNH HAY THIẾT BỊ KHÁC CỦA BẠN.
-
-10.3 GOOGLE CÔNG KHAI TUYÊN BỐ MIỄN TRỪ TRÁCH NHIỆM ĐỐI VỚI TẤT CẢ BẢO ĐẢM VÀ ĐIỀU KIỆN CÁC LOẠI, DÙ RÕ RÀNG HAY NGỤ Ý, BAO GỒM, NHƯNG KHÔNG GIỚI HẠN NHỮNG BẢO ĐẢM VÀ ĐIỀU KIỆN NGỤ Ý VỀ KHẢ NĂNG MUA BÁN ĐƯỢC, SỰ PHÙ HỢP CHO MỘT MỤC ĐÍCH CỤ THỂ VÀ KHÔNG XÂM PHẠM.
-
-11. GIỚI HẠN TRÁCH NHIỆM
-
-11.1 BẠN HIỂU VÀ ĐỒNG Ý RÕ RÀNG RẰNG GOOGLE, CÁC CÔNG TY CON VÀ CÔNG TY LIÊN KẾT CỦA GOOGLE, VÀ CÁC BÊN CẤP PHÉP CỦA GOOGLE SẼ KHÔNG CHỊU TRÁCH NHIỆM ĐỐI VỚI BẠN THEO BẤT KỲ LÝ THUYẾT TRÁCH NHIỆM NÀO VỀ BẤT KỲ THIỆT HẠI MANG TÍNH TRỰC TIẾP, GIÁN TIẾP, NGẪU NHIÊN, ĐẶC BIỆT, HẬU QUẢ HOẶC BẤT THƯỜNG NÀO MÀ BẠN CÓ THỂ PHẢI CHỊU, BAO GỒM BẤT KỲ TRƯỜNG HỢP MẤT DỮ LIỆU NÀO, DÙ GOOGLE HAY ĐẠI DIỆN CỦA GOOGLE CÓ BIẾT VỀ KHẢ NĂNG PHÁT SINH MẤT MÁT NHƯ VẬY HAY KHÔNG.
-
-12. Bồi thường
-
-12.1 Trong giới hạn tối đa mà pháp luật cho phép, bạn đồng ý bảo vệ, bồi thường và đảm bảo Google, các công ty liên kết của họ và các giám đốc, cán bộ, nhân viên và đại lý tương ứng của họ không bị thiệt hại trước và đối với bất kỳ và tất cả khiếu nại, hành động, kiện tụng hoặc thủ tục cũng như bất kỳ và tất cả tổn thất, trách nhiệm, thiệt hại, chi phí và phí tổn nào (bao gồm phí luật sư hợp lý) phát sinh từ hoặc phải trả từ (a) việc bạn sử dụng Preview, (b) bất kỳ ứng dụng nào do bạn phát triển trên Preview mà xâm phạm bất kỳ Quyền Sở hữu Trí tuệ của bất kỳ người nào hay bôi nhọ bất kỳ người nào hoặc vi phạm các quyền công khai hoặc riêng tư của họ, và (c) bất kỳ sự không tuân thủ nào của bạn đối với Thỏa thuận Cấp phép này.
-
-13. Thay đổi Thỏa thuận Cấp phép
-
-13.1 Google có thể thực hiện các thay đổi về Thỏa thuận Cấp phép khi họ phân phối các phiên bản mới của Preview. Khi những thay đổi này được thực hiện, Google sẽ lập một phiên bản Thỏa thuận Cấp phép mới có sẵn trên trang web nơi Preview được cung cấp.
-
-14. Các Điều khoản Pháp lý Chung
-
-14.1 Thỏa thuận Cấp phép này cấu thành toàn bộ thỏa thuận pháp lý giữa bạn và Google và chi phối việc bạn sử dụng Preview (không bao gồm bất kỳ dịch vụ nào mà Google có thể cung cấp cho bạn theo một thỏa thuận riêng bằng văn bản), và hoàn toàn thay thế bất kỳ thỏa thuận nào trước đây giữa bạn và Google liên quan tới Preview.
-
-14.2 Bạn đồng ý rằng nếu Google không thực hiện hay thi hành bất kỳ quyền hay chế tài hợp pháp nào có trong Thỏa thuận Cấp phép này (hoặc Google được hưởng lợi theo bất kỳ luật áp dụng nào), điều này sẽ không được coi như sự khước từ hình thức đối với các quyền của Google và rằng các quyền hoặc chế tài đó sẽ vẫn dành cho Google.
-
-14.3 Nếu bất kỳ tòa án pháp luật nào, có thẩm quyền tài phán đối với vấn đề này, phán rằng bất kỳ quy định nào của Thỏa thuận Cấp phép này không có hiệu lực, quy định đó sẽ bị xóa bỏ khỏi Thỏa thuận Cấp phép này mà không ảnh hưởng tới phần còn lại của Thỏa thuận Cấp phép này. Các quy định còn lại của Thỏa thuận Cấp phép này sẽ tiếp tục có giá trị và thi hành được.
-
-14.4 Bạn hiểu và đồng ý rằng mỗi thành viên trong nhóm các công ty mà trong đó Google là công ty mẹ sẽ là bên thụ hưởng thứ ba của Thỏa thuận Cấp phép và rằng những công ty khác đó sẽ có quyền trực tiếp thi hành, và dựa vào, bất kỳ quy định nào của Thỏa thuận Cấp phép này mà trao lợi ích cho họ (hoặc trao quyền có lợi cho họ). Ngoài điều này ra, không người hay công ty nào khác sẽ là bên thụ hưởng thứ ba của Thỏa thuận Cấp phép này.
-
-14.5 HẠN CHẾ VỀ XUẤT KHẨU. PREVIEW PHẢI TUÂN THEO PHÁP LUẬT VÀ QUY ĐỊNH VỀ XUẤT KHẨU CỦA HOA KỲ. BẠN PHẢI TUÂN THỦ TẤT CẢ PHÁP LUẬT VÀ QUY ĐỊNH VỀ XUẤT KHẨU TRONG NƯỚC VÀ QUỐC TẾ ÁP DỤNG CHO PREVIEW. NHỮNG LUẬT NÀY BAO GỒM CÁC HẠN CHẾ VỀ ĐIỂM ĐẾN, NGƯỜI DÙNG CUỐI VÀ MỤC ĐÍCH SỬ DỤNG CUỐI.
-
-14.6 Bạn không được phép chỉ định hoặc chuyển nhượng Thỏa thuận Cấp phép mà không có sự chấp thuận trước bằng văn bản của Google, và mọi nỗ lực chuyển nhượng mà không có chấp thuận như vậy sẽ vô hiệu lực. Bạn sẽ không được giao phó các trách nhiệm hoặc nghĩa vụ của mình theo Thỏa thuận Cấp phép này khi chưa có sự phê duyệt trước bằng văn bản của Google.
-
-14.7 Thỏa thuận Cấp phép này và mối quan hệ giữa bạn với Google theo Thỏa thuận Cấp phép sẽ được điều chỉnh bởi pháp luật của Tiểu bang California, không xét tới các quy định về xung đột pháp luật của họ. Bạn và Google đồng ý trình lên theo thẩm quyền tài phán duy nhất của các tòa án bên trong quận Santa Clara, California để giải quyết bất kỳ vấn đề pháp lý nào phát sinh từ Thỏa thuận Cấp phép này. Không kể điều này, bạn đồng ý rằng Google sẽ vẫn được phép xin các lệnh chế tài của tòa (hoặc một hình thức chế tài pháp lý khẩn cấp tương đương) ở bất kỳ vùng tài phán nà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">Tôi đã đọc và đồng ý với các điều khoản và điều kiện trên</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>Trong tài liệu này</h2>
- <ol>
- <li><a href="#device-preview">Thiết lập thiết bị phần cứng</a>
- <ol>
- <li><a href="#ota">Nhận cập nhật qua sóng vô tuyến</a></li>
- <li><a href="#flash">Flash thủ công thiết bị</a></li>
- <li><a href="#revertDevice">Gỡ cài đặt</a></li>
- </ol>
- </li>
- <li><a href="#setupAVD">Thiết lập bộ giả lập</a></li>
- </ol>
- </div>
-</div>
-
-<p>
- Để chạy và kiểm thử ứng dụng của bạn trên nền tảng mới, bạn cần phải thiết lập môi trường thời gian chạy Android N
-. Bạn có thể thực hiện điều đó bằng một trong các cách sau:
-</p>
-
-<ul>
- <li>Cài đặt Android N trên một thiết bị phần cứng được hỗ trợ, hoặc</li>
- <li>Thiết lập một bộ giả lập Android chạy Android N</li>
-</ul>
-
-<p>
- Nếu bạn muốn có một môi trường để kiểm thử khả năng tương thích cơ bản của ứng dụng của bạn trên
- nền tảng mới này, tất cả những gì bạn cần là APK hiện tại của bạn và một thiết bị phần cứng hoặc
- bộ giả lập. Bạn không nhất thiết phải cập nhật môi trường phát triển đầy đủ
- để thực hiện kiểm thử cơ bản.
-</p>
-
-<p>
- Nếu bạn muốn sửa đổi ứng dụng của mình để nhắm mục tiêu đến Android N hoặc sử dụng các API Android N mới,
- bạn cần thiết lập một môi trường phát triển được cập nhật để hỗ trợ
- Android N. <a href="{@docRoot}preview/setup-sdk.html">Thiết lập để Phát triển dành cho
- Android N</a> có các chi tiết.
-</p>
-
-
-<h2 id="device-preview">Thiết lập thiết bị phần cứng</h2>
-
-<p>
- Bản N Developer Preview cung cấp các cập nhật hệ thống cho một loạt các thiết bị phần cứng
- mà bạn có thể sử dụng để kiểm thử ứng dụng của bạn, từ điện thoại tới máy tính bảng và TV.
-</p>
-
-<p>
- Nếu bạn có quyền truy cập vào một thiết bị được hỗ trợ, bạn có thể cập nhật nó thành bản dựng theo mốc của Preview dành cho
- Nhà phát triển bằng một trong những cách sau:
-</p>
-
-<ul>
- <li><strong>Đăng ký cập nhật hệ thống tự động qua vô tuyến cho thiết bị</strong> thông qua
- <a href="https://g.co/androidbeta">Chương trình Android Beta</a>. Sau khi đăng ký, thiết bị của bạn sẽ nhận được
- qua sóng vô tuyến các cập nhật định kỳ về tất cả bản dựng theo mốc trong bản N Developer Preview. Cách tiếp cận này
- được khuyến khích bởi nó cho phép bạn chuyển tiếp liền mạch từ môi trường hiện tại của bạn
- qua nhiều bản phát hành khác nhau của N Developer Preview.</li>
- <li><strong>Tải xuống ảnh hệ thống của Developer Preview và flash thiết bị</strong>.
- Các cập nhật qua vô tuyến không được cung cấp tự động cho các thiết bị mà bạn flash thủ công, nhưng
- bạn có thể đăng ký Chương trình Android Beta cho các thiết bị đó để nhận cập nhật qua vô tuyến. </li>
-</ul>
-
-<h3 id="ota">Đăng ký cập nhật tự động qua vô tuyến cho thiết bị</h3>
-
-<p>
- Nếu bạn có quyền truy cập vào một thiết bị được hỗ trợ (xem danh sách trong bảng
- Tải xuống), bạn có thể nhận được cập nhật qua sóng vô tuyến để xem trước các phiên bản của Android
- bằng cách đăng ký <a href="https://g.co/androidbeta">Chương trình Android Beta</a> cho thiết bị. Các cập nhật này được
- tự động tải xuống và sẽ cập nhật thiết bị của bạn giống như các bản cập nhật
- hệ thống chính thức.
-</p>
-
-<p>
- Bạn có thể hủy đăng ký thiết bị bất cứ lúc nào. Thiết bị sẽ nhận được bản cập nhật qua vô tuyến
- của phiên bản Android sản xuất mới nhất khả dụng cho thiết bị đó
- (ví dụ, Android 6.0 Marshmallow). Việc cập nhật yêu cầu phải thiết lập lại thiết bị
- hoàn toàn, vì vậy dữ liệu người dùng trên thiết bị sẽ được gỡ bỏ. Hãy đảm bảo <strong>sao lưu
- dữ liệu quan trọng</strong> trước khi hủy đăng ký thiết bị.
-</p>
-
-<p>
- Để biết thêm thông tin và đăng ký thiết bị của bạn, xem
- trang web <a href="https://g.co/androidbeta">Chương trình Android Beta</a>.
-</p>
-
-<p class="note"><strong>Lưu ý:</strong>
- Việc hủy đăng ký yêu cầu phải cài đặt lại toàn bộ thiết bị. Trước hết hãy sao lưu
- các dữ liệu quan trọng.
-</p>
-
-<h3 id="flash">Flash thiết bị thủ công</h3>
-
-<p>
- Bất cứ lúc nào bạn cũng có thể tải xuống ảnh hệ thống mới nhất của Developer Preview và
- flash thủ công nó vào thiết bị của bạn. Xem bảng dưới đây để tải xuống ảnh hệ thống
- cho thiết bị kiểm thử của bạn. Việc flash thủ công thiết bị sẽ hữu ích nếu bạn cần
- kiểm soát chính xác môi trường kiểm thử hoặc cần phải cài đặt lại thường xuyên,
- chẳng hạn như cho kiểm thử tự động.
-</p>
-
-<!-- You can flash by ota or system image --><p>
- Việc cài đặt ảnh hệ thống trên thiết bị <strong>sẽ gỡ bỏ tất cả dữ liệu khỏi
- thiết bị</strong>, vì vậy trước hết bạn nên sao lưu dữ liệu của mình.
-</p>
-
-<p>
- Sau khi sao lưu dữ liệu thiết bị và tải xuống ảnh hệ thống bên dưới
- khớp với thiết bị của bạn, hãy làm theo hướng dẫn tại <a href="https://developers.google.com/android/nexus/images#instructions">developers.google.com/android</a>
- để flash ảnh này vào thiết bị của bạn.
-</p>
-
-<p>
- Các ảnh hệ thống được flash thủ công <strong>không
- tự động nhận cập nhật qua vô tuyến</strong> cho các bản dựng theo mốc sau này của
- Developer Preview. Hãy đảm bảo giữ cho môi trường của bạn được cập nhật và flash một
- ảnh hệ thống mới tại mỗi mốc của Developer Preview.
-</p>
-
-<p>
- Nếu bạn quyết định muốn nhận cập nhật qua vô tuyến sau khi đã flash thủ công thiết bị,
- tất cả những gì bạn cần làm là đăng ký <a href="https://g.co/androidbeta">Chương trình Android
- Beta</a> cho thiết bị. Bạn có thể đăng ký thiết bị bất cứ lúc nào để nhận được
- bản cập nhật qua vô tuyến tiếp theo của Preview.
-</p>
-
-<table>
- <tr>
- <th scope="col">Thiết bị</th>
- <th scope="col">Tải xuống / Tổng kiểm</th>
- </tr>
-
- <tr id="bullhead">
- <td>Nexus 5X <br>"bullhead"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >bullhead-npd90g-factory-7a0ca1bc.tgz</a><br>
- MD5: e7a9a3061335c1e0c8be2588f13290af<br>
- SHA-1: 7a0ca1bcfa51bbefde34243603bc79c7dec214a1
- </td>
- </tr>
-
- <tr id="shamu">
- <td>Nexus 6 <br>"shamu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >shamu-npd90g-factory-f7a4e3a9.tgz</a><br>
- MD5: 2fb572ddcfca67bb1d741be97492a9ed<br>
- SHA-1: f7a4e3a96c797827492998e855c8f9efbfc8559a
- </td>
- </tr>
-
- <tr id="angler">
- <td>Nexus 6P <br>"angler"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >angler-npd90g-factory-cd9ac81e.tgz</a><br>
- MD5: 2370c30f3ef1d0684c1de5216a5d90fe<br>
- SHA-1: cd9ac81ec7f4a646ac6054eecbf2ea4c4b89b054
- </td>
- </tr>
-
- <tr id="volantis">
- <td>Nexus 9 <br>"volantis"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantis-npd90g-factory-41b55406.tgz</a><br>
- MD5: cefa78950141da2a7c75e887717e3c8f<br>
- SHA-1: 41b554060263a7ef16e4be8422cbd6caca26e00f
- </td>
- </tr>
-
- <tr id="volantisg">
- <td>Nexus 9G <br>"volantisg"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantisg-npd90g-factory-610492be.tgz</a><br>
- MD5: 2f36dc0d0fab02ab78be500677ec239f<br>
- SHA-1: 610492bedfc4127023040ecb2c89239a78a900ad
- </td>
- </tr>
-
- <tr id="fugu">
- <td>Nexus Player <br>"fugu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >fugu-npd90g-factory-0fe95694.tgz</a><br>
- MD5: f4cb48f919e4c29c631de21416c612e2<br>
- SHA-1: 0fe95694e7bc41e4c3ac0e4438cd77102a0aa8b4
- </td>
- </tr>
-
- <tr id="ryu">
- <td>Pixel C <br>"ryu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >ryu-npd90g-factory-f4da981c.tgz</a><br>
- MD5: d9f0e40b6c20d274831e8a7d285fd887<br>
- SHA-1: f4da981c70576133321e2858e52fe2c990e68a75
- </td>
- </tr>
-
- <tr id="seed">
- <td>General Mobile 4G (Android One) <br>"seed"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >seed_l8150-npd90g-factory-48f59c99.tgz</a><br>
- MD5: 0ed565c509594072822d71c65b48ec8e<br>
- SHA-1: 48f59c99ac43d1cd2f5656a283bb9868581663a8
- </td>
- </tr>
-
-</table>
-
-<h3 id="revertDevice">Gỡ cài đặt Preview khỏi thiết bị</h3>
-
-<p>
- Nếu bạn muốn gỡ cài đặt preview khỏi thiết bị, bạn có thể thực hiện điều đó bằng một trong
- những cách sau: </p>
- <ul>
- <li><strong>Lấy thông số kỹ thuật của ảnh hệ thống nguyên gốc</strong> và sau đó flash thủ công
- nó cho thiết bị.
- <ul>
- <li>Đối với <strong>các thiết bị Nexus và Pixel C</strong>, xem
- trang <a href="http://developers.google.com/android/nexus/images">Ảnh Cài đặt Gốc
- cho Thiết bị Nexus</a> để tìm bản tải xuống. </li>
- <li>Đối với <strong>các thiết bị khác</strong>, vui lòng liên hệ trực tiếp với nhà sản xuất
-thiết bị. Hoặc, nếu thiết bị được hỗ trợ
- trong Chương trình Android Beta, bạn có thể đăng ký
- chương trình cho thiết bị và sau đó hủy đăng ký thiết bị (xem bên dưới).</li>
- </ul>
- </li>
- <li><strong>Hủy đăng ký thiết bị khỏi Chương trình Android Beta</strong>. Nếu
- thiết bị được đăng ký <a href="https://g.co/androidbeta">Chương trình Android Beta
- </a>, không quan trọng là thiết bị nào, bạn có thể dễ dàng hủy đăng ký thiết bị khỏi chương trình này.
- <p>
- Thiết bị sẽ nhận được bản cập nhật qua vô tuyến của phiên bản Android sản xuất
- mới nhất có sẵn cho thiết bị đó (ví dụ, Android 6.0 Marshmallow).
- Bản cập nhật yêu cầu thiết lập lại toàn bộ thiết bị, vì vậy dữ liệu người dùng trên thiết bị sẽ được
- gỡ bỏ. Hãy đảm bảo rằng bạn đã <strong>sao lưu dữ liệu quan trọng</strong> trước khi
- hủy đăng ký thiết bị.
- </p>
- </li>
-</ul>
-
-<p class="note"><strong>Lưu ý:</strong>
- Việc gỡ cài đặt ảnh hệ thống của Developer Preview trước khi
- kết thúc chương trình yêu cầu phải thiết lập lại toàn bộ thiết bị và gỡ bỏ tất cả dữ liệu người dùng
- trên thiết bị.
-</p>
-
-
-<h2 id="setupAVD">Thiết lập bộ giả lập</h2>
-
-<p>Để sử dụng Bộ Giả Lập Android chạy Android N Preview, bạn cần
-tải xuống Android N Preview SDK và tạo một thiết bị ảo cho
-bộ giả lập.</p>
-
-<p>Đầu tiên, tải xuống Android N Preview SDK như sau (nếu bạn
-đã có nó trong khi <a href="{@docRoot}preview/setup-sdk.html">thiết lập
-để phát triển dành cho Android N</a>, bạn có thể bỏ qua phần này):
-
-<ol>
- <li>Trong Android Studio, Mở hộp thoại Settings
- (<strong>File > Settings</strong> trên Windows/Linux, hoặc
- <strong>Android Studio > Preferences</strong> trên Mac). Trong bảng điều khiển
- bên trái, chọn <strong>Appearance & Behavior >
- System Settings > Android SDK</strong>.
-
- <li>Nhấp vào tab <strong>SDK Platforms</strong>, rồi chọn hộp kiểm
- <strong>Android N Preview</strong>.</li>
-
- <li>Nhấp vào tab <strong>SDK Tools</strong>, rồi chọn
- <strong>Android SDK Build Tools</strong>, <strong>Android SDK
- Platform-Tools</strong>, và các hộp kiểm <strong>Android SDK Tools</strong>
-.
- </li>
-
- <li>Nhấp vào <strong>OK</strong> và chấp nhận thỏa thuận
- giấy phép cho bất kỳ gói nào sẽ được cài đặt.
- </li>
-</ol>
-
-<p>Giờ đây bạn sẽ có <strong>Android SDK Built-Tools 24.0 0 rc1</strong>,
-<strong>Platform-Tools 24.0.0 rc1</strong>, và <strong>SDK Tools
-25.0.9</strong>. Nếu bạn không cập nhật Các Công cụ SDK lên 25.0.9, bạn sẽ không
-thể chạy ảnh hệ thống x86_64 cho Android N.</p>
-
-
-<p>Bây giờ, hãy tạo một thiết bị ảo với ảnh hệ thống Android N:</p>
-
-<ol>
- <li>Mở Trình quản lý AVD bằng cách chọn <strong>Tools > Android >
- AVD Manager</strong>.</li>
- <li>Nhấp vào <strong>Create Virtual Device</strong>.</li>
- <li>Chọn một thiết bị chẳng hạn như Nexus 5X, Nexus 6P, Nexus 9, hoặc Android TV,
- rồi nhấp vào <strong>Next</strong>.</li>
- <li>Chọn ảnh hệ thống <strong>N</strong> (với
- <strong>x86</strong> ABI), rồi nhấp vào <strong>Next</strong>.
- (Hiện chỉ có ảnh hệ thống x86 được hỗ trợ với Bộ giả lập Android
-dành cho Preview Android N.)
- <li>Hoàn thành các bước cấu hình AVD còn lại và nhấp vào
- <strong>Finish</strong>.</li>
-</ol>
-
-<p>Giờ đây bạn có thể khởi chạy Bộ giả lập Android với AVD Preview Android N.</p>
-
-<p>
-Để có trải nghiệm tốt nhất trong Bộ giả lập Android, hãy cài đặt
-Android Studio 2.1 Preview, có hỗ trợ <a href="http://tools.android.com/tech-docs/emulator">Bộ giả lập Android 2.0 Beta</a>
-với hiệu suất nhanh hơn nhiều so với Bộ giả lập trong
-Android Studio 1.5.</p>
-
-<p class="note"><strong>Lưu ý:</strong>
- Nếu bạn hiện đang sử dụng Android Studio 2.0 Beta, một vấn đề đã được biết đến
- sẽ ngăn cản bạn tạo AVD bằng ảnh hệ thống của N Preview, vì vậy
- hiện bạn cần sử dụng preview của Android Studio 2.1 để tạo các AVD.
-</p>
-
-<p>Để biết thêm thông tin về tạo thiết bị ảo, hãy xem <a href="{@docRoot}tools/devices/index.html">Quản lý Thiết bị ảo</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/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/direct-boot.jd b/docs/html-intl/intl/vi/preview/features/direct-boot.jd
deleted file mode 100644
index 9b2a557..0000000
--- a/docs/html-intl/intl/vi/preview/features/direct-boot.jd
+++ /dev/null
@@ -1,181 +0,0 @@
-page.title=Khởi động Trực tiếp
-page.keywords=preview,sdk,direct boot
-page.tags=androidn
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>Trong tài liệu này</h2>
- <ol>
- <li><a href="#run">Yêu cầu Truy cập để Chạy trong quá trình Khởi động Trực tiếp</a></li>
- <li><a href="#access">Truy cập Bộ nhớ Lưu trữ Mã hóa của Thiết bị</a></li>
- <li><a href="#notification">Nhận thông báo Mở khóa của Người dùng</a></li>
- <li><a href="#migrating">Chuyển nhập Dữ liệu Có sẵn</a></li>
- <li><a href="#testing">Kiểm thử Ứng dụng Nhận biết Mã hóa của bạn</a></li>
- </ol>
-</div>
-</div>
-
-<p>Android N chạy trong chế độ <i>Khởi động Trực tiếp</i> an toàn
-khi thiết bị đã được bật nguồn nhưng người dùng chưa mở khóa
-thiết bị. Để hỗ trợ chế độ này, hệ thống cung cấp hai vị trí lưu trữ dữ liệu:</p>
-
-<ul>
-<li><i>Lưu trữ mã hóa thông tin xác thực</i>, là vị trí lưu trữ mặc định
-và chỉ khả dụng sau khi người dùng đã mở khóa thiết bị.</li>
-<li><i>Lưu trữ mã hóa thiết bị</i>, là vị trí lưu trữ khả dụng cho cả
-chế độ Khởi động Trực tiếp và sau khi người dùng đã mở khóa thiết bị.</li>
-</ul>
-
-<p>Theo mặc định, các ứng dụng không chạy trong quá trình chế độ Khởi động Trực tiếp.
-Nếu ứng dụng của bạn cần thực hiện hành động trong chế độ Khởi động Trực tiếp thì bạn có thể đăng ký
-các thành phần ứng dụng cần chạy trong chế độ này. Một số trường hợp sử dụng phổ biến
-cho các ứng dụng cần chạy trong chế độ Khởi động Trực tiếp gồm:</p>
-
-<ul>
-<li>Ứng dụng có thông báo theo lịch, như ứng dụng
-đồng hồ báo thức.</li>
-<li>Ứng dụng cung cấp các thông báo quan trọng cho người dùng như ứng dụng SMS.</li>
-<li>Ứng dụng cung cấp các dịch vụ trợ năng như Talkback.</li>
-</ul>
-
-<p>Nếu ứng dụng của bạn cần truy cập dữ liệu khi đang chạy trong chế độ Khởi động Trực tiếp thì hãy sử dụng
-lưu trữ mã hóa thiết bị. Bộ nhớ lưu trữ được mã hóa của thiết bị có chứa dữ liệu
-được mã hóa bằng một khóa chỉ khả dụng sau khi thiết bị đã thực hiện một
-lần khởi động được xác thực thành công.</p>
-
-<p>Đối với dữ liệu cần được mã hóa bằng một khóa liên kết tới thông tin xác thực
-của người dùng như mã PIN hoặc mật khẩu thì hãy sử dụng bộ nhớ lưu trữ mã hóa thông tin xác thực.
-Bộ nhớ lưu trữ mã hóa thông tin xác thực chỉ khả dụng sau khi người dùng đã mở khóa
-thành công thiết bị, tính đến khi người dùng khởi động lại thiết bị một lần nữa. Nếu
-người dùng mở màn hình khóa sau khi mở khóa thiết bị thì thao tác này không khóa
-bộ nhớ mã hóa thông tin xác thực.</p>
-
-<h2 id="run">Yêu cầu Truy cập để Chạy trong quá trình Khởi động Trực tiếp</h2>
-
-<p>Các ứng dụng phải đăng ký các thành phần của chúng với hệ thống trước khi chúng
-có thể chạy trong chế độ Khởi động Trực tiếp hoặc truy cập bộ nhớ lưu trữ
-mã hóa thiết bị. Ứng dụng đăng ký với hệ thống bằng cách đánh dấu các thành phần là
-<i>nhận biết mã hóa</i>. Để đánh dấu các thành phần của bạn là nhận biết mã hóa, hãy đặt thuộc tính
-<code>android:encryptionAware</code> thành true trong bản kê khai.<p>
-
-<p>Các thành phần nhận biết mã hóa có thể đăng ký để nhận một thông điệp truyền phát
-<code>LOCKED_BOOT_COMPLETED</code> từ
-hệ thống khi thiết bị được khởi động lại. Lúc này, bộ nhớ lưu trữ
-mã hóa thiết bị sẽ khả dụng và thành phần của bạn có thể thực thi các tác vụ cần được
-chạy trong chế độ Khởi động Trực tiếp, như kích hoạt báo thức đã đặt.</p>
-
-<p>Đoạn mã sau là một ví dụ về cách đăng ký một
-{@link android.content.BroadcastReceiver} là nhận biết mã hóa và thêm một
-bộ lọc ý định cho <code>LOCKED_BOOT_COMPLETED</code> trong bản kê khai của ứng dụng:</p>
-
-<pre>
-<receiever
- android:encryptionAware="true" >
- ...
- <intent-filter>
- <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
- </intent-filter>
-</receiver>
-</pre>
-
-<p>Khi người dùng đã mở khóa thiết bị thì mọi thành phần có thể truy cập
-cả bộ nhớ lưu trữ mã hóa thiết bị lẫn bộ nhớ lưu trữ mã hóa thông tin xác thực.</p>
-
-<h2 id="access">Truy cập Bộ nhớ Lưu trữ Mã hóa của Thiết bị</h2>
-
-<p>Để truy cập bộ nhớ lưu trữ mã hóa thiết bị, hãy tạo một thực thể
-{@link android.content.Context} thứ hai bằng cách gọi
-<code>Context.createDeviceEncryptedStorageContext()</code>. Tất cả các lệnh gọi
-API bộ nhớ lưu trữ đều sử dụng bối cảnh này để truy cập bộ nhớ lưu trữ mã hóa thiết bị.
-Ví dụ sau sẽ truy cập bộ nhớ lưu trữ mã hóa của thiết bị và mở một tệp
-dữ liệu ứng dụng có sẵn:</p>
-
-<pre>
-Context directBootContext = Context.createDeviceEncryptedStorageContext();
-// Access appDataFilename that lives in device encrypted storage
-FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
-// Use inStream to read content...
-</pre>
-
-<p>Chỉ sử dụng bộ nhớ lưu trữ mã hóa của thiết bị
-cho thông tin phải truy cập được trong chế độ Khởi động Trực tiếp.
-Không sử dụng bộ nhớ lưu trữ mã hóa của thiết bị làm bộ lưu trữ mã hóa cho mục đích chung.
-Đối với thông tin cá nhân của người dùng, hoặc dữ liệu được mã hóa không cần thiết
-trong chế độ Khởi động Trực tiếp thì hãy sử dụng bộ nhớ lưu trữ mã hóa thông tin xác thực.</p>
-
-<h2 id="notification">Nhận thông báo Mở khóa của Người dùng</h2>
-
-<p>Một khi người dùng mở khóa thiết bị sau khi khởi động lại, ứng dụng của bạn có thể chuyển sang
-truy cập bộ nhớ lưu trữ mã hóa thông tin xác thực và sử dụng các dịch vụ thông thường của hệ thống
-phụ thuộc vào thông tin xác thực người dùng.</p>
-
-<p>Để nhận thông báo khi người dùng mở khóa thiết bị sau khi khởi động lại,
-hãy đăng ký một {@link android.content.BroadcastReceiver} từ một thành phần đang chạy
-để lắng nghe thông báo <code>ACTION_USER_UNLOCKED</code>. Hoặc bạn có thể
-nhận thông báo có sẵn {@link android.content.Intent#ACTION_BOOT_COMPLETED
-ACTION_BOOT_COMPLETED} lúc này sẽ chỉ báo thiết bị đã khởi động xong và
-người dùng đã mở khóa thiết bị.</p>
-
-<p>Bạn có thể truy vấn trực tiếp để biết người dùng đã mở khóa thiết bị hay chưa bằng cách gọi
-<code>UserManager.isUserUnlocked()</code>.</p>
-
-<h2 id="migrating">Chuyển nhập Dữ liệu Có sẵn</h2>
-
-<p>Nếu người dùng cập nhật thiết bị của họ để sử dụng chế độ Khởi động Trực tiếp thì bạn có thể có dữ liệu
-hiện hữu cần được chuyển nhập sang bộ nhớ lưu trữ mã hóa của thiết bị. Sử dụng
-<code>Context.migrateSharedPreferencesFrom()</code> và
-<code>Context.migrateDatabaseFrom()</code> để chuyển nhập dữ liệu về tùy chọn và cơ sở dữ liệu
-giữa bộ nhớ lưu trữ mã hóa thông tin xác thực và bộ nhớ lưu trữ mã hóa thiết bị.</p>
-
-<p>Hãy phán đoán hợp lý nhất khi quyết định dữ liệu nào nên chuyển nhập từ bộ nhớ lưu trữ mã hóa
-thông tin xác thực sang bộ nhớ lưu trữ mã hóa thiết bị. Bạn không nên di chuyển
-thông tin cá nhân của người dùng như mật khẩu hoặc các mã thông báo cấp quyền sang
-bộ nhớ lưu trữ mã hóa thiết bị. Trong một số trường hợp, bạn có thể cần quản lý
-các bộ dữ liệu riêng biệt trong hai bộ lưu trữ mã hóa.</p>
-
-<h2 id="testing">Kiểm thử Ứng dụng Nhận biết Mã hóa của bạn</h2>
-
-<p>Kiểm thử ứng dụng nhận biết mã hóa bằng cách sử dụng chế độ Khởi động Trực tiếp mới. Có
-hai cách để kích hoạt Khởi động Trực tiếp.</p>
-
-<p class="caution"><strong>Cẩn trọng:</strong> Kích hoạt Khởi động Trực tiếp
-sẽ xóa sạch mọi dữ liệu người dùng trên thiết bị.</p>
-
-<p>Trên các thiết bị được hỗ trợ có Android N được cài đặt, kích hoạt
-Khởi động Trực tiếp bằng cách thực hiện một trong các thao tác sau:</p>
-
-<ul>
-<li>Trên thiết bị, bật <b>Developer options</b> nếu chưa hãy bật bằng cách
-vào <b>Settings > About phone</b> và nhấn vào <b>Build number</b>
-bảy lần. Khi màn hình tùy chọn cho nhà phát triển khả dụng, hãy vào
-<b>Settings > Developer options</b> và chọn
-<b>Convert to file encryption</b>.</li>
-<li>Sử dụng các lệnh shell adb sau để kích hoạt chế độ Khởi động Trực tiếp:
-<pre class="no-pretty-print">
-$ adb reboot-bootloader
-$ fastboot --wipe-and-use-fbe
-</pre>
-</li>
-</ul>
-
-<p>Cũng có một chế độ Khởi động Trực tiếp giả lập trong trường hợp bạn cần chuyển đổi
-các chế độ trên thiết bị thử nghiệm. Chỉ nên sử dụng chế độ Giả lập trong quá trình
-phát triển và có thể làm mất dữ liệu. Để kích hoạt chế độ Khởi động Trực tiếp giả lập,
-hãy đặt mẫu hình khóa cho thiết bị, chọn "No thanks" nếu được yêu cầu
- bật màn hình khởi động bảo mật khi đặt một mẫu hình khóa và sau đó sử dụng
-lệnh shell adb sau:</p>
-
-<pre class="no-pretty-print">
-$ adb shell sm set-emulate-fbe true
-</pre>
-
-<p>Hãy sử dụng lệnh sau để tắt chế độ Khởi động Trực tiếp giả lập:</p>
-
-<pre class="no-pretty-print">
-$ adb shell sm set-emulate-fbe false
-</pre>
-
-<p>Sử dụng các lệnh này có thể khiến cho thiết bị khởi động lại.</p>
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/multi-window.jd b/docs/html-intl/intl/vi/preview/features/multi-window.jd
deleted file mode 100644
index 5b2cb54..0000000
--- a/docs/html-intl/intl/vi/preview/features/multi-window.jd
+++ /dev/null
@@ -1,582 +0,0 @@
-page.title=Hỗ trợ đa cửa sổ
-page.metaDescription=Hỗ trợ mới trong Android N để hiển thị nhiều hơn một ứng dụng cùng lúc.
-page.keywords="multi-window", "android N", "split screen", "free-form"
-
-@jd:body
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>Trong tài liệu này</h2>
- <ol>
- <li><a href="#overview">Tổng quan</a></li>
- <li><a href="#lifecycle">Vòng đời đa cửa sổ</a></li>
- <li><a href="#configuring">Cấu hình Ứng dụng của bạn cho Chế độ
- Đa cửa sổ</a></li>
- <li><a href="#running">Chạy Ứng dụng của bạn trong Chế độ Đa cửa sổ</a></li>
- <li><a href="#testing">Kiểm thử Hỗ trợ Đa cửa sổ của Ứng dụng của bạn</a></li>
- </ol>
- <h2>Xem thêm</h2>
- <ol>
- <li><a class="external-link" href="https://github.com/googlesamples/android-MultiWindowPlayground">Ứng dụng mẫu Multi-Windows
- Playground</a></li>
- </ol>
- </div>
-</div>
-
-<p>
- Android N thêm hỗ trợ cho hiển thị đồng thời nhiều hơn một ứng dụng
- vào cùng một thời điểm. Trên thiết bị cầm tay, hai ứng dụng có thể chạy song song hoặc
- trên dưới nhau trong chế độ <em>chia màn hình</em>. Trên thiết bị TV, ứng dụng có thể
- sử dụng chế độ <em>ảnh trong ảnh</em> để tiếp tục phát lại video trong khi người dùng
- đang tương tác với ứng dụng khác.
-</p>
-
-<p>
- Nếu bạn dựng ứng dụng của bạn bằng N Preview SDK, bạn có thể cấu hình cách ứng dụng của bạn
- xử lý hiển thị đa cửa sổ. Ví dụ, bạn có thể quy định
- các kích thước tối thiểu cho phép của hoạt động của bạn. Bạn cũng có thể vô hiệu hóa hiển thị đa cửa sổ cho
- ứng dụng của bạn, đảm bảo rằng hệ thống chỉ hiển thị ứng dụng của bạn trong chế độ
- toàn màn hình.
-</p>
-
-<h2 id="overview">Tổng quan</h2>
-
-<p>
- Android N cho phép một vài ứng dụng chia sẻ màn hình ngay lập tức. Ví
- dụ, người dùng có thể chia đôi màn hình ra, xem một trang web ở bên trái màn hình
- trong khi đang tạo email ở bên phải màn hình. Trải nghiệm này của người dùng phụ thuộc vào
- thiết bị:
-</p>
-
-<ul>
- <li>Thiết bị cầm tay đang chạy Android N có chế độ
- chia màn hình. Trong chế độ này, hệ thống sẽ lấp đầy màn hình bằng hai ứng dụng
- song song nhau hoặc trên dưới. Người dùng có thể kéo đường chia
- phân tách hai ứng dụng để hiển thị một ứng dụng rộng hơn và ứng dụng còn lại nhỏ đi.
- </li>
-
- <li>Trên Trình phát Nexus đang chạy Android N, các ứng dụng có thể tự đặt chúng
- vào trong <a href="picture-in-picture.html">chế độ ảnh trong ảnh</a>, cho phép
- các ứng dụng này tiếp tục hiển thị nội dung khi người dùng duyệt web hoặc tương tác với
- ứng dụng khác.
- </li>
-
- <li>Các nhà sản xuất thiết bị có kích cỡ lớn hơn có thể chọn kích hoạt chế độ
- hình dạng tự do, trong đó người dùng có thể tự do thay đổi kích thước mỗi hoạt động. Nếu
- nhà sản xuất đã kích hoạt tính năng này, ngoài
- chế độ chia màn hình, thiết bị sẽ còn có chế độ hình dạng tự do.
- </li>
-</ul>
-
-<img src="{@docRoot}preview/images/mw-splitscreen.png" alt="" width="650" srcset="{@docRoot}preview/images/mw-splitscreen.png 1x,
- {@docRoot}preview/images/mw-splitscreen_2x.png 2x," id="img-split-screen" />
-<p class="img-caption">
- <strong>Hình 1.</strong> Hai ứng dụng chạy trong chế độ chia màn hình.
-</p>
-
-<p>
- Người dùng có thể chuyển vào trong chế độ đa cửa sổ bằng các cách sau:
-</p>
-
-<ul>
- <li>Nếu người dùng mở màn hình <a href="{@docRoot}guide/components/recents.html">Overview
- </a> và thực hiện nhấn giữ
- tiêu đề của hoạt động, họ có thể kéo hoạt động đó đến phần được tô sáng của
- màn hình để đặt hoạt động đó vào trong chế độ đa cửa sổ.
- </li>
-
- <li>Nếu người dùng thực hiện nhấn giữ nút Overview, thiết bị sẽ đặt
- hoạt động hiện tại vào trong chế độ đa cửa sổ, và mở màn hình Overview để
- cho phép người dùng chọn một hoạt động khác để chia sẻ màn hình.
- </li>
-</ul>
-
-<p>
- Người dùng có thể <a href="{@docRoot}guide/topics/ui/drag-drop.html">kéo và
- thả</a> từ một hoạt động sang một hoạt động khác trong khi các hoạt động này vẫn đang chia sẻ
- cùng một màn hình. (Trước đó, người dùng chỉ có thể kéo và thả dữ liệu trong một hoạt động
- đơn lẻ.)
-</p>
-
-<h2 id="lifecycle">Vòng đời đa cửa sổ</h2>
-
-<p>
- Chế độ đa cửa sổ không thay đổi <a href="{@docRoot}training/basics/activity-lifecycle/index.html">vòng đời
- của hoạt động</a>.
-</p>
-
-<p>
- Trong chế độ đa cửa sổ, chỉ hoạt động mà người dùng đã tương tác gần đây nhất
- mới hoạt động trong khoảng thời gian xác định. Hoạt động này được cân nhắc <em>ở trên cùng</em>.
- Tất cả các hoạt động khác sẽ ở trong tình trạng tạm dừng, ngay cả khi chúng vẫn hiển thị.
- Tuy nhiên, hệ thống sẽ cấp mức ưu tiên cao hơn cho hoạt động bị tạm dừng nhưng vẫn hiển thị này
- so với các hoạt động không hiển thị. Nếu người dùng tương tác với một trong những
- hoạt động bị tạm dừng, hoạt động đó sẽ được tiếp tục, và hoạt động trên cùng trước đó
- sẽ bị tạm dừng.
-</p>
-
-<p class="note">
- <strong>Lưu ý:</strong> Trong chế độ đa cửa sổ, một ứng dụng có thể trong trạng thái
- tạm dừng và vẫn hiển thị với người dùng. Ứng dụng có thể cần tiếp tục
- các hoạt động của nó thậm chí trong khi đamg bị tạm dừng. Ví dụ, một ứng dụng phát video đang ở trong
- chế độ tạm dừng nhưng vẫn hiển thị thì sẽ tiếp tục hiển thị video của nó. Vì lý do
- này, chúng tôi đề nghị các hoạt động phát video <em>không</em> tạm dừng
- video trong trình xử lý{@link android.app.Activity#onPause onPause()}.
- Thay vào đó, các ứng dụng nên tạm dừng video trong {@link android.app.Activity#onStop
- onStop()}, và tiếp tục phát lại trong {@link android.app.Activity#onStart
- onStart()}.
-</p>
-
-<p>
- Khi người dùng đặt một ứng dụng vào trong chế độ đa cửa sổ, hệ thống sẽ thông báo về
- hoạt động thay đổi cấu hình đó, như được quy định trong <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Xử lý Thay đổi
- Thời gian chạy</a>. Về cơ bản, thay đổi này có ngụ ý về vòng đời hoạt động tương tự
- vì khi hệ thống thông báo cho ứng dụng rằng thiết bị đã chuyển
- từ chế độ hướng dọc sang chế độ ngang, ngoại trừ trường hợp các kích thước của thiết bị
- đã được thay đổi thay vì chỉ bị hoán đổi. Như đã thảo luận trong phần <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Xử lý Thay đổi
- Thời gian chạy</a>, hoạt động của bạn có thể tự xử lý thay đổi cấu hình này, hoặc nó
- có thể cho phép hệ thống hủy hoạt động này và tạo lại nó với
- các kích thước mới.
-</p>
-
-<p>
- Nếu người dùng thay đổi kích thước của một cửa sổ và làm nó rộng hơn ở bất kỳ kích thước nào,
- hệ thống sẽ thay đổi kích thước của hoạt động để khớp với hành động của người dùng và phát hành <a href="{@docRoot}guide/topics/resources/runtime-changes.html">các thay đổi thời gian chạy</a>
- nếu cần. Nếu ứng dụng bị trễ lại trong khi vẽ các vùng mới được hiển thị,
- hệ thống sẽ tạm thời lấp đầy các vùng đó bằng một màu được quy định bởi thuộc tính {@link
- android.R.attr#windowBackground windowBackground} hoặc bằng thuộc tính kiểu
- <code>windowBackgroundFallback</code> mặc định.
-</p>
-
-<h2 id="configuring">Cấu hình Ứng dụng của bạn cho Chế độ Đa cửa sổ</h2>
-
-<p>
- Nếu ứng dụng của bạn nhắm đến Android N, bạn có thể cấu hình cách thức và
- liệu các hoạt động của ứng dụng có hỗ trợ hiển thị đa cửa sổ không. Bạn có thể đặt
- các thuộc tính trong bản kê khai của bạn để kiểm soát cả kích cỡ và bố trí.
- Cài đặt thuộc tính của hoạt động gốc sẽ áp dụng cho tất cả các hoạt động
- nằm trong ngăn xếp hoạt động của nó.
-</p>
-
-<p class="note">
- <strong>Lưu ý:</strong> Nếu bạn dựng một ứng dụng đa hướng bằng phiên bản
- SDK thấp hơn Android N, và người dùng sử dụng ứng dụng đó trong
- chế độ đa cửa sổ, hệ thống sẽ bắt buộc thay đổi kích thước của ứng dụng đó. Hệ thống sẽ hiển thị một
- hộp hội thoại cảnh báo người dùng rằng ứng dụng này có thể có hành vi không như kỳ vọng. Hệ thống
- <em>không</em> thay đổi kích cỡ của ứng dụng có hướng cố định; nếu
- người dùng cố mở một ứng dụng có hướng cố định dưới chế độ đa cửa sổ,
- ứng dụng này sẽ chiếm toàn bộ màn hình.
-</p>
-
-<h4 id="resizeableActivity">android:resizeableActivity</h4>
-<p>
- Đặt thuộc tính này trong <code><activity></code> của bản kê khai của bạn hoặc node
- <code><application></code> để kích hoạt hoặc vô hiệu hóa hiển thị
- đa cửa sổ:
-</p>
-
-<pre>
-android:resizeableActivity=["true" | "false"]
-</pre>
-
-<p>
- Nếu thuộc tính này được đặt thành true, hoạt động có thể được khởi chạy trong
- chế độ chia màn hình và hình dạng tự do. Nếu thuộc tính này được đặt thành false,
- hoạt động sẽ không hỗ trợ chế độ đa cửa sổ. Nếu giá trị này là false, và
- người dùng cố khởi chạy hoạt động trong chế độ đa cửa sổ, hoạt động đó sẽ
- chiếm toàn màn hình.
-</p>
-
-<p>
- Nếu ứng dụng của bạn nhắm đến Android N, nhưng bạn chưa quy định giá trị
- cho thuộc tính này, giá trị của thuộc tính sẽ mặc định đặt là true.
-</p>
-
-<h4 id="supportsPictureInPicture">android:supportsPictureInPicture</h4>
-
-<p>
- Đặt thuộc tính này trong node <code><activity></code> của bản kê khai của bạn để
- cho biết liệu hoạt động này có hỗ trợ hiển thị ảnh trong ảnh hay không. Thuộc tính
- này được bỏ qua nếu <code>android:resizeableActivity</code> là false.
-</p>
-
-<pre>
-android:supportsPictureInPicture=["true" | "false"]
-</pre>
-
-<h3 id="layout">Thuộc tính bố trí</h3>
-
-<p>
- Với Android N, phần tử bản kê khai <code><layout></code>
- có hỗ trợ một số thuộc tính sẽ ảnh hưởng đến cách hoạt động có hành vi như thế nào trong
- chế độ đa cửa sổ:
-</p>
-
-<dl>
- <dt>
- <code>android:defaultWidth</code>
- </dt>
-
- <dd>
- Chiều rộng mặc định của hoạt động khi được khởi chạy trong chế độ hình dạng tự do.
- </dd>
-
- <dt>
- <code>android:defaultHeight</code>
- </dt>
-
- <dd>
- Chiều cao mặc định của hoạt động khi được khởi chạy trong chế độ hình dạng tự do.
- </dd>
-
- <dt>
- <code>android:gravity</code>
- </dt>
-
- <dd>
- Vị trí ban đầu của hoạt động khi được khởi chạy trong chế độ hình dạng tự do. Xem tham chiếu
- {@link android.view.Gravity} về các giá trị phù hợp.
- </dd>
-
- <dt>
- <code>android:minimalSize</code>
- </dt>
-
- <dd>
- Chiều cao và chiều rộng tối thiểu cho hoạt động trong cả chế độ chia màn hình
- và chế độ hình dạng tự do. Nếu người dùng di chuyển thanh phân chia trong chế độ chia màn hình
- để làm cho hoạt động nhỏ hơn mức tối thiểu quy định, hệ thống sẽ cắt xén
- hoạt động đó thành kích cỡ mà người dùng yêu cầu.
- </dd>
-</dl>
-
-<p>
- Ví dụ, đoạn mã sau đây sẽ cho biết cách quy định kích thước và vị trí mặc định
- của một hoạt động và kích thước tối thiểu của nó, khi hoạt động được hiển thị trong
- chế độ hình dạng tự do:
-</p>
-
-<pre>
-<activity android:name=".MyActivity">
- <layout android:defaultHeight="500dp"
- android:defaultWidth="600dp"
- android:gravity="top|end"
- android:minimalSize="450dp" />
-</activity>
-</pre>
-
-<h2 id="running">Chạy Ứng dụng của bạn trong Chế độ Đa cửa sổ</h2>
-
-<p>
- Android N có tính năng mới để hỗ trợ các ứng dụng có thể chạy
- trong chế độ đa cửa sổ.
-</p>
-
-<h3 id="disabled-features">Các tính năng bị vô hiệu hóa trong Chế độ Đa cửa sổ</h3>
-
-<p>
- Một số tính năng bị vô hiệu hóa hoặc bỏ qua khi một thiết bị đang ở chế độ
- đa cửa sổ bởi các tính năng này không có ý nghĩa đối với một hoạt động có thể đang chia sẻ
- màn hình thiết bị với các hoạt động hoặc ứng dụng khác. Các tính năng đó bao gồm:
-
-<ul>
- <li>Ví dụ, một vài tùy chọn tùy chỉnh <a href="{@docRoot}training/system-ui/index.html">System UI</a>
- sẽ bị vô hiệu hóa, ứng dụng không thể ẩn thanh trạng thái
- nếu chúng đang chạy trong chế độ toàn màn hình.
- </li>
-
- <li>Hệ thống sẽ bỏ qua các thay đổi đối với thuộc tính <code><a href=
- "{@docRoot}guide/topics/manifest/activity-element.html#screen"
- >android:screenOrientation</a></code>.
- </li>
-</ul>
-
-<h3 id="change-notification">Thông báo và truy vấn thay đổi đa cửa sổ</h3>
-
-<p>
- Các phương thức mới sau đây đã được thêm vào lớp {@link android.app.Activity}
- để hỗ trợ hiển thị đa cửa sổ. Để biết chi tiết về mỗi phương thức, xem
- <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Tham chiếu N Preview SDK</a>.
-</p>
-
-<dl>
- <dt>
- <code>Activity.inMultiWindow()</code>
- </dt>
-
- <dd>
- Lệnh gọi để tìm hiểu xem hoạt động có đang ở chế độ đa cửa sổ hay không.
- </dd>
-
- <dt>
- <code>Activity.inPictureInPicture()</code>
- </dt>
-
- <dd>
- Lệnh gọi để tìm hiểu xem hoạt động có đang ở chế độ ảnh trong ảnh hay không.
-
- <p class="note">
- <strong>Lưu ý:</strong> Chế độ Ảnh trong ảnh là trường hợp đặc biệt
- của chế độ đa cửa sổ. Nếu <code>myActivity.inPictureInPicture()</code>
- trả về là true, thì <code>myActivity.inMultiWindow()</code> cũng trả về là
- true.
- </p>
- </dd>
-
- <dt>
- <code>Activity.onMultiWindowChanged()</code>
- </dt>
-
- <dd>
- Hệ thống sẽ gọi phương thức này bất cứ khi nào hoạt động đi vào trong hay ra ngoài
- chế độ đa cửa sổ. Hệ thống sẽ chuyển cho phương thức giá trị true nếu
- hoạt động đang đi vào chế độ đa cửa sổ, và false nếu hoạt động
- đang rời chế độ đa cửa sổ.
- </dd>
-
- <dt>
- <code>Activity.onPictureInPictureChanged()</code>
- </dt>
-
- <dd>
- Hệ thống sẽ gọi phương thức này bất cứ khi nào hoạt động đi vào trong hay ra ngoài
- chế độ ảnh trong ảnh. Hệ thống sẽ chuyển cho phương thức một giá trị true nếu
- hoạt động đang đi vào chế độ ảnh trong ảnh, và false nếu hoạt động
- đang rời chế độ ảnh trong ảnh.
- </dd>
-</dl>
-
-<p>
- Cũng có các phiên bản {@link android.app.Fragment} của từng phương thức
- này, ví dụ như <code>Fragment.inMultiWindow()</code>.
-</p>
-
-<h3 id="entering-pip">Vào chế độ ảnh trong ảnh</h3>
-
-<p>
- Để đặt một hoạt động vào trong chế độ ảnh trong ảnh, hãy gọi phương thức mới
- <code>Activity.enterPictureInPicture()</code>. Phương thức này sẽ không có ảnh hưởng nếu
- thiết bị không hỗ trợ chế độ ảnh trong ảnh. Để biết thêm thông tin,
- hãy xem tài liệu <a href="picture-in-picture.html">Ảnh trong ảnh</a>.
-</p>
-
-<h3 id="launch">Khởi chạy Hoạt động Mới trong Chế độ Đa cửa sổ</h3>
-
-<p>
- Khi bạn khởi chạy một hoạt động mới, bạn có thể gợi ý cho hệ thống rằng hoạt động
- mới sẽ được hiển thị liền kề hoạt động hiện tại, nếu có thể. Để thực hiện điều
- này, hãy dùng cờ
- <code>Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT</code>. Việc chuyển
- cờ này yêu cầu hành vi sau:
-</p>
-
-<ul>
- <li>Nếu thiết bị đang ở chế độ chia màn hình, hệ thống sẽ cố tạo ra
- hoạt động mới bên cạnh hoạt động đã khởi chạy nó, vì vậy hai hoạt động này
- sẽ chia sẻ cùng một màn hình. Hệ thống không được đảm bảo có thể làm được điều này, nhưng nó
- làm cho các hoạt động ở liền kề nhau nếu có thể.
- </li>
-
- <li>Nếu thiết bị không ở chế độ chia màn hình, cờ này sẽ không có tác dụng.
- </li>
-</ul>
-
-<p>
- Nếu thiết bị đang ở chế độ hình dạng tự do và bạn đang khởi chạy một hoạt động mới, bạn có thể
- quy định kích thước của hoạt động mới và vị trí màn hình bằng cách gọi
- <code>ActivityOptions.setLaunchBounds()</code>. Phương thức này sẽ không có ảnh hưởng nếu
- thiết bị không ở chế độ đa cửa sổ.
-</p>
-
-<p class="note">
- <strong>Lưu ý:</strong> Nếu bạn khởi chạy một hoạt động trong một ngăn xếp tác vụ, hoạt động
- này sẽ thay thế hoạt động trên màn hình, kế thừa tất cả các thuộc tính đa cửa sổ
- của nó. Nếu bạn muốn khởi chạy hoạt động mới dưới dạng một cửa sổ
- riêng trong chế độ đa cửa sổ, bạn phải khởi chạy nó trong một ngăn xếp tác vụ mới.
-</p>
-
-<h3 id="dnd">Hỗ trợ kéo và thả</h3>
-
-<p>
- Người dùng có thể <a href="{@docRoot}guide/topics/ui/drag-drop.html">kéo và
- thả</a> dữ liệu từ một hoạt động này sang một hoạt động khác trong khi các hoạt động này vẫn đang
- chia sẻ cùng một màn hình. (Trước đó, người dùng chỉ có thể kéo và thả dữ liệu trong một
- hoạt động đơn lẻ.) Vì lý do này, bạn có thể muốn thêm tính năng kéo và thả
- vào ứng dụng của bạn nếu ứng dụng của bạn hiện không hỗ trợ tính năng này.
-</p>
-
-<p>
- N Preview SDK mở rộng gói <a href="{@docRoot}reference/android/view/package-summary.html"><code>android.view</code></a>
- để hỗ trợ kéo và thả giữa các ứng dụng. Để biết chi tiết về các lớp và phương thức
- sau, hãy xem <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Tham chiếu N
- Preview SDK</a>.
-</p>
-
-<dl>
- <dt>
- <code>android.view.DropPermissions</code>
- </dt>
-
- <dd>
- Đối tượng mã thông báo chịu trách nhiệm về việc quy định các quyền cấp cho ứng dụng
- nhận được thao tác thả.
- </dd>
-
- <dt>
- <code>View.startDragAndDrop()</code>
- </dt>
-
- <dd>
- Bí danh mới cho {@link android.view.View#startDrag View.startDrag()}. Để
- kích hoạt kéo và thả giữa các hoạt động, hãy chuyển cờ mới
- <code>View.DRAG_FLAG_GLOBAL</code>. Nếu bạn cần cấp quyền URI cho
- hoạt động của đối tượng nhận, hãy chuyển các cờ mới
- <code>View.DRAG_FLAG_GLOBAL_URI_READ</code> hoặc
- <code>View.DRAG_FLAG_GLOBAL_URI_WRITE</code>, nếu phù hợp.
- </dd>
-
- <dt>
- <code>View.cancelDragAndDrop()</code>
- </dt>
-
- <dd>
- Hủy thao tác kéo hiện đang diễn ra. Chỉ có thể được gọi bằng
- ứng dụng đã khởi nguồn thao tác kéo đó.
- </dd>
-
- <dt>
- <code>View.updateDragShadow()</code>
- </dt>
-
- <dd>
- Thay thế bóng kéo cho thao tác kéo hiện đang diễn ra. Chỉ có thể
- được gọi bằng ứng dụng đã khởi nguồn thao tác kéo đó.
- </dd>
-
- <dt>
- <code>Activity.requestDropPermissions()</code>
- </dt>
-
- <dd>
- Yêu cầu các quyền cho URI nội dung đã chuyển với {@link
- android.content.ClipData} có chứa trong {@link android.view.DragEvent}.
- </dd>
-</dl>
-
-<h2 id="testing">Kiểm thử Hỗ trợ Đa cửa sổ của Ứng dụng của bạn</h2>
-
-<p>
- Dù cho bạn có cập nhật ứng dụng của mình lên Android N hay không, bạn cũng nên
- xác minh cách thiết bị có hành vi như thế nào trong chế độ đa cửa sổ trong trường hợp người dùng cố khởi chạy nó
- ở chế độ đa cửa sổ trên thiết bị chạy Android N.
-</p>
-
-<h3 id="configuring">Cấu hình Thiết bị Kiểm thử</h3>
-
-<p>
- Nếu bạn cài đặt Android N trên thiết bị, chế độ chia màn hình
- sẽ được tự động hỗ trợ.
-</p>
-
-<h3 id="test-non-n">Nếu ứng dụng của bạn không được dựng bằng N Preview SDK</h3>
-
-<p>
- Nếu bạn dựng ứng dụng của mình bằng N Preview SDK, và người dùng cố sử dụng ứng dụng này
- trong chế độ đa cửa sổ, hệ thống sẽ bắt buộc thay đổi kích thước của ứng dụng đó trừ khi ứng dụng này
- khai báo hướng cố định.
-</p>
-
-<p>
- Nếu ứng dụng không khai báo hướng cố định, bạn nên khởi chạy ứng dụng của bạn
- trên thiết bị đang chạy Android N và cố đặt ứng dụng vào trong
- chế độ chia màn hình. Xác minh rằng trải nghiệm người dùng là
- chấp nhận được khi ứng dụng bị bắt buộc thay đổi kích cỡ.
-</p>
-
-<p>
- Nếu ứng dụng khai báo hướng cố định, bạn nên cố đặt ứng dụng vào trong
- chế độ đa cửa sổ. Xác minh xem khi bạn làm như vậy, ứng dụng vẫn giữ
- ở chế độ toàn màn hình.
-</p>
-
-<h3 id="test-mw">Nếu bạn hỗ trợ chế độ đa cửa sổ</h3>
-
-<p>
- Nếu bạn dựng ứng dụng của bạn bằng N Preview SDK và chưa vô hiệu hóa
- hỗ trợ đa cửa sổ, hãy xác minh hành vi sau dưới chế độ chia màn hình
- và chế độ hình dạng tự do.
-</p>
-
-<ul>
- <li>Khởi chạy ứng dụng trong chế độ toàn màn hình, rồi chuyển sang chế độ đa cửa sổ bằng cách
- nhấn giữ nút Overview. Xác minh rằng ứng dụng đã chuyển đổi đúng cách.
- </li>
-
- <li>Khởi chạy ứng dụng trực tiếp trong chế độ đa cửa sổ, và xác thực rằng ứng dụng này
- khởi chạy đúng cách. Bạn có thể khởi chạy ứng dụng trong chế độ đa cửa sổ bằng cách nhấn vào nút
- Overview, rồi nhấn giữ vào thanh tiều đề của ứng dụng của bạn và kéo nó
- đến một trong những vùng được tô sáng trên màn hình.
- </li>
-
- <li>Thay đổi kích thước ứng dụng của bạn trong chế độ chia màn hình bằng cách kéo đường phân chia.
- Xác minh rằng ứng dụng thay đổi kích thước mà không bị lỗi, và các phần tử UI cần thiết
- vẫn hiển thị.
- </li>
-
- <li>Nếu bạn đã quy định các kích cỡ tối thiểu cho ứng dụng của bạn, hãy cố thay đổi kích thước của ứng dụng
- sao cho nhỏ hơn các kích thước đã quy định đó. Xác minh rằng bạn không thể thay đổi kích cỡ của ứng dụng để
- nhỏ hơn kích cỡ tối thiểu đã quy định.
- </li>
-
- <li>Thông qua tất cả các bài kiểm thử, hãy xác minh rằng hiệu năng của ứng dụng của bạn là có thể chấp nhận được. Ví
- dụ, xác minh rằng sẽ không bị trễ quá lâu để cập nhật UI sau khi
- ứng dụng bị thay đổi kích thước.
- </li>
-</ul>
-
-<h4 id="test-checklist">Danh sách kiểm thử</h4>
-
-<p>
- Để xác minh hiệu năng ứng dụng của bạn trong chế độ đa cửa sổ, hãy thử các thao tác
- sau. Bạn nên thử các thao tác này trong cả chế độ chia màn hình và
- chế độ đa cửa sổ, trừ khi có lưu ý khác.
-</p>
-
-<ul>
- <li>Vào và rời chế độ đa cửa sổ.
- </li>
-
- <li>Hãy chuyển từ ứng dụng của bạn sang ứng dụng khác, và xác minh rằng ứng dụng có hành vi
- đúng cách trong khi nó hiển thị nhưng không hoạt động. Ví dụ nếu ứng dụng của bạn đang
- phát video, hãy xác minh rằng video tiếp tục phát trong khi người dùng đang
- tương tác với một ứng dụng khác.
- </li>
-
- <li>Trong chế độ chia màn hình, hãy thử di chuyển thanh phân chia để làm cho ứng dụng của bạn
- rộng hơn và nhỏ hơn. Thử các thao tác này trong cả cấu hình song song và
- trên dưới. Xác minh rằng ứng dụng không bị treo,
- các chức năng thiết yếu vẫn hiển thị, và thao tác thay đổi kích cỡ không quá
- lâu.
- </li>
-
- <li>Thực hiện một vài thao tác thay đổi kích cỡ nối tiếp nhau thật nhanh. Xác minh rằng ứng dụng
- của bạn không bị lỗi hoặc bị rò rỉ bộ nhớ. Để biết thông tin về kiểm tra việc sử dụng bộ nhớ của
- ứng dụng, xem <a href="{@docRoot}tools/debugging/debugging-memory.html">
- Kiểm tra Sử dụng RAM của bạn</a>.
- </li>
-
- <li>Sử dụng ứng dụng của bạn như thông thường trong một số cấu hình cửa sổ khác nhau, và
- xác minh rằng ứng dụng có hành vi bình thường. Xác minh rằng có thể đọc được các chữ và
- các phần tử UI không quá nhỏ để tương tác với chúng.
- </li>
-</ul>
-
-<h3 id="test-disabled-mw">Nếu bạn đã vô hiệu hóa hỗ trợ đa cửa sổ</h3>
-
-<p>
- Nếu bạn đã vô hiệu hóa hỗ trợ đa cửa sổ bằng cách đặt
- <code>android:resizableActivity="false"</code>, bạn nên khởi chạy ứng dụng của mình trên
- thiết bị chạy Android N và cố đặt ứng dụng này vào trong
- cả chế độ hình dạng tự do và chế độ chia màn hình. Xác minh xem khi bạn làm như vậy, ứng dụng vẫn giữ
- ở chế độ toàn màn hình.
-</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/vi/preview/features/picture-in-picture.jd b/docs/html-intl/intl/vi/preview/features/picture-in-picture.jd
deleted file mode 100644
index 65799db..0000000
--- a/docs/html-intl/intl/vi/preview/features/picture-in-picture.jd
+++ /dev/null
@@ -1,186 +0,0 @@
-page.title=Ảnh trong ảnh
-page.keywords=preview,sdk,PIP,Picture-in-picture
-page.tags=androidn
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>Trong tài liệu này</h2>
-<ol>
- <li><a href="#declaring">Khai báo Hoạt động hỗ trợ
-Ảnh trong ảnh</a></li>
- <li><a href="#pip_button">Chuyển Hoạt động sang Ảnh trong ảnh</a>
-</li>
- <li><a href="#handling_ui">Xử lý UI trong chế độ Ảnh trong ảnh</a>
-</li>
- <li><a href="#continuing_playback">Tiếp tục phát lại video ở chế độ
-Ảnh trong ảnh</a></li>
- <li><a href="#best">Thực hành Tốt nhất</a></li>
-</ol>
-
-<h2>Xem thêm</h2>
-<ol>
- <li><a href="{@docRoot}preview/features/multi-window.html">Hỗ trợ
-đa cửa sổ</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>Trong Android N, người dùng Android TV đã có thể xem video
-trong một cửa sổ được ghim vào một góc màn hình khi điều hướng bên trong
-các ứng dụng. Chế độ Ảnh trong ảnh (PIP) cho phép ứng dụng chạy một hoạt động
-video trong cửa sổ được ghim trong khi một hoạt động khác tiếp tục chạy
-ngầm. Cửa sổ PIP cho phép người dùng thực hiện nhiều việc khi đang sử dụng ứng dụng của bạn,
-giúp cho người dùng năng suất hơn.</p>
-
-<p>Ứng dụng của bạn có thể quyết định khi nào thì kích hoạt chế độ PIP. Sau đây là một vài ví dụ về
-thời điểm chuyển vào chế độ PIP:</p>
-
-<ul>
-<li>Ứng dụng của bạn có thể chuyển một video vào chế độ PIP khi người dùng điều hướng
-rời khỏi video đó để duyệt nội dung khác.</li>
-<li>Ứng dụng của bạn có thể chuyển một video sang chế độ PIP khi người dùng xem đoạn cuối
- của một tập nội dung. Màn hình chính sẽ hiển thị thông tin quảng cáo
-hoặc tóm tắt về tập tiếp theo trong loạt video đó.</li>
-<li>Ứng dụng của bạn có thể mang lại cho người dùng một cách để xếp hàng các nội dung bổ sung khi
-họ đang xem một video. Video đó sẽ tiếp tục được phát trong chế độ PIP trong khi màn hình
-chính hiển thị hoạt động chọn nội dung.</li>
-</ul>
-
-<p>Cửa sổ PIP có kích thước 240x135 dp và được hiển thị trên lớp trên cùng ở một trong
-bốn góc của màn hình được hệ thống chọn. Người dùng có thể gọi ra một menu PIP
-, cho phép họ bật tắt cửa sổ PIP lên toàn màn hình hoặc đóng cửa sổ
-PIP bằng cách bấm giữ nút <b>Home</b> trên điều khiển từ xa. Nếu một video
-khác bắt đầu phát trên màn hình chính, cửa sổ PIP sẽ tự động
-được đóng. Người dùng cũng có thể đóng cửa sổ PIP thông qua nút Recents.</p>
-
-<img src="{@docRoot}preview/images/pip-active.png" />
-<p class="img-caption"><strong>Hình 1.</strong> Một video Ảnh trong ảnh
-được hiển thị ở góc màn hình khi người dùng duyệt nội dung
-trên màn hình chính.</p>
-
-<p>PIP sử dụng các API đa cửa sổ có trong Android N để
-tạo cửa sổ video nằm chồng được ghim. Để thêm chế độ PIP vào ứng dụng bạn cần
-đăng ký các hoạt động hỗ trợ PIP, chuyển hoạt động của bạn sang chế độ PIP khi
-cần và đảm bảo cho các phần tử UI sẽ bị ẩn đi và phát lại video vẫn tiếp tục khi
-hoạt động đó ở trong chế độ PIP.</p>
-
-<h2 id="declaring">Khai báo Hoạt động hỗ trợ Ảnh trong ảnh</h2>
-
-<p>Theo mặc định, hệ thống không tự động hỗ trợ PIP cho các ứng dụng.
-Nếu bạn muốn hỗ trợ chế độ PIP trong ứng dụng của mình, hãy đăng ký hoạt động
-video trong bản kê khai bằng cách đặt
-<code>android:supportsPictureInPicture</code> và
-<code>android:resizeableActivity</code> thành <code>true</code>. Ngoài ra, hãy chỉ định
-hoạt động của bạn xử lý các thay đổi cấu hình bố trí để hoạt động đó
-không khởi chạy lại khi có các thay đổi về bố trí trong quá trình chuyển tiếp chế độ PIP.</p>
-
-<pre>
-<activity android:name="VideoActivity"
- android:resizeableActivity="true"
- android:supportsPictureInPicture="true"
- android:configChanges=
- "screenSize|smallestScreenSize|screenLayout|orientation"
- ...
-</pre>
-
-<p>Khi đăng ký hoạt động của bạn, hãy nhớ rằng trong chế độ PIP, hoạt động
-của bạn sẽ được hiển thị trong một cửa sổ nhỏ nằm chồng trên màn hình TV. Các hoạt động
-phát lại video với UI tối giản sẽ đem đến trải nghiệm người dùng tốt nhất. Các hoạt động
-có chứa những phần tử UI nhỏ có thể không đem lại trải nghiệm người dùng đạt yêu cầu
-khi được chuyển sang chế độ PIP bởi người dùng không thể thấy các chi tiết của phần tử UI
-trong cửa sổ PIP.</p>
-
-<h2 id="pip_button">Chuyển Hoạt động sang Ảnh trong ảnh</h2>
-
-Khi bạn cần chuyển hoạt động của mình sang chế độ PIP, hãy gọi
-<code>Activity.enterPictureInPicture()</code>. Ví dụ sau sẽ chuyển
-sang chế độ PIP khi người dùng chọn một nút PIP riêng trên thanh điều khiển
-media:</p>
-
-<pre>
-@Override
-public void onActionClicked(Action action) {
- if (action.getId() == R.id.lb_control_picture_in_picture) {
- getActivity().enterPictureInPicture();
- return;
- }
- ...
-</pre>
-
-<p>Thêm một nút PIP vào thanh điều khiển media của bạn sẽ cho phép người dùng dễ dàng chuyển
-sang chế độ PIP khi điều khiển phát lại video.</p>
-
-<img src="{@docRoot}preview/images/pip-button.png" />
-<p class="img-caption"><strong>Hình 1.</strong> Một nút Ảnh trong ảnh
-trên thanh điều khiển media.</p>
-
-<p>Android N có một lớp
-<code>PlaybackControlsRow.PictureInPictureAction</code> mới định nghĩa
-các hành động ở chế độ PIP trên thanh điều khiển và sử dụng biểu tượng PIP.</p>
-
-<h2 id="handling_ui">Xử lý UI trong chế độ Ảnh trong ảnh</h2>
-
-<p>Khi hoạt động của bạn vào trong chế độ PIP thì hoạt động đó chỉ nên hiển thị phát lại
-video. Hãy xóa các phần tử UI trước khi hoạt động của bạn vào chế độ PIP,
-và khôi phục các phần tử này khi hoạt động quay lại chế độ toàn màn hình.
-Ghi đè phương thức <code>Activity.onPictureInPictureChanged()</code> hoặc
-<code>Fragment.onPictureInPictureChanged()</code> và bật hoặc
-tắt các phần tử UI khi cần thiết, ví dụ:</p>
-
-<pre>
-@Override
-public void onPictureInPictureChanged(boolean inPictureInPicture) {
- if (inPictureInPicture) {
- // Hide the controls in picture-in-picture mode.
- ...
- } else {
- // Restore the playback UI based on the playback status.
- ...
- }
-}
-</pre>
-
-<h2 id="continuing_playback">Tiếp tục phát lại video ở chế độ
-Ảnh trong ảnh</h2>
-
-<p>Khi hoạt động của bạn chuyển sang chế độ PIP thì hệ thống sẽ coi hoạt động đó đang ở trong
-trạng thái tạm dừng và sẽ gọi phương thức <code>onPause()</code> của hoạt động. Việc phát lại
-video không nên được tạm dừng và cần được tiếp tục phát nếu hoạt động
-bị tạm dừng do chế độ PIP. Hãy kiểm tra chế độ PIP trong phương thức
-<code>onPause()</code> của hoạt động và xử lý việc phát lại cho phù hợp, ví
-dụ:</p>
-
-<pre>
-@Override
-public void onPause() {
- // If called due to PIP, do not pause playback
- if (inPictureInPicture()) {
- // Continue playback
- ...
- }
- // If paused but not in PIP, pause playback if necessary
- ...
-}
-</pre>
-
-<p>Khi hoạt động của bạn chuyển ra khỏi chế độ PIP để quay trở về chế độ toàn màn hình thì
-hệ thống sẽ tiếp tục hoạt động của bạn và gọi phương thức <code>onResume()</code>.</p>
-
-<h2 id="best">Thực hành Tốt nhất</h2>
-
-<p>PIP được dành cho các hoạt động phát lại video toàn màn hình. Khi chuyển
-hoạt động của bạn vào chế độ PIP, hãy tránh hiển thị bất kỳ nội dung nào ngoài video.
-Theo dõi khi hoạt động của bạn vào chế độ PIP và ẩn đi các phần tử UI, như mô tả
-trong <a href="#handling_ui">Xử lý UI trong chế độ Ảnh trong ảnh</a>.</p>
-
-<p>Vì cửa sổ PIP được hiển thị dưới dạng cửa sổ nổi ở góc
-màn hình do đó bạn cần tránh hiển thị các thông tin quan trọng trong màn hình chính
-ở bất kỳ vùng nào có thể bị che khuất bởi cửa sổ PIP.</p>
-
-<p>Theo mặc định, khi một hoạt động đang ở trong chế độ PIP thì nó sẽ không nhận tiêu điểm nhập vào. Để
-tiếp nhận các sự kiện nhập vào khi ở chế độ PIP, hãy sử dụng
-<code>MediaSession.setMediaButtonReceiver()</code>.</p>
diff --git a/docs/html-intl/intl/vi/preview/features/scoped-folder-access.jd b/docs/html-intl/intl/vi/preview/features/scoped-folder-access.jd
deleted file mode 100644
index d6db0ec..0000000
--- a/docs/html-intl/intl/vi/preview/features/scoped-folder-access.jd
+++ /dev/null
@@ -1,124 +0,0 @@
-page.title=Truy cập Thư mục theo Phạm vi
-page.keywords=preview,sdk,scoped directory access
-page.tags=androidn
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>Trong tài liệu này</h2>
- <ol>
- <li><a href="#accessing">Truy cập một Thư mục lưu trữ bên ngoài</a></li>
- <li><a href="#removable">Truy cập một Thư mục trên Phương tiện tháo lắp được</a></li>
- <li><a href="#best">Thực hành Tốt nhất</a></li>
- </ol>
-</div>
-</div>
-
-<p>Các ứng dụng như ứng dụng ảnh thường chỉ cần truy cập đến các thư mục đã quy định trong
-bộ nhớ ngoài như thư mục <code>Pictures</code>. Các phương pháp
- hiện tại để truy cập bộ nhớ lưu trữ ngoài vẫn chưa được thiết kế để dễ dàng cho phép
-truy cập thư mục đích cho những kiểu ứng dụng này. Ví dụ:</p>
-
-<ul>
-<li>Việc yêu cầu {@link android.Manifest.permission#READ_EXTERNAL_STORAGE}
-hoặc {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} trong bản kê khai của bạn
-sẽ cho phép truy cập đến tất cả các thư mục công khai trên bộ nhớ lưu trữ ngoài, mà có thể
-cấp nhiều quyền truy cập hơn những gì ứng dụng của bạn cần.</li>
-<li>Sử dụng
-<a href="{@docRoot}guide/topics/providers/document-provider.html">Khuôn khổ
- Truy cập Kho lưu trữ</a> thường khiến người dùng chọn thư mục
-thông qua UI hệ thống. Đây là điều không cần thiết nếu ứng dụng của bạn luôn truy cập cùng
-một thư mục bên ngoài.</li>
-</ul>
-
-<p>Android N cung cấp một API mới được đơn giản hóa để truy cập
-các thư mục lưu trữ bên ngoài thường dùng. </p>
-
-<h2 id="accessing">Truy cập một Thư mục lưu trữ bên ngoài</h2>
-
-<p>Sử dụng lớp <code>StorageManager</code> để lấy thực thể
-<code>StorageVolume</code> phù hợp. Sau đó tạo một ý định bằng cách gọi phương thức
-<code>StorageVolume.createAccessIntent()</code> của thực thể đó.
-Sử dụng ý định này để truy cập các thư mục lưu trữ bên ngoài. Để lấy danh sách
-tất cả các ổ đĩa, bao gồm các ổ đĩa media có thể tháo lắp, hãy sử dụng
-<code>StorageManager.getVolumesList()</code>.</p>
-
-<p>Đoạn mã sau là một ví dụ về cách mở thư mục
-<code>Pictures</code> trong bộ nhớ lưu trữ chính được chia sẻ:</p>
-
-<pre>
-StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
-StorageVolume volume = sm.getPrimaryVolume();
-Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
-startActivityForResult(intent, request_code);
-</pre>
-
-<p>Hệ thống sẽ cố gắng cấp quyền truy cập tới thư mục bên ngoài và nếu
-cần sẽ xác nhận quyền truy cập với người dùng bằng một UI được đơn giản hóa:</p>
-
-<img src="{@docRoot}preview/images/scoped-folder-access-framed.png" srcset="{@docRoot}preview/images/scoped-folder-access-framed.png 1x,
-{@docRoot}preview/images/scoped-folder-access-framed_2x.png 2x" />
-<p class="img-caption"><strong>Hình 1.</strong> Một ứng dụng yêu cầu
-truy cập tới thư mục Pictures.</p>
-
-<p>Nếu người dùng cấp quyền truy cập, hệ thống sẽ gọi phương thức ghi đè
-<code>onActivityResult()</code> của bạn với mã kết quả là
-<code>Activity.RESULT_OK</code> và dữ liệu ý định có chứa URI. Hãy sử dụng
-URI được cung cấp để truy cập thông tin thư mục, giống như sử dụng các URI
-được trả về bởi
-<a href="{@docRoot}guide/topics/providers/document-provider.html">Khuôn khổ
- Truy cập Kho lưu trữ</a>.</p>
-
-<p>Nếu người dùng không cấp quyền truy cập, hệ thống sẽ gọi phương thức ghi đè
-<code>onActivityResult()</code> của bạn với mã kết quả là
-<code>Activity.RESULT_CANCELED</code> và dữ liệu ý định có giá trị null.</p>
-
-<p class="note"><b>Lưu ý</b>: Lấy quyền truy cập tới một thư mục bên ngoài được chỉ định
-cũng sẽ cấp quyền truy cập tới các thư mục con thuộc thư mục đó.</p>
-
-<h2 id="removable">Truy cập một Thư mục trên phương tiện tháo lắp được</h2>
-
-<p>Để sử dụng Truy cập Thư mục theo Phạm vi nhằm truy cập các thư mục trên phương tiện có thể tháo lắp,
-trước hết, hãy thêm một {@link android.content.BroadcastReceiver} để lắng nghe
-thông báo {@link android.os.Environment#MEDIA_MOUNTED}, ví dụ:</p>
-
-<pre>
-<receiver
- android:name=".MediaMountedReceiver"
- android:enabled="true"
- android:exported="true" >
- <intent-filter>
- <action android:name="android.intent.action.MEDIA_MOUNTED" />
- <data android:scheme="file" />
- </intent-filter>
-</receiver>
-</pre>
-
-<p>Khi người dùng kết nối một phương tiện có thể tháo lắp như thẻ SD thì hệ thống sẽ gửi một thông báo
-{@link android.os.Environment#MEDIA_MOUNTED}. Thông báo này
-sẽ cung cấp một đối tượng <code>StorageVolume</code> trong dữ liệu ý định mà bạn có thể
-sử dụng để truy cập các thư mục trên phương tiện có thể tháo lắp đó. Ví dụ sau
-sẽ truy cập thư mục <code>Pictures</code> trên phương tiện có thể tháo lắp:</p>
-
-<pre>
-// BroadcastReceiver has already cached the MEDIA_MOUNTED
-// notification Intent in mediaMountedIntent
-StorageVolume volume = (StorageVolume)
- mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
-volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
-startActivityForResult(intent, request_code);
-</pre>
-
-<h2 id="best">Thực hành Tốt nhất</h2>
-
-<p>Khi có thể, hãy duy trì URI truy cập thư mục bên ngoài để bạn không phải
-lặp lại yêu cầu người dùng cấp quyền truy cập. Khi người dùng đã cấp quyền truy cập, hãy gọi
-<code>getContentResolver().takePersistableUriPermssion()</code> với
-URI truy cập thư mục. Hệ thống sẽ duy trì URI và các yêu cầu
-truy cập sau này sẽ trả về <code>RESULT_OK</code> và không hiển thị UI xác nhận cho
-người dùng nữa.</p>
-
-<p>Nếu người dùng từ chối quyền truy cập đến một thư mục bên ngoài thì đừng
-yêu cầu truy cập lại ngay lập tức. Lặp đi lặp lại yêu cầu truy cập sẽ dẫn đến trải nghiệm
-người dùng không tốt.</p>
diff --git a/docs/html-intl/intl/vi/preview/features/security-config.jd b/docs/html-intl/intl/vi/preview/features/security-config.jd
deleted file mode 100644
index 797e198..0000000
--- a/docs/html-intl/intl/vi/preview/features/security-config.jd
+++ /dev/null
@@ -1,745 +0,0 @@
-page.title=Cấu hình Bảo mật mạng
-page.keywords=androidn,security,network
-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="#manifest">Thêm một tệp Cấu hình Bảo mật mạng</a></li>
- <li><a href="#CustomTrust">Tùy chỉnh các CA đáng tin cậy</a>
- <ol>
- <li><a href="#ConfigCustom">Cấu hình một CA tùy chỉnh đáng tin cậy</a></li>
- <li><a href="#LimitingCas">Giới hạn bộ CA đáng tin cậy</a></li>
- <li><a href="#TrustingAdditionalCas">Tin cậy các CA bổ sung</a></li>
- </ol>
- </li>
- <li><a href="#TrustingDebugCa">Các CA chỉ trong chế độ gỡ lỗi</a></li>
- <li><a href="#UsesCleartextTraffic">Không sử dụng truyền gửi văn bản chưa mã hóa</a></li>
- <li><a href="#CertificatePinning">Ghim chứng chỉ</a></li>
- <li><a href="#ConfigInheritance">Hành vi Kế thừa cấu hình</a></li>
- <li><a href="#FileFormat">Định dạng Tệp cấu hình</a></li>
-</ol>
-</div>
-</div>
-
-
-<p>
- Android N có tính năng Cấu hình Bảo mật mạng
- cho phép ứng dụng tùy chỉnh các cài đặt bảo mật mạng trong một tệp
- cấu hình khai báo an toàn mà không cần sửa đổi mã nguồn ứng dụng. Các cài đặt này có thể
- được cấu hình cho các miền cụ thể và cho một ứng dụng cụ thể. Các khả năng
- chính của tính năng này như sau:
-</p>
-
-<ul>
- <li>
- <b>Nguồn tin cậy tùy chỉnh:</b> Tùy chính các Nhà cung cấp chứng chỉ (CA)
- nào được tin cậy cho các kết nối bảo mật của một ứng dụng. Ví
- dụ, tin cậy các chứng chỉ tự ký đặc biệt hoặc hạn chế
- bộ CA công khai mà ứng dụng tin cậy.
- </li>
-
- <li>
- <b>Chỉ khống chế khi gỡ lỗi:</b> Gỡ lỗi các kết nối bảo mật một cách an toàn trong một ứng dụng
- mà không thêm rủi ro cho cơ sở cài đặt.
- </li>
-
- <li>
- <b>Không sử dụng truyền gửi văn bản chưa mã hóa:</b> Bảo vệ các ứng dụng khỏi việc
- vô tình sử dụng truyền gửi văn bản chưa mã hóa.
- </li>
-
- <li>
- <b>Ghim chứng chỉ:</b> Giới hạn kết nối bảo mật của ứng dụng
- trong các chứng chỉ đặc biệt.
- </li>
-</ul>
-
-
-<h2 id="manifest">Thêm một Tệp Cấu hình Bảo mật mạng</h2>
-
-<p>
- Tính năng Cấu hình Bảo mật mạng sử dụng một tệp XML làm nơi bạn sẽ chỉ định
- các cài đặt cho ứng dụng của mình. Bạn phải bổ sung một mục nhập trong bản kê khai của
- ứng dụng để trỏ đến tệp này. Đoạn mã sau của một bản kê khai
- minh họa cách tạo mục nhập này:
-</p>
-
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-...
-<app ...>
- <meta-data android:name="android.security.net.config"
- android:resource="@xml/network_security_config" />
- ...
-</app>
-</pre>
-
-<h2 id="CustomTrust">Tùy chỉnh các CA đáng tin cậy</h2>
-
-<p>
- Một ứng dụng có thể muốn tin cậy một bộ các CA tùy chỉnh thay vì mặc định
- của nền tảng. Những lý do phổ biến nhất cho điều này là:
-</p>
-
-<ul>
- <li>Kết nối tới một máy chủ có nhà cung cấp chứng chỉ riêng (tự ký,
- được cấp bởi một CA nội bộ của công ty, v.v.).
- </li>
-
- <li>Giới hạn bộ CA chỉ trong các CA mà bạn tin cậy thay vì mọi
- CA được cài đặt trước.
- </li>
-
- <li>Tin cậy các CA bổ sung không được kèm theo trong hệ thống.
- </li>
-</ul>
-
-<p>
- Theo mặc định, các kết nối bảo mật (vd: TLS, HTTPS) từ mọi ứng dụng sẽ tin cậy
- các CA của hệ thống được cài đặt trước và các ứng dụng nhắm mục tiêu mức API 23
- (Android M) và thấp hơn theo mặc định cũng tin cậy kho lưu trữ CA được người dùng bổ sung. Một
- ứng dụng có thể tùy chỉnh các kết nối của riêng nó bằng cách sử dụng {@code base-config} (dành cho
- tùy chỉnh trên phạm vi ứng dụng) hoặc {@code domain-config} (tùy chỉnh
- cho mỗi miền).
-</p>
-
-
-<h3 id="ConfigCustom">Cấu hình một CA tùy chỉnh</h3>
-
-<p>
- Giả sử bạn muốn kết nối tới máy chủ của mình có sử dụng các chứng chỉ
- SSL tự ký hoặc tới một máy chủ có chứng chỉ SSL được cấp bởi một CA không công khai
- mà bạn tin cậy, chẳng hạn như CA nội bộ của công ty.
-</p>
-
-<p>
- <code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">example.com</domain>
- <trust-anchors>
- <certificates src="@raw/my_ca"/>
- </trust-anchors>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-<p>
- Thêm chứng chỉ CA tự ký hoặc không công khai theo định dạng PEM hoặc DER vào
- {@code res/raw/my_ca}.
-</p>
-
-
-<h3 id="LimitingCas">Giới hạn bộ CA đáng tin cậy</h3>
-
-<p>
- Một ứng dụng không muốn tin cậy mọi CA được hệ thống tin cậy có thể
- chỉ định bộ CA hạn chế của riêng nó để tin cậy. Điều này sẽ bảo vệ
- ứng dụng khỏi các chứng chỉ lừa đảo được cấp bởi bất kỳ CA nào khác.
-</p>
-
-<p>
- Cấu hình để giới hạn bộ CA đáng tin cậy cũng giống như <a href="#TrustingACustomCa">Tin cậy một CA tùy chỉnh</a> cho một miền cụ thể ngoại trừ
- việc nhiều CA được cung cấp trong tài nguyên.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">secure.example.com</domain>
- <domain includeSubdomains="true">cdn.example.com</domain>
- <trust-anchors>
- <certificates src="@raw/trusted_roots"/>
- </trust-anchors>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-<p>
- Thêm các CA đáng tin cậy theo định dạng PEM hoặc DER vào {@code res/raw/trusted_roots}.
- Lưu ý rằng nếu sử dụng định dạng PEM thì tệp <em>chỉ</em> được chứa dữ liệu PEM
- và không có thêm dữ liệu văn bản. Bạn cũng có thể cung cấp nhiều
- phần tử <a href="#certificates"><code><certificates></code></a>
- thay vì một phần tử.
-</p>
-
-
-<h3 id="TrustingAdditionalCas">
- Tin cậy các CA bổ sung
-</h3>
-
-<p>
- Một ứng dụng có thể muốn tin cậy các CA bổ sung không được hệ thống tin cậy,
- điều này có thể do hệ thống chưa thêm CA đó hoặc một CA không
- đáp ứng các yêu cầu để đưa vào hệ thống Android. Một
- ứng dụng có thể thực hiện điều này bằng cách chỉ định nhiều nguồn chứng chỉ cho một
- cấu hình.
-</p>
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <base-config>
- <trust-anchors>
- <certificates src="@raw/extracas"/>
- <certificates src="system"/>
- </trust-anchors>
- </base-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="TrustingDebugCa">Cấu hình các CA để gỡ lỗi</h2>
-
-<p>
- Khi gỡ lỗi một ứng dụng kết nối qua HTTPS thì bạn có thể muốn
- kết nối tới một máy chủ phát triển cục bộ không có chứng chỉ
- SSL dành cho máy chủ thương mại của bạn. Để hỗ trợ cho trường hợp này mà không cần
- chỉnh sửa mã nguồn ứng dụng của bạn thì bạn có thể chỉ định các CA chỉ dùng cho gỡ lỗi
- mà <i>chỉ</i> được tin cậy khi <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">
-android:debuggable</a>
- là {@code true} bằng cách sử dụng {@code debug-overrides}. Thông thường các IDE và công cụ
- dựng sẽ đặt cờ này tự động đối với các bản dựng không dùng để phát hành.
-</p>
-
-<p>
- Làm như vậy an toàn hơn so với mã điều kiện thông thường bởi, là điều kiện
- bảo mật tiên quyết, các cửa hàng ứng dụng không chấp nhận các ứng dụng được đánh dấu
- là hỗ trợ gỡ lỗi.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <debug-overrides>
- <trust-anchors>
- <certificates src="@raw/debug_cas"/>
- </trust-anchors>
- </debug-overrides>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="UsesCleartextTraffic">Không sử dụng truyền gửi văn bản chưa mã hóa</h2>
-
-<p>
- Các ứng dụng có ý định kết nối tới các điểm đích chỉ sử dụng các kết nối
- bảo mật có thể bỏ hỗ trợ truyền gửi văn bản không mã hóa (bằng giao thức
- HTTP không mã hóa thay vì HTTPS) tới các đích đó. Tùy chọn này giúp ngăn
- các hồi quy tiềm tàng trong ứng dụng do thay đổi trong các URL được cung cấp bởi các nguồn
- bên ngoài như các máy chủ phụ trợ.
- Hãy xem {@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted
- NetworkSecurityPolicy.isCleartextTrafficPermitted()} để biết thêm chi tiết.
-</p>
-
-<p>
- Ví dụ, một ứng dụng có thể đảm bảo rằng mọi kết nối tới {@code
- secure.example.com} luôn được thực hiện qua HTTPS để bảo vệ việc truyền gửi dữ liệu nhạy cảm
- khỏi các mạng có hại.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config usesCleartextTraffic="false">
- <domain includeSubdomains="true">secure.example.com</domain>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="CertificatePinning">Ghim chứng chỉ</h2>
-
-<p>
- Thông thường thì một ứng dụng sẽ tin cậy mọi CA được cài đặt sẵn. Nếu bất kỳ CA nào trong số này sẽ
- phát hành một chứng chỉ lừa đảo thì ứng dụng sẽ gặp phải rủi ro từ một cuộc tấn công
- MiTM. Một số ứng dụng chọn cách giới hạn bộ chứng chỉ được chúng chấp nhận
- bằng cách giới hạn bộ CA được ứng dụng tin cậy hoặc bằng cách ghim chứng chỉ.
-</p>
-
-<p>
- Ghim chứng chỉ được thực hiện bằng cách cung cấp một bộ chứng chỉ theo mã hash của
- khóa công khai (SubjectPublicKeyInfo của chứng chỉ X.509). Một chuỗi
- chứng chỉ khi đó chỉ hợp lệ nếu như chuỗi chứng chỉ có chứa ít nhất một trong
- các khóa công khai được ghim.
-</p>
-
-<p>
- Lưu ý rằng khi sử dụng ghim chứng chỉ bạn phải luôn kèm thêm một khóa
- dự phòng để nếu bạn bị buộc phải chuyển sang các khóa mới hoặc thay đổi các CA (khi
- ghim vào một chứng chỉ CA hoặc một chứng chỉ trung gian của CA đó) thì
- kết nối của ứng dụng sẽ không bị ảnh hưởng. Nếu không bạn phải đưa ra một
- bản cập nhật cho ứng dụng để khôi phục khả năng kết nối.
-</p>
-
-<p>
- Ngoài ra, có thể đặt thời gian hết hạn cho các ghim, sau thời gian đó
- sẽ không tiến hành ghim được. Điều này giúp phòng ngừa các vấn đề về kết nối trong
- ứng dụng chưa được cập nhật. Tuy nhiên, việc đặt thời gian hết hạn
- trên các ghim này có thể khiến ghim bị bỏ qua.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">example.com</domain>
- <pin-set expiration="2018-01-01">
- <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
- <!-- backup pin -->
- <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="ConfigInheritance">Hành vi Kế thừa cấu hình</h2>
-
-<p>
- Các giá trị chưa được đặt trong một cấu hình cụ thể sẽ được kế thừa. Hành vi này cho phép tạo ra các cấu hình phức tạp
- hơn trong khi vẫn giữ cho tệp cấu hình có thể đọc được.
-</p>
-
-<p>
- Nếu một giá trị không được đặt trong một mục nhập cụ thể thì giá trị thuộc mục nhập
- bao quát hơn tiếp theo sẽ được sử dụng. Các giá trị chưa được đặt trong {@code domain-config} sẽ được
- lấy từ phần tử cha {@code domain-config} nếu như được lồng, hoặc từ {@code
- base-config} nếu không được lồng. Các giá trị chưa được đặt trong {@code base-config} sẽ sử dụng
- các giá trị mặc định của nền tảng.
-</p>
-
-<p>
- Ví dụ: hãy xem xét trường hợp tất cả các kết nối tới miền con của {@code
- example.com} phải sử dụng một bộ CA tùy chỉnh. Ngoài ra, truyền gửi văn bản không mã hóa tới
- các miền này được cho phép <em>trừ khi</em> kết nối tới {@code
- secure.example.com}. Bằng cách lồng cấu hình cho {@code
- secure.example.com} bên trong cấu hình cho {@code example.com} thì
- {@code trust-anchors} không cần phải được sao lặp.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">example.com</domain>
- <trust-anchors>
- <certificates src="@raw/my_ca"/>
- </trust-anchors>
- <domain-config cleartextTrafficPermitted="false">
- <domain includeSubdomains="true">secure.example.com</domain>
- </domain-config>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="FileFormat">Định dạng Tệp cấu hình</h2>
-
-<p>
- Tính năng Cấu hình Bảo mật mạng sử dụng một định dạng tệp XML.
- Cấu trúc chung của tệp này được thể hiện trong đoạn mẫu mã nguồn sau:
-</p>
-
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <base-config>
- <trust-anchors>
- <certificates src="..."/>
- ...
- </trust-anchors>
- </base-config>
-
- <domain-config>
- <domain>android.com</domain>
- ...
- <trust-anchors>
- <certificates src="..."/>
- ...
- </trust-anchors>
- <pin-set>
- <pin digest="...">...</pin>
- ...
- </pin-set>
- </domain-config>
- ...
- <debug-overrides>
- <trust-anchors>
- <certificates src="..."/>
- ...
- </trust-anchors>
- </debug-overrides>
-</network-security-config>
-</pre>
-
-<p>
- Các phần sau sẽ mô tả cú pháp và các chi tiết khác của định dạng
- tệp này.
-</p>
-
-<h3 id="network-security-config">
- <network-security-config>
-</h3>
-
-<dl class="xml">
- <dt>
- có thể chứa:
- </dt>
-
- <dd>
- 0 hoặc 1 của <code><a href="#base-config"><base-config></a></code><br>
- Bất kỳ số nào của <code><a href=
- "#domain-config"><domain-config></a></code><br>
- 0 hoặc 1 của <code><a href="#debug-overrides"><debug-overrides></a></code>
- </dd>
-</dl>
-
-<h3 id="base-config">
- <base-config>
-</h3>
-
-<dl class="xml">
- <dt>
- cú pháp:
- </dt>
-</dl>
-
-<pre class="stx">
-<base-config <a href=
-"#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
- ...
-</base-config>
-</pre>
-<dl class="xml">
- <dt>
- có thể chứa:
- </dt>
-
- <dd>
- <code><a href="#trust-anchors"><trust-anchors></a></code>
- </dd>
-
- <dt>
- mô tả:
- </dt>
-
- <dd>
- Cấu hình mặc định được sử dụng bởi mọi kết nối có đích đến không được
- bao gồm bởi một <a href="#domain-config"><code>domain-config</code></a>.
-
-<p>
- Bất kỳ giá trị nào chưa được đặt sẽ sử dụng các giá trị mặc định của nền tảng. Cấu hình
- mặc định cho các ứng dụng nhắm mục tiêu API mức 24 trở lên:
-</p>
-
-<pre>
-<base-config usesCleartextTraffic="true">
- <trust-anchors>
- <certificates src="system" />
- </trust-anchors>
-</base-config>
-</pre>
-Cấu hình mặc định cho các ứng dụng nhắm mục tiêu API mức 23 trở xuống:
-<pre>
-<base-config usesCleartextTraffic="true">
- <trust-anchors>
- <certificates src="system" />
- <certificates src="user" />
- </trust-anchors>
-</base-config>
-</pre>
-
- </dd>
-</dl>
-
-<h3 id="domain-config"><domain-config></h3>
-<dl class="xml">
-<dt>cú pháp:</dt>
-<dd>
-<pre class="stx"><domain-config <a href="#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
- ...
-</domain-config></pre>
-</dd>
-
-<dt>Có thể chứa:</dt>
-
-<dd>
-1 hoặc nhiều <code><a href="#domain"><domain></a></code>
-<br/>0 hoặc 1 <code><a href="#trust-anchors"><trust-anchors></a></code>
-<br/>0 hoặc 1 <code><a href="#pin-set"><pin-set></code></a>
-<br/>Bất kỳ số nào của <code><domain-config></code> được lồng</dd>
-
-<dt>Mô tả</dt>
-<dd>Cấu hình được sử dụng cho các kết nối tới các điểm đích cụ thể theo như định nghĩa bởi các phần tử {@code domain}.
-
-<p>Lưu ý rằng nếu nhiều phần tử {@code domain-config} chứa một điểm đích thì cấu hình có quy tắc miền trùng khớp
-cụ thể nhất (dài nhất) sẽ được sử dụng.</p></dd>
-</dl>
-
-
-<h3 id="domain"><domain></h3>
-
-<dl class="xml">
- <dt>
- cú pháp:
- </dt>
-
- <dd>
- <pre class="stx">
-<domain includeSubdomains=["true" | "false"]>example.com</domain>
-</pre>
- </dd>
-
- <dt>
- Thuộc tính:
- </dt>
-
- <dd>
- <dl class="attr">
- <dt>
- {@code includeSubdomains}
- </dt>
-
- <dd>
- Nếu {@code "true"} thì quy tắc miền này sẽ trùng với miền đó và tất cả
- các miền con, bao gồm các miền con của miền con, nếu không quy tắc đó chỉ
- áp dụng cho các trùng khớp tuyệt đối.
- </dd>
- </dl>
- </dd>
-
- <dt>
- Mô tả:
- </dt>
-</dl>
-
-<h3 id="debug-overrides"><debug-overrides></h3>
-
-<dl class="xml">
- <dt>
- cú pháp:
- </dt>
-
- <dd>
- <pre class="stx">
-<debug-overrides>
- ...
-</debug-overrides>
-</pre>
- </dd>
-
- <dt>
- Có thể chứa:
- </dt>
-
- <dd>
- 0 hoặc 1 <code><a href="#trust-anchors"><trust-anchors></a></code>
- </dd>
-
- <dt>
- Mô tả:
- </dt>
-
- <dd>
- Ghi đè được thực hiện khi <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
- là {@code "true"} thì thường là trường hợp dành cho các bản dựng không phát hành
- được tạo ra bởi các IDE hoặc công cụ dựng. Các nguồn tin cậy được chỉ định trong {@code
- debug-overrides} được thêm vào tất cả các cấu hình khác và ghim
- chứng chỉ không được thực hiện khi chuỗi chứng chỉ của máy chủ sử dụng một trong
- các nguồn tin cậy chỉ dành cho gỡ lỗi này. Nếu <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
- là {@code "false"} thì phần này bị bỏ qua hoàn toàn.
- </dd>
-</dl>
-
-<h3 id="trust-anchors"><trust-anchors></h3>
-<dl class="xml">
- <dt>
- cú pháp:
- </dt>
-
- <dd>
- <pre class="stx">
-<trust-anchors>
-...
-</trust-anchors>
-</pre>
- </dd>
-
- <dt>
- Có thể chứa:
- </dt>
-
- <dd>
- Bất kỳ số nào của <code><a href="#certificates"><certificates></a></code>
- </dd>
-
- <dt>
- Mô tả:
- </dt>
-
- <dd>
- Đặt nguồn tin cậy cho các kết nối bảo mật:
- </dd>
-</dl>
-
-
-<h3 id="certificates"><certificates></h3>
-<dl class="xml">
-<dt>cú pháp:</dt>
-<dd><pre class="stx"><certificates src=["system" | "user" | "<i>raw resource</i>"]
- overridePins=["true" | "false"] />
-</pre></dd>
-<dt>mô tả:</dt>
-<dd>Bộ các chứng chỉ X.509 cho các phần tử {@code trust-anchors}.</dd>
-
-<dt>thuộc tính:</dt>
-<dd><dl class="attr">
-<dt>{@code src}</dt>
-<dd>
-Nguồn của các chứng chỉ CA, có thể là một
-<ul>
- <li>id nguồn thô trỏ tới một tệp có chứa các chứng chỉ X.509.
- Các chứng chỉ phải được mã hóa theo định dạng DER hoặc PEM. Trong trường hợp của các chứng chỉ
-PEM thì tệp đó <em>không được</em> chứa dữ liệu không phải PEM khác như
- các chú thích.
- </li>
-
- <li>{@code "system"} cho các chứng chỉ CA hệ thống được cài đặt sẵn
- </li>
-
- <li>{@code "user"} cho các chứng chỉ CA do người dùng thêm vào
- </li>
-</ul>
-</dd>
-
-<dt>{@code overridePins}</dt>
-<dd>
- <p>
- Xác định xem liệu các CA từ nguồn này có bỏ qua việc ghim chứng chỉ hay không. Nếu {@code
- "true"} thì các chuỗi chứng chỉ mà xâu qua một trong các CA từ nguồn
- này thì khi đó ghim sẽ không được thực hiện. Đây có thể là điều có ích cho các CA gỡ lỗi
- hoặc để hỗ trợ cho người dùng tấn công MiTM hoạt động truyền gửi bảo mật của ứng dụng.
- </p>
-
- <p>
- Mặc định là {@code "false"} trừ khi được chỉ định trong một phần tử {@code debug-overrides}
-, khi đó mặc định là {@code "true"}.
- </p>
-</dd>
-</dl>
-</dd>
-
-
-<h3 id="pin-set"><pin-set></h3>
-
-<dl class="xml">
- <dt>
- cú pháp:
- </dt>
-
- <dd>
-<pre class="stx">
-<pin-set expiration="date">
-...
-</pin-set>
-</pre>
- </dd>
-
- <dt>
- Có thể chứa:
- </dt>
-
- <dd>
- Bất kỳ số nào của <code><a href="#pin"><pin></a></code>
- </dd>
-
- <dt>
- Mô tả:
- </dt>
-
- <dd>
- Một bộ các ghim khóa công khai. Để một kết nối bảo mật được tin cậy, một trong các
- khóa công khai trong chuỗi tin cậy phải nằm trong bộ các ghim này. Xem
- <code><a href="#pin"><pin></a></code> để biết định dạng của các ghim.
- </dd>
-
- <dt>
- Thuộc tính:
- </dt>
-
- <dd>
- <dl class="attr">
- <dt>
- {@code expiration}
- </dt>
-
- <dd>
- Ngày tháng, theo định dạng {@code yyyy-MM-dd}, vào và sau thời điểm các ghim
- hết hạn và do đó vô hiệu hóa ghim. Nếu thuộc tính này chưa được đặt thì khi đó các
- ghim không hết hạn.
- <p>
- Việc hết hạn giúp phòng ngừa các vấn đề về khả năng kết nối trong ứng dụng làm cho không
- nhận được các bản cập nhật cho bộ ghim, chẳng hạn như do người dùng
- vô hiệu hóa các bản cập nhật ứng dụng.
- </p>
- </dd>
- </dl>
- </dd>
-</dl>
-
-<h3 id="pin"><pin></h3>
-<dl class="xml">
- <dt>
- cú pháp:
- </dt>
-
- <dd>
-<pre class="stx">
-<pin digest=["SHA-256"]>base64 encoded digest of X.509
- SubjectPublicKeyInfo (SPKI)</pin>
-</pre>
- </dd>
-
- <dt>
- Thuộc tính:
- </dt>
-
- <dd>
- <dl class="attr">
- <dt>
- {@code digest}
- </dt>
-
- <dd>
- Thuật toán băm được sử dụng để tạo ghim. Hiện tại, chỉ có
- {@code "SHA-256"} được hỗ trợ.
- </dd>
- </dl>
- </dd>
-</dl>
diff --git a/docs/html-intl/intl/vi/preview/features/tv-recording-api.jd b/docs/html-intl/intl/vi/preview/features/tv-recording-api.jd
deleted file mode 100644
index 6dfb53e..0000000
--- a/docs/html-intl/intl/vi/preview/features/tv-recording-api.jd
+++ /dev/null
@@ -1,121 +0,0 @@
-page.title=Ghi lại TV
-page.keywords=preview,sdk,tv,recording
-page.tags=androidn
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>Trong tài liệu này</h2>
- <ol>
- <li><a href="#supporting">Chỉ báo Hỗ trợ ghi lại</a></li>
- <li><a href="#recording">Ghi lại một chương trình</a></li>
- <li><a href="#errors">Xử lý lỗi ghi lại</a></li>
- <li><a href="#sessions">Quản lý các chương trình được ghi lại</a></li>
- <li><a href="#best">Thực hành Tốt nhất</a></li>
- </ol>
-</div>
-</div>
-
-<p>Các dịch vụ nguồn vào TV cho phép người dùng tạm dừng và tiếp tục phát lại kênh thông qua
-các API chuyển dịch thời gian. Android N mở rộng thêm chuyển dịch thời gian
-bằng cách cho phép người dùng lưu nhiều chương trình được ghi lại.</p>
-
-<p>Người dùng có thể tạo lịch ghi lại trước hoặc tiến hành ghi lại khi họ xem
-một chương trình. Khi hệ thống đã lưu bản ghi lại, người dùng có thể duyệt, quản lý
-và phát lại bản ghi đó bằng ứng dụng TV của hệ thống.</p>
-
-<p>Nếu bạn muốn cung cấp tính năng ghi lại cho dịch vụ nguồn vào TV,
-bạn phải báo cho hệ thống biết ứng dụng của bạn hỗ trợ ghi lại, triển khai
-khả năng ghi chương trình, xử lý và thông báo bất kỳ lỗi nào xuất hiện
-trong quá trình ghi lại và quản lý các chương trình được ghi lại.</p>
-
-<h2 id="supporting">Chỉ báo Hỗ trợ ghi lại</h2>
-
-<p>Để thông báo cho hệ thống biết dịch vụ nguồn vào TV của bạn hỗ trợ ghi lại, hãy thực hiện
-các bước sau:</p>
-
-<ol>
-<li>Trong phương thức <code>TvInputService.onCreate()</code> của bạn, hãy tạo một đối tượng
-<code>TvInputInfo</code> mới sử dụng lớp <code>TvInputInfo.Builder</code>
-.</li>
-<li>Khi tạo đối tượng <code>TvInputInfo</code> mới, hãy gọi
-<code>setCanRecord(true)</code> trước khi gọi <code>build()</code> để
-chỉ báo dịch vụ của bạn hỗ trợ ghi lại.</li>
-<li>Đăng ký đối tượng <code>TvInputInfo</code> với hệ thống bằng cách gọi
-<code>TvInputService.updateTvInputInfo()</code>.</li>
-</ol>
-
-<h2 id="recording">Ghi lại một chương trình</h2>
-
-<p>Sau khi dịch vụ nguồn vào TV của bạn đăng ký để hỗ trợ tính năng
-ghi lại, hệ thống sẽ gọi phương thức
-<code>TvInputService.onCreateRecordingSession()</code> của bạn khi cần truy cập
-phần triển khai ghi lại của ứng dụng. Triển khai lớp con
-<code>TvInputService.RecordingSession</code> của bạn và trả nó về
-khi hàm gọi lại <code>onCreateRecordingSession()</code>
-được gọi. Lớp con này chịu trách nhiệm chuyển sang dữ liệu kênh phù hợp,
-ghi lại dữ liệu được yêu cầu và thông báo trạng thái ghi lại và các lỗi cho
-hệ thống.</p>
-
-<p>Khi hệ thống gọi <code>RecordingSession.onTune()</code>, chuyển vào một
-URI của kênh, chỉnh vào kênh mà URI đó chỉ định. Thông báo cho hệ thống biết
-ứng dụng của bạn đã chỉnh vào kênh mong muốn bằng cách gọi <code>notifyTuned()</code>,
-hoặc nếu ứng dụng không thể chỉnh vào kênh phù hợp, hãy gọi
-<code>notifyError()</code>.</p>
-
-<p>Tiếp theo hệ thống sẽ gọi hàm gọi lại <code>RecordingSession.onStartRecording()</code>
-. Ứng dụng của bạn phải bắt đầu ghi lại ngay lập tức. Khi hệ thống gọi
-hàm gọi lại này, hệ thống có thể cung cấp một URI có chứa thông tin về chương trình
-sắp được ghi lại. Khi kết thúc việc ghi lại, bạn cần sao chép dữ liệu
-này vào bảng dữ liệu <code>RecordedPrograms</code>.</p>
-
-<p>Cuối cùng, hệ thống sẽ gọi <code>RecordingSession.onStopRecording()</code>.
-Lúc này, ứng dụng của bạn phải dừng ghi lại ngay lập tức. Bạn cũng cần
-tạo một mục nhập trong bảng <code>RecordedPrograms</code>. Mục này cần
-có URI dữ liệu của chương trình được ghi lại trong
-cột <code>RecordedPrograms.COLUMN_RECORDING_DATA_URI</code>, và bất kỳ thông tin
-về chương trình mà hệ thống đã cung cấp trong lần gọi đầu tiên tới
-<code>onStartRecording()</code>.</p>
-
-<p>Để biết thêm thông tin về cách truy cập bảng <code>RecordedPrograms</code>
-hãy xem <a href="#sessions">Quản lý các chương trình được ghi lại</a>.</p>
-
-<h2 id="errors">Xử lý lỗi ghi lại</h2>
-
-<p>Nếu xảy ra lỗi trong quá trình ghi lại, làm cho dữ liệu ghi lại không sử dụng được thì
-hãy thông báo cho hệ thống bằng cách gọi <code>RecordingSession.notifyError()</code>.
-Tương tự, bạn có thể gọi <code>notifyError()</code> sau khi một chương trình ghi lại
-được tạo để cho phép hệ thống biết được ứng dụng của bạn không còn tiếp tục ghi các chương trình.</p>
-
-<p>Nếu xảy ra lỗi trong quá trình ghi lại, nhưng có khả năng là một phần dữ liệu
-ghi lại có thể được sử dụng để người dùng phát lại thì hãy gọi
-<code>RecordingSession.notifyRecordingStopped()</code> để cho phép hệ thống
-sử dụng một phần chương trình đó.</p>
-
-<h2 id="sessions">Quản lý các chương trình được ghi lại</h2>
-
-<p>Hệ thống lưu giữ thông tin cho mọi chương trình được ghi lại từ tất cả
-các ứng dụng kênh truyền hình hỗ trợ ghi lại trong bảng trình cung cấp nội dung<code>TvContract.RecordedPrograms</code>
-. Có thể truy cập thông tin này qua URI nội dung
-<code>RecordedPrograms.Uri</code>. Hãy sử dụng các API trình cung cấp nội dung để
-đọc, thêm và xóa các mục trong bảng này.</p>
-
-<p>Để biết thêm thông tin về thao tác với dữ liệu trình cung cấp nội dung, hãy xem
-<a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
-Nội dung Cơ bản về Trình cung cấp Nội dung</a>.</p>
-
-<h2 id="best">Thực hành Tốt nhất</h2>
-
-<p>Các thiết bị TV có thể có bộ nhớ lưu trữ hạn chế do đó phán đoán hợp lý nhất khi
-phân bổ bộ nhớ lưu trữ để lưu các chương trình được ghi lại. Sử dụng
-<code>RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)</code> khi
-không có đủ dung lượng trống để lưu một chương trình được ghi lại.</p>
-
-<p>Khi người dùng khởi tạo quá trình ghi lại, bạn cần tiến hành ghi lại dữ liệu nhanh nhất
-có thể. Để hỗ trợ công việc này, hãy hoàn thành tất cả các tác vụ tốn thời gian trước đó,
-như truy cập và phân bổ không gian lưu trữ khi hệ thống gọi hàm gọi lại
-<code>onCreateRecordingSession()</code>. Làm như vậy sẽ cho phép bạn tiến hành
-việc ghi lại ngay lập tức khi hàm gọi lại <code>onStartRecording()</code>
-được gọi.</p>
diff --git a/docs/html-intl/intl/vi/preview/index.jd b/docs/html-intl/intl/vi/preview/index.jd
deleted file mode 100644
index bd64b25..0000000
--- a/docs/html-intl/intl/vi/preview/index.jd
+++ /dev/null
@@ -1,120 +0,0 @@
-page.title=Android N Developer Preview
-page.tags="preview","developer"
-meta.tags="preview", "android"
-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">
- <div class="wrap" style="max-width:1100px;margin-top:0">
- <div class="cols dac-hero-content" style="padding-bottom:1em;">
-
- <div class="col-7of16 col-push-9of16" style="padding-left:2em">
- <h1 class="dac-hero-title">Android N Developer Preview</h1>
- <p class="dac-hero-description">
- Hãy chuẩn bị sẵn sàng cho Android N!
- <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">
- <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>-->
- </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>
- </div>
- <div class="dac-section dac-small">
- <div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/resources"
- data-cardSizes="6x2"
- data-maxResults="6"></div>
- </div>
- </div>
-</section>
-
-<div id="useUpdatedTemplates" style="display:none" 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>
- </a>
- <ul class="dac-actions">
- <li class="dac-action">
- <a class="dac-action-link" href="https://developer.android.com/preview/bug">
- <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
- </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>
- 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>
- <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.
- </div>
-
- <div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/more"
- data-cardSizes="6x6"
- data-items-per-page="6"
- data-maxResults="15"
- data-initial-results="6"></div>
-
- </div>
-</section>
-
diff --git a/docs/html-intl/intl/vi/preview/overview.jd b/docs/html-intl/intl/vi/preview/overview.jd
deleted file mode 100644
index f709489..0000000
--- a/docs/html-intl/intl/vi/preview/overview.jd
+++ /dev/null
@@ -1,440 +0,0 @@
-page.title=Tổng quan về Chương trình
-page.metaDescription=Hãy chuẩn bị ứng dụng sẵn sàng cho phiên bản Android tiếp theo.
-page.image=images/cards/card-n-overview_2x.png
-meta.tags="preview", "developer", "android"
-page.tags="preview", "developer", "android"
-
-@jd:body
-<!--
-<div class="cols" style=
-"background-color:#f2daf5; padding: 5px 0;margin-bottom:1em; text-align:center;">
-<h3>
- Developer Preview 3 is now available
- </h3>
- <p>Includes final SDK and near-final system images</p>
- <div style="margin:auto 1em">
- <ul class="dac-section-links">
- <li class="dac-section-link">
- <a href="{@docRoot}preview/support.html#preview3-notes">
- <span class="dac-sprite dac-auto-chevron"></span>
- Read the Notes</a>
- </li>
-
- <li class="dac-section-link">
- <a href="{@docRoot}preview/support.html#preview3-get">
- <span class="dac-sprite dac-auto-chevron"></span>
- Get the Update</a>
- </li>
-
- <li class="dac-section-link">
- <a href="https://code.google.com/p/android-developer-preview/">
- <span class="dac-sprite dac-auto-chevron"></span>
- Report Issues</a>
- </li>
- </ul>
- </div>
-</div>
--->
-
-<p>
- Chào mừng bạn đến với <strong>Android N Developer Preview</strong>, một chương trình
- cung cấp cho bạn mọi thứ cần thiết để kiểm thử và tối ưu hóa các ứng dụng cho phiên bản
- Android tiếp theo. Đây là chương trình miễn phí và bạn có thể bắt đầu ngay bằng cách
- tải xuống các công cụ của N Developer Preview.
-</p>
-
-
-
-
-
-
-
-<div style="background-color:#eceff1;padding:1em;">
-<div class="wrap">
- <div class="cols">
- <div class="col-4of12">
- <h5>
- Thiết bị phần cứng và ảnh của bộ giả lập
- </h5>
-
- <p>
- Chạy và kiểm thử ứng dụng của bạn trên một loạt các thiết bị hoặc trên bộ giả lập.
-
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- Mã nền tảng mới nhất
- </h5>
-
- <p>
- Chúng tôi sẽ cung cấp các bản cập nhật hàng tháng trong thời gian của Preview vì vậy bạn sẽ được kiểm tra các thay đổi nền tảng mới nhất.
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- Ưu tiên các vấn đề của nhà phát triển
- </h5>
-
- <p>
- Trong một vài tuần đầu, chúng tôi sẽ dành ưu tiên cho các vấn đề
- được nhà phát triển báo cáo, vì vậy hãy kiểm thử và gửi phản hồi sớm nhất có thể.
- </p>
- </div>
-
- </div>
-
- <div class="cols">
-
-
- <div class="col-4of12">
- <h5>
- Các hành vi và khả năng mới
- </h5>
-
- <p>
- Tiến hành công việc sớm để hỗ trợ các hành vi mới của nền tảng và phát triển với các tính năng mới.
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- Cập nhật qua OTA
- </h5>
-
- <p>
- Các bản cập nhật liền mạch qua sóng vô tuyến cho bất kỳ thiết bị nào được hỗ trợ thông qua
- Chương trình Android Beta. Không cần phải flash.
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- Phản hồi và hỗ trợ
- </h5>
-
- <p>
- Báo cáo các vấn đề và gửi phản hồi về cho chúng tôi thông qua
- <a href="{@docRoot}preview/bug">bộ theo dõi vấn đề</a> của chúng tôi. Kết nối với các nhà phát triển
- khác trong
- <a href="{@docRoot}preview/dev-community">Cộng đồng Nhà phát triển N</a>.
- </p>
- </div>
- </div>
-</div>
-</div>
-
-<!--
-<p>New in the Android N Developer Preview: </p>
-
-<ul>
- <li> Accompanying Android Beta Program for consumers, starting later in the preview</li>
- <li> More supported devices, including devices from OEM partners</li>
- <li> Seamless OTAs for your devices, from initial release to final N release without flashing</li>
-</ul>
--->
-
-<h2 id="timeline">Tiến trình thời gian và các bản cập nhật</h2>
-<img src="{@docRoot}images/n-preview-updates_2x.png">
-
-<p>
- N Developer Preview sẽ kéo dài từ 9 tháng 3 năm 2016 đến khi phát hành công chúng
- bản Android N cuối cùng cho AOSP và OEM, dự kiến trong Q3 2016.
-</p>
-
-<p>
- Tại các mốc phát triển chính chúng tôi sẽ cung cấp các bản cập nhật cho môi trường phát triển và
- kiểm thử của bạn. Nói chung, bạn có thể nhận một bản cập nhật hàng tháng (khoảng cách
- 4 đến 6 tuần). Các mốc được liệt kê dưới đây.
-</p>
-
-<ul>
- <li><strong><a href="{@docRoot}preview/support.html#dp1">Preview 1</a></strong> (phát hành lần đầu, alpha)</li>
- <li><strong><a href="{@docRoot}preview/support.html#dp2">Preview 2</a></strong> (bản cập nhật tăng dần, alpha)</li>
- <li><strong>Preview 3</strong> (bản cập nhật tăng dần, beta)</li>
- <li><strong>Preview 4</strong> (các API cuối cùng và SDK chính thức, phát hành Play)</li>
- <li><strong>Preview 5</strong> (các ảnh hệ thống gần hoàn thiện để kiểm thử cuối cùng)</li>
- <li><strong>Phát hành bản cuối</strong> cho AOSP và hệ sinh thái</li>
-</ul>
-
-<p>
- Mỗi bản cập nhật sẽ có các công cụ SDK, ảnh hệ thống xem trước, bộ giả lập, tài liệu
- tham khảo và những khác biệt về API.
-</p>
-
-<p>
- <strong>Ba phiên bản Preview đầu tiên</strong> sẽ cung cấp một <strong>môi trường
- kiểm thử và phát triển sớm</strong> để giúp bạn xác định
- các vấn đề tương thích trong ứng dụng hiện tại và lập kế hoạch di chuyển hoặc trang bị hoạt động
- cần thiết để nhắm tới nền tảng mới. Đây là giai đoạn ưu tiên để bạn
- gửi phản hồi cho chúng tôi về các tính năng, khả năng tương thích của API và tệp
- — đối với mọi vấn đề đó, vui lòng sử dụng <a href="{@docRoot}preview/bug">bộ theo dõi
- vấn đề</a>. Sẽ có một số thay đổi với API giữa các bản cập nhật này.
-</p>
-
-<p>
- Tại <strong>Preview 4 và 5</strong> bạn sẽ được sử dụng <strong>các
-API và SDK N cuối cùng</strong> để phát triển, và cả các ảnh hệ thống gần hoàn thiện
- để kiểm thử các hành vi, tính năng của hệ thống. Android N sẽ cung cấp một mức
- API chuẩn vào thời điểm này. Bạn có thể tiến hành kiểm thử khả năng tương thích cuối cùng đối với các ứng dụng
- cũ và tinh chỉnh mã nguồn mới có sử dụng các API hoặc tính năng mới của N.
-</p>
-
-<p>
- Ngoài ra, bắt đầu từ Preview 4 bạn có thể <strong>phát hành ứng dụng lên
- các thiết bị</strong> chạy Android N ở cấp API chính thức, chẳng hạn như
- thiết bị người dùng được chọn cho chương trình Android Beta. Bạn có thể
- phát hành ứng dụng lên kênh alpha và beta của Google Play trước do đó bạn có thể kiểm thử
- ứng dụng của mình với người dùng Android Beta trước khi phân phối rộng rãi trên
- cửa hàng.
-</p>
-
-<p>
- Khi bạn kiểm thử và phát triển trên Android N, chúng tôi khuyến cáo bạn <strong>duy trì
- môi trường phát triển được cập nhật</strong> khi các cập nhật Preview được
- phát hành. Để giúp cho quá trình này thuận tiện hơn, bạn có thể đăng ký các thiết bị kiểm thử của mình vào
- chương trình Android Beta và lấy <strong>các bản cập nhật qua sóng vô tuyến (OTA)</strong> tại
- mỗi mốc. Ngoài ra, các ảnh xem trước cũng có sẵn để bạn
- tải xuống và flash thủ công.
-</p>
-
-<p>
- Chúng tôi sẽ thông báo cho bạn khi các cập nhật Preview xuất hiện thông qua <a href="http://android-developers.blogspot.com/">Blog Nhà phát triển Android</a>, cũng
- như thông qua trang này và <a href="{@docRoot}preview/dev-community">Cộng đồng
- Nhà phát triển Android N</a>.
-</p>
-
-
-<h2 id="preview_tools">Có gì trong N Developer Preview?</h2>
-
-<p>
- N Developer Preview có tất cả mọi thứ bạn cần để kiểm thử ứng dụng
- sẵn có của bạn trên nhiều loại kích cỡ màn hình, công nghệ mạng, chipset CPU/GPU
- và kiến trúc phần cứng.
-</p>
-
-<h3 id="sdk_tools">Bộ công cụ SDK</h3>
-
-<p>Bạn có thể tải xuống các thành phần này thông qua Trình quản lý SDK trong <a href="{@docRoot}sdk/installing/adding-packages.html">Android Studio</a>:</p>
-
-<ul>
- <li> N Developer Preview <strong>SDK và công cụ</strong>
- <li> <strong>Ảnh hệ thống cho bộ giả lập</strong> (32-bit và 64-bit) của N Developer Preview
- <li> <strong>Ảnh hệ thống cho bộ giả lập cho Android TV</strong> (32-bit) của N Developer Preview
- <li> Các thư viện hỗ trợ của N Developer Preview (dành cho các mẫu ứng dụng mới)
-</ul>
-
-<p>
- Chúng tôi sẽ cung cấp các bản cập nhật cho các công cụ phát triển này theo từng mốc khi cần thiết.
-</p>
-
-<h3 id="hardware_system_images">Ảnh hệ thống cho phần cứng</h3>
-
-<p>
- N Developer Preview bao gồm các ảnh hệ thống cho Nexus và phần cứng khác mà bạn có thể sử dụng khi
- kiểm thử và phát triển trên các thiết bị vật lý. Hãy xem trang <a href="{@docRoot}preview/download.html">Ảnh cho Thiết bị</a> để có danh sách đầy đủ
- các ảnh cho phần cứng.
-</p>
-
-<p>
- Chúng tôi sẽ cung cấp các ảnh hệ thống cập nhật cho những thiết bị này tại mỗi mốc. Bạn
- có thể tải xuống và flash các ảnh hệ thống cập nhật vào các thiết bị kiểm thử
- một cách thủ công nhiều lần theo nhu cầu. Điều này đặc biệt hữu ích đối với các môi trường
- kiểm thử tự động, trong đó bạn có thể cần flash lại thiết bị nhiều
- lần.
-</p>
-
-<p class="note"><strong>Lưu ý</strong>:
- <strong>Các thiết bị được flash thủ công sẽ không nhận các bản cập nhật qua OTA</strong> giống như trong
- preview của năm ngoái. Năm nay bạn có thể nhận qua OTA bằng cách đăng ký các thiết bị trong
- Chương trình Android Beta — hãy xem chi tiết trong phần tiếp theo.
-</p>
-
-<h3 id="android_beta">Các bản cập nhật OTA thông qua Chương trình Android Beta</h3>
-
-<p>
- Tính năng mới cho Android N là một chương trình cập nhật qua sóng vô tuyến (OTA) sẽ tự động
- phát hành các cập nhật Preview mới nhất của Android N trực tiếp tới thiết bị đã đăng ký
- trong chương trình. Đây là chương trình miễn phí và mở đối với bất cứ ai có một
- thiết bị được hỗ trợ đã đăng ký với tài khoản Google của họ.
-</p>
-
-<p>
- Để đăng ký vào chương trình, hãy truy cập trang <a href="https://g.co/androidbeta">Chương trình
- Android Beta</a>. Bạn sẽ thấy
- tất cả các thiết bị đã đăng ký với tài khoản của bạn có đủ điều kiện để đăng ký
- Android Beta.
-</p>
-
-<ol>
- <li> Hãy chọn các thiết bị bạn muốn nhận bản cập nhật Android N
- <li> Nhấp vào Đăng ký, đọc và đồng ý với các điều khoản dịch vụ và sau đó nhấp OK
-</ol>
-
-<p>
- Một khi đã đăng ký, thiết bị của bạn sẽ sớm nhận được một bản cập nhật. Trong hầu hết trường hợp,
- bạn sẽ không cần thực hiện thiết lập lại toàn bộ dữ liệu để chuyển sang Android N. Tuy nhiên,
- chúng tôi khuyến cáo bạn sao lưu bất kỳ dữ liệu nào bạn không muốn bị mất trước khi
- đăng ký thiết bị.
-</p>
-
-<p>
- Khi các bản cập nhật được phát hành tới thiết bị của bạn, chúng tôi khuyến cáo bạn tải xuống và
- cài đặt sớm nhất có thể. Bạn sẽ muốn cập nhật các
- thay đổi mới nhất về UI, hành vi, API và các tính năng của hệ thống.
-</p>
-
-<p>
- Khi kết thúc Developer Preview, các thiết bị đăng ký của bạn sẽ
- nhận một bản cập nhật của bản phát hành Android N chính thức.
-</p>
-
-<p>
- Bạn có thể hủy đăng ký các thiết bị của mình trong chương trình Android Beta bất kỳ lúc nào thông qua
- trang Android Beta. Trước khi hủy đăng ký, hãy chắc chắn sao lưu dự phòng dữ liệu của bạn trên
- thiết bị đó.
-</p>
-
- <p class="note"><strong>Lưu ý</strong>:
- Khi bạn hủy đăng ký, <strong>thiết bị của bạn sẽ được khôi phục cài đặt gốc</strong>
- về phiên bản mới nhất
- của Android 6.0 Marshmallow (không nhất thiết là phiên bản bạn từng
- được cài đặt trước khi đăng ký thiết bị). Để đảm bảo cài đặt mới hoàn toàn,
- dữ liệu của bạn sẽ bị xóa khỏi thiết bị, bao gồm danh bạ, tin nhắn,
- ảnh, v.v...
-</p>
-
-<h3 id="documentation_and_sample_code">Tài liệu và mã mẫu</h3>
-
-<p>
- Các nguồn tài liệu này có trên trang Developer Preview để
- trợ giúp bạn tìm hiểu về Android N:
-</p>
-
-<ul>
- <li> <a href="{@docRoot}preview/setup-sdk.html">Thiết lập để Phát triển dành cho
-Android N</a> có
- các hướng dẫn từng bước để bắt đầu.</li>
- <li> <a href="{@docRoot}preview/behavior-changes.html">Các thay đổi
- Hành vi</a> chỉ ra cho bạn các phần chính yếu để kiểm thử.</li>
- <li> Tổng quan về các API mới, bao gồm một phần <a href="{@docRoot}preview/api-overview.html">Tổng quan về API</a>, bản tải xuống được
- <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Tham khảo
- API</a> và các hướng dẫn chi tiết cho nhà phát triển đối với các tính năng quan trọng như
- hỗ trợ đa cửa sổ, thông báo gộp, hỗ trợ đa bản địa và các tính năng khác.
- <li> <a href="{@docRoot}preview/samples.html">Mã mẫu</a> trong đó
- minh họa cách hỗ trợ các quyền và tính năng mới.
- <li> <a href="{@docRoot}preview/support.html#release-notes">Ghi chú phát hành</a>
- cho phiên bản hiện hành của N Developer Preview, bao gồm các ghi chú về thay đổi và
- các báo cáo về sự khác biệt.
-</ul>
-
-<h4 id="reference">Tham khảo API có thể tải xuống</h4>
-
-<p>
- Trong các cập nhật preview có sớm bạn có thể tải xuống
- <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Tham khảo API
- mới nhất cho nền tảng Android N</a> dưới dạng tệp lưu trữ zip riêng biệt. Bản tải xuống
- tham khảo này cũng có một báo cáo về các khác biệt để giúp bạn nhận biết các thay đổi API từ
- API 23 và bản cập nhật trước đó.
-</p>
-
-<p>
- Khi các API Android N hoàn thiện và được chỉ định một mức API chính thức,
- chúng tôi sẽ cung cấp tham khảo API cho bạn trực tuyến tại <a href="https://developer.android.com">https://developer.android.com</a>.
-</p>
-
-<h3 id="support_resources">
- Tài nguyên Hỗ trợ
-</h3>
-
-<p>
- Khi bạn kiểm thử và phát triển trên N Developer Preview, xin vui lòng sử dụng các kênh sau
- để thông báo các vấn đề và gửi phản hồi.
-</p>
-
-<ul>
- <li> <a href="https://code.google.com/p/android-developer-preview/">Bộ theo dõi Vấn đề N Developer Preview
- </a> là <strong>kênh phản hồi chính</strong> của bạn. Bạn có thể thông báo lỗi, các vấn đề về
- hiệu năng và phản hồi chung thông qua bộ theo dõi vấn đề. Bạn cũng có thể kiểm tra
-<a href="{@docRoot}preview/bug">các vấn đề đã biết</a> và
- tìm các bước khắc phục. Chúng tôi sẽ cập nhật thông tin cho bạn về vấn đề của bạn khi nó đã được phân loại và gửi tới
- nhóm kỹ thuật Android xem xét. </li>
- <li> <a href="{@docRoot}preview/dev-community">Cộng đồng Nhà phát triển Android N</a> là
- một cộng đồng Google+ nơi bạn có thể <strong>kết nối với các nhà phát triển khác</strong> đang thử nghiệm
- Android N. Bạn có thể chia sẻ các phát hiện hoặc ý tưởng hoặc tìm câu trả lời cho các
- thắc mắc về Android N. Chúng tôi sẽ điều hành cộng đồng này và cung cấp các câu trả lời và
- hướng dẫn khi cần thiết.</li>
-</ul>
-
-<h3 id="targeting">Nhắm mục tiêu, API xem trước và phát hành</h3>
-
-<p>
- N Developer Preview sẽ cung cấp một hệ thống và thư viện
- Android chỉ dành cho phát triển mà <strong>không có mức API tiêu chuẩn</strong>. Nếu bạn muốn
- bỏ các hành vi về khả năng tương thích để kiểm thử ứng dụng của mình (đặc biệt
- khuyến cáo), bạn có thể nhắm mục tiêu phiên bản xem trước của Android N bằng cách thiết lập
- <code><a href=
- "{@docRoot}preview/setup-sdk.html#create-update">targetSdkVersion</a></code>
- của ứng dụng thành <code>“N”</code>.
-</p>
-
-<p>
- Android N Developer Preview cung cấp các <strong>API xem trước</strong>
- — các API này không phải bản chính thức cho đến khi SDK cuối cùng được phát hành,
- hiện được dự kiến phát hành vào quý ba năm 2016. Điều này có nghĩa là có thể
- <strong>có các thay đổi API nhỏ</strong> sau này, đặc biệt trong
- các tuần đầu của chương trình. Chúng tôi sẽ cung cấp bản tóm tắt các thay đổi cho bạn theo
- mỗi bản cập nhật của Android N Developer Preview.
-</p>
-
-<p class="note">
- <strong>Lưu ý</strong>: Mặc dù các API xem trước có thể thay đổi nhưng
- các hành vi hệ thống cơ bản vẫn ổn định và sẵn sàng để kiểm thử
- ngay.
-</p>
-
-<p>
- Google Play <strong>không cho phép phát hành các ứng dụng nhắm mục tiêu tới N Developer
- Preview</strong>. Khi có bản SDK cuối cùng của Android N bạn sẽ có thể
- nhắm mục tiêu mức API Android N chính thức và phát hành ứng dụng của mình lên Google
- Play thông qua các kênh phát hành alpha và beta. Trong thời gian này, nếu bạn muốn
- phân phối một ứng dụng nhắm mục tiêu Android N cho người kiểm thử thì bạn có thể thực hiện phân phối qua email hoặc
- bằng cách tải trực tiếp trên trang web của bạn.
-</p>
-
-<p>
- Khi Android N được phát hành hoàn chỉnh cho AOSP và OEM, dự kiến vào Q3 2016,
- bạn có thể phát hành ứng dụng của mình nhắm mục tiêu Android N lên kênh
- phát hành công chúng trong Google Play.
-</p>
-
-
-<h2 id="how_to_get_started">Cách thức bắt đầu</h2>
-
-<p>
- Để bắt đầu kiểm thử ứng dụng của bạn với Android N:
-</p>
-
-<ol>
- <li> Xem lại <a href="{@docRoot}preview/api-overview.html">Tổng quan về API</a>
- và <a href="{@docRoot}preview/behavior-changes.html">Các thay đổi Hành vi</a> để
- biết được có những gì mới và nó sẽ tác động đến ứng dụng của bạn như thế nào. Đặc biệt,
- hãy tìm hiểu về các tính năng <a href="{@docRoot}preview/features/notification-updates.html">thông báo</a> mới và
- <a href="{@docRoot}preview/features/multi-window.html">hỗ trợ đa cửa sổ</a>.</li>
- <li> Thiết lập môi trường của bạn bằng cách làm theo các hướng dẫn để <a href="{@docRoot}preview/setup-sdk.html">Preview SDK</a>
- và cấu hình các thiết bị kiểm thử.</li>
- <li> Làm theo <a href="https://developers.google.com/android/nexus/images">các hướng dẫn
- flash</a> để flash ảnh hệ thống Android N mới nhất cho thiết bị của bạn. </li>
- <li> Xem lại <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Tham khảo API</a>
- và <a href="{@docRoot}preview/samples.html">các ví dụ về Android N</a> để hiểu
- sâu hơn về các tính năng API mới cũng như cách sử dụng chúng trong ứng dụng của bạn.
- <li> Tham gia <a href="{@docRoot}preview/dev-community">Cộng đồng
- Nhà phát triển Android N</a> để nhận được thông tin mới nhất và kết nối với các
- nhà phát triển khác đang thử nghiệm với nền tảng mới.</li>
-</ol>
-
-<p>
- Cảm ơn bạn đã tham gia chương trình Android N Developer Preview!
-</p>
diff --git a/docs/html-intl/intl/vi/preview/samples.jd b/docs/html-intl/intl/vi/preview/samples.jd
deleted file mode 100644
index aa1a8c6..0000000
--- a/docs/html-intl/intl/vi/preview/samples.jd
+++ /dev/null
@@ -1,85 +0,0 @@
-page.title=Samples
-page.tags="preview", "samples", "android"
-page.image=images/cards/card-n-samples_2x.png
-@jd:body
-
-<p>
- Các mã mẫu sau được dành cho Android N. Để
- tải xuống mã mẫu cho Android Studio, hãy chọn tùy chọn trong menu <b>File > Import
- Samples</b>.
-</p>
-
-<p class="note">
- <strong>Chú ý:</strong>Các dự án có thể tải xuống này được thiết kế
- để sử dụng với Gradle và Android Studio.
-</p>
-
-
-<h3 id="mw">Dùng thử đa cửa sổ</h3>
-<img src="{@docRoot}preview/images/sample-multiwindow.png" style="float: left; padding-right: 0.5em" height="250" width="156" />
-<p>
- Ví dụ này minh họa cách tận dụng giao diện người dùng
- đa cửa sổ với ứng dụng của bạn.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-MultiWindowPlayground">
- Tải mã trên GitHub</a>
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="an">Thông báo đang Hoạt động</h3>
-<img src="{@docRoot}preview/images/sample-activenotifications.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
-<p>
- Đây là ví dụ đã có sẵn, minh họa một dịch vụ đơn giản để gửi
- thông báo bằng cách sử dụng NotificationCompat. Mỗi cuộc hội thoại chưa đọc từ một người dùng
- sẽ được gửi dưới dạng một thông báo riêng.
-</p>
-<p>
- Ví dụ này đã được cập nhật để tận dụng các tính năng thông báo mới
- có trong Android N.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-ActiveNotifications">
- Tải mã trên GitHub</a>
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="ms">Dịch vụ Nhắn tin</h3>
-<img src="{@docRoot}preview/images/sample-messagingservice.png" style="float: left; padding-right: 0.5em" height="250" width="150" />
-<p>
- Đây là một ví dụ đã có sẵn, minh họa cách sử dụng
- NotificationManager để cho biết có bao nhiêu thông báo một ứng dụng hiện
- đang hiển thị.
-</p>
-<p>
- Ví dụ này đã được cập nhật để tận dụng các tính năng thông báo mới
- có trong Android N.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-MessagingService">
- Tải mã trên GitHub</a>
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="fbe">Khởi động Trực tiếp</h3>
-<img src="{@docRoot}preview/images/sample-directboot.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
-<p>
- Ví dụ này minh họa cách lưu trữ và truy cập dữ liệu trên bộ lưu trữ
- mã hóa thiết bị, luôn khả dụng khi thiết bị được khởi động.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-DirectBoot">
- Tải mã trên GitHub</a>
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="sda">Truy cập Thư mục theo Phạm vi</h3>
-<img src="{@docRoot}preview/images/sample-scopeddirectoryaccess.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
-<p>
- Ví dụ này minh họa cách đọc và ghi dữ liệu từ các thư mục
- cụ thể trong khi cần ít quyền hơn.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-ScopedDirectoryAccess">
- Tải mã trên GitHub</a>
-</p>
\ No newline at end of file
diff --git a/docs/html-intl/intl/vi/preview/setup-sdk.jd b/docs/html-intl/intl/vi/preview/setup-sdk.jd
deleted file mode 100644
index bdba713..0000000
--- a/docs/html-intl/intl/vi/preview/setup-sdk.jd
+++ /dev/null
@@ -1,223 +0,0 @@
-page.title=Thiết lập Preview
-meta.keywords="preview", "android"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-sdk_2x.png
-
-@jd:body
-
-
-<div id="qv-wrapper">
- <div id="qv">
-<ol>
- <li><a href="#get-as13">Tải Android Studio 2.1</a></li>
- <li><a href="#get-sdk">Tải SDK Android N</a>
- <ol>
- <li><a href="#docs-dl">Tài liệu tham khảo</a>
- </ol>
- </li>
- <li><a href="#java8">Tải JDK và JRE của Java 8</a></li>
- <li><a href="#create-update">Cập nhật hoặc Tạo một dự án</a></li>
- <li><a href="#next">Các bước tiếp theo</a></li>
-</ol>
- </div>
-</div>
-
-<p>Để phát triển các ứng dụng cho Android N Preview bạn cần thực hiện một số cập nhật
-đối với môi trường phát triển của mình như mô tả trên trang này.</p>
-
-<p>Để đơn thuần thử khả năng tương thích của ứng dụng trên
-ảnh hệ thống Android N, hãy làm theo hướng dẫn <a href="{@docRoot}preview/download.html">Kiểm thử trên một Thiết bị Android N</a>.</p>
-
-<img src="{@docRoot}preview/images/n-preview-setup.png" width="700" alt="" />
-
-
-<h2 id="get-as13">Tải Android Studio 2.1 (bản xem trước)</h2>
-
-<p>Nền tảng Android N bổ sung hỗ trợ cho <a href="{@docRoot}preview/j8-jack.html">các tính năng của ngôn ngữ Java 8</a>,
-yêu cầu phải có một trình biên dịch mới có tên là Jack. Phiên bản Jack mới nhất
-hiện chỉ được hỗ trợ trong Android Studio 2.1. Do đó, nếu bạn muốn
-sử dụng các tính năng của ngôn ngữ Java 8 thì bạn cần sử dụng Android Studio 2.1 để
-dựng ứng dụng. Nếu không, bạn không cần sử dụng trình biên dịch Jack nhưng bạn
-vẫn cần cập nhật lên JDK 8 để biên dịch cho nền tảng Android N,
-như mô tả dưới đây.
-</p>
-
-<p>Android Studio 2.1 hiện đang có dưới dạng bản xem trước trong kênh
-phát hành Canary. Nếu bạn đã
-có Android Studio và không muốn cập nhật lên kênh canary thì bạn có thể
-tải xuống Android Studio 2.1 dưới dạng bản cài đặt riêng và sử dụng
-để phát triển với Android N để không làm ảnh hưởng đến môi trường Android Studio
-chính của bạn.</p>
-
-<p>Để tải xuống Android Studio 2.1 dưới dạng bản cài đặt riêng, hãy thực hiện
-các bước sau (hoặc nếu bạn muốn nhận Android Studio 2.1 dưới dạng bản cập nhật cho
-bản cài đặt có sẵn thì hãy chuyển đến bước 4):</p>
-
-<ol>
- <li>Chỉnh sửa tên của
- bản cài đặt Android Studio có sẵn và thêm số phiên bản. Làm như vậy
- để khi bạn cài đặt, phiên bản mới sẽ không ghi đè lên phiên bản có sẵn.</li>
- <li>Tải xuống tệp ZIP phù hợp cho hệ điều hành của bạn từ
- <a href="http://tools.android.com/download/studio/canary/latest">trang tải xuống của kênh canary</a>.
- </li>
- <li>Giải nén gói đó và chuyển các thành phần của Android Studio 2.1 tới
- vị trí phù hợp cho các ứng dụng của bạn trên hệ thống rồi khởi chạy nó.</li>
- <li>Mở hộp thoại Settings
- (<strong>File > Settings</strong> trên Windows/Linux, hoặc
- <strong>Android Studio > Preferences</strong> trên Mac). Trong khung
- bên trái, chọn<strong>Appearance & Behavior > System Settings >
- Updates</strong>.
- </li>
- <li>Trên khung Updates, chọn hộp kiểm <strong>Automatically
- check updates for</strong> và chọn
- <strong>Canary Channel</strong> từ danh sách thả xuống.
- </li>
-</ol>
-
-<p>Hãy để cửa sổ cài đặt này mở cho bước tiếp theo.</p>
-
-
-<h2 id="get-sdk">Tải N Preview SDK</h2>
-
-<p>Để bắt đầu phát triển với các API Android N, bạn cần cài đặt
- Android N Preview SDK trong Android Studio như sau:</p>
-
-<ol>
- <li>Vẫn tại khung Updates (bước 4 bên trên),
- hãy chọn hộp kiểm <strong>Automatically
- check updates for Android SDK</strong> và chọn
- <strong>Preview Channel</strong> từ danh sách thả xuống.
- </li>
- <li>Nhấp vào <strong>Check Now</strong>.</li>
-
- <li>Trong khung bên trái, chọn <strong>Appearance & Behavior >
- System Settings > Android SDK</strong>.
-
- <li>Nhấp vào tab <strong>SDK Platforms</strong>, rồi chọn hộp kiểm
- <strong>Android N Preview</strong>.</li>
-
- <li>Nhấp vào tab <strong>SDK Tools</strong>, rồi chọn
- <strong>Android SDK Build Tools</strong>, <strong>Android SDK
- Platform-Tools</strong>, và các hộp kiểm <strong>Android SDK Tools</strong>
-.
- </li>
-
- <li>Nhấp vào <strong>OK</strong>, sau đó đồng ý với các thỏa thuận
- cấp phép cho các gói cần được cài đặt.
- </li>
-</ol>
-
-<h3 id="docs-dl">Tải tài liệu tham khảo cho N Preview</h3>
-
-<p>
- Thông tin chi tiết về các API Android N có trong tài liệu tham khảo của
- Bản xem trước N mà bạn có thể tải xuống từ bảng sau.
- Gói này có một bản ngoại tuyến được rút gọn của trang web
- cho nhà phát triển Android và có một bản tham khảo API được cập nhật cho API Android N, một
- báo cáo về sự khác biệt API.
-</p>
-
-<table>
- <tr>
- <th scope="col">Tài liệu</th>
- <th scope="col">Tổng kiểm</th>
- </tr>
- <tr>
- <td style="white-space: nowrap">
- <a href="{@docRoot}shareables/preview/n-preview-1-docs.zip">n-preview-1-docs.zip</a></td>
- <td width="100%">
- MD5: 4ab33ccbe698f46f125cc5b807cf9c2f<br>
- SHA-1: 6a3880b3ccd19614daae5a4d0698ea6ae11c20a5
- </td>
- </tr>
-</table>
-
-
-
-<h2 id="java8">Tải JDK và JRE của Java 8</h2>
-
-<p>Để biên dịch ứng dụng của bạn cho nền tảng Android N, bạn cần sử dụng
-Bộ công cụ phát triển Java 8 (JDK 8) và để sử dụng một số công cụ với Android
-Studio 2.1 thì bạn cần cài đặt Java 8 Runtime Environment (JRE). Vì vậy, nếu
-bạn không có phiên bản mới nhất của mỗi bộ thì hãy tải xuống JDK 8 và JRE 8
-ngay.</p>
-
-<p>Sau đó đặt phiên bản JDK trong Android Studio như sau:</p>
-
-<ol>
- <li>Mở một dự án Android trong Android Studio, sau đó mở
- hộp thoại Project Structure bằng cách chọn <strong>File >
- Project Structure</strong>. (Bằng cách khác, bạn có thể đặt mặc định
- cho mọi dự án bằng cách chọn <strong>File > Other Settings >
- Default Project Structure</strong>.)
- </li>
- <li>Trong khung bên trái của hộp thoại, hãy nhấp <strong>SDK Location</strong>.
- </li>
- <li>Trong ô <strong>JDK Location</strong>, hãy nhập vị trí của
- Java 8 JDK (nhấp vào nút bên phải
- để duyệt tìm tệp của bạn), sau đó nhấp <strong>OK</strong>.
- </li>
-</ol>
-
-<img src="{@docRoot}preview/images/studio-jdk-location.jpg" width="700" alt="" />
-
-
-<h2 id="create-update">Cập nhật hoặc Tạo một dự án</h2>
-
-<p>
- Dự án của bạn phải được cấu hình phù hợp để sử dụng các API Android N.
-</p>
-
-<p>Nếu bạn dự định sử dụng các tính năng của ngôn ngữ Java 8 thì bạn cũng nên đọc mục
-<a href="{@docRoot}preview/j8-jack.html">Các tính năng của Ngôn ngữ Java 8</a>
-để biết thêm thông tin về các tính năng của Java 8 được hỗ trợ và
-cách cấu hình dự án với trình biên dịch Jack.</p>
-
-
-<h3 id="update">Cập nhật một dự án có sẵn</h3>
-
-<p>Mở tệp
- <code>build.gradle</code> cho mô-đun của bạn và cập nhật các giá trị như
- sau:
-</p>
-
-<pre>
-android {
- compileSdkVersion <strong>'android-N'</strong>
- buildToolsVersion <strong>'24.0.0-rc1'</strong>
- ...
-
- defaultConfig {
- minSdkVersion <strong>'N'</strong>
- targetSdkVersion <strong>'N'</strong>
- ...
- }
- ...
-}</pre>
-
-
-<h3 id="create">Tạo một dự án mới</h3>
-
-
-<p>Để tạo một dự án mới để phát triển với Android N Preview SDK:</p>
-
-<ol>
- <li>Nhấp vào <strong>File > New Project</strong>. và thực hiện theo các bước đến khi
- bạn đến trang Target Android Devices.
- </li>
- <li>Trong trang này, hãy chọn tùy chọn <strong>Phone and Tablet</strong>.</li>
- <li>Dưới tùy chọn <strong>Phone and Tablet</strong>, trong danh sách tùy chọn <strong>Minimum
- SDK</strong> hãy chọn
- <strong>N: Android API 23, N Preview (Preview)</strong>.</li>
-</ol>
-
-
-<h2 id="next">Các bước tiếp theo</h2>
-
-<ul>
- <li>Làm theo hướng dẫn <a href="{@docRoot}preview/download.html">Kiểm thử trên một Thiết bị Android N</a>.</li>
- <li>Tìm hiểu thêm về nền tảng Android N với
-<a href="{@docRoot}preview/behavior-changes.html">Các thay đổi Hành vi</a>
-và<a href="{@docRoot}preview/api-overview.html">API Android N
-và Các tính năng</a>.</li>
-</ul>
diff --git a/docs/html-intl/intl/vi/training/articles/direct-boot.jd b/docs/html-intl/intl/vi/training/articles/direct-boot.jd
new file mode 100644
index 0000000..c93e255
--- /dev/null
+++ b/docs/html-intl/intl/vi/training/articles/direct-boot.jd
@@ -0,0 +1,181 @@
+page.title=Khởi động Trực tiếp
+page.keywords=preview,sdk,direct boot
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>Trong tài liệu này</h2>
+ <ol>
+ <li><a href="#run">Yêu cầu Truy cập để Chạy trong quá trình Khởi động Trực tiếp</a></li>
+ <li><a href="#access">Truy cập Bộ nhớ Lưu trữ Mã hóa của Thiết bị</a></li>
+ <li><a href="#notification">Nhận thông báo Mở khóa của Người dùng</a></li>
+ <li><a href="#migrating">Chuyển nhập Dữ liệu Có sẵn</a></li>
+ <li><a href="#testing">Kiểm thử Ứng dụng Nhận biết Mã hóa của bạn</a></li>
+ </ol>
+</div>
+</div>
+
+<p>Android N chạy trong chế độ <i>Khởi động Trực tiếp</i> an toàn
+khi thiết bị đã được bật nguồn nhưng người dùng chưa mở khóa
+thiết bị. Để hỗ trợ chế độ này, hệ thống cung cấp hai vị trí lưu trữ dữ liệu:</p>
+
+<ul>
+<li><i>Lưu trữ mã hóa thông tin xác thực</i>, là vị trí lưu trữ mặc định
+và chỉ khả dụng sau khi người dùng đã mở khóa thiết bị.</li>
+<li><i>Lưu trữ mã hóa thiết bị</i>, là vị trí lưu trữ khả dụng cho cả
+chế độ Khởi động Trực tiếp và sau khi người dùng đã mở khóa thiết bị.</li>
+</ul>
+
+<p>Theo mặc định, các ứng dụng không chạy trong quá trình chế độ Khởi động Trực tiếp.
+Nếu ứng dụng của bạn cần thực hiện hành động trong chế độ Khởi động Trực tiếp thì bạn có thể đăng ký
+các thành phần ứng dụng cần chạy trong chế độ này. Một số trường hợp sử dụng phổ biến
+cho các ứng dụng cần chạy trong chế độ Khởi động Trực tiếp gồm:</p>
+
+<ul>
+<li>Ứng dụng có thông báo theo lịch, như ứng dụng
+đồng hồ báo thức.</li>
+<li>Ứng dụng cung cấp các thông báo quan trọng cho người dùng như ứng dụng SMS.</li>
+<li>Ứng dụng cung cấp các dịch vụ trợ năng như Talkback.</li>
+</ul>
+
+<p>Nếu ứng dụng của bạn cần truy cập dữ liệu khi đang chạy trong chế độ Khởi động Trực tiếp thì hãy sử dụng
+lưu trữ mã hóa thiết bị. Bộ nhớ lưu trữ được mã hóa của thiết bị có chứa dữ liệu
+được mã hóa bằng một khóa chỉ khả dụng sau khi thiết bị đã thực hiện một
+lần khởi động được xác thực thành công.</p>
+
+<p>Đối với dữ liệu cần được mã hóa bằng một khóa liên kết tới thông tin xác thực
+của người dùng như mã PIN hoặc mật khẩu thì hãy sử dụng bộ nhớ lưu trữ mã hóa thông tin xác thực.
+Bộ nhớ lưu trữ mã hóa thông tin xác thực chỉ khả dụng sau khi người dùng đã mở khóa
+thành công thiết bị, tính đến khi người dùng khởi động lại thiết bị một lần nữa. Nếu
+người dùng mở màn hình khóa sau khi mở khóa thiết bị thì thao tác này không khóa
+bộ nhớ mã hóa thông tin xác thực.</p>
+
+<h2 id="run">Yêu cầu Truy cập để Chạy trong quá trình Khởi động Trực tiếp</h2>
+
+<p>Các ứng dụng phải đăng ký các thành phần của chúng với hệ thống trước khi chúng
+có thể chạy trong chế độ Khởi động Trực tiếp hoặc truy cập bộ nhớ lưu trữ
+mã hóa thiết bị. Ứng dụng đăng ký với hệ thống bằng cách đánh dấu các thành phần là
+<i>nhận biết mã hóa</i>. Để đánh dấu các thành phần của bạn là nhận biết mã hóa, hãy đặt thuộc tính
+<code>android:encryptionAware</code> thành true trong bản kê khai.<p>
+
+<p>Các thành phần nhận biết mã hóa có thể đăng ký để nhận một thông điệp truyền phát
+<code>LOCKED_BOOT_COMPLETED</code> từ
+hệ thống khi thiết bị được khởi động lại. Lúc này, bộ nhớ lưu trữ
+mã hóa thiết bị sẽ khả dụng và thành phần của bạn có thể thực thi các tác vụ cần được
+chạy trong chế độ Khởi động Trực tiếp, như kích hoạt báo thức đã đặt.</p>
+
+<p>Đoạn mã sau là một ví dụ về cách đăng ký một
+{@link android.content.BroadcastReceiver} là nhận biết mã hóa và thêm một
+bộ lọc ý định cho <code>LOCKED_BOOT_COMPLETED</code> trong bản kê khai của ứng dụng:</p>
+
+<pre>
+<receiever
+ android:encryptionAware="true" >
+ ...
+ <intent-filter>
+ <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
+ </intent-filter>
+</receiver>
+</pre>
+
+<p>Khi người dùng đã mở khóa thiết bị thì mọi thành phần có thể truy cập
+cả bộ nhớ lưu trữ mã hóa thiết bị lẫn bộ nhớ lưu trữ mã hóa thông tin xác thực.</p>
+
+<h2 id="access">Truy cập Bộ nhớ Lưu trữ Mã hóa của Thiết bị</h2>
+
+<p>Để truy cập bộ nhớ lưu trữ mã hóa thiết bị, hãy tạo một thực thể
+{@link android.content.Context} thứ hai bằng cách gọi
+<code>Context.createDeviceEncryptedStorageContext()</code>. Tất cả các lệnh gọi
+API bộ nhớ lưu trữ đều sử dụng bối cảnh này để truy cập bộ nhớ lưu trữ mã hóa thiết bị.
+Ví dụ sau sẽ truy cập bộ nhớ lưu trữ mã hóa của thiết bị và mở một tệp
+dữ liệu ứng dụng có sẵn:</p>
+
+<pre>
+Context directBootContext = Context.createDeviceEncryptedStorageContext();
+// Access appDataFilename that lives in device encrypted storage
+FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
+// Use inStream to read content...
+</pre>
+
+<p>Chỉ sử dụng bộ nhớ lưu trữ mã hóa của thiết bị
+cho thông tin phải truy cập được trong chế độ Khởi động Trực tiếp.
+Không sử dụng bộ nhớ lưu trữ mã hóa của thiết bị làm bộ lưu trữ mã hóa cho mục đích chung.
+Đối với thông tin cá nhân của người dùng, hoặc dữ liệu được mã hóa không cần thiết
+trong chế độ Khởi động Trực tiếp thì hãy sử dụng bộ nhớ lưu trữ mã hóa thông tin xác thực.</p>
+
+<h2 id="notification">Nhận thông báo Mở khóa của Người dùng</h2>
+
+<p>Một khi người dùng mở khóa thiết bị sau khi khởi động lại, ứng dụng của bạn có thể chuyển sang
+truy cập bộ nhớ lưu trữ mã hóa thông tin xác thực và sử dụng các dịch vụ thông thường của hệ thống
+phụ thuộc vào thông tin xác thực người dùng.</p>
+
+<p>Để nhận thông báo khi người dùng mở khóa thiết bị sau khi khởi động lại,
+hãy đăng ký một {@link android.content.BroadcastReceiver} từ một thành phần đang chạy
+để lắng nghe thông báo <code>ACTION_USER_UNLOCKED</code>. Hoặc bạn có thể
+nhận thông báo có sẵn {@link android.content.Intent#ACTION_BOOT_COMPLETED
+ACTION_BOOT_COMPLETED} lúc này sẽ chỉ báo thiết bị đã khởi động xong và
+người dùng đã mở khóa thiết bị.</p>
+
+<p>Bạn có thể truy vấn trực tiếp để biết người dùng đã mở khóa thiết bị hay chưa bằng cách gọi
+<code>UserManager.isUserUnlocked()</code>.</p>
+
+<h2 id="migrating">Chuyển nhập Dữ liệu Có sẵn</h2>
+
+<p>Nếu người dùng cập nhật thiết bị của họ để sử dụng chế độ Khởi động Trực tiếp thì bạn có thể có dữ liệu
+hiện hữu cần được chuyển nhập sang bộ nhớ lưu trữ mã hóa của thiết bị. Sử dụng
+<code>Context.migrateSharedPreferencesFrom()</code> và
+<code>Context.migrateDatabaseFrom()</code> để chuyển nhập dữ liệu về tùy chọn và cơ sở dữ liệu
+giữa bộ nhớ lưu trữ mã hóa thông tin xác thực và bộ nhớ lưu trữ mã hóa thiết bị.</p>
+
+<p>Hãy phán đoán hợp lý nhất khi quyết định dữ liệu nào nên chuyển nhập từ bộ nhớ lưu trữ mã hóa
+thông tin xác thực sang bộ nhớ lưu trữ mã hóa thiết bị. Bạn không nên di chuyển
+thông tin cá nhân của người dùng như mật khẩu hoặc các mã thông báo cấp quyền sang
+bộ nhớ lưu trữ mã hóa thiết bị. Trong một số trường hợp, bạn có thể cần quản lý
+các bộ dữ liệu riêng biệt trong hai bộ lưu trữ mã hóa.</p>
+
+<h2 id="testing">Kiểm thử Ứng dụng Nhận biết Mã hóa của bạn</h2>
+
+<p>Kiểm thử ứng dụng nhận biết mã hóa bằng cách sử dụng chế độ Khởi động Trực tiếp mới. Có
+hai cách để kích hoạt Khởi động Trực tiếp.</p>
+
+<p class="caution"><strong>Cẩn trọng:</strong> Kích hoạt Khởi động Trực tiếp
+sẽ xóa sạch mọi dữ liệu người dùng trên thiết bị.</p>
+
+<p>Trên các thiết bị được hỗ trợ có Android N được cài đặt, kích hoạt
+Khởi động Trực tiếp bằng cách thực hiện một trong các thao tác sau:</p>
+
+<ul>
+<li>Trên thiết bị, bật <b>Developer options</b> nếu chưa hãy bật bằng cách
+vào <b>Settings > About phone</b> và nhấn vào <b>Build number</b>
+bảy lần. Khi màn hình tùy chọn cho nhà phát triển khả dụng, hãy vào
+<b>Settings > Developer options</b> và chọn
+<b>Convert to file encryption</b>.</li>
+<li>Sử dụng các lệnh shell adb sau để kích hoạt chế độ Khởi động Trực tiếp:
+<pre class="no-pretty-print">
+$ adb reboot-bootloader
+$ fastboot --wipe-and-use-fbe
+</pre>
+</li>
+</ul>
+
+<p>Cũng có một chế độ Khởi động Trực tiếp giả lập trong trường hợp bạn cần chuyển đổi
+các chế độ trên thiết bị thử nghiệm. Chỉ nên sử dụng chế độ Giả lập trong quá trình
+phát triển và có thể làm mất dữ liệu. Để kích hoạt chế độ Khởi động Trực tiếp giả lập,
+hãy đặt mẫu hình khóa cho thiết bị, chọn "No thanks" nếu được yêu cầu
+ bật màn hình khởi động bảo mật khi đặt một mẫu hình khóa và sau đó sử dụng
+lệnh shell adb sau:</p>
+
+<pre class="no-pretty-print">
+$ adb shell sm set-emulate-fbe true
+</pre>
+
+<p>Hãy sử dụng lệnh sau để tắt chế độ Khởi động Trực tiếp giả lập:</p>
+
+<pre class="no-pretty-print">
+$ adb shell sm set-emulate-fbe false
+</pre>
+
+<p>Sử dụng các lệnh này có thể khiến cho thiết bị khởi động lại.</p>
diff --git a/docs/html-intl/intl/vi/training/articles/scoped-directory-access.jd b/docs/html-intl/intl/vi/training/articles/scoped-directory-access.jd
new file mode 100644
index 0000000..a4d9779
--- /dev/null
+++ b/docs/html-intl/intl/vi/training/articles/scoped-directory-access.jd
@@ -0,0 +1,124 @@
+page.title=Truy cập Thư mục theo Phạm vi
+page.keywords=preview,sdk,scoped directory access
+page.tags=androidn
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>Trong tài liệu này</h2>
+ <ol>
+ <li><a href="#accessing">Truy cập một Thư mục lưu trữ bên ngoài</a></li>
+ <li><a href="#removable">Truy cập một Thư mục trên Phương tiện tháo lắp được</a></li>
+ <li><a href="#best">Thực hành Tốt nhất</a></li>
+ </ol>
+</div>
+</div>
+
+<p>Các ứng dụng như ứng dụng ảnh thường chỉ cần truy cập đến các thư mục đã quy định trong
+bộ nhớ ngoài như thư mục <code>Pictures</code>. Các phương pháp
+ hiện tại để truy cập bộ nhớ lưu trữ ngoài vẫn chưa được thiết kế để dễ dàng cho phép
+truy cập thư mục đích cho những kiểu ứng dụng này. Ví dụ:</p>
+
+<ul>
+<li>Việc yêu cầu {@link android.Manifest.permission#READ_EXTERNAL_STORAGE}
+hoặc {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} trong bản kê khai của bạn
+sẽ cho phép truy cập đến tất cả các thư mục công khai trên bộ nhớ lưu trữ ngoài, mà có thể
+cấp nhiều quyền truy cập hơn những gì ứng dụng của bạn cần.</li>
+<li>Sử dụng
+<a href="{@docRoot}guide/topics/providers/document-provider.html">Khuôn khổ
+ Truy cập Kho lưu trữ</a> thường khiến người dùng chọn thư mục
+thông qua UI hệ thống. Đây là điều không cần thiết nếu ứng dụng của bạn luôn truy cập cùng
+một thư mục bên ngoài.</li>
+</ul>
+
+<p>Android N cung cấp một API mới được đơn giản hóa để truy cập
+các thư mục lưu trữ bên ngoài thường dùng. </p>
+
+<h2 id="accessing">Truy cập một Thư mục lưu trữ bên ngoài</h2>
+
+<p>Sử dụng lớp <code>StorageManager</code> để lấy thực thể
+<code>StorageVolume</code> phù hợp. Sau đó tạo một ý định bằng cách gọi phương thức
+<code>StorageVolume.createAccessIntent()</code> của thực thể đó.
+Sử dụng ý định này để truy cập các thư mục lưu trữ bên ngoài. Để lấy danh sách
+tất cả các ổ đĩa, bao gồm các ổ đĩa media có thể tháo lắp, hãy sử dụng
+<code>StorageManager.getVolumesList()</code>.</p>
+
+<p>Đoạn mã sau là một ví dụ về cách mở thư mục
+<code>Pictures</code> trong bộ nhớ lưu trữ chính được chia sẻ:</p>
+
+<pre>
+StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
+StorageVolume volume = sm.getPrimaryVolume();
+Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+</pre>
+
+<p>Hệ thống sẽ cố gắng cấp quyền truy cập tới thư mục bên ngoài và nếu
+cần sẽ xác nhận quyền truy cập với người dùng bằng một UI được đơn giản hóa:</p>
+
+<img src="{@docRoot}images/android-7.0/scoped-directory-access-framed.png" srcset="{@docRoot}images/android-7.0/scoped-directory-access-framed.png 1x,
+{@docRoot}images/android-7.0/scoped-directory-access-framed_2x.png 2x" />
+<p class="img-caption"><strong>Hình 1.</strong> Một ứng dụng yêu cầu
+truy cập tới thư mục Pictures.</p>
+
+<p>Nếu người dùng cấp quyền truy cập, hệ thống sẽ gọi phương thức ghi đè
+<code>onActivityResult()</code> của bạn với mã kết quả là
+<code>Activity.RESULT_OK</code> và dữ liệu ý định có chứa URI. Hãy sử dụng
+URI được cung cấp để truy cập thông tin thư mục, giống như sử dụng các URI
+được trả về bởi
+<a href="{@docRoot}guide/topics/providers/document-provider.html">Khuôn khổ
+ Truy cập Kho lưu trữ</a>.</p>
+
+<p>Nếu người dùng không cấp quyền truy cập, hệ thống sẽ gọi phương thức ghi đè
+<code>onActivityResult()</code> của bạn với mã kết quả là
+<code>Activity.RESULT_CANCELED</code> và dữ liệu ý định có giá trị null.</p>
+
+<p class="note"><b>Lưu ý</b>: Lấy quyền truy cập tới một thư mục bên ngoài được chỉ định
+cũng sẽ cấp quyền truy cập tới các thư mục con thuộc thư mục đó.</p>
+
+<h2 id="removable">Truy cập một Thư mục trên phương tiện tháo lắp được</h2>
+
+<p>Để sử dụng Truy cập Thư mục theo Phạm vi nhằm truy cập các thư mục trên phương tiện có thể tháo lắp,
+trước hết, hãy thêm một {@link android.content.BroadcastReceiver} để lắng nghe
+thông báo {@link android.os.Environment#MEDIA_MOUNTED}, ví dụ:</p>
+
+<pre>
+<receiver
+ android:name=".MediaMountedReceiver"
+ android:enabled="true"
+ android:exported="true" >
+ <intent-filter>
+ <action android:name="android.intent.action.MEDIA_MOUNTED" />
+ <data android:scheme="file" />
+ </intent-filter>
+</receiver>
+</pre>
+
+<p>Khi người dùng kết nối một phương tiện có thể tháo lắp như thẻ SD thì hệ thống sẽ gửi một thông báo
+{@link android.os.Environment#MEDIA_MOUNTED}. Thông báo này
+sẽ cung cấp một đối tượng <code>StorageVolume</code> trong dữ liệu ý định mà bạn có thể
+sử dụng để truy cập các thư mục trên phương tiện có thể tháo lắp đó. Ví dụ sau
+sẽ truy cập thư mục <code>Pictures</code> trên phương tiện có thể tháo lắp:</p>
+
+<pre>
+// BroadcastReceiver has already cached the MEDIA_MOUNTED
+// notification Intent in mediaMountedIntent
+StorageVolume volume = (StorageVolume)
+ mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
+volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+</pre>
+
+<h2 id="best">Thực hành Tốt nhất</h2>
+
+<p>Khi có thể, hãy duy trì URI truy cập thư mục bên ngoài để bạn không phải
+lặp lại yêu cầu người dùng cấp quyền truy cập. Khi người dùng đã cấp quyền truy cập, hãy gọi
+<code>getContentResolver().takePersistableUriPermssion()</code> với
+URI truy cập thư mục. Hệ thống sẽ duy trì URI và các yêu cầu
+truy cập sau này sẽ trả về <code>RESULT_OK</code> và không hiển thị UI xác nhận cho
+người dùng nữa.</p>
+
+<p>Nếu người dùng từ chối quyền truy cập đến một thư mục bên ngoài thì đừng
+yêu cầu truy cập lại ngay lập tức. Lặp đi lặp lại yêu cầu truy cập sẽ dẫn đến trải nghiệm
+người dùng không tốt.</p>
diff --git a/docs/html-intl/intl/vi/training/articles/security-config.jd b/docs/html-intl/intl/vi/training/articles/security-config.jd
new file mode 100644
index 0000000..1d8670d
--- /dev/null
+++ b/docs/html-intl/intl/vi/training/articles/security-config.jd
@@ -0,0 +1,745 @@
+page.title=Cấu hình Bảo mật mạng
+page.keywords=androidn,security,network
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>Trong tài liệu này</h2>
+<ol>
+ <li><a href="#manifest">Thêm một tệp Cấu hình Bảo mật mạng</a></li>
+ <li><a href="#CustomTrust">Tùy chỉnh các CA đáng tin cậy</a>
+ <ol>
+ <li><a href="#ConfigCustom">Cấu hình một CA tùy chỉnh đáng tin cậy</a></li>
+ <li><a href="#LimitingCas">Giới hạn bộ CA đáng tin cậy</a></li>
+ <li><a href="#TrustingAdditionalCas">Tin cậy các CA bổ sung</a></li>
+ </ol>
+ </li>
+ <li><a href="#TrustingDebugCa">Các CA chỉ trong chế độ gỡ lỗi</a></li>
+ <li><a href="#UsesCleartextTraffic">Không sử dụng truyền gửi văn bản chưa mã hóa</a></li>
+ <li><a href="#CertificatePinning">Ghim chứng chỉ</a></li>
+ <li><a href="#ConfigInheritance">Hành vi Kế thừa cấu hình</a></li>
+ <li><a href="#FileFormat">Định dạng Tệp cấu hình</a></li>
+</ol>
+</div>
+</div>
+
+
+<p>
+ Android N có tính năng Cấu hình Bảo mật mạng
+ cho phép ứng dụng tùy chỉnh các cài đặt bảo mật mạng trong một tệp
+ cấu hình khai báo an toàn mà không cần sửa đổi mã nguồn ứng dụng. Các cài đặt này có thể
+ được cấu hình cho các miền cụ thể và cho một ứng dụng cụ thể. Các khả năng
+ chính của tính năng này như sau:
+</p>
+
+<ul>
+ <li>
+ <b>Nguồn tin cậy tùy chỉnh:</b> Tùy chính các Nhà cung cấp chứng chỉ (CA)
+ nào được tin cậy cho các kết nối bảo mật của một ứng dụng. Ví
+ dụ, tin cậy các chứng chỉ tự ký đặc biệt hoặc hạn chế
+ bộ CA công khai mà ứng dụng tin cậy.
+ </li>
+
+ <li>
+ <b>Chỉ khống chế khi gỡ lỗi:</b> Gỡ lỗi các kết nối bảo mật một cách an toàn trong một ứng dụng
+ mà không thêm rủi ro cho cơ sở cài đặt.
+ </li>
+
+ <li>
+ <b>Không sử dụng truyền gửi văn bản chưa mã hóa:</b> Bảo vệ các ứng dụng khỏi việc
+ vô tình sử dụng truyền gửi văn bản chưa mã hóa.
+ </li>
+
+ <li>
+ <b>Ghim chứng chỉ:</b> Giới hạn kết nối bảo mật của ứng dụng
+ trong các chứng chỉ đặc biệt.
+ </li>
+</ul>
+
+
+<h2 id="manifest">Thêm một Tệp Cấu hình Bảo mật mạng</h2>
+
+<p>
+ Tính năng Cấu hình Bảo mật mạng sử dụng một tệp XML làm nơi bạn sẽ chỉ định
+ các cài đặt cho ứng dụng của mình. Bạn phải bổ sung một mục nhập trong bản kê khai của
+ ứng dụng để trỏ đến tệp này. Đoạn mã sau của một bản kê khai
+ minh họa cách tạo mục nhập này:
+</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+...
+<app ...>
+ <meta-data android:name="android.security.net.config"
+ android:resource="@xml/network_security_config" />
+ ...
+</app>
+</pre>
+
+<h2 id="CustomTrust">Tùy chỉnh các CA đáng tin cậy</h2>
+
+<p>
+ Một ứng dụng có thể muốn tin cậy một bộ các CA tùy chỉnh thay vì mặc định
+ của nền tảng. Những lý do phổ biến nhất cho điều này là:
+</p>
+
+<ul>
+ <li>Kết nối tới một máy chủ có nhà cung cấp chứng chỉ riêng (tự ký,
+ được cấp bởi một CA nội bộ của công ty, v.v.).
+ </li>
+
+ <li>Giới hạn bộ CA chỉ trong các CA mà bạn tin cậy thay vì mọi
+ CA được cài đặt trước.
+ </li>
+
+ <li>Tin cậy các CA bổ sung không được kèm theo trong hệ thống.
+ </li>
+</ul>
+
+<p>
+ Theo mặc định, các kết nối bảo mật (vd: TLS, HTTPS) từ mọi ứng dụng sẽ tin cậy
+ các CA của hệ thống được cài đặt trước và các ứng dụng nhắm mục tiêu mức API 23
+ (Android M) và thấp hơn theo mặc định cũng tin cậy kho lưu trữ CA được người dùng bổ sung. Một
+ ứng dụng có thể tùy chỉnh các kết nối của riêng nó bằng cách sử dụng {@code base-config} (dành cho
+ tùy chỉnh trên phạm vi ứng dụng) hoặc {@code domain-config} (tùy chỉnh
+ cho mỗi miền).
+</p>
+
+
+<h3 id="ConfigCustom">Cấu hình một CA tùy chỉnh</h3>
+
+<p>
+ Giả sử bạn muốn kết nối tới máy chủ của mình có sử dụng các chứng chỉ
+ SSL tự ký hoặc tới một máy chủ có chứng chỉ SSL được cấp bởi một CA không công khai
+ mà bạn tin cậy, chẳng hạn như CA nội bộ của công ty.
+</p>
+
+<p>
+ <code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/my_ca"/>
+ </trust-anchors>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+<p>
+ Thêm chứng chỉ CA tự ký hoặc không công khai theo định dạng PEM hoặc DER vào
+ {@code res/raw/my_ca}.
+</p>
+
+
+<h3 id="LimitingCas">Giới hạn bộ CA đáng tin cậy</h3>
+
+<p>
+ Một ứng dụng không muốn tin cậy mọi CA được hệ thống tin cậy có thể
+ chỉ định bộ CA hạn chế của riêng nó để tin cậy. Điều này sẽ bảo vệ
+ ứng dụng khỏi các chứng chỉ lừa đảo được cấp bởi bất kỳ CA nào khác.
+</p>
+
+<p>
+ Cấu hình để giới hạn bộ CA đáng tin cậy cũng giống như <a href="#TrustingACustomCa">Tin cậy một CA tùy chỉnh</a> cho một miền cụ thể ngoại trừ
+ việc nhiều CA được cung cấp trong tài nguyên.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">secure.example.com</domain>
+ <domain includeSubdomains="true">cdn.example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/trusted_roots"/>
+ </trust-anchors>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+<p>
+ Thêm các CA đáng tin cậy theo định dạng PEM hoặc DER vào {@code res/raw/trusted_roots}.
+ Lưu ý rằng nếu sử dụng định dạng PEM thì tệp <em>chỉ</em> được chứa dữ liệu PEM
+ và không có thêm dữ liệu văn bản. Bạn cũng có thể cung cấp nhiều
+ phần tử <a href="#certificates"><code><certificates></code></a>
+ thay vì một phần tử.
+</p>
+
+
+<h3 id="TrustingAdditionalCas">
+ Tin cậy các CA bổ sung
+</h3>
+
+<p>
+ Một ứng dụng có thể muốn tin cậy các CA bổ sung không được hệ thống tin cậy,
+ điều này có thể do hệ thống chưa thêm CA đó hoặc một CA không
+ đáp ứng các yêu cầu để đưa vào hệ thống Android. Một
+ ứng dụng có thể thực hiện điều này bằng cách chỉ định nhiều nguồn chứng chỉ cho một
+ cấu hình.
+</p>
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <base-config>
+ <trust-anchors>
+ <certificates src="@raw/extracas"/>
+ <certificates src="system"/>
+ </trust-anchors>
+ </base-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="TrustingDebugCa">Cấu hình các CA để gỡ lỗi</h2>
+
+<p>
+ Khi gỡ lỗi một ứng dụng kết nối qua HTTPS thì bạn có thể muốn
+ kết nối tới một máy chủ phát triển cục bộ không có chứng chỉ
+ SSL dành cho máy chủ thương mại của bạn. Để hỗ trợ cho trường hợp này mà không cần
+ chỉnh sửa mã nguồn ứng dụng của bạn thì bạn có thể chỉ định các CA chỉ dùng cho gỡ lỗi
+ mà <i>chỉ</i> được tin cậy khi <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">
+android:debuggable</a>
+ là {@code true} bằng cách sử dụng {@code debug-overrides}. Thông thường các IDE và công cụ
+ dựng sẽ đặt cờ này tự động đối với các bản dựng không dùng để phát hành.
+</p>
+
+<p>
+ Làm như vậy an toàn hơn so với mã điều kiện thông thường bởi, là điều kiện
+ bảo mật tiên quyết, các cửa hàng ứng dụng không chấp nhận các ứng dụng được đánh dấu
+ là hỗ trợ gỡ lỗi.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <debug-overrides>
+ <trust-anchors>
+ <certificates src="@raw/debug_cas"/>
+ </trust-anchors>
+ </debug-overrides>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="UsesCleartextTraffic">Không sử dụng truyền gửi văn bản chưa mã hóa</h2>
+
+<p>
+ Các ứng dụng có ý định kết nối tới các điểm đích chỉ sử dụng các kết nối
+ bảo mật có thể bỏ hỗ trợ truyền gửi văn bản không mã hóa (bằng giao thức
+ HTTP không mã hóa thay vì HTTPS) tới các đích đó. Tùy chọn này giúp ngăn
+ các hồi quy tiềm tàng trong ứng dụng do thay đổi trong các URL được cung cấp bởi các nguồn
+ bên ngoài như các máy chủ phụ trợ.
+ Hãy xem {@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted
+ NetworkSecurityPolicy.isCleartextTrafficPermitted()} để biết thêm chi tiết.
+</p>
+
+<p>
+ Ví dụ, một ứng dụng có thể đảm bảo rằng mọi kết nối tới {@code
+ secure.example.com} luôn được thực hiện qua HTTPS để bảo vệ việc truyền gửi dữ liệu nhạy cảm
+ khỏi các mạng có hại.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config usesCleartextTraffic="false">
+ <domain includeSubdomains="true">secure.example.com</domain>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="CertificatePinning">Ghim chứng chỉ</h2>
+
+<p>
+ Thông thường thì một ứng dụng sẽ tin cậy mọi CA được cài đặt sẵn. Nếu bất kỳ CA nào trong số này sẽ
+ phát hành một chứng chỉ lừa đảo thì ứng dụng sẽ gặp phải rủi ro từ một cuộc tấn công
+ MiTM. Một số ứng dụng chọn cách giới hạn bộ chứng chỉ được chúng chấp nhận
+ bằng cách giới hạn bộ CA được ứng dụng tin cậy hoặc bằng cách ghim chứng chỉ.
+</p>
+
+<p>
+ Ghim chứng chỉ được thực hiện bằng cách cung cấp một bộ chứng chỉ theo mã hash của
+ khóa công khai (SubjectPublicKeyInfo của chứng chỉ X.509). Một chuỗi
+ chứng chỉ khi đó chỉ hợp lệ nếu như chuỗi chứng chỉ có chứa ít nhất một trong
+ các khóa công khai được ghim.
+</p>
+
+<p>
+ Lưu ý rằng khi sử dụng ghim chứng chỉ bạn phải luôn kèm thêm một khóa
+ dự phòng để nếu bạn bị buộc phải chuyển sang các khóa mới hoặc thay đổi các CA (khi
+ ghim vào một chứng chỉ CA hoặc một chứng chỉ trung gian của CA đó) thì
+ kết nối của ứng dụng sẽ không bị ảnh hưởng. Nếu không bạn phải đưa ra một
+ bản cập nhật cho ứng dụng để khôi phục khả năng kết nối.
+</p>
+
+<p>
+ Ngoài ra, có thể đặt thời gian hết hạn cho các ghim, sau thời gian đó
+ sẽ không tiến hành ghim được. Điều này giúp phòng ngừa các vấn đề về kết nối trong
+ ứng dụng chưa được cập nhật. Tuy nhiên, việc đặt thời gian hết hạn
+ trên các ghim này có thể khiến ghim bị bỏ qua.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <pin-set expiration="2018-01-01">
+ <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
+ <!-- backup pin -->
+ <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="ConfigInheritance">Hành vi Kế thừa cấu hình</h2>
+
+<p>
+ Các giá trị chưa được đặt trong một cấu hình cụ thể sẽ được kế thừa. Hành vi này cho phép tạo ra các cấu hình phức tạp
+ hơn trong khi vẫn giữ cho tệp cấu hình có thể đọc được.
+</p>
+
+<p>
+ Nếu một giá trị không được đặt trong một mục nhập cụ thể thì giá trị thuộc mục nhập
+ bao quát hơn tiếp theo sẽ được sử dụng. Các giá trị chưa được đặt trong {@code domain-config} sẽ được
+ lấy từ phần tử cha {@code domain-config} nếu như được lồng, hoặc từ {@code
+ base-config} nếu không được lồng. Các giá trị chưa được đặt trong {@code base-config} sẽ sử dụng
+ các giá trị mặc định của nền tảng.
+</p>
+
+<p>
+ Ví dụ: hãy xem xét trường hợp tất cả các kết nối tới miền con của {@code
+ example.com} phải sử dụng một bộ CA tùy chỉnh. Ngoài ra, truyền gửi văn bản không mã hóa tới
+ các miền này được cho phép <em>trừ khi</em> kết nối tới {@code
+ secure.example.com}. Bằng cách lồng cấu hình cho {@code
+ secure.example.com} bên trong cấu hình cho {@code example.com} thì
+ {@code trust-anchors} không cần phải được sao lặp.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/my_ca"/>
+ </trust-anchors>
+ <domain-config cleartextTrafficPermitted="false">
+ <domain includeSubdomains="true">secure.example.com</domain>
+ </domain-config>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="FileFormat">Định dạng Tệp cấu hình</h2>
+
+<p>
+ Tính năng Cấu hình Bảo mật mạng sử dụng một định dạng tệp XML.
+ Cấu trúc chung của tệp này được thể hiện trong đoạn mẫu mã nguồn sau:
+</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <base-config>
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ </base-config>
+
+ <domain-config>
+ <domain>android.com</domain>
+ ...
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ <pin-set>
+ <pin digest="...">...</pin>
+ ...
+ </pin-set>
+ </domain-config>
+ ...
+ <debug-overrides>
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ </debug-overrides>
+</network-security-config>
+</pre>
+
+<p>
+ Các phần sau sẽ mô tả cú pháp và các chi tiết khác của định dạng
+ tệp này.
+</p>
+
+<h3 id="network-security-config">
+ <network-security-config>
+</h3>
+
+<dl class="xml">
+ <dt>
+ có thể chứa:
+ </dt>
+
+ <dd>
+ 0 hoặc 1 của <code><a href="#base-config"><base-config></a></code><br>
+ Bất kỳ số nào của <code><a href=
+ "#domain-config"><domain-config></a></code><br>
+ 0 hoặc 1 của <code><a href="#debug-overrides"><debug-overrides></a></code>
+ </dd>
+</dl>
+
+<h3 id="base-config">
+ <base-config>
+</h3>
+
+<dl class="xml">
+ <dt>
+ cú pháp:
+ </dt>
+</dl>
+
+<pre class="stx">
+<base-config <a href=
+"#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
+ ...
+</base-config>
+</pre>
+<dl class="xml">
+ <dt>
+ có thể chứa:
+ </dt>
+
+ <dd>
+ <code><a href="#trust-anchors"><trust-anchors></a></code>
+ </dd>
+
+ <dt>
+ mô tả:
+ </dt>
+
+ <dd>
+ Cấu hình mặc định được sử dụng bởi mọi kết nối có đích đến không được
+ bao gồm bởi một <a href="#domain-config"><code>domain-config</code></a>.
+
+<p>
+ Bất kỳ giá trị nào chưa được đặt sẽ sử dụng các giá trị mặc định của nền tảng. Cấu hình
+ mặc định cho các ứng dụng nhắm mục tiêu API mức 24 trở lên:
+</p>
+
+<pre>
+<base-config usesCleartextTraffic="true">
+ <trust-anchors>
+ <certificates src="system" />
+ </trust-anchors>
+</base-config>
+</pre>
+Cấu hình mặc định cho các ứng dụng nhắm mục tiêu API mức 23 trở xuống:
+<pre>
+<base-config usesCleartextTraffic="true">
+ <trust-anchors>
+ <certificates src="system" />
+ <certificates src="user" />
+ </trust-anchors>
+</base-config>
+</pre>
+
+ </dd>
+</dl>
+
+<h3 id="domain-config"><domain-config></h3>
+<dl class="xml">
+<dt>cú pháp:</dt>
+<dd>
+<pre class="stx"><domain-config <a href="#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
+ ...
+</domain-config></pre>
+</dd>
+
+<dt>Có thể chứa:</dt>
+
+<dd>
+1 hoặc nhiều <code><a href="#domain"><domain></a></code>
+<br/>0 hoặc 1 <code><a href="#trust-anchors"><trust-anchors></a></code>
+<br/>0 hoặc 1 <code><a href="#pin-set"><pin-set></code></a>
+<br/>Bất kỳ số nào của <code><domain-config></code> được lồng</dd>
+
+<dt>Mô tả</dt>
+<dd>Cấu hình được sử dụng cho các kết nối tới các điểm đích cụ thể theo như định nghĩa bởi các phần tử {@code domain}.
+
+<p>Lưu ý rằng nếu nhiều phần tử {@code domain-config} chứa một điểm đích thì cấu hình có quy tắc miền trùng khớp
+cụ thể nhất (dài nhất) sẽ được sử dụng.</p></dd>
+</dl>
+
+
+<h3 id="domain"><domain></h3>
+
+<dl class="xml">
+ <dt>
+ cú pháp:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<domain includeSubdomains=["true" | "false"]>example.com</domain>
+</pre>
+ </dd>
+
+ <dt>
+ Thuộc tính:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code includeSubdomains}
+ </dt>
+
+ <dd>
+ Nếu {@code "true"} thì quy tắc miền này sẽ trùng với miền đó và tất cả
+ các miền con, bao gồm các miền con của miền con, nếu không quy tắc đó chỉ
+ áp dụng cho các trùng khớp tuyệt đối.
+ </dd>
+ </dl>
+ </dd>
+
+ <dt>
+ Mô tả:
+ </dt>
+</dl>
+
+<h3 id="debug-overrides"><debug-overrides></h3>
+
+<dl class="xml">
+ <dt>
+ cú pháp:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<debug-overrides>
+ ...
+</debug-overrides>
+</pre>
+ </dd>
+
+ <dt>
+ Có thể chứa:
+ </dt>
+
+ <dd>
+ 0 hoặc 1 <code><a href="#trust-anchors"><trust-anchors></a></code>
+ </dd>
+
+ <dt>
+ Mô tả:
+ </dt>
+
+ <dd>
+ Ghi đè được thực hiện khi <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
+ là {@code "true"} thì thường là trường hợp dành cho các bản dựng không phát hành
+ được tạo ra bởi các IDE hoặc công cụ dựng. Các nguồn tin cậy được chỉ định trong {@code
+ debug-overrides} được thêm vào tất cả các cấu hình khác và ghim
+ chứng chỉ không được thực hiện khi chuỗi chứng chỉ của máy chủ sử dụng một trong
+ các nguồn tin cậy chỉ dành cho gỡ lỗi này. Nếu <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
+ là {@code "false"} thì phần này bị bỏ qua hoàn toàn.
+ </dd>
+</dl>
+
+<h3 id="trust-anchors"><trust-anchors></h3>
+<dl class="xml">
+ <dt>
+ cú pháp:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<trust-anchors>
+...
+</trust-anchors>
+</pre>
+ </dd>
+
+ <dt>
+ Có thể chứa:
+ </dt>
+
+ <dd>
+ Bất kỳ số nào của <code><a href="#certificates"><certificates></a></code>
+ </dd>
+
+ <dt>
+ Mô tả:
+ </dt>
+
+ <dd>
+ Đặt nguồn tin cậy cho các kết nối bảo mật:
+ </dd>
+</dl>
+
+
+<h3 id="certificates"><certificates></h3>
+<dl class="xml">
+<dt>cú pháp:</dt>
+<dd><pre class="stx"><certificates src=["system" | "user" | "<i>raw resource</i>"]
+ overridePins=["true" | "false"] />
+</pre></dd>
+<dt>mô tả:</dt>
+<dd>Bộ các chứng chỉ X.509 cho các phần tử {@code trust-anchors}.</dd>
+
+<dt>thuộc tính:</dt>
+<dd><dl class="attr">
+<dt>{@code src}</dt>
+<dd>
+Nguồn của các chứng chỉ CA, có thể là một
+<ul>
+ <li>id nguồn thô trỏ tới một tệp có chứa các chứng chỉ X.509.
+ Các chứng chỉ phải được mã hóa theo định dạng DER hoặc PEM. Trong trường hợp của các chứng chỉ
+PEM thì tệp đó <em>không được</em> chứa dữ liệu không phải PEM khác như
+ các chú thích.
+ </li>
+
+ <li>{@code "system"} cho các chứng chỉ CA hệ thống được cài đặt sẵn
+ </li>
+
+ <li>{@code "user"} cho các chứng chỉ CA do người dùng thêm vào
+ </li>
+</ul>
+</dd>
+
+<dt>{@code overridePins}</dt>
+<dd>
+ <p>
+ Xác định xem liệu các CA từ nguồn này có bỏ qua việc ghim chứng chỉ hay không. Nếu {@code
+ "true"} thì các chuỗi chứng chỉ mà xâu qua một trong các CA từ nguồn
+ này thì khi đó ghim sẽ không được thực hiện. Đây có thể là điều có ích cho các CA gỡ lỗi
+ hoặc để hỗ trợ cho người dùng tấn công MiTM hoạt động truyền gửi bảo mật của ứng dụng.
+ </p>
+
+ <p>
+ Mặc định là {@code "false"} trừ khi được chỉ định trong một phần tử {@code debug-overrides}
+, khi đó mặc định là {@code "true"}.
+ </p>
+</dd>
+</dl>
+</dd>
+
+
+<h3 id="pin-set"><pin-set></h3>
+
+<dl class="xml">
+ <dt>
+ cú pháp:
+ </dt>
+
+ <dd>
+<pre class="stx">
+<pin-set expiration="date">
+...
+</pin-set>
+</pre>
+ </dd>
+
+ <dt>
+ Có thể chứa:
+ </dt>
+
+ <dd>
+ Bất kỳ số nào của <code><a href="#pin"><pin></a></code>
+ </dd>
+
+ <dt>
+ Mô tả:
+ </dt>
+
+ <dd>
+ Một bộ các ghim khóa công khai. Để một kết nối bảo mật được tin cậy, một trong các
+ khóa công khai trong chuỗi tin cậy phải nằm trong bộ các ghim này. Xem
+ <code><a href="#pin"><pin></a></code> để biết định dạng của các ghim.
+ </dd>
+
+ <dt>
+ Thuộc tính:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code expiration}
+ </dt>
+
+ <dd>
+ Ngày tháng, theo định dạng {@code yyyy-MM-dd}, vào và sau thời điểm các ghim
+ hết hạn và do đó vô hiệu hóa ghim. Nếu thuộc tính này chưa được đặt thì khi đó các
+ ghim không hết hạn.
+ <p>
+ Việc hết hạn giúp phòng ngừa các vấn đề về khả năng kết nối trong ứng dụng làm cho không
+ nhận được các bản cập nhật cho bộ ghim, chẳng hạn như do người dùng
+ vô hiệu hóa các bản cập nhật ứng dụng.
+ </p>
+ </dd>
+ </dl>
+ </dd>
+</dl>
+
+<h3 id="pin"><pin></h3>
+<dl class="xml">
+ <dt>
+ cú pháp:
+ </dt>
+
+ <dd>
+<pre class="stx">
+<pin digest=["SHA-256"]>base64 encoded digest of X.509
+ SubjectPublicKeyInfo (SPKI)</pin>
+</pre>
+ </dd>
+
+ <dt>
+ Thuộc tính:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code digest}
+ </dt>
+
+ <dd>
+ Thuật toán băm được sử dụng để tạo ghim. Hiện tại, chỉ có
+ {@code "SHA-256"} được hỗ trợ.
+ </dd>
+ </dl>
+ </dd>
+</dl>
diff --git a/docs/html-intl/intl/vi/training/tv/playback/picture-in-picture.jd b/docs/html-intl/intl/vi/training/tv/playback/picture-in-picture.jd
new file mode 100644
index 0000000..9156152
--- /dev/null
+++ b/docs/html-intl/intl/vi/training/tv/playback/picture-in-picture.jd
@@ -0,0 +1,186 @@
+page.title=Ảnh trong ảnh
+page.keywords=preview,sdk,PIP,Picture-in-picture
+page.tags=androidn
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>Trong tài liệu này</h2>
+<ol>
+ <li><a href="#declaring">Khai báo Hoạt động hỗ trợ
+Ảnh trong ảnh</a></li>
+ <li><a href="#pip_button">Chuyển Hoạt động sang Ảnh trong ảnh</a>
+</li>
+ <li><a href="#handling_ui">Xử lý UI trong chế độ Ảnh trong ảnh</a>
+</li>
+ <li><a href="#continuing_playback">Tiếp tục phát lại video ở chế độ
+Ảnh trong ảnh</a></li>
+ <li><a href="#best">Thực hành Tốt nhất</a></li>
+</ol>
+
+<h2>Xem thêm</h2>
+<ol>
+ <li><a href="{@docRoot}preview/features/multi-window.html">Hỗ trợ
+đa cửa sổ</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>Trong Android N, người dùng Android TV đã có thể xem video
+trong một cửa sổ được ghim vào một góc màn hình khi điều hướng bên trong
+các ứng dụng. Chế độ Ảnh trong ảnh (PIP) cho phép ứng dụng chạy một hoạt động
+video trong cửa sổ được ghim trong khi một hoạt động khác tiếp tục chạy
+ngầm. Cửa sổ PIP cho phép người dùng thực hiện nhiều việc khi đang sử dụng ứng dụng của bạn,
+giúp cho người dùng năng suất hơn.</p>
+
+<p>Ứng dụng của bạn có thể quyết định khi nào thì kích hoạt chế độ PIP. Sau đây là một vài ví dụ về
+thời điểm chuyển vào chế độ PIP:</p>
+
+<ul>
+<li>Ứng dụng của bạn có thể chuyển một video vào chế độ PIP khi người dùng điều hướng
+rời khỏi video đó để duyệt nội dung khác.</li>
+<li>Ứng dụng của bạn có thể chuyển một video sang chế độ PIP khi người dùng xem đoạn cuối
+ của một tập nội dung. Màn hình chính sẽ hiển thị thông tin quảng cáo
+hoặc tóm tắt về tập tiếp theo trong loạt video đó.</li>
+<li>Ứng dụng của bạn có thể mang lại cho người dùng một cách để xếp hàng các nội dung bổ sung khi
+họ đang xem một video. Video đó sẽ tiếp tục được phát trong chế độ PIP trong khi màn hình
+chính hiển thị hoạt động chọn nội dung.</li>
+</ul>
+
+<p>Cửa sổ PIP có kích thước 240x135 dp và được hiển thị trên lớp trên cùng ở một trong
+bốn góc của màn hình được hệ thống chọn. Người dùng có thể gọi ra một menu PIP
+, cho phép họ bật tắt cửa sổ PIP lên toàn màn hình hoặc đóng cửa sổ
+PIP bằng cách bấm giữ nút <b>Home</b> trên điều khiển từ xa. Nếu một video
+khác bắt đầu phát trên màn hình chính, cửa sổ PIP sẽ tự động
+được đóng. Người dùng cũng có thể đóng cửa sổ PIP thông qua nút Recents.</p>
+
+<img src="{@docRoot}images/android-7.0/pip-active.png" />
+<p class="img-caption"><strong>Hình 1.</strong> Một video Ảnh trong ảnh
+được hiển thị ở góc màn hình khi người dùng duyệt nội dung
+trên màn hình chính.</p>
+
+<p>PIP sử dụng các API đa cửa sổ có trong Android N để
+tạo cửa sổ video nằm chồng được ghim. Để thêm chế độ PIP vào ứng dụng bạn cần
+đăng ký các hoạt động hỗ trợ PIP, chuyển hoạt động của bạn sang chế độ PIP khi
+cần và đảm bảo cho các phần tử UI sẽ bị ẩn đi và phát lại video vẫn tiếp tục khi
+hoạt động đó ở trong chế độ PIP.</p>
+
+<h2 id="declaring">Khai báo Hoạt động hỗ trợ Ảnh trong ảnh</h2>
+
+<p>Theo mặc định, hệ thống không tự động hỗ trợ PIP cho các ứng dụng.
+Nếu bạn muốn hỗ trợ chế độ PIP trong ứng dụng của mình, hãy đăng ký hoạt động
+video trong bản kê khai bằng cách đặt
+<code>android:supportsPictureInPicture</code> và
+<code>android:resizeableActivity</code> thành <code>true</code>. Ngoài ra, hãy chỉ định
+hoạt động của bạn xử lý các thay đổi cấu hình bố trí để hoạt động đó
+không khởi chạy lại khi có các thay đổi về bố trí trong quá trình chuyển tiếp chế độ PIP.</p>
+
+<pre>
+<activity android:name="VideoActivity"
+ android:resizeableActivity="true"
+ android:supportsPictureInPicture="true"
+ android:configChanges=
+ "screenSize|smallestScreenSize|screenLayout|orientation"
+ ...
+</pre>
+
+<p>Khi đăng ký hoạt động của bạn, hãy nhớ rằng trong chế độ PIP, hoạt động
+của bạn sẽ được hiển thị trong một cửa sổ nhỏ nằm chồng trên màn hình TV. Các hoạt động
+phát lại video với UI tối giản sẽ đem đến trải nghiệm người dùng tốt nhất. Các hoạt động
+có chứa những phần tử UI nhỏ có thể không đem lại trải nghiệm người dùng đạt yêu cầu
+khi được chuyển sang chế độ PIP bởi người dùng không thể thấy các chi tiết của phần tử UI
+trong cửa sổ PIP.</p>
+
+<h2 id="pip_button">Chuyển Hoạt động sang Ảnh trong ảnh</h2>
+
+Khi bạn cần chuyển hoạt động của mình sang chế độ PIP, hãy gọi
+<code>Activity.enterPictureInPicture()</code>. Ví dụ sau sẽ chuyển
+sang chế độ PIP khi người dùng chọn một nút PIP riêng trên thanh điều khiển
+media:</p>
+
+<pre>
+@Override
+public void onActionClicked(Action action) {
+ if (action.getId() == R.id.lb_control_picture_in_picture) {
+ getActivity().enterPictureInPicture();
+ return;
+ }
+ ...
+</pre>
+
+<p>Thêm một nút PIP vào thanh điều khiển media của bạn sẽ cho phép người dùng dễ dàng chuyển
+sang chế độ PIP khi điều khiển phát lại video.</p>
+
+<img src="{@docRoot}images/android-7.0/pip-button.png" />
+<p class="img-caption"><strong>Hình 1.</strong> Một nút Ảnh trong ảnh
+trên thanh điều khiển media.</p>
+
+<p>Android N có một lớp
+<code>PlaybackControlsRow.PictureInPictureAction</code> mới định nghĩa
+các hành động ở chế độ PIP trên thanh điều khiển và sử dụng biểu tượng PIP.</p>
+
+<h2 id="handling_ui">Xử lý UI trong chế độ Ảnh trong ảnh</h2>
+
+<p>Khi hoạt động của bạn vào trong chế độ PIP thì hoạt động đó chỉ nên hiển thị phát lại
+video. Hãy xóa các phần tử UI trước khi hoạt động của bạn vào chế độ PIP,
+và khôi phục các phần tử này khi hoạt động quay lại chế độ toàn màn hình.
+Ghi đè phương thức <code>Activity.onPictureInPictureChanged()</code> hoặc
+<code>Fragment.onPictureInPictureChanged()</code> và bật hoặc
+tắt các phần tử UI khi cần thiết, ví dụ:</p>
+
+<pre>
+@Override
+public void onPictureInPictureChanged(boolean inPictureInPicture) {
+ if (inPictureInPicture) {
+ // Hide the controls in picture-in-picture mode.
+ ...
+ } else {
+ // Restore the playback UI based on the playback status.
+ ...
+ }
+}
+</pre>
+
+<h2 id="continuing_playback">Tiếp tục phát lại video ở chế độ
+Ảnh trong ảnh</h2>
+
+<p>Khi hoạt động của bạn chuyển sang chế độ PIP thì hệ thống sẽ coi hoạt động đó đang ở trong
+trạng thái tạm dừng và sẽ gọi phương thức <code>onPause()</code> của hoạt động. Việc phát lại
+video không nên được tạm dừng và cần được tiếp tục phát nếu hoạt động
+bị tạm dừng do chế độ PIP. Hãy kiểm tra chế độ PIP trong phương thức
+<code>onPause()</code> của hoạt động và xử lý việc phát lại cho phù hợp, ví
+dụ:</p>
+
+<pre>
+@Override
+public void onPause() {
+ // If called due to PIP, do not pause playback
+ if (inPictureInPicture()) {
+ // Continue playback
+ ...
+ }
+ // If paused but not in PIP, pause playback if necessary
+ ...
+}
+</pre>
+
+<p>Khi hoạt động của bạn chuyển ra khỏi chế độ PIP để quay trở về chế độ toàn màn hình thì
+hệ thống sẽ tiếp tục hoạt động của bạn và gọi phương thức <code>onResume()</code>.</p>
+
+<h2 id="best">Thực hành Tốt nhất</h2>
+
+<p>PIP được dành cho các hoạt động phát lại video toàn màn hình. Khi chuyển
+hoạt động của bạn vào chế độ PIP, hãy tránh hiển thị bất kỳ nội dung nào ngoài video.
+Theo dõi khi hoạt động của bạn vào chế độ PIP và ẩn đi các phần tử UI, như mô tả
+trong <a href="#handling_ui">Xử lý UI trong chế độ Ảnh trong ảnh</a>.</p>
+
+<p>Vì cửa sổ PIP được hiển thị dưới dạng cửa sổ nổi ở góc
+màn hình do đó bạn cần tránh hiển thị các thông tin quan trọng trong màn hình chính
+ở bất kỳ vùng nào có thể bị che khuất bởi cửa sổ PIP.</p>
+
+<p>Theo mặc định, khi một hoạt động đang ở trong chế độ PIP thì nó sẽ không nhận tiêu điểm nhập vào. Để
+tiếp nhận các sự kiện nhập vào khi ở chế độ PIP, hãy sử dụng
+<code>MediaSession.setMediaButtonReceiver()</code>.</p>
diff --git a/docs/html-intl/intl/vi/training/tv/tif/content-recording.jd b/docs/html-intl/intl/vi/training/tv/tif/content-recording.jd
new file mode 100644
index 0000000..bfd718b
--- /dev/null
+++ b/docs/html-intl/intl/vi/training/tv/tif/content-recording.jd
@@ -0,0 +1,121 @@
+page.title=Ghi lại TV
+page.keywords=preview,sdk,tv,recording
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>Trong tài liệu này</h2>
+ <ol>
+ <li><a href="#supporting">Chỉ báo Hỗ trợ ghi lại</a></li>
+ <li><a href="#recording">Ghi lại một chương trình</a></li>
+ <li><a href="#errors">Xử lý lỗi ghi lại</a></li>
+ <li><a href="#sessions">Quản lý các chương trình được ghi lại</a></li>
+ <li><a href="#best">Thực hành Tốt nhất</a></li>
+ </ol>
+</div>
+</div>
+
+<p>Các dịch vụ nguồn vào TV cho phép người dùng tạm dừng và tiếp tục phát lại kênh thông qua
+các API chuyển dịch thời gian. Android N mở rộng thêm chuyển dịch thời gian
+bằng cách cho phép người dùng lưu nhiều chương trình được ghi lại.</p>
+
+<p>Người dùng có thể tạo lịch ghi lại trước hoặc tiến hành ghi lại khi họ xem
+một chương trình. Khi hệ thống đã lưu bản ghi lại, người dùng có thể duyệt, quản lý
+và phát lại bản ghi đó bằng ứng dụng TV của hệ thống.</p>
+
+<p>Nếu bạn muốn cung cấp tính năng ghi lại cho dịch vụ nguồn vào TV,
+bạn phải báo cho hệ thống biết ứng dụng của bạn hỗ trợ ghi lại, triển khai
+khả năng ghi chương trình, xử lý và thông báo bất kỳ lỗi nào xuất hiện
+trong quá trình ghi lại và quản lý các chương trình được ghi lại.</p>
+
+<h2 id="supporting">Chỉ báo Hỗ trợ ghi lại</h2>
+
+<p>Để thông báo cho hệ thống biết dịch vụ nguồn vào TV của bạn hỗ trợ ghi lại, hãy thực hiện
+các bước sau:</p>
+
+<ol>
+<li>Trong phương thức <code>TvInputService.onCreate()</code> của bạn, hãy tạo một đối tượng
+<code>TvInputInfo</code> mới sử dụng lớp <code>TvInputInfo.Builder</code>
+.</li>
+<li>Khi tạo đối tượng <code>TvInputInfo</code> mới, hãy gọi
+<code>setCanRecord(true)</code> trước khi gọi <code>build()</code> để
+chỉ báo dịch vụ của bạn hỗ trợ ghi lại.</li>
+<li>Đăng ký đối tượng <code>TvInputInfo</code> với hệ thống bằng cách gọi
+<code>TvInputService.updateTvInputInfo()</code>.</li>
+</ol>
+
+<h2 id="recording">Ghi lại một chương trình</h2>
+
+<p>Sau khi dịch vụ nguồn vào TV của bạn đăng ký để hỗ trợ tính năng
+ghi lại, hệ thống sẽ gọi phương thức
+<code>TvInputService.onCreateRecordingSession()</code> của bạn khi cần truy cập
+phần triển khai ghi lại của ứng dụng. Triển khai lớp con
+<code>TvInputService.RecordingSession</code> của bạn và trả nó về
+khi hàm gọi lại <code>onCreateRecordingSession()</code>
+được gọi. Lớp con này chịu trách nhiệm chuyển sang dữ liệu kênh phù hợp,
+ghi lại dữ liệu được yêu cầu và thông báo trạng thái ghi lại và các lỗi cho
+hệ thống.</p>
+
+<p>Khi hệ thống gọi <code>RecordingSession.onTune()</code>, chuyển vào một
+URI của kênh, chỉnh vào kênh mà URI đó chỉ định. Thông báo cho hệ thống biết
+ứng dụng của bạn đã chỉnh vào kênh mong muốn bằng cách gọi <code>notifyTuned()</code>,
+hoặc nếu ứng dụng không thể chỉnh vào kênh phù hợp, hãy gọi
+<code>notifyError()</code>.</p>
+
+<p>Tiếp theo hệ thống sẽ gọi hàm gọi lại <code>RecordingSession.onStartRecording()</code>
+. Ứng dụng của bạn phải bắt đầu ghi lại ngay lập tức. Khi hệ thống gọi
+hàm gọi lại này, hệ thống có thể cung cấp một URI có chứa thông tin về chương trình
+sắp được ghi lại. Khi kết thúc việc ghi lại, bạn cần sao chép dữ liệu
+này vào bảng dữ liệu <code>RecordedPrograms</code>.</p>
+
+<p>Cuối cùng, hệ thống sẽ gọi <code>RecordingSession.onStopRecording()</code>.
+Lúc này, ứng dụng của bạn phải dừng ghi lại ngay lập tức. Bạn cũng cần
+tạo một mục nhập trong bảng <code>RecordedPrograms</code>. Mục này cần
+có URI dữ liệu của chương trình được ghi lại trong
+cột <code>RecordedPrograms.COLUMN_RECORDING_DATA_URI</code>, và bất kỳ thông tin
+về chương trình mà hệ thống đã cung cấp trong lần gọi đầu tiên tới
+<code>onStartRecording()</code>.</p>
+
+<p>Để biết thêm thông tin về cách truy cập bảng <code>RecordedPrograms</code>
+hãy xem <a href="#sessions">Quản lý các chương trình được ghi lại</a>.</p>
+
+<h2 id="errors">Xử lý lỗi ghi lại</h2>
+
+<p>Nếu xảy ra lỗi trong quá trình ghi lại, làm cho dữ liệu ghi lại không sử dụng được thì
+hãy thông báo cho hệ thống bằng cách gọi <code>RecordingSession.notifyError()</code>.
+Tương tự, bạn có thể gọi <code>notifyError()</code> sau khi một chương trình ghi lại
+được tạo để cho phép hệ thống biết được ứng dụng của bạn không còn tiếp tục ghi các chương trình.</p>
+
+<p>Nếu xảy ra lỗi trong quá trình ghi lại, nhưng có khả năng là một phần dữ liệu
+ghi lại có thể được sử dụng để người dùng phát lại thì hãy gọi
+<code>RecordingSession.notifyRecordingStopped()</code> để cho phép hệ thống
+sử dụng một phần chương trình đó.</p>
+
+<h2 id="sessions">Quản lý các chương trình được ghi lại</h2>
+
+<p>Hệ thống lưu giữ thông tin cho mọi chương trình được ghi lại từ tất cả
+các ứng dụng kênh truyền hình hỗ trợ ghi lại trong bảng trình cung cấp nội dung<code>TvContract.RecordedPrograms</code>
+. Có thể truy cập thông tin này qua URI nội dung
+<code>RecordedPrograms.Uri</code>. Hãy sử dụng các API trình cung cấp nội dung để
+đọc, thêm và xóa các mục trong bảng này.</p>
+
+<p>Để biết thêm thông tin về thao tác với dữ liệu trình cung cấp nội dung, hãy xem
+<a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
+Nội dung Cơ bản về Trình cung cấp Nội dung</a>.</p>
+
+<h2 id="best">Thực hành Tốt nhất</h2>
+
+<p>Các thiết bị TV có thể có bộ nhớ lưu trữ hạn chế do đó phán đoán hợp lý nhất khi
+phân bổ bộ nhớ lưu trữ để lưu các chương trình được ghi lại. Sử dụng
+<code>RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)</code> khi
+không có đủ dung lượng trống để lưu một chương trình được ghi lại.</p>
+
+<p>Khi người dùng khởi tạo quá trình ghi lại, bạn cần tiến hành ghi lại dữ liệu nhanh nhất
+có thể. Để hỗ trợ công việc này, hãy hoàn thành tất cả các tác vụ tốn thời gian trước đó,
+như truy cập và phân bổ không gian lưu trữ khi hệ thống gọi hàm gọi lại
+<code>onCreateRecordingSession()</code>. Làm như vậy sẽ cho phép bạn tiến hành
+việc ghi lại ngay lập tức khi hàm gọi lại <code>onStartRecording()</code>
+được gọi.</p>
diff --git a/docs/html-intl/intl/zh-cn/about/versions/marshmallow/android-6.0-testing.jd b/docs/html-intl/intl/zh-cn/about/versions/marshmallow/android-6.0-testing.jd
new file mode 100644
index 0000000..d1e1187
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/about/versions/marshmallow/android-6.0-testing.jd
@@ -0,0 +1,190 @@
+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/android-7.0-changes.jd b/docs/html-intl/intl/zh-cn/about/versions/nougat/android-7.0-changes.jd
new file mode 100644
index 0000000..71aff37
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/about/versions/nougat/android-7.0-changes.jd
@@ -0,0 +1,610 @@
+page.title=行为变更
+page.keywords=Preview、SDK、兼容性
+meta.tags="preview", "compatibility"
+page.tags="preview", "developer preview"
+page.image=images/cards/card-n-changes_2x.png
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>本文内容</h2>
+
+<ol>
+ <li><a href="#perf">性能提升</a>
+ <ol>
+ <li><a href="#doze">低电耗模式</a></li>
+ <li><a href="#bg-opt">后台优化</a></li>
+ </ol>
+ </li>
+ <li><a href="#perm">权限更改</a>
+ </li>
+ <li><a href="#sharing-files">应用间共享文件</a></li>
+ <li><a href="#accessibility">无障碍改进</a>
+ <ol>
+ <li><a href="#screen-zoom">屏幕缩放</a></li>
+ <li><a href="#vision-settings">设置向导中的视觉设置</a></li>
+ </ol>
+ </li>
+ <li><a href="#ndk">NDK 应用链接至平台库</a></li>
+ <li><a href="#afw">Android for Work</a></li>
+ <li><a href="#annotations">注解保留</a></li>
+ <li><a href="#other">其他重要说明</a></li>
+</ol>
+
+<h2>另请参阅</h2>
+<ol>
+ <li><a href="{@docRoot}preview/api-overview.html">Android N API 概览</a>
+</li>
+</ol>
+
+</div>
+</div>
+
+
+<p>
+ Android N 除了提供诸多新特性和功能外,还对系统和 API 行为做出了各种变更。
+本文重点介绍您应该了解并在开发应用时加以考虑的一些重要变更。
+
+
+</p>
+
+<p>
+ 如果您之前发布过 Android 应用,请注意您的应用可能受到这些平台变更的影响。
+
+</p>
+
+
+<h2 id="perf">电池和内存</h2>
+
+<p>
+Android N 包括旨在延长设备电池寿命和减少 RAM 使用的系统行为变更。
+这些变更可能会影响您的应用访问系统资源,以及您的系统通过特定隐式 Intent 与其他应用互动的方式。
+
+
+</p>
+
+<h3 id="doze">低电耗模式</h3>
+
+<p>
+ Android 6.0(API 级别 23)引入了低电耗模式,当用户设备未插接电源、处于静止状态且屏幕关闭时,该模式会推迟 CPU 和网络活动,从而延长电池寿命。而 Android N 则通过在设备未插接电源且屏幕关闭状态下、但不一定要处于静止状态(例如用户外出时把手持式设备装在口袋里)时应用部分 CPU 和网络限制,进一步增强了低电耗模式。
+
+
+
+
+
+</p>
+
+
+<img src="{@docRoot}images/android-7.0/doze-diagram-1.png" alt="" height="251px" id="figure1" />
+<p class="img-caption">
+ <strong>图 1.</strong> 低电耗模式如何应用第一级系统活动限制以延长电池寿命的图示。
+
+</p>
+
+<p>
+ 当设备处于充电状态且屏幕已关闭一定时间后,设备会进入低电耗模式并应用第一部分限制:
+关闭应用网络访问、推迟作业和同步。
+如果进入低电耗模式后设备处于静止状态达到一定时间,系统则会对 {@link android.os.PowerManager.WakeLock}、{@link android.app.AlarmManager} 闹铃、GPS 和 Wi-Fi 扫描应用余下的低电耗模式限制。
+
+
+无论是应用部分还是全部低电耗模式限制,系统都会唤醒设备以提供简短的维护时间窗口,在此窗口期间,应用程序可以访问网络并执行任何被推迟的作业/同步。
+
+
+
+</p>
+
+
+<img src="{@docRoot}images/android-7.0/doze-diagram-2.png" alt="" id="figure2" />
+<p class="img-caption">
+ <strong>图 2.</strong> 低电耗模式如何在设备处于静止状态达到一定时间后应用第二级系统活动限制的图示。
+
+</p>
+
+<p>
+ 请注意,激活屏幕或插接设备电源时,系统将退出低电耗模式并取消这些处理限制。
+此项新增的行为不会影响有关使您的应用适应 Android 6.0(API 级别 23)中所推出的旧版本低电耗模式的建议和最佳实践,如<a href="{@docRoot}training/monitoring-device-state/doze-standby.html">低电耗模式和应用待机模式优化</a>中所讨论。
+
+
+
+您仍应遵循这些建议(例如使用 Google Cloud Messaging (GCM) 发送和接收消息)并开始安排更新计划以适应新增的低电耗模式行为。
+
+
+
+</p>
+
+
+<h3 id="bg-opt">Project Svelte:后台优化</h3>
+
+<p>
+ Android N 删除了三项隐式广播,以帮助优化内存使用和电量消耗。
+此项变更很有必要,因为隐式广播会在后台频繁启动已注册侦听这些广播的应用。
+
+删除这些广播可以显著提升设备性能和用户体验。
+
+</p>
+
+<p>
+ 移动设备会经历频繁的连接变更,例如在 Wi-Fi 和移动数据之间切换时。
+目前,可以通过在应用清单中注册一个接收器来侦听隐式 {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION} 广播,让应用能够监控这些变更。
+
+
+由于很多应用会注册接收此广播,因此单次网络切换即会导致所有应用被唤醒并同时处理此广播。
+
+
+</p>
+
+<p>
+ 同理,应用可以注册接收来自其他应用(例如相机)的隐式 {@link
+ android.hardware.Camera#ACTION_NEW_PICTURE} 和 {@link
+ android.hardware.Camera#ACTION_NEW_VIDEO} 广播。
+当用户使用相机应用拍摄照片时,这些应用即会被唤醒以处理广播。
+
+</p>
+
+<p>
+ 为缓解这些问题,Android N 应用了以下优化措施:
+
+</p>
+
+<ul>
+ <li>面向 Android N 开发的应用不会收到 {@link
+ android.net.ConnectivityManager#CONNECTIVITY_ACTION} 广播,即使它们已有清单条目来请求接受这些事件的通知。
+在前台运行的应用如果使用{@link android.content.BroadcastReceiver} 请求接收通知,则仍可以在主线程中侦听 {@code CONNECTIVITY_CHANGE}。
+
+
+ </li>
+
+ <li>应用无法发送或接收 {@link
+android.hardware.Camera#ACTION_NEW_PICTURE} 或 {@link
+android.hardware.Camera#ACTION_NEW_VIDEO} 广播。此项优化会影响所有应用,而不仅仅是面向 Android N 的应用。
+
+ </li>
+</ul>
+
+<p>如果您的应用使用任何 Intent,您仍需要尽快移除它们的依赖关系,以正确适配 Android N 设备。
+
+ Android 框架提供多个解决方案来缓解对这些隐式广播的需求。
+例如,{@link
+ android.app.job.JobScheduler} API 提供了一个稳健可靠的机制来安排满足指定条件(例如连入无限流量网络)时所执行的网络操作。
+
+您甚至可以使用 {@link
+ android.app.job.JobScheduler} 来适应内容提供程序变化。
+</p>
+
+<p>
+ 如需了解有关 Android N 中后台优化以及如何改写应用的详细信息,请参阅<a href="{@docRoot}preview/features/background-optimization.html">后台优化</a>。
+
+
+</p>
+
+<h2 id="perm">权限更改</h2>
+
+<p>
+ Android N 做了一些权限更改,这些更改可能会影响您的应用。
+</p>
+
+<h3 id="permfilesys">系统权限更改</h3>
+
+<p>
+ 为了提高私有文件的安全性,面向 Android N 或更高版本的应用私有目录被限制访问 (<code>0700</code>)。
+
+ 此设置可防止私有文件的元数据泄漏,如它们的大小或存在。
+此权限更改有多重副作用:
+</p>
+
+<ul>
+ <li>
+ 私有文件的文件权限不应再由所有者放宽,为使用 {@link android.content.Context#MODE_WORLD_READABLE} 和/或 {@link android.content.Context#MODE_WORLD_WRITEABLE} 而进行的此类尝试将触发 {@link java.lang.SecurityException}。
+
+
+
+
+ <p class="note">
+ <strong>注:</strong>迄今为止,这种限制尚不能完全执行。
+ 应用仍可能使用原生 API 或 {@link java.io.File File} API 来修改它们的私有目录权限。
+但是,我们强烈反对放宽私有目录的权限。
+
+ </p>
+ </li>
+ <li>
+ 传递软件包网域外的 <code>file://</code> URI 可能给接收器留下无法访问的路径。
+因此,尝试传递 <code>file://</code> URI 会触发 <code>FileUriExposedException</code>。
+
+分享私有文件内容的推荐方法是使用 {@link
+ android.support.v4.content.FileProvider}。
+
+ </li>
+ <li>
+ {@link android.app.DownloadManager} 不再按文件名分享私人存储的文件。
+旧版应用在访问 {@link
+ android.app.DownloadManager#COLUMN_LOCAL_FILENAME} 时可能出现无法访问的路径。
+面向 Android N 或更高版本的应用在尝试访问 {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME} 时会触发 {@link java.lang.SecurityException}。
+
+
+
+ 通过使用 {@link
+ android.app.DownloadManager.Request#setDestinationInExternalFilesDir
+ DownloadManager.Request.setDestinationInExternalFilesDir()} 或 {@link
+ android.app.DownloadManager.Request#setDestinationInExternalPublicDir
+ DownloadManager.Request.setDestinationInExternalPublicDir()} 将下载位置设置为公共位置的旧版应用仍可以访问 {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME} 中的路径,但是我们强烈反对使用这种方法。
+
+
+
+
+
+访问由 {@link android.app.DownloadManager} 公开的文件的首选方式是使用 {@link android.content.ContentResolver#openFileDescriptor
+ ContentResolver.openFileDescriptor()}。
+
+
+ </li>
+</ul>
+
+<h2 id="sharing-files">应用间共享文件</h2>
+
+<p>
+对于面向 Android N 的应用,Android 框架执行的 {@link android.os.StrictMode} API 政策禁止向您的应用外公开 {@code file://} URI。
+
+如果一项包含文件 URI 的 Intent 离开您的应用,应用失败,并出现 {@code FileUriExposedException} 异常。
+
+</p>
+
+<p>
+若要在应用间共享文件,您应发送一项 {@code content://} URI,并授予 URI 临时访问权限。
+进行此授权的最简单方式是使用 {@link android.support.v4.content.FileProvider} 类。
+如需有关权限和共享文件的更多信息,请参阅<a href="{@docRoot}training/secure-file-sharing/index.html">共享文件</a>。
+
+
+</p>
+
+<h2 id="accessibility">无障碍改进</h2>
+
+<p>
+ 为提高平台对于视力不佳或视力受损用户的可用性,Android N 做出了一些更改。这些更改一般并不要求更改您的应用代码,不过您应仔细检查并使用您的应用测试这些功能,以评估它们对用户体验的潜在影响。
+
+
+
+
+</p>
+
+
+<h3 id="screen-zoom">屏幕缩放</h3>
+
+<p>
+ Android N 支持用户设置<strong>显示尺寸</strong>,以放大或缩小屏幕上的所有元素,从而提升设备对视力不佳用户的可访问性。用户无法将屏幕缩放至低于最小屏幕宽度<a href="http://developer.android.com/guide/topics/resources/providing-resources.html">
+ sw320dp</a>,该宽度是 Nexus 4 的宽度,也是常规中等大小手机的宽度。
+
+
+
+</p>
+
+<div class="cols">
+
+<div class="col-6">
+ <img src="{@docRoot}images/android-7.0/screen-zoom-1.png" alt="" height="XXX" id="figure1" />
+</div>
+<div class="col-6">
+ <img src="{@docRoot}images/android-7.0/screen-zoom-2.png" alt="" height="XXX" id="figure1" />
+</div>
+
+</div> <!-- end cols -->
+<p class="img-caption">
+ <strong>图 3.</strong> 右侧屏幕显示的是一台运行 Android N 系统映像的设备增大显示尺寸后的效果。
+
+</p>
+
+
+<p>
+ 当设备密度发生更改时,系统会以如下方式通知正在运行的应用:
+
+</p>
+
+<ul>
+ <li>如果是面向 API 级别 23 或更低版本系统的应用,系统会自动终止其所有后台进程。
+这意味着如果用户切换离开此类应用,转而打开“Settings”屏幕并更改 <strong>Display size</strong> 设置,则系统会像处理内存不足的情况一样终止该应用。
+
+<em></em>
+如果应用具有任何前台进程,则系统会如<a href="{@docRoot}guide/topics/resources/runtime-changes.html">处理运行时变更</a>中所述将配置变更通知给这些进程,就像对待设备屏幕方向变更一样。
+
+
+
+ </li>
+
+ <li>如果是面向 Android N 的应用,则其所有进程(前台和后台)都会收到有关配置变更的通知,如<a href="{@docRoot}guide/topics/resources/runtime-changes.html">处理运行时变更</a>中所述。
+
+
+
+ </li>
+</ul>
+
+<p>
+ 大多数应用并不需要进行任何更改即可支持此功能,不过前提是这些应用遵循 Android 最佳实践。具体要检查的事项:
+
+</p>
+
+<ul>
+ <li>在屏幕宽度为 <code><a href=
+ "{@docRoot}guide/topics/resources/providing-resources.html">sw320dp</a></code> 的设备上测试您的应用,并确保其充分运行。
+
+ </li>
+
+ <li>当设备配置发生变更时,更新任何与密度相关的缓存信息,例如缓存位图或从网络加载的资源。当应用从暂停状态恢复运行时,检查配置变更。
+
+
+
+ <p class="note">
+ <strong>注:</strong>如果您要缓存与配置相关的数据,则最好也包括相关元数据,例如该数据对应的屏幕尺寸或像素密度。
+
+保存这些元数据便于您在配置变更后决定是否需要刷新缓存数据。
+
+
+ </p>
+ </li>
+
+ <li>避免用像素单位指定尺寸,因为像素不会随屏幕密度缩放。应改为使用<a href="{@docRoot}guide/practices/screens_support.html">与密度无关像素</a> (<code>dp</code>) 单位指定尺寸。
+
+
+ </li>
+</ul>
+
+<h3 id="vision-settings">设置向导中的视觉设置</h3>
+
+<p>
+ Android N 在“Welcome”屏幕中加入了“Vision Settings”,用户可以在新设备上设置以下无障碍功能设置:
+
+ <strong>Magnification gesture</strong>、<strong>Font size</strong>、<strong>Display size</strong> 和 <strong>TalkBack</strong>。
+此项变更增强了与不同屏幕设置相关的错误的可见性。
+要评估此功能的影响,您应在启用这些设置的状态下测试应用。
+
+您可以在 <strong>Settings > Accessibility</strong> 中找到这些设置。
+
+</p>
+
+<h2 id="ndk">NDK 应用链接至平台库</h2>
+
+<p>
+ Android N 做了一些命名空间更改,以阻止加载非公开 API。
+ 如果您使用 NDK,则只能使用 Android 平台提供的公开 API。
+在下一个官方发布的 Android 版本上使用非公开 API 会导致应用崩溃。
+
+</p>
+
+<p>
+ 为提醒您使用了非公开 API,在 Android N 设备上运行的应用会在有应用调用非公开 API 时在日志消息输出中生成一个错误。
+
+ 此错误还会作为消息显示在设备屏幕上,以帮助增强您对此情况的认识。
+您应检查应用代码以删除使用非公开平台 API,并使用预览版设备或模拟器全面测试应用。
+
+
+</p>
+
+<p>
+ 如果您的应用依赖平台库,则请参见 NDK 文档,了解使用公开 API 等效项替换普通私有 API 的典型修复。
+
+ 您还可以链接至平台库,而无需实现此应用,如果应用使用的库是平台的一部分(例如 <code>libpng</code>),但不属于 NDK,则更可如此。
+
+此情况下,请确保您的 APK 包含您打算链接到的所有 .so 文件。
+
+</p>
+
+<p class="caution">
+ <strong>注意:</strong>有些第三方库可能会链接至非公开 API。
+如果您的应用使用这些库,那么当您的应用在下一个官方发布的 Android 版本上运行时可能会出现崩溃现象。
+
+</p>
+
+<p>
+ 应用不应依赖或使用不属于 NDK 的原生库,因为这些库可能会发生更改或从一个 Android 版本迁移至另一版本。
+
+例如,从 OpenSSL 切换至 BoringSSL 即属于此类更改。
+ 此外,不同的设备可能提供不同级别的兼容性,因为不属于 NDK 中的平台库没有兼容性要求。
+
+如果您必须在较旧设备上访问非 NDK 库,则请依据 Android API 级别进行加载。
+
+</p>
+
+<p>
+ 为帮助您诊断此类问题,下面列举了一些在您试图使用 Android N 开发应用时可能遇到的 Java 和 NDK 错误:
+
+</p>
+
+<p>Java 错误示例:</p>
+<pre class="no-pretty-print">
+java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so"
+ is not accessible for the namespace "classloader-namespace"
+</pre>
+
+<p>NDK 错误示例:</p>
+<pre class="no-pretty-print">
+dlopen failed: cannot locate symbol "__system_property_get" referenced by ...
+</pre>
+
+
+<p>
+ 以下是遇到这类错误的应用的一些典型修复:
+</p>
+
+<ul>
+ <li>可以使用标准 JNI 函数来替代使用 libandroid_runtime.so 中的 getJavaVM 和 getJNIEnv:
+
+<pre class="no-pretty-print">
+AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h>
+AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or
+JavaVM::AttachCurrentThread from <jni.h>.
+</pre>
+ </li>
+
+ <li>可以使用公开 {@code alternative __system_property_get} 来替代使用 {@code libcutils.so} 中的 {@code property_get} 符号。如需这样做,请使用 {@code __system_property_get} 及以下 include 函数:
+
+
+<pre>
+#include <sys/system_properties.h>
+</pre>
+ </li>
+
+ <li>应使用应用本地版本来替代使用 {@code libcrypto.so} 中的 {@code SSL_ctrl} 符号。例如,您应在 {@code .so} 文件中静态链接 {@code libcyrpto.a},或者在应用中包含您自己的来自 BoringSSL 或 OpenSSL 的动态 {@code libcrypto.so}。
+
+
+
+ </li>
+</ul>
+
+<h2 id="afw">Android for Work</h2>
+<p>
+ Android N 包含一些针对面向 Android for Work 的应用的变更,包括对证书安装、密码重置、二级用户管理、设备标识符访问权限的变更。如果您是要针对 Android for Work 环境开发应用,则应仔细检查这些变更并相应地修改您的应用。
+
+
+
+
+</p>
+
+<ul>
+ <li>您必须先安装授权证书安装程序,然后 DPC 才能对其进行设置。
+对于面向 N SDK 的个人资料和设备所有者应用,您应在设备策略控制器 (DPC) 调用 <code>DevicePolicyManager.setCertInstallerPackage()</code> 之前安装授权证书安装程序。
+
+
+如果尚未安装此安装程序,则系统会引发 <code>IllegalArgumentException</code>。
+
+
+ </li>
+
+ <li>针对设备管理员的重置密码限制现在也适用于个人资料所有者。
+设备管理员无法再使用 {@code DevicePolicyManager.resetPassword()} 来清除或更改已经设置的密码。
+
+设备管理员仍可以设置密码,但只能在设备没有密码、PIN 或图案时这样做。
+
+ </li>
+
+ <li>即使设置了限制,设备所有者和个人资料所有者仍可以管理帐户。而且,即使具有 <code>DISALLOW_MODIFY_ACCOUNTS</code> 用户限制,设备所有者和个人资料所有者仍可调用 Account Management API。
+
+
+ </li>
+
+ <li>设备所有者可以更轻松地管理二级用户。当设备在设备所有者模式下运行时,系统将自动设置 <code>DISALLOW_ADD_USER</code> 限制。
+
+这样可以防止用户创建非托管二级用户。
+此外,<code>CreateUser()</code> 和 <code>createAndInitializeUser()</code> 方法已弃用,取而代之的是 <code>DevicePolicyManager.createAndManageUser()</code> 方法。
+
+
+ </li>
+
+ <li>设备所有者可以访问设备标识符。设备所有者可以使用
+ <code>DevicePolicyManagewr.getWifiMacAddress()</code> 访问设备的 Wi-Fi MAC 地址。
+如果设备上从未启用 Wi-Fi,则此方法将返回一个 {@code null} 值。
+
+ </li>
+
+ <li>工作模式设置控制工作应用访问。当工作模式关闭时,系统启动器通过使工作应用显示为灰色来指示它们不可用。
+启用工作模式会再次恢复正常行为。
+
+</ul>
+
+<p>
+ 如需了解有关 Android N 中针对 Android for Work 所做变更的详细信息,请参阅
+ <a href="{@docRoot}preview/features/afw.html">Android for Work 更新</a>。
+</p>
+
+<h2 id="annotations">注解保留</h2>
+
+<p>
+Android N 在注解可见性被忽略时修复错误。这种问题将启用本不应被允许的运行时访问注解。
+
+这些注解包括:
+</p>
+
+<ul>
+ <li>{@code VISIBILITY_BUILD}:仅应编译时可见。</li>
+ <li>{@code VISIBILITY_SYSTEM}:运行时应可见,但仅限基本系统。
+</li>
+</ul>
+
+<p>
+如果您的应用依赖这种行为,请在注解中添加一项运行时必须可用的保留政策。
+您可通过使用 {@code @Retention(RetentionPolicy.RUNTIME)} 来如此做。
+</p>
+
+<h2 id="other">其他重要说明</h2>
+
+<ul>
+<li>如果一个应用在 Android N 上运行,但却是针对更低 API 级别开发的,那么在用户更改显示尺寸时,系统将终止此应用进程。
+应用必须能够正常处理此情景。
+否则,当用户从最近使用记录中恢复运行应用时,应用将会出现崩溃现象。
+
+
+<p>
+您应测试应用以确保不会发生此行为。要进行此测试,您可以通过 DDMS 手动终止应用,以造成相同的崩溃现象。
+
+
+
+</p>
+
+<p>
+在密度发生更改时,系统不会自动终止面向 N 及更高版本的应用;不过,这些应用仍可能对配置变更做出不良响应。
+
+</p>
+</li>
+
+<li>
+Android N 上的应用应能够正常处理配置变更,并且在后续启动时不会出现崩溃现象。您可以通过更改字体大小 (<strong>Setting</strong> >
+<strong>Display</strong> > <strong>Font size</strong>) 并随后从最近使用记录中恢复运行应用,来验证应用行为。
+
+
+
+</li>
+
+<li>
+由于之前的 Android 版本中的一项错误,系统未能将对主线程上的一个 TCP 套接字的写入操作举报为严格模式违反。
+Android N 修复了此错误。呈现出这种行为的应用引发 {@code android.os.NetworkOnMainThreadException}。一般情况下,我们不建议在主线程上执行网络操作,因为这些操作通常都有可能导致 ANR 和卡顿的高尾延迟。
+
+
+
+</li>
+
+<li>
+{@code Debug.startMethodTracing()} 方法族现在默认在您的共享的存储空间上的软件包特定目录中存储输出,而非 SD 卡顶级。
+
+
+这意味着应用不再需要请求 {@code WRITE_EXTERNAL_STORAGE} 使用这些 API 的权限。
+</li>
+
+<li>
+许多平台 API 现在开始检查在 {@link android.os.Binder} 事务间发送的大负载,系统现在会将 {@code TransactionTooLargeExceptions} 再次作为 {@code RuntimeExceptions} 引发,而不再只是默默记录或抑制它们。
+
+
+一个常见例子是在 {@link android.app.Activity#onSaveInstanceState Activity.onSaveInstanceState()} 上存储过多数据,导致 {@code ActivityThread.StopInfo} 在您的应用面向 Android N 时引发 {@code RuntimeException}。
+
+
+
+
+</li>
+
+<li>
+如果应用向 {@link android.view.View} 发布 {@link java.lang.Runnable} 任务,并且 {@link android.view.View} 未附加到窗口,系统会用 {@link android.view.View} 为 {@link java.lang.Runnable} 任务排队;在 {@link android.view.View} 附加到窗口之前,{@link java.lang.Runnable} 任务不会执行。
+
+
+
+
+
+此行为会修复以下错误:
+<ul>
+ <li>如果一项应用是从并非预期窗口 UI 线程的其他线程发布到 {@link android.view.View},则{@link java.lang.Runnable} 可能会因此运行错误的线程。
+
+ </li>
+ <li>如果 {@link java.lang.Runnable} 任务是从并非环路线程的其他线程发布,则应用可能会曝光 {@link java.lang.Runnable} 任务。
+</li>
+</ul>
+</li>
+
+<li>
+如果 Android N 上一项有 {@link android.Manifest.permission#DELETE_PACKAGES DELETE_PACKAGES} 权限的应用尝试删除一个软件包,但另一项应用已经安装了这个软件包,则系统可能要求用户确认。
+
+
+在这种情况下,应用在调用 {@link android.content.pm.PackageInstaller#uninstall PackageInstaller.uninstall()} 时的返回状态应为 {@link android.content.pm.PackageInstaller#STATUS_PENDING_USER_ACTION STATUS_PENDING_USER_ACTION}。
+
+
+
+</li>
+
+</ul>
+
diff --git a/docs/html-intl/intl/zh-cn/about/versions/nougat/android-7.0-samples.jd b/docs/html-intl/intl/zh-cn/about/versions/nougat/android-7.0-samples.jd
new file mode 100644
index 0000000..600e33a
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/about/versions/nougat/android-7.0-samples.jd
@@ -0,0 +1,85 @@
+page.title=示例
+page.tags="preview", "samples", "android"
+page.image=images/cards/card-n-samples_2x.png
+@jd:body
+
+<p>
+ 以下是 Android N 的代码示例。要在 Android Studio 中下载示例,请选择 <b>File > Import Samples</b> 菜单项。
+
+
+</p>
+
+<p class="note">
+ <strong>注:</strong>这些可下载的项目设计用于与 Gradle 和 Android Studio 结合使用。
+
+</p>
+
+
+<h3 id="mw">多窗口 Playground</h3>
+<img src="{@docRoot}images/android-7.0/sample-multiwindow.png" style="float: left; padding-right: 0.5em" height="250" width="156" />
+<p>
+ 此示例演示如何在您的应用中充分利用多窗口用户界面。
+
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-MultiWindowPlayground">
+在 GitHub 中获取</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="an">活动通知</h3>
+<img src="{@docRoot}images/android-7.0/sample-activenotifications.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ 这是一个已存在的示例,其显示一个使用 NotificationCompat 发送通知的简单服务。该服务将来自用户的每个未读会话以不同的通知形式发送。
+
+
+</p>
+<p>
+ 此示例已更新,以充分利用 Android N 中提供的新的通知功能。
+
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-ActiveNotifications">在 GitHub 中获取</a>
+
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="ms">消息传递服务</h3>
+<img src="{@docRoot}images/android-7.0/sample-messagingservice.png" style="float: left; padding-right: 0.5em" height="250" width="150" />
+<p>
+ 这是一个已存在的示例,其演示如何使用 NotificationManager 指示应用当前显示的通知数量。
+
+
+</p>
+<p>
+ 此示例已更新,以充分利用 Android N 中提供的新的通知功能。
+
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-MessagingService">在 GitHub 中获取</a>
+
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="fbe">直接启动</h3>
+<img src="{@docRoot}images/android-7.0/sample-directboot.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ 此示例显示如何在设备加密的存储(启动设备后始终可用)中存储和访问数据。
+
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-DirectBoot">在 GitHub 中获取</a>
+
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="sda">作用域目录访问</h3>
+<img src="{@docRoot}images/android-7.0/sample-scopeddirectoryaccess.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ 此示例演示如何从特定目录读取和写入数据,同时需要较少的权限。
+
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-ScopedDirectoryAccess">在 GitHub 中获取</a>
+
+</p>
diff --git a/docs/html-intl/intl/zh-cn/about/versions/nougat/android-7.0.jd b/docs/html-intl/intl/zh-cn/about/versions/nougat/android-7.0.jd
new file mode 100644
index 0000000..8810d39
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/about/versions/nougat/android-7.0.jd
@@ -0,0 +1,1039 @@
+page.title=Android N for Developers
+meta.tags="preview", "androidn"
+page.tags="preview", "developer preview"
+page.image=images/cards/card-n-apis_2x.png
+@jd:body
+
+
+
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>重要的开发者功能</h2>
+ <ol>
+ <ul style="list-style-type:none;">
+ <li><a href="#multi-window_support">多窗口支持</a></li>
+ <li><a href="#notification_enhancements">通知</a></li>
+ <li><a href="#jit_aot">JIT/AOT 编译</a></li>
+ <li><a href="#quick_path_to_app_install">快速的应用安装路径</a></li>
+ <li><a href="#doze_on_the_go">随时随地低电耗模式</a></li>
+ <li><a href="#background_optimizations">后台优化</a></li>
+ <li><a href="#data_saver">Data Saver</a></li>
+ <li><a href="#vulkan">Vulkan API</a></li>
+ <li><a href="#tile_api">Quick Settings Tile API</a></li>
+ <li><a href="#number-blocking">号码屏蔽</a></li>
+ <li><a href="#call_screening">来电过滤</a></li>
+ <li><a href="#multi-locale_languages">区域设置和语言</a></li>
+ <li><a href="#emoji">新增的表情符号</a></li>
+ <li><a href="#icu4">Android 中的 ICU4J API</a></li>
+ <li><a href="#gles_32">OpenGL ES 3.2 API</a></li>
+ <li><a href="#android_tv_recording">Android TV 录制</a></li>
+ <li><a href="#android_for_work">Android for Work</a></li>
+ <li><a href="#accessibility_enhancements">无障碍功能</a></li>
+ <li><a href="#direct_boot">直接启动</a></li>
+ <li><a href="#key_attestation">密钥认证</a></li>
+ <li><a href="#network_security_config">网络安全性配置</a></li>
+ <li><a href="#default_trusted_ca">默认受信任的 CA</a></li>
+ <li><a href="#apk_signature_v2">APK Signature Scheme v2</a></li>
+ <li><a href="#scoped_directory_access">作用域目录访问</a></li>
+ <li><a href="#keyboard_shortcuts_helper">键盘快捷键辅助工具</a></li>
+ <li><a href="#sustained_performance_api">持续性能 API</a></li>
+ <li><a href="#vr">VR 支持</a></li>
+ <li><a href="#print_svc">打印服务增强</a></li>
+ <li><a href="#virtual_files">虚拟文件</a></li>
+ <li><a href="#framemetrics_api">FrameMetricsListener API</a></li>
+ </ol>
+</div>
+</div>
+
+
+
+<p>Android N 仍处于活动的开发状态,但现在您可以将其作为 N Developer Preview 的一部分进行试用。
+以下部分重点介绍面向开发者的一些新功能。
+ </p>
+
+<p>
+ 请务必查阅<a href="{@docRoot}preview/behavior-changes.html">行为变更</a>以了解平台变更可能影响您的应用的领域,看看开发者指南,了解有关关键功能的更多信息,并下载 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 参考</a>以获取新 API 的详细信息。
+
+
+
+</p>
+
+<h2 id="multi-window_support">多窗口支持</h2>
+
+
+<p>在 Android N 中,我们为该平台引入了一个新的而且非常需要的多任务处理功能 — 多窗口支持。
+ </p>
+
+ <p>现在,用户可以一次在屏幕上打开两个应用。 </p>
+ <ul>
+ <li>在运行 Android N 的手机和平板电脑上,用户可以并排运行两个应用,或者处于分屏模式时一个应用位于另一个应用之上。
+
+用户可以通过拖动两个应用之间的分隔线来调整应用。
+ </li>
+
+<li>在 Android TV 设备上,应用可以将自身置于<a href="{@docRoot}preview/features/picture-in-picture.html">画中画模式</a>,从而让它们可以在用户浏览或与其他应用交互时继续显示内容。
+
+</li>
+ </ul>
+
+<div class="col-4of10">
+<img src="{@docRoot}images/android-7.0/mw-portrait.png" alt="" style="height:460px;padding-left:1em;" id="img-split-screen" />
+<p class="img-caption">
+ <strong>图 1. </strong>在分屏模式下运行的应用。
+</p>
+
+ </div>
+
+<p>多窗口支持为您提供新的吸引用户方式,特别是在平板电脑和其他更大屏幕的设备上。
+您甚至可以在您的应用中启用拖放,从而使用户可以方便地将内容拖放到您的应用或从其中拖出内容—这是一个非常好的增强用户体验的方式。
+
+ </p>
+
+<p>向您的应用添加多窗口支持并配置多窗口显示的处理方式非常简单。
+例如,您可以指定您的 Activity 允许的最小尺寸,从而防止用户将 Activity 调整到该尺寸以下。
+
+您还可以为应用禁用多窗口显示,这可确保系统将仅以全屏模式显示应用。
+</p>
+
+<p>
+ 如需了解详细信息,请参阅<a href="{@docRoot}preview/features/multi-window.html">多窗口支持</a>开发者文档。
+
+</p>
+
+<h2 id="notification_enhancements">通知增强功能</h2>
+
+<p>在 Android N 中,我们重新设计了通知,使其更易于使用并且速度更快。
+部分变更包括:</p>
+
+<ul>
+ <li>
+ <strong>模板更新</strong>:我们正在更新通知模板,新强调了英雄形象和化身。
+开发者将能够充分利用新模板,只需进行少量的代码调整。
+
+ </li>
+
+ <li>
+ <strong>消息样式自定义</strong>:您可以自定义更多与您的使用 <code>MessageStyle</code> 类的通知相关的用户界面标签。
+
+您可以配置消息、会话标题和内容视图。
+
+ </li>
+
+ <li>
+ <strong>捆绑通知</strong>:系统可以将消息组合在一起(例如,按消息主题)并显示组。
+用户可以适当地进行 Dismiss 或 Archive 等操作。
+如果您已实现 Android Wear 的通知,那么您已经很熟悉此模型。
+
+
+ </li>
+
+ <li>
+ <strong>直接回复</strong>:对于实时通信应用,Android 系统支持内联回复,以便用户可以直接在通知界面中快速回复短信。
+
+
+ </li>
+
+ <li>
+ <strong>自定义视图</strong>:两个新的 API 让您在通知中使用自定义视图时可以充分利用系统装饰元素,如通知标题和操作。
+
+
+ </li>
+</ul>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-1.png" alt="" style="padding:.5em;max-width:226px">
+</div>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-3.png" alt="" style="padding:.5em;max-width:226px">
+</div>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-2.png" alt="" style="padding:.5em;max-width:226px">
+</div>
+
+
+<p class="img-caption">
+ <strong>图 2. </strong>绑定的通知和直接回复。
+</p>
+
+<p>如需了解如何实现新功能的信息,请参阅<a href="{@docRoot}preview/features/notification-updates.html">通知</a>指南。
+
+</p>
+
+
+
+<h2 id="jit_aot">个人资料指导的 JIT/AOT 编译</h2>
+
+<p>在 Android N 中,我们添加了 Just in Time (JIT) 编译器,对 ART 进行代码分析,让它可以在应用运行时持续提升 Android 应用的性能。
+
+JIT 编译器对 Android 运行组件当前的 Ahead of Time (AOT) 编译器进行了补充,有助于提升运行时性能,节省存储空间,加快应用更新和系统更新速度。
+
+</p>
+
+<p>个人资料指导的编译让 Android 运行组件能够根据应用的实际使用以及设备上的情况管理每个应用的 AOT/JIT 编译。
+例如,Android 运行组件维护每个应用的热方法的个人资料,并且可以预编译和缓存这些方法以实现最佳性能。
+
+对于应用的其他部分,在实际使用之前不会进行编译。
+</p>
+
+<p>除提升应用的关键部分的性能外,个人资料指导的编译还有助于减少整个 RAM 占用,包括关联的二进制文件。
+
+此功能对于低内存设备非常尤其重要。</p>
+
+<p>Android 运行组件在管理个人资料指导的编译时,可最大程度降低对设备电池的影响。
+仅当设备处于空闲状态和充电时才进行编译,从而可以通过提前执行该工作节约时间和省电。
+</p>
+
+<h2 id="quick_path_to_app_install">快速的应用安装路径</h2>
+
+<p>Android 运行组件的 JIT 编译器最实际的好处之一是应用安装和系统更新的速度。
+即使在 Android 6.0 中需要几分钟进行优化和安装的大型应用,现在只需几秒钟就可以完成安装。
+
+系统更新也变得更快,因为省去了优化步骤。 </p>
+
+<h2 id="doze_on_the_go">随时随地低电耗模式...</h2>
+
+<p>Android 6.0 推出了低电耗模式,即设备处于空闲状态时,通过推迟应用的 CPU 和网络活动以实现省电目的的系统模式,例如,设备放在桌上或抽屉里时。
+
+ </p>
+
+<p>现在,在 Android N 中,低电耗模式又前进了一步,随时随地可以省电。只要屏幕关闭了一段时间,且设备未插入电源,低电耗模式就会对应用使用熟悉的 CPU 和网络限制。这意味着用户即使将设备放入口袋里也可以省电。
+
+
+
+</p>
+
+
+<img src="/preview/images/doze-diagram-1.png" alt="" id="figure1" />
+<p class="img-caption">
+ <strong>图 3. </strong>低电耗模式现在应用限制以延长电池寿命,即使设备未处于静止状态。
+
+</p>
+
+
+<p>屏幕关闭片刻后,设备在使用电池时,低电耗模式将限制网络访问,同时延迟作业和同步。
+在短暂的维护时间范围后,其允许应用访问网络,并执行延迟的作业/同步。
+
+打开屏幕或将设备插入电源会使设备退出低电耗模式。
+</p>
+
+<p>当设备再次处于静止状态时,屏幕关闭且使用电池一段时间,低电耗模式针对 {@link
+android.os.PowerManager.WakeLock}、{@link android.app.AlarmManager} 警报和 GPS/Wi-Fi 扫描应用完整 CPU 和网络限制。
+
+</p>
+
+<p>无论设备是否处于运动状态,将应用调整到低电耗模式的最佳做法均相同,因此,如果您已更新应用以妥善处理低电耗模式,则一切就绪。
+
+如果不是,请立即开始<a href="{@docRoot}training/monitoring-device-state/doze-standby.html#assessing_your_app">将应用调整到低电耗模式</a>。
+</p>
+
+<h2 id="background_optimizations">Project Svelte:后台优化</h2>
+
+<p>Project Svelte 在持续改善,以最大程度减少生态系统中一系列 Android 设备中系统和应用使用的 RAM。
+在 Android N 中,Project Svelte 注重优化在后台中运行应用的方式。
+ </p>
+
+<p>后台处理是大多数应用的一个重要部分。处理得当,可让您实现非常棒的用户体验 — 即时、快速和情境感知。如果处理不得当,后台处理会毫无必要地消耗 RAM(和电池),同时影响其他应用的系统性能。
+
+
+ </p>
+
+<p>自 Android 5.0 发布以来,{@link android.app.job.JobScheduler} 已成为执行后台工作的首选方式,其工作方式有利于用户。
+
+应用可以在安排作业的同时允许系统基于内存、电源和连接情况进行优化。
+JobScheduler 可实现控制和简洁性,我们想要所有应用都使用它。
+ </p>
+
+<p>
+ 另一个非常好的选择是 <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
+ <code>GCMNetworkManager</code></a>(Google Play 服务的一部分),其在旧版 Android 中提供类似的作业安排和兼容性。
+
+
+</p>
+
+<p>我们在继续扩展 <code>JobScheduler</code> 和
+<code>GCMNetworkManager</code>,以符合多个用例 — 例如,在 Android N 中,现在,您可以基于内容提供程序中的更改安排后台工作。
+
+同时,我们开始弃用一些较旧的模式,这些模式会降低系统性能,特别是低内存设备的系统性能。
+
+</p>
+
+<p>在 Android N 中,我们删除了三个常用隐式广播 —
+ {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}、{@link
+ android.hardware.Camera#ACTION_NEW_PICTURE} 和 {@link
+ android.hardware.Camera#ACTION_NEW_VIDEO} — 因为这些广播可能会一次唤醒多个应用的后台进程,同时会耗尽内存和电池。
+如果您的应用收到这些广播,请充分利用 N Developer Preview 以迁移到 <code>JobScheduler</code> 和相关的 API。
+
+ </p>
+
+<p>
+ 如需了解详情,请查看<a href="{@docRoot}preview/features/background-optimization.html">后台优化</a>文档。
+
+</p>
+
+
+<h2 id="data_saver">Data Saver</h2>
+
+<div class="col-5of12" style="margin-right:1.5em;">
+<img src="{@docRoot}images/android-7.0/datasaver.png" style="border:2px solid #ddd">
+
+<p class="img-caption" style="padding-right:2em;">
+ <strong>图 4. </strong> 设置中的 Data Saver
+</p>
+ </div>
+
+<p>在移动设备的整个生命周期,蜂窝数据计划的成本通常会超出设备本身的成本。
+对于许多用户而言,蜂窝数据是他们想要节省的昂贵资源。
+ </p>
+
+<p>Android N 推出了 Data Saver 模式,这是一项新的系统服务,有助于减少应用使用的蜂窝数据,无论是在漫游,账单周期即将结束,还是使用少量的预付费数据包。
+
+Data Saver 让用户可以控制应用使用蜂窝数据的方式,同时让开发者打开 Data Saver 时可以提供更多有效的服务。
+
+ </p>
+
+<p>用户在 <strong>Settings</strong> 中启用 Data Saver 且设备位于按流量计费的网络上时,系统屏蔽后台流量消耗,同时指示应用在前台尽可能使用较少的流量 — 例如,通过限制用于流媒体服务的比特率、降低图片质量、延迟最佳的预缓冲等方法来实现。
+
+
+
+用户可以将特定应用加入白名单以允许后台按流量的流量消耗,即使在打开 Data Saver 时也是如此。
+</p>
+
+<p>Android N 扩展了 {@link android.net.ConnectivityManager},以便为应用<a href="{@docRoot}preview/features/data-saver.html#status">检索用户的 Data Saver 首选项</a>并<a href="{@docRoot}preview/features/data-saver.html#monitor-changes">监控首选项变更</a>提供一种方式。
+
+
+所有应用均应检查用户是否已启用 Data Saver 并努力限制前台和后台流量消耗。
+</p>
+
+
+<h2 id="vulkan">Vulkan API</h2>
+
+<p>
+ Android N 将一项新的 3D 渲染 API <a href="http://www.khronos.org/vulkan" class="external-link">Vulkan™</a> 集成到平台中。就像 <a href="https://www.khronos.org/opengles/" class="external-link">OpenGL™ ES</a> 一样,Vulkan 是 3D 图形和渲染的一项开放标准,由 Khronos Group 维护。
+
+
+
+</p>
+
+<p>
+ Vulkan 是完全从零开始设计,以最小化驱动器中的 CPU 开销,并能让您的应用更直接地控制 GPU 操作。
+Vulkan 还允许多个线程同时执行工作,如命令缓冲区构建,以获得更好的并行化。
+
+
+</p>
+
+<p>
+ Vulkan 开发工具和库都已卷入 Android NDK。它们包括:
+
+</p>
+
+<ul>
+ <li>头
+ </li>
+
+ <li>验证层(调试库)
+ </li>
+
+ <li>SPIR-V 着色程序编译器
+ </li>
+
+ <li>SPIR-V 运行时着色器编译库
+ </li>
+</ul>
+
+<p>
+ Vulkan 仅适用于已启用 Vulkan 硬件的设备上的应用,如 Nexus 5X、Nexus 6P 和 Nexus Player。
+我们正在与合作伙伴密切合作,以尽快使 Vulkan 能面向更多的设备。
+
+</p>
+
+<p>
+ 如需要了解更多信息,请参阅 <a href="{@docRoot}ndk/guides/graphics/index.html">API 文档</a>。
+</p>
+
+<h2 id="tile_api">Quick Settings Tile API</h2>
+
+
+<div style="float:right;max-width:320px">
+<img src="{@docRoot}images/android-7.0/quicksettings.png" style="padding-left:1.5em;">
+
+<p class="img-caption" style="padding-left:2em;">
+ <strong>图 5.</strong> 通知栏中的快速设置图块。
+</p>
+
+
+ </div><p>“快速设置”通常用于直接从通知栏显示关键设置和操作,非常简单。
+在 Android N 中,我们已扩展“快速设置”的范围,使其更加有用更方便。
+ </p>
+
+<p>我们为额外的“快速设置”图块添加了更多空间,用户可以通过向左或向右滑动跨分页的显示区域访问它们。
+我们还让用户可以控制显示哪些“快速设置”图块以及显示的位置 — 用户可以通过拖放图块来添加或移动图块。
+
+ </p>
+
+<p>对于开发者,Android N 还添加了一个新的 API,从而让您可以定义自己的“快速设置”图块,使用户可以轻松访问您应用中的关键控件和操作。
+</p>
+
+<p>
+ 对于急需或频繁使用的控件和操作,保留“快速设置”图块,且不应将其用作启动应用的快捷方式。
+
+
+</p>
+
+<p>
+ 定义图块后,您可以将它们显示给用户,用户可通过拖放将图块添加到“快速设置”。
+
+</p>
+
+<p>
+ 如需创建应用图块的更多信息,请参阅可下载的 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 参考</a>中的文件 <code>android.service.quicksettings.Tile</code>。
+
+</p>
+
+
+
+<h2 id="number-blocking">号码屏蔽</h2>
+
+<p>Android N 现在支持在平台中进行号码屏蔽,提供框架 API,让服务提供商可以维护屏蔽的号码列表。
+默认短信应用、默认手机应用和提供商应用可以对屏蔽的号码列表进行读取和写入操作。
+
+其他应用则无法访问此列表。</p>
+
+<p>通过使号码屏蔽成为平台的标准功能,Android 为应用提供一致的方式来支持广泛的设备上的号码屏蔽。
+
+应用可以利用的其他优势包括:</p>
+
+<ul>
+ <li> 还会屏蔽已屏蔽的来电号码发出的短信
+ <li> 通过 Backup & Restore(备份和还原)功能可以跨重置和设备保留屏蔽的号码
+
+ <li> 多个应用可以使用相同的屏蔽号码列表
+</ul>
+
+<p>此外,通过 Android 的运营商应用集成表示运营商可以读取设备上屏蔽的号码列表,并为用户执行服务端屏蔽,以阻止不需要的来电和短信通过任何介质(如 VOIP 端点或转接电话)到达用户。
+
+
+</p>
+
+<p>
+ 如需了解详细信息,请参阅可下载的 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 参考</a>中的 <code>android.provider.BlockedNumberContract</code>。
+
+
+</p>
+
+<h2 id="call_screening">来电过滤</h2>
+
+<p>
+ Android N 允许默认的手机应用过滤来电。手机应用执行此操作的方式是实现新的 <code>CallScreeningService</code>,该方法允许手机应用基于来电的 {@link android.telecom.Call.Details Call.Details} 执行大量操作,例如:
+
+
+
+</p>
+
+<ul>
+ <li> 拒绝来电
+ <li> 不允许来电到达通话记录
+ <li> 不向用户显示来电通知
+</ul>
+
+<p>
+ 如需了解详细信息,请参阅可下载的 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 参考</a>中的 <code>android.telecom.CallScreeningService</code>。
+
+
+</p>
+
+
+<h2 id="multi-locale_languages">多区域设置支持、多语言</h2>
+
+
+<p>Android N 现在允许用户在设置中选择<strong>多个区域设置</strong>,以更好地支持双语用例。
+应用可以使用新的 API 获取用户选择的区域设置,然后为多区域设置用户提供更成熟的用户体验 — 如以多个语言显示搜索结果,并且不会以用户了解的语言翻译网页。
+
+
+
+</p>
+
+<p>除多区域设置支持外,Android N 还扩展了用户可用的语言范围。
+它针对常用语言提供超过 25 种的变体,如英语、西班牙语、法语和阿拉伯语。
+它还针对 100 多种新语言添加了部分支持。
+</p>
+
+<p>应用可以通过调用 <code>LocaleList.GetDefault()</code> 获取用户设置的区域设置列表。
+为支持扩展的区域设置数量,Android N 正在改变其解析资源的方式。
+请务必使用新的资源解析逻辑测试和验证您的应用是否能如期运行。
+</p>
+
+<p>如需有关新资源解析行为和应遵循的最佳做法的更多信息,请参阅<a href="{@docRoot}preview/features/multilingual-support.html">多语言支持</a>。
+</p>
+
+
+<h2 id="emoji">新增的表情符号</h2>
+
+<p>
+ Android N 引入更多表情符号和表情符号相关功能,包括肤色表情符号和支持变量选择符。
+
+如果您的应用支持表情符号,请遵循以下准则,以便能充分利用这些表情符号相关功能优势。
+
+</p>
+
+<ul>
+ <li>
+ <strong>在插入之前,检查设备是否包含表情符号。</strong>
+ 若要检查系统字体中有哪些表情符号,使用 {@link android.graphics.Paint#hasGlyph(String)} 方法。
+
+ </li>
+ <li>
+ <strong>检查表情符号是否支持变量选择符。</strong>
+ 变量选择符使您能够呈现一些彩色或黑白的表情符号。
+
+ 在移动设备上,应用应呈现彩色的表情符号,而不是黑白的。但是,如果您的应用显示嵌入在文本中的表情符号,那应使用黑白变量。
+
+ 若要确定表情符号是否有变量,使用变量选择符。
+ 如需有关支持变量的字符的完整清单,请参阅<a class="external-link" href="http://www.unicode.org/Public/9.0.0/ucd/StandardizedVariants-9.0.0d1.txt">变量的 Unicode 文档</a>中的 <em>表情符号变量序列</em>部分。
+
+
+
+ </li>
+ <li>
+ <strong>检查表情符号是否支持肤色。</strong>Android N 允许用户按照他们的喜好修改表情符号呈现的肤色。
+键盘应用应为有多个肤色的表情符号提供可视化的指示,并应允许用户选择他们喜欢的肤色。
+
+若要确定哪些系统表情符号有肤色修改器,使用 {@link android.graphics.Paint#hasGlyph(String)} 方法。
+
+您可以通过读取 <a class="external-link" href="http://unicode.org/emoji/charts/full-emoji-list.html">Unicode 文档</a>来确定哪些表情符号使用肤色。
+
+
+ </li>
+</ul>
+
+
+<h2 id="icu4">Android 中的 ICU4J API</h2>
+
+<p>
+ Android N 目前在 Android 框架(位于 <code>android.icu</code> 软件包下)中提供 <a href="http://site.icu-project.org/">ICU4J</a> API 的子集。
+迁移很简单,主要是需要从 <code>com.java.icu</code> 命名空间更改为 <code>android.icu</code>。
+
+如果您已在您的应用中使用 ICU4J 捆绑包,切换到 Android 框架中提供的 <code>android.icu</code> API 可以大量节省 APK 大小。
+
+
+</p>
+
+<p>
+ 如果要了解有关 Android ICU4J API 的更多信息,请参阅 <a href="{@docRoot}preview/features/icu4j-framework.html">ICU4J 支持</a>。
+</p>
+
+
+
+<h2 id="gles_32">OpenGL™ ES 3.2 API</h2>
+
+<p>Android N 添加了框架接口和对 OpenGL ES 3.2 的平台支持,包括:</p>
+
+<ul>
+ <li> 来自 <a class="external-link" href="https://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">
+Android 扩展包</a></a> (AEP) 的所有扩展(<code>EXT_texture_sRGB_decode</code> 除外)。
+ <li> 针对 HDR 的浮点帧缓冲和延迟着色。
+ <li> BaseVertex 绘图调用可实现更好的批处理和流媒体服务。
+ <li> 强大的缓冲区访问控制可减少 WebGL 开销。
+</ul>
+
+<p>Android N 上适用于 OpenGL ES 3.2 的框架 API 与 <code>GLES32</code> 类一起提供。
+使用 OpenGL ES 3.2 时,请务必通过 <code><uses-feature></code> 标记和 <code>android:glEsVersion</code> 属性在您的清单中声明要求。
+
+ </p>
+
+<p>如需了解有关使用 OpenGL ES 的信息,包括如何在运行时检查设备支持的 OpenGL ES 版本,请参阅 <a href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL ES API 指南</a>。
+</p>
+
+
+<h2 id="android_tv_recording">Android TV 录制</h2>
+
+<p>Android N 通过新的录制 API 添加了从 Android TV 输入服务录制和播放内容的功能。
+构建在现有时移 API 之上,TV 输入服务可以控制能够录制的渠道数据、保存录制的会话的方式,同时可通过录制的内容管理用户交互。
+
+ </p>
+
+<p>如需了解详细信息,请参阅 <a href="{@docRoot}preview/features/tv-recording-api.html">Android TV 录制 API</a>。</p>
+
+
+<h2 id="android_for_work">Android for Work</h2>
+
+<p>Android for Work 针对运行 Android N 的设备添加了许多新功能和 API。部分重要内容如下— 有关变更的完整列表,请参阅 <a href="{@docRoot}preview/features/afw.html">Android for Work 更新</a>。
+
+</p>
+
+<h3 id="work_profile_security_challenge">工作资料安全性挑战 </h3>
+
+<p>
+ 面向 N SDK 的个人资料所有者可以为在工作资料中运行的应用指定单独的安全性挑战。
+
+当用户尝试打开任何工作应用时将显示工作挑战。
+成功完成安全性挑战可解锁工作资料并将其解密(如果需要)。
+对于个人资料所有者,<code>ACTION_SET_NEW_PASSWORD</code> 提示用户设置工作挑战,<code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> 提示用户设置设备锁。
+
+
+
+</p>
+
+<p>
+ 个人资料所有者可以使用 <code>setPasswordQuality()</code>、<code>setPasswordMinimumLength()</code> 和相关方法针对工作挑战设置不同的密码策略(例如,PIN 必须多长,或是否可以使用指纹解锁个人资料)。
+
+
+个人资料所有者还可以使用新的 <code>getParentProfileInstance()</code> 方法返回的 <code>DevicePolicyManager</code> 实例设置设备锁定。
+
+
+ 此外,个人资料所有者可以使用新的 <code>setOrganizationColor()</code> 和 <code>setOrganizationName()</code> 方法针对工作挑战自定义凭据屏幕。
+
+
+</p>
+<h3 id="turn_off_work">关闭工作 </h3>
+
+<p>在有工作资料的设备上,用户可以切换工作模式。工作模式关闭时,管理的用户临时关闭,其禁用托管工作资料应用、后台同步和通知。
+
+这包括个人资料所有者应用。
+关闭工作模式时,系统显示永久状态图标,以提醒用户他们无法启动工作应用。
+启动器指示该工作应用和小组件无法访问。
+ </p>
+
+<h3 id="always_on_vpn">Always on VPN </h3>
+
+<p>设备所有者和个人资料所有者可以确保工作应用始终通过指定的 VPN 连接。
+系统在设备启动后自动启动该 VPN。
+</p>
+
+<p>
+ 新的 <code>DevicePolicyManager</code> 方法为 <code>setAlwaysOnVpnPackage()</code> 和 <code>getAlwaysOnVpnPackage()</code>。
+
+
+</p>
+
+<p>由于 VPN 服务无需应用交互即可由系统直接绑定,因此,VPN 客户端必须针对 Always on VPN 处理新的入口点。
+和以前一样,由与操作匹配的 Intent 过滤器将服务指示给系统。<code>android.net.VpnService</code>。
+
+ </p>
+
+<p>
+ 用户还可以使用 <strong>Settings>More>Vpn</strong> 在主要用户中手动设置实现 <code>VPNService</code> 方法的 Always on VPN 客户端。
+
+
+</p>
+
+<h3 id="custom_provisioning">自定义配置</h3>
+
+<p>
+ 应用可以用企业颜色和徽标来自定义个人资料所有者和设备所有者配置流程。<code>DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR</code> 自定义流程颜色。<code>DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI</code> 用企业徽标自定义流程。
+
+
+
+
+</p>
+
+<h2 id="accessibility_enhancements">无障碍增强功能</h2>
+
+<p>Android N 现在针对新的设备设置直接在欢迎屏幕上提供“Vision Settings”。
+这使用户可以更容易发现和配置他们设备上的无障碍功能,包括放大手势、字体大小、显示屏尺寸和 TalkBack。
+
+ </p>
+
+<p>随着这些无障碍功能更为突出,在启用这些功能后,您的用户更可能试用您的应用。
+请务必提前启用这些设置测试您的应用。
+您可以通过 Settings > Accessibility 启用它们。
+</p>
+
+<p>还是在 Android N 中,无障碍服务现在可以帮助具有动作障碍的用户触摸屏幕。
+全新的 API 允许使用人脸追踪、眼球追踪、点扫描等功能构建服务,以满足这些用户的需求。
+
+</p>
+
+<p>如需了解详细信息,请参阅可下载的 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 参考</a> 中的 <code>android.accessibilityservice.GestureDescription
+</code>。</p>
+
+
+<h2 id="direct_boot">直接启动</h2>
+
+<p>直接启动可以缩短设备启动时间,让注册的应用具有有限的功能,即使在意外重启后。例如,如果当用户睡觉时加密的设备重启,那么注册的警报、消息和来电现在可以和往常一样继续通知用户。
+
+
+
+这也意味着重启后无障碍服务会立即可用。
+</p>
+
+<p>在 Android N 中,直接启动充分利用基于文件的加密,以针对系统和应用数据启用细化的加密策略。为系统和应用数据。系统针对选定的系统数据和显式注册的应用数据使用设备加密的存储。
+
+
+默认情况下,凭据加密的存储可用于所有其他系统数据、用户数据、应用及应用数据。
+ </p>
+
+<p>启动时,系统在受限的模式中启动,仅访问设备加密的数据,不会对应用或数据进行常规访问。如果您有想要在此模式下运行的组件,您可以通过在清单文件中设置标记注册它们。
+
+
+重启后,系统通过广播 <code>LOCKED_BOOT_COMPLETED</code> Intent 激活注册的组件。
+
+系统确保注册的设备加密的应用数据在解锁前可用。
+所有其他数据在用户确认锁定屏幕凭据进行解密前均不可用。
+ </p>
+
+如需了解详细信息,请参阅<a href="{@docRoot}preview/features/direct-boot.html">直接启动</a>。</p>
+</p>
+
+
+<h2 id="key_attestation">密钥认证</h2>
+
+<p>使用硬件支持的密钥库,可更安全地在 Android 设备上创建、存储和使用加密密钥。
+它们可保护密钥免受 Linux 内核、潜在的 Android 漏洞的攻击,也可防止从已取得根权限的设备提取密钥。
+
+</p>
+
+<p>为了让硬件支持的密钥库使用起来更简单和更安全,Android N 引入了密钥认证。
+应用和关闭的设备可使用密钥认证以坚决地确定 RSA 或 EC 密钥对是否受硬件支持、密钥对的属性如何,以及其使用和有效性有何限制。
+
+
+ </p>
+
+<p>应用和关闭的设备服务可以通过 X.509 认证证书(必须由有效的认证密钥签署)请求有关密钥对的信息。
+
+认证密钥是一个 ECDSA 签署密钥,其在出厂时被注入设备的硬件支持的密钥库。因此,有效的认证密钥签署的认证证书可确认硬件支持的密钥库是否存在,以及该密钥库中密钥对的详细信息。
+
+
+
+</p>
+
+<p>为确保设备使用安全的官方 Android 出厂映像,密钥认证要求设备 <a class="external-link" href="https://source.android.com/security/verifiedboot/verified-boot.html#bootloader_requirements">bootloader</a> 向<a class="external-link" href="https://source.android.com/security/trusty/index.html">可信执行环境 (TEE)</a> 提供以下信息:
+
+
+</p>
+
+<ul>
+<li>设备上安装的操作系统版本和补丁级别</li>
+<li><a href="https://source.android.com/security/verifiedboot/index.html" class="external-link">验证的启动</a>公钥和锁定状态。</li>
+ </ul>
+
+<p>如需了解有关硬件支持的密钥库功能的详细信息,请参阅<a href="https://source.android.com/security/keystore/" class="external-link">硬件支持的密钥库</a>指南。
+</p>
+
+<p>除密钥认证外,Android N 还推出了指纹绑定密钥,在指纹注册时不会撤销。
+</p>
+
+<h2 id="network_security_config">网络安全性配置</h2>
+
+<p>在 Android N 中,通过使用说明性“网络安全性配置”(而不是使用传统的易出错的编程 API(例如,X509TrustManager)),应用可以安全地自定义其安全(HTTPS、TLS)连接的行为,无需任何代码修改。
+
+
+<em></em></p>
+
+ <p>支持的功能:</p>
+<ul>
+<li><b>自定义信任锚。</b>让应用可以针对安全连接自定义哪些证书颁发机构 (CA) 值得信赖。
+例如,信任特定的自签署证书或限制应用信任的公共 CA 集。
+
+</li>
+<li><b>仅调试重写。</b>让应用开发者可以安全调试其应用的安全连接,而不会增加安装基础的风险。
+
+
+</li>
+<li><b>明文流量选择退出。</b>让应用可以防止自身意外使用明文流量。
+</li>
+<li><b>证书固定。</b>这是一项高级功能,让应用可以针对安全连接限制哪些服务器密钥受信任。
+</li>
+</ul>
+
+<p>如需了解详细信息,请参阅<a href="{@docRoot}preview/features/security-config.html">网络安全性配置</a>。
+</p>
+
+<h2 id="default_trusted_ca">默认受信任的证书颁发机构</h2>
+
+<p>默认情况下,面向 Android N 的应用仅信任系统提供的证书,且不再信任用户添加的证书颁发机构 (CA)。
+如果面向 Android N 的应用希望信任用户添加的 CA,则应使用<a href="{@docRoot}preview/features/security-config.html">网络安全性配置</a>以指定信任用户 CA 的方式。
+
+
+</p>
+
+<h2 id="apk_signature_v2">APK signature scheme v2</h2>
+
+<p>
+ Android N 引入一项新的应用签名方案 APK Signature Scheme v2,它能提供更快的应用安装时间和更多针对未授权 APK 文件更改的保护。
+
+在默认情况下,Android Studio 2.2 和 Android Gradle 2.2 插件会使用 APK Signature Scheme v2 和传统签名方案来签署您的应用。
+
+
+</p>
+
+<p>
+ 虽然我们建议您对您的应用采用 APK Signature Scheme v2,但这项新方案并非强制性的。
+如果您的应用在使用 APK Signature Scheme v2 时不能正确构建,您可以停用这项新方案。
+禁用过程会导致 Android Studio 2.2 和 Android Gradle 2.2 插件仅使用传统签名方案来签署您的应用。
+
+若要仅用传统方案签署,打开多层 <code>build.gradle</code> 文件,然后将行 <code>v2SigningEnabled false</code> 添加到您的版本签名配置中:
+
+
+
+</p>
+
+<pre>
+ android {
+ ...
+ defaultConfig { ... }
+ signingConfigs {
+ release {
+ storeFile file("myreleasekey.keystore")
+ storePassword "password"
+ keyAlias "MyReleaseKey"
+ keyPassword "password"
+ <strong>v2SigningEnabled false</strong>
+ }
+ }
+ }
+</pre>
+
+<p class="caution"><strong>注意:</strong>如果您使用 APK Signature Scheme v2 签署您的应用,并对应用进行了进一步更改,则应用的签名将无效。
+
+出于这个原因,请在使用 APK Signature Scheme v2 之前、而非之后使用 <code>zipalign</code> 等工具。
+
+</p>
+
+<p>
+ 如需更多信息,请阅读介绍如何在 Android Studio 中<a href="{@docRoot}studio/publish/app-signing.html#release-mode">签署一项应用</a>以及如何使用 Android Gradle 插件来为签署应用<a href="{@docRoot}studio/build/build-variants.html#signing">配置构建文件</a>。
+
+
+
+</p>
+
+<h2 id="scoped_directory_access">作用域目录访问</h2>
+
+<p>在 Android N 中,应用可以使用新的 API 请求访问特定的<a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">外部存储</a>目录,包括可移动媒体上的目录,如 SD 卡。
+
+新 API 大大简化了应用访问标准外部存储目录的方式,如 <code>Pictures</code> 目录。
+应用(如照片应用)可以使用这些 API(而不是使用 <code>READ_EXTERNAL_STORAGE</code>),其授予所有存储目录的访问权限或存储访问框架,从而让用户可以导航到目录。
+
+
+
+</p>
+
+<p>此外,新的 API 简化了用户向应用授予外部存储访问权限的步骤。
+当您使用新的 API 时,系统使用一个简单的权限 UI,其清楚地详细介绍应用正在请求访问的目录。
+
+</p>
+
+<p>如需了解详细信息,请参阅<a href="{@docRoot}preview/features/scoped-folder-access.html">作用域目录访问</a>开发者文档。
+
+</p>
+
+<h2 id="keyboard_shortcuts_helper">键盘快捷键辅助工具</h2>
+
+<p>
+在 Android N 中,用户可以按“Alt + /”触发“键盘快捷键”屏幕,它会显示的系统和对焦的应用中可用的所有快捷键。
+
+<em></em>这些是从应用菜单(如可用)中自动检索到的,但开发者可以提供自己的屏幕微调快捷键。
+
+您可以通过重写新 <code>Activity.onProvideKeyboardShortcuts()</code> 的方法来进行这项操作,如可下载的 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 参考</a> 中所述。
+
+
+</p>
+
+<p>
+若要在您的应用程序的任何地方触发键盘快捷键辅助工具,为相关活动调用 {@code Activity.requestKeyboardShortcutsHelper()}。
+
+</p>
+
+<h2 id="sustained_performance_api">持续性能 API</h2>
+
+<p>
+长期运行的应用的性能可能会显著波动,因为系统会阻止系统芯片在设备组件达到温度限制时启动。
+
+这种波动是建立高性能长期运行应用的应用开发者的移动目标。
+
+</p>
+
+<p>
+为解决这些限制,Android N 包括了“持续性能模式”支持,帮助原始设备制造商 (OEM) 提供关于长期运行应用的设备性能能力的提示。
+
+<em></em>应用开发者可以使用这些提示来根据可预测的一致设备性能水平调整长期应用。
+
+
+</p>
+
+<p>
+应用开发者只能在 Nexus 6P 设备的 N Developer Preview 上尝试这项新的 API。
+若要使用此功能,为您希望以持续性能模式运行的窗口设置持续性能窗口标记。
+
+使用 {@code Window.setSustainedPerformanceMode()} 方法设置此举报。
+当窗口不再对焦时,系统会自动停用此模式。
+
+</p>
+
+<h2 id="vr">VR 支持</h2>
+
+<p>
+Android N 添加了新的 VR 模式的平台支持和优化,以使开发者能为用户打造高质量移动 VR 体验。
+新版针对开发者提供了大量性能增强特性,包括单一缓冲区渲染以及允许 VR 应用访问某个专属的 CPU 核心。在您的应用中,您可以享受到专为 VR 设计的平滑头部跟踪和立体声通知功能。
+
+
+最重要的是,Android N 的图形延时非常低。
+如需有关构建面向的 Android N 的 VR 应用的完整信息,请参阅 <a href="https://developers.google.com/vr/android/">面向 Android 的 Google VR SDK</a>。
+
+</p>
+
+
+<h2 id="print_svc">打印服务增强</h2>
+
+<p>
+ 在 Android N 中,打印服务开发者现在可以公开关于个别打印机和打印作业的其他信息。
+
+</p>
+
+<p>
+ 在列出各打印机时,打印服务现在可以通过两种方式来设置按打印机的图标:
+
+</p>
+
+<ul>
+ <li>您可以通过调用 <code>PrinterInfo.Builder.setResourceIconId()</code> 设置源于资源 ID 的图标
+
+ </li>
+
+ <li>您可以通过调用 <code>PrinterInfo.Builder.setHasCustomPrinterIcon()</code>,并针对使用 <code>android.printservice.PrinterDiscoverySession.onRequestCustomPrinterIcon()</code> 请求图标的情况设置回调来显示源自网络的图标
+
+
+
+ </li>
+</ul>
+
+<p>
+ 此外,您还可以通过调用 <code>PrinterInfo.Builder.setInfoIntent()</code> 提供按打印机活动,以显示其他信息。
+
+</p>
+
+<p>
+ 您可以通过分别调用 <code>android.printservice.PrintJob.setProgress()</code> 和 <code>android.printservice.PrintJob.setStatus()</code> 在打印任务通知中指示打印任务的进度和状态。
+
+
+
+</p>
+
+<p>
+ 如需有关这些方法的详细信息,请参阅可下载的 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 参考</a>。
+</p>
+
+<h2 id="framemetrics_api">FrameMetricsListener API</h2>
+
+<p>
+FrameMetricsListener API 允许应用监测它的 UI 渲染性能。
+API 通过公开流式传输 Pub/Sub API 来提供此能力,以传递应用当前窗口的帧计时信息。
+返回的数据相当于 <code><a href="{@docRoot}tools/help/shell.html#shellcommands">adb shell</a>
+dumpsys gfxinfo framestats</code> 显示的数据,但不限定于在过去的 120 帧内。
+
+</p>
+
+<p>
+您可以使用 FrameMetricsListener 来衡量生产中的交互级 UI 性能,无需 USB 连接。
+API 允许在比 {@code adb shell dumpsys gfxinfo} 更高的粒度上收集数据。
+
+因为系统可以从应用中的特定交互中收集数据,因此更高的粒度变得可行;系统不需要采集关于完整应用性能的全局概要或清除任何全局状态。
+
+
+您可以使用这种能力来针对应用的真实使用案例收集性能数据和捕捉 UI 性能回归。
+
+
+</p>
+
+<p>
+若要监测一个窗口,实现 <code>FrameMetricsListener.onMetricsAvailable()</code> 回叫方法,并在窗口上注册。
+如需了解详细信息,请参阅可下载的 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 参考</a> 中的 {@code FrameMetricsListener} 类文档。
+
+
+</p>
+
+<p>
+API 提供了一个包含计时数据的 {@code FrameMetrics} 对象,其渲染子系统会在一帧长度内报告各种里程碑。支持的指标有:{@code UNKNOWN_DELAY_DURATION}、{@code INPUT_HANDLING_DURATION}、{@code ANIMATION_DURATION}、{@code LAYOUT_MEASURE_DURATION}、{@code DRAW_DURATION}、{@code SYNC_DURATION}、{@code COMMAND_ISSUE_DURATION}、{@code SWAP_BUFFERS_DURATION}、{@code TOTAL_DURATION} 和 {@code FIRST_DRAW_FRAME}。
+
+
+
+
+
+
+</p>
+
+
+<h2 id="virtual_files">虚拟文件</h2>
+
+<p>
+ 在较早的 Android 版本中,您的应用可以使用存储访问框架来允许用户从他们的云存储帐户中选择文件,如 Google 云端硬盘。
+
+但是,不能表示没有直接字节码表示的文件;每个文件都必须提供一个输入流。
+
+
+</p>
+
+<p>
+ Android N 在存储访问框架中增加了“虚拟文件”的概念。
+<em></em>虚拟文件功能可以让您的 {@link android.provider.DocumentsProvider} 返回可与 {@link android.content.Intent#ACTION_VIEW}Intent 使用的文件 URI,即使它们没有直接字节码表示。
+
+
+Android N 还允许您为用户文件(虚拟或其他类)提供备用格式。
+
+</p>
+
+<p>
+ 为获得您的应用中的虚拟文件的 URI,首先您应创建一个 {@link android.content.Intent} 以打开文件选择器 UI。
+由于应用不能使用 {@link android.content.ContentResolver#openInputStream(Uri) openInputStream()} 方法来直接打开一个虚拟文件,因此如果您包括了 {@link android.content.Intent#CATEGORY_OPENABLE} 类别,您的应用不会收到任何虚拟文件。
+
+
+
+
+</p>
+
+<p>
+ 在用户选择之后,系统调用 {@link android.app.Activity#onActivityResult onActivityResult()} 方法。
+
+ 您的应用可以检索虚拟文件的URI,并得到一个输入流,这表现在以下片段中的代码。
+
+</p>
+
+<pre>
+ // Other Activity code ...
+
+ final static private int REQUEST_CODE = 64;
+
+ // We listen to the OnActivityResult event to respond to the user's selection.
+ @Override
+ public void onActivityResult(int requestCode, int resultCode,
+ Intent resultData) {
+ try {
+ if (requestCode == REQUEST_CODE &&
+ resultCode == Activity.RESULT_OK) {
+
+ Uri uri = null;
+
+ if (resultData != null) {
+ uri = resultData.getData();
+
+ ContentResolver resolver = getContentResolver();
+
+ // Before attempting to coerce a file into a MIME type,
+ // check to see what alternative MIME types are available to
+ // coerce this file into.
+ String[] streamTypes =
+ resolver.getStreamTypes(uri, "*/*");
+
+ AssetFileDescriptor descriptor =
+ resolver.openTypedAssetFileDescriptor(
+ uri,
+ streamTypes[0],
+ null);
+
+ // Retrieve a stream to the virtual file.
+ InputStream inputStream = descriptor.createInputStream();
+ }
+ }
+ } catch (Exception ex) {
+ Log.e("EXCEPTION", "ERROR: ", ex);
+ }
+ }
+</pre>
+
+<p>
+ 如需有关访问用户文件的更多信息,请参阅 <a href="{@docRoot}guide/topics/providers/document-provider.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
new file mode 100644
index 0000000..5619de8
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/about/versions/nougat/index.jd
@@ -0,0 +1,110 @@
+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
+
+<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-8of16" style="padding-left:2em">
+ <h1 class="dac-hero-title">Android 7.0 Nougat</h1>
+ <p class="dac-hero-description">
+ 为 Android Nougat 进行准备!
+ 在 Nexus 和其他设备上<strong>测试您的应用</strong>。支持新系统行为以<strong>节省电量和内存</strong>。
+
+ 使用<strong>多窗口 UI</strong> 扩展您的应用,以便能够<strong>直接答复通知</strong>及执行其他操作。
+
+ </p>
+
+ <a class="dac-hero-cta" href="{@docRoot}about/versions/nougat/android-7.0.html">
+ <span class="dac-sprite dac-auto-chevron"></span>
+ 入门指南
+ </a>
+ </div>
+ <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></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>
+</section>
+
+
+<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://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/dev-community">
+ <i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
+ 加入开发者社区
+ </a>
+ </li>
+ </ul>
+ </div><!-- end .wrap -->
+</div><!-- end .dac-actions -->
+
+<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"
+ data-query="type:blog+tag:androidn+tag:featured, type:youtube+tag:androidn+tag:featured"
+ data-sortOrder="-timestamp"
+ data-cardSizes="6x6"
+ data-items-per-page="6"
+ data-maxResults="15"
+ data-initial-results="3"></div>
+</div></section>
+
+<section class="dac-section dac-gray" id="videos"><div class="wrap">
+ <h1 class="dac-section-title">Videos</h1>
+ <div class="dac-section-subtitle">
+ 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: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>
\ 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/preview/j8-jack.jd b/docs/html-intl/intl/zh-cn/guide/platform/j8-jack.jd
similarity index 100%
rename from docs/html-intl/intl/zh-cn/preview/j8-jack.jd
rename to docs/html-intl/intl/zh-cn/guide/platform/j8-jack.jd
diff --git a/docs/html-intl/intl/zh-cn/guide/topics/ui/multi-window.jd b/docs/html-intl/intl/zh-cn/guide/topics/ui/multi-window.jd
new file mode 100644
index 0000000..5ec27d7
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/guide/topics/ui/multi-window.jd
@@ -0,0 +1,589 @@
+page.title=多窗口支持
+page.metaDescription=Android N 全新支持同时显示多个应用窗口。
+page.keywords="multi-window", "android N", "split screen", "free-form"
+
+@jd:body
+
+<div id="tb-wrapper">
+ <div id="tb">
+ <h2>本文内容</h2>
+ <ol>
+ <li><a href="#overview">概览</a></li>
+ <li><a href="#lifecycle">多窗口生命周期</a></li>
+ <li><a href="#configuring">针对多窗口模式配置应用
+</a></li>
+ <li><a href="#running">在多窗口模式中运行应用</a></li>
+ <li><a href="#testing">测试应用的多窗口支持</a></li>
+ </ol>
+ <h2>另请参阅</h2>
+ <ol>
+ <li><a class="external-link" href="https://github.com/googlesamples/android-MultiWindowPlayground">多窗口 Playground 示例应用
+</a></li>
+ <li><a class="external-link" href="https://medium.com/google-developers/5-tips-for-preparing-for-multi-window-in-android-n-7bed803dda64">在 Android N 为多窗口做准备的五条建议</a></li>
+ </ol>
+ </div>
+</div>
+
+<p>
+ Android N 添加了对同时显示多个应用窗口的支持。
+在手持设备上,两个应用可以在“分屏”模式中左右并排或上下并排显示。
+<em></em>在电视设备上,应用可以使用“画中画”模式,在用户与另一个应用交互的同时继续播放视频。
+
+<em></em>
+</p>
+
+<p>
+ 如果您使用 N Preview SDK 构建应用,则可以配置应用处理多窗口显示的方法。
+例如,您可以指定 Activity 的最小允许尺寸。
+您还可以禁用应用的多窗口显示,确保系统仅以全屏模式显示应用。
+
+
+</p>
+
+<h2 id="overview">概览</h2>
+
+<p>
+ Android N 允许多个应用同时共享屏幕。例如,用户可以分屏显示应用,在左边查看网页,同时在右边写邮件。
+
+用户体验取决于设备:
+
+</p>
+
+<ul>
+ <li>运行 Android N 的手持设备具有分屏模式。
+在此模式中,系统以左右并排或上下并排的方式分屏显示两个应用。
+用户可以拖动两个应用之间的分界线,放大其中一个应用,同时缩小另一个。
+
+ </li>
+
+ <li>在运行 Android N 的 Nexus Player 上,应用能以<a href="picture-in-picture.html">画中画模式</a>显示,即在用户浏览网页或与其他应用交互的同时继续显示内容。
+
+
+
+ </li>
+
+ <li>较大设备的制造商可选择启用自由形状模式,在该模式中,用户可以自由调整各 Activity 的尺寸。
+若制造商启用此功能,设备将同时具有自由形状模式和分屏模式。
+
+
+ </li>
+</ul>
+
+<img src="{@docRoot}images/android-7.0/mw-splitscreen.png" alt="" width="650" srcset="{@docRoot}images/android-7.0/mw-splitscreen.png 1x,
+ {@docRoot}images/android-7.0/mw-splitscreen_2x.png 2x," id="img-split-screen" />
+<p class="img-caption">
+ <strong>图 1.</strong> 两个应用在分屏模式中左右并排显示。
+</p>
+
+<p>
+ 用户可以通过以下方式切换到多窗口模式:
+</p>
+
+<ul>
+ <li>若用户打开 <a href="{@docRoot}guide/components/recents.html">Overview 屏幕</a>并长按 Activity 标题,则可以拖动该 Activity 至屏幕突出显示的区域,使 Activity 进入多窗口模式。
+
+
+
+ </li>
+
+ <li>若用户长按 Overview 按钮,设备上的当前 Activity 将进入多窗口模式,同时将打开 Overview 屏幕,用户可在该屏幕中选择要共享屏幕的另一个 Activity。
+
+
+ </li>
+</ul>
+
+<p>
+ 用户可以在两个 Activity 共享屏幕的同时在这两个 Activity 之间<a href="{@docRoot}guide/topics/ui/drag-drop.html">拖放</a>数据
+
+(在此之前,用户只能在一个 Activity 内部拖放数据)。
+
+</p>
+
+<h2 id="lifecycle">多窗口生命周期</h2>
+
+<p>
+ 多窗口模式不会更改 <a href="{@docRoot}training/basics/activity-lifecycle/index.html">Activity 生命周期</a>。
+
+</p>
+
+<p>
+ 在多窗口模式中,在指定时间只有最近与用户交互过的 Activity 为活动状态。
+该 Activity 将被视为顶级 Activity。<em></em>
+ 所有其他 Activity 虽然可见,但均处于暂停状态。
+ 但是,这些已暂停但可见的 Activity 在系统中享有比不可见 Activity 更高的优先级。
+如果用户与其中一个暂停的 Activity 交互,该 Activity 将恢复,而之前的顶级 Activity 将暂停。
+
+
+</p>
+
+<p class="note">
+ <strong>注:</strong>在多窗口模式中,用户仍可以看到处于暂停状态的应用。
+应用在暂停状态下可能仍需要继续其操作。
+例如,处于暂停模式但可见的视频播放应用应继续显示视频。
+因此,我们建议播放视频的 Activity 不要暂停其 {@link android.app.Activity#onPause onPause()} 处理程序中的视频。
+
+<em></em>
+ 应暂停 {@link android.app.Activity#onStop
+ onStop()} 中的视频,并恢复 {@link android.app.Activity#onStart
+ onStart()} 中的视频播放。
+</p>
+
+<p>
+ 如<a href="{@docRoot}guide/topics/resources/runtime-changes.html">处理运行时变更</a>中所述,用户使用多窗口模式显示应用时,系统将通知 Activity 发生配置变更。
+
+这也会发生在当用户调整应用大小,或将应用恢复到全屏模式时。
+
+ 该变更与系统通知应用设备从纵向模式切换到横向模式时的 Activity 生命周期影响基本相同,但设备不仅仅是交换尺寸,而是会变更尺寸。
+
+
+如<a href="{@docRoot}guide/topics/resources/runtime-changes.html">处理运行时变更</a>中所述,您的 Activity 可以自行处理配置变更,或允许系统销毁 Activity,并以新的尺寸重新创建该 Activity。
+
+
+
+</p>
+
+<p>
+ 如果用户调整窗口大小,并在任意维度放大窗口尺寸,系统将调整 Activity 以匹配用户操作,同时根据需要发布<a href="{@docRoot}guide/topics/resources/runtime-changes.html">运行时变更</a>。
+
+如果应用在新公开区域的绘制滞后,系统将使用 {@link
+ android.R.attr#windowBackground windowBackground} 属性或默认 <code>windowBackgroundFallback</code> 样式属性指定的颜色暂时填充该区域。
+
+
+</p>
+
+<h2 id="configuring">针对多窗口模式配置应用</h2>
+
+<p>
+ 如果您的应用面向 Android N,您可以对应用的 Activity 是否支持多窗口显示以及显示方式进行配置。
+您可以在清单文件中设置属性,以控制大小和布局。
+
+ 根 Activity 的属性设置适用于其任务栈中的所有 Activity。
+例如,如果根 Activity 已 <code>android:resizeableActivity</code> 设定为 true,则任务栈中的所有 Activity 都将可以调整大小。
+
+
+</p>
+
+<p class="note">
+ <strong>注:</strong>如果您使用低于 Android N 版本的 SDK 构建多向应用,则用户在多窗口模式中使用应用时,系统将强制调整应用大小。
+
+系统将显示对话框,提醒用户应用可能会发生异常。
+系统不会调整定向应用的大小;如果用户尝试在多窗口模式下打开定向应用,应用将全屏显示。
+
+
+<em></em>
+</p>
+
+<h4 id="resizeableActivity">android:resizeableActivity</h4>
+<p>
+ 在清单的 <code><activity></code> 或
+ <code><application></code> 节点中设置该属性,启用或禁用多窗口显示:
+
+</p>
+
+<pre>
+android:resizeableActivity=["true" | "false"]
+</pre>
+
+<p>
+ 如果该属性设置为 true,Activity 将能以分屏和自由形状模式启动。
+如果此属性设置为 false,Activity 将不支持多窗口模式。
+如果该值为 false,且用户尝试在多窗口模式下启动 Activity,该 Activity 将全屏显示。
+
+
+</p>
+
+<p>
+ 如果您的应用面向 Android N,但未对该属性指定值,则该属性的值默认设为 true。
+
+</p>
+
+<h4 id="supportsPictureInPicture">android:supportsPictureInPicture</h4>
+
+<p>
+ 在清单文件的 <code><activity></code> 节点中设置该属性,指明 Activity 是否支持画中画显示。
+如果 <code>android:resizeableActivity</code> 为 false,将忽略该属性。
+
+</p>
+
+<pre>
+android:supportsPictureInPicture=["true" | "false"]
+</pre>
+
+<h3 id="layout">布局属性</h3>
+
+<p>
+ 对于 Android N,<code><layout></code> 清单元素支持以下几种属性,这些属性影响 Activity 在多窗口模式中的行为:
+
+
+</p>
+
+<dl>
+ <dt>
+ <code>android:defaultWidth</code>
+ </dt>
+
+ <dd>
+ 以自由形状模式启动时 Activity 的默认宽度。
+ </dd>
+
+ <dt>
+ <code>android:defaultHeight</code>
+ </dt>
+
+ <dd>
+ 以自由形状模式启动时 Activity 的默认高度。
+ </dd>
+
+ <dt>
+ <code>android:gravity</code>
+ </dt>
+
+ <dd>
+ 以自由形状模式启动时 Activity 的初始位置。请参阅 {@link android.view.Gravity} 参考资料,了解合适的值设置。
+
+ </dd>
+
+ <dt>
+ <code>android:minimalHeight</code>、<code>android:minimalWidth</code>
+ </dt>
+
+ <dd>
+ 分屏和自由形状模式中 Activity 的最小高度和最小宽度。
+如果用户在分屏模式中移动分界线,使 Activity 尺寸低于指定的最小值,系统会将 Activity 裁剪为用户请求的尺寸。
+
+
+ </dd>
+</dl>
+
+<p>
+ 例如,以下节点显示了如何指定 Activity 在自由形状模式中显示时 Activity 的默认大小、位置和最小尺寸:
+
+
+</p>
+
+<pre>
+<activity android:name=".MyActivity">
+ <layout android:defaultHeight="500dp"
+ android:defaultWidth="600dp"
+ android:gravity="top|end"
+ android:minimalHeight="450dp"
+ android:minimalWidth="300dp" />
+</activity>
+</pre>
+
+<h2 id="running">在多窗口模式中运行应用</h2>
+
+<p>
+ Android N 添加了新功能,以支持可在多窗口模式中运行的应用。
+
+</p>
+
+<h3 id="disabled-features">多窗口模式中被禁用的功能</h3>
+
+<p>
+ 在设备处于多窗口模式中时,某些功能会被禁用或忽略,因为这些功能对与其他 Activity 或应用共享设备屏幕的 Activity 而言没有意义。
+
+此类功能包括:
+
+<ul>
+ <li>某些<a href="{@docRoot}training/system-ui/index.html">系统 UI</a> 自定义选项将被禁用;例如,在非全屏模式中,应用无法隐藏状态栏。
+
+
+ </li>
+
+ <li>系统将忽略对 <code><a href=
+ "{@docRoot}guide/topics/manifest/activity-element.html#screen"
+ >android:screenOrientation</a></code> 属性所作的更改。
+ </li>
+</ul>
+
+<h3 id="change-notification">多窗口变更通知和查询</h3>
+
+<p>
+ {@link android.app.Activity} 类中添加了以下新方法,以支持多窗口显示。
+有关各方法的详细信息,请参阅 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">N Preview SDK 参考</a>。
+
+
+</p>
+
+<dl>
+ <dt>
+ <code>Activity.isInMultiWindowMode()</code>
+ </dt>
+
+ <dd>
+ 调用该方法以确认 Activity 是否处于多窗口模式。
+ </dd>
+
+ <dt>
+ <code>Activity.isInPictureInPictureMode()</code>
+ </dt>
+
+ <dd>
+ 调用该方法以确认 Activity 是否处于画中画模式。
+
+ <p class="note">
+ <strong>注:</strong>画中画模式是多窗口模式的特例。
+如果 <code>myActivity.isInPictureInPictureMode()</code> 返回 true,则 <code>myActivity.isInMultiWindowMode()</code> 也返回 true。
+
+
+ </p>
+ </dd>
+
+ <dt>
+ <code>Activity.onMultiWindowModeChanged()</code>
+ </dt>
+
+ <dd>
+ Activity 进入或退出多窗口模式时系统将调用此方法。
+在 Activity 进入多窗口模式时,系统向该方法传递 true 值,在退出多窗口模式时,则传递 false 值。
+
+
+ </dd>
+
+ <dt>
+ <code>Activity.onPictureInPictureModeChanged()</code>
+ </dt>
+
+ <dd>
+ Activity 进入或退出画中画模式时系统将调用此方法。
+在 Activity 进入画中画模式时,系统向该方法传递 true 值,在退出画中画模式时,则传递 false 值。
+
+
+ </dd>
+</dl>
+
+<p>
+ 每个方法还有 {@link android.app.Fragment} 版本,例如 <code>Fragment.isInMultiWindowMode()</code>。
+
+</p>
+
+<h3 id="entering-pip">进入画中画模式</h3>
+
+<p>
+ 如需在画中画模式中启动 Activity,请调用新方法 <code>Activity.enterPictureInPictureMode()</code>。
+如果设备不支持画中画模式,则此方法无效。
+如需了解详细信息,请参阅<a href="picture-in-picture.html">画中画</a>文档。
+
+</p>
+
+<h3 id="launch">在多窗口模式中启动新 Activity</h3>
+
+<p>
+ 在启动新 Activity 时,用户可以提示系统如果可能,应将新 Activity 显示在当前 Activity 旁边。
+要执行此操作,可使用标志 <code>Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT</code>。
+
+传递此标志将请求以下行为:
+
+</p>
+
+<ul>
+ <li>如果设备处于分屏模式,系统会尝试在启动系统的 Activity 旁创建新 Activity,这样两个 Activity 将共享屏幕。
+
+系统并不一定能实现此操作,但如果可以,系统将使两个 Activity 处于相邻的位置。
+
+ </li>
+
+ <li>如果设备不处于分屏模式,则该标志无效。
+ </li>
+</ul>
+
+<p>
+ 如果设备处于自由形状模式,则在启动新 Activity 时,用户可通过调用 <code>ActivityOptions.setLaunchBounds()</code> 指定新 Activity 的尺寸和屏幕位置。
+
+如果设备不处于多窗口模式,则该方法无效。
+
+</p>
+
+<p class="note">
+ <strong>注:</strong>如果您在任务栈中启动 Activity,该 Activity 将替换屏幕上的 Activity,并继承其所有的多窗口属性。
+
+如果要在多窗口模式中以单独的窗口启动新 Activity,则必须在新的任务栈中启动此 Activity。
+
+</p>
+
+<h3 id="dnd">支持拖放</h3>
+
+<p>
+ 用户可以在两个 Activity 共享屏幕的同时在这两个 Activity 之间<a href="{@docRoot}guide/topics/ui/drag-drop.html">拖放</a>数据
+
+(在此之前,用户只能在一个 Activity 内部拖放数据)。
+因此,如果您的应用目前不支持拖放功能,您可以在其中添加此功能。
+
+</p>
+
+<p>
+ N Preview SDK 扩展了 <a href="{@docRoot}reference/android/view/package-summary.html"><code>android.view</code></a> 软件包,以支持跨应用拖放。
+有关以下类和方法的详细信息,请参阅 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">N Preview SDK 参考</a>。
+
+
+</p>
+
+<dl>
+ <dt>
+ <code>android.view.DropPermissions</code>
+ </dt>
+
+ <dd>
+ 令牌对象,负责指定对接收拖放数据的应用授予的权限。
+
+ </dd>
+
+ <dt>
+ <code>View.startDragAndDrop()</code>
+ </dt>
+
+ <dd>
+ {@link android.view.View#startDrag View.startDrag()} 的新别名。要启用跨 Activity 拖放,请传递新标志 <code>View.DRAG_FLAG_GLOBAL</code>。
+
+如需对接收拖放数据的 Activity 授予 URI 权限,可根据情况传递新标志 <code>View.DRAG_FLAG_GLOBAL_URI_READ</code> 或 <code>View.DRAG_FLAG_GLOBAL_URI_WRITE</code>。
+
+
+
+ </dd>
+
+ <dt>
+ <code>View.cancelDragAndDrop()</code>
+ </dt>
+
+ <dd>
+ 取消当前正在进行的拖动操作。只能由发起拖动操作的应用调用。
+
+ </dd>
+
+ <dt>
+ <code>View.updateDragShadow()</code>
+ </dt>
+
+ <dd>
+ 替换当前正在进行的拖动操作的拖动阴影。只能由发起拖动操作的应用调用。
+
+ </dd>
+
+ <dt>
+ <code>Activity.requestDropPermissions()</code>
+ </dt>
+
+ <dd>
+ 请求使用 {@link android.view.DragEvent} 中包含的 {@link
+ android.content.ClipData} 传递的内容 URI 的权限。
+ </dd>
+</dl>
+
+<h2 id="testing">测试应用的多窗口支持</h2>
+
+<p>
+ 无论您是否针对 Android N 更新应用,都应验证应用在多窗口模式下的行为,以防用户尝试在运行 Android N 的设备上以多窗口模式启动应用。
+
+
+</p>
+
+<h3 id="configuring">配置测试设备</h3>
+
+<p>
+ 如果在设备上安装 Android N,则将自动支持分屏模式。
+
+</p>
+
+<h3 id="test-non-n">如果应用并非使用 N Preview SDK 构建</h3>
+
+<p>
+ 如果您的应用不是使用 N Preview SDK 构建的,则用户尝试在多窗口模式中使用应用时,系统将强制调整应用大小,除非应用进行了定向声明。
+
+
+</p>
+
+<p>
+ 如果您的应用没有进行定向声明,则应在运行 Android N 的设备上启动应用,并尝试将应用切换到分屏模式。
+
+验证并确保在强制调整应用大小时用户体验可接受。
+
+</p>
+
+<p>
+ 如果应用进行了定向声明,则应尝试将应用切换到多窗口模式。
+验证并确保执行此操作后,应用仍保持全屏模式。
+
+</p>
+
+<h3 id="test-mw">如果支持多窗口模式</h3>
+
+<p>
+ 如果您的应用是使用 N Preview SDK 构建的,且未禁用多窗口支持,则分别在分屏和自由形状模式下验证以下行为。
+
+
+</p>
+
+<ul>
+ <li>在全屏模式下启动应用,然后通过长按 Overview 按钮切换到多窗口模式。
+验证并确保应用正常切换。
+ </li>
+
+ <li>直接在多窗口模式中启动应用,验证并确保应用正常启动。
+您可以按一下 Overview 按钮,再长按应用的标题栏,并将其拖动到屏幕上任一突出显示的区域,从而在多窗口模式中启动应用。
+
+
+ </li>
+
+ <li>拖动分界线,在分屏模式中调整应用的大小。
+ 验证并确保应用正常调整大小且未崩溃,并且必要的 UI 元素仍可见。
+
+ </li>
+
+ <li>如果您指定了应用的最小尺寸,请尝试将应用尺寸调整到低于最小值。
+验证并确保无法将应用尺寸调整到低于指定最小值。
+
+ </li>
+
+ <li>完成所有测试后,验证并确保应用性能可以接受。例如,验证并确保调整应用大小后更新 UI 没有长时间的滞后。
+
+
+ </li>
+</ul>
+
+<h4 id="test-checklist">测试检查单</h4>
+
+<p>
+ 要在多窗口模式中验证应用性能,请执行以下操作。
+除非另有说明,否则请分别在分屏和多窗口模式中执行以下操作。
+
+</p>
+
+<ul>
+ <li>进入和退出多窗口模式。
+ </li>
+
+ <li>从您的应用切换到另一个应用,验证并确保应用在非活动但可见的状态下正常运行。
+例如,如果您的应用在播放视频,则验证并确保在用户与另一个应用交互时视频仍在继续播放。
+
+
+ </li>
+
+ <li>在分屏模式中,尝试移动分界线,放大或缩小应用。
+分别在左右和上下并排显示模式中尝试这些操作。
+验证并确保应用不会崩溃,主要功能可见,且调整操作不需要过长时间。
+
+
+ </li>
+
+ <li>快速连续执行几次调整操作。验证并确保应用不会崩溃或出现内存泄漏。
+有关检查应用内存使用率的信息,请参阅<a href="{@docRoot}tools/debugging/debugging-memory.html">查看内存使用率</a>。
+
+
+ </li>
+
+ <li>在多个不同窗口配置中正常使用应用,验证并确保应用正常运行。
+验证并确保文本可读,且 UI 元素大小正常,不影响交互。
+
+ </li>
+</ul>
+
+<h3 id="test-disabled-mw">如果已禁用多窗口支持</h3>
+
+<p>
+ 如果您通过设置 <code>android:resizableActivity="false"</code> 禁用了多窗口支持,则应在运行 Android N 的设备上启动应用,并尝试将应用切换到自由形状和分屏模式。
+
+
+验证并确保执行此操作后,应用仍保持全屏模式。
+
+</p>
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/_book.yaml b/docs/html-intl/intl/zh-cn/preview/_book.yaml
deleted file mode 100644
index 81956ed..0000000
--- a/docs/html-intl/intl/zh-cn/preview/_book.yaml
+++ /dev/null
@@ -1,342 +0,0 @@
-toc:
-- title: 计划概览
- path: /preview/overview.html
- path_attributes:
- - name: es-lang
- value: Información general del programa
- - name: in-lang
- value: Ikhtisar Program
- - name: ja-lang
- value: プログラム概要
- - name: ko-lang
- value: 프로그램 개요
- - name: pt-br-lang
- value: Visão geral do programa
- - name: ru-lang
- value: Обзор программы
- - name: vi-lang
- value: Tổng quan về Chương trình
- - name: zh-cn-lang
- value: 计划概览
- - name: zh-tw-lang
- value: 程式總覽
-
-- title: 支持与版本说明
- path: /preview/support.html
-
-- title: 设置 Preview
- path: /preview/setup-sdk.html
- path_attributes:
- - name: es-lang
- value: Configurar el SDK de la versión preliminar
- - name: in-lang
- value: Menyiapkan Preview
- - name: ja-lang
- value: Preview SDK のセットアップ
- - name: ko-lang
- value: 미리 보기 SDK 설정하기
- - name: pt-br-lang
- value: Configuração do Preview SDK
- - name: ru-lang
- value: Настройка пакета SDK Preview
- - name: vi-lang
- value: Kiểm thử trên Thiết bị
- - name: zh-cn-lang
- value: 设置预览版 SDK
- - name: zh-tw-lang
- value: 設定預覽版 SDK
-
-- title: 在设备上测试
- path: /preview/download.html
- path_attributes:
- - name: es-lang
- value: Pruebe en un dispositivo
- - name: in-lang
- value: Menguji pada Perangkat
- - name: ja-lang
- value: デバイス上でテストする
- - name: ko-lang
- value: 기기에서 테스트
- - name: pt-br-lang
- value: Testar em um dispositivo
- - name: ru-lang
- value: Тестирование на устройстве
- - name: vi-lang
- value: Kiểm thử trên Thiết bị
- - name: zh-cn-lang
- value: 在设备上测试
- - name: zh-tw-lang
- value: 在裝置上測試
-
-- title: 行为变更
- path: /preview/behavior-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: 行為變更
- section:
- - title: 后台优化
- path: /preview/features/background-optimization.html
- path_attributes:
- - name: es-lang
- value: Optimizaciones en segundo plano
- - name: in-lang
- value: Optimisasi Latar Belakang
- - name: ja-lang
- value: バックグラウンド処理の最適化
- - name: ko-lang
- value: 백그라운드 최적화
- - name: pt-br-lang
- value: Otimizações em segundo plano
- - name: ru-lang
- value: Оптимизация фоновых процессов
- - name: vi-lang
- value: Tối ưu hóa Chạy ngầm
- - name: zh-cn-lang
- value: 后台优化
- - name: zh-tw-lang
- value: 背景最佳化
- - title: 语言和区域设置
- path: /preview/features/multilingual-support.html
- path_attributes:
- - name: es-lang
- value: Idioma y configuración regional
- - name: in-lang
- value: Bahasa dan Lokal
- - name: ja-lang
- value: 言語とロケール
- - name: ko-lang
- value: 언어 및 로케일
- - name: pt-br-lang
- value: Idioma e localidade
- - name: ru-lang
- value: Язык и языковой стандарт
- - name: vi-lang
- value: Ngôn ngữ và Bản địa
- - name: zh-cn-lang
- value: 语言和区域设置
- - name: zh-tw-lang
- value: 語言和地區設定
-
-- title: Android N for Developers
- path: /preview/api-overview.html
- 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 概览
- section:
- - title: 多窗口支持
- path: /preview/features/multi-window.html
- path_attributes:
- - name: es-lang
- value: Compatibilidad con ventanas múltiples
- - name: in-lang
- value: Dukungan Multi-Jendela
- - name: ja-lang
- value: マルチ ウィンドウのサポート
- - name: ko-lang
- value: 다중 창 지원
- - name: pt-br-lang
- value: Suporte a várias janelas
- - name: ru-lang
- value: Поддержка многооконного режима
- - name: vi-lang
- value: Hỗ trợ đa cửa sổ
- - name: zh-cn-lang
- value: 多窗口支持
- - name: zh-tw-lang
- value: 多視窗支援
- - title: 通知
- path: /preview/features/notification-updates.html
- path_attributes:
- - name: es-lang
- value: Notificaciones
- - name: in-lang
- value: Pemberitahuan
- - name: ja-lang
- value: 通知
- - name: ko-lang
- value: 알림
- - name: pt-br-lang
- value: Notificações
- - name: ru-lang
- value: Уведомления
- - name: vi-lang
- value: Thông báo
- - name: zh-cn-lang
- value: 通知
- - name: zh-tw-lang
- value: 通知
- - title: Data Saver
- path: /preview/features/data-saver.html
- - title: TV 录制
- path: /preview/features/tv-recording-api.html
- path_attributes:
- - name: es-lang
- value: Grabación de TV
- - name: in-lang
- value: Perekaman TV
- - name: ja-lang
- value: TV の録画
- - name: ko-lang
- value: TV 녹화
- - name: pt-br-lang
- value: Gravação para TV
- - name: ru-lang
- value: Запись ТВ
- - name: vi-lang
- value: Ghi lại TV
- - name: zh-cn-lang
- value: TV 录制
- - name: zh-tw-lang
- value: 電視錄製
- - title: 网络安全配置
- path: /preview/features/security-config.html
- path_attributes:
- - name: es-lang
- value: Configuración de seguridad de la red
- - name: ja-lang
- value: ネットワーク セキュリティ構成
- - name: ko-lang
- value: 네트워크 보안 구성
- - name: pt-br-lang
- value: Configurações de segurança de rede
- - name: ru-lang
- value: Конфигурация сетевой безопасности
- - name: vi-lang
- value: Cấu hình Bảo mật mạng
- - name: zh-cn-lang
- value: 网络安全配置
- - name: zh-tw-lang
- value: 網路安全性設定
- - title: ICU4J 支持
- path: /preview/features/icu4j-framework.html
- path_attributes:
- - name: es-lang
- value: API de ICU4J del framework de Android
- - name: in-lang
- value: ICU4J Android Framework API
- - name: ja-lang
- value: ICU4J Android フレームワーク API
- - name: ko-lang
- value: ICU4J Android 프레임워크 API
- - name: pt-br-lang
- value: APIs de estrutura do Android para ICU4J
- - name: ru-lang
- value: API-интерфейсы ICU4J в платформе Android
- - name: vi-lang
- value: API Khuôn khổ Android ICU4J
- - name: zh-cn-lang
- value: ICU4J Android フレームワーク API
- - name: zh-tw-lang
- value: ICU4J Android フレームワーク API
- - title: Java 8 语言功能
- path: /preview/j8-jack.html
- path_attributes:
- - name: es-lang
- value: Funciones del lenguaje Java 8
- - name: in-lang
- value: Fitur Bahasa Java 8
- - name: ja-lang
- value: Java 8 の機能
- - name: ko-lang
- value: Java 8 언어 기능
- - name: pt-br-lang
- value: Recursos de linguagem do Java 8
- - name: ru-lang
- value: Возможности языка Java 8
- - name: vi-lang
- value: Tính năng của Ngôn ngữ Java 8
- - name: zh-cn-lang
- value: Java 8 の機能
- - name: zh-tw-lang
- value: Java 8 の機能
- - title: Android for Work Updates
- path: /preview/features/afw.html
- - title: 作用域目录访问
- path: /preview/features/scoped-folder-access.html
- path_attributes:
- - name: es-lang
- value: Acceso a directorios determinados
- - name: ja-lang
- value: 特定のディレクトリへのアクセス
- - name: ko-lang
- value: 범위가 지정된 디렉터리 액세스
- - name: pt-br-lang
- value: Acesso a diretórios com escopo
- - name: ru-lang
- value: Доступ к выделенным каталогам
- - name: vi-lang
- value: Truy cập Thư mục theo Phạm vi
- - name: zh-cn-lang
- value: 作用域目录访问
- - name: zh-tw-lang
- value: 限定範圍目錄存取
-
-- title: 示例
- path: /preview/samples.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: 许可协议
- path: /preview/license.html
- path_attributes:
- - name: es-lang
- value: Contrato de licencia
- - name: ja-lang
- value: 使用許諾契約
- - name: ko-lang
- value: 라이선스 계약
- - name: pt-br-lang
- value: Contrato de licença
- - name: ru-lang
- value: Лицензионное соглашение
- - name: zh-cn-lang
- value: 许可协议
- - name: zh-tw-lang
- value: 授權協議
diff --git a/docs/html-intl/intl/zh-cn/preview/api-overview.jd b/docs/html-intl/intl/zh-cn/preview/api-overview.jd
deleted file mode 100644
index f4f889d..0000000
--- a/docs/html-intl/intl/zh-cn/preview/api-overview.jd
+++ /dev/null
@@ -1,1039 +0,0 @@
-page.title=Android N for Developers
-meta.tags="preview", "androidn"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-apis_2x.png
-@jd:body
-
-
-
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>重要的开发者功能</h2>
- <ol>
- <ul style="list-style-type:none;">
- <li><a href="#multi-window_support">多窗口支持</a></li>
- <li><a href="#notification_enhancements">通知</a></li>
- <li><a href="#jit_aot">JIT/AOT 编译</a></li>
- <li><a href="#quick_path_to_app_install">快速的应用安装路径</a></li>
- <li><a href="#doze_on_the_go">随时随地低电耗模式</a></li>
- <li><a href="#background_optimizations">后台优化</a></li>
- <li><a href="#data_saver">Data Saver</a></li>
- <li><a href="#vulkan">Vulkan API</a></li>
- <li><a href="#tile_api">Quick Settings Tile API</a></li>
- <li><a href="#number-blocking">号码屏蔽</a></li>
- <li><a href="#call_screening">来电过滤</a></li>
- <li><a href="#multi-locale_languages">区域设置和语言</a></li>
- <li><a href="#emoji">新增的表情符号</a></li>
- <li><a href="#icu4">Android 中的 ICU4J API</a></li>
- <li><a href="#gles_32">OpenGL ES 3.2 API</a></li>
- <li><a href="#android_tv_recording">Android TV 录制</a></li>
- <li><a href="#android_for_work">Android for Work</a></li>
- <li><a href="#accessibility_enhancements">无障碍功能</a></li>
- <li><a href="#direct_boot">直接启动</a></li>
- <li><a href="#key_attestation">密钥认证</a></li>
- <li><a href="#network_security_config">网络安全性配置</a></li>
- <li><a href="#default_trusted_ca">默认受信任的 CA</a></li>
- <li><a href="#apk_signature_v2">APK Signature Scheme v2</a></li>
- <li><a href="#scoped_directory_access">作用域目录访问</a></li>
- <li><a href="#keyboard_shortcuts_helper">键盘快捷键辅助工具</a></li>
- <li><a href="#sustained_performance_api">持续性能 API</a></li>
- <li><a href="#vr">VR 支持</a></li>
- <li><a href="#print_svc">打印服务增强</a></li>
- <li><a href="#virtual_files">虚拟文件</a></li>
- <li><a href="#framemetrics_api">FrameMetricsListener API</a></li>
- </ol>
-</div>
-</div>
-
-
-
-<p>Android N 仍处于活动的开发状态,但现在您可以将其作为 N Developer Preview 的一部分进行试用。
-以下部分重点介绍面向开发者的一些新功能。
- </p>
-
-<p>
- 请务必查阅<a href="{@docRoot}preview/behavior-changes.html">行为变更</a>以了解平台变更可能影响您的应用的领域,看看开发者指南,了解有关关键功能的更多信息,并下载 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 参考</a>以获取新 API 的详细信息。
-
-
-
-</p>
-
-<h2 id="multi-window_support">多窗口支持</h2>
-
-
-<p>在 Android N 中,我们为该平台引入了一个新的而且非常需要的多任务处理功能 — 多窗口支持。
- </p>
-
- <p>现在,用户可以一次在屏幕上打开两个应用。 </p>
- <ul>
- <li>在运行 Android N 的手机和平板电脑上,用户可以并排运行两个应用,或者处于分屏模式时一个应用位于另一个应用之上。
-
-用户可以通过拖动两个应用之间的分隔线来调整应用。
- </li>
-
-<li>在 Android TV 设备上,应用可以将自身置于<a href="{@docRoot}preview/features/picture-in-picture.html">画中画模式</a>,从而让它们可以在用户浏览或与其他应用交互时继续显示内容。
-
-</li>
- </ul>
-
-<div class="col-4of10">
-<img src="{@docRoot}preview/images/mw-portrait.png" alt="" style="height:460px;padding-left:1em;" id="img-split-screen" />
-<p class="img-caption">
- <strong>图 1. </strong>在分屏模式下运行的应用。
-</p>
-
- </div>
-
-<p>多窗口支持为您提供新的吸引用户方式,特别是在平板电脑和其他更大屏幕的设备上。
-您甚至可以在您的应用中启用拖放,从而使用户可以方便地将内容拖放到您的应用或从其中拖出内容—这是一个非常好的增强用户体验的方式。
-
- </p>
-
-<p>向您的应用添加多窗口支持并配置多窗口显示的处理方式非常简单。
-例如,您可以指定您的 Activity 允许的最小尺寸,从而防止用户将 Activity 调整到该尺寸以下。
-
-您还可以为应用禁用多窗口显示,这可确保系统将仅以全屏模式显示应用。
-</p>
-
-<p>
- 如需了解详细信息,请参阅<a href="{@docRoot}preview/features/multi-window.html">多窗口支持</a>开发者文档。
-
-</p>
-
-<h2 id="notification_enhancements">通知增强功能</h2>
-
-<p>在 Android N 中,我们重新设计了通知,使其更易于使用并且速度更快。
-部分变更包括:</p>
-
-<ul>
- <li>
- <strong>模板更新</strong>:我们正在更新通知模板,新强调了英雄形象和化身。
-开发者将能够充分利用新模板,只需进行少量的代码调整。
-
- </li>
-
- <li>
- <strong>消息样式自定义</strong>:您可以自定义更多与您的使用 <code>MessageStyle</code> 类的通知相关的用户界面标签。
-
-您可以配置消息、会话标题和内容视图。
-
- </li>
-
- <li>
- <strong>捆绑通知</strong>:系统可以将消息组合在一起(例如,按消息主题)并显示组。
-用户可以适当地进行 Dismiss 或 Archive 等操作。
-如果您已实现 Android Wear 的通知,那么您已经很熟悉此模型。
-
-
- </li>
-
- <li>
- <strong>直接回复</strong>:对于实时通信应用,Android 系统支持内联回复,以便用户可以直接在通知界面中快速回复短信。
-
-
- </li>
-
- <li>
- <strong>自定义视图</strong>:两个新的 API 让您在通知中使用自定义视图时可以充分利用系统装饰元素,如通知标题和操作。
-
-
- </li>
-</ul>
-
-<div class="col-4of12">
- <img src="{@docRoot}preview/images/notifications-1.png" alt="" style="padding:.5em;max-width:226px">
-</div>
-
-<div class="col-4of12">
- <img src="{@docRoot}preview/images/notifications-3.png" alt="" style="padding:.5em;max-width:226px">
-</div>
-
-<div class="col-4of12">
- <img src="{@docRoot}preview/images/notifications-2.png" alt="" style="padding:.5em;max-width:226px">
-</div>
-
-
-<p class="img-caption">
- <strong>图 2. </strong>绑定的通知和直接回复。
-</p>
-
-<p>如需了解如何实现新功能的信息,请参阅<a href="{@docRoot}preview/features/notification-updates.html">通知</a>指南。
-
-</p>
-
-
-
-<h2 id="jit_aot">个人资料指导的 JIT/AOT 编译</h2>
-
-<p>在 Android N 中,我们添加了 Just in Time (JIT) 编译器,对 ART 进行代码分析,让它可以在应用运行时持续提升 Android 应用的性能。
-
-JIT 编译器对 Android 运行组件当前的 Ahead of Time (AOT) 编译器进行了补充,有助于提升运行时性能,节省存储空间,加快应用更新和系统更新速度。
-
-</p>
-
-<p>个人资料指导的编译让 Android 运行组件能够根据应用的实际使用以及设备上的情况管理每个应用的 AOT/JIT 编译。
-例如,Android 运行组件维护每个应用的热方法的个人资料,并且可以预编译和缓存这些方法以实现最佳性能。
-
-对于应用的其他部分,在实际使用之前不会进行编译。
-</p>
-
-<p>除提升应用的关键部分的性能外,个人资料指导的编译还有助于减少整个 RAM 占用,包括关联的二进制文件。
-
-此功能对于低内存设备非常尤其重要。</p>
-
-<p>Android 运行组件在管理个人资料指导的编译时,可最大程度降低对设备电池的影响。
-仅当设备处于空闲状态和充电时才进行编译,从而可以通过提前执行该工作节约时间和省电。
-</p>
-
-<h2 id="quick_path_to_app_install">快速的应用安装路径</h2>
-
-<p>Android 运行组件的 JIT 编译器最实际的好处之一是应用安装和系统更新的速度。
-即使在 Android 6.0 中需要几分钟进行优化和安装的大型应用,现在只需几秒钟就可以完成安装。
-
-系统更新也变得更快,因为省去了优化步骤。 </p>
-
-<h2 id="doze_on_the_go">随时随地低电耗模式...</h2>
-
-<p>Android 6.0 推出了低电耗模式,即设备处于空闲状态时,通过推迟应用的 CPU 和网络活动以实现省电目的的系统模式,例如,设备放在桌上或抽屉里时。
-
- </p>
-
-<p>现在,在 Android N 中,低电耗模式又前进了一步,随时随地可以省电。只要屏幕关闭了一段时间,且设备未插入电源,低电耗模式就会对应用使用熟悉的 CPU 和网络限制。这意味着用户即使将设备放入口袋里也可以省电。
-
-
-
-</p>
-
-
-<img src="/preview/images/doze-diagram-1.png" alt="" id="figure1" />
-<p class="img-caption">
- <strong>图 3. </strong>低电耗模式现在应用限制以延长电池寿命,即使设备未处于静止状态。
-
-</p>
-
-
-<p>屏幕关闭片刻后,设备在使用电池时,低电耗模式将限制网络访问,同时延迟作业和同步。
-在短暂的维护时间范围后,其允许应用访问网络,并执行延迟的作业/同步。
-
-打开屏幕或将设备插入电源会使设备退出低电耗模式。
-</p>
-
-<p>当设备再次处于静止状态时,屏幕关闭且使用电池一段时间,低电耗模式针对 {@link
-android.os.PowerManager.WakeLock}、{@link android.app.AlarmManager} 警报和 GPS/Wi-Fi 扫描应用完整 CPU 和网络限制。
-
-</p>
-
-<p>无论设备是否处于运动状态,将应用调整到低电耗模式的最佳做法均相同,因此,如果您已更新应用以妥善处理低电耗模式,则一切就绪。
-
-如果不是,请立即开始<a href="{@docRoot}training/monitoring-device-state/doze-standby.html#assessing_your_app">将应用调整到低电耗模式</a>。
-</p>
-
-<h2 id="background_optimizations">Project Svelte:后台优化</h2>
-
-<p>Project Svelte 在持续改善,以最大程度减少生态系统中一系列 Android 设备中系统和应用使用的 RAM。
-在 Android N 中,Project Svelte 注重优化在后台中运行应用的方式。
- </p>
-
-<p>后台处理是大多数应用的一个重要部分。处理得当,可让您实现非常棒的用户体验 — 即时、快速和情境感知。如果处理不得当,后台处理会毫无必要地消耗 RAM(和电池),同时影响其他应用的系统性能。
-
-
- </p>
-
-<p>自 Android 5.0 发布以来,{@link android.app.job.JobScheduler} 已成为执行后台工作的首选方式,其工作方式有利于用户。
-
-应用可以在安排作业的同时允许系统基于内存、电源和连接情况进行优化。
-JobScheduler 可实现控制和简洁性,我们想要所有应用都使用它。
- </p>
-
-<p>
- 另一个非常好的选择是 <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
- <code>GCMNetworkManager</code></a>(Google Play 服务的一部分),其在旧版 Android 中提供类似的作业安排和兼容性。
-
-
-</p>
-
-<p>我们在继续扩展 <code>JobScheduler</code> 和
-<code>GCMNetworkManager</code>,以符合多个用例 — 例如,在 Android N 中,现在,您可以基于内容提供程序中的更改安排后台工作。
-
-同时,我们开始弃用一些较旧的模式,这些模式会降低系统性能,特别是低内存设备的系统性能。
-
-</p>
-
-<p>在 Android N 中,我们删除了三个常用隐式广播 —
- {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}、{@link
- android.hardware.Camera#ACTION_NEW_PICTURE} 和 {@link
- android.hardware.Camera#ACTION_NEW_VIDEO} — 因为这些广播可能会一次唤醒多个应用的后台进程,同时会耗尽内存和电池。
-如果您的应用收到这些广播,请充分利用 N Developer Preview 以迁移到 <code>JobScheduler</code> 和相关的 API。
-
- </p>
-
-<p>
- 如需了解详情,请查看<a href="{@docRoot}preview/features/background-optimization.html">后台优化</a>文档。
-
-</p>
-
-
-<h2 id="data_saver">Data Saver</h2>
-
-<div class="col-5of12" style="margin-right:1.5em;">
-<img src="{@docRoot}preview/images/datasaver.png" style="border:2px solid #ddd">
-
-<p class="img-caption" style="padding-right:2em;">
- <strong>图 4. </strong> 设置中的 Data Saver
-</p>
- </div>
-
-<p>在移动设备的整个生命周期,蜂窝数据计划的成本通常会超出设备本身的成本。
-对于许多用户而言,蜂窝数据是他们想要节省的昂贵资源。
- </p>
-
-<p>Android N 推出了 Data Saver 模式,这是一项新的系统服务,有助于减少应用使用的蜂窝数据,无论是在漫游,账单周期即将结束,还是使用少量的预付费数据包。
-
-Data Saver 让用户可以控制应用使用蜂窝数据的方式,同时让开发者打开 Data Saver 时可以提供更多有效的服务。
-
- </p>
-
-<p>用户在 <strong>Settings</strong> 中启用 Data Saver 且设备位于按流量计费的网络上时,系统屏蔽后台流量消耗,同时指示应用在前台尽可能使用较少的流量 — 例如,通过限制用于流媒体服务的比特率、降低图片质量、延迟最佳的预缓冲等方法来实现。
-
-
-
-用户可以将特定应用加入白名单以允许后台按流量的流量消耗,即使在打开 Data Saver 时也是如此。
-</p>
-
-<p>Android N 扩展了 {@link android.net.ConnectivityManager},以便为应用<a href="{@docRoot}preview/features/data-saver.html#status">检索用户的 Data Saver 首选项</a>并<a href="{@docRoot}preview/features/data-saver.html#monitor-changes">监控首选项变更</a>提供一种方式。
-
-
-所有应用均应检查用户是否已启用 Data Saver 并努力限制前台和后台流量消耗。
-</p>
-
-
-<h2 id="vulkan">Vulkan API</h2>
-
-<p>
- Android N 将一项新的 3D 渲染 API <a href="http://www.khronos.org/vulkan" class="external-link">Vulkan™</a> 集成到平台中。就像 <a href="https://www.khronos.org/opengles/" class="external-link">OpenGL™ ES</a> 一样,Vulkan 是 3D 图形和渲染的一项开放标准,由 Khronos Group 维护。
-
-
-
-</p>
-
-<p>
- Vulkan 是完全从零开始设计,以最小化驱动器中的 CPU 开销,并能让您的应用更直接地控制 GPU 操作。
-Vulkan 还允许多个线程同时执行工作,如命令缓冲区构建,以获得更好的并行化。
-
-
-</p>
-
-<p>
- Vulkan 开发工具和库都已卷入 Android NDK。它们包括:
-
-</p>
-
-<ul>
- <li>头
- </li>
-
- <li>验证层(调试库)
- </li>
-
- <li>SPIR-V 着色程序编译器
- </li>
-
- <li>SPIR-V 运行时着色器编译库
- </li>
-</ul>
-
-<p>
- Vulkan 仅适用于已启用 Vulkan 硬件的设备上的应用,如 Nexus 5X、Nexus 6P 和 Nexus Player。
-我们正在与合作伙伴密切合作,以尽快使 Vulkan 能面向更多的设备。
-
-</p>
-
-<p>
- 如需要了解更多信息,请参阅 <a href="{@docRoot}ndk/guides/graphics/index.html">API 文档</a>。
-</p>
-
-<h2 id="tile_api">Quick Settings Tile API</h2>
-
-
-<div style="float:right;max-width:320px">
-<img src="{@docRoot}preview/images/quicksettings.png" style="padding-left:1.5em;">
-
-<p class="img-caption" style="padding-left:2em;">
- <strong>图 5.</strong> 通知栏中的快速设置图块。
-</p>
-
-
- </div><p>“快速设置”通常用于直接从通知栏显示关键设置和操作,非常简单。
-在 Android N 中,我们已扩展“快速设置”的范围,使其更加有用更方便。
- </p>
-
-<p>我们为额外的“快速设置”图块添加了更多空间,用户可以通过向左或向右滑动跨分页的显示区域访问它们。
-我们还让用户可以控制显示哪些“快速设置”图块以及显示的位置 — 用户可以通过拖放图块来添加或移动图块。
-
- </p>
-
-<p>对于开发者,Android N 还添加了一个新的 API,从而让您可以定义自己的“快速设置”图块,使用户可以轻松访问您应用中的关键控件和操作。
-</p>
-
-<p>
- 对于急需或频繁使用的控件和操作,保留“快速设置”图块,且不应将其用作启动应用的快捷方式。
-
-
-</p>
-
-<p>
- 定义图块后,您可以将它们显示给用户,用户可通过拖放将图块添加到“快速设置”。
-
-</p>
-
-<p>
- 如需创建应用图块的更多信息,请参阅可下载的 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 参考</a>中的文件 <code>android.service.quicksettings.Tile</code>。
-
-</p>
-
-
-
-<h2 id="number-blocking">号码屏蔽</h2>
-
-<p>Android N 现在支持在平台中进行号码屏蔽,提供框架 API,让服务提供商可以维护屏蔽的号码列表。
-默认短信应用、默认手机应用和提供商应用可以对屏蔽的号码列表进行读取和写入操作。
-
-其他应用则无法访问此列表。</p>
-
-<p>通过使号码屏蔽成为平台的标准功能,Android 为应用提供一致的方式来支持广泛的设备上的号码屏蔽。
-
-应用可以利用的其他优势包括:</p>
-
-<ul>
- <li> 还会屏蔽已屏蔽的来电号码发出的短信
- <li> 通过 Backup & Restore(备份和还原)功能可以跨重置和设备保留屏蔽的号码
-
- <li> 多个应用可以使用相同的屏蔽号码列表
-</ul>
-
-<p>此外,通过 Android 的运营商应用集成表示运营商可以读取设备上屏蔽的号码列表,并为用户执行服务端屏蔽,以阻止不需要的来电和短信通过任何介质(如 VOIP 端点或转接电话)到达用户。
-
-
-</p>
-
-<p>
- 如需了解详细信息,请参阅可下载的 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 参考</a>中的 <code>android.provider.BlockedNumberContract</code>。
-
-
-</p>
-
-<h2 id="call_screening">来电过滤</h2>
-
-<p>
- Android N 允许默认的手机应用过滤来电。手机应用执行此操作的方式是实现新的 <code>CallScreeningService</code>,该方法允许手机应用基于来电的 {@link android.telecom.Call.Details Call.Details} 执行大量操作,例如:
-
-
-
-</p>
-
-<ul>
- <li> 拒绝来电
- <li> 不允许来电到达通话记录
- <li> 不向用户显示来电通知
-</ul>
-
-<p>
- 如需了解详细信息,请参阅可下载的 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 参考</a>中的 <code>android.telecom.CallScreeningService</code>。
-
-
-</p>
-
-
-<h2 id="multi-locale_languages">多区域设置支持、多语言</h2>
-
-
-<p>Android N 现在允许用户在设置中选择<strong>多个区域设置</strong>,以更好地支持双语用例。
-应用可以使用新的 API 获取用户选择的区域设置,然后为多区域设置用户提供更成熟的用户体验 — 如以多个语言显示搜索结果,并且不会以用户了解的语言翻译网页。
-
-
-
-</p>
-
-<p>除多区域设置支持外,Android N 还扩展了用户可用的语言范围。
-它针对常用语言提供超过 25 种的变体,如英语、西班牙语、法语和阿拉伯语。
-它还针对 100 多种新语言添加了部分支持。
-</p>
-
-<p>应用可以通过调用 <code>LocaleList.GetDefault()</code> 获取用户设置的区域设置列表。
-为支持扩展的区域设置数量,Android N 正在改变其解析资源的方式。
-请务必使用新的资源解析逻辑测试和验证您的应用是否能如期运行。
-</p>
-
-<p>如需有关新资源解析行为和应遵循的最佳做法的更多信息,请参阅<a href="{@docRoot}preview/features/multilingual-support.html">多语言支持</a>。
-</p>
-
-
-<h2 id="emoji">新增的表情符号</h2>
-
-<p>
- Android N 引入更多表情符号和表情符号相关功能,包括肤色表情符号和支持变量选择符。
-
-如果您的应用支持表情符号,请遵循以下准则,以便能充分利用这些表情符号相关功能优势。
-
-</p>
-
-<ul>
- <li>
- <strong>在插入之前,检查设备是否包含表情符号。</strong>
- 若要检查系统字体中有哪些表情符号,使用 {@link android.graphics.Paint#hasGlyph(String)} 方法。
-
- </li>
- <li>
- <strong>检查表情符号是否支持变量选择符。</strong>
- 变量选择符使您能够呈现一些彩色或黑白的表情符号。
-
- 在移动设备上,应用应呈现彩色的表情符号,而不是黑白的。但是,如果您的应用显示嵌入在文本中的表情符号,那应使用黑白变量。
-
- 若要确定表情符号是否有变量,使用变量选择符。
- 如需有关支持变量的字符的完整清单,请参阅<a class="external-link" href="http://www.unicode.org/Public/9.0.0/ucd/StandardizedVariants-9.0.0d1.txt">变量的 Unicode 文档</a>中的 <em>表情符号变量序列</em>部分。
-
-
-
- </li>
- <li>
- <strong>检查表情符号是否支持肤色。</strong>Android N 允许用户按照他们的喜好修改表情符号呈现的肤色。
-键盘应用应为有多个肤色的表情符号提供可视化的指示,并应允许用户选择他们喜欢的肤色。
-
-若要确定哪些系统表情符号有肤色修改器,使用 {@link android.graphics.Paint#hasGlyph(String)} 方法。
-
-您可以通过读取 <a class="external-link" href="http://unicode.org/emoji/charts/full-emoji-list.html">Unicode 文档</a>来确定哪些表情符号使用肤色。
-
-
- </li>
-</ul>
-
-
-<h2 id="icu4">Android 中的 ICU4J API</h2>
-
-<p>
- Android N 目前在 Android 框架(位于 <code>android.icu</code> 软件包下)中提供 <a href="http://site.icu-project.org/">ICU4J</a> API 的子集。
-迁移很简单,主要是需要从 <code>com.java.icu</code> 命名空间更改为 <code>android.icu</code>。
-
-如果您已在您的应用中使用 ICU4J 捆绑包,切换到 Android 框架中提供的 <code>android.icu</code> API 可以大量节省 APK 大小。
-
-
-</p>
-
-<p>
- 如果要了解有关 Android ICU4J API 的更多信息,请参阅 <a href="{@docRoot}preview/features/icu4j-framework.html">ICU4J 支持</a>。
-</p>
-
-
-
-<h2 id="gles_32">OpenGL™ ES 3.2 API</h2>
-
-<p>Android N 添加了框架接口和对 OpenGL ES 3.2 的平台支持,包括:</p>
-
-<ul>
- <li> 来自 <a class="external-link" href="https://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">
-Android 扩展包</a></a> (AEP) 的所有扩展(<code>EXT_texture_sRGB_decode</code> 除外)。
- <li> 针对 HDR 的浮点帧缓冲和延迟着色。
- <li> BaseVertex 绘图调用可实现更好的批处理和流媒体服务。
- <li> 强大的缓冲区访问控制可减少 WebGL 开销。
-</ul>
-
-<p>Android N 上适用于 OpenGL ES 3.2 的框架 API 与 <code>GLES32</code> 类一起提供。
-使用 OpenGL ES 3.2 时,请务必通过 <code><uses-feature></code> 标记和 <code>android:glEsVersion</code> 属性在您的清单中声明要求。
-
- </p>
-
-<p>如需了解有关使用 OpenGL ES 的信息,包括如何在运行时检查设备支持的 OpenGL ES 版本,请参阅 <a href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL ES API 指南</a>。
-</p>
-
-
-<h2 id="android_tv_recording">Android TV 录制</h2>
-
-<p>Android N 通过新的录制 API 添加了从 Android TV 输入服务录制和播放内容的功能。
-构建在现有时移 API 之上,TV 输入服务可以控制能够录制的渠道数据、保存录制的会话的方式,同时可通过录制的内容管理用户交互。
-
- </p>
-
-<p>如需了解详细信息,请参阅 <a href="{@docRoot}preview/features/tv-recording-api.html">Android TV 录制 API</a>。</p>
-
-
-<h2 id="android_for_work">Android for Work</h2>
-
-<p>Android for Work 针对运行 Android N 的设备添加了许多新功能和 API。部分重要内容如下— 有关变更的完整列表,请参阅 <a href="{@docRoot}preview/features/afw.html">Android for Work 更新</a>。
-
-</p>
-
-<h3 id="work_profile_security_challenge">工作资料安全性挑战 </h3>
-
-<p>
- 面向 N SDK 的个人资料所有者可以为在工作资料中运行的应用指定单独的安全性挑战。
-
-当用户尝试打开任何工作应用时将显示工作挑战。
-成功完成安全性挑战可解锁工作资料并将其解密(如果需要)。
-对于个人资料所有者,<code>ACTION_SET_NEW_PASSWORD</code> 提示用户设置工作挑战,<code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> 提示用户设置设备锁。
-
-
-
-</p>
-
-<p>
- 个人资料所有者可以使用 <code>setPasswordQuality()</code>、<code>setPasswordMinimumLength()</code> 和相关方法针对工作挑战设置不同的密码策略(例如,PIN 必须多长,或是否可以使用指纹解锁个人资料)。
-
-
-个人资料所有者还可以使用新的 <code>getParentProfileInstance()</code> 方法返回的 <code>DevicePolicyManager</code> 实例设置设备锁定。
-
-
- 此外,个人资料所有者可以使用新的 <code>setOrganizationColor()</code> 和 <code>setOrganizationName()</code> 方法针对工作挑战自定义凭据屏幕。
-
-
-</p>
-<h3 id="turn_off_work">关闭工作 </h3>
-
-<p>在有工作资料的设备上,用户可以切换工作模式。工作模式关闭时,管理的用户临时关闭,其禁用托管工作资料应用、后台同步和通知。
-
-这包括个人资料所有者应用。
-关闭工作模式时,系统显示永久状态图标,以提醒用户他们无法启动工作应用。
-启动器指示该工作应用和小组件无法访问。
- </p>
-
-<h3 id="always_on_vpn">Always on VPN </h3>
-
-<p>设备所有者和个人资料所有者可以确保工作应用始终通过指定的 VPN 连接。
-系统在设备启动后自动启动该 VPN。
-</p>
-
-<p>
- 新的 <code>DevicePolicyManager</code> 方法为 <code>setAlwaysOnVpnPackage()</code> 和 <code>getAlwaysOnVpnPackage()</code>。
-
-
-</p>
-
-<p>由于 VPN 服务无需应用交互即可由系统直接绑定,因此,VPN 客户端必须针对 Always on VPN 处理新的入口点。
-和以前一样,由与操作匹配的 Intent 过滤器将服务指示给系统。<code>android.net.VpnService</code>。
-
- </p>
-
-<p>
- 用户还可以使用 <strong>Settings>More>Vpn</strong> 在主要用户中手动设置实现 <code>VPNService</code> 方法的 Always on VPN 客户端。
-
-
-</p>
-
-<h3 id="custom_provisioning">自定义配置</h3>
-
-<p>
- 应用可以用企业颜色和徽标来自定义个人资料所有者和设备所有者配置流程。<code>DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR</code> 自定义流程颜色。<code>DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI</code> 用企业徽标自定义流程。
-
-
-
-
-</p>
-
-<h2 id="accessibility_enhancements">无障碍增强功能</h2>
-
-<p>Android N 现在针对新的设备设置直接在欢迎屏幕上提供“Vision Settings”。
-这使用户可以更容易发现和配置他们设备上的无障碍功能,包括放大手势、字体大小、显示屏尺寸和 TalkBack。
-
- </p>
-
-<p>随着这些无障碍功能更为突出,在启用这些功能后,您的用户更可能试用您的应用。
-请务必提前启用这些设置测试您的应用。
-您可以通过 Settings > Accessibility 启用它们。
-</p>
-
-<p>还是在 Android N 中,无障碍服务现在可以帮助具有动作障碍的用户触摸屏幕。
-全新的 API 允许使用人脸追踪、眼球追踪、点扫描等功能构建服务,以满足这些用户的需求。
-
-</p>
-
-<p>如需了解详细信息,请参阅可下载的 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 参考</a> 中的 <code>android.accessibilityservice.GestureDescription
-</code>。</p>
-
-
-<h2 id="direct_boot">直接启动</h2>
-
-<p>直接启动可以缩短设备启动时间,让注册的应用具有有限的功能,即使在意外重启后。例如,如果当用户睡觉时加密的设备重启,那么注册的警报、消息和来电现在可以和往常一样继续通知用户。
-
-
-
-这也意味着重启后无障碍服务会立即可用。
-</p>
-
-<p>在 Android N 中,直接启动充分利用基于文件的加密,以针对系统和应用数据启用细化的加密策略。为系统和应用数据。系统针对选定的系统数据和显式注册的应用数据使用设备加密的存储。
-
-
-默认情况下,凭据加密的存储可用于所有其他系统数据、用户数据、应用及应用数据。
- </p>
-
-<p>启动时,系统在受限的模式中启动,仅访问设备加密的数据,不会对应用或数据进行常规访问。如果您有想要在此模式下运行的组件,您可以通过在清单文件中设置标记注册它们。
-
-
-重启后,系统通过广播 <code>LOCKED_BOOT_COMPLETED</code> Intent 激活注册的组件。
-
-系统确保注册的设备加密的应用数据在解锁前可用。
-所有其他数据在用户确认锁定屏幕凭据进行解密前均不可用。
- </p>
-
-如需了解详细信息,请参阅<a href="{@docRoot}preview/features/direct-boot.html">直接启动</a>。</p>
-</p>
-
-
-<h2 id="key_attestation">密钥认证</h2>
-
-<p>使用硬件支持的密钥库,可更安全地在 Android 设备上创建、存储和使用加密密钥。
-它们可保护密钥免受 Linux 内核、潜在的 Android 漏洞的攻击,也可防止从已取得根权限的设备提取密钥。
-
-</p>
-
-<p>为了让硬件支持的密钥库使用起来更简单和更安全,Android N 引入了密钥认证。
-应用和关闭的设备可使用密钥认证以坚决地确定 RSA 或 EC 密钥对是否受硬件支持、密钥对的属性如何,以及其使用和有效性有何限制。
-
-
- </p>
-
-<p>应用和关闭的设备服务可以通过 X.509 认证证书(必须由有效的认证密钥签署)请求有关密钥对的信息。
-
-认证密钥是一个 ECDSA 签署密钥,其在出厂时被注入设备的硬件支持的密钥库。因此,有效的认证密钥签署的认证证书可确认硬件支持的密钥库是否存在,以及该密钥库中密钥对的详细信息。
-
-
-
-</p>
-
-<p>为确保设备使用安全的官方 Android 出厂映像,密钥认证要求设备 <a class="external-link" href="https://source.android.com/security/verifiedboot/verified-boot.html#bootloader_requirements">bootloader</a> 向<a class="external-link" href="https://source.android.com/security/trusty/index.html">可信执行环境 (TEE)</a> 提供以下信息:
-
-
-</p>
-
-<ul>
-<li>设备上安装的操作系统版本和补丁级别</li>
-<li><a href="https://source.android.com/security/verifiedboot/index.html" class="external-link">验证的启动</a>公钥和锁定状态。</li>
- </ul>
-
-<p>如需了解有关硬件支持的密钥库功能的详细信息,请参阅<a href="https://source.android.com/security/keystore/" class="external-link">硬件支持的密钥库</a>指南。
-</p>
-
-<p>除密钥认证外,Android N 还推出了指纹绑定密钥,在指纹注册时不会撤销。
-</p>
-
-<h2 id="network_security_config">网络安全性配置</h2>
-
-<p>在 Android N 中,通过使用说明性“网络安全性配置”(而不是使用传统的易出错的编程 API(例如,X509TrustManager)),应用可以安全地自定义其安全(HTTPS、TLS)连接的行为,无需任何代码修改。
-
-
-<em></em></p>
-
- <p>支持的功能:</p>
-<ul>
-<li><b>自定义信任锚。</b>让应用可以针对安全连接自定义哪些证书颁发机构 (CA) 值得信赖。
-例如,信任特定的自签署证书或限制应用信任的公共 CA 集。
-
-</li>
-<li><b>仅调试重写。</b>让应用开发者可以安全调试其应用的安全连接,而不会增加安装基础的风险。
-
-
-</li>
-<li><b>明文流量选择退出。</b>让应用可以防止自身意外使用明文流量。
-</li>
-<li><b>证书固定。</b>这是一项高级功能,让应用可以针对安全连接限制哪些服务器密钥受信任。
-</li>
-</ul>
-
-<p>如需了解详细信息,请参阅<a href="{@docRoot}preview/features/security-config.html">网络安全性配置</a>。
-</p>
-
-<h2 id="default_trusted_ca">默认受信任的证书颁发机构</h2>
-
-<p>默认情况下,面向 Android N 的应用仅信任系统提供的证书,且不再信任用户添加的证书颁发机构 (CA)。
-如果面向 Android N 的应用希望信任用户添加的 CA,则应使用<a href="{@docRoot}preview/features/security-config.html">网络安全性配置</a>以指定信任用户 CA 的方式。
-
-
-</p>
-
-<h2 id="apk_signature_v2">APK signature scheme v2</h2>
-
-<p>
- Android N 引入一项新的应用签名方案 APK Signature Scheme v2,它能提供更快的应用安装时间和更多针对未授权 APK 文件更改的保护。
-
-在默认情况下,Android Studio 2.2 和 Android Gradle 2.2 插件会使用 APK Signature Scheme v2 和传统签名方案来签署您的应用。
-
-
-</p>
-
-<p>
- 虽然我们建议您对您的应用采用 APK Signature Scheme v2,但这项新方案并非强制性的。
-如果您的应用在使用 APK Signature Scheme v2 时不能正确构建,您可以停用这项新方案。
-禁用过程会导致 Android Studio 2.2 和 Android Gradle 2.2 插件仅使用传统签名方案来签署您的应用。
-
-若要仅用传统方案签署,打开多层 <code>build.gradle</code> 文件,然后将行 <code>v2SigningEnabled false</code> 添加到您的版本签名配置中:
-
-
-
-</p>
-
-<pre>
- android {
- ...
- defaultConfig { ... }
- signingConfigs {
- release {
- storeFile file("myreleasekey.keystore")
- storePassword "password"
- keyAlias "MyReleaseKey"
- keyPassword "password"
- <strong>v2SigningEnabled false</strong>
- }
- }
- }
-</pre>
-
-<p class="caution"><strong>注意:</strong>如果您使用 APK Signature Scheme v2 签署您的应用,并对应用进行了进一步更改,则应用的签名将无效。
-
-出于这个原因,请在使用 APK Signature Scheme v2 之前、而非之后使用 <code>zipalign</code> 等工具。
-
-</p>
-
-<p>
- 如需更多信息,请阅读介绍如何在 Android Studio 中<a href="{@docRoot}studio/publish/app-signing.html#release-mode">签署一项应用</a>以及如何使用 Android Gradle 插件来为签署应用<a href="{@docRoot}studio/build/build-variants.html#signing">配置构建文件</a>。
-
-
-
-</p>
-
-<h2 id="scoped_directory_access">作用域目录访问</h2>
-
-<p>在 Android N 中,应用可以使用新的 API 请求访问特定的<a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">外部存储</a>目录,包括可移动媒体上的目录,如 SD 卡。
-
-新 API 大大简化了应用访问标准外部存储目录的方式,如 <code>Pictures</code> 目录。
-应用(如照片应用)可以使用这些 API(而不是使用 <code>READ_EXTERNAL_STORAGE</code>),其授予所有存储目录的访问权限或存储访问框架,从而让用户可以导航到目录。
-
-
-
-</p>
-
-<p>此外,新的 API 简化了用户向应用授予外部存储访问权限的步骤。
-当您使用新的 API 时,系统使用一个简单的权限 UI,其清楚地详细介绍应用正在请求访问的目录。
-
-</p>
-
-<p>如需了解详细信息,请参阅<a href="{@docRoot}preview/features/scoped-folder-access.html">作用域目录访问</a>开发者文档。
-
-</p>
-
-<h2 id="keyboard_shortcuts_helper">键盘快捷键辅助工具</h2>
-
-<p>
-在 Android N 中,用户可以按“Alt + /”触发“键盘快捷键”屏幕,它会显示的系统和对焦的应用中可用的所有快捷键。
-
-<em></em>这些是从应用菜单(如可用)中自动检索到的,但开发者可以提供自己的屏幕微调快捷键。
-
-您可以通过重写新 <code>Activity.onProvideKeyboardShortcuts()</code> 的方法来进行这项操作,如可下载的 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 参考</a> 中所述。
-
-
-</p>
-
-<p>
-若要在您的应用程序的任何地方触发键盘快捷键辅助工具,为相关活动调用 {@code Activity.requestKeyboardShortcutsHelper()}。
-
-</p>
-
-<h2 id="sustained_performance_api">持续性能 API</h2>
-
-<p>
-长期运行的应用的性能可能会显著波动,因为系统会阻止系统芯片在设备组件达到温度限制时启动。
-
-这种波动是建立高性能长期运行应用的应用开发者的移动目标。
-
-</p>
-
-<p>
-为解决这些限制,Android N 包括了“持续性能模式”支持,帮助原始设备制造商 (OEM) 提供关于长期运行应用的设备性能能力的提示。
-
-<em></em>应用开发者可以使用这些提示来根据可预测的一致设备性能水平调整长期应用。
-
-
-</p>
-
-<p>
-应用开发者只能在 Nexus 6P 设备的 N Developer Preview 上尝试这项新的 API。
-若要使用此功能,为您希望以持续性能模式运行的窗口设置持续性能窗口标记。
-
-使用 {@code Window.setSustainedPerformanceMode()} 方法设置此举报。
-当窗口不再对焦时,系统会自动停用此模式。
-
-</p>
-
-<h2 id="vr">VR 支持</h2>
-
-<p>
-Android N 添加了新的 VR 模式的平台支持和优化,以使开发者能为用户打造高质量移动 VR 体验。
-新版针对开发者提供了大量性能增强特性,包括单一缓冲区渲染以及允许 VR 应用访问某个专属的 CPU 核心。在您的应用中,您可以享受到专为 VR 设计的平滑头部跟踪和立体声通知功能。
-
-
-最重要的是,Android N 的图形延时非常低。
-如需有关构建面向的 Android N 的 VR 应用的完整信息,请参阅 <a href="https://developers.google.com/vr/android/">面向 Android 的 Google VR SDK</a>。
-
-</p>
-
-
-<h2 id="print_svc">打印服务增强</h2>
-
-<p>
- 在 Android N 中,打印服务开发者现在可以公开关于个别打印机和打印作业的其他信息。
-
-</p>
-
-<p>
- 在列出各打印机时,打印服务现在可以通过两种方式来设置按打印机的图标:
-
-</p>
-
-<ul>
- <li>您可以通过调用 <code>PrinterInfo.Builder.setResourceIconId()</code> 设置源于资源 ID 的图标
-
- </li>
-
- <li>您可以通过调用 <code>PrinterInfo.Builder.setHasCustomPrinterIcon()</code>,并针对使用 <code>android.printservice.PrinterDiscoverySession.onRequestCustomPrinterIcon()</code> 请求图标的情况设置回调来显示源自网络的图标
-
-
-
- </li>
-</ul>
-
-<p>
- 此外,您还可以通过调用 <code>PrinterInfo.Builder.setInfoIntent()</code> 提供按打印机活动,以显示其他信息。
-
-</p>
-
-<p>
- 您可以通过分别调用 <code>android.printservice.PrintJob.setProgress()</code> 和 <code>android.printservice.PrintJob.setStatus()</code> 在打印任务通知中指示打印任务的进度和状态。
-
-
-
-</p>
-
-<p>
- 如需有关这些方法的详细信息,请参阅可下载的 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 参考</a>。
-</p>
-
-<h2 id="framemetrics_api">FrameMetricsListener API</h2>
-
-<p>
-FrameMetricsListener API 允许应用监测它的 UI 渲染性能。
-API 通过公开流式传输 Pub/Sub API 来提供此能力,以传递应用当前窗口的帧计时信息。
-返回的数据相当于 <code><a href="{@docRoot}tools/help/shell.html#shellcommands">adb shell</a>
-dumpsys gfxinfo framestats</code> 显示的数据,但不限定于在过去的 120 帧内。
-
-</p>
-
-<p>
-您可以使用 FrameMetricsListener 来衡量生产中的交互级 UI 性能,无需 USB 连接。
-API 允许在比 {@code adb shell dumpsys gfxinfo} 更高的粒度上收集数据。
-
-因为系统可以从应用中的特定交互中收集数据,因此更高的粒度变得可行;系统不需要采集关于完整应用性能的全局概要或清除任何全局状态。
-
-
-您可以使用这种能力来针对应用的真实使用案例收集性能数据和捕捉 UI 性能回归。
-
-
-</p>
-
-<p>
-若要监测一个窗口,实现 <code>FrameMetricsListener.onMetricsAvailable()</code> 回叫方法,并在窗口上注册。
-如需了解详细信息,请参阅可下载的 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 参考</a> 中的 {@code FrameMetricsListener} 类文档。
-
-
-</p>
-
-<p>
-API 提供了一个包含计时数据的 {@code FrameMetrics} 对象,其渲染子系统会在一帧长度内报告各种里程碑。支持的指标有:{@code UNKNOWN_DELAY_DURATION}、{@code INPUT_HANDLING_DURATION}、{@code ANIMATION_DURATION}、{@code LAYOUT_MEASURE_DURATION}、{@code DRAW_DURATION}、{@code SYNC_DURATION}、{@code COMMAND_ISSUE_DURATION}、{@code SWAP_BUFFERS_DURATION}、{@code TOTAL_DURATION} 和 {@code FIRST_DRAW_FRAME}。
-
-
-
-
-
-
-</p>
-
-
-<h2 id="virtual_files">虚拟文件</h2>
-
-<p>
- 在较早的 Android 版本中,您的应用可以使用存储访问框架来允许用户从他们的云存储帐户中选择文件,如 Google 云端硬盘。
-
-但是,不能表示没有直接字节码表示的文件;每个文件都必须提供一个输入流。
-
-
-</p>
-
-<p>
- Android N 在存储访问框架中增加了“虚拟文件”的概念。
-<em></em>虚拟文件功能可以让您的 {@link android.provider.DocumentsProvider} 返回可与 {@link android.content.Intent#ACTION_VIEW}Intent 使用的文件 URI,即使它们没有直接字节码表示。
-
-
-Android N 还允许您为用户文件(虚拟或其他类)提供备用格式。
-
-</p>
-
-<p>
- 为获得您的应用中的虚拟文件的 URI,首先您应创建一个 {@link android.content.Intent} 以打开文件选择器 UI。
-由于应用不能使用 {@link android.content.ContentResolver#openInputStream(Uri) openInputStream()} 方法来直接打开一个虚拟文件,因此如果您包括了 {@link android.content.Intent#CATEGORY_OPENABLE} 类别,您的应用不会收到任何虚拟文件。
-
-
-
-
-</p>
-
-<p>
- 在用户选择之后,系统调用 {@link android.app.Activity#onActivityResult onActivityResult()} 方法。
-
- 您的应用可以检索虚拟文件的URI,并得到一个输入流,这表现在以下片段中的代码。
-
-</p>
-
-<pre>
- // Other Activity code ...
-
- final static private int REQUEST_CODE = 64;
-
- // We listen to the OnActivityResult event to respond to the user's selection.
- @Override
- public void onActivityResult(int requestCode, int resultCode,
- Intent resultData) {
- try {
- if (requestCode == REQUEST_CODE &&
- resultCode == Activity.RESULT_OK) {
-
- Uri uri = null;
-
- if (resultData != null) {
- uri = resultData.getData();
-
- ContentResolver resolver = getContentResolver();
-
- // Before attempting to coerce a file into a MIME type,
- // check to see what alternative MIME types are available to
- // coerce this file into.
- String[] streamTypes =
- resolver.getStreamTypes(uri, "*/*");
-
- AssetFileDescriptor descriptor =
- resolver.openTypedAssetFileDescriptor(
- uri,
- streamTypes[0],
- null);
-
- // Retrieve a stream to the virtual file.
- InputStream inputStream = descriptor.createInputStream();
- }
- }
- } catch (Exception ex) {
- Log.e("EXCEPTION", "ERROR: ", ex);
- }
- }
-</pre>
-
-<p>
- 如需有关访问用户文件的更多信息,请参阅 <a href="{@docRoot}guide/topics/providers/document-provider.html">存储访问框架指南</a>。
-
-
-</p>
diff --git a/docs/html-intl/intl/zh-cn/preview/behavior-changes.jd b/docs/html-intl/intl/zh-cn/preview/behavior-changes.jd
deleted file mode 100644
index 4e3a6b5..0000000
--- a/docs/html-intl/intl/zh-cn/preview/behavior-changes.jd
+++ /dev/null
@@ -1,610 +0,0 @@
-page.title=行为变更
-page.keywords=Preview、SDK、兼容性
-meta.tags="preview", "compatibility"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-changes_2x.png
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>本文内容</h2>
-
-<ol>
- <li><a href="#perf">性能提升</a>
- <ol>
- <li><a href="#doze">低电耗模式</a></li>
- <li><a href="#bg-opt">后台优化</a></li>
- </ol>
- </li>
- <li><a href="#perm">权限更改</a>
- </li>
- <li><a href="#sharing-files">应用间共享文件</a></li>
- <li><a href="#accessibility">无障碍改进</a>
- <ol>
- <li><a href="#screen-zoom">屏幕缩放</a></li>
- <li><a href="#vision-settings">设置向导中的视觉设置</a></li>
- </ol>
- </li>
- <li><a href="#ndk">NDK 应用链接至平台库</a></li>
- <li><a href="#afw">Android for Work</a></li>
- <li><a href="#annotations">注解保留</a></li>
- <li><a href="#other">其他重要说明</a></li>
-</ol>
-
-<h2>另请参阅</h2>
-<ol>
- <li><a href="{@docRoot}preview/api-overview.html">Android N API 概览</a>
-</li>
-</ol>
-
-</div>
-</div>
-
-
-<p>
- Android N 除了提供诸多新特性和功能外,还对系统和 API 行为做出了各种变更。
-本文重点介绍您应该了解并在开发应用时加以考虑的一些重要变更。
-
-
-</p>
-
-<p>
- 如果您之前发布过 Android 应用,请注意您的应用可能受到这些平台变更的影响。
-
-</p>
-
-
-<h2 id="perf">电池和内存</h2>
-
-<p>
-Android N 包括旨在延长设备电池寿命和减少 RAM 使用的系统行为变更。
-这些变更可能会影响您的应用访问系统资源,以及您的系统通过特定隐式 Intent 与其他应用互动的方式。
-
-
-</p>
-
-<h3 id="doze">低电耗模式</h3>
-
-<p>
- Android 6.0(API 级别 23)引入了低电耗模式,当用户设备未插接电源、处于静止状态且屏幕关闭时,该模式会推迟 CPU 和网络活动,从而延长电池寿命。而 Android N 则通过在设备未插接电源且屏幕关闭状态下、但不一定要处于静止状态(例如用户外出时把手持式设备装在口袋里)时应用部分 CPU 和网络限制,进一步增强了低电耗模式。
-
-
-
-
-
-</p>
-
-
-<img src="{@docRoot}preview/images/doze-diagram-1.png" alt="" height="251px" id="figure1" />
-<p class="img-caption">
- <strong>图 1.</strong> 低电耗模式如何应用第一级系统活动限制以延长电池寿命的图示。
-
-</p>
-
-<p>
- 当设备处于充电状态且屏幕已关闭一定时间后,设备会进入低电耗模式并应用第一部分限制:
-关闭应用网络访问、推迟作业和同步。
-如果进入低电耗模式后设备处于静止状态达到一定时间,系统则会对 {@link android.os.PowerManager.WakeLock}、{@link android.app.AlarmManager} 闹铃、GPS 和 Wi-Fi 扫描应用余下的低电耗模式限制。
-
-
-无论是应用部分还是全部低电耗模式限制,系统都会唤醒设备以提供简短的维护时间窗口,在此窗口期间,应用程序可以访问网络并执行任何被推迟的作业/同步。
-
-
-
-</p>
-
-
-<img src="{@docRoot}preview/images/doze-diagram-2.png" alt="" id="figure2" />
-<p class="img-caption">
- <strong>图 2.</strong> 低电耗模式如何在设备处于静止状态达到一定时间后应用第二级系统活动限制的图示。
-
-</p>
-
-<p>
- 请注意,激活屏幕或插接设备电源时,系统将退出低电耗模式并取消这些处理限制。
-此项新增的行为不会影响有关使您的应用适应 Android 6.0(API 级别 23)中所推出的旧版本低电耗模式的建议和最佳实践,如<a href="{@docRoot}training/monitoring-device-state/doze-standby.html">低电耗模式和应用待机模式优化</a>中所讨论。
-
-
-
-您仍应遵循这些建议(例如使用 Google Cloud Messaging (GCM) 发送和接收消息)并开始安排更新计划以适应新增的低电耗模式行为。
-
-
-
-</p>
-
-
-<h3 id="bg-opt">Project Svelte:后台优化</h3>
-
-<p>
- Android N 删除了三项隐式广播,以帮助优化内存使用和电量消耗。
-此项变更很有必要,因为隐式广播会在后台频繁启动已注册侦听这些广播的应用。
-
-删除这些广播可以显著提升设备性能和用户体验。
-
-</p>
-
-<p>
- 移动设备会经历频繁的连接变更,例如在 Wi-Fi 和移动数据之间切换时。
-目前,可以通过在应用清单中注册一个接收器来侦听隐式 {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION} 广播,让应用能够监控这些变更。
-
-
-由于很多应用会注册接收此广播,因此单次网络切换即会导致所有应用被唤醒并同时处理此广播。
-
-
-</p>
-
-<p>
- 同理,应用可以注册接收来自其他应用(例如相机)的隐式 {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} 和 {@link
- android.hardware.Camera#ACTION_NEW_VIDEO} 广播。
-当用户使用相机应用拍摄照片时,这些应用即会被唤醒以处理广播。
-
-</p>
-
-<p>
- 为缓解这些问题,Android N 应用了以下优化措施:
-
-</p>
-
-<ul>
- <li>面向 Android N 开发的应用不会收到 {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION} 广播,即使它们已有清单条目来请求接受这些事件的通知。
-在前台运行的应用如果使用{@link android.content.BroadcastReceiver} 请求接收通知,则仍可以在主线程中侦听 {@code CONNECTIVITY_CHANGE}。
-
-
- </li>
-
- <li>应用无法发送或接收 {@link
-android.hardware.Camera#ACTION_NEW_PICTURE} 或 {@link
-android.hardware.Camera#ACTION_NEW_VIDEO} 广播。此项优化会影响所有应用,而不仅仅是面向 Android N 的应用。
-
- </li>
-</ul>
-
-<p>如果您的应用使用任何 Intent,您仍需要尽快移除它们的依赖关系,以正确适配 Android N 设备。
-
- Android 框架提供多个解决方案来缓解对这些隐式广播的需求。
-例如,{@link
- android.app.job.JobScheduler} API 提供了一个稳健可靠的机制来安排满足指定条件(例如连入无限流量网络)时所执行的网络操作。
-
-您甚至可以使用 {@link
- android.app.job.JobScheduler} 来适应内容提供程序变化。
-</p>
-
-<p>
- 如需了解有关 Android N 中后台优化以及如何改写应用的详细信息,请参阅<a href="{@docRoot}preview/features/background-optimization.html">后台优化</a>。
-
-
-</p>
-
-<h2 id="perm">权限更改</h2>
-
-<p>
- Android N 做了一些权限更改,这些更改可能会影响您的应用。
-</p>
-
-<h3 id="permfilesys">系统权限更改</h3>
-
-<p>
- 为了提高私有文件的安全性,面向 Android N 或更高版本的应用私有目录被限制访问 (<code>0700</code>)。
-
- 此设置可防止私有文件的元数据泄漏,如它们的大小或存在。
-此权限更改有多重副作用:
-</p>
-
-<ul>
- <li>
- 私有文件的文件权限不应再由所有者放宽,为使用 {@link android.content.Context#MODE_WORLD_READABLE} 和/或 {@link android.content.Context#MODE_WORLD_WRITEABLE} 而进行的此类尝试将触发 {@link java.lang.SecurityException}。
-
-
-
-
- <p class="note">
- <strong>注:</strong>迄今为止,这种限制尚不能完全执行。
- 应用仍可能使用原生 API 或 {@link java.io.File File} API 来修改它们的私有目录权限。
-但是,我们强烈反对放宽私有目录的权限。
-
- </p>
- </li>
- <li>
- 传递软件包网域外的 <code>file://</code> URI 可能给接收器留下无法访问的路径。
-因此,尝试传递 <code>file://</code> URI 会触发 <code>FileUriExposedException</code>。
-
-分享私有文件内容的推荐方法是使用 {@link
- android.support.v4.content.FileProvider}。
-
- </li>
- <li>
- {@link android.app.DownloadManager} 不再按文件名分享私人存储的文件。
-旧版应用在访问 {@link
- android.app.DownloadManager#COLUMN_LOCAL_FILENAME} 时可能出现无法访问的路径。
-面向 Android N 或更高版本的应用在尝试访问 {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME} 时会触发 {@link java.lang.SecurityException}。
-
-
-
- 通过使用 {@link
- android.app.DownloadManager.Request#setDestinationInExternalFilesDir
- DownloadManager.Request.setDestinationInExternalFilesDir()} 或 {@link
- android.app.DownloadManager.Request#setDestinationInExternalPublicDir
- DownloadManager.Request.setDestinationInExternalPublicDir()} 将下载位置设置为公共位置的旧版应用仍可以访问 {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME} 中的路径,但是我们强烈反对使用这种方法。
-
-
-
-
-
-访问由 {@link android.app.DownloadManager} 公开的文件的首选方式是使用 {@link android.content.ContentResolver#openFileDescriptor
- ContentResolver.openFileDescriptor()}。
-
-
- </li>
-</ul>
-
-<h2 id="sharing-files">应用间共享文件</h2>
-
-<p>
-对于面向 Android N 的应用,Android 框架执行的 {@link android.os.StrictMode} API 政策禁止向您的应用外公开 {@code file://} URI。
-
-如果一项包含文件 URI 的 Intent 离开您的应用,应用失败,并出现 {@code FileUriExposedException} 异常。
-
-</p>
-
-<p>
-若要在应用间共享文件,您应发送一项 {@code content://} URI,并授予 URI 临时访问权限。
-进行此授权的最简单方式是使用 {@link android.support.v4.content.FileProvider} 类。
-如需有关权限和共享文件的更多信息,请参阅<a href="{@docRoot}training/secure-file-sharing/index.html">共享文件</a>。
-
-
-</p>
-
-<h2 id="accessibility">无障碍改进</h2>
-
-<p>
- 为提高平台对于视力不佳或视力受损用户的可用性,Android N 做出了一些更改。这些更改一般并不要求更改您的应用代码,不过您应仔细检查并使用您的应用测试这些功能,以评估它们对用户体验的潜在影响。
-
-
-
-
-</p>
-
-
-<h3 id="screen-zoom">屏幕缩放</h3>
-
-<p>
- Android N 支持用户设置<strong>显示尺寸</strong>,以放大或缩小屏幕上的所有元素,从而提升设备对视力不佳用户的可访问性。用户无法将屏幕缩放至低于最小屏幕宽度<a href="http://developer.android.com/guide/topics/resources/providing-resources.html">
- sw320dp</a>,该宽度是 Nexus 4 的宽度,也是常规中等大小手机的宽度。
-
-
-
-</p>
-
-<div class="cols">
-
-<div class="col-6">
- <img src="{@docRoot}preview/images/screen-zoom-1.png" alt="" height="XXX" id="figure1" />
-</div>
-<div class="col-6">
- <img src="{@docRoot}preview/images/screen-zoom-2.png" alt="" height="XXX" id="figure1" />
-</div>
-
-</div> <!-- end cols -->
-<p class="img-caption">
- <strong>图 3.</strong> 右侧屏幕显示的是一台运行 Android N 系统映像的设备增大显示尺寸后的效果。
-
-</p>
-
-
-<p>
- 当设备密度发生更改时,系统会以如下方式通知正在运行的应用:
-
-</p>
-
-<ul>
- <li>如果是面向 API 级别 23 或更低版本系统的应用,系统会自动终止其所有后台进程。
-这意味着如果用户切换离开此类应用,转而打开“Settings”屏幕并更改 <strong>Display size</strong> 设置,则系统会像处理内存不足的情况一样终止该应用。
-
-<em></em>
-如果应用具有任何前台进程,则系统会如<a href="{@docRoot}guide/topics/resources/runtime-changes.html">处理运行时变更</a>中所述将配置变更通知给这些进程,就像对待设备屏幕方向变更一样。
-
-
-
- </li>
-
- <li>如果是面向 Android N 的应用,则其所有进程(前台和后台)都会收到有关配置变更的通知,如<a href="{@docRoot}guide/topics/resources/runtime-changes.html">处理运行时变更</a>中所述。
-
-
-
- </li>
-</ul>
-
-<p>
- 大多数应用并不需要进行任何更改即可支持此功能,不过前提是这些应用遵循 Android 最佳实践。具体要检查的事项:
-
-</p>
-
-<ul>
- <li>在屏幕宽度为 <code><a href=
- "{@docRoot}guide/topics/resources/providing-resources.html">sw320dp</a></code> 的设备上测试您的应用,并确保其充分运行。
-
- </li>
-
- <li>当设备配置发生变更时,更新任何与密度相关的缓存信息,例如缓存位图或从网络加载的资源。当应用从暂停状态恢复运行时,检查配置变更。
-
-
-
- <p class="note">
- <strong>注:</strong>如果您要缓存与配置相关的数据,则最好也包括相关元数据,例如该数据对应的屏幕尺寸或像素密度。
-
-保存这些元数据便于您在配置变更后决定是否需要刷新缓存数据。
-
-
- </p>
- </li>
-
- <li>避免用像素单位指定尺寸,因为像素不会随屏幕密度缩放。应改为使用<a href="{@docRoot}guide/practices/screens_support.html">与密度无关像素</a> (<code>dp</code>) 单位指定尺寸。
-
-
- </li>
-</ul>
-
-<h3 id="vision-settings">设置向导中的视觉设置</h3>
-
-<p>
- Android N 在“Welcome”屏幕中加入了“Vision Settings”,用户可以在新设备上设置以下无障碍功能设置:
-
- <strong>Magnification gesture</strong>、<strong>Font size</strong>、<strong>Display size</strong> 和 <strong>TalkBack</strong>。
-此项变更增强了与不同屏幕设置相关的错误的可见性。
-要评估此功能的影响,您应在启用这些设置的状态下测试应用。
-
-您可以在 <strong>Settings > Accessibility</strong> 中找到这些设置。
-
-</p>
-
-<h2 id="ndk">NDK 应用链接至平台库</h2>
-
-<p>
- Android N 做了一些命名空间更改,以阻止加载非公开 API。
- 如果您使用 NDK,则只能使用 Android 平台提供的公开 API。
-在下一个官方发布的 Android 版本上使用非公开 API 会导致应用崩溃。
-
-</p>
-
-<p>
- 为提醒您使用了非公开 API,在 Android N 设备上运行的应用会在有应用调用非公开 API 时在日志消息输出中生成一个错误。
-
- 此错误还会作为消息显示在设备屏幕上,以帮助增强您对此情况的认识。
-您应检查应用代码以删除使用非公开平台 API,并使用预览版设备或模拟器全面测试应用。
-
-
-</p>
-
-<p>
- 如果您的应用依赖平台库,则请参见 NDK 文档,了解使用公开 API 等效项替换普通私有 API 的典型修复。
-
- 您还可以链接至平台库,而无需实现此应用,如果应用使用的库是平台的一部分(例如 <code>libpng</code>),但不属于 NDK,则更可如此。
-
-此情况下,请确保您的 APK 包含您打算链接到的所有 .so 文件。
-
-</p>
-
-<p class="caution">
- <strong>注意:</strong>有些第三方库可能会链接至非公开 API。
-如果您的应用使用这些库,那么当您的应用在下一个官方发布的 Android 版本上运行时可能会出现崩溃现象。
-
-</p>
-
-<p>
- 应用不应依赖或使用不属于 NDK 的原生库,因为这些库可能会发生更改或从一个 Android 版本迁移至另一版本。
-
-例如,从 OpenSSL 切换至 BoringSSL 即属于此类更改。
- 此外,不同的设备可能提供不同级别的兼容性,因为不属于 NDK 中的平台库没有兼容性要求。
-
-如果您必须在较旧设备上访问非 NDK 库,则请依据 Android API 级别进行加载。
-
-</p>
-
-<p>
- 为帮助您诊断此类问题,下面列举了一些在您试图使用 Android N 开发应用时可能遇到的 Java 和 NDK 错误:
-
-</p>
-
-<p>Java 错误示例:</p>
-<pre class="no-pretty-print">
-java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so"
- is not accessible for the namespace "classloader-namespace"
-</pre>
-
-<p>NDK 错误示例:</p>
-<pre class="no-pretty-print">
-dlopen failed: cannot locate symbol "__system_property_get" referenced by ...
-</pre>
-
-
-<p>
- 以下是遇到这类错误的应用的一些典型修复:
-</p>
-
-<ul>
- <li>可以使用标准 JNI 函数来替代使用 libandroid_runtime.so 中的 getJavaVM 和 getJNIEnv:
-
-<pre class="no-pretty-print">
-AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h>
-AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or
-JavaVM::AttachCurrentThread from <jni.h>.
-</pre>
- </li>
-
- <li>可以使用公开 {@code alternative __system_property_get} 来替代使用 {@code libcutils.so} 中的 {@code property_get} 符号。如需这样做,请使用 {@code __system_property_get} 及以下 include 函数:
-
-
-<pre>
-#include <sys/system_properties.h>
-</pre>
- </li>
-
- <li>应使用应用本地版本来替代使用 {@code libcrypto.so} 中的 {@code SSL_ctrl} 符号。例如,您应在 {@code .so} 文件中静态链接 {@code libcyrpto.a},或者在应用中包含您自己的来自 BoringSSL 或 OpenSSL 的动态 {@code libcrypto.so}。
-
-
-
- </li>
-</ul>
-
-<h2 id="afw">Android for Work</h2>
-<p>
- Android N 包含一些针对面向 Android for Work 的应用的变更,包括对证书安装、密码重置、二级用户管理、设备标识符访问权限的变更。如果您是要针对 Android for Work 环境开发应用,则应仔细检查这些变更并相应地修改您的应用。
-
-
-
-
-</p>
-
-<ul>
- <li>您必须先安装授权证书安装程序,然后 DPC 才能对其进行设置。
-对于面向 N SDK 的个人资料和设备所有者应用,您应在设备策略控制器 (DPC) 调用 <code>DevicePolicyManager.setCertInstallerPackage()</code> 之前安装授权证书安装程序。
-
-
-如果尚未安装此安装程序,则系统会引发 <code>IllegalArgumentException</code>。
-
-
- </li>
-
- <li>针对设备管理员的重置密码限制现在也适用于个人资料所有者。
-设备管理员无法再使用 {@code DevicePolicyManager.resetPassword()} 来清除或更改已经设置的密码。
-
-设备管理员仍可以设置密码,但只能在设备没有密码、PIN 或图案时这样做。
-
- </li>
-
- <li>即使设置了限制,设备所有者和个人资料所有者仍可以管理帐户。而且,即使具有 <code>DISALLOW_MODIFY_ACCOUNTS</code> 用户限制,设备所有者和个人资料所有者仍可调用 Account Management API。
-
-
- </li>
-
- <li>设备所有者可以更轻松地管理二级用户。当设备在设备所有者模式下运行时,系统将自动设置 <code>DISALLOW_ADD_USER</code> 限制。
-
-这样可以防止用户创建非托管二级用户。
-此外,<code>CreateUser()</code> 和 <code>createAndInitializeUser()</code> 方法已弃用,取而代之的是 <code>DevicePolicyManager.createAndManageUser()</code> 方法。
-
-
- </li>
-
- <li>设备所有者可以访问设备标识符。设备所有者可以使用
- <code>DevicePolicyManagewr.getWifiMacAddress()</code> 访问设备的 Wi-Fi MAC 地址。
-如果设备上从未启用 Wi-Fi,则此方法将返回一个 {@code null} 值。
-
- </li>
-
- <li>工作模式设置控制工作应用访问。当工作模式关闭时,系统启动器通过使工作应用显示为灰色来指示它们不可用。
-启用工作模式会再次恢复正常行为。
-
-</ul>
-
-<p>
- 如需了解有关 Android N 中针对 Android for Work 所做变更的详细信息,请参阅
- <a href="{@docRoot}preview/features/afw.html">Android for Work 更新</a>。
-</p>
-
-<h2 id="annotations">注解保留</h2>
-
-<p>
-Android N 在注解可见性被忽略时修复错误。这种问题将启用本不应被允许的运行时访问注解。
-
-这些注解包括:
-</p>
-
-<ul>
- <li>{@code VISIBILITY_BUILD}:仅应编译时可见。</li>
- <li>{@code VISIBILITY_SYSTEM}:运行时应可见,但仅限基本系统。
-</li>
-</ul>
-
-<p>
-如果您的应用依赖这种行为,请在注解中添加一项运行时必须可用的保留政策。
-您可通过使用 {@code @Retention(RetentionPolicy.RUNTIME)} 来如此做。
-</p>
-
-<h2 id="other">其他重要说明</h2>
-
-<ul>
-<li>如果一个应用在 Android N 上运行,但却是针对更低 API 级别开发的,那么在用户更改显示尺寸时,系统将终止此应用进程。
-应用必须能够正常处理此情景。
-否则,当用户从最近使用记录中恢复运行应用时,应用将会出现崩溃现象。
-
-
-<p>
-您应测试应用以确保不会发生此行为。要进行此测试,您可以通过 DDMS 手动终止应用,以造成相同的崩溃现象。
-
-
-
-</p>
-
-<p>
-在密度发生更改时,系统不会自动终止面向 N 及更高版本的应用;不过,这些应用仍可能对配置变更做出不良响应。
-
-</p>
-</li>
-
-<li>
-Android N 上的应用应能够正常处理配置变更,并且在后续启动时不会出现崩溃现象。您可以通过更改字体大小 (<strong>Setting</strong> >
-<strong>Display</strong> > <strong>Font size</strong>) 并随后从最近使用记录中恢复运行应用,来验证应用行为。
-
-
-
-</li>
-
-<li>
-由于之前的 Android 版本中的一项错误,系统未能将对主线程上的一个 TCP 套接字的写入操作举报为严格模式违反。
-Android N 修复了此错误。呈现出这种行为的应用引发 {@code android.os.NetworkOnMainThreadException}。一般情况下,我们不建议在主线程上执行网络操作,因为这些操作通常都有可能导致 ANR 和卡顿的高尾延迟。
-
-
-
-</li>
-
-<li>
-{@code Debug.startMethodTracing()} 方法族现在默认在您的共享的存储空间上的软件包特定目录中存储输出,而非 SD 卡顶级。
-
-
-这意味着应用不再需要请求 {@code WRITE_EXTERNAL_STORAGE} 使用这些 API 的权限。
-</li>
-
-<li>
-许多平台 API 现在开始检查在 {@link android.os.Binder} 事务间发送的大负载,系统现在会将 {@code TransactionTooLargeExceptions} 再次作为 {@code RuntimeExceptions} 引发,而不再只是默默记录或抑制它们。
-
-
-一个常见例子是在 {@link android.app.Activity#onSaveInstanceState Activity.onSaveInstanceState()} 上存储过多数据,导致 {@code ActivityThread.StopInfo} 在您的应用面向 Android N 时引发 {@code RuntimeException}。
-
-
-
-
-</li>
-
-<li>
-如果应用向 {@link android.view.View} 发布 {@link java.lang.Runnable} 任务,并且 {@link android.view.View} 未附加到窗口,系统会用 {@link android.view.View} 为 {@link java.lang.Runnable} 任务排队;在 {@link android.view.View} 附加到窗口之前,{@link java.lang.Runnable} 任务不会执行。
-
-
-
-
-
-此行为会修复以下错误:
-<ul>
- <li>如果一项应用是从并非预期窗口 UI 线程的其他线程发布到 {@link android.view.View},则{@link java.lang.Runnable} 可能会因此运行错误的线程。
-
- </li>
- <li>如果 {@link java.lang.Runnable} 任务是从并非环路线程的其他线程发布,则应用可能会曝光 {@link java.lang.Runnable} 任务。
-</li>
-</ul>
-</li>
-
-<li>
-如果 Android N 上一项有 {@link android.Manifest.permission#DELETE_PACKAGES DELETE_PACKAGES} 权限的应用尝试删除一个软件包,但另一项应用已经安装了这个软件包,则系统可能要求用户确认。
-
-
-在这种情况下,应用在调用 {@link android.content.pm.PackageInstaller#uninstall PackageInstaller.uninstall()} 时的返回状态应为 {@link android.content.pm.PackageInstaller#STATUS_PENDING_USER_ACTION STATUS_PENDING_USER_ACTION}。
-
-
-
-</li>
-
-</ul>
-
diff --git a/docs/html-intl/intl/zh-cn/preview/download-ota.jd b/docs/html-intl/intl/zh-cn/preview/download-ota.jd
deleted file mode 100644
index 5d17abc..0000000
--- a/docs/html-intl/intl/zh-cn/preview/download-ota.jd
+++ /dev/null
@@ -1,332 +0,0 @@
-page.title=应用设备 OTA 映像
-
-@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 库文件(若可用))依据本许可协议的条款授权您使用。本许可协议在您与 Google 之间就您对“Preview”的使用构成具有法律约束力的合约。
-
-1.2 “Android”是指以 Android 开源项目(项目网址为 http://source.android.com/,其内容会不时更新)名义提供、面向设备的 Android 软件栈。
-
-1.3 “Android 兼容”是指 (i) 符合与 Android 兼容性定义文档(可在 Android 兼容性网站 http://source.android.com/compatibility 上找到,并可能会不时更新)标准的任何 Android 实现;并 (ii) 成功通过 Android 兼容性测试套件 (CTS) 的测试。
-
-1.4“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. Google “Preview”许可
-
-3.1 Google 依据本许可协议的条款授予您有限的、全球性、免版税、不可转让、非独占性且不可次级许可的“Preview”使用许可,其用途仅限针对 Android 的兼容实现来开发应用。
-
-3.2 您不得使用此“Preview”来开发适用于其他平台(包括 Android 的非兼容实现)的应用或开发其他 SDK。您当然可以随意开发适用于其他平台(包括 Android 的非兼容实现)的应用,前提是不使用此“Preview”来进行此类开发。
-
-3.3 您同意 Google 或第三方拥有“Preview”中存在或与其有关联的全部合法权利、所有权和利益,包括“Preview”中存在的任何知识产权。“知识产权”是指根据专利法、版权法、商业机密法、商标法享有的任何及全部权利,以及其他任何及全部专有权利。Google 保留所有未明确授予您的权利。
-
-3.4 您不得将“Preview”用于本许可协议未明确允许的任何用途。除适用第三方许可所要求的范围外,您不得:(a) 对“Preview”或“Preview”的任何部分进行复制(备份用途除外)、修改、改编、再分发、反编译、逆向工程、反汇编或创建其衍生品;或 (b) 将“Preview”的任何部分加载到移动手持终端或除个人计算机之外的任何其他硬件设备上,将“Preview”的任何部分与其他软件合并,或者发行任何融入“Preview”某一部分的软件或设备。
-
-3.5 对于依据开源软件许可授权的“Preview”组件,其使用、复制和分发仅受该开源软件许可条款的制约,不受本许可协议的约束。您同意在依照被授予的所有权利作为被许可方期间,在遵守此类开源软件许可协议方面始终保持良好的信誉,并避免进行任何可能导致终止、暂停或违反此类权利的行动。
-
-3.6 您同意 Google 所提供“Preview”的形式和性质可随时发生变更,而无需事先通知您,并且未来的“Preview”版本可能会与在之前的“Preview”版本上开发的应用不兼容。您同意 Google 可单方面决定在未事先通知您的情况下全面停止(永久性或暂时性)向您或用户提供“Preview”(或“Preview”内的任何功能)。
-
-3.7 本许可协议内没有任何条款授予您使用 Google 的任何商品名、商标、服务标志、徽标、域名或其他独特品牌特征的权利。
-
-3.8 您同意您不会移除、遮盖或篡改“Preview”上可能贴有或“Preview”内可能包含的任何专有权利声明(包括版权声明和商标声明)。
-
-4. 您对“Preview”的使用
-
-4.1 Google 同意本许可协议中的任何条款均未授予 Google 从您(或您的许可方)处获取您依照本许可协议使用“Preview”开发的任何软件应用中存在或与其相关的权利、所有权或利益,包括这些应用中存在的任何知识产权。
-
-4.2 您同意只出于 (a) 本许可协议和 (b) 相关管辖区域内任何适用法律、法规或公认惯例或准则(包括有关向美国或其他相关国家/地区出口数据或软件或从美国或其他相关国家/地区进口数据或软件的任何法律)所允许的目的而使用“Preview”和编写应用。
-
-4.3 您同意,如果您使用“Preview”开发应用,您将会保护用户的隐私权和合法权利。如果用户向您提供用户名、密码或其他登录信息或个人信息,您必须确保用户知晓这些信息将供您的应用使用,并且您必须为这些用户提供足以满足法律要求的隐私声明和保护。如果您的应用存储由用户提供的个人信息或敏感信息,其存储方式必须安全。如果用户向您提供 Google 帐户信息,您的应用只能在用户允许时出于用户所许可的有限目的使用该信息访问用户的 Google 帐户。
-
-4.4 您同意您不会利用“Preview”从事任何干扰、中断、损坏或以未经授权方式访问 Google 或任何第三方的服务器、网络或其他财产或服务的 Activity(包括应用的开发或分发)。
-
-4.5 您同意您对通过 Android 和/或 Android 应用创建、传输或显示的任何数据、内容或资源以及您的行为所导致的后果(包括 Google 可能遭受的任何损失或损害)负全责(Google 在上述方面对您或任何第三方不承担任何责任)。
-
-4.6 您同意您为违反本许可协议、任何适用的第三方合约或服务条款或任何适用法律或法规下的义务以及任何上述违规行为所导致的后果(包括 Google 或任何第三方可能遭受的任何损失或损害)负全责(Google 在上述方面对您或任何第三方不承担任何责任)。
-
-4.7 “Preview”正在开发中,您的测试和反馈是开发过程的重要环节。使用“Preview”,即表示您承认某些功能仍在开发实现之中,您不应期望“Preview”具备稳定版本的全部功能。您同意不使用此“Preview”公开发布或发运任何应用,因为此“Preview”在 Android SDK 正式发行之后将不再受支持。
-
-5. 您的开发者凭据
-
-5.1 您同意,对于 Google 可能向您发放或可能由您自行选择的任何开发者凭据,您有责任保持其机密性,并且您对以您的开发者凭据名义开发的所有应用负全责。
-
-6. 隐私权和信息
-
-6.1 为持续创新和改进“Preview”,Google 可能会从软件收集某些使用统计数据,包括但不限于唯一标识符、关联的 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 您同意,在法律所允许的最大限度内,为 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">
-
-<p>
- 本页提供了无线 (OTA) 设备映像的下载链接,并描述了如何手动向设备应用一项 OTA 更新。
-此过程可用于恢复通过 Android Beta 计划接收 OTA 更新并且在安装更新后不能启动的设备。
-
-
-</p>
-
-<h2 id="install-ota">安装 OTA 映像</h2>
-
-<p></p>
-
-<p>将 OTA 软件包安装到设备:</p>
-
-<ol>
- <li>从下表中下载 OTA 设备映像。</li>
- <li>将设备重新启动为恢复模式。如需有关将 Nexus 设备设为此模式的更多信息,请参阅<a href="https://support.google.com/nexus/answer/4596836">将您的 Nexus 设备恢复为出厂设置</a>。
-
-
-
- </li>
- <li>在设备上,选择 <strong>ADB sideload</strong>。</li>
- <li>将设备连接到加载了 Android 开发环境并安装了Android 调试桥 (ADB) 工具的计算机。
-</li>
- <li>运行以下命令:
- <pre>adb sideload <em><ota-package></em></pre>
- </li>
-</ol>
-
-
-
-<h2 id="ota-images">设备 OTA 映像</h2>
-
-<table>
- <tr>
- <th scope="col">设备</th>
- <th scope="col">下载/校验和</th>
- </tr>
-
- <tr id="bullhead">
- <td>Nexus 5X <br>"bullhead"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >bullhead-ota-npd90g-0a874807.zip</a><br>
- MD5: 4b83b803fac1a6eec13f66d0afc6f46e<br>
- SHA-1: a9920bcc8d475ce322cada097d085448512635e2
- </td>
- </tr>
-
- <tr id="shamu">
- <td>Nexus 6 <br>"shamu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >shamu-ota-npd90g-06f5d23d.zip</a><br>
- MD5: 513570bb3a91878c2d1a5807d2340420<br>
- SHA-1: 2d2f40636c95c132907e6ba0d10b395301e969ed
- </td>
- </tr>
-
- <tr id="angler">
- <td>Nexus 6P <br>"angler"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >angler-ota-npd90g-5baa69c2.zip</a><br>
- MD5: 096fe26c5d50606a424d2f3326c0477b<br>
- SHA-1: 468d2e7aea444505513ddc183c85690c00fab0c1
- </td>
- </tr>
-
- <tr id="volantis">
- <td>Nexus 9 <br>"volantis"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantis-ota-npd90g-c04785e1.zip</a><br>
- MD5: 6aecd3b0b3a839c5ce1ce4d12187b03e<br>
- SHA-1: 31633180635b831e59271a7d904439f278586f49
- </td>
- </tr>
-
- <tr id="volantisg">
- <td>Nexus 9G <br>"volantisg"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantisg-ota-npd90g-c56aa1b0.zip</a><br>
- MD5: 0493fa79763d67bcdde8007299e1888d<br>
- SHA-1: f709daf81968a1b27ed41fe40d42e0d106f3c494
- </td>
- </tr>
-
- <tr id="fugu">
- <td>Nexus Player <br>"fugu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >fugu-ota-npd90g-3a0643ae.zip</a><br>
- MD5: 9c38b6647fe5a4f2965196b7c409f0f7<br>
- SHA-1: 77c6fb05191f0c2ae0956bae18f1c80b2f922f05
- </td>
- </tr>
-
- <tr id="ryu">
- <td>Pixel C <br>"ryu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >ryu-ota-npd90g-ec931914.zip</a><br>
- MD5: 4c6135498ca156a9cdaf443ddfdcb2ba<br>
- SHA-1: 297cc9a204685ef5507ec087fc7edf5b34551ce6
- </td>
- </tr>
-
- <tr id="seed">
- <td>General Mobile 4G (Android One) <br>"seed"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >seed_l8150-ota-npd90g-dcb0662d.zip</a><br>
- MD5: f40ea6314a13ea6dd30d0e68098532a2<br>
- SHA-1: 11af10b621f4480ac63f4e99189d61e1686c0865
- </td>
- </tr>
-
-</table>
-
-
- </div><!-- landing -->
-
-</div><!-- relative wrapper -->
-
-
-
-<script>
- var urlRoot = "http://storage.googleapis.com/androiddevelopers/shareables/preview/ota/";
- 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/download.jd b/docs/html-intl/intl/zh-cn/preview/download.jd
deleted file mode 100644
index 2d3b883..0000000
--- a/docs/html-intl/intl/zh-cn/preview/download.jd
+++ /dev/null
@@ -1,544 +0,0 @@
-page.title=在设备上测试
-meta.tags="preview", "nexus","system image"
-page.tags="preview", "androidn"
-page.image=images/cards/card-n-downloads_2x.png
-
-@jd:body
-
-<div style="position:relative; min-height:600px">
-
- <div class="wrap" id="tos" style="position:absolute;display:none;width:inherit;">
-
- <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 库文件(若可用))依据本许可协议的条款授权您使用。本许可协议在您与 Google 之间就您对“Preview”的使用构成具有法律约束力的合约。
-
-1.2 “Android”是指以 Android 开源项目(项目网址为 http://source.android.com/,其内容会不时更新)名义提供、面向设备的 Android 软件栈。
-
-1.3 “Android 兼容”是指 (i) 符合与 Android 兼容性定义文档(可在 Android 兼容性网站 http://source.android.com/compatibility 上找到,并可能会不时更新)标准的任何 Android 实现;并 (ii) 成功通过 Android 兼容性测试套件 (CTS) 的测试。
-
-1.4“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. Google “Preview”许可
-
-3.1 Google 依据本许可协议的条款授予您有限的、全球性、免版税、不可转让、非独占性且不可次级许可的“Preview”使用许可,其用途仅限针对 Android 的兼容实现来开发应用。
-
-3.2 您不得使用此“Preview”来开发适用于其他平台(包括 Android 的非兼容实现)的应用或开发其他 SDK。您当然可以随意开发适用于其他平台(包括 Android 的非兼容实现)的应用,前提是不使用此“Preview”来进行此类开发。
-
-3.3 您同意 Google 或第三方拥有“Preview”中存在或与其有关联的全部合法权利、所有权和利益,包括“Preview”中存在的任何知识产权。“知识产权”是指根据专利法、版权法、商业机密法、商标法享有的任何及全部权利,以及其他任何及全部专有权利。Google 保留所有未明确授予您的权利。
-
-3.4 您不得将“Preview”用于本许可协议未明确允许的任何用途。除适用第三方许可所要求的范围外,您不得:(a) 对“Preview”或“Preview”的任何部分进行复制(备份用途除外)、修改、改编、再分发、反编译、逆向工程、反汇编或创建其衍生品;或 (b) 将“Preview”的任何部分加载到移动手持终端或除个人计算机之外的任何其他硬件设备上,将“Preview”的任何部分与其他软件合并,或者发行任何融入“Preview”某一部分的软件或设备。
-
-3.5 对于依据开源软件许可授权的“Preview”组件,其使用、复制和分发仅受该开源软件许可条款的制约,不受本许可协议的约束。您同意在依照被授予的所有权利作为被许可方期间,在遵守此类开源软件许可协议方面始终保持良好的信誉,并避免进行任何可能导致终止、暂停或违反此类权利的行动。
-
-3.6 您同意 Google 所提供“Preview”的形式和性质可随时发生变更,而无需事先通知您,并且未来的“Preview”版本可能会与在之前的“Preview”版本上开发的应用不兼容。您同意 Google 可单方面决定在未事先通知您的情况下全面停止(永久性或暂时性)向您或用户提供“Preview”(或“Preview”内的任何功能)。
-
-3.7 本许可协议内没有任何条款授予您使用 Google 的任何商品名、商标、服务标志、徽标、域名或其他独特品牌特征的权利。
-
-3.8 您同意您不会移除、遮盖或篡改“Preview”上可能贴有或“Preview”内可能包含的任何专有权利声明(包括版权声明和商标声明)。
-
-4. 您对“Preview”的使用
-
-4.1 Google 同意本许可协议中的任何条款均未授予 Google 从您(或您的许可方)处获取您依照本许可协议使用“Preview”开发的任何软件应用中存在或与其相关的权利、所有权或利益,包括这些应用中存在的任何知识产权。
-
-4.2 您同意只出于 (a) 本许可协议和 (b) 相关管辖区域内任何适用法律、法规或公认惯例或准则(包括有关向美国或其他相关国家/地区出口数据或软件或从美国或其他相关国家/地区进口数据或软件的任何法律)所允许的目的而使用“Preview”和编写应用。
-
-4.3 您同意,如果您使用“Preview”开发应用,您将会保护用户的隐私权和合法权利。如果用户向您提供用户名、密码或其他登录信息或个人信息,您必须确保用户知晓这些信息将供您的应用使用,并且您必须为这些用户提供足以满足法律要求的隐私声明和保护。如果您的应用存储由用户提供的个人信息或敏感信息,其存储方式必须安全。如果用户向您提供 Google 帐户信息,您的应用只能在用户允许时出于用户所许可的有限目的使用该信息访问用户的 Google 帐户。
-
-4.4 您同意您不会利用“Preview”从事任何干扰、中断、损坏或以未经授权方式访问 Google 或任何第三方的服务器、网络或其他财产或服务的 Activity(包括应用的开发或分发)。
-
-4.5 您同意您对通过 Android 和/或 Android 应用创建、传输或显示的任何数据、内容或资源以及您的行为所导致的后果(包括 Google 可能遭受的任何损失或损害)负全责(Google 在上述方面对您或任何第三方不承担任何责任)。
-
-4.6 您同意您为违反本许可协议、任何适用的第三方合约或服务条款或任何适用法律或法规下的义务以及任何上述违规行为所导致的后果(包括 Google 或任何第三方可能遭受的任何损失或损害)负全责(Google 在上述方面对您或任何第三方不承担任何责任)。
-
-4.7 “Preview”正在开发中,您的测试和反馈是开发过程的重要环节。使用“Preview”,即表示您承认某些功能仍在开发实现之中,您不应期望“Preview”具备稳定版本的全部功能。您同意不使用此“Preview”公开发布或发运任何应用,因为此“Preview”在 Android SDK 正式发行之后将不再受支持。
-
-5. 您的开发者凭据
-
-5.1 您同意,对于 Google 可能向您发放或可能由您自行选择的任何开发者凭据,您有责任保持其机密性,并且您对以您的开发者凭据名义开发的所有应用负全责。
-
-6. 隐私权和信息
-
-6.1 为持续创新和改进“Preview”,Google 可能会从软件收集某些使用统计数据,包括但不限于唯一标识符、关联的 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 您同意,在法律所允许的最大限度内,为 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="#device-preview">设置硬件设备</a>
- <ol>
- <li><a href="#ota">获取无线更新</a></li>
- <li><a href="#flash">手动刷写设备</a></li>
- <li><a href="#revertDevice">卸载</a></li>
- </ol>
- </li>
- <li><a href="#setupAVD">设置模拟器</a></li>
- </ol>
- </div>
-</div>
-
-<p>
- 要在新平台上运行和测试您的应用,您需要设置 Android N
-运行组件环境。您可以通过以下任一方式完成此设置:
-</p>
-
-<ul>
- <li>在受支持的硬件设备上安装 Android N,或者</li>
- <li>设置运行 Android N 的 Android 模拟器</li>
-</ul>
-
-<p>
- 如果您需要一个环境用于完成应用在新平台上的基本兼容性测试,则只需现有 APK 和一台硬件设备或模拟器。执行基本测试不一定需要更新整个部署环境。
-
-
-
-</p>
-
-<p>
- 如果您想针对 Android N 或为了使用新的 Android N API 而修改您的应用,则需要一个已更新为支持 Android N 的部署环境并对其进行设置。<a href="{@docRoot}preview/setup-sdk.html">设置以开发 Android N 应用</a>介绍了详细信息。
-
-
-
-</p>
-
-
-<h2 id="device-preview">设置硬件设备</h2>
-
-<p>
- N Developer Preview 提供适用于各种硬件设备(手机、平板、电视等)的系统更新,您可以使用这些设备测试自己的应用。
-
-</p>
-
-<p>
- 如果您可以访问受支持的设备,则可通过以下方式之一将其更新到 Developer Preview 里程碑构建版本:
-
-</p>
-
-<ul>
- <li><strong>通过Android Beta 计划</strong>注册设备以获取自动<a href="https://g.co/androidbeta"> OTA 系统更新</a>。
-注册后,您的设备即会收到 N Developer Preview 中所有里程碑构建版本的定期 OTA 更新。
-建议采用此方法,因为它允许您通过各种版本的 N Developer Preview 从您当前的环境实现无缝转换。
-
-</li>
- <li><strong>下载 Developer Preview 系统映像并刷写设备</strong>。系统不会为手动刷写的设备自动提供 OTA 更新,不过您可以将这些设备注册参加 Android Beta 计划以获取 OTA 更新。
-
- </li>
-</ul>
-
-<h3 id="ota">注册设备以获取自动 OTA 更新</h3>
-
-<p>
- 如果您可以访问受支持的设备(参见“下载”表格中的列表),则可以通过将该设备注册参加 <a href="https://g.co/androidbeta">Android Beta 计划</a>,获取 Android Preview 的无线更新。系统将自动下载这些更新并如正式系统更新一样更新您的设备。
-
-
-
-
-</p>
-
-<p>
- 您可以随时取消注册设备。取消注册后,设备将收到其可用的最新生产版本的 Android 系统(例如 Android 6.0 Marshmallow)的 OTA 更新。
-
-该更新要求完全重置设备,因此设备上的用户数据将被删除。
-在取消注册设备之前,务必先<strong>备份重要数据</strong>。
-
-</p>
-
-<p>
- 如需了解详细信息并注册您的设备,请参阅
-<a href="https://g.co/androidbeta">Android Beta 计划</a>网站。
-</p>
-
-<p class="note"><strong>注:</strong>
- 取消注册要求完全重置设备。务必先备份重要数据。
-
-</p>
-
-<h3 id="flash">手动刷写设备</h3>
-
-<p>
- 您可以随时下载最新的 Developer Preview 系统映像并将其手动刷入设备。
-请参阅下表下载适合您的测试设备的系统映像。
-如果您需要精确控制测试环境,或者需要经常重新安装系统,比如为了进行自动测试而重新安装,则手动刷写设备比较有用。
-
-
-</p>
-
-<!-- You can flash by ota or system image --><p>
- 在设备上安装系统映像会<strong>删除设备中的所有数据</strong>,因此务必先备份数据。
-
-</p>
-
-<p>
- 备份设备数据并下载下面与设备匹配的系统映像后,请按照 <a href="https://developers.google.com/android/nexus/images#instructions">developers.google.com/android</a>
-中的说明将映像刷入设备中。
-
-</p>
-
-<p>
- 手动刷入的系统映像<strong>不会自动接收更高 Developer Preview 里程碑构建版本的 OTA 更新</strong>。请确保您的环境处于最新状态,并在每次有新的 Developer Preview 里程碑构建版本发布时刷入新的系统映像。
-
-
-
-</p>
-
-<p>
- 如果在手动刷写设备后您确定需要获取 OTA 更新,则只需将设备注册参加
-<a href="https://g.co/androidbeta">Android Beta 计划</a>即可。您可以随时注册设备以通过无线下载方式接收下一次的 Preview 更新。
-
-
-</p>
-
-<table>
- <tr>
- <th scope="col">设备</th>
- <th scope="col">下载/校验和</th>
- </tr>
-
- <tr id="bullhead">
- <td>Nexus 5X <br>"bullhead"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >bullhead-npd90g-factory-7a0ca1bc.tgz</a><br>
- MD5: e7a9a3061335c1e0c8be2588f13290af<br>
- SHA-1: 7a0ca1bcfa51bbefde34243603bc79c7dec214a1
- </td>
- </tr>
-
- <tr id="shamu">
- <td>Nexus 6 <br>"shamu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >shamu-npd90g-factory-f7a4e3a9.tgz</a><br>
- MD5: 2fb572ddcfca67bb1d741be97492a9ed<br>
- SHA-1: f7a4e3a96c797827492998e855c8f9efbfc8559a
- </td>
- </tr>
-
- <tr id="angler">
- <td>Nexus 6P <br>"angler"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >angler-npd90g-factory-cd9ac81e.tgz</a><br>
- MD5: 2370c30f3ef1d0684c1de5216a5d90fe<br>
- SHA-1: cd9ac81ec7f4a646ac6054eecbf2ea4c4b89b054
- </td>
- </tr>
-
- <tr id="volantis">
- <td>Nexus 9 <br>"volantis"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantis-npd90g-factory-41b55406.tgz</a><br>
- MD5: cefa78950141da2a7c75e887717e3c8f<br>
- SHA-1: 41b554060263a7ef16e4be8422cbd6caca26e00f
- </td>
- </tr>
-
- <tr id="volantisg">
- <td>Nexus 9G <br>"volantisg"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantisg-npd90g-factory-610492be.tgz</a><br>
- MD5: 2f36dc0d0fab02ab78be500677ec239f<br>
- SHA-1: 610492bedfc4127023040ecb2c89239a78a900ad
- </td>
- </tr>
-
- <tr id="fugu">
- <td>Nexus Player <br>"fugu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >fugu-npd90g-factory-0fe95694.tgz</a><br>
- MD5: f4cb48f919e4c29c631de21416c612e2<br>
- SHA-1: 0fe95694e7bc41e4c3ac0e4438cd77102a0aa8b4
- </td>
- </tr>
-
- <tr id="ryu">
- <td>Pixel C <br>"ryu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >ryu-npd90g-factory-f4da981c.tgz</a><br>
- MD5: d9f0e40b6c20d274831e8a7d285fd887<br>
- SHA-1: f4da981c70576133321e2858e52fe2c990e68a75
- </td>
- </tr>
-
- <tr id="seed">
- <td>General Mobile 4G (Android One) <br>"seed"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >seed_l8150-npd90g-factory-48f59c99.tgz</a><br>
- MD5: 0ed565c509594072822d71c65b48ec8e<br>
- SHA-1: 48f59c99ac43d1cd2f5656a283bb9868581663a8
- </td>
- </tr>
-
-</table>
-
-<h3 id="revertDevice">从设备卸载 Preview</h3>
-
-<p>
- 如果您想从设备卸载 Preview,可以通过以下方式之一来完成:
- </p>
- <ul>
- <li><strong>获取出厂规格系统映像</strong>,然后手动将其刷入设备中。
-
- <ul>
- <li>对于 <strong>Nexus 设备和 Pixel C 设备</strong>,请参阅<a href="http://developers.google.com/android/nexus/images">适用于 Nexus 设备的出厂映像</a>页面进行下载。
-
- </li>
- <li>对于<strong>其他设备</strong>,请直接联系设备制造商,或者,如果设备是 Android Beta 计划支持的设备,则您可以将设备注册参加该计划,然后取消注册(见下文)。
-
-
-</li>
- </ul>
- </li>
- <li><strong>从 Android Beta 计划取消注册设备</strong>。如果设备已注册参加 <a href="https://g.co/androidbeta">Android Beta
- 计划</a>,则只需从计划中取消注册该设备即可,与是何种设备无关。
-
- <p>
- 取消注册后,设备将收到其可用的最新生产版本的 Android 系统(例如 Android 6.0 Marshmallow)的 OTA 更新。
-
- 该更新要求完全重置设备,因此设备上的用户数据将被删除。
-在取消注册设备之前,务必先<strong>备份重要数据</strong>。
-
- </p>
- </li>
-</ul>
-
-<p class="note"><strong>注:</strong>
- 如果要在计划结束之前卸载 Developer Preview 系统映像,则需要完全重置设备并删除设备上的所有用户数据。
-
-
-</p>
-
-
-<h2 id="setupAVD">设置模拟器</h2>
-
-<p>要使用 Android 模拟器运行 Android N Preview,需要下载
-Android N Preview SDK,并为模拟器创建一个虚拟设备。
-</p>
-
-<p>首先,按照如下操作下载 Android N Preview SDK(如果您在<a href="{@docRoot}preview/setup-sdk.html">设置以开发 Android N 应用</a>过程中即已获得此 SDK,则可跳过这部分):
-
-
-
-<ol>
- <li>在 Android Studio 中,打开“Settings”对话框
-(Windows/Linux:<strong>File > Settings</strong>;或 Mac:<strong>Android Studio > Preferences</strong>)。
-在左侧面板中,选择 <strong>Appearance & Behavior > System Settings > Android SDK</strong>。
-
-
-
- <li>点击 <strong>SDK Platforms</strong> 选项卡,然后选中 <strong>Android N Preview</strong> 复选框。
-</li>
-
- <li>点击 <strong>SDK Tools</strong> 选项卡,然后选中
- <strong>Android SDK Build Tools</strong>、<strong>Android SDK
- Platform-Tools</strong> 和 <strong>Android SDK Tools</strong> 复选框。
-
- </li>
-
- <li>点击 <strong>OK</strong> 并接受要安装的任何软件包的许可协议。
-
- </li>
-</ol>
-
-<p>现在,您应该有 <strong>Android SDK Built-Tools 24.0 0 rc1</strong>、<strong>Platform-Tools 24.0.0 rc1</strong> 和 <strong>SDK Tools
-25.0.9</strong>。如果您尚未将 SDK Tools 更新至 25.0.9,则将无法运行 Android N 的 x86_64 系统映像。
-
-</p>
-
-
-<p>现在,使用 Android N 系统映像创建虚拟设备:</p>
-
-<ol>
- <li>通过选择 <strong>Tools > Android >
- AVD Manager</strong> 打开 AVD Manager。</li>
- <li>点击 <strong>Create Virtual Device</strong>。</li>
- <li>选择设备,例如 Nexus 5X、Nexus 6P、Nexus 9 或 Android TV,然后点击 <strong>Next</strong>。
-</li>
- <li>选择 <strong>N</strong> 系统映像(带
-<strong>x86</strong> ABI),然后点击 <strong>Next</strong>。(适用于 Android N Preview 的 Android 模拟器当前仅支持 x86 系统映像。)
-
-
- <li>完成余下 AVD 配置并点击
- <strong>Finish</strong>。</li>
-</ol>
-
-<p>现在,您可以使用 Android N Preview AVD 启动 Android 模拟器。</p>
-
-<p>
-要获得 Android 模拟器最佳运行体验,请确保您使用的是 Android Studio 2.1 或更高版本,该版本支持 <a href="http://tools.android.com/tech-docs/emulator">Android Emulator 2.0</a>,与
-Android Studio 1.5 中的模拟器相比,其运行速度快得多。
-
-</p>
-
-<p>如需了解有关创建虚拟设备的详细信息,请参阅<a href="{@docRoot}tools/devices/index.html">管理虚拟设备</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/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/afw.jd b/docs/html-intl/intl/zh-cn/preview/features/afw.jd
deleted file mode 100644
index 0d4c562..0000000
--- a/docs/html-intl/intl/zh-cn/preview/features/afw.jd
+++ /dev/null
@@ -1,556 +0,0 @@
-page.title=Android for Work 更新
-page.metaDescription=Android N 中的新 Android for Work API 和功能
-page.keywords="android for work", "android N", "enterprise", "QR code"
-
-@jd:body
-
-
-
-
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>本文内容</h2>
- <ol>
- <li><a href="#qr">QR 码配置</a>
-</li>
-
- <li><a href="#sec-challenge">工作资料安全性挑战</a>
-</li>
-
- <li><a href="#suspend">停用应用访问</a>
-</li>
-
- <li><a href="#toggle-work">切换工作模式</a>
-</li>
-
- <li><a href="#always-on-vpn">Always-On VPN</a>
-</li>
-
- <li><a href="#contacts">联系人与工作资料集成</a>
-</li>
-
- <li><a href="#remote-reboot">远程重新启动</a>
-</li>
-
- <li><a href="#disable-roaming">停用数据网络漫游</a>
-</li>
-
- <li><a href="#process-logging">企业进程记录</a>
-</li>
-
- <li><a href="#bug-reports">远程错误报告</a>
-</li>
-
- <li><a href="#remove-cert">移除客户端证书</a>
-</li>
-
- <li><a href="#grant-cert-on-install">允许访问安装设备上的客户端证书</a>
-</li>
-
- <li><a href="#ui-policy">系统 UI 策略透明度</a>
-</li>
-
- <li><a href="#restrictions-mgmt">应用限制管理增强</a>
-</li>
-
- <li><a href="#location-off">位置关闭开关</a>
-</li>
-
- <li><a href="#custom-provisioning">自定义配置</a>
-</li>
-
- <li><a href="#multi-wifi-ca">多 Wi-Fi CA 证书</a>
-</li>
-
- <li><a href="#custom-lock">自定义锁屏消息</a>
-</li>
-
- <li><a href="#work-connectionservice">工作资料 ConnectionService</a>
-</li>
-
- <li><a href="#lock-wp">锁定壁纸</a>
-</li>
-
- <li><a href="#lock-user-icon">锁定壁纸</a>
-</li>
-
- <li><a href="#health-monitoring">设备运行状况监测</a>
-</li>
-
- </ol>
-
- <h2>另请参阅</h2>
- <ul>
- <li><a href="{@docRoot}preview/setup-sdk.html#docs-dl">N Preview SDK 参考</a>
-</li>
- </ul>
- </div>
-</div>
-
-<p>本文介绍了 Android N 中提供的新 Android for Work 功能。
-</p>
-
-<h2 id="qr">QR 码配置</h2>
-
-<p>
- Android for Work 现在支持使用 QR 码来配置企业负责的设备。
-安装向导现在允许您通过扫描 QR 码来配置设备。
-
-</p>
-
-<h2 id="sec-challenge">工作资料安全性挑战</h2>
-
-<p>
- 个人资料所有者可以要求用户为在工作资料中运行的应用指定安全性挑战。
-系统会在用户尝试打开任何工作应用时显示安全性挑战。
-如果用户成功完成安全性挑战,系统可解锁工作资料并将其解密(如果需要)。
-
-
-</p>
-
-<p>
- 如果个人资料所有者发送一项 {@link
- android.app.admin.DevicePolicyManager#ACTION_SET_NEW_PASSWORD} Intent,系统会提示用户设置一项安全性挑战。
-个人资料所有者也可以发送一项 <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> Intent 来提示用户设置设备锁定。
-
-
-</p>
-
-<p>
- 个人资料所有者可以选择为工作挑战设置不同于其他设备密码策略的密码策略。
-例如,设备挑战响应的最小长度可以与其它密码要求的长度不同。
-
-个人资料所有者使用常见的 {@link android.app.admin.DevicePolicyManager} 方法来设置挑战策略,如 {@link
- android.app.admin.DevicePolicyManager#setPasswordQuality
- setPasswordQuality()} 和 {@link
- android.app.admin.DevicePolicyManager#setPasswordMinimumLength
- setPasswordMinimumLength()}。
-
-个人资料所有者还能通过使用由新的 <code>DevicePolicyManager.getParentProfileInstance()</code> 方法返回的 {@link android.app.admin.DevicePolicyManager} 实例来设置设备锁定,
-
-
-此外,个人资料所有者可以使用 {@link android.app.admin.DevicePolicyManager} 类的新 <code>setOrganizationColor()</code> 和 <code>setOrganizationName()</code> 方法来自定义工作挑战的凭据屏幕。
-
-
-
-</p>
-
-<p>
- 有关新方法和常量的详细信息,请参阅 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">N Preview SDK 参考</a> 中的 <code>DevicePolicyManager</code> 参考页面。
-
-</p>
-
-<h2 id="suspend">停用应用访问</h2>
-
-<p>
- 设备所有者和个人资料所有者可以通过调用新 <code>DevicePolicyManager.setPackagesSuspended()</code> 方法来临时暂停软件包访问。
-
-所有者可以用同样的方法来重新启用这些软件包。
-</p>
-
-<p>
- 在软件包被暂停期间,它不能启动 Activity ,到软件包的通知会被阻止,而<a href="{@docRoot}guide/components/recents.html">概览屏幕</a>中的应用条目会被隐藏。
-
- 暂停的软件包不会显示在<a href="{@docRoot}guide/components/recents.html">概览屏幕</a>中,并且它们不能显示对话(包括提醒和 Snackbar),
-也不能播放音频或振动设备。
-
-</p>
-
-<p>
- 启动器应对暂停的应用应用一个独特的 UI,以指示应用目前不可用;例如它们可以将应用图标显示为灰色。
-
-启动器可以通过调用新 <code>DevicePolicyManager.getPackageSuspended()</code> 方法来确定应用是否被暂停。
-
-</p>
-
-<h2 id="toggle-work">切换工作模式</h2>
-
-<p>
- 在双个人资料设备上,用户可以打开或关闭工作模式。在工作模式关闭时,托管个人资料会被暂时关闭。
-工作资料应用、后台同步和通知都会被停用,包括个人资料所有者应用。
-
-在工作资料被停用时,系统会显示一个持久的状态图标,以提醒用户他们将无法启动工作应用。
-
-系统启动器会指示工作应用和小工具都将无法访问。
-
-</p>
-
-<h2 id="always-on-vpn">Always-On VPN</h2>
-
-<p>
- 设备所有者和个人资料所有者可以要求工作应用始终通过指定的 VPN 连接到网络。
-如果所有者设置了此要求,设备会在启动时自动开始 VPN。
-
-</p>
-
-<p>
- 所有者可以通过调用新 <code>DevicePolicyManager.setAlwaysOnVpnPackage()</code> 方法来要求使用 VPN。
-通过调用新 <code>DevicePolicyManager.GetAlwaysOnVpnPackage()</code> 方法来确定所有者是否设置了 VPN 要求。
-
-
-</p>
-
-<p>
- 由于 VPN 服务无需应用交互即可由系统直接绑定,因此,VPN 客户端必须针对 Always on VPN 处理新的入口点。
-像以前一样,您可以通过使用与操作 {@link android.net.VpnService android.net.VpnService} 匹配的 Intent 过滤器查找活动的服务。
-
-
-</p>
-
-<p>
- 用户可以使用 <strong>Settings > More > VPN</strong> 屏幕来手动设置实现 {@link
- android.net.VpnService} 的 Always on VPN 客户端。
-
-</p>
-
-<h2 id="contacts">联系人与工作资料集成</h2>
-
-<p>
- 个人资料所有者可以允许主用户对工作联系人进行本地搜索和目录查找。
-例如,用户可以从他们的个人拨号器或联系人应用访问个人和工作目录联系人(如果他们的个人资料管理员允许)。
-
-
-</p>
-
-<p>
- 利用联系人提供程序的开发者可以使用企业联系人 API 从主用户访问工作资料目录条目(如果策略允许):
-
-
-</p>
-
-<ul>
- <li><code>ContactsContract.Contacts.ENTERPRISE_CONTENT_FILTER_URI</code>
- </li>
-
- <li><code>ContactsContract.Phone.ENTERPRISE_CONTENT_FILTER_URI</code>
- </li>
-
- <li><code>ContactsContract.Email.ENTERPRISE_CONTENT_FILTER_URI</code>
- </li>
-
- <li><code>ContactsContract.Callable.ENTERPRISE_CONTENT_FILTER_URI</code>
- </li>
-
- <li><code>ContactsContract.Directory.ENTERPRISE_CONTENT_URI</code>
- </li>
-
- <li><code>ContactsContract.Directory.isEntepriseDirectoryId()</code>
- </li>
-</ul>
-
-<p>
- 个人资料所有者可以使用以下新方法来控制主用户的工作联系人可见性:
-
-</p>
-
-<ul>
- <li>
- <code>DevicePolicyManager.setCrossProfileContactsSearchDisabled()</code>
- </li>
-
- <li>
- <code>DevicePolicyManager.getCrossProfileContactsSearchDisabled()</code>
- </li>
-</ul>
-
-<h2 id="remote-reboot">远程重新启动</h2>
-
-<p>
- 设备所有者可以远程重新启动设备。有些情况下,部署在公共场所的封装内设备会阻止访问电源按钮。
-如果设备需要重新启动,管理员可以使用新 <code>DevicePolicyManager.reboot()</code> 方法来进行此操作。
-
-
-</p>
-
-<h2 id="disable-roaming">停用数据网络漫游</h2>
-
-<p>
- 设备所有者可以使用新的 {@link
- android.os.UserManager} 用户限制 <code>DISALLOW_DATA_ROAMING</code> 来停用数据网络漫游。
-</p>
-
-<h2 id="process-logging">企业进程记录</h2>
-
-<p>
- 设备所有者可以通过远程跟踪设备活动来识别可疑活动 ,包括应用启动、ADB Activity 和屏幕解锁。
-进程记录不要求用户同意。
-若要检索记录,设备所有者可以使用 <code>DevicePolicyManager.setSecurityLoggingEnabled()</code> 来启用设备记录。
-
-</p>
-
-<p>
- API 更改包括:
-</p>
-
-<ul>
-
- <li>
- 新类 <code>android.app.admin.SecurityLog</code> 和它的方法
-
- </li>
-
- <li>
- <code>void DevicePolicyManager.setSecurityLoggingEnabled()</code>
- </li>
-
- <li>
- <code>boolean DevicePolicyManager.isSecurityLoggingEnabled()</code>
- </li>
-
- <li>
- <code>List<SecurityEvent>
- DevicePolicyManager.retrieveSecurityLogs()</code>
- </li>
-
- <li>
- <code>List<SecurityEvent>
- DevicePolicyManager.retrievePreRebootSecurityLogs()</code>
- </li>
-
- <li>
- <code>void DeviceAdminReceiver.onSecurityLogsAvailable()</code>
- </li>
-</ul>
-
-<h2 id="bug-reports">远程错误报告</h2>
-
-<p>
- 设备所有者可以远程触发和检索包含设备状态转储文件的错误报告,这允许对已知事故或受损害的设备进行取证调查。
-
-鉴于错误报告的详细性质,需要经过用户同意。
-
-</p>
-
-<p>
- Android N 包括以下 API 添加来支持此功能。如需详细信息,请参阅 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">N Preview SDK 参考</a>。
-
-
-</p>
-
-<ul>
- <li>
- <code>DevicePolicyManager.requestBugreport()</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.onBugreportFailed()</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.onBugreportShared()</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.onBugreportSharingDeclined()</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.BUGREPORT_FAILURE_FAILED_COMPLETING</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.BUGREPORT_FAILURE_FILE_NO_LONGER_AVAILABLE</code>
- </li>
-</ul>
-
-<h2 id="remove-cert">移除客户端证书</h2>
-
-<p>
- 个人资料所有者和设备所有者现在可以通过调用新方法 <code>DevicePolicyManager.removeKeyPair()</code> 来移除通过 {@link android.app.admin.DevicePolicyManager#installKeyPair
- installKeyPair()} 安装的客户端证书。
-
-
-</p>
-
-<h2 id="grant-cert-on-install">允许访问安装设备上的客户端证书
-</h2>
-
-<p>
- 如果个人资料所有者或设备所有者授予第三方应用管理证书的权限,应用便可授予自身访问其所安装证书的权限,无需所有者进行任何干预。
-
-
-</p>
-
-<p>
- 用于管理证书的现有 API 经过扩展,现包括:
-</p>
-
-<ul>
- <li><code>DevicePolicyManager.installKeyPair()</code>
- </li>
-</ul>
-
-<h2 id="ui-policy">系统 UI 策略透明度</h2>
-
-<p>
- 影响用户体验或限制用户设置的策略是向用户完全公开的,个人资料所有者和设备所有者可以将策略归于他们公司的 IT 部门。
-
-除了“Settings”中一贯的“Action not allowed”消息之外,IT 管理员可以通过以下新 {@link android.app.admin.DevicePolicyManager} 方法在设备设置中设置组织特定的支持消息:
-
-
-
-</p>
-
-<ul>
- <li>
- <code>DevicePolicyManager.setShortSupportMessage()</code>
- </li>
-
- <li>
- <code>DevicePolicyManager.setLongSupportMessage()</code>
- </li>
-</ul>
-
-<h2 id="restrictions-mgmt">应用限制管理增强</h2>
-
-<p>
- 设备或个人资料所有者可以通过新 <code>DevicePolicyManager.setApplicationRestrictionsManagingPackage()</code> 方法启用另一项应用,以管理应用限制。
-
-
-提名的应用可以通过调用 <code>DevicePolicyManager.isCallerApplicationRestrictionsManagingPackage()</code> 来检查是否已被授予此权限。
-
-
-</p>
-
-<p>
- 提名管理应用限制的应用可以为该用户或个人资料内的任何软件包调用 {@link
- android.app.admin.DevicePolicyManager#setApplicationRestrictions
- setApplicationRestrictions()} 和 {@link
- android.app.admin.DevicePolicyManager#getApplicationRestrictions
- getApplicationRestrictions()}。
-</p>
-
-<h2 id="location-off">位置关闭开关</h2>
-
-<p>
- 用户可以停用工作应用的位置权限,同时仍可继续在个人应用中访问位置信息。
-Location Settings 中的一个单独的位置访问开关允许用户拒绝对工作资料内运行的应用的位置更新或最后位置查询。
-
-
-</p>
-
-<p>
- 顶层位置关闭开关停用对主个人资料和托管个人资料的位置访问权限。
-
-</p>
-
-<h2 id="custom-provisioning">自定义配置</h2>
-
-<p>
- 应用可以用企业颜色和徽标来自定义个人资料所有者和设备所有者配置流程。
-
-</p>
-
-<dl>
- <dt>
- <code>DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR</code>
- </dt>
-
- <dd>
- 自定义流程颜色。
- </dd>
-
- <dt>
- <code>DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI</code>
- </dt>
-
- <dd>
- 用企业徽标来自定义流程。
- </dd>
-</dl>
-
-<h2 id="multi-wifi-ca">多 Wi-Fi CA 证书</h2>
-
-<p>
- 个人资料所有者和设备所有者可以为一项指定的 Wi-Fi 配置设置多个 CA 证书。
-如果企业 Wi-Fi 网络针对有相同 SSID 的独立接入点设置了独立 CA,IT 管理员可以使用新 <code>setCaCertificates()</code> 方法将所有相关 CA 包括在 Wi-Fi 配置中。
-
-
-
-</p>
-
-<p>
- 添加的 API 有:
-</p>
-
-<ul>
- <li>
- <code>WifiEnterpriseConfig.setCaCertificates()</code>
- </li>
-
- <li>
- <code>WifiEnterpriseConfig.getCaCertificates()</code>
- </li>
-</ul>
-
-<h2 id="custom-lock">自定义锁屏消息</h2>
-
-<p>
- 设备所有者可以提供将显示在锁屏上的所有者信息。
- 该信息的优先级高于用户锁屏消息(如果已设置)。
-新 {@link android.app.admin.DevicePolicyManager} 方法有:
-</p>
-
-<ul>
- <li>
- <code>setDeviceOwnerLockScreenInfo()</code>
- </li>
-
- <li>
- <code>getDeviceOwnerLockScreenInfo()</code>
- </li>
-</ul>
-
-<h2 id="work-connectionservice">工作资料 ConnectionService</h2>
-
-<p>
- 个人资料所有者可以为调用后端(调用帐户)指定一项使用工作特定 {@link android.telecom.ConnectionService} 的工作拨号器应用。
-
-工作拨号器会保持仅限工作的调用记录,并仅依赖于工作联系人。
-无论拨号应用是什么,用户都将获得一致的调用内 UI 体验。
-传入到工作调用帐户的工作调用会与传入到个人调用帐户的个人调用相区别。
-
-
-</p>
-
-<p>
- 拨号器应检查新标记 <code>android.telecom.Call.PROPERTY_WORK_CALL</code>,以确定一项调用是否是工作调用。
-
-如果一项调用是工作调用,拨号器应通过添加工作徽章等方式做如此指示。
-
-</p>
-
-<h2 id="lock-wp">锁定壁纸</h2>
-
-<p>
- 新的用户限制 (<code>DISALLOW_SET_WALLPAPER</code>) 可以阻止用户更改他们的壁纸。
-设备所有者或个人资料所有者仍可以改变壁纸,但只能更改他们控制的用户或个人资料的壁纸。
-
-例如,个人资料所有者不能更改父用户的壁纸,但主个人资料的个人资料所有者或设备所有者却可以。
-
-想要更改壁纸的个人资料所有者或设备所有者应检查他们管理的用户或个人资料是否有壁纸 ({@link android.app.WallpaperManager#isWallpaperSupported
- isWallpaperSupported()}) 以及他们是否被允许更改这个壁纸(通过新方法 <code>WallpaperManager.isWallpaperSettingAllowed()</code>)。
-
-
-
-</p>
-
-<h2 id="lock-user-icon">锁定用户图标</h2>
-
-<p>
- 新的用户限制 (<code>DISALLOW_SET_USER_ICON</code>) 阻止用户更改其用户图标。
-用户的设备所有者或个人资料所有者仍可以更改图标。
-但是个人资料所有者只能更改其控制的个人资料的用户图标。
-
-</p>
-
-<h2 id="health-monitoring">设备运行状况监测</h2>
-
-<p>
- 设备所有者或个人资料所有者可以使用新的 <code>HardwarePropertiesManager</code> 界面来检索有关设备运行状况的信息,如 CPU 或 GPU 温度和 CPU 使用率。
-
-新的监测界面特别适合监测在远程位置运行的无人值守设备。
-
-
-</p>
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/data-saver.jd b/docs/html-intl/intl/zh-cn/preview/features/data-saver.jd
deleted file mode 100644
index 203e8b1..0000000
--- a/docs/html-intl/intl/zh-cn/preview/features/data-saver.jd
+++ /dev/null
@@ -1,234 +0,0 @@
-page.title=Data Saver
-metaDescription=用户启用的流量消耗优化。
-page.keywords="android N", "data usage", "metered network"
-page.image=images/cards/card-nyc_2x.jpg
-@jd:body
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>
- 本文内容
- </h2>
-
- <ol>
- <li>
- <a href="#status">检查 Data Saver 首选项</a>
- <ol>
- <li>
- <a href="#request-whitelist">请求白名单权限</a>
- </li>
- </ol>
- </li>
-
- <li>
- <a href="#monitor-changes">监控 Data Saver 首选项变更</a>
-
- </li>
-
- <li>
- <a href="#testing">使用 Android 调试桥命令测试</a>
- </li>
- </ol>
- </div>
-</div>
-
-<p>
- 在智能手机的整个生命周期,蜂窝数据计划的成本通常会超出设备本身的成本。
-在 N Developer Preview 中,用户可以在整个设备上启用 Data Saver,以减少流量消耗,无论是在漫游,账单周期即将结束,还是使用少量的预付费数据包。
-
-
-</p>
-
-<p>
- 当用户在 <strong>Settings</strong> 中启用 Data Saver 且设备位于按流量计费的网络上时,系统屏蔽后台流量消耗,同时指示应用在前台尽可能使用较少的数据。
-
-用户可以将特定应用加入白名单以允许后台按流量计费的流量消耗,即使在打开 Data Saver 时也是如此。
-
-
-</p>
-
-<p>
- N Developer Preview 扩展{@link android.net.ConnectivityManager} API,为应用提供<a href="#status">检索用户的 Data Saver 首选项</a>和<a href="#monitor-changes">监控首选项变更的方式</a>。
-
-
-这被认为是应用检查用户是否启用了 Data Saver 并努力限制前台和后台流量消耗的有效方法。
-
-
-</p>
-
-<h2 id="status">
- 检查 Data Saver 首选项
-</h2>
-
-<p>
- 在 N Developer Preview 中,应用可以使用 {@link
- android.net.ConnectivityManager} API 来确定正在应用的是哪些流量消耗限制。
-{@code getRestrictBackgroundStatus()}方法返回下列值之一:
-
-</p>
-
-<dl>
- <dt>
- {@code RESTRICT_BACKGROUND_STATUS_DISABLED}
- </dt>
-
- <dd>
- Data Saver 已禁用。
- </dd>
-
- <dt>
- {@code RESTRICT_BACKGROUND_STATUS_ENABLED}
- </dt>
-
- <dd>
- 用户已为此应用禁用 Data Saver。应用应努力限制前台流量消耗,并妥善处理后台流量消耗限制。
-
-
- </dd>
-
- <dt>
- {@code RESTRICT_BACKGROUND_STATUS_WHITELISTED}
- </dt>
-
- <dd>
- 用户已启用 Data Saver,但应用在白名单中。应用应努力限制前台和后台流量消耗。
-
- </dd>
-</dl>
-
-<p>
- 这被认为是在设备连接到按流量计费的网络时限制流量消耗的有效方法,即使 Data Saver 被禁用或应用在白名单中。
-
-以下示例代码使用 {@link
- android.net.ConnectivityManager#isActiveNetworkMetered
- ConnectivityManager.isActiveNetworkMetered()} 和 {@code
- ConnectivityManager.getRestrictBackgroundStatus()} 来确定应用应使用多少数据:
-
-</p>
-
-<pre>
-ConnectivityManager connMgr = (ConnectivityManager)
- getSystemService(Context.CONNECTIVITY_SERVICE);
-// Checks if the device is on a metered network
-if (connMgr.isActiveNetworkMetered()) {
- // Checks user’s Data Saver settings.
- switch (connMgr.getRestrictBackgroundStatus()) {
- case RESTRICT_BACKGROUND_STATUS_ENABLED:
- // Background data usage is blocked for this app. Wherever possible,
- // the app should also use less data in the foreground.
-
- case RESTRICT_BACKGROUND_STATUS_WHITELISTED:
- // The app is whitelisted. Wherever possible,
- // the app should use less data in the foreground and background.
-
- case RESTRICT_BACKGROUND_STATUS_DISABLED:
- // Data Saver is disabled. Since the device is connected to a
- // metered network, the app should use less data wherever possible.
- }
-} else {
- // The device is not on a metered network.
- // Use data as required to perform syncs, downloads, and updates.
-}
-</pre>
-
-<h3 id="request-whitelist">
- 请求白名单权限
-</h3>
-
-<p>
- 如果您的应用需要使用后台数据,它可以通过发送一项包含您的应用软件包名称的 URI 的 <code>Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS</code> Intent 来请求白名单权限:例如 <code>package:MY_APP_ID</code>。
-
-
-
-
-</p>
-
-<p>
- 发送 Intent 和 URI 将启动 <strong>Settings</strong> 应用,还会显示您的应用的流量消耗设置。
-用户随后可以决定是否启用应用的后台数据。
-在您发送此 Intent 之前,先询问用户是否希望启用 <strong>Settings</strong> 应用,以启用后台流量消耗,这是一种有效的做法。
-
-
-
-</p>
-
-<h2 id="monitor-changes">
- 监控 Data Saver 首选项变更
-</h2>
-
-<p>
- 应用可以通过创建一条 {@link
-android.content.BroadcastReceiver} 以侦听 {@code
- ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED} 以及使用 {@link android.content.Context#registerReceiver
- Context.registerReceiver()}动态注册接收器来监控 Data Saver 首选项变更。
-当应用接收到这条广播时,应通过调用 {@code
- ConnectivityManager.getRestrictBackgroundStatus()} 来<a href="#status">检查新的 Data Saver 首选项是否会影响其权限</a>。
-
-
-</p>
-
-<p class="note">
- <strong>注:</strong>系统只会向使用 {@link
- android.content.Context#registerReceiver Context.registerReceiver()} 进行动态注册的应用发送此广播。
-在其清单中注册接收此广播的应用将不会收到它们。
-
-
-</p>
-
-<h2 id="testing">
- 使用 Android 调试桥命令测试
-</h2>
-
-<a href="{@docRoot}tools/help/adb.html">Android 调试桥 (ADB)</a> 提供了多条命令,可用于检查和配置网络权限:
-
-
-
-<dl>
- <dt>
- <code>$ adb shell dumpsys netpolicy</code>
- </dt>
-
- <dd>
- 生成包括当前全局后台网络限制设置、目前在白名单中的软件包 UID 以及其他已知软件包的权限的报告。
-
-
- </dd>
-
- <dt>
- <code>$ adb shell cmd netpolicy</code>
- </dt>
-
- <dd>
- 显示网络政策管理器 (netpolicy) 命令的完整清单。
- </dd>
-
- <dt>
- <code>$ adb shell cmd netpolicy set restrict-background
- <boolean></code>
- </dt>
-
- <dd>
- 当分别传递 <code>true</code> 或 <code>false</code> 时,启用或禁用 Data Saver 模式。
-
- </dd>
-
- <dt>
- <code>$ adb shell cmd netpolicy add restrict-background-whitelist
- <UID></code>
- </dt>
-
- <dd>
- 将指定软件包 UID 加入白名单,以允许后台按流量计费的流量消耗
-。
- </dd>
-
- <dt>
- <code>$ adb shell cmd netpolicy remove restrict-background-whitelist
- <UID></code>
- </dt>
-
- <dd>
- 从白名单中移除指定软件包 UID,以阻止当 Data Saver 启用时后台按流量计费的流量消耗。
-
- </dd>
-</dl>
\ No newline at end of file
diff --git a/docs/html-intl/intl/zh-cn/preview/features/direct-boot.jd b/docs/html-intl/intl/zh-cn/preview/features/direct-boot.jd
deleted file mode 100644
index 306a7a4..0000000
--- a/docs/html-intl/intl/zh-cn/preview/features/direct-boot.jd
+++ /dev/null
@@ -1,181 +0,0 @@
-page.title=直接启动
-page.keywords=Preview、SDK、直接启动
-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="#run">请求在直接启动时运行</a></li>
- <li><a href="#access">访问设备加密存储</a></li>
- <li><a href="#notification">接收用户解锁通知</a></li>
- <li><a href="#migrating">迁移现有数据</a></li>
- <li><a href="#testing">测试您的加密感知应用</a></li>
- </ol>
-</div>
-</div>
-
-<p>当设备已开机但用户尚未解锁设备时,Android N 将在安全的“直接启动”模式下运行。<i></i>
-
-为支持此操作,系统为数据提供两个存储位置:</p>
-
-<ul>
-<li><i>凭据加密存储</i>,这是默认存储位置,仅在用户解锁设备后可用。
-</li>
-<li><i>设备加密存储</i>,该存储位置在“直接启动”模式下和用户解锁设备后均可使用。
-</li>
-</ul>
-
-<p>默认情况下,应用不会在“直接启动”模式下运行。如果您的应用需要在“直接启动”模式下进行操作,您可以注册在此模式期间应运行的应用组件。
-
-对于需要在“直接启动”模式下运行的应用,常见的一些用例包括:
-</p>
-
-<ul>
-<li>已安排通知的应用,如闹钟应用。
-</li>
-<li>提供重要用户通知的应用,如短信应用。</li>
-<li>提供无障碍服务的应用,如 Talkback。</li>
-</ul>
-
-<p>如果您的应用在“直接启动”模式下运行时需要访问数据,则使用设备加密存储。
-设备加密存储包含使用密钥加密的数据,仅在设备已成功执行验证启动后密钥才可用。
-
-</p>
-
-<p>对于应使用与用户凭据(如 PIN 或密码)关联的密钥加密的数据,请使用凭据加密存储。凭据加密存储仅在用户已成功解锁设备后可用,直到用户再次重启设备。
-
-
-如果用户在解锁设备后启用锁定屏幕,则不会锁定凭据加密存储。
-
-</p>
-
-<h2 id="run">请求在直接启动时运行</h2>
-
-<p>应用必须先向系统注册其组件,然后才能在“直接启动”模式下运行或访问设备加密存储。
-
-应用通过将组件标记为“加密感知”来注册系统。
-<i></i>若要将您的组件标记为加密感知,请在清单中将 <code>android:directBootAware</code> 属性设为 true。
-<p>
-
-<p>当设备重启后,加密感知组件可以注册接收来自系统的 <code>LOCKED_BOOT_COMPLETED</code> 广播消息。
-
-此时设备加密存储可用,您的组件可以在“直接启动”模式下执行需要运行的任务,例如触发已设定的闹铃。
-
-</p>
-
-<p>以下代码段展示如何将
-{@link android.content.BroadcastReceiver} 注册为加密感知并在应用清单中为 <code>LOCKED_BOOT_COMPLETED</code> 添加 Intent 过滤器:
-</p>
-
-<pre>
-<receiver
- android:directBootAware="true" >
- ...
- <intent-filter>
- <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
- </intent-filter>
-</receiver>
-</pre>
-
-<p>在用户解锁设备后,所有组件均可访问设备加密存储以及凭据加密存储。
-</p>
-
-<h2 id="access">访问设备加密存储</h2>
-
-<p>要访问设备加密存储,请通过调用
-<code>Context.createDeviceProtectedStorageContext()</code> 创建另一个
-{@link android.content.Context} 实例。使用此上下文执行的所有存储 API 调用均访问设备加密存储。
-以下示例访问设备加密存储并打开现有应用数据文件:
-
-</p>
-
-<pre>
-Context directBootContext = appContext.createDeviceProtectedStorageContext();
-// Access appDataFilename that lives in device encrypted storage
-FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
-// Use inStream to read content...
-</pre>
-
-<p>仅针对在“直接启动”模式下必须可访问的信息使用设备加密存储。请勿将设备加密存储用作通用加密存储。对于专有用户信息,或在“直接启动”模式下不需要的加密数据,请使用凭据加密存储。
-
-
-
-</p>
-
-<h2 id="notification">接收用户解锁通知</h2>
-
-<p>重启后一旦用户解锁了设备,您的应用即可切换至访问凭据加密存储,并使用依赖用户凭据的常规系统服务。
-
-</p>
-
-<p>为了在重启后用户解锁设备时收到通知,请从一个正在运行的组件注册 {@link android.content.BroadcastReceiver} 以侦听 <code>ACTION_USER_UNLOCKED</code> 消息。
-
-或者,您可以接收现有 {@link android.content.Intent#ACTION_BOOT_COMPLETED
-ACTION_BOOT_COMPLETED} 消息,该消息现在表明设备已启动,且用户已解锁设备。
-
-</p>
-
-<p>您可以通过调用 <code>UserManager.isUserUnlocked()</code> 直接查询用户是否已解锁设备。
-</p>
-
-<h2 id="migrating">迁移现有数据</h2>
-
-<p>如果用户将其设备更新为使用“直接启动”模式,您可能需要将现有数据迁移到设备加密存储。
-使用
-<code>Context.moveSharedPreferencesFrom()</code> 和
-<code>Context.moveDatabaseFrom()</code> 在凭据加密存储和设备加密存储之间迁移首选项和数据库数据。
-</p>
-
-<p>请运用您的最佳判断来决定从凭据加密存储向设备加密存储迁移哪些数据。
-您不应将专有用户信息(如密码或权限令牌)迁移到设备加密存储。
-
-。在某些情况下,您可能需要在这两个加密存储中管理单独的数据集。
-</p>
-
-<h2 id="testing">测试您的加密感知应用</h2>
-
-<p>使用新的“直接启动”模式测试您的加密感知应用。有两种方式可以启用直接启动模式:
-</p>
-
-<p class="caution"><strong>注意:</strong>启用“直接启动”将擦除设备上的所有用户数据。
-</p>
-
-<p>在已安装 Android N 的受支持的设备上,通过执行以下操作之一启用“直接启动”:
-</p>
-
-<ul>
-<li>在设备上,如果您尚未启用 <b>Developer options</b>,则可通过转到 <b>Settings > About phone</b> 并点击 <b>Build number</b> 七次启用它。
-
-当开发者选项屏幕可用后,转到 <b>Settings > Developer options</b> 并选择 <b>Convert to file encryption</b>。
-
-</li>
-<li>使用以下 adb shell 命令启用“直接启动”模式:
-<pre class="no-pretty-print">
-$ adb reboot-bootloader
-$ fastboot --wipe-and-use-fbe
-</pre>
-</li>
-</ul>
-
-<p>另外,还提供模拟直接启动模式,以防您需要在测试设备上切换模式。
-模拟模式应仅在开发期间使用,否则可能导致数据丢失。
-若要启用模拟直接启动模式,请在设备上设置锁定模式,如果在设置锁定模式时系统提示安全启动屏幕,则选择“No thanks”,然后使用以下 adb shell 命令:
-
-
-</p>
-
-<pre class="no-pretty-print">
-$ adb shell sm set-emulate-fbe true
-</pre>
-
-<p>若要关闭模拟直接启动模式,请使用以下命令:</p>
-
-<pre class="no-pretty-print">
-$ adb shell sm set-emulate-fbe false
-</pre>
-
-<p>使用这些命令会导致设备重启。</p>
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/multi-window.jd b/docs/html-intl/intl/zh-cn/preview/features/multi-window.jd
deleted file mode 100644
index cfcdf6d..0000000
--- a/docs/html-intl/intl/zh-cn/preview/features/multi-window.jd
+++ /dev/null
@@ -1,589 +0,0 @@
-page.title=多窗口支持
-page.metaDescription=Android N 全新支持同时显示多个应用窗口。
-page.keywords="multi-window", "android N", "split screen", "free-form"
-
-@jd:body
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>本文内容</h2>
- <ol>
- <li><a href="#overview">概览</a></li>
- <li><a href="#lifecycle">多窗口生命周期</a></li>
- <li><a href="#configuring">针对多窗口模式配置应用
-</a></li>
- <li><a href="#running">在多窗口模式中运行应用</a></li>
- <li><a href="#testing">测试应用的多窗口支持</a></li>
- </ol>
- <h2>另请参阅</h2>
- <ol>
- <li><a class="external-link" href="https://github.com/googlesamples/android-MultiWindowPlayground">多窗口 Playground 示例应用
-</a></li>
- <li><a class="external-link" href="https://medium.com/google-developers/5-tips-for-preparing-for-multi-window-in-android-n-7bed803dda64">在 Android N 为多窗口做准备的五条建议</a></li>
- </ol>
- </div>
-</div>
-
-<p>
- Android N 添加了对同时显示多个应用窗口的支持。
-在手持设备上,两个应用可以在“分屏”模式中左右并排或上下并排显示。
-<em></em>在电视设备上,应用可以使用“画中画”模式,在用户与另一个应用交互的同时继续播放视频。
-
-<em></em>
-</p>
-
-<p>
- 如果您使用 N Preview SDK 构建应用,则可以配置应用处理多窗口显示的方法。
-例如,您可以指定 Activity 的最小允许尺寸。
-您还可以禁用应用的多窗口显示,确保系统仅以全屏模式显示应用。
-
-
-</p>
-
-<h2 id="overview">概览</h2>
-
-<p>
- Android N 允许多个应用同时共享屏幕。例如,用户可以分屏显示应用,在左边查看网页,同时在右边写邮件。
-
-用户体验取决于设备:
-
-</p>
-
-<ul>
- <li>运行 Android N 的手持设备具有分屏模式。
-在此模式中,系统以左右并排或上下并排的方式分屏显示两个应用。
-用户可以拖动两个应用之间的分界线,放大其中一个应用,同时缩小另一个。
-
- </li>
-
- <li>在运行 Android N 的 Nexus Player 上,应用能以<a href="picture-in-picture.html">画中画模式</a>显示,即在用户浏览网页或与其他应用交互的同时继续显示内容。
-
-
-
- </li>
-
- <li>较大设备的制造商可选择启用自由形状模式,在该模式中,用户可以自由调整各 Activity 的尺寸。
-若制造商启用此功能,设备将同时具有自由形状模式和分屏模式。
-
-
- </li>
-</ul>
-
-<img src="{@docRoot}preview/images/mw-splitscreen.png" alt="" width="650" srcset="{@docRoot}preview/images/mw-splitscreen.png 1x,
- {@docRoot}preview/images/mw-splitscreen_2x.png 2x," id="img-split-screen" />
-<p class="img-caption">
- <strong>图 1.</strong> 两个应用在分屏模式中左右并排显示。
-</p>
-
-<p>
- 用户可以通过以下方式切换到多窗口模式:
-</p>
-
-<ul>
- <li>若用户打开 <a href="{@docRoot}guide/components/recents.html">Overview 屏幕</a>并长按 Activity 标题,则可以拖动该 Activity 至屏幕突出显示的区域,使 Activity 进入多窗口模式。
-
-
-
- </li>
-
- <li>若用户长按 Overview 按钮,设备上的当前 Activity 将进入多窗口模式,同时将打开 Overview 屏幕,用户可在该屏幕中选择要共享屏幕的另一个 Activity。
-
-
- </li>
-</ul>
-
-<p>
- 用户可以在两个 Activity 共享屏幕的同时在这两个 Activity 之间<a href="{@docRoot}guide/topics/ui/drag-drop.html">拖放</a>数据
-
-(在此之前,用户只能在一个 Activity 内部拖放数据)。
-
-</p>
-
-<h2 id="lifecycle">多窗口生命周期</h2>
-
-<p>
- 多窗口模式不会更改 <a href="{@docRoot}training/basics/activity-lifecycle/index.html">Activity 生命周期</a>。
-
-</p>
-
-<p>
- 在多窗口模式中,在指定时间只有最近与用户交互过的 Activity 为活动状态。
-该 Activity 将被视为顶级 Activity。<em></em>
- 所有其他 Activity 虽然可见,但均处于暂停状态。
- 但是,这些已暂停但可见的 Activity 在系统中享有比不可见 Activity 更高的优先级。
-如果用户与其中一个暂停的 Activity 交互,该 Activity 将恢复,而之前的顶级 Activity 将暂停。
-
-
-</p>
-
-<p class="note">
- <strong>注:</strong>在多窗口模式中,用户仍可以看到处于暂停状态的应用。
-应用在暂停状态下可能仍需要继续其操作。
-例如,处于暂停模式但可见的视频播放应用应继续显示视频。
-因此,我们建议播放视频的 Activity 不要暂停其 {@link android.app.Activity#onPause onPause()} 处理程序中的视频。
-
-<em></em>
- 应暂停 {@link android.app.Activity#onStop
- onStop()} 中的视频,并恢复 {@link android.app.Activity#onStart
- onStart()} 中的视频播放。
-</p>
-
-<p>
- 如<a href="{@docRoot}guide/topics/resources/runtime-changes.html">处理运行时变更</a>中所述,用户使用多窗口模式显示应用时,系统将通知 Activity 发生配置变更。
-
-这也会发生在当用户调整应用大小,或将应用恢复到全屏模式时。
-
- 该变更与系统通知应用设备从纵向模式切换到横向模式时的 Activity 生命周期影响基本相同,但设备不仅仅是交换尺寸,而是会变更尺寸。
-
-
-如<a href="{@docRoot}guide/topics/resources/runtime-changes.html">处理运行时变更</a>中所述,您的 Activity 可以自行处理配置变更,或允许系统销毁 Activity,并以新的尺寸重新创建该 Activity。
-
-
-
-</p>
-
-<p>
- 如果用户调整窗口大小,并在任意维度放大窗口尺寸,系统将调整 Activity 以匹配用户操作,同时根据需要发布<a href="{@docRoot}guide/topics/resources/runtime-changes.html">运行时变更</a>。
-
-如果应用在新公开区域的绘制滞后,系统将使用 {@link
- android.R.attr#windowBackground windowBackground} 属性或默认 <code>windowBackgroundFallback</code> 样式属性指定的颜色暂时填充该区域。
-
-
-</p>
-
-<h2 id="configuring">针对多窗口模式配置应用</h2>
-
-<p>
- 如果您的应用面向 Android N,您可以对应用的 Activity 是否支持多窗口显示以及显示方式进行配置。
-您可以在清单文件中设置属性,以控制大小和布局。
-
- 根 Activity 的属性设置适用于其任务栈中的所有 Activity。
-例如,如果根 Activity 已 <code>android:resizeableActivity</code> 设定为 true,则任务栈中的所有 Activity 都将可以调整大小。
-
-
-</p>
-
-<p class="note">
- <strong>注:</strong>如果您使用低于 Android N 版本的 SDK 构建多向应用,则用户在多窗口模式中使用应用时,系统将强制调整应用大小。
-
-系统将显示对话框,提醒用户应用可能会发生异常。
-系统不会调整定向应用的大小;如果用户尝试在多窗口模式下打开定向应用,应用将全屏显示。
-
-
-<em></em>
-</p>
-
-<h4 id="resizeableActivity">android:resizeableActivity</h4>
-<p>
- 在清单的 <code><activity></code> 或
- <code><application></code> 节点中设置该属性,启用或禁用多窗口显示:
-
-</p>
-
-<pre>
-android:resizeableActivity=["true" | "false"]
-</pre>
-
-<p>
- 如果该属性设置为 true,Activity 将能以分屏和自由形状模式启动。
-如果此属性设置为 false,Activity 将不支持多窗口模式。
-如果该值为 false,且用户尝试在多窗口模式下启动 Activity,该 Activity 将全屏显示。
-
-
-</p>
-
-<p>
- 如果您的应用面向 Android N,但未对该属性指定值,则该属性的值默认设为 true。
-
-</p>
-
-<h4 id="supportsPictureInPicture">android:supportsPictureInPicture</h4>
-
-<p>
- 在清单文件的 <code><activity></code> 节点中设置该属性,指明 Activity 是否支持画中画显示。
-如果 <code>android:resizeableActivity</code> 为 false,将忽略该属性。
-
-</p>
-
-<pre>
-android:supportsPictureInPicture=["true" | "false"]
-</pre>
-
-<h3 id="layout">布局属性</h3>
-
-<p>
- 对于 Android N,<code><layout></code> 清单元素支持以下几种属性,这些属性影响 Activity 在多窗口模式中的行为:
-
-
-</p>
-
-<dl>
- <dt>
- <code>android:defaultWidth</code>
- </dt>
-
- <dd>
- 以自由形状模式启动时 Activity 的默认宽度。
- </dd>
-
- <dt>
- <code>android:defaultHeight</code>
- </dt>
-
- <dd>
- 以自由形状模式启动时 Activity 的默认高度。
- </dd>
-
- <dt>
- <code>android:gravity</code>
- </dt>
-
- <dd>
- 以自由形状模式启动时 Activity 的初始位置。请参阅 {@link android.view.Gravity} 参考资料,了解合适的值设置。
-
- </dd>
-
- <dt>
- <code>android:minimalHeight</code>、<code>android:minimalWidth</code>
- </dt>
-
- <dd>
- 分屏和自由形状模式中 Activity 的最小高度和最小宽度。
-如果用户在分屏模式中移动分界线,使 Activity 尺寸低于指定的最小值,系统会将 Activity 裁剪为用户请求的尺寸。
-
-
- </dd>
-</dl>
-
-<p>
- 例如,以下节点显示了如何指定 Activity 在自由形状模式中显示时 Activity 的默认大小、位置和最小尺寸:
-
-
-</p>
-
-<pre>
-<activity android:name=".MyActivity">
- <layout android:defaultHeight="500dp"
- android:defaultWidth="600dp"
- android:gravity="top|end"
- android:minimalHeight="450dp"
- android:minimalWidth="300dp" />
-</activity>
-</pre>
-
-<h2 id="running">在多窗口模式中运行应用</h2>
-
-<p>
- Android N 添加了新功能,以支持可在多窗口模式中运行的应用。
-
-</p>
-
-<h3 id="disabled-features">多窗口模式中被禁用的功能</h3>
-
-<p>
- 在设备处于多窗口模式中时,某些功能会被禁用或忽略,因为这些功能对与其他 Activity 或应用共享设备屏幕的 Activity 而言没有意义。
-
-此类功能包括:
-
-<ul>
- <li>某些<a href="{@docRoot}training/system-ui/index.html">系统 UI</a> 自定义选项将被禁用;例如,在非全屏模式中,应用无法隐藏状态栏。
-
-
- </li>
-
- <li>系统将忽略对 <code><a href=
- "{@docRoot}guide/topics/manifest/activity-element.html#screen"
- >android:screenOrientation</a></code> 属性所作的更改。
- </li>
-</ul>
-
-<h3 id="change-notification">多窗口变更通知和查询</h3>
-
-<p>
- {@link android.app.Activity} 类中添加了以下新方法,以支持多窗口显示。
-有关各方法的详细信息,请参阅 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">N Preview SDK 参考</a>。
-
-
-</p>
-
-<dl>
- <dt>
- <code>Activity.isInMultiWindowMode()</code>
- </dt>
-
- <dd>
- 调用该方法以确认 Activity 是否处于多窗口模式。
- </dd>
-
- <dt>
- <code>Activity.isInPictureInPictureMode()</code>
- </dt>
-
- <dd>
- 调用该方法以确认 Activity 是否处于画中画模式。
-
- <p class="note">
- <strong>注:</strong>画中画模式是多窗口模式的特例。
-如果 <code>myActivity.isInPictureInPictureMode()</code> 返回 true,则 <code>myActivity.isInMultiWindowMode()</code> 也返回 true。
-
-
- </p>
- </dd>
-
- <dt>
- <code>Activity.onMultiWindowModeChanged()</code>
- </dt>
-
- <dd>
- Activity 进入或退出多窗口模式时系统将调用此方法。
-在 Activity 进入多窗口模式时,系统向该方法传递 true 值,在退出多窗口模式时,则传递 false 值。
-
-
- </dd>
-
- <dt>
- <code>Activity.onPictureInPictureModeChanged()</code>
- </dt>
-
- <dd>
- Activity 进入或退出画中画模式时系统将调用此方法。
-在 Activity 进入画中画模式时,系统向该方法传递 true 值,在退出画中画模式时,则传递 false 值。
-
-
- </dd>
-</dl>
-
-<p>
- 每个方法还有 {@link android.app.Fragment} 版本,例如 <code>Fragment.isInMultiWindowMode()</code>。
-
-</p>
-
-<h3 id="entering-pip">进入画中画模式</h3>
-
-<p>
- 如需在画中画模式中启动 Activity,请调用新方法 <code>Activity.enterPictureInPictureMode()</code>。
-如果设备不支持画中画模式,则此方法无效。
-如需了解详细信息,请参阅<a href="picture-in-picture.html">画中画</a>文档。
-
-</p>
-
-<h3 id="launch">在多窗口模式中启动新 Activity</h3>
-
-<p>
- 在启动新 Activity 时,用户可以提示系统如果可能,应将新 Activity 显示在当前 Activity 旁边。
-要执行此操作,可使用标志 <code>Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT</code>。
-
-传递此标志将请求以下行为:
-
-</p>
-
-<ul>
- <li>如果设备处于分屏模式,系统会尝试在启动系统的 Activity 旁创建新 Activity,这样两个 Activity 将共享屏幕。
-
-系统并不一定能实现此操作,但如果可以,系统将使两个 Activity 处于相邻的位置。
-
- </li>
-
- <li>如果设备不处于分屏模式,则该标志无效。
- </li>
-</ul>
-
-<p>
- 如果设备处于自由形状模式,则在启动新 Activity 时,用户可通过调用 <code>ActivityOptions.setLaunchBounds()</code> 指定新 Activity 的尺寸和屏幕位置。
-
-如果设备不处于多窗口模式,则该方法无效。
-
-</p>
-
-<p class="note">
- <strong>注:</strong>如果您在任务栈中启动 Activity,该 Activity 将替换屏幕上的 Activity,并继承其所有的多窗口属性。
-
-如果要在多窗口模式中以单独的窗口启动新 Activity,则必须在新的任务栈中启动此 Activity。
-
-</p>
-
-<h3 id="dnd">支持拖放</h3>
-
-<p>
- 用户可以在两个 Activity 共享屏幕的同时在这两个 Activity 之间<a href="{@docRoot}guide/topics/ui/drag-drop.html">拖放</a>数据
-
-(在此之前,用户只能在一个 Activity 内部拖放数据)。
-因此,如果您的应用目前不支持拖放功能,您可以在其中添加此功能。
-
-</p>
-
-<p>
- N Preview SDK 扩展了 <a href="{@docRoot}reference/android/view/package-summary.html"><code>android.view</code></a> 软件包,以支持跨应用拖放。
-有关以下类和方法的详细信息,请参阅 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">N Preview SDK 参考</a>。
-
-
-</p>
-
-<dl>
- <dt>
- <code>android.view.DropPermissions</code>
- </dt>
-
- <dd>
- 令牌对象,负责指定对接收拖放数据的应用授予的权限。
-
- </dd>
-
- <dt>
- <code>View.startDragAndDrop()</code>
- </dt>
-
- <dd>
- {@link android.view.View#startDrag View.startDrag()} 的新别名。要启用跨 Activity 拖放,请传递新标志 <code>View.DRAG_FLAG_GLOBAL</code>。
-
-如需对接收拖放数据的 Activity 授予 URI 权限,可根据情况传递新标志 <code>View.DRAG_FLAG_GLOBAL_URI_READ</code> 或 <code>View.DRAG_FLAG_GLOBAL_URI_WRITE</code>。
-
-
-
- </dd>
-
- <dt>
- <code>View.cancelDragAndDrop()</code>
- </dt>
-
- <dd>
- 取消当前正在进行的拖动操作。只能由发起拖动操作的应用调用。
-
- </dd>
-
- <dt>
- <code>View.updateDragShadow()</code>
- </dt>
-
- <dd>
- 替换当前正在进行的拖动操作的拖动阴影。只能由发起拖动操作的应用调用。
-
- </dd>
-
- <dt>
- <code>Activity.requestDropPermissions()</code>
- </dt>
-
- <dd>
- 请求使用 {@link android.view.DragEvent} 中包含的 {@link
- android.content.ClipData} 传递的内容 URI 的权限。
- </dd>
-</dl>
-
-<h2 id="testing">测试应用的多窗口支持</h2>
-
-<p>
- 无论您是否针对 Android N 更新应用,都应验证应用在多窗口模式下的行为,以防用户尝试在运行 Android N 的设备上以多窗口模式启动应用。
-
-
-</p>
-
-<h3 id="configuring">配置测试设备</h3>
-
-<p>
- 如果在设备上安装 Android N,则将自动支持分屏模式。
-
-</p>
-
-<h3 id="test-non-n">如果应用并非使用 N Preview SDK 构建</h3>
-
-<p>
- 如果您的应用不是使用 N Preview SDK 构建的,则用户尝试在多窗口模式中使用应用时,系统将强制调整应用大小,除非应用进行了定向声明。
-
-
-</p>
-
-<p>
- 如果您的应用没有进行定向声明,则应在运行 Android N 的设备上启动应用,并尝试将应用切换到分屏模式。
-
-验证并确保在强制调整应用大小时用户体验可接受。
-
-</p>
-
-<p>
- 如果应用进行了定向声明,则应尝试将应用切换到多窗口模式。
-验证并确保执行此操作后,应用仍保持全屏模式。
-
-</p>
-
-<h3 id="test-mw">如果支持多窗口模式</h3>
-
-<p>
- 如果您的应用是使用 N Preview SDK 构建的,且未禁用多窗口支持,则分别在分屏和自由形状模式下验证以下行为。
-
-
-</p>
-
-<ul>
- <li>在全屏模式下启动应用,然后通过长按 Overview 按钮切换到多窗口模式。
-验证并确保应用正常切换。
- </li>
-
- <li>直接在多窗口模式中启动应用,验证并确保应用正常启动。
-您可以按一下 Overview 按钮,再长按应用的标题栏,并将其拖动到屏幕上任一突出显示的区域,从而在多窗口模式中启动应用。
-
-
- </li>
-
- <li>拖动分界线,在分屏模式中调整应用的大小。
- 验证并确保应用正常调整大小且未崩溃,并且必要的 UI 元素仍可见。
-
- </li>
-
- <li>如果您指定了应用的最小尺寸,请尝试将应用尺寸调整到低于最小值。
-验证并确保无法将应用尺寸调整到低于指定最小值。
-
- </li>
-
- <li>完成所有测试后,验证并确保应用性能可以接受。例如,验证并确保调整应用大小后更新 UI 没有长时间的滞后。
-
-
- </li>
-</ul>
-
-<h4 id="test-checklist">测试检查单</h4>
-
-<p>
- 要在多窗口模式中验证应用性能,请执行以下操作。
-除非另有说明,否则请分别在分屏和多窗口模式中执行以下操作。
-
-</p>
-
-<ul>
- <li>进入和退出多窗口模式。
- </li>
-
- <li>从您的应用切换到另一个应用,验证并确保应用在非活动但可见的状态下正常运行。
-例如,如果您的应用在播放视频,则验证并确保在用户与另一个应用交互时视频仍在继续播放。
-
-
- </li>
-
- <li>在分屏模式中,尝试移动分界线,放大或缩小应用。
-分别在左右和上下并排显示模式中尝试这些操作。
-验证并确保应用不会崩溃,主要功能可见,且调整操作不需要过长时间。
-
-
- </li>
-
- <li>快速连续执行几次调整操作。验证并确保应用不会崩溃或出现内存泄漏。
-有关检查应用内存使用率的信息,请参阅<a href="{@docRoot}tools/debugging/debugging-memory.html">查看内存使用率</a>。
-
-
- </li>
-
- <li>在多个不同窗口配置中正常使用应用,验证并确保应用正常运行。
-验证并确保文本可读,且 UI 元素大小正常,不影响交互。
-
- </li>
-</ul>
-
-<h3 id="test-disabled-mw">如果已禁用多窗口支持</h3>
-
-<p>
- 如果您通过设置 <code>android:resizableActivity="false"</code> 禁用了多窗口支持,则应在运行 Android N 的设备上启动应用,并尝试将应用切换到自由形状和分屏模式。
-
-
-验证并确保执行此操作后,应用仍保持全屏模式。
-
-</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-cn/preview/features/picture-in-picture.jd b/docs/html-intl/intl/zh-cn/preview/features/picture-in-picture.jd
deleted file mode 100644
index 27606a9..0000000
--- a/docs/html-intl/intl/zh-cn/preview/features/picture-in-picture.jd
+++ /dev/null
@@ -1,213 +0,0 @@
-page.title=画中画
-page.keywords=Preview、SDK、画中画
-page.tags=androidn
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>本文内容</h2>
-<ol>
- <li><a href="#declaring">声明您的 Activity 支持画中画
-</a></li>
- <li><a href="#pip_button">将您的 Activity 切换到画中画模式</a>
-</li>
- <li><a href="#handling_ui">处理画中画模式中的 UI</a>
-</li>
- <li><a href="#continuing_playback">在画中画模式中继续视频播放
-</a></li>
- <li><a href="#single_playback">使用画中画的单次播放 Activity
-</a></li>
- <li><a href="#best">最佳做法</a></li>
-</ol>
-
-<h2>另请参阅</h2>
-<ol>
- <li><a href="{@docRoot}preview/features/multi-window.html">多窗口支持
-</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>在 Android N 中,Android TV 用户现在可以一边在应用中导航一边在屏幕角落的固定窗口中观看视频。
-
-画中画 (PIP) 模式允许应用在固定窗口中运行视频 Activity,同时在后台继续运行另一个 Activity。
-
-PIP 窗口让用户可以在使用应用的时候进行多任务处理,从而提高效率。
-</p>
-
-<p>您的应用可以决定何时触发 PIP 模式。以下是一些关于何时进入 PIP 模式的示例:
-</p>
-
-<ul>
-<li>当用户从视频返回浏览其他内容时,应用将自动进入 PIP 模式。
-</li>
-<li>当用户快看完一集视频时,应用将视频切换到 PIP 模式。
-主屏幕显示有关该系列视频下一集的宣传或摘要信息。
-</li>
-<li>应用将允许用户在观看视频的同时添加其他内容到队列。
-视频继续在 PIP 模式中播放,同时主屏幕显示内容选择 Activity。
-</li>
-</ul>
-
-<p>PIP 窗口为 240x135 dp,在屏幕角落的最顶层显示,由系统在四个角落中选择一个角落。
-用户可以调出 PIP 菜单,将 PIP 窗口切换为全屏,或通过按下遥控器上的<b>主页</b>按钮关闭 PIP 窗口。
-
-如果主屏幕开始播放另一个视频,PIP 窗口将自动关闭。
-
-用户还可以通过“最近使用记录”关闭 PIP 窗口。</p>
-
-<img src="{@docRoot}preview/images/pip-active.png" />
-<p class="img-caption"><strong>图 1.</strong> 用户在主屏幕上浏览内容时屏幕角落窗口播放画中画视频。
-
-</p>
-
-<p>PIP 利用 Android N 中提供的多窗口 API 显示固定视频层叠窗口。
-如需将 PIP 添加到应用,您需要注册支持 PIP 的 Activity,然后根据需要将 Activity 切换到 PIP 模式,并确保隐藏所有 UI 元素,且 Activity 处于 PIP 模式时视频继续播放。
-
-
-</p>
-
-<h2 id="declaring">声明您的 Activity 支持画中画</h2>
-
-<p>默认情况下,系统并不自动为应用提供 PIP 支持。如果想要应用支持 PIP,请将
-<code>android:supportsPictureInPicture</code> 和
-<code>android:resizeableActivity</code> 设置为 <code>true</code>,在清单中注册视频 Activity。
-
-此外,应明确指定 Activity 处理布局配置变更,这样,在 PIP 模式过渡期间发生布局变更时,Activity 不会重新启动。
-
-</p>
-
-<pre>
-<activity android:name="VideoActivity"
- android:resizeableActivity="true"
- android:supportsPictureInPicture="true"
- android:configChanges=
- "screenSize|smallestScreenSize|screenLayout|orientation"
- ...
-</pre>
-
-<p>在注册 Activity 时,请记住,在 PIP 模式中,您的 Activity 在电视屏幕上的小层叠窗口中显示。
-视频播放 Activity 结合以尽量小的 UI 可以实现最佳用户体验。
-在切换到 PIP 模式后,UI 元素较小的 Activity 带来的用户体验可能较差,因为用户在 PIP 窗口中看不到 UI 元素的详细信息。
-
-
-</p>
-
-<h2 id="pip_button">将您的 Activity 切换到画中画模式</h2>
-
-在需要将 Activity 切换到 PIP 模式时,请调用
-<code>Activity.enterPictureInPictureMode()</code>。在下面的示例中,当用户选择媒体控制栏上的专用 PIP 按钮时,系统切换到 PIP 模式:
-
-</p>
-
-<pre>
-@Override
-public void onActionClicked(Action action) {
- if (action.getId() == R.id.lb_control_picture_in_picture) {
- getActivity().enterPictureInPictureMode();
- return;
- }
- ...
-</pre>
-
-<p>在媒体控制栏上添加 PIP 按钮可以方便用户在控制视频播放的同时切换到 PIP 模式。
-</p>
-
-<img src="{@docRoot}preview/images/pip-button.png" />
-<p class="img-caption"><strong>图 1.</strong> 媒体控制栏上的画中画按钮。
-</p>
-
-<p>Android N 中包含一个新的
-<code>PlaybackControlsRow.PictureInPictureAction</code> 类,它可以定义控制栏 PIP 操作并使用 PIP 图标。
-</p>
-
-<h2 id="handling_ui">处理画中画模式中的 UI</h2>
-
-<p>在 Activity 进入 PIP 模式时,Activity 应仅显示视频播放。
-在 Activity 进入 PIP 模式前删除 UI 元素,当 Activity 再次全屏显示时恢复这些元素。重写 <code>Activity.onPictureInPictureModeChanged()</code> 或
-<code>Fragment.onPictureInPictureModeChanged()</code>,并根据需要启用或禁用 UI 元素,例如:
-
-
-</p>
-
-<pre>
-@Override
-public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
- if (isInPictureInPictureMode) {
- // Hide the controls in picture-in-picture mode.
- ...
- } else {
- // Restore the playback UI based on the playback status.
- ...
- }
-}
-</pre>
-
-<h2 id="continuing_playback">在画中画模式中继续视频播放
-</h2>
-
-<p>在 Activity 切换到 PIP 模式时,系统会认为 Activity 处于暂停状态,并调用 Activity 的 <code>onPause()</code> 方法。
-如果 Activity 因为 PIP 模式暂停,视频播放不应暂停,而是应继续播放。
-
-在 Activity 的
-<code>onPause()</code> 方法中检查 PIP,并对播放做相应处理,例如:
-</p>
-
-<pre>
-@Override
-public void onPause() {
- // If called while in PIP mode, do not pause playback
- if (isInPictureInPictureMode()) {
- // Continue playback
- ...
- }
- // If paused but not in PIP, pause playback if necessary
- ...
-}
-</pre>
-
-<p>当 Activity 退出 PIP 模式并回到全屏模式时,系统会恢复 Activity 并调用 <code>onResume()</code> 方法。
-</p>
-
-<h2 id="single_playback">使用画中画的单次播放 Activity
-</h2>
-
-<p>在您的应用中,用户可以在浏览主屏幕中的内容时选择一个新的视频,视频播放 Activity 处于 PIP 模式。
-在现有播放 Activity 中全屏模式下播放新视频,而不是启用可能使用户感到困惑的新 Activity。
-
-</p>
-
-<p>若要确保视频播放请求使用的是单个 Activity 并根据需要进入或退出 PIP 模式,在您的清单中将 Activity 的 <code>android:launchMode</code> 设置为 <code>singleTask</code>:
-
-
-</p>
-
-<pre>
-<activity android:name="VideoActivity"
- ...
- android:supportsPictureInPicture="true"
- android:launchMode="singleTask"
- ...
-</pre>
-
-<p>在您的 Activity 中,替换 {@link android.app.Activity#onNewIntent
-Activity.onNewIntent()},处理新视频,如果需要,停止任何现有视频播放。
-</p>
-
-<h2 id="best">最佳做法</h2>
-
-<p>PIP 用于全屏播放视频的 Activity。在 Activity 切换到 PIP 模式时,应避免显示除视频外的其他内容。根据<a href="#handling_ui">处理画中画模式中的 UI</a> 中所述,在 Activity 进入 PIP 模式时进行跟踪,并隐藏 UI 元素。
-
-
-</p>
-
-<p>由于 PIP 窗口悬浮在屏幕的角落,因此应避免在主窗口被 PIP 窗口遮挡的任何区域显示重要信息。
-
-</p>
-
-<p>当 Activity 处于 PIP 模式时,其默认不获取输入焦点。要在 PIP 模式中接收输入事件,请使用
-<code>MediaSession.setMediaButtonReceiver()</code>。
-</p>
diff --git a/docs/html-intl/intl/zh-cn/preview/features/scoped-folder-access.jd b/docs/html-intl/intl/zh-cn/preview/features/scoped-folder-access.jd
deleted file mode 100644
index 4ff5f36..0000000
--- a/docs/html-intl/intl/zh-cn/preview/features/scoped-folder-access.jd
+++ /dev/null
@@ -1,152 +0,0 @@
-page.title=作用域目录访问
-page.keywords=Preview、SDK、作用域目录访问
-page.tags=Android N
-
-@jd:body
-
-
-
-
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>本文内容</h2>
- <ol>
- <li><a href="#accessing">访问外部存储目录</a></li>
- <li><a href="#removable">访问可移动介质上的目录</a></li>
- <li><a href="#best">最佳做法</a></li>
- </ol>
-</div>
-</div>
-
-<p>应用(如照片应用)通常只需要访问外部存储中的特定目录,例如 <code>Pictures</code> 目录。
-现有的外部存储访问方法未经专门设计,无法轻松地为这些类型的应用提供目标目录访问。
-
-例如:</p>
-
-<ul>
-<li>在您的清单中请求 {@link android.Manifest.permission#READ_EXTERNAL_STORAGE}
-或 {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} 将允许访问外部存储上的所有公共目录,这可能导致访问的内容超出应用需要的内容。
-
-</li>
-<li>使用<a href="{@docRoot}guide/topics/providers/document-provider.html">存储访问框架</a>通常会让您的用户通过一个系统 UI 选取目录,如果应用始终访问同一个外部目录,则该操作没有任何必要。
-
-
-
-</li>
-</ul>
-
-<p>Android N 提供简化的全新 API 以访问通用外部存储目录。
- </p>
-
-<h2 id="accessing">访问外部存储目录</h2>
-
-<p>使用 <code>StorageManager</code> 类获取适当的
-<code>StorageVolume</code> 实例。然后,通过调用该实例的
-<code>StorageVolume.createAccessIntent()</code> 方法创建一个 Intent。使用此 Intent 访问外部存储目录。
-若要获取所有可用卷的列表,包括可移动介质卷,请使用
-<code>StorageManager.getVolumesList()</code>。
-</p>
-
-<p>如果您有关于特定文件的信息,使用 <code>StorageManager.getStorageVolume(File)</code> 来获得包含该文件的 <code>StorageVolume</code>。
-
-调用在 <code>StorageVolume</code> 上的 <code>createAccessIntent()</code> 以访问文件的外部存储目录。
-
-</p>
-
-<p>
-在二级卷(例如外部 SD 卡)上,当调用 <code>StorageVolume.createAccessIntent()</code> 以请求访问整个卷,而不是特定目录时,传入“null”。如果您向主要卷传入“null”,或者如果您传入无效的目录名,<code>StorageVolume.createAccessIntent()</code> 将返回“null”。
-
-
-
-
-</p>
-
-<p>以下代码段展示如何在主要共享存储中打开<code>Pictures</code> 目录:
-</p>
-
-<pre>
-StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
-StorageVolume volume = sm.getPrimaryVolume();
-Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
-startActivityForResult(intent, request_code);
-</pre>
-
-<p>系统尝试授予对外部目录的访问权限,并使用一个简化的 UI 向用户确认访问权限(如果需要):
-</p>
-
-<img src="{@docRoot}preview/images/scoped-folder-access-framed.png" srcset="{@docRoot}preview/images/scoped-folder-access-framed.png 1x,
-{@docRoot}preview/images/scoped-folder-access-framed_2x.png 2x" />
-<p class="img-caption"><strong>图 1.</strong> 一个请求访问 Pictures 目录的应用。
-</p>
-
-<p>如果用户授予访问权限,则系统会调用
-<code>onActivityResult()</code> 重写方法,且结果代码为
-<code>Activity.RESULT_OK</code>,Intent 数据包含 URI。使用提供的 URI 访问目录信息,与使用<a href="{@docRoot}guide/topics/providers/document-provider.html">存储访问框架</a>返回的 URI 类似。
-
-
-
-</p>
-
-<p>如果用户不授予访问权限,则系统会调用
-<code>onActivityResult()</code> 重写方法,且结果代码为
-<code>Activity.RESULT_CANCELED</code>,Intent 数据为 null。</p>
-
-<p class="note"><b>注</b>:获得特定外部目录的访问权限也会获得该目录中子目录的访问权限。
-</p>
-
-<h2 id="removable">访问可移动介质上的目录</h2>
-
-<p>若要使用作用域目录访问来访问可移动介质上的目录,首先要添加一个用于侦听
-{@link android.os.Environment#MEDIA_MOUNTED} 通知的 {@link android.content.BroadcastReceiver},例如:
-</p>
-
-<pre>
-<receiver
- android:name=".MediaMountedReceiver"
- android:enabled="true"
- android:exported="true" >
- <intent-filter>
- <action android:name="android.intent.action.MEDIA_MOUNTED" />
- <data android:scheme="file" />
- </intent-filter>
-</receiver>
-</pre>
-
-<p>当用户装载可移动介质时,如 SD 卡,系统将发送一则
-{@link android.os.Environment#MEDIA_MOUNTED} 通知。此通知在 Intent 数据中提供一个 <code>StorageVolume</code> 对象,您可用它访问可移动介质上的目录。
-
-以下示例访问可移动介质上的 <code>Pictures</code> 目录:
-</p>
-
-<pre>
-// BroadcastReceiver has already cached the MEDIA_MOUNTED
-// notification Intent in mediaMountedIntent
-StorageVolume volume = (StorageVolume)
- mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
-volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
-startActivityForResult(intent, request_code);
-</pre>
-
-<h2 id="best">最佳做法</h2>
-
-<p>请尽可能保留外部目录访问 URI,这样即不必重复要求用户授予访问权限。
-在用户授予访问权限后,使用目录访问 URI 调用
-<code>getContentResolver().takePersistableUriPermssion()</code>。
-系统将保留此 URI,后续的访问请求将返回 <code>RESULT_OK</code>,且不会向用户显示确认 UI。
-
-</p>
-
-<p>如果用户拒绝授予外部目录访问权限,请勿立即再次请求访问权限。
-一再不停地请求访问权限会导致非常差的用户体验。
-如果用户拒绝了一项请求,而应用再次请求访问,UI 会显示一个 <b>Don't ask again</b> 复选框:
-</p>
-
-<img src="{@docRoot}preview/images/scoped-folder-access-dont-ask.png" srcset="{@docRoot}preview/images/scoped-folder-access-dont-ask.png 1x,
-{@docRoot}preview/images/scoped-folder-access-dont-ask_2x.png 2x" />
-<p class="img-caption"><strong>图 1.</strong> 应用第二次请求访问可移动介质。
-</p>
-
-<p>如果用户选择 <b>Don't ask again</b> 并拒绝请求,您的应用向指定目录提出的所有未来请求都将被自动拒绝,并且将不会有请求 UI 呈现给用户。
-
-</p>
diff --git a/docs/html-intl/intl/zh-cn/preview/features/security-config.jd b/docs/html-intl/intl/zh-cn/preview/features/security-config.jd
deleted file mode 100644
index e029a03..0000000
--- a/docs/html-intl/intl/zh-cn/preview/features/security-config.jd
+++ /dev/null
@@ -1,747 +0,0 @@
-page.title=网络安全配置
-page.keywords=Android N、安全、网络
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>本文内容</h2>
-<ol>
- <li><a href="#manifest">添加安全配置文件</a></li>
- <li><a href="#CustomTrust">自定义信任的 CA</a>
- <ol>
- <li><a href="#ConfigCustom">配置信任的自定义 CA</a></li>
- <li><a href="#LimitingCas">限制信任的 CA 集</a></li>
- <li><a href="#TrustingAdditionalCas">信任附加 CA</a></li>
- </ol>
- </li>
- <li><a href="#TrustingDebugCa">仅调试 CA</a></li>
- <li><a href="#UsesCleartextTraffic">选择退出 Cleartext Traffic</a></li>
- <li><a href="#CertificatePinning">固定证书</a></li>
- <li><a href="#ConfigInheritance">配置继承行为</a></li>
- <li><a href="#FileFormat">配置文件格式</a></li>
-</ol>
-</div>
-</div>
-
-
-<p>
- Android N 包含一个网络安全配置特性,让应用可以在一个安全的声明性配置文件中自定义其网络安全设置,而无需修改应用代码。
-
-可以针对特定域和特定应用配置这些设置。
-该特性的主要功能如下所示:
-
-</p>
-
-<ul>
- <li>
- <b>自定义信任锚:</b>针对应用的安全连接自定义哪些证书颁发机构 (CA) 值得信赖。
-例如,信任特定的自签署证书或限制应用信任的公共 CA 集。
-
-
- </li>
-
- <li>
- <b>仅调试重写:</b>在应用中以安全方式调试安全连接,而不会增加安装基数的风险。
-
- </li>
-
- <li>
- <b>Cleartext traffic 选择退出:</b>防止应用意外使用 cleartext traffic。
-
- </li>
-
- <li>
- <b>证书固定:</b>将应用的安全连接限制为特定的证书。
-
- </li>
-</ul>
-
-
-<h2 id="manifest">添加安全配置文件</h2>
-
-<p>
- 网络安全配置特性使用一个 XML 文件,您可以在该文件中指定应用的设置。
-您必须在应用的清单中包含一个条目来指向该文件。
-以下代码摘自一份清单,演示了如何创建此条目:
-
-</p>
-
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<manifest ... >
- <application ... >
- <meta-data android:name="android.security.net.config"
- android:resource="@xml/network_security_config" />
- ...
- </application>
-</manifest>
-</pre>
-
-<h2 id="CustomTrust">自定义信任的 CA</h2>
-
-<p>
- 应用可能需要信任自定义的 CA 集,而不是平台默认值。
-出现此情况的最常见原因包括:
-</p>
-
-<ul>
- <li>连接到具有自定义证书颁发机构(自签署、由公司内部 CA 签发等)的主机。
-
- </li>
-
- <li>将 CA 集仅限于您信任的 CA,而不是每个预装 CA。
-
- </li>
-
- <li>信任系统中未包含的附加 CA。
- </li>
-</ul>
-
-<p>
- 默认情况下,来自所有应用的安全(例如 TLS、HTTPS)连接均信任预装的系统 CA,而面向 API 级别 23 (Android M) 及更低级别的应用默认情况下还会信任用户添加的 CA 存储。
-
-应用可以使用 {@code base-config}(针对应用范围的定制)或 {@code domain-config}(针对每个域的定制)自定义自己的连接。
-
-
-
-</p>
-
-
-<h3 id="ConfigCustom">配置自定义 CA</h3>
-
-<p>
- 假设您要连接到使用自签署 SSL 证书的主机,或者连接到其 SSL 证书是由您信任的非公共 CA(如公司内部 CA)签发的主机。
-
-
-</p>
-
-<p>
- <code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">example.com</domain>
- <trust-anchors>
- <certificates src="@raw/my_ca"/>
- </trust-anchors>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-<p>
- 以 PEM 或 DER 格式将自签署或非公共 CA 证书添加到
-{@code res/raw/my_ca}。
-</p>
-
-
-<h3 id="LimitingCas">限制信任的 CA 集</h3>
-
-<p>
- 如果应用不想信任系统信任的所有 CA,则可以自行指定,缩减要信任的 CA 集。
-这样可防止应用信任任何其他 CA 签发的欺诈性证书。
-
-</p>
-
-<p>
- 限制信任的 CA 集的配置与针对特定域<a href="#TrustingACustomCa">信任自定义 CA</a> 相似,不同的是,前者要在资源中提供多个 CA。
-
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">secure.example.com</domain>
- <domain includeSubdomains="true">cdn.example.com</domain>
- <trust-anchors>
- <certificates src="@raw/trusted_roots"/>
- </trust-anchors>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-<p>
- 以 PEM 或 DER 格式将信任的 CA 添加到 {@code res/raw/trusted_roots}。
- 请注意,如果使用 PEM 格式,文件必须仅包含 PEM 数据,且没有额外的文本。
-<em></em>您还可以提供多个
-<a href="#certificates"><code><certificates></code></a>
-元素,而不是只能提供一个元素。
-</p>
-
-
-<h3 id="TrustingAdditionalCas">
- 信任附加 CA
-</h3>
-
-<p>
- 应用可能需要信任系统不信任的附加 CA,出现此情况的原因可能是系统还未包含此 CA,或 CA 不符合添加到 Android 系统中的要求。
-
-应用可以通过为一个配置指定多个证书源来实现此目的。
-
-
-</p>
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <base-config>
- <trust-anchors>
- <certificates src="@raw/extracas"/>
- <certificates src="system"/>
- </trust-anchors>
- </base-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="TrustingDebugCa">配置用于调试的 CA</h2>
-
-<p>
- 调试通过 HTTPS 连接的应用时,您可能需要连接到没有用于生产服务器的 SSL 证书的本地开发服务器。
-
-为了支持此操作,而又不对应用的代码进行任何修改,您可以通过使用 {@code debug-overrides} 指定仅在<a href="{@docRoot}guide/topics/manifest/application-element.html#debug">
-android:debuggable</a>
-为 {@code true} 时才信任的仅调试 CA。<i></i>
-
-通常,IDE 和构建工具会自动为非发布版本设置此标志。
-
-</p>
-
-<p>
- 这比一般的条件代码更安全,因为出于安全考虑,应用存储不接受被标记为可调试的应用。
-
-
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <debug-overrides>
- <trust-anchors>
- <certificates src="@raw/debug_cas"/>
- </trust-anchors>
- </debug-overrides>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="UsesCleartextTraffic">选择退出 Cleartext Traffic</h2>
-
-<p>
- 旨在连接到仅使用安全连接的目标的应用可以选择不再对这些目标提供 cleartext(使用解密的 HTTP 协议而非 HTTPS)支持。
-
-此选项有助于防止应用因外部源(如后端服务器)提供的 URL 发生变化而意外回归。
-
-
- 请参阅 {@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted
-NetworkSecurityPolicy.isCleartextTrafficPermitted()} 了解更多详情。
-</p>
-
-<p>
- 例如,应用可能需要确保所有与 {@code
-secure.example.com} 的连接始终是通过 HTTPS 完成,以防止来自恶意网络的敏感流量。
-
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config usesCleartextTraffic="false">
- <domain includeSubdomains="true">secure.example.com</domain>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="CertificatePinning">固定证书</h2>
-
-<p>
- 一般情况下,应用信任所有预装 CA。如果有预装 CA 要签发欺诈性证书,则应用将面临被中间人攻击 (MiTM) 的风险。
-
-有些应用通过限制信任的 CA 集或通过证书固定来选择限制其接受的证书集。
-
-</p>
-
-<p>
- 通过按公钥的哈希值(X.509 证书的 SubjectPublicKeyInfo)提供证书集完成证书固定。
-然后,证书链仅在至少包含一个已固定的公钥时才有效。
-
-
-</p>
-
-<p>
- 请注意,使用证书固定时,您应始终包含一个备份密钥,这样,当您需要强制切换到新密钥时,或更改 CA 时(固定到某个 CA 证书或该 CA 的中间证书时),您应用的连接性不会受到影响。
-
-
-否则,您必须推送应用的更新以恢复连接性。
-
-</p>
-
-<p>
- 此外,可以设置固定到期时间,在该时间之后不执行证书固定。
-这有助于防止尚未更新的应用出现连接问题。
-不过,设置固定到期时间可能会绕过证书固定。
-
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">example.com</domain>
- <pin-set expiration="2018-01-01">
- <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
- <!-- backup pin -->
- <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
- </pin-set>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="ConfigInheritance">配置继承行为</h2>
-
-<p>
- 继承未在特定配置中设置的值。此行为允许进行更复杂的配置,同时保证配置文件可读。
-
-</p>
-
-<p>
- 如果未在特定条目中设置值,则使用来自下一个更通用的条目中的值。
-未在 {@code domain-config} 中设置的值从父级 {@code domain-config}(如果已嵌套)或从 {@code
-base-config}(如果未嵌套)中获取。
-未在 {@code base-config} 中设置的值使用平台默认值。
-
-</p>
-
-<p>
- 例如,考虑所有与 {@code
-example.com} 的子域的连接必须使用自定义 CA 集。此外,允许使用这些域的 cleartext traffic,连接到 {@code
- secure.example.com} 时除外。<em></em>
-通过在 {@code example.com} 的配置中嵌套 {@code
-secure.example.com} 的配置,不需要重复 {@code trust-anchors}。
-
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">example.com</domain>
- <trust-anchors>
- <certificates src="@raw/my_ca"/>
- </trust-anchors>
- <domain-config cleartextTrafficPermitted="false">
- <domain includeSubdomains="true">secure.example.com</domain>
- </domain-config>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="FileFormat">配置文件格式</h2>
-
-<p>
- 网络安全配置特性使用 XML 文件格式。
- 文件的整体结构如以下代码示例所示:
-</p>
-
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <base-config>
- <trust-anchors>
- <certificates src="..."/>
- ...
- </trust-anchors>
- </base-config>
-
- <domain-config>
- <domain>android.com</domain>
- ...
- <trust-anchors>
- <certificates src="..."/>
- ...
- </trust-anchors>
- <pin-set>
- <pin digest="...">...</pin>
- ...
- </pin-set>
- </domain-config>
- ...
- <debug-overrides>
- <trust-anchors>
- <certificates src="..."/>
- ...
- </trust-anchors>
- </debug-overrides>
-</network-security-config>
-</pre>
-
-<p>
- 以下部分介绍语法和文件格式的其他详细信息。
-
-</p>
-
-<h3 id="network-security-config">
- <network-security-config>
-</h3>
-
-<dl class="xml">
- <dt>
- 可包含:
- </dt>
-
- <dd>
- 0 或 1 个 <code><a href="#base-config"><base-config></a></code><br>
- 任意数量的 <code><a href=
- "#domain-config"><domain-config></a></code><br>
- 0 或 1 个 <code><a href="#debug-overrides"><debug-overrides></a></code>
- </dd>
-</dl>
-
-<h3 id="base-config">
- <base-config>
-</h3>
-
-<dl class="xml">
- <dt>
- 语法:
- </dt>
-</dl>
-
-<pre class="stx">
-<base-config <a href=
-"#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
- ...
-</base-config>
-</pre>
-<dl class="xml">
- <dt>
- 可包含:
- </dt>
-
- <dd>
- <code><a href="#trust-anchors"><trust-anchors></a></code>
- </dd>
-
- <dt>
- 说明:
- </dt>
-
- <dd>
- 目标不在 <a href="#domain-config"><code>domain-config</code></a> 涵盖范围内的所有连接所使用的默认配置。
-
-
-<p>
- 未设置的任何值均使用平台默认值。面向上述 API 级别 24 及更高级别的应用的默认配置:
-
-</p>
-
-<pre>
-<base-config usesCleartextTraffic="true">
- <trust-anchors>
- <certificates src="system" />
- </trust-anchors>
-</base-config>
-</pre>
-面向 API 级别 23 及更低级别的应用的默认配置:
-<pre>
-<base-config usesCleartextTraffic="true">
- <trust-anchors>
- <certificates src="system" />
- <certificates src="user" />
- </trust-anchors>
-</base-config>
-</pre>
-
- </dd>
-</dl>
-
-<h3 id="domain-config"><domain-config></h3>
-<dl class="xml">
-<dt>语法:</dt>
-<dd>
-<pre class="stx"><domain-config <a href="#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
- ...
-</domain-config></pre>
-</dd>
-
-<dt>可包含:</dt>
-
-<dd>
-1 个或多个 <code><a href="#domain"><domain></a></code>
-<br/>0 或 1 个 <code><a href="#trust-anchors"><trust-anchors></a></code>
-<br/>0 或 1 个 <code><a href="#pin-set"><pin-set></code></a>
-<br/>任意数量的已嵌套 <code><domain-config></code></dd>
-
-<dt>说明</dt>
-<dd>用于按照 {@code domain} 元素的定义连接到特定目标的配置。
-
-<p>请注意,如果有多个 {@code domain-config} 元素涵盖某个目标,则使用匹配域规则最具体(最长)的配置。
-</p></dd>
-</dl>
-
-
-<h3 id="domain"><domain></h3>
-
-<dl class="xml">
- <dt>
- 语法:
- </dt>
-
- <dd>
- <pre class="stx">
-<domain includeSubdomains=["true" | "false"]>example.com</domain>
-</pre>
- </dd>
-
- <dt>
- 属性:
- </dt>
-
- <dd>
- <dl class="attr">
- <dt>
- {@code includeSubdomains}
- </dt>
-
- <dd>
- 如果为 {@code "true"},则此域规则与域及所有子域(包括子域的子域)匹配,否则,该规则仅适用于精确匹配项。
-
-
- </dd>
- </dl>
- </dd>
-
- <dt>
- 说明:
- </dt>
-</dl>
-
-<h3 id="debug-overrides"><debug-overrides></h3>
-
-<dl class="xml">
- <dt>
- 语法:
- </dt>
-
- <dd>
- <pre class="stx">
-<debug-overrides>
- ...
-</debug-overrides>
-</pre>
- </dd>
-
- <dt>
- 可包含:
- </dt>
-
- <dd>
- 0 或 1 个 <code><a href="#trust-anchors"><trust-anchors></a></code>
- </dd>
-
- <dt>
- 说明:
- </dt>
-
- <dd>
- 当 <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
-为 {@code "true"} 时将应用的重写,IDE 和构建工具生成的非发布版本通常属于此情况。
-将在 {@code
-debug-overrides} 中指定的信任锚添加到所有其他配置,并且当服务器的证书链使用其中一个仅调试信任锚时不执行证书固定。
-
-如果 <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
-为 {@code "false"},则完全忽略此部分。
- </dd>
-</dl>
-
-<h3 id="trust-anchors"><trust-anchors></h3>
-<dl class="xml">
- <dt>
- 语法:
- </dt>
-
- <dd>
- <pre class="stx">
-<trust-anchors>
-...
-</trust-anchors>
-</pre>
- </dd>
-
- <dt>
- 可包含:
- </dt>
-
- <dd>
- 任意数量的 <code><a href="#certificates"><certificates></a></code>
- </dd>
-
- <dt>
- 说明:
- </dt>
-
- <dd>
- 用于安全连接的信任锚集
- </dd>
-</dl>
-
-
-<h3 id="certificates"><certificates></h3>
-<dl class="xml">
-<dt>语法:</dt>
-<dd><pre class="stx"><certificates src=["system" | "user" | "<i>raw resource</i>"]
- overridePins=["true" | "false"] />
-</pre></dd>
-<dt>说明:</dt>
-<dd>用于 {@code trust-anchors} 元素的 X.509 证书集。</dd>
-
-<dt>属性:</dt>
-<dd><dl class="attr">
-<dt>{@code src}</dt>
-<dd>
-CA 证书的来源,可以是
-<ul>
- <li>指向包含 X.509 证书的文件的原始资源 id。
- 证书必须以 DER 或 PEM 格式编码。如果为 PEM 证书,则文件不得包含额外的非 PEM 数据,如注释。
-
-<em></em>
- </li>
-
- <li>用于预装系统 CA 证书的 {@code "system"}
- </li>
-
- <li>用于用户添加的 CA 证书的 {@code "user"}
- </li>
-</ul>
-</dd>
-
-<dt>{@code overridePins}</dt>
-<dd>
- <p>
- 指定来自此源的 CA 是否绕过证书固定。如果为 {@code
-"true"},则为穿过此源的其中一个 CA 的链颁发证书,并且不执行证书固定。
-这对于调试 CA 或支持用户对应用的安全流量进行中间人攻击 (MiTM) 非常有用。
-
- </p>
-
- <p>
- 默认值为 {@code "false"},除非在 {@code debug-overrides}
-元素中另外指定(在这种情况下,默认值为 {@code "true"})。
- </p>
-</dd>
-</dl>
-</dd>
-
-
-<h3 id="pin-set"><pin-set></h3>
-
-<dl class="xml">
- <dt>
- 语法:
- </dt>
-
- <dd>
-<pre class="stx">
-<pin-set expiration="date">
-...
-</pin-set>
-</pre>
- </dd>
-
- <dt>
- 可包含:
- </dt>
-
- <dd>
- 任意数量的 <code><a href="#pin"><pin></a></code>
- </dd>
-
- <dt>
- 说明:
- </dt>
-
- <dd>
- 公钥固定 (PKP) 集。对于要信任的安全连接,信任链中必须有一个公钥位于 PKP 集中。
-有关固定形式,请参阅
-<code><a href="#pin"><pin></a></code>。
- </dd>
-
- <dt>
- 属性:
- </dt>
-
- <dd>
- <dl class="attr">
- <dt>
- {@code expiration}
- </dt>
-
- <dd>
- 采用 {@code yyyy-MM-dd} 格式的日期,在该日期及之后固定过期,因而禁用固定。
-如果未设置该属性,则固定不会过期。
-
- <p>
- 设置到期时间有助于防止未更新到其 PKP 集(例如,由于用户禁用应用更新)的应用出现连接问题。
-
-
- </p>
- </dd>
- </dl>
- </dd>
-</dl>
-
-<h3 id="pin"><pin></h3>
-<dl class="xml">
- <dt>
- 语法:
- </dt>
-
- <dd>
-<pre class="stx">
-<pin digest=["SHA-256"]>base64 encoded digest of X.509
- SubjectPublicKeyInfo (SPKI)</pin>
-</pre>
- </dd>
-
- <dt>
- 属性:
- </dt>
-
- <dd>
- <dl class="attr">
- <dt>
- {@code digest}
- </dt>
-
- <dd>
- 用于生成 PKP 的摘要算法。目前仅支持
-{@code "SHA-256"}。
- </dd>
- </dl>
- </dd>
-</dl>
diff --git a/docs/html-intl/intl/zh-cn/preview/features/tv-recording-api.jd b/docs/html-intl/intl/zh-cn/preview/features/tv-recording-api.jd
deleted file mode 100644
index 2dec87d..0000000
--- a/docs/html-intl/intl/zh-cn/preview/features/tv-recording-api.jd
+++ /dev/null
@@ -1,142 +0,0 @@
-page.title=TV 录制
-page.keywords=Preview、SDK、TV 录制
-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="#supporting">指示支持录制</a></li>
- <li><a href="#recording">录制会话</a></li>
- <li><a href="#errors">处理录制错误</a></li>
- <li><a href="#sessions">管理录制的会话</a></li>
- <li><a href="#best">最佳做法</a></li>
- </ol>
-</div>
-</div>
-
-<p>TV 输入服务允许用户通过时移 API 暂停和继续频道播放。
-Android N 通过允许用户保存多个录制的会话,扩展了时移。
-</p>
-
-<p>用户可以提前安排录制,或在观看节目时开始录制。
-系统保存录制后,用户即可使用系统 TV 应用浏览、管理和播放录制。
-</p>
-
-<p>如果想要为 TV 输入服务提供录制功能,您必须指示系统您的应用支持录制,实现录制节目功能,处理和传达录制期间发生的所有错误,并管理录制的会话。
-
-
-</p>
-
-<p class="note"><strong>注:</strong>Live Channels 应用尚不提供可让用户创建或访问录制的方式。
-在变更 Live Channels 应用之前,可能无法充分测试您的 TV 输入服务的录制体验。
-
-</p>
-
-<h2 id="supporting">指示支持录制</h2>
-
-<p>为了通知系统您的 TV 输入服务支持录制,请将您的服务元数据 XML 文件中的 <code>android:canRecord</code> 属性设置为 <code>true</code>:
-
-
-</p>
-
-<pre>
-<tv-input xmlns:android="http://schemas.android.com/apk/res/android"
- <b>android:canRecord="true"</b>
- android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />
-</pre>
-
-<p>如需了解有关服务元数据文件的详细信息,请参阅<a href="{@docRoot}training/tv/tif/tvinput.html#manifest">在清单中声明您的 TV 输入</a>。
-
-
-</p>
-
-<p>或者,您可以使用以下步骤在您的代码中表明录制支持:
-</p>
-
-<ol>
-<li>在 <code>TvInputService.onCreate()</code> 方法中,使用 <code>TvInputInfo.Builder</code>
-类创建一个新的
-<code>TvInputInfo</code> 对象。</li>
-<li>创建新的 <code>TvInputInfo</code> 对象时,在调用 <code>build()</code> 之前先调用
-<code>setCanRecord(true)</code>,以表明您的服务支持录制。
-</li>
-<li>通过调用
-<code>TvInputManager.updateTvInputInfo()</code> 在系统中注册 <code>TvInputInfo</code> 对象。</li>
-</ol>
-
-<h2 id="recording">录制会话</h2>
-
-<p>TV 输入服务注册其支持录制功能后,系统会在需要访问应用的录制实现时调用
-<code>TvInputService.onCreateRecordingSession()</code>。
-
-实现您自己的
-<code>TvInputService.RecordingSession</code> 子类并在触发 <code>onCreateRecordingSession()</code> 回调后返回它。
-
-此子类负责切换到正确的频道数据,录制请求的数据,以及向系统传达录制状态和错误。
-
-</p>
-
-<p>系统调用在频道 URI 中传递的 <code>RecordingSession.onTune()</code> 时,将调到该 URI 指定的频道。
-通过调用 <code>notifyTuned()</code> 通知系统应用已调到所需的频道,或者,如果应用无法调到正确的频道,请调用 <code>notifyError()</code>。
-
-
-</p>
-
-<p>系统接下来调用 <code>RecordingSession.onStartRecording()</code>
-回调。您的应用必须立即开始录制。系统调用此回调时,它可能会提供一个 URI,其中包含有关将录制的节目的信息。
-
-完成录制后,您需要将此数据复制到 <code>RecordedPrograms</code> 数据表。
-</p>
-
-<p>最后,系统调用 <code>RecordingSession.onStopRecording()</code>。此时,您的应用必须立即停止录制。
-您还需要在 <code>RecordedPrograms</code> 表中创建一个条目。
-此条目应在
-<code>RecordedPrograms.COLUMN_RECORDING_DATA_URI</code> 列中包含录制的会话数据 URI,以及在初始调用
-<code>onStartRecording()</code> 时系统提供的任何节目信息。
-
-</p>
-
-<p>如需了解有关如何访问 <code>RecordedPrograms</code> 表的更多详情,请参阅<a href="#sessions">管理录制的会话</a>。
-</p>
-
-<h2 id="errors">处理录制错误</h2>
-
-<p>如果录制期间发生错误,使录制的数据无法使用,则通过调用 <code>RecordingSession.notifyError()</code> 通知系统。同样,您可以在创建录制会话后调用 <code>notifyError()</code>,以通知系统您的应用不再录制会话。
-
-
-</p>
-
-<p>如果录制期间发生错误,但您想提供可使用的部分录制供用户播放,则调用
-<code>RecordingSession.notifyRecordingStopped()</code> 以使系统可以使用部分会话。
-
-</p>
-
-<h2 id="sessions">管理录制的会话</h2>
-
-<p>系统在 <code>TvContract.RecordedPrograms</code>
-内容提供程序表中维护来自所有支持录制的频道应用的所有已录制会话的信息。
-此信息可通过
-<code>RecordedPrograms.Uri</code> 内容 URI 访问。使用内容提供程序 API 读取、添加和删除此表中的条目。
-</p>
-
-<p>如需了解有关使用内容提供程序数据的详细信息,请参阅<a href="{@docRoot}guide/topics/providers/content-provider-basics.html">内容提供程序基本知识</a>。
-
-</p>
-
-<h2 id="best">最佳做法</h2>
-
-<p>TV 设备的存储可能有限,因此请运用您的最佳判断来分配存储,以保存录制的会话。
-如果没有足够的空间存储录制的会话,请使用
-<code>RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)</code>。
-</p>
-
-<p>当用户发起录制时,您应尽快开始录制数据。
-为便于执行此操作,请在系统调用
-<code>onCreateRecordingSession()</code> 回调时完成前期的所有耗时任务,如访问和分配存储空间。
-这样做让您能够在触发 <code>onStartRecording()</code> 回调时立即开始录制。
-
-</p>
diff --git a/docs/html-intl/intl/zh-cn/preview/guide.jd b/docs/html-intl/intl/zh-cn/preview/guide.jd
deleted file mode 100644
index 9f7737f..0000000
--- a/docs/html-intl/intl/zh-cn/preview/guide.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="qv-wrapper">
- <div id="qv">
- <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/preview/index.jd b/docs/html-intl/intl/zh-cn/preview/index.jd
deleted file mode 100644
index 74cd039..0000000
--- a/docs/html-intl/intl/zh-cn/preview/index.jd
+++ /dev/null
@@ -1,131 +0,0 @@
-page.title=Android N Developer Preview
-page.tags="preview","developer"
-meta.tags="preview", "android"
-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">
- <div class="wrap" style="max-width:1100px;margin-top:0">
- <div class="cols dac-hero-content" style="padding-bottom:1em;">
-
- <div class="col-7of16 col-push-9of16" style="padding-left:2em">
- <h1 class="dac-hero-title">Android N Developer Preview</h1>
- <p class="dac-hero-description">
- 为 Android N 进行准备!
- 在 Nexus 和其他设备上<strong>测试您的应用</strong>。支持新系统行为以<strong>节省电量和内存</strong>。
-
- 使用<strong>多窗口 UI</strong> 扩展您的应用,以便能够<strong>直接答复通知</strong>及执行其他操作。
-
- </p>
-
- <a class="dac-hero-cta" href="{@docRoot}preview/overview.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>-->
- </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>
- </div>
- <div class="dac-section dac-small">
- <div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/resources"
- data-cardSizes="6x2"
- data-maxResults="6"></div>
- </div>
- </div>
-</section>
-
-<div id="useUpdatedTemplates" style="display:none" 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>
- </a>
- <ul class="dac-actions">
- <li class="dac-action">
- <a class="dac-action-link" href="https://developer.android.com/preview/bug">
- <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>
- 加入开发者社区
- </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"
- data-query="type:blog+tag:androidn+tag:featured, type:youtube+tag:androidn+tag:featured"
- data-sortOrder="-timestamp"
- data-cardSizes="6x6"
- data-items-per-page="6"
- data-maxResults="15"
- data-initial-results="3"></div>
-</div></section>
-
-<section class="dac-section dac-gray"><div class="wrap">
- <h1 class="dac-section-title">资源</h1>
- <div class="dac-section-subtitle">
- 这些必备信息可帮助您的应用为Android N做好准备。
- </div>
-
- <div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/more"
- data-cardSizes="6x6"
- data-items-per-page="6"
- data-maxResults="15"
- data-initial-results="6"></div>
-
- </div>
-</section>
-
diff --git a/docs/html-intl/intl/zh-cn/preview/license.jd b/docs/html-intl/intl/zh-cn/preview/license.jd
deleted file mode 100644
index 66f3ed3..0000000
--- a/docs/html-intl/intl/zh-cn/preview/license.jd
+++ /dev/null
@@ -1,145 +0,0 @@
-page.title=许可协议
-
-@jd:body
-
-<p>
-在开始使用 Android SDK Preview 之前,您必须同意下列条款和条件。正如下文所述,请注意:这是 Android SDK 的预览版,可能随时更改,恕不另行通知,您使用此版本的风险由您自行承担。
-Android SDK Preview 并非稳定版本,可能包含会对您的计算机系统、设备和数据造成损害的错误和缺陷。
-</p>
-
-<p>
-本协议是 Android SDK Preview 许可协议(以下称为“许可协议”)。
-</p>
-<div class="sdk-terms" style="height:auto;border:0;padding:0;width:700px">
-1. 简介
-
-1.1 Android SDK Preview(在本许可协议中简称为“Preview”,具体包括 Android 系统文件、封装 API 以及Preview 库文件(若可用))依据本许可协议的条款授权您使用。本许可协议在您与 Google 之间就您对“Preview”的使用构成具有法律约束力的合约。
-
-1.2 “Android”是指以 Android 开源项目(项目网址为 http://source.android.com/,其内容会不时更新)名义提供、面向设备的 Android 软件栈。
-
-1.3 “Android 兼容”是指 (i) 符合与 Android 兼容性定义文档(可在 Android 兼容性网站 http://source.android.com/compatibility 上找到,并可能会不时更新)标准的任何 Android 实现;并 (ii) 成功通过 Android 兼容性测试套件 (CTS) 的测试。
-
-1.4“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. Google “Preview”许可
-
-3.1 Google 依据本许可协议的条款授予您有限的、全球性、免版税、不可转让、非独占性且不可次级许可的“Preview”使用许可,其用途仅限针对 Android 的兼容实现来开发应用。
-
-3.2 您不得使用此“Preview”来开发适用于其他平台(包括 Android 的非兼容实现)的应用或开发其他 SDK。您当然可以随意开发适用于其他平台(包括 Android 的非兼容实现)的应用,前提是不使用此“Preview”来进行此类开发。
-
-3.3 您同意 Google 或第三方拥有“Preview”中存在或与其有关联的全部合法权利、所有权和利益,包括“Preview”中存在的任何知识产权。“知识产权”是指根据专利法、版权法、商业机密法、商标法享有的任何及全部权利,以及其他任何及全部专有权利。Google 保留所有未明确授予您的权利。
-
-3.4 您不得将“Preview”用于本许可协议未明确允许的任何用途。除适用第三方许可所要求的范围外,您不得:(a) 对“Preview”或“Preview”的任何部分进行复制(备份用途除外)、修改、改编、再分发、反编译、逆向工程、反汇编或创建其衍生品;或 (b) 将“Preview”的任何部分加载到移动手持终端或除个人计算机之外的任何其他硬件设备上,将“Preview”的任何部分与其他软件合并,或者发行任何融入“Preview”某一部分的软件或设备。
-
-3.5 对于依据开源软件许可授权的“Preview”组件,其使用、复制和分发仅受该开源软件许可条款的制约,不受本许可协议的约束。您同意在依照被授予的所有权利作为被许可方期间,在遵守此类开源软件许可协议方面始终保持良好的信誉,并避免进行任何可能导致终止、暂停或违反此类权利的行动。
-
-3.6 您同意 Google 所提供“Preview”的形式和性质可随时发生变更,而无需事先通知您,并且未来的“Preview”版本可能会与在之前的“Preview”版本上开发的应用不兼容。您同意 Google 可单方面决定在未事先通知您的情况下全面停止(永久性或暂时性)向您或用户提供“Preview”(或“Preview”内的任何功能)。
-
-3.7 本许可协议内没有任何条款授予您使用 Google 的任何商品名、商标、服务标志、徽标、域名或其他独特品牌特征的权利。
-
-3.8 您同意您不会移除、遮盖或篡改“Preview”上可能贴有或“Preview”内可能包含的任何专有权利声明(包括版权声明和商标声明)。
-
-4. 您对“Preview”的使用
-
-4.1 Google 同意本许可协议中的任何条款均未授予 Google 从您(或您的许可方)处获取您依照本许可协议使用“Preview”开发的任何软件应用中存在或与其相关的权利、所有权或利益,包括这些应用中存在的任何知识产权。
-
-4.2 您同意只出于 (a) 本许可协议和 (b) 相关管辖区域内任何适用法律、法规或公认惯例或准则(包括有关向美国或其他相关国家/地区出口数据或软件或从美国或其他相关国家/地区进口数据或软件的任何法律)所允许的目的而使用“Preview”和编写应用。
-
-4.3 您同意,如果您使用“Preview”开发应用,您将会保护用户的隐私权和合法权利。如果用户向您提供用户名、密码或其他登录信息或个人信息,您必须确保用户知晓这些信息将供您的应用使用,并且您必须为这些用户提供足以满足法律要求的隐私声明和保护。如果您的应用存储由用户提供的个人信息或敏感信息,其存储方式必须安全。如果用户向您提供 Google 帐户信息,您的应用只能在用户允许时出于用户所许可的有限目的使用该信息访问用户的 Google 帐户。
-
-4.4 您同意您不会利用“Preview”从事任何干扰、中断、损坏或以未经授权方式访问 Google 或任何第三方的服务器、网络或其他财产或服务的 Activity(包括应用的开发或分发)。
-
-4.5 您同意您对通过 Android 和/或 Android 应用创建、传输或显示的任何数据、内容或资源以及您的行为所导致的后果(包括 Google 可能遭受的任何损失或损害)负全责(Google 在上述方面对您或任何第三方不承担任何责任)。
-
-4.6 您同意您为违反本许可协议、任何适用的第三方合约或服务条款或任何适用法律或法规下的义务以及任何上述违规行为所导致的后果(包括 Google 或任何第三方可能遭受的任何损失或损害)负全责(Google 在上述方面对您或任何第三方不承担任何责任)。
-
-4.7 “Preview”正在开发中,您的测试和反馈是开发过程的重要环节。使用“Preview”,即表示您承认某些功能仍在开发实现之中,您不应期望“Preview”具备稳定版本的全部功能。您同意不使用此“Preview”公开发布或发运任何应用,因为此“Preview”在 Android SDK 正式发行之后将不再受支持。
-
-5. 您的开发者凭据
-
-5.1 您同意,对于 Google 可能向您发放或可能由您自行选择的任何开发者凭据,您有责任保持其机密性,并且您对以您的开发者凭据名义开发的所有应用负全责。
-
-6. 隐私权和信息
-
-6.1 为持续创新和改进“Preview”,Google 可能会从软件收集某些使用统计数据,包括但不限于唯一标识符、关联的 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 您同意,在法律所允许的最大限度内,为 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>
\ No newline at end of file
diff --git a/docs/html-intl/intl/zh-cn/preview/overview.jd b/docs/html-intl/intl/zh-cn/preview/overview.jd
deleted file mode 100644
index 8bbd120..0000000
--- a/docs/html-intl/intl/zh-cn/preview/overview.jd
+++ /dev/null
@@ -1,440 +0,0 @@
-page.title=计划概览
-page.metaDescription=让您的应用做好迎接 Android 的下一版本的准备。
-page.image=images/cards/card-n-overview_2x.png
-meta.tags="preview", "developer", "android"
-page.tags="preview", "developer", "android"
-
-@jd:body
-<!--
-<div class="cols" style=
-"background-color:#f2daf5; padding: 5px 0;margin-bottom:1em; text-align:center;">
-<h3>
- Developer Preview 3 is now available
- </h3>
- <p>Includes final SDK and near-final system images</p>
- <div style="margin:auto 1em">
- <ul class="dac-section-links">
- <li class="dac-section-link">
- <a href="{@docRoot}preview/support.html#preview3-notes">
- <span class="dac-sprite dac-auto-chevron"></span>
- Read the Notes</a>
- </li>
-
- <li class="dac-section-link">
- <a href="{@docRoot}preview/support.html#preview3-get">
- <span class="dac-sprite dac-auto-chevron"></span>
- Get the Update</a>
- </li>
-
- <li class="dac-section-link">
- <a href="https://code.google.com/p/android-developer-preview/">
- <span class="dac-sprite dac-auto-chevron"></span>
- Report Issues</a>
- </li>
- </ul>
- </div>
-</div>
--->
-
-<p>
- 欢迎使用 <strong>Android N Developer Preview</strong>,此程序将为您提供针对 Android 的下一版本测试和优化应用所需的所有功能。它是免费的,您只需下载 N Developer Preview 工具即可立即使用。
-
-
-
-</p>
-
-
-
-
-
-
-
-<div style="background-color:#eceff1;padding:1em;">
-<div class="wrap">
- <div class="cols">
- <div class="col-4of12">
- <h5>
- 硬件和模拟器映像
- </h5>
-
- <p>
- 在各种设备或模拟器上运行并测试应用。
-
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- 最新的平台代码
- </h5>
-
- <p>
- 我们将在 Preview 期间每月提供更新,以便您针对最新的平台变更测试您的应用。
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- 优先处理开发者问题
- </h5>
-
- <p>
- 在最初的几周里,我们将优先处理开发者报告的问题,所以请尽快测试并提供反馈。
-
- </p>
- </div>
-
- </div>
-
- <div class="cols">
-
-
- <div class="col-4of12">
- <h5>
- 新行为和新功能
- </h5>
-
- <p>
- 请尽早开始支持新平台行为并使用新功能进行开发。
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- 通过 OTA 推送更新
- </h5>
-
- <p>
- 通过 Android Beta 计划,所有支持的设备都可以实现无缝 OTA 更新。无需刷机。
-
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- 反馈和支持
- </h5>
-
- <p>
- 使用 <a href="{@docRoot}preview/bug">Issue Tracker</a> 向我们报告问题并提供反馈。
-与
-<a href="{@docRoot}preview/dev-community">N 开发者社区</a>中的其他开发者建立联系。
-
- </p>
- </div>
- </div>
-</div>
-</div>
-
-<!--
-<p>New in the Android N Developer Preview: </p>
-
-<ul>
- <li> Accompanying Android Beta Program for consumers, starting later in the preview</li>
- <li> More supported devices, including devices from OEM partners</li>
- <li> Seamless OTAs for your devices, from initial release to final N release without flashing</li>
-</ul>
--->
-
-<h2 id="timeline">时间表和更新</h2>
-<img src="{@docRoot}images/n-preview-updates_2x.png">
-
-<p>
- N Developer Preview 从 2016 年 3 月 9 日开始使用,到向 AOSP 和 OEM 公开发布最终 Android N 时停止使用,预计将于 2016 年第三季度发布最终版本。
-
-</p>
-
-<p>
- 在关键的开发阶段的里程碑,我们将为您的测试设备和测试环境提供更新。
-一般每月(间隔 4 到 6 周)会提供一次更新。
-里程碑列表如下。
-</p>
-
-<ul>
- <li><strong><a href="{@docRoot}preview/support.html#dp1">Preview 1</a></strong>(初始版本,alpha)</li>
- <li><strong><a href="{@docRoot}preview/support.html#dp2">Preview 2</a></strong>(增量更新,alpha)</li>
- <li><strong><a href="{@docRoot}preview/support.html#dp3">Preview 3</a></strong>(增量更新,beta)</li>
- <li><strong>Preview 4</strong>(最终 API 和官方 SDK,在 Play 中发布)</li>
- <li><strong>Preview 5</strong>(接近最终版本系统映像,用于最终测试)</li>
- <li>向 AOSP 和生态系统发布<strong>最终版本</strong></li>
-</ul>
-
-<p>
- 每次的更新包括 SDK 工具、Preview 系统映像、模拟器、参考文档和 API 差异。
-
-</p>
-
-<p>
- <strong>前三个 Preview 里程碑</strong>提供<strong>早期测试和开发环境</strong>,帮助您发现当前应用中的兼容性问题,并针对新平台计划必要的迁移或功能工作。
-
-
-这是向我们提供功能和 API 以及文件兼容性问题反馈的优先期 — 请使用 <a href="{@docRoot}preview/bug">Issue Tracker</a> 进行反馈。
-
-
-在更新期间,API 可能会有变更。
-</p>
-
-<p>
- 在<strong>Preview 4 和 5</strong> 中,您将可以访问<strong>最终版的 N API 和 SDK</strong> 进行开发,以及用于测试系统行为和功能的接近最终版的系统映像。
-
-此时 Android N 会提供标准的 API 级别。
-您可以对旧版应用进行最终的兼容性测试,并优化使用 N API 或功能的新代码。
-
-</p>
-
-<p>
- 此外,从 Preview 4 开始,您将可以面向运行正式 API 级别的 Android N 的<strong>设备发布应用</strong>,例如选择加入 Android Beta 计划的消费者设备。您可以先在 Google Play 的 alpha 和 beta 渠道发布应用,通过 Android Beta 消费者对应用进行测试,然后在商店大范围推广。
-
-
-
-
-
-</p>
-
-<p>
- 如果您在 Android N 中进行测试和开发,我们郑重建议您随着 Preview 更新的发布,<strong>将开发环境保持为相应的最新版本</strong>。
-
-为了方便更新,您可以在 Android Beta 计划中注册您的测试设备,这样就可以在每个里程碑实现<strong>空中下载 (OTA) 更新</strong>。
-
-此外,您还将获得可手动下载并刷入的系统映像。
-
-</p>
-
-<p>
- 当有 Preview 更新可用时,我们将通过 <a href="http://android-developers.blogspot.com/">Android 开发者博客</a>、此网站以及 <a href="{@docRoot}preview/dev-community">Android N 开发者社区</a>通知您。
-
-
-</p>
-
-
-<h2 id="preview_tools">N Developer Preview 包含的内容</h2>
-
-<p>
- N Developer Preview 包括您在各种使用不同屏幕尺寸、网络技术、CPU/GPU 芯片组和硬件架构的设备中测试现有应用所需的所有功能。
-
-
-</p>
-
-<h3 id="sdk_tools">SDK 工具</h3>
-
-<p>您可通过 <a href="{@docRoot}studio/intro/update.html">Android Studio</a> 中的 SDK 管理器下载这些组件:</p>
-
-<ul>
- <li> N Developer Preview <strong>SDK 和工具</strong>
- <li> N Developer Preview <strong>模拟器系统映像</strong>(32 位和 64 位)
- <li> 适用于 Android TV 的 N Developer Preview<strong>模拟器系统映像</strong>(32 位)
- <li> N Developer Preview 支持库(用于新应用模板)
-</ul>
-
-<p>
- 我们将根据需要在每个里程碑为这些开发工具提供更新。
-</p>
-
-<h3 id="hardware_system_images">硬件系统映像</h3>
-
-<p>
- N Developer Preview 包含 Nexus 以及可用于在物理设备上进行测试和开发的其他硬件系统映像。如需了解硬件映像的完整列表,请参阅<a href="{@docRoot}preview/download.html">设备映像</a>页面。
-
-
-</p>
-
-<p>
- 我们将在每个里程碑为这些设备提供更新的系统映像。您可以手动下载更新的系统映像,并刷入测试设备(如需要,可多次刷入)。
-
-这尤其适合需要多次重刷设备的自动化测试环境。
-
-
-</p>
-
-<p class="note"><strong>注</strong>:
- <strong>手动刷入设备将不会像在去年的 Preview 中一样获得 OTA 更新。</strong>
-今年,您可以通过在 Android Beta 计划中注册设备获得 OTA — 有关详情请参阅下文。
-
-</p>
-
-<h3 id="android_beta">通过 Android Beta 计划获得 OTA 更新</h3>
-
-<p>
- Android N 的一项新功能是空中下载 (OTA) 更新计划,该功能可以将 Android N 最新的Preview 更新直接发送到注册该计划的设备。该计划是免费服务,只要您拥有支持的设备并将其注册到 Google 帐户,就可以使用该服务。
-
-
-
-</p>
-
-<p>
- 如需注册该计划,请访问 <a href="https://g.co/androidbeta">Android Beta 计划</a>网站。您将可以看到您的帐户中所有可以注册 Android Beta 的设备。
-
-
-
-</p>
-
-<ol>
- <li> 选择用于接收 Android N 更新的设备
- <li> 点击 Enroll,查看并同意服务条款,然后点击 OK。
-</ol>
-
-<p>
- 注册完成后,您的设备将很快收到更新。多数情况下,切换到 Android N 不需要重置所有数据,但建议您在注册设备前对重要数据进行备份,以免丢失。
-
-
-
-</p>
-
-<p>
- 在设备收到更新后,建议您尽快下载并安装更新,以便在系统 UI、行为、API 和功能中及时同步最新的变更。
-
-
-</p>
-
-<p>
- 在 Developer Preview 结束运行时,您的注册设备将收到官方 Android N 版本的更新。
-
-</p>
-
-<p>
- 您可以在 Android Beta 网站上随时注销注册 Android Beta 计划的设备。在注销前,请务必备份设备上的数据。
-
-
-</p>
-
- <p class="note"><strong>注</strong>:
- 注销后,<strong>您的设备将恢复到最新版本 Android 6.0 Marshmallow 的出厂设置</strong>(不一定是您注册设备前安装的版本)。
-
-
-为确保全新安装,您设备中的数据将被擦除,包括联系人、消息和照片等。
-
-
-</p>
-
-<h3 id="documentation_and_sample_code">文档和示例代码</h3>
-
-<p>
- Developer Preview 网站上提供的以下文档资源有助于您了解 Android N:
-
-</p>
-
-<ul>
- <li> <a href="{@docRoot}preview/setup-sdk.html">Android N 开发设置</a>,提供入门指南的分步说明。
-
-</li>
- <li> <a href="{@docRoot}preview/behavior-changes.html">行为变更</a>,带您了解主要测试领域。
-</li>
- <li> 新 API 文档,包括 <a href="{@docRoot}preview/api-overview.html">API 概览</a>、可下载的 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 参考资料</a>以及有关主要功能(例如多窗口支持、受限通知、多区域设置支持等)的详细开发者指南。
-
-
-
- <li> <a href="{@docRoot}preview/samples.html">示例代码</a>,演示如何支持权限和其他新功能。
-
- <li> N Developer Preview 当前版本的<a href="{@docRoot}preview/support.html#release-notes">版本说明</a>,包括变更说明和差异报告。
-
-
-</ul>
-
-<h4 id="reference">可下载的 API 参考资料</h4>
-
-<p>
- 在 Preview 更新初期,您可以下载最新的 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Android N 平台 API 参考资料</a>,作为单独的 Zip 存档。下载的参考资料还包含差异报告,可帮助您识别相对 API 23 和上一次更新 API 的变更。
-
-
-
-
-</p>
-
-<p>
- 在确定最终版本 Android N API 并指定正式 API 级别后,我们将在网站 <a href="https://developer.android.com">https://developer.android.com</a> 上提供 API 参考资料。
-
-</p>
-
-<h3 id="support_resources">
- 支持资源
-</h3>
-
-<p>
- 在 N Developer Preview 中测试和开发时,请使用以下渠道报告问题和提供反馈。
-
-</p>
-
-<ul>
- <li> <a href="https://code.google.com/p/android-developer-preview/">N Developer Preview Issue Tracker</a>是您的<strong>主要反馈渠道。</strong>
-您可通过 Issue Tracker 报告错误、性能问题和一般反馈。
-您还可检查 <a href="{@docRoot}preview/bugs">已知问题</a>并找出解决方法步骤。
-
-我们将对您的问题进行分类并发送到 Android 工程团队以供审查,且会为您提供进度更新通知。
- </li>
- <li> <a href="{@docRoot}preview/dev-community">Android N 开发者社区</a>是一个 Google+ 社区。在此社区中,您可<strong>与其他使用 Android N 的开发者建立联系</strong>。您可以分享观察结果或想法,或找到 Android N 问题的解决方法。我们将管理社区,并根据需要提供解答和指导。
-
-
-
-</li>
-</ul>
-
-<h3 id="targeting">锁定目标、Preview API 和发布</h3>
-
-<p>
- N Developer Preview 提供的系统和 Android 库仅面向开发,<strong>不具备标准的 API 级别</strong>。如果您想通过拒绝兼容性行为测试您的应用(强烈推荐此做法),则可将应用的 <code><a href=
- "{@docRoot}preview/setup-sdk.html#create-update">targetSdkVersion</a></code> 设置为 <code>“N”</code>,从而锁定 Android N 的预览版本。
-
-
-
-
-
-</p>
-
-<p>
- Android N Developer Preview 提供<strong>预览版 API</strong> 功能
-— 在最终的 SDK 发布之前,这些 API 都不是正式的 API。目前,最终的 SDK 计划于 2016 年第三季度发布。
-这意味着一段时期内,特别是该计划的最初几周内,
-<strong>API 可能会出现细微变化</strong>。
-我们会通过 Android N Developer Preview 的每次更新,为您提供一份变更摘要。
-
-</p>
-
-<p class="note">
- <strong>注</strong>:虽然 Preview API 可能会更改,但基本系统行为仍保持稳定,可以立即用于测试。
-
-
-</p>
-
-<p>
- Google Play <strong>禁止发布面向 N Developer Preview 的应用</strong>。
-当 Android N 最终版本 SDK 可用时,您可以锁定官方 Android N API 级别,并通过 alpha 和 beta 发布渠道将应用发布至 Google Play。
-
-与此同时,如果您需要将针对 Android N 的应用分发给测试者,则可通过电子邮件或从您的网站直接下载实现这一点。
-
-
-</p>
-
-<p>
- 在向 AOSP 和 OEM 全面发布 Android N 后(计划在 2016 年第三季度发布),您将可以在 Google Play 的公开发布渠道发布面向 Android N 的应用。
-
-
-</p>
-
-
-<h2 id="how_to_get_started">入门指南</h2>
-
-<p>
- 在使用 Android N 测试应用前,请执行以下操作:
-</p>
-
-<ol>
- <li> 查看 <a href="{@docRoot}preview/api-overview.html">API 概览</a>和<a href="{@docRoot}preview/behavior-changes.html">行为变更</a>,大致了解新功能及其如何影响您的应用。
-
-尤其是,您需要了解新的<a href="{@docRoot}preview/features/notification-updates.html">通知</a>功能和<a href="{@docRoot}preview/features/multi-window.html">多窗口支持</a>。
-
-</li>
- <li> 根据<a href="{@docRoot}preview/setup-sdk.html">设置 Preview SDK</a> 和配置测试设备的说明设置您的环境。
-</li>
- <li> 根据<a href="https://developers.google.com/android/nexus/images">刷入说明</a>,对设备刷入最新的 Android N 系统映像。
- </li>
- <li> 查阅 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 参考资料</a>和 <a href="{@docRoot}preview/samples.html">Android N 示例</a>,更深入地了解新 API 功能以及如何在应用中使用这些功能。
-
-
- <li> 加入 <a href="{@docRoot}preview/dev-community">Android N 开发者社区</a>,获取最新资讯,并与使用新平台的其他开发者建立联系。
-
-</li>
-</ol>
-
-<p>
- 感谢您加入 Android N Developer Preview 计划!
-</p>
diff --git a/docs/html-intl/intl/zh-cn/preview/preview_toc.cs b/docs/html-intl/intl/zh-cn/preview/preview_toc.cs
deleted file mode 100644
index 9e852c5..0000000
--- a/docs/html-intl/intl/zh-cn/preview/preview_toc.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-<ul id="nav">
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/overview.html" es-lang="Información general del programa" in-lang="Ikhtisar Program" ja-lang="プログラム概要" ko-lang="프로그램 개요" pt-br-lang="Visão geral do programa" ru-lang="Обзор программы" vi-lang="Tổng quan về Chương trình" zh-cn-lang="计划概览" zh-tw-lang="程式總覽">计划概览</a></div>
- </li>
-
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/support.html">支持与版本说明</a></div>
- </li>
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/setup-sdk.html" es-lang="Configurar el SDK de la versión preliminar" in-lang="Menyiapkan Preview" ja-lang="Preview SDK のセットアップ" ko-lang="미리 보기 SDK 설정하기" pt-br-lang="Configuração do Preview SDK" ru-lang="Настройка пакета SDK Preview" vi-lang="Kiểm thử trên Thiết bị" zh-cn-lang="设置预览版 SDK" zh-tw-lang="設定預覽版 SDK">设置 Preview</a></div>
- </li>
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/download.html" es-lang="Pruebe en un dispositivo" in-lang="Menguji pada Perangkat" ja-lang="デバイス上でテストする" ko-lang="기기에서 테스트" pt-br-lang="Testar em um dispositivo" ru-lang="Тестирование на устройстве" vi-lang="Kiểm thử trên Thiết bị" zh-cn-lang="在设备上测试" zh-tw-lang="在裝置上測試">在设备上测试</a></div>
- </li>
-
-
- <li class="nav-section">
- <div class="nav-section-header"><a href="<?cs var:toroot ?>preview/behavior-changes.html" es-lang="Cambios en los comportamientos" in-lang="Perubahan Perilaku" ja-lang="動作の変更点" ko-lang="동작 변경" pt-br-lang="Mudanças de comportamento" ru-lang="Изменения в работе" vi-lang="Các thay đổi Hành vi" zh-cn-lang="行为变更" zh-tw-lang="行為變更">行为变更</a></div>
- <ul>
- <li><a href="<?cs var:toroot ?>preview/features/background-optimization.html" es-lang="Optimizaciones en segundo plano" in-lang="Optimisasi Latar Belakang" ja-lang="バックグラウンド処理の最適化" ko-lang="백그라운드 최적화" pt-br-lang="Otimizações em segundo plano" ru-lang="Оптимизация фоновых процессов" vi-lang="Tối ưu hóa Chạy ngầm" zh-cn-lang="后台优化" zh-tw-lang="背景最佳化">后台优化</a></li>
- <li><a href="<?cs var:toroot ?>preview/features/multilingual-support.html" es-lang="Idioma y configuración regional" in-lang="Bahasa dan Lokal" ja-lang="言語とロケール" ko-lang="언어 및 로케일" pt-br-lang="Idioma e localidade" ru-lang="Язык и языковой стандарт" vi-lang="Ngôn ngữ và Bản địa" zh-cn-lang="语言和区域设置" zh-tw-lang="語言和地區設定">语言和区域设置</a></li>
- </ul>
- </li>
-
- <li class="nav-section">
- <div class="nav-section-header"><a href="<?cs var:toroot ?>preview/api-overview.html" es-lang="Información general de la API" in-lang="Android N untuk Pengembang" ja-lang="API の概要" ko-lang="API 개요" pt-br-lang="Visão geral da API" ru-lang="Обзор API-интерфейсов" vi-lang="Android N cho Nhà phát triển" zh-cn-lang="API 概览" zh-tw-lang="API 總覽">Android N for Developers </a></div>
- <ul>
-
- <li><a href="<?cs var:toroot ?>preview/features/multi-window.html" es-lang="Compatibilidad con ventanas múltiples" in-lang="Dukungan Multi-Jendela" ja-lang="マルチ ウィンドウのサポート" ko-lang="다중 창 지원" pt-br-lang="Suporte a várias janelas" ru-lang="Поддержка многооконного режима" vi-lang="Hỗ trợ đa cửa sổ" zh-cn-lang="多窗口支持" zh-tw-lang="多視窗支援">多窗口支持</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/notification-updates.html" es-lang="Notificaciones" in-lang="Pemberitahuan" ja-lang="通知" ko-lang="알림" pt-br-lang="Notificações" ru-lang="Уведомления" vi-lang="Thông báo" zh-cn-lang="通知" zh-tw-lang="通知">通知</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/data-saver.html">Data Saver</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/tv-recording-api.html" es-lang="Grabación de TV" in-lang="Perekaman TV" ja-lang="TV の録画" ko-lang="TV 녹화" pt-br-lang="Gravação para TV" ru-lang="Запись ТВ" vi-lang="Ghi lại TV" zh-cn-lang="TV 录制" zh-tw-lang="電視錄製">TV 录制</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/security-config.html" es-lang="Configuración de seguridad de la red" in-lang="Network Security Configuration" ja-lang="ネットワーク セキュリティ構成" ko-lang="네트워크 보안 구성" pt-br-lang="Configurações de segurança de rede" ru-lang="Конфигурация сетевой безопасности" vi-lang="Cấu hình Bảo mật mạng" zh-cn-lang="网络安全配置" zh-tw-lang="網路安全性設定">网络安全配置</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/icu4j-framework.html" es-lang="API de ICU4J del framework de Android" in-lang="ICU4J Android Framework API" ja-lang="ICU4J Android フレームワーク API" ko-lang="ICU4J Android 프레임워크 API" pt-br-lang="APIs de estrutura do Android para ICU4J" ru-lang="API-интерфейсы ICU4J в платформе Android" vi-lang="API Khuôn khổ Android ICU4J" zh-cn-lang="ICU4J Android 框架 API" zh-tw-lang="ICU4J Android 架構 API">ICU4J 支持</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/j8-jack.html" es-lang="Funciones del lenguaje Java 8" in-lang="Fitur Bahasa Java 8" ja-lang="Java 8 の機能" ko-lang="Java 8 언어 기능" pt-br-lang="Recursos de linguagem do Java 8" ru-lang="Возможности языка Java 8" vi-lang="Tính năng của Ngôn ngữ Java 8" zh-cn-lang="Java 8 语言功能" zh-tw-lang="Java 8 語言功能">Java 8 语言功能</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/afw.html">Android for Work 更新</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/scoped-folder-access.html" es-lang="Acceso a directorios determinados" in-lang="Scoped Directory Access" ja-lang="特定のディレクトリへのアクセス" ko-lang="범위가 지정된 디렉터리 액세스" pt-br-lang="Acesso a diretórios com escopo" ru-lang="Доступ к выделенным каталогам" vi-lang="Truy cập Thư mục theo Phạm vi" zh-cn-lang="作用域目录访问" zh-tw-lang="限定範圍目錄存取">作用域目录访问</a></li>
- </ul>
- </li>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/samples.html" es-lang="Ejemplos" in-lang="Contoh" ja-lang="サンプル" ko-lang="샘플" pt-br-lang="Exemplos" ru-lang="Примеры" zh-cn-lang="示例" zh-tw-lang="範例">示例</a></div>
- </li>
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/license.html" es-lang="Contrato de licencia" ja-lang="使用許諾契約" ko-lang="라이선스 계약" pt-br-lang="Contrato de licença" ru-lang="Лицензионное соглашение" zh-cn-lang="许可协议" zh-tw-lang="授權協議">许可协议</a></div>
- </li>
-
-</ul>
\ No newline at end of file
diff --git a/docs/html-intl/intl/zh-cn/preview/samples.jd b/docs/html-intl/intl/zh-cn/preview/samples.jd
deleted file mode 100644
index dd68566..0000000
--- a/docs/html-intl/intl/zh-cn/preview/samples.jd
+++ /dev/null
@@ -1,85 +0,0 @@
-page.title=示例
-page.tags="preview", "samples", "android"
-page.image=images/cards/card-n-samples_2x.png
-@jd:body
-
-<p>
- 以下是 Android N 的代码示例。要在 Android Studio 中下载示例,请选择 <b>File > Import Samples</b> 菜单项。
-
-
-</p>
-
-<p class="note">
- <strong>注:</strong>这些可下载的项目设计用于与 Gradle 和 Android Studio 结合使用。
-
-</p>
-
-
-<h3 id="mw">多窗口 Playground</h3>
-<img src="{@docRoot}preview/images/sample-multiwindow.png" style="float: left; padding-right: 0.5em" height="250" width="156" />
-<p>
- 此示例演示如何在您的应用中充分利用多窗口用户界面。
-
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-MultiWindowPlayground">
-在 GitHub 中获取</a>
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="an">活动通知</h3>
-<img src="{@docRoot}preview/images/sample-activenotifications.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
-<p>
- 这是一个已存在的示例,其显示一个使用 NotificationCompat 发送通知的简单服务。该服务将来自用户的每个未读会话以不同的通知形式发送。
-
-
-</p>
-<p>
- 此示例已更新,以充分利用 Android N 中提供的新的通知功能。
-
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-ActiveNotifications">在 GitHub 中获取</a>
-
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="ms">消息传递服务</h3>
-<img src="{@docRoot}preview/images/sample-messagingservice.png" style="float: left; padding-right: 0.5em" height="250" width="150" />
-<p>
- 这是一个已存在的示例,其演示如何使用 NotificationManager 指示应用当前显示的通知数量。
-
-
-</p>
-<p>
- 此示例已更新,以充分利用 Android N 中提供的新的通知功能。
-
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-MessagingService">在 GitHub 中获取</a>
-
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="fbe">直接启动</h3>
-<img src="{@docRoot}preview/images/sample-directboot.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
-<p>
- 此示例显示如何在设备加密的存储(启动设备后始终可用)中存储和访问数据。
-
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-DirectBoot">在 GitHub 中获取</a>
-
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="sda">作用域目录访问</h3>
-<img src="{@docRoot}preview/images/sample-scopeddirectoryaccess.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
-<p>
- 此示例演示如何从特定目录读取和写入数据,同时需要较少的权限。
-
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-ScopedDirectoryAccess">在 GitHub 中获取</a>
-
-</p>
\ No newline at end of file
diff --git a/docs/html-intl/intl/zh-cn/preview/setup-sdk.jd b/docs/html-intl/intl/zh-cn/preview/setup-sdk.jd
deleted file mode 100644
index c629cd9..0000000
--- a/docs/html-intl/intl/zh-cn/preview/setup-sdk.jd
+++ /dev/null
@@ -1,187 +0,0 @@
-page.title=设置 Preview
-meta.keywords="preview", "android"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-sdk_2x.png
-
-@jd:body
-
-
-<div id="qv-wrapper">
- <div id="qv">
-<ol>
- <li><a href="#get-as13">获取 Android Studio 2.1</a></li>
- <li><a href="#get-sdk">获取 Android N SDK</a>
- <ol>
- <li><a href="#docs-dl">参考文档</a>
- </ol>
- </li>
- <li><a href="#java8">获取 Java 8 JDK</a></li>
- <li><a href="#create-update">更新或创建一个项目</a></li>
- <li><a href="#next">后续步骤</a></li>
-</ol>
- </div>
-</div>
-
-<p>若要开发适用于 Android N Preview 的应用,您需要对您的开发者环境进行一些更新,如本页所述。
-</p>
-
-<p>若只是在 Android N 系统映像上测试应用的兼容性,请按照<a href="{@docRoot}preview/download.html">在 Android N 设备上进行测试</a>指南进行操作。
-</p>
-
-<img src="{@docRoot}preview/images/n-preview-setup.png" width="700" alt="" />
-
-
-<h2 id="get-as13">获取 Android Studio 2.1</h2>
-
-<p>Android N 平台为 <a href="{@docRoot}preview/j8-jack.html">Java 8 语言功能</a>添加支持,该功能需要一个名为 Jack 的新编译。
-当前仅在 Android Studio 2.1 中支持最新的 Jack 版本。因此,如果您想要使用 Java 8 语言功能,则必须使用 Android Studio 2.1 构建应用。
-
-
-或者,您不需要使用 Jack 编译器,但仍需要更新至 JDK 8 以便使用 Android N 平台进行编译,如下所述。
-
-</p>
-
-<p>如果您已经安装了 Android Studio,请通过点击 <strong>Help > Check for Update</strong>(在 Mac 上,点击 <strong>Android Studio > Check for Updates</strong>)来确保您安装的是 Android Studio 2.1 或更高版本。
-
-</p>
-
-<p>如果您尚未安装,请在此处<a href="{@docRoot}studio/">下载 Android Studio 2.1</a>。
-</p>
-
-
-<h2 id="get-sdk">获取 N Preview SDK</h2>
-
-<p>开始使用 Android N API 进行开发时,您需要按如下所示在 Android Studio 中安装 Android N Preview SDK:
-</p>
-
-<ol>
- <li>点击 <strong>Tools >Android >
-SDK Manager</strong> 来打开 SDK 管理器。</li>
-
- <li>在 <strong>SDK Platforms</strong> 选项卡中选中 <strong>Android N Preview</strong> 复选框。
-</li>
-
- <li>点击 <strong>SDK Tools</strong> 选项卡,然后选中
- <strong>Android SDK Build Tools</strong>、<strong>Android SDK
- Platform-Tools</strong> 和 <strong>Android SDK Tools</strong> 复选框。
-
- </li>
-
- <li>点击 <strong>OK</strong>,然后接受需要安装的所有软件包的许可协议。
-
- </li>
-</ol>
-
-<h3 id="docs-dl">获取 N Preview 参考文档</h3>
-
-<p>
- 有关 Android N API 的详细信息可在 N Preview 参考文档中获取,您可以从下表下载该文档。此软件包包含一个离线的删节版 Android 开发者网站,并包含更新的 API 参考(适用于 Android N API),以及一个 API 差异报告。
-
-
-
-
-</p>
-
-<table>
- <tr>
- <th scope="col">文档</th>
- <th scope="col">校验和</th>
- </tr>
- <tr>
- <td style="white-space: nowrap">
- <a href="{@docRoot}shareables/preview/n-preview-3-docs.zip">n-preview-3-docs.zip</a></td>
- <td width="100%">
- MD5:19bcfd057a1f9dd01ffbb3d8ff7b8d81<br>
- SHA-1:9224bd4445cd7f653c4c294d362ccb195a2101e7
- </td>
- </tr>
-<table>
-
-
-
-<h2 id="java8">获取 Java 8 JDK</h2>
-
-<p>若要使用 Android N 平台编译您的应用,并在 Android Studio 2.1 中使用一些工具,您需要安装 Java 8 Developer Kit (JDK 8)。
-因此,如果您还没有最新版本,请立即下载 JDK 8 。
-</p>
-
-<p>然后,按如下所示在 Android Studio 中设置 JDK 版本:</p>
-
-<ol>
- <li>在 Android Studio 中打开 Android 项目,然后通过选择 <strong>File > Project Structure</strong> 打开“Project Structure”对话框。(或者,您可以通过选择 <strong>File > Other Settings > Default Project Structure</strong> 设置所有项目的默认值。)
-
-
-
-
- </li>
- <li>在对话框的左侧面板中,点击 <strong>SDK Location</strong>。
- </li>
- <li>在 <strong>JDK Location</strong> 字段中,输入 Java 8 JDK 的位置(点击右侧的按钮可浏览您的文件),然后点击 <strong>OK</strong>。
-
-
- </li>
-</ol>
-
-<img src="{@docRoot}preview/images/studio-jdk-location.jpg" width="700" alt="" />
-
-
-<h2 id="create-update">更新或创建一个项目</h2>
-
-<p>
- 若要使用 Android N API,则必须正确配置您的项目。
-</p>
-
-<p>如果您计划使用 Java 8 语言功能,您还应阅读 <a href="{@docRoot}preview/j8-jack.html">Java 8 语言功能</a>,以更详细的了解支持的 Java 8 功能,以及如何使用 Jack 编译器配置项目。
-
-
-</p>
-
-
-<h3 id="update">更新现有项目</h3>
-
-<p>打开模块的 <code>build.gradle</code> 文件,并按如下所示更新值:
-
-
-</p>
-
-<pre>
-android {
- compileSdkVersion <strong>'android-N'</strong>
- buildToolsVersion <strong>'24.0.0-rc3'</strong>
- ...
-
- defaultConfig {
- minSdkVersion <strong>'N'</strong>
- targetSdkVersion <strong>'N'</strong>
- ...
- }
- ...
-}</pre>
-
-
-<h3 id="create">创建新项目</h3>
-
-
-<p>若要使用 Android N Preview SDK 创建新的开发项目:</p>
-
-<ol>
- <li>点击 <strong>File > New Project</strong>。按照步骤进行操作,直到您到达“Target Android Devices”页面。
-
- </li>
- <li>在此页面上,选择 <strong>Phone and Tablet</strong> 选项。</li>
- <li>在 <strong>Phone and Tablet</strong> 选项下,从 <strong>Minimum SDK</strong> 选项列表中,选择 <strong>N: Android API 23, N Preview (Preview)</strong>。
-
-</li>
-</ol>
-
-
-<h2 id="next">后续步骤</h2>
-
-<ul>
- <li>按照<a href="{@docRoot}preview/download.html">在 Android N 设备上进行测试</a>指南进行操作。</li>
- <li>通过<a href="{@docRoot}preview/behavior-changes.html">行为变更</a>以及 <a href="{@docRoot}preview/api-overview.html">Android N API 和功能</a>了解更多有关 Android N 平台的信息。
-
-
-</li>
-</ul>
-
diff --git a/docs/html-intl/intl/zh-cn/preview/support.jd b/docs/html-intl/intl/zh-cn/preview/support.jd
deleted file mode 100644
index 353a71d..0000000
--- a/docs/html-intl/intl/zh-cn/preview/support.jd
+++ /dev/null
@@ -1,1188 +0,0 @@
-page.title=支持和版本说明
-meta.keywords="preview", "android"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-support_2x.png
-
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>本文内容</h2>
-
-<ul>
- <li><a href="#dp3">Developer Preview 3</a>
- <ul>
- <li><a href="#general">一般公告</a></li>
- <li><a href="#new">DP3 的新功能</a></li>
- <li><a href="#ki">已知问题</a></li>
- </ul>
- </li>
- <li><a href="#dp2">Developer Preview 2</a></li>
- <li><a href="#dp1">Developer Preview 1</a></li>
-</ul>
-
-<!--
-<h2>See Also</h2>
-<ol>
- <li></li>
-</ol>
--->
-
-</div>
-</div>
-
-<p>
- 当您使用 Android N Developer Preview 进行开发和测试时,您可借助两个主要支持渠道:
-请在 <a href="https://developer.android.com/preview/bug">https://developer.android.com/preview/bug</a> 提交有关设备、系统和 Google App 错误的错误。
-对于其他应用问题,请直接联系开发者。
-
-</p>
-
-<p>若要与其他参与 Android N 的开发者讨论问题或想法,请加入 <a href="{@docRoot}preview/dev-community">Developer Preview Google+ 社区</a>。
-</p>
-
-<h2 id="dp3">Developer Preview 3</h2>
-
-<div class="wrap">
- <div class="cols">
- <div class="col-6of12">
- <p>
- <em>日期:2016 年 5 月<br>
- 构建:NPD35K<br>
- 模拟器支持:x86 & ARM(32/64 位)<br>
- Google Play 服务:8.4</em>
- </p>
- </div>
- </div>
-</div>
-
-<h3 id="general">一般公告</h3>
-
-<p>
- Developer Preview 版本适用于<strong>应用开发者和其他早期试用者</strong>,可用于日常使用、开发或兼容性测试。
-
-请注意关于版本的一般注意事项:
-
-</p>
-
-<ul>
- <li>这个版本可能会在支持设备上出现不同的<strong>稳定性问题</strong>。
-用户可能会遇到系统不稳定,如内核错误和崩溃。
-
- </li>
-
- <li>有些应用<strong>可能无法在新的平台版本上如预期运行。</strong>
-这其中包括 Google 应用和其他应用。
- </li>
-
- <li>Developer Preview 3 已在以下设备上经过<strong>兼容性测试套件 (CTS) 批准</strong>:
-Nexus 5X、Nexus 6、Nexus 6P 和 Pixel C。依赖 CTS 批准构建的应用应能在这些设备上正常运行(例如 Android Pay)。
-
-
- </li>
-
- <li>Developer Preview 3 <strong>适用于所有支持设备:</strong>
-Nexus 5X、Nexus 6、Nexus 6P、Nexus 9、Nexus Player、Pixel C、General Mobile 4G (Android One) 以及 Sony Xperia Z3 (D6603 和
- D6653 型号)。
-
-
- </li>
-</ul>
-
-
-<h3 id="new">DP3 的新功能</h3>
-
-<h4 id="">面向 Android 的 VR 模式</h4>
-
-<p>
- Android N 为新的 VR 模式增加了平台支持和优化,以使开发者能为用户打造高质量移动 VR 体验。
-增加了一些性能增强特性,包括允许 VR 应用访问某个专属的 CPU 核心。
-
-在您的应用中,您可以充分利用到专为 VR 设计的智能头部跟踪和立体声通知功能。
-最重要的是,Android N 的图形延时非常低。
-
-</p>
-
-<p>
- 如需更多信息,请参阅<a href="https://developers.google.com/vr/android/">面向 Android 的Google VR SDK</a>。
-</p>
-
-<h4 id="">持续性能模式</h4>
-
-<p>
- 为解决这些限制,Android N 包括了<a href="{@docRoot}preview/api-overview.html#sustained_performance_api">持续性能模式</a> 支持,帮助原始设备制造商 (OEM) 提供关于长期运行应用的设备性能能力的提示。
-
-应用开发者随后可以使用这些提示来根据可预测的一致设备性能水平调整长期应用。
-
-应用开发者只能在 Nexus 6P 设备的 Developer Preview 上尝试这项新的 API。
-
-</p>
-
-<h4>多进程 WebView</h4>
-
-<p>
- 从 Android N 中的版本 51 开始,WebView 将开发者选项“多进程 WebView”被启用时,在一个单独的沙盒进程中运行网页内容。
-
-WebView 团队正在寻求关于 N 中的兼容性和运行时性能的反馈,并随后将在未来 Android 版本中启用多进程 WebView。
-
-在这个版本中,可预期启动时间回归、总内存使用和软件渲染性能。
-
-</p>
-
-<p>
- 如果您在多进程模式中遇到意外问题,请告诉我们。
-请通过<a href="https://bugs.chromium.org/p/chromium/issues/entry?template=Webview%20Bugs">提交错误</a>来联系 WebView 团队。
-
-</p>
-
-<h4 id="">键盘快捷键辅助工具</h4>
-
-<p>
- 在 Android N 中,用户可以按 <code>Meta+/</code> 触发<strong>键盘快捷键</strong>屏幕,它会显示系统和对焦的应用中可用的所有快捷键。
-
-开发者可以添加自己的快捷键,或者从他们的应用触发快捷键屏幕。
-请参阅<a href="{@docRoot}preview/api-overview.html#keyboard_shortcuts_helper">键盘快捷键辅助工具</a>以了解详细信息。
-
-</p>
-
-<h4 id="">FrameMetrics API</h4>
-
-<p>
- DP3 引入了一项新的 <a href="{@docRoot}preview/api-overview.html#framemetrics_api">FrameMetrics API</a>,它通过公开流式传输 Pub/Sub API 来传递应用的当前窗口帧计时信息,允许应用监测其 UI 渲染性能。<code>FrameMetricsListener</code> 可用于从更高的粒度衡量生产中的交互级 UI 性能,无需 USB 连接。
-
-
-
-
-
-</p>
-
-<h4 id="api-changes">功能和 API 更改</h4>
-
-<dl>
- <dt>
- 启动器快捷键和启动器快捷键 API
- </dt>
-
- <dd>
- 我们已经决定将这项功能推迟到未来的 Android 版本中。我们计划从下一个 Developer Preview 开始,从公开 Android N API 中移除启动器快捷键 API(ShortcutManager 等)。
-
-
- </dd>
-
- <dt>
- WebView Javascript 在页面加载之前运行
- </dt>
-
- <dd>
- 从面向 Android N 的应用开始,JavaScript 上下文会在加载新页面时重置。
-目前,新 {@link android.webkit.WebView} 实例中加载的第一个页面会继承上下文。
-
- 想要在 {@link
- android.webkit.WebView} 中注入 Javascript 的开发者应在页面开始加载后执行脚本。
-
- </dd>
-
- <dt>
- 不安全起点上的 WebView 地理定位
- </dt>
-
- <dd>
- 从面向 Android N 的应用开始,地理定位 API 将仅在安全的起点(通过 HTTPS)上被允许。
-此政策的目的是在用户使用不安全连接时保护他们的私人信息。
-
- </dd>
-
- <dt>
- Data Saver
- </dt>
-
- <dd>
- 从 Developer Preview 3 开始,应用可以使用 Intent 来显示系统对话框,使用户能直接向 Data Saver 豁免白名单中添加应用。
-
-请参阅 <a href="{@docRoot}preview/api-overview.html#data_saver">Data Saver 文档</a>以了解详细信息。
-
- </dd>
-
- <dt>
- <a href="{@docRoot}preview/api-overview.html#number-blocking">号码屏蔽</a>
- </dt>
-
- <dd>
- 如果未经授权的用户试图屏蔽或取消屏蔽一个号码,操作会即时失败,并返回 {@link java.lang.SecurityException}。
-(之前,操作曾引发 {@link java.lang.UnsupportedOperationException} )
-
- </dd>
-
- <dt>
- <a href="{@docRoot}preview/api-overview.html#tile_api">快速设置图块 API</a>
-
- </dt>
-
- <dd>
- 系统现在使用 Activity 的元数据来决定图块模式。
- (之前平铺模式是由 <code>TileService.onTileAdded()</code> 的返回值决定。)
-如需了解详细信息,请参阅可下载的 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 参考</a> 中的
-<code>TileService.META_DATA_ACTIVE_TILE</code>。
- </dd>
-</dl>
-
-<h4 id="dp3-fixes">修复开发者报告的问题</h4>
-
-<p>
- 开发者报告的许多问题都已得到修复,包括:
-</p>
-
-<ul>
- <li>在 1 首歌后蓝牙音频播放中断(错误 <a href="https://code.google.com/p/android/issues/detail?id=206889">206889</a>)
- </li>
-
- <li>Pixel C 不断崩溃(错误 <a href="https://code.google.com/p/android/issues/detail?id=206962">206962</a>)
- </li>
-
- <li>时钟和 Toast 通知问题(错误 <a href="https://code.google.com/p/android/issues/detail?id=203094">203094</a>)
- </li>
-
- <li>当通过 USB C 电缆连接到 MacBook Pro 时,Pixel C 重新启动(错误 <a href="https://code.google.com/p/android/issues/detail?id=205432">205432</a>)
-
- </li>
-
- <li>日历偏移一天(错误 <a href="https://code.google.com/p/android/issues/detail?id=203002">203002</a>)
- </li>
-
- <li>TelephonyManager.getAllCellInfo 返回无效数据(错误 <a href="https://code.google.com/p/android/issues/detail?id=203022">203022</a>)
- </li>
-
- <li>Nexus 6p,蓝牙一直断开(错误 <a href="https://code.google.com/p/android/issues/detail?id=208062">208062</a>)
- </li>
-</ul>
-
-<p>如需已修复问题的完整清单,请参阅 <a href="https://goo.gl/6uCKtf">Issue Tracker</a>。
-</p>
-
-<h3 id="ki">已知问题</h3>
-
-<h4>无障碍功能</h4>
-
-<ul>
- <li>将间距被设置为近最大水平时,无法侦听 TTS 输出。
- </li>
-
- <li>当用户添加工作资料时可能会使无障碍功能和设置中断。
-无障碍状态会在用户下一次触及相关设置时恢复。
-
- </li>
-</ul>
-
-<h4>相机</h4>
-
-<ul>
- <li>相机应用表现出了不稳定性;它可能会在各种情况下崩溃,例如当在多窗口模式下启动时。
-
- </li>
-
- <li>在全景模式下连按快门可能导致相机应用崩溃。
-
- </li>
-</ul>
-
-<h4>音频</h4>
-<ul>
- <li>平台音频播放器问题阻止某些应用程序的正常运行。
-例如,Skype 和其他应用程序受到此问题的影响。
- </li>
-</ul>
-
-<h4>连接</h4>
-
-
-<ul>
- <li>当蓝牙低功耗 (BLE) 外围角色设备公布一项服务和一项 BLE 中心角色设备相连时,外围角色设备很快会断开连接。
-
-
- </li>
-
- <li>当屏幕关闭时 Wi-Fi 连接可能丢失。
- </li>
-
- <li>RFCOMM 连接不稳定,可能导致数据损坏和悬挂的连接。
-
- </li>
-
- <li>活动网络状态({@link android.net.NetworkInfo#getState
- NetworkInfo.getState()} 和 {@link android.net.NetworkInfo#getDetailedState
- NetworkInfo.getDetailedState()})可能会在一些受限制的后台情况下返回错误的值。
-
- </li>
-</ul>
-
-
-<h4>
- 启动器
-</h4>
-
-<ul>
- <li>默认启动器的所有应用托盘都可能在循环关闭/开启屏幕后无响应。
-返回到主屏幕并重新启动所有应用程序托盘可以解决这个问题。
-
- </li>
-</ul>
-
-<h4>
- 键盘
-</h4>
-
-<ul>
- <li>在将一个运行 Android 6.0 或更早版本的设备更新到 N Developer Preview 时,Google 键盘不会保留首选项数据,如最近的表情符号和声音设置。
-
-
- </li>
-
- <li>Google Indic 托管键盘可能不稳定。
- </li>
-
- <li>当在密码字段中输入文本时,用户可以选择俄罗斯语作为输入语言,但键盘仍将为英语。
-这可以防止用户输入俄罗斯语的密码。
-
- </li>
-</ul>
-
-<h4>
- 区域设置和语言
-</h4>
-
-<ul>
- <li>当使用从右到左 (RTL) 的语言区域时,系统可能会在重新启动设备后意外切换到从左到右 (LTR) 表示。
-
- </li>
-</ul>
-
-<h4>媒体</h4>
-
-<ul>
- <li>Nexus 9 和 Nexus Player 上的媒体播放可能会不稳定,包括播放高清视频出现问题。
-
- </li>
-</ul>
-
-<h4>
- 多窗口模式
-</h4>
-
-<ul>
- <li>当在多窗口模式下改变屏幕方向时,设备可能会冻结。
- </li>
-
- <li>目前有几个应用程序出现了多窗口模式问题:
- <ul>
- <li>当把“Settings > Display > Screen brightness”对接到多窗口时,系统 UI 可能崩溃。
-
- </li>
-
- <li>在多窗口模式下启动时,相机应用可能会崩溃。
- </li>
-
- <li>在多窗口模式下启动时,YouTube 可能会崩溃。若要修复此问题,您可以在“Storage > Apps > YouTube”中清除 YouTube 应用数据。
-
-
- </li>
- </ul>
- </li>
-</ul>
-
-<h4>
- Google Play 服务
-</h4>
-
-<ul>
- <li>当用户选择一个使用 ASCII 范围外的字母和数字的系统语言区域时,通过 Google Play 服务使用 Google Cast 的应用可能会不稳定。
-
-
- </li>
-</ul>
-
-<h4>
- Android for Work 和 Google Apps 设备规范
-</h4>
-
-<ul>
- <li>当用户在“设备规范状态”屏幕固定的情况下解锁设备时,设备规范应用可能会崩溃。
-
- </li>
-
- <li>在启用了基于文件的加密的情况下,在设置了工作资料并随后关闭工作后,用户必须解锁主个人资料屏幕锁定,以便能再次访问工作应用。
-
-
- </li>
-
- <li>在移除安全模式锁定并在多窗口下打开工作应用/个人应用时,设备重新启动。
-
- </li>
-
- <li>设置 DISALLOW_VPN_CONFIG 会导致设备规范客户端设置的 Always-on-VPN 显示同意对话框。
-
- </li>
-
- <li>在 VPN 以 Always-on-VPN 模式连接之前,流量不会锁定。
- </li>
-</ul>
-
-<h4>
- 外部存储
-</h4>
-
-<ul>
- <li>当用户将应用从内部存储移动到可采用的外部存储(可能包括 SD 卡和通过 USB 连接的设备)时,应用可能会变得不稳定。
-
-
- </li>
-</ul>
-
-<h4>
- Google Play 中的屏幕缩放和多 APK
-</h4>
-
-<ul>
- <li>在运行 Android N 的设备上,Google Play 服务 9.0.83 错误地报告当前屏幕密度,而不是报告稳定屏幕密度。
-当屏幕缩放在这些设备上启用时,可能会导致 Google Play 选择一个为更小的屏幕设计的多 APK 应用版本。
-
-此问题已在下一版 Google Play 服务中得到修复,并将包含在以后的 Developer Preview 版本中。
-
-
- </li>
-
- <li>在运行 Android N 的设备上,Google Play 服务 9.0.83 版目前会报告 Vulkan 支持,但不会报告 Vulkan 版本。
-这可能会导致 Google Play 在有较高版本支持的设备上选择为较低的 Vulkan 支持而设计的多 APK 应用版本。
-
-目前,Google Play Store 不接受使用 Vulkan 版本定位的应用上传。
-这一支持将被添加到未来的 Google Play Store 中,并会在下一版 Google Play 服务(将包括在稍后的 Developer Preview 版本中)中得到修复,任何使用 Google Play 服务 9.0.83 版本的设备都将继续获得面向基本 Vulkan 支持的应用版本。
-
-
-
-
- </li>
-</ul>
-
-<h4 id="">通知</h4>
-
-<ul>
- <li>MessagingStyle 不显示发件人为“null”(自己)的通知。
- </li>
-</ul>
-
-<h4 id="">开发者工具</h4>
-
-<ul>
- <li>
- <code>adb</code> 有时可能在使用 JDWP 调试时断开连接。
- </li>
-</ul>
-
-<!-- TBA, if any
-<h4>Device-specific issues</h4>
-
-<dl>
- <dt>
- <strong>Device Name</strong>
- </dt>
-
- <dd>
- Issue 1
- </dd>
-
- <dd>
- Issue 2
- </dd>
-</dl>
-
--->
-
-
-
-
-
-
-
-<!-- DP2 Release Notes Archive -->
-
-<h2 id="dp2">Developer Preview 2</h2>
-
-<div class="wrap">
- <div class="cols">
- <div class="col-6of12">
- <p>
- <em>日期:2016 年 4 月<br>
- 构建:NPC91K、NPC91O<br>
- 模拟器支持:x86 & ARM(32/64 位)<br>
- Google Play 服务:8.4</em>
- </p>
- </div>
- </div>
-</div>
-
-<h3 id="dp2-new">DP2 的新功能</h3>
-
-<ul>
- <li>Vulkan(新的 3D 渲染 API)的平台支持,提供明晰、低开销的 GPU(图形处理单元)控制功能,同时大大提升绘图调用密集型应用的性能。
-
-有关详情,请参阅
-<a href="{@docRoot}ndk/guides/graphics/index.html"> 文档</a>。
- </li>
-
- <li>新人物表情符号,带肤色支持和新的 Unicode 9 字形。
- 在键盘在调色板中建立对它们的支持之前,肤色和新的表情符号将不会显示。
-开发者不需要进行任何操作便能使用这些新的表情符号,除非应用使用的是非系统字体。
-IME 开发者需要整合对新表情符号的支持。
-
- </li>
-
- <li>
- <a href="{@docRoot}preview/api-overview.html#launcher_shortcuts">启动器快捷键 API</a>:
-应用可以使用 <code>ShortcutManager</code> 来向启动器发送应用内起点的快捷键。
-
- </li>
-
- <li>
- <a href="{@docRoot}preview/features/multi-window.html">多窗口</a>:
- 您现在可以为 Activity 单独指定最小高度和最小宽度。
-此外,一些 API 名称已略有改变。
- </li>
-</ul>
-
-<h4 id="dp2-fixes">修复开发者报告的问题</h4>
-
-<p>
- 开发者报告的许多问题都已得到修复,包括:
-</p>
-
-<ul>
- <li>无法连接到隐藏的 SSID 或非广播 Wi-Fi。(错误 <a href="https://code.google.com/p/android/issues/detail?id=203116">203116</a>)
- </li>
-
- <li>麦克风在整个活动期间保持静音状态。(错误 <a href="https://code.google.com/p/android/issues/detail?id=205922">205922</a>)
- </li>
-
- <li>更改多窗口焦点会暂停 YouTube。(错误 <a href="https://code.google.com/p/android/issues/detail?id=203424">203424</a>)
- </li>
-
- <li>直接回复可能关闭打开的活动。(错误 <a href="https://code.google.com/p/android/issues/detail?id=204411">204411</a>)
- </li>
-
- <li>各种稳定性修复。
- </li>
-</ul>
-
-<h3 id="dp2-general">一般公告</h3>
-
-<p>
- Developer Preview 版本仅针对<strong>应用开发者</strong>,仅适用于兼容性测试和早期开发。
-
- 请注意关于版本的一般注意事项:
-</p>
-
-<ul>
-
- <li>开发工具组件和支持库已更新为 DP2 版本。
-确保为在开发 DP2 之前更新您的预览开发环境。
-如需有关设置您的开发环境的说明,请参阅 <a href="{@docRoot}preview/setup-sdk.html">设置 Preview</a>
-
-
- </li>
-
- <li>此版本在所有设备上都出现了不同的稳定性和性能问题,<strong>不适合在手机或平板电脑上的日常使用</strong>,特别是对于非开发人员。
-
-
- </li>
-
- <li>在此版本中,电池寿命和性能尚未优化:
-
-
- <ul>
- <li>系统和应用<strong>性能已知会周期性地减缓/卡顿</strong>,设备可能偶尔无响应。
-这些问题可能随着长时间使用而变得更迫切。
-
- </li>
-
- <li>电池寿命可能在此版本的屏幕开启和屏幕关闭用例里出现倒退。
-
- </li>
- </ul>
- </li>
-
- <li>有些<strong>应用可能无法在 Developer Preview 2 上正常</strong>运行。这其中包括 Google 应用和其他应用。
-
- </li>
-
- <li>这个早期版本未经<strong>兼容性测试套件 (CTS) 批准</strong>。
-依赖 CTS 批准架构的应用无法运行(例如 Android Pay)。
-
- </li>
-
- <li>此预览版支持以下设备:Nexus 5X、Nexus 6、 Nexus 6P、Nexus 9、and Pixel C 以及 General Mobile 4G (Android One)。
-
-即将推出 Nexus Player 支持。
- </li>
-
-
- <li><a href="https://github.com/googlesamples/android-testdpc/releases">TestDPC</a> 已被更新,以处理 DP1 和 DP2 之间的 API 变更。
-
- </li>
-</ul>
-
-<h3 id="dp2-ki">已知问题</h3>
-
-<h4>性能和电池</h4>
-
-<ul>
- <li>系统和应用<strong>性能已知会周期性地减缓/卡顿</strong>,设备可能偶尔无响应。
-这些问题可能随着长时间使用而变得更迫切。
-
- </li>
-</ul>
-
-<h4>Google 帐户</h4>
-
-<ul>
- <li>在有些情况下,<code>AccountManagerService</code> 问题可能会阻止登录 Google 帐户。
-
- </li>
-</ul>
-
-<h4>系统更新</h4>
-
-<ul>
- <li>设备可能会在更新到 DP2 后立即重新启动。
- </li>
-</ul>
-
-<h4>无障碍功能</h4>
-
-<ul>
- <li>当间距被设置为近最大水平时,文本语音转换 (TTS) 输出侦听出现问题。
-
- </li>
-</ul>
-
-<h4>蓝牙</h4>
-
-<ul>
- <li>蓝牙低功耗 (LE) GATT 特征使用错误的写入类型,并且将不会被发送到远程设备。
-因此,举例来说,有些健身设备将无法运行。
-
- </li>
-</ul>
-
-<h4>设置向导</h4>
-
-<ul>
- <li>安装向导中的在新设备(或刚刚重置的设备)上从“Your Google Account”恢复数据的选项不可用。
-您必须在安装向导中选择“another Android device”来从现有设备恢复数据,或者将其设置为新设备。
-
-
- </li>
-</ul>
-
-<h4>原始设备制造商 (OEM) 解锁</h4>
-
-<ul>
- <li>在有些设备上,当运行 DP2 时,“Developer Options”中的 <strong>Enable OEM unlock</strong> 会变成灰色。
-<br>
- <strong>解决方法:</strong>访问 <a href="https://www.google.com/android/beta" class="external-link">www.google.com/android/beta</a> 来选择加入 Android Beta 计划(如果您尚未选择加入)。
-
-然后,选择退出并接受降级 OTA。
-选择退出会导致设备降级到 Android 6.0。现在,您应该可以在“Developer Options”中选择 <strong>Enable OEM unlock</strong>。
-
-当您降级设备时,个人数据将被删除;但是不管怎样,解锁引导装载程序仍会删除这些数据。
-
- </li>
-</ul>
-
-<h4>Android for Work</h4>
-
-<ul>
- <li>工作安全性挑战
- <ul>
- <li>在迁移到 N 后,或在用户创建工作资料之后,工作资料无法在密钥库中创建秘钥,直到用户更改了模式、PIN 码或密码,或设置了一项工作挑战为止。
-
-
- </li>
-
- <li>在直接启动模式下,对设备应用密码限制会导致工作资料被解锁,即使设备是锁定的。
-
- 这会使工作资料变得可以访问,即使它应受到设备锁屏的保护。
-
- </li>
- </ul>
- </li>
-
- <li>Always on VPN
- <ul>
- <li>如果 Always On VPN 模式已打开,但 VPN 却不可用,这表示应用是通过普通网络链接。
-如果应用没有可用的 VPN 连接,这表示应用处于脱机状态。
-
- </li>
-
- <li>在 Always On 模式下,当设备以直接启动模式重新启动后,VPN 连接未建立,即使是在用户解锁安全锁屏之后。
-
-
- </li>
- </ul>
- </li>
-
- <li>暂停软件包
- <ul>
- <li>设备管理员可以暂停关键系统软件包,这可能会导致意外的行为,如拨打电话,即使此时显示了“Telephone disabled”对话框。
-
-
- </li>
- </ul>
- </li>
-
- <li>其他
- <ul>
- <li>如果当用户插入物理媒体(如 SD 卡)时 {@link
- android.os.UserManager#DISALLOW_MOUNT_PHYSICAL_MEDIA} 被设置为 true,设置应用会在启动时崩溃。
-
- </li>
-
- <li>工作资料中的第一次检查需要几分钟时间完成。
-
- </li>
- </ul>
- </li>
-</ul>
-
-<h4 id="vulkan">Vulkan</h4>
-
-<ul>
- <li>Nexus 5X/6P</li>
- <ul>
- <li>将连结数和非零之间的差值作为第一个连结数会导致 {@code vkCreateGraphicsPipeline()} 失败。
-</li>
- <li>Vulkan 在预期纹理坐标上表现出错误的采样行为。</li>
- <li>在 multithreadCmdBuffer 示例中,{@code vkCmdClearColorImage()} 会在运行 N-DP2 驱动程序时崩溃。
-</li>
- <li>{@code vkGetPhysicalDeviceFormatProperties()} 的返回值并未给 {@code VkFormatProperties::linearTilingFeatures} 设置一个值,这会导致取 0 值作为结果。
-
-</li>
- <li>Vulkan 浮点帧缓冲附件未能正确处理。</li>
- </ul>
- <li>Nexus Player</li>
- <ul>
- <li>SPIR-V 着色器可能触发驱动程序断言。</li>
- <li>一些管线配置可能导致 {@code vkCreateGraphicsPipeline()} 崩溃。
-</li>
- </ul>
-</ul>
-
-<h4>设备特定问题</h4>
-
-<dl>
- <dt>
- <strong>Android One</strong>
- </dt>
-
- <dd>
- 当设备从插槽 1 切换到插槽2 SIM 时,数据连接失败。
- </dd>
-
- <dt>
- <strong>Pixel C</strong>
- </dt>
-
- <dd>
- 无法切换语音搜索“Always On”选项。
- </dd>
-
- <dt>
- <strong>Nexus 6</strong>
- </dt>
-
- <dd>
- 除 HDR+ 照片之外的纵向相机照片被损坏。
-
- </dd>
-
- <dt>
- <strong>Nexus Player</strong>
- </dt>
-
- <dd>
- Nexus Player 上的 Netflix 高清内容播放可能失败。
- </dd>
-
- <dd>
- 任何依赖于动态视频分辨率变化的应用都可能会在 Nexus Player 上失败。
-
- </dd>
-
- <dd>
- 任何使用 VP9 视频编解码器的应用都可能会在 Nexus Player 上失败。
- </dd>
-</dl>
-
-<!-- DP 1 release notes archive -->
-
-<h2 id="dp1">Developer Preview 1</h2>
-
-<div class="wrap">
- <div class="cols">
- <div class="col-6of12">
- <p>
- <em>日期:2016 年 3 月<br>
- 构建:NPC56P、NPC56R 已更新:NPC56W、NPC56X<br>
- 模拟器支持:x86 & ARM(32/64 位)<br>
- Google Play 服务:8.4</em>
- </p>
- </div>
- </div>
-</div>
-
-<h3 id="dp1-general">一般公告</h3>
-
-<p>
- Developer Preview 版本仅针对应用开发者,仅适用于兼容性测试和早期开发。
-请注意关于版本的一般注意事项:
-
-</p>
-<ul>
- <li>此版本在所有设备上都出现了不同的稳定性和性能问题,<em>不适合在手机或平板电脑上的日常使用</em>,特别是对于非开发人员。
-
-
- </li>
-
- <li>系统和应用<strong>性能已知会周期性地减缓/卡顿</strong>,设备可能偶尔无响应。
-这些问题可能随着长时间使用而变得更迫切。
-
- </li>
-
- <li>电池寿命可能在此版本的屏幕开启和屏幕关闭用例里出现倒退。
-
- </li>
-
- <li>有些应用可能无法在 Developer Preview 1 上正常运行。这其中包括 Google 应用和其他应用。
-
- </li>
-
- <li>这个早期版本未经兼容性测试套件 (CTS) 批准。依赖 CTS 批准架构的应用将无法运行(例如 Android Pay)。
-
- </li>
-
- <li>此预览版支持以下设备:Nexus 5X、Nexus 6、 Nexus 6P、Nexus 9、Nexus Player、and Pixel C 以及 General Mobile 4G (Android One)。
-
-
- </li>
-</ul>
-
-<h3 id="dp1-platform">平台问题</h3>
-
-<h4>性能和电池</h4>
-
-<ul>
- <li>系统和应用性能已知会<strong>周期性地减缓/卡顿</strong>,设备可能偶尔无响应。
-这些问题可能随着长时间使用而变得更迫切。
-
- </li>
-
- <li>电池寿命可能在此版本的屏幕开启和屏幕关闭用例里出现倒退。
-
- </li>
-</ul>
-<h4 id="dialer">拨号器</h4>
-
-<ul>
- <li>拨号器应用不支持直接启动。这将稍后在 N Developer Preview 中解决。
-
- </li>
-
- <li>语音邮件播放无效。
- </li>
-</ul>
-
-<h4>麦克风</h4>
-
-<ul>
- <li>系统可能在多个应用中和重新启动时错误地保留麦克风静音状态。如果您在一项应用中将麦克风静音,并且此状态保留,打开有任何麦克风静音控件的应用,取消静音麦克风。</li>
-</ul>
-
-<h4 id="ui">系统 UI</h4>
-
-<ul>
- <li>系统 UI 中的一些新增或修改字符串未被翻译成所有语言。
-
- </li>
-
- <li>概览 UI 仍在开发中,并且随时可能更改。例如,我们打算移除当用户切换应用时显示的计时器。
-
-
- </li>
-
- <li>设置控件和切换可能很慢,或出现无响应。
- </li>
-
- <li>通知的视觉设计可能随时更改。
- </li>
-
- <li>在 Gmail 应用中,包括在捆绑通知中的电子邮件直接存档无法正常运行。
-
- </li>
-</ul>
-
-<h4>Android for Work</h4>
-
-<ul>
- <li>工作安全性挑战
- <ul>
- <li>在迁移到 N 后,或在用户创建工作资料之后,工作资料无法在密钥库中创建秘钥,直到用户更改了模式、PIN 码或密码,或设置了一项工作挑战为止。
-
-
- </li>
-
- <li>在直接启动模式下,对设备应用密码限制会导致工作资料被解锁,即使设备是锁定的。
-
- 这会使工作资料变得可以访问,即使它应受到设备锁屏的保护。
-
- </li>
-
- <li>当用户输入了错误的密码和 PIN 码后,系统不会显示任何信息性消息;相反,它仅清除了输入字段。
-
-此问题不影响模式或指纹输入。
- </li>
-
- <li>在平板电脑上,后台显示的工作挑战小得不成比例。
-
- </li>
-
- <li>与 N Developer Preview 绑定的 <a href="https://play.google.com/store/apps/details?id=com.google.android.apps.enterprise.dmagent">Google Apps 设备规范</a>版本尚不支持工作资料安全性挑战功能。
-
-
- 开发者应使用 <a href="https://github.com/googlesamples/android-testdpc/releases">TestDPC</a> 来测试此功能。
-
- </li>
- </ul>
- </li>
-
- <li>Always on VPN
- <ul>
- <li>如果 Always On VPN 模式开启,但 VPN 却不可用,这表示应用未被指定为通过普通网络连接的 Always On 政策例外。
-
-除非应用被指定为 Always On 政策例外,否则当没有可用的 VPN 连接时,应用会处于脱机状态。
-
- <ul>
- <li>在 Always On 模式下,当设备以直接启动模式重新启动后,VPN 连接未建立,即使是在用户解锁安全锁屏之后。
-
-
- </li>
- </ul>
- </li>
- </ul>
- </li>
-
- <li>改进的联系人
- <ul>
- <li>蓝牙 PBAP/MAP 不显示工作联系人的来电显示。
-下一个 Preview 版本将解决此问题。
- </li>
- </ul>
- </li>
-
- <li>工作模式
- <ul>
- <li>Google 即时桌面不显示工作模式是否开启。
-Google 即时桌面也不显示应用暂停状态。
- </li>
-
- <li>在用户关闭和开启工作模式后,系统不再显示工作资料应用小工具,如日历。
-
- </li>
- </ul>
- </li>
-
- <li>暂停软件包
- </li>
-
- <li>设备管理员可以暂停关键系统软件包,这可能会导致意外的行为,如拨打电话,即使此时显示了“Telephone disabled”对话框。
-
-
- </li>
-
- <li>其他
- <ul>
- <li>如果当用户插入物理媒体(如 SD 卡)时 {@link
- android.os.UserManager#DISALLOW_MOUNT_PHYSICAL_MEDIA} 被设置为 true,设置应用会在启动时崩溃。
-
- </li>
-
- <li>当用户卸载然后重新安装一项应用后,{@code DPM.setPackagesSuspended} 状态不会持续。
-在卸载/重新安装后,应用应保持暂停,或者暂停的应用应无法卸载。
-
-
- </li>
-
- <li>工作资料中的第一次检查需要几分钟时间完成。
-这可能导致设备需要超过正常的时间才能在 Play EMM API 中可见。
-
- </li>
-
- <li>工作资料应用的通知不对安装在个人资料中的通知侦听器可见。
-其结果是,系统不能按预期显示通知。
-
- </li>
-
- </ul>
- </li>
-</ul>
-
-<h4 >键盘</h4>
-
-<ul>
- <li>键盘和 Android 设备之间的蓝牙配对可能不稳定。
- </li>
-</ul>
-
-<h4 >视频</h4>
-
-<ul>
-<li>视频播放可能滞后并显示中断。</li>
-</ul>
-
-<h4>Wi-Fi</h4>
-
-<ul>
- <li>Wi-Fi 发生了一些重构,可能改变 API 极端状况下的行为。
-具体来说,尝试连接特定网络,或尝试断开网络连接的应用应重新测试。
-
- </li>
-
- <li>旧版 DHCP 客户端已经从平台中移除。平台支持的唯一 DHCP 客户端是在 M 中引入的 DHCP 客户端。
-
- </li>
-</ul>
-
-<h4>直接启动</h4>
-
-<ul>
- <li>NFC 在第一次解锁前将无法运行。
- <ul>
- <li>当启用了蓝牙的电话重新启动时,蓝牙不会自动开启。
-您必须手动重新启用蓝牙。
- </li>
-
- <li>在某些情况下,默认铃声不在有来电和短信响起。
-此行为将在下一个 N Preview 版本中修复,但括一项例外(和解决方法)。
-
- </li>
-
- <li>在未刚刚清除数据的设备(自设置为直接启动模式以来至少已启动一次的设备),默认的通知铃声不响。
-
-用户可以通过从设置中手动选择铃声来解决此问题。
-
- </li>
-
- <li>在运行 N Developer Preview 版本的设备上,直接启动会默认启用。
-若要启用用于测试和开发的直接启动,前往“Developer Options”,然后点击“Convert to File Encryption”。
-
- 在这个开发者预览版本中,这要求恢复出厂设置为重新分配,并将您的设备格式重定为基于文件的加密。
-
- </li>
- </ul>
- </li>
-</ul>
-
-<h4>Android TV 画中画</h4>
-
-<ul>
- <li>Recents UI 中的 PIP 集成并不全面,并且随时可能更改。
-
- <ul>
- <li>PIP 窗口的动画不顺畅。Preview 未来版本将改善这一点。
-
- </li>
- </ul>
- </li>
-
- <li style="list-style: none">Preview 未来版本将改善 PIP 的视觉设计和布局调整。
-
- </li>
-</ul>
-
-<h4>错误报告</h4>
-
-<ul>
- <li>错误报告并不总是能成功完成(作为一种解决方法,有时它们仍然可以通过内部存储空间内的文档提供程序访问。
-
-
- </li>
-</ul>
-
-<h4>分屏多窗口</h4>
-
-<ul>
- <li>当进入分屏模式时,应用可能会发生崩溃和意外的 UI 行为。
-有些应用必须由应用开发者修复。
-
- </li>
-
- <li>如果一个应用面向的是 N 之前的 Android 平台版本,应用可能无法运行,分屏 Toast 通知可能会多次显示。
-
- </li>
-
- <li>在使用有固定屏幕方向的应用的同事长按 Overview 按钮可能导致意外应用行为。
-
- </li>
-
- <li>在调整大小时应用可能会闪烁。
- </li>
-
- <li>动画尚未最后确定。
- </li>
-</ul>
-
-<h4>输入方法</h4>
-
-<ul>
- <li>当<b>使用系统语言</b>时 Google 键盘意外变回通用 Google 键盘,但 Google 键盘不支持系统语言首选项中选定的任何语言。
-
-它应恢复为 American English。
-
- <p>
- 您可以通过添加至少一种 Google 键盘支持的语言来解决此问题。
-
- </p>
- </li>
-</ul>
-
-<h4>无障碍功能</h4>
-
-<ul>
- <li>话语提示显示的功能问题包括可能导致系统崩溃或缺少话语提示语音反馈的通知、快速设置图块和多窗口显示。
-
-下一个 Preview 版本将解决这些问题。
-
- </li>
-</ul>
-
-<h3 id="dp1-device-sp">特定于设备的说明和问题</h3>
-
-<h4>Nexus Player</h4>
-<ul>
- <li>在这一版的 Preview 中,Nexus Player 预计会出现视频播放、应用兼容性和稳定性问题。
-
- </li>
-</ul>
-
-<h4>Pixel C</h4>
-<ul>
-<li>多窗口调整大小可能会导致崩溃。</li>
-</ul>
-
-<h4>Nexus 9</h4>
-<ul>
-<li>Nexus 9 设备可能无法在通过 Android Beta 计划获得空中下载 (OTA) 更新后启动。
-要恢复此问题,您可以尝试手动安装 OTA 映像。
-如需了解详细信息,请参阅<a href="{@docRoot}preview/download-ota.html">应用设备 OTA 映像 </a>。
-
-</li>
-</ul>
-
diff --git a/docs/html-intl/intl/zh-cn/training/articles/direct-boot.jd b/docs/html-intl/intl/zh-cn/training/articles/direct-boot.jd
new file mode 100644
index 0000000..20f8b57
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/training/articles/direct-boot.jd
@@ -0,0 +1,181 @@
+page.title=直接启动
+page.keywords=Preview、SDK、直接启动
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>本文内容</h2>
+ <ol>
+ <li><a href="#run">请求在直接启动时运行</a></li>
+ <li><a href="#access">访问设备加密存储</a></li>
+ <li><a href="#notification">接收用户解锁通知</a></li>
+ <li><a href="#migrating">迁移现有数据</a></li>
+ <li><a href="#testing">测试您的加密感知应用</a></li>
+ </ol>
+</div>
+</div>
+
+<p>当设备已开机但用户尚未解锁设备时,Android N 将在安全的“直接启动”模式下运行。<i></i>
+
+为支持此操作,系统为数据提供两个存储位置:</p>
+
+<ul>
+<li><i>凭据加密存储</i>,这是默认存储位置,仅在用户解锁设备后可用。
+</li>
+<li><i>设备加密存储</i>,该存储位置在“直接启动”模式下和用户解锁设备后均可使用。
+</li>
+</ul>
+
+<p>默认情况下,应用不会在“直接启动”模式下运行。如果您的应用需要在“直接启动”模式下进行操作,您可以注册在此模式期间应运行的应用组件。
+
+对于需要在“直接启动”模式下运行的应用,常见的一些用例包括:
+</p>
+
+<ul>
+<li>已安排通知的应用,如闹钟应用。
+</li>
+<li>提供重要用户通知的应用,如短信应用。</li>
+<li>提供无障碍服务的应用,如 Talkback。</li>
+</ul>
+
+<p>如果您的应用在“直接启动”模式下运行时需要访问数据,则使用设备加密存储。
+设备加密存储包含使用密钥加密的数据,仅在设备已成功执行验证启动后密钥才可用。
+
+</p>
+
+<p>对于应使用与用户凭据(如 PIN 或密码)关联的密钥加密的数据,请使用凭据加密存储。凭据加密存储仅在用户已成功解锁设备后可用,直到用户再次重启设备。
+
+
+如果用户在解锁设备后启用锁定屏幕,则不会锁定凭据加密存储。
+
+</p>
+
+<h2 id="run">请求在直接启动时运行</h2>
+
+<p>应用必须先向系统注册其组件,然后才能在“直接启动”模式下运行或访问设备加密存储。
+
+应用通过将组件标记为“加密感知”来注册系统。
+<i></i>若要将您的组件标记为加密感知,请在清单中将 <code>android:directBootAware</code> 属性设为 true。
+<p>
+
+<p>当设备重启后,加密感知组件可以注册接收来自系统的 <code>LOCKED_BOOT_COMPLETED</code> 广播消息。
+
+此时设备加密存储可用,您的组件可以在“直接启动”模式下执行需要运行的任务,例如触发已设定的闹铃。
+
+</p>
+
+<p>以下代码段展示如何将
+{@link android.content.BroadcastReceiver} 注册为加密感知并在应用清单中为 <code>LOCKED_BOOT_COMPLETED</code> 添加 Intent 过滤器:
+</p>
+
+<pre>
+<receiver
+ android:directBootAware="true" >
+ ...
+ <intent-filter>
+ <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
+ </intent-filter>
+</receiver>
+</pre>
+
+<p>在用户解锁设备后,所有组件均可访问设备加密存储以及凭据加密存储。
+</p>
+
+<h2 id="access">访问设备加密存储</h2>
+
+<p>要访问设备加密存储,请通过调用
+<code>Context.createDeviceProtectedStorageContext()</code> 创建另一个
+{@link android.content.Context} 实例。使用此上下文执行的所有存储 API 调用均访问设备加密存储。
+以下示例访问设备加密存储并打开现有应用数据文件:
+
+</p>
+
+<pre>
+Context directBootContext = appContext.createDeviceProtectedStorageContext();
+// Access appDataFilename that lives in device encrypted storage
+FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
+// Use inStream to read content...
+</pre>
+
+<p>仅针对在“直接启动”模式下必须可访问的信息使用设备加密存储。请勿将设备加密存储用作通用加密存储。对于专有用户信息,或在“直接启动”模式下不需要的加密数据,请使用凭据加密存储。
+
+
+
+</p>
+
+<h2 id="notification">接收用户解锁通知</h2>
+
+<p>重启后一旦用户解锁了设备,您的应用即可切换至访问凭据加密存储,并使用依赖用户凭据的常规系统服务。
+
+</p>
+
+<p>为了在重启后用户解锁设备时收到通知,请从一个正在运行的组件注册 {@link android.content.BroadcastReceiver} 以侦听 <code>ACTION_USER_UNLOCKED</code> 消息。
+
+或者,您可以接收现有 {@link android.content.Intent#ACTION_BOOT_COMPLETED
+ACTION_BOOT_COMPLETED} 消息,该消息现在表明设备已启动,且用户已解锁设备。
+
+</p>
+
+<p>您可以通过调用 <code>UserManager.isUserUnlocked()</code> 直接查询用户是否已解锁设备。
+</p>
+
+<h2 id="migrating">迁移现有数据</h2>
+
+<p>如果用户将其设备更新为使用“直接启动”模式,您可能需要将现有数据迁移到设备加密存储。
+使用
+<code>Context.moveSharedPreferencesFrom()</code> 和
+<code>Context.moveDatabaseFrom()</code> 在凭据加密存储和设备加密存储之间迁移首选项和数据库数据。
+</p>
+
+<p>请运用您的最佳判断来决定从凭据加密存储向设备加密存储迁移哪些数据。
+您不应将专有用户信息(如密码或权限令牌)迁移到设备加密存储。
+
+。在某些情况下,您可能需要在这两个加密存储中管理单独的数据集。
+</p>
+
+<h2 id="testing">测试您的加密感知应用</h2>
+
+<p>使用新的“直接启动”模式测试您的加密感知应用。有两种方式可以启用直接启动模式:
+</p>
+
+<p class="caution"><strong>注意:</strong>启用“直接启动”将擦除设备上的所有用户数据。
+</p>
+
+<p>在已安装 Android N 的受支持的设备上,通过执行以下操作之一启用“直接启动”:
+</p>
+
+<ul>
+<li>在设备上,如果您尚未启用 <b>Developer options</b>,则可通过转到 <b>Settings > About phone</b> 并点击 <b>Build number</b> 七次启用它。
+
+当开发者选项屏幕可用后,转到 <b>Settings > Developer options</b> 并选择 <b>Convert to file encryption</b>。
+
+</li>
+<li>使用以下 adb shell 命令启用“直接启动”模式:
+<pre class="no-pretty-print">
+$ adb reboot-bootloader
+$ fastboot --wipe-and-use-fbe
+</pre>
+</li>
+</ul>
+
+<p>另外,还提供模拟直接启动模式,以防您需要在测试设备上切换模式。
+模拟模式应仅在开发期间使用,否则可能导致数据丢失。
+若要启用模拟直接启动模式,请在设备上设置锁定模式,如果在设置锁定模式时系统提示安全启动屏幕,则选择“No thanks”,然后使用以下 adb shell 命令:
+
+
+</p>
+
+<pre class="no-pretty-print">
+$ adb shell sm set-emulate-fbe true
+</pre>
+
+<p>若要关闭模拟直接启动模式,请使用以下命令:</p>
+
+<pre class="no-pretty-print">
+$ adb shell sm set-emulate-fbe false
+</pre>
+
+<p>使用这些命令会导致设备重启。</p>
diff --git a/docs/html-intl/intl/zh-cn/training/articles/scoped-directory-access.jd b/docs/html-intl/intl/zh-cn/training/articles/scoped-directory-access.jd
new file mode 100644
index 0000000..83d50b4
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/training/articles/scoped-directory-access.jd
@@ -0,0 +1,152 @@
+page.title=作用域目录访问
+page.keywords=Preview、SDK、作用域目录访问
+page.tags=Android N
+
+@jd:body
+
+
+
+
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>本文内容</h2>
+ <ol>
+ <li><a href="#accessing">访问外部存储目录</a></li>
+ <li><a href="#removable">访问可移动介质上的目录</a></li>
+ <li><a href="#best">最佳做法</a></li>
+ </ol>
+</div>
+</div>
+
+<p>应用(如照片应用)通常只需要访问外部存储中的特定目录,例如 <code>Pictures</code> 目录。
+现有的外部存储访问方法未经专门设计,无法轻松地为这些类型的应用提供目标目录访问。
+
+例如:</p>
+
+<ul>
+<li>在您的清单中请求 {@link android.Manifest.permission#READ_EXTERNAL_STORAGE}
+或 {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} 将允许访问外部存储上的所有公共目录,这可能导致访问的内容超出应用需要的内容。
+
+</li>
+<li>使用<a href="{@docRoot}guide/topics/providers/document-provider.html">存储访问框架</a>通常会让您的用户通过一个系统 UI 选取目录,如果应用始终访问同一个外部目录,则该操作没有任何必要。
+
+
+
+</li>
+</ul>
+
+<p>Android N 提供简化的全新 API 以访问通用外部存储目录。
+ </p>
+
+<h2 id="accessing">访问外部存储目录</h2>
+
+<p>使用 <code>StorageManager</code> 类获取适当的
+<code>StorageVolume</code> 实例。然后,通过调用该实例的
+<code>StorageVolume.createAccessIntent()</code> 方法创建一个 Intent。使用此 Intent 访问外部存储目录。
+若要获取所有可用卷的列表,包括可移动介质卷,请使用
+<code>StorageManager.getVolumesList()</code>。
+</p>
+
+<p>如果您有关于特定文件的信息,使用 <code>StorageManager.getStorageVolume(File)</code> 来获得包含该文件的 <code>StorageVolume</code>。
+
+调用在 <code>StorageVolume</code> 上的 <code>createAccessIntent()</code> 以访问文件的外部存储目录。
+
+</p>
+
+<p>
+在二级卷(例如外部 SD 卡)上,当调用 <code>StorageVolume.createAccessIntent()</code> 以请求访问整个卷,而不是特定目录时,传入“null”。如果您向主要卷传入“null”,或者如果您传入无效的目录名,<code>StorageVolume.createAccessIntent()</code> 将返回“null”。
+
+
+
+
+</p>
+
+<p>以下代码段展示如何在主要共享存储中打开<code>Pictures</code> 目录:
+</p>
+
+<pre>
+StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
+StorageVolume volume = sm.getPrimaryVolume();
+Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+</pre>
+
+<p>系统尝试授予对外部目录的访问权限,并使用一个简化的 UI 向用户确认访问权限(如果需要):
+</p>
+
+<img src="{@docRoot}images/android-7.0/scoped-directory-access-framed.png" srcset="{@docRoot}images/android-7.0/scoped-directory-access-framed.png 1x,
+{@docRoot}images/android-7.0/scoped-directory-access-framed_2x.png 2x" />
+<p class="img-caption"><strong>图 1.</strong> 一个请求访问 Pictures 目录的应用。
+</p>
+
+<p>如果用户授予访问权限,则系统会调用
+<code>onActivityResult()</code> 重写方法,且结果代码为
+<code>Activity.RESULT_OK</code>,Intent 数据包含 URI。使用提供的 URI 访问目录信息,与使用<a href="{@docRoot}guide/topics/providers/document-provider.html">存储访问框架</a>返回的 URI 类似。
+
+
+
+</p>
+
+<p>如果用户不授予访问权限,则系统会调用
+<code>onActivityResult()</code> 重写方法,且结果代码为
+<code>Activity.RESULT_CANCELED</code>,Intent 数据为 null。</p>
+
+<p class="note"><b>注</b>:获得特定外部目录的访问权限也会获得该目录中子目录的访问权限。
+</p>
+
+<h2 id="removable">访问可移动介质上的目录</h2>
+
+<p>若要使用作用域目录访问来访问可移动介质上的目录,首先要添加一个用于侦听
+{@link android.os.Environment#MEDIA_MOUNTED} 通知的 {@link android.content.BroadcastReceiver},例如:
+</p>
+
+<pre>
+<receiver
+ android:name=".MediaMountedReceiver"
+ android:enabled="true"
+ android:exported="true" >
+ <intent-filter>
+ <action android:name="android.intent.action.MEDIA_MOUNTED" />
+ <data android:scheme="file" />
+ </intent-filter>
+</receiver>
+</pre>
+
+<p>当用户装载可移动介质时,如 SD 卡,系统将发送一则
+{@link android.os.Environment#MEDIA_MOUNTED} 通知。此通知在 Intent 数据中提供一个 <code>StorageVolume</code> 对象,您可用它访问可移动介质上的目录。
+
+以下示例访问可移动介质上的 <code>Pictures</code> 目录:
+</p>
+
+<pre>
+// BroadcastReceiver has already cached the MEDIA_MOUNTED
+// notification Intent in mediaMountedIntent
+StorageVolume volume = (StorageVolume)
+ mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
+volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+</pre>
+
+<h2 id="best">最佳做法</h2>
+
+<p>请尽可能保留外部目录访问 URI,这样即不必重复要求用户授予访问权限。
+在用户授予访问权限后,使用目录访问 URI 调用
+<code>getContentResolver().takePersistableUriPermssion()</code>。
+系统将保留此 URI,后续的访问请求将返回 <code>RESULT_OK</code>,且不会向用户显示确认 UI。
+
+</p>
+
+<p>如果用户拒绝授予外部目录访问权限,请勿立即再次请求访问权限。
+一再不停地请求访问权限会导致非常差的用户体验。
+如果用户拒绝了一项请求,而应用再次请求访问,UI 会显示一个 <b>Don't ask again</b> 复选框:
+</p>
+
+<img src="{@docRoot}images/android-7.0/scoped-directory-access-dont-ask.png" srcset="{@docRoot}images/android-7.0/scoped-directory-access-dont-ask.png 1x,
+{@docRoot}images/android-7.0/scoped-directory-access-dont-ask_2x.png 2x" />
+<p class="img-caption"><strong>图 1.</strong> 应用第二次请求访问可移动介质。
+</p>
+
+<p>如果用户选择 <b>Don't ask again</b> 并拒绝请求,您的应用向指定目录提出的所有未来请求都将被自动拒绝,并且将不会有请求 UI 呈现给用户。
+
+</p>
diff --git a/docs/html-intl/intl/zh-cn/training/articles/security-config.jd b/docs/html-intl/intl/zh-cn/training/articles/security-config.jd
new file mode 100644
index 0000000..19e29b3
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/training/articles/security-config.jd
@@ -0,0 +1,747 @@
+page.title=网络安全配置
+page.keywords=Android N、安全、网络
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>本文内容</h2>
+<ol>
+ <li><a href="#manifest">添加安全配置文件</a></li>
+ <li><a href="#CustomTrust">自定义信任的 CA</a>
+ <ol>
+ <li><a href="#ConfigCustom">配置信任的自定义 CA</a></li>
+ <li><a href="#LimitingCas">限制信任的 CA 集</a></li>
+ <li><a href="#TrustingAdditionalCas">信任附加 CA</a></li>
+ </ol>
+ </li>
+ <li><a href="#TrustingDebugCa">仅调试 CA</a></li>
+ <li><a href="#UsesCleartextTraffic">选择退出 Cleartext Traffic</a></li>
+ <li><a href="#CertificatePinning">固定证书</a></li>
+ <li><a href="#ConfigInheritance">配置继承行为</a></li>
+ <li><a href="#FileFormat">配置文件格式</a></li>
+</ol>
+</div>
+</div>
+
+
+<p>
+ Android N 包含一个网络安全配置特性,让应用可以在一个安全的声明性配置文件中自定义其网络安全设置,而无需修改应用代码。
+
+可以针对特定域和特定应用配置这些设置。
+该特性的主要功能如下所示:
+
+</p>
+
+<ul>
+ <li>
+ <b>自定义信任锚:</b>针对应用的安全连接自定义哪些证书颁发机构 (CA) 值得信赖。
+例如,信任特定的自签署证书或限制应用信任的公共 CA 集。
+
+
+ </li>
+
+ <li>
+ <b>仅调试重写:</b>在应用中以安全方式调试安全连接,而不会增加安装基数的风险。
+
+ </li>
+
+ <li>
+ <b>Cleartext traffic 选择退出:</b>防止应用意外使用 cleartext traffic。
+
+ </li>
+
+ <li>
+ <b>证书固定:</b>将应用的安全连接限制为特定的证书。
+
+ </li>
+</ul>
+
+
+<h2 id="manifest">添加安全配置文件</h2>
+
+<p>
+ 网络安全配置特性使用一个 XML 文件,您可以在该文件中指定应用的设置。
+您必须在应用的清单中包含一个条目来指向该文件。
+以下代码摘自一份清单,演示了如何创建此条目:
+
+</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<manifest ... >
+ <application ... >
+ <meta-data android:name="android.security.net.config"
+ android:resource="@xml/network_security_config" />
+ ...
+ </application>
+</manifest>
+</pre>
+
+<h2 id="CustomTrust">自定义信任的 CA</h2>
+
+<p>
+ 应用可能需要信任自定义的 CA 集,而不是平台默认值。
+出现此情况的最常见原因包括:
+</p>
+
+<ul>
+ <li>连接到具有自定义证书颁发机构(自签署、由公司内部 CA 签发等)的主机。
+
+ </li>
+
+ <li>将 CA 集仅限于您信任的 CA,而不是每个预装 CA。
+
+ </li>
+
+ <li>信任系统中未包含的附加 CA。
+ </li>
+</ul>
+
+<p>
+ 默认情况下,来自所有应用的安全(例如 TLS、HTTPS)连接均信任预装的系统 CA,而面向 API 级别 23 (Android M) 及更低级别的应用默认情况下还会信任用户添加的 CA 存储。
+
+应用可以使用 {@code base-config}(针对应用范围的定制)或 {@code domain-config}(针对每个域的定制)自定义自己的连接。
+
+
+
+</p>
+
+
+<h3 id="ConfigCustom">配置自定义 CA</h3>
+
+<p>
+ 假设您要连接到使用自签署 SSL 证书的主机,或者连接到其 SSL 证书是由您信任的非公共 CA(如公司内部 CA)签发的主机。
+
+
+</p>
+
+<p>
+ <code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/my_ca"/>
+ </trust-anchors>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+<p>
+ 以 PEM 或 DER 格式将自签署或非公共 CA 证书添加到
+{@code res/raw/my_ca}。
+</p>
+
+
+<h3 id="LimitingCas">限制信任的 CA 集</h3>
+
+<p>
+ 如果应用不想信任系统信任的所有 CA,则可以自行指定,缩减要信任的 CA 集。
+这样可防止应用信任任何其他 CA 签发的欺诈性证书。
+
+</p>
+
+<p>
+ 限制信任的 CA 集的配置与针对特定域<a href="#TrustingACustomCa">信任自定义 CA</a> 相似,不同的是,前者要在资源中提供多个 CA。
+
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">secure.example.com</domain>
+ <domain includeSubdomains="true">cdn.example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/trusted_roots"/>
+ </trust-anchors>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+<p>
+ 以 PEM 或 DER 格式将信任的 CA 添加到 {@code res/raw/trusted_roots}。
+ 请注意,如果使用 PEM 格式,文件必须仅包含 PEM 数据,且没有额外的文本。
+<em></em>您还可以提供多个
+<a href="#certificates"><code><certificates></code></a>
+元素,而不是只能提供一个元素。
+</p>
+
+
+<h3 id="TrustingAdditionalCas">
+ 信任附加 CA
+</h3>
+
+<p>
+ 应用可能需要信任系统不信任的附加 CA,出现此情况的原因可能是系统还未包含此 CA,或 CA 不符合添加到 Android 系统中的要求。
+
+应用可以通过为一个配置指定多个证书源来实现此目的。
+
+
+</p>
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <base-config>
+ <trust-anchors>
+ <certificates src="@raw/extracas"/>
+ <certificates src="system"/>
+ </trust-anchors>
+ </base-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="TrustingDebugCa">配置用于调试的 CA</h2>
+
+<p>
+ 调试通过 HTTPS 连接的应用时,您可能需要连接到没有用于生产服务器的 SSL 证书的本地开发服务器。
+
+为了支持此操作,而又不对应用的代码进行任何修改,您可以通过使用 {@code debug-overrides} 指定仅在<a href="{@docRoot}guide/topics/manifest/application-element.html#debug">
+android:debuggable</a>
+为 {@code true} 时才信任的仅调试 CA。<i></i>
+
+通常,IDE 和构建工具会自动为非发布版本设置此标志。
+
+</p>
+
+<p>
+ 这比一般的条件代码更安全,因为出于安全考虑,应用存储不接受被标记为可调试的应用。
+
+
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <debug-overrides>
+ <trust-anchors>
+ <certificates src="@raw/debug_cas"/>
+ </trust-anchors>
+ </debug-overrides>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="UsesCleartextTraffic">选择退出 Cleartext Traffic</h2>
+
+<p>
+ 旨在连接到仅使用安全连接的目标的应用可以选择不再对这些目标提供 cleartext(使用解密的 HTTP 协议而非 HTTPS)支持。
+
+此选项有助于防止应用因外部源(如后端服务器)提供的 URL 发生变化而意外回归。
+
+
+ 请参阅 {@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted
+NetworkSecurityPolicy.isCleartextTrafficPermitted()} 了解更多详情。
+</p>
+
+<p>
+ 例如,应用可能需要确保所有与 {@code
+secure.example.com} 的连接始终是通过 HTTPS 完成,以防止来自恶意网络的敏感流量。
+
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config usesCleartextTraffic="false">
+ <domain includeSubdomains="true">secure.example.com</domain>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="CertificatePinning">固定证书</h2>
+
+<p>
+ 一般情况下,应用信任所有预装 CA。如果有预装 CA 要签发欺诈性证书,则应用将面临被中间人攻击 (MiTM) 的风险。
+
+有些应用通过限制信任的 CA 集或通过证书固定来选择限制其接受的证书集。
+
+</p>
+
+<p>
+ 通过按公钥的哈希值(X.509 证书的 SubjectPublicKeyInfo)提供证书集完成证书固定。
+然后,证书链仅在至少包含一个已固定的公钥时才有效。
+
+
+</p>
+
+<p>
+ 请注意,使用证书固定时,您应始终包含一个备份密钥,这样,当您需要强制切换到新密钥时,或更改 CA 时(固定到某个 CA 证书或该 CA 的中间证书时),您应用的连接性不会受到影响。
+
+
+否则,您必须推送应用的更新以恢复连接性。
+
+</p>
+
+<p>
+ 此外,可以设置固定到期时间,在该时间之后不执行证书固定。
+这有助于防止尚未更新的应用出现连接问题。
+不过,设置固定到期时间可能会绕过证书固定。
+
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <pin-set expiration="2018-01-01">
+ <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
+ <!-- backup pin -->
+ <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
+ </pin-set>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="ConfigInheritance">配置继承行为</h2>
+
+<p>
+ 继承未在特定配置中设置的值。此行为允许进行更复杂的配置,同时保证配置文件可读。
+
+</p>
+
+<p>
+ 如果未在特定条目中设置值,则使用来自下一个更通用的条目中的值。
+未在 {@code domain-config} 中设置的值从父级 {@code domain-config}(如果已嵌套)或从 {@code
+base-config}(如果未嵌套)中获取。
+未在 {@code base-config} 中设置的值使用平台默认值。
+
+</p>
+
+<p>
+ 例如,考虑所有与 {@code
+example.com} 的子域的连接必须使用自定义 CA 集。此外,允许使用这些域的 cleartext traffic,连接到 {@code
+ secure.example.com} 时除外。<em></em>
+通过在 {@code example.com} 的配置中嵌套 {@code
+secure.example.com} 的配置,不需要重复 {@code trust-anchors}。
+
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/my_ca"/>
+ </trust-anchors>
+ <domain-config cleartextTrafficPermitted="false">
+ <domain includeSubdomains="true">secure.example.com</domain>
+ </domain-config>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="FileFormat">配置文件格式</h2>
+
+<p>
+ 网络安全配置特性使用 XML 文件格式。
+ 文件的整体结构如以下代码示例所示:
+</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <base-config>
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ </base-config>
+
+ <domain-config>
+ <domain>android.com</domain>
+ ...
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ <pin-set>
+ <pin digest="...">...</pin>
+ ...
+ </pin-set>
+ </domain-config>
+ ...
+ <debug-overrides>
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ </debug-overrides>
+</network-security-config>
+</pre>
+
+<p>
+ 以下部分介绍语法和文件格式的其他详细信息。
+
+</p>
+
+<h3 id="network-security-config">
+ <network-security-config>
+</h3>
+
+<dl class="xml">
+ <dt>
+ 可包含:
+ </dt>
+
+ <dd>
+ 0 或 1 个 <code><a href="#base-config"><base-config></a></code><br>
+ 任意数量的 <code><a href=
+ "#domain-config"><domain-config></a></code><br>
+ 0 或 1 个 <code><a href="#debug-overrides"><debug-overrides></a></code>
+ </dd>
+</dl>
+
+<h3 id="base-config">
+ <base-config>
+</h3>
+
+<dl class="xml">
+ <dt>
+ 语法:
+ </dt>
+</dl>
+
+<pre class="stx">
+<base-config <a href=
+"#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
+ ...
+</base-config>
+</pre>
+<dl class="xml">
+ <dt>
+ 可包含:
+ </dt>
+
+ <dd>
+ <code><a href="#trust-anchors"><trust-anchors></a></code>
+ </dd>
+
+ <dt>
+ 说明:
+ </dt>
+
+ <dd>
+ 目标不在 <a href="#domain-config"><code>domain-config</code></a> 涵盖范围内的所有连接所使用的默认配置。
+
+
+<p>
+ 未设置的任何值均使用平台默认值。面向上述 API 级别 24 及更高级别的应用的默认配置:
+
+</p>
+
+<pre>
+<base-config usesCleartextTraffic="true">
+ <trust-anchors>
+ <certificates src="system" />
+ </trust-anchors>
+</base-config>
+</pre>
+面向 API 级别 23 及更低级别的应用的默认配置:
+<pre>
+<base-config usesCleartextTraffic="true">
+ <trust-anchors>
+ <certificates src="system" />
+ <certificates src="user" />
+ </trust-anchors>
+</base-config>
+</pre>
+
+ </dd>
+</dl>
+
+<h3 id="domain-config"><domain-config></h3>
+<dl class="xml">
+<dt>语法:</dt>
+<dd>
+<pre class="stx"><domain-config <a href="#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
+ ...
+</domain-config></pre>
+</dd>
+
+<dt>可包含:</dt>
+
+<dd>
+1 个或多个 <code><a href="#domain"><domain></a></code>
+<br/>0 或 1 个 <code><a href="#trust-anchors"><trust-anchors></a></code>
+<br/>0 或 1 个 <code><a href="#pin-set"><pin-set></code></a>
+<br/>任意数量的已嵌套 <code><domain-config></code></dd>
+
+<dt>说明</dt>
+<dd>用于按照 {@code domain} 元素的定义连接到特定目标的配置。
+
+<p>请注意,如果有多个 {@code domain-config} 元素涵盖某个目标,则使用匹配域规则最具体(最长)的配置。
+</p></dd>
+</dl>
+
+
+<h3 id="domain"><domain></h3>
+
+<dl class="xml">
+ <dt>
+ 语法:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<domain includeSubdomains=["true" | "false"]>example.com</domain>
+</pre>
+ </dd>
+
+ <dt>
+ 属性:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code includeSubdomains}
+ </dt>
+
+ <dd>
+ 如果为 {@code "true"},则此域规则与域及所有子域(包括子域的子域)匹配,否则,该规则仅适用于精确匹配项。
+
+
+ </dd>
+ </dl>
+ </dd>
+
+ <dt>
+ 说明:
+ </dt>
+</dl>
+
+<h3 id="debug-overrides"><debug-overrides></h3>
+
+<dl class="xml">
+ <dt>
+ 语法:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<debug-overrides>
+ ...
+</debug-overrides>
+</pre>
+ </dd>
+
+ <dt>
+ 可包含:
+ </dt>
+
+ <dd>
+ 0 或 1 个 <code><a href="#trust-anchors"><trust-anchors></a></code>
+ </dd>
+
+ <dt>
+ 说明:
+ </dt>
+
+ <dd>
+ 当 <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
+为 {@code "true"} 时将应用的重写,IDE 和构建工具生成的非发布版本通常属于此情况。
+将在 {@code
+debug-overrides} 中指定的信任锚添加到所有其他配置,并且当服务器的证书链使用其中一个仅调试信任锚时不执行证书固定。
+
+如果 <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
+为 {@code "false"},则完全忽略此部分。
+ </dd>
+</dl>
+
+<h3 id="trust-anchors"><trust-anchors></h3>
+<dl class="xml">
+ <dt>
+ 语法:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<trust-anchors>
+...
+</trust-anchors>
+</pre>
+ </dd>
+
+ <dt>
+ 可包含:
+ </dt>
+
+ <dd>
+ 任意数量的 <code><a href="#certificates"><certificates></a></code>
+ </dd>
+
+ <dt>
+ 说明:
+ </dt>
+
+ <dd>
+ 用于安全连接的信任锚集
+ </dd>
+</dl>
+
+
+<h3 id="certificates"><certificates></h3>
+<dl class="xml">
+<dt>语法:</dt>
+<dd><pre class="stx"><certificates src=["system" | "user" | "<i>raw resource</i>"]
+ overridePins=["true" | "false"] />
+</pre></dd>
+<dt>说明:</dt>
+<dd>用于 {@code trust-anchors} 元素的 X.509 证书集。</dd>
+
+<dt>属性:</dt>
+<dd><dl class="attr">
+<dt>{@code src}</dt>
+<dd>
+CA 证书的来源,可以是
+<ul>
+ <li>指向包含 X.509 证书的文件的原始资源 id。
+ 证书必须以 DER 或 PEM 格式编码。如果为 PEM 证书,则文件不得包含额外的非 PEM 数据,如注释。
+
+<em></em>
+ </li>
+
+ <li>用于预装系统 CA 证书的 {@code "system"}
+ </li>
+
+ <li>用于用户添加的 CA 证书的 {@code "user"}
+ </li>
+</ul>
+</dd>
+
+<dt>{@code overridePins}</dt>
+<dd>
+ <p>
+ 指定来自此源的 CA 是否绕过证书固定。如果为 {@code
+"true"},则为穿过此源的其中一个 CA 的链颁发证书,并且不执行证书固定。
+这对于调试 CA 或支持用户对应用的安全流量进行中间人攻击 (MiTM) 非常有用。
+
+ </p>
+
+ <p>
+ 默认值为 {@code "false"},除非在 {@code debug-overrides}
+元素中另外指定(在这种情况下,默认值为 {@code "true"})。
+ </p>
+</dd>
+</dl>
+</dd>
+
+
+<h3 id="pin-set"><pin-set></h3>
+
+<dl class="xml">
+ <dt>
+ 语法:
+ </dt>
+
+ <dd>
+<pre class="stx">
+<pin-set expiration="date">
+...
+</pin-set>
+</pre>
+ </dd>
+
+ <dt>
+ 可包含:
+ </dt>
+
+ <dd>
+ 任意数量的 <code><a href="#pin"><pin></a></code>
+ </dd>
+
+ <dt>
+ 说明:
+ </dt>
+
+ <dd>
+ 公钥固定 (PKP) 集。对于要信任的安全连接,信任链中必须有一个公钥位于 PKP 集中。
+有关固定形式,请参阅
+<code><a href="#pin"><pin></a></code>。
+ </dd>
+
+ <dt>
+ 属性:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code expiration}
+ </dt>
+
+ <dd>
+ 采用 {@code yyyy-MM-dd} 格式的日期,在该日期及之后固定过期,因而禁用固定。
+如果未设置该属性,则固定不会过期。
+
+ <p>
+ 设置到期时间有助于防止未更新到其 PKP 集(例如,由于用户禁用应用更新)的应用出现连接问题。
+
+
+ </p>
+ </dd>
+ </dl>
+ </dd>
+</dl>
+
+<h3 id="pin"><pin></h3>
+<dl class="xml">
+ <dt>
+ 语法:
+ </dt>
+
+ <dd>
+<pre class="stx">
+<pin digest=["SHA-256"]>base64 encoded digest of X.509
+ SubjectPublicKeyInfo (SPKI)</pin>
+</pre>
+ </dd>
+
+ <dt>
+ 属性:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code digest}
+ </dt>
+
+ <dd>
+ 用于生成 PKP 的摘要算法。目前仅支持
+{@code "SHA-256"}。
+ </dd>
+ </dl>
+ </dd>
+</dl>
diff --git a/docs/html-intl/intl/zh-cn/training/basics/network-ops/data-saver.jd b/docs/html-intl/intl/zh-cn/training/basics/network-ops/data-saver.jd
new file mode 100644
index 0000000..4e3ede1
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/training/basics/network-ops/data-saver.jd
@@ -0,0 +1,234 @@
+page.title=Data Saver
+metaDescription=用户启用的流量消耗优化。
+page.keywords="android N", "data usage", "metered network"
+page.image=images/cards/card-nyc_2x.jpg
+@jd:body
+
+<div id="tb-wrapper">
+ <div id="tb">
+ <h2>
+ 本文内容
+ </h2>
+
+ <ol>
+ <li>
+ <a href="#status">检查 Data Saver 首选项</a>
+ <ol>
+ <li>
+ <a href="#request-whitelist">请求白名单权限</a>
+ </li>
+ </ol>
+ </li>
+
+ <li>
+ <a href="#monitor-changes">监控 Data Saver 首选项变更</a>
+
+ </li>
+
+ <li>
+ <a href="#testing">使用 Android 调试桥命令测试</a>
+ </li>
+ </ol>
+ </div>
+</div>
+
+<p>
+ 在智能手机的整个生命周期,蜂窝数据计划的成本通常会超出设备本身的成本。
+在 N Developer Preview 中,用户可以在整个设备上启用 Data Saver,以减少流量消耗,无论是在漫游,账单周期即将结束,还是使用少量的预付费数据包。
+
+
+</p>
+
+<p>
+ 当用户在 <strong>Settings</strong> 中启用 Data Saver 且设备位于按流量计费的网络上时,系统屏蔽后台流量消耗,同时指示应用在前台尽可能使用较少的数据。
+
+用户可以将特定应用加入白名单以允许后台按流量计费的流量消耗,即使在打开 Data Saver 时也是如此。
+
+
+</p>
+
+<p>
+ N Developer Preview 扩展{@link android.net.ConnectivityManager} API,为应用提供<a href="#status">检索用户的 Data Saver 首选项</a>和<a href="#monitor-changes">监控首选项变更的方式</a>。
+
+
+这被认为是应用检查用户是否启用了 Data Saver 并努力限制前台和后台流量消耗的有效方法。
+
+
+</p>
+
+<h2 id="status">
+ 检查 Data Saver 首选项
+</h2>
+
+<p>
+ 在 N Developer Preview 中,应用可以使用 {@link
+ android.net.ConnectivityManager} API 来确定正在应用的是哪些流量消耗限制。
+{@code getRestrictBackgroundStatus()}方法返回下列值之一:
+
+</p>
+
+<dl>
+ <dt>
+ {@code RESTRICT_BACKGROUND_STATUS_DISABLED}
+ </dt>
+
+ <dd>
+ Data Saver 已禁用。
+ </dd>
+
+ <dt>
+ {@code RESTRICT_BACKGROUND_STATUS_ENABLED}
+ </dt>
+
+ <dd>
+ 用户已为此应用禁用 Data Saver。应用应努力限制前台流量消耗,并妥善处理后台流量消耗限制。
+
+
+ </dd>
+
+ <dt>
+ {@code RESTRICT_BACKGROUND_STATUS_WHITELISTED}
+ </dt>
+
+ <dd>
+ 用户已启用 Data Saver,但应用在白名单中。应用应努力限制前台和后台流量消耗。
+
+ </dd>
+</dl>
+
+<p>
+ 这被认为是在设备连接到按流量计费的网络时限制流量消耗的有效方法,即使 Data Saver 被禁用或应用在白名单中。
+
+以下示例代码使用 {@link
+ android.net.ConnectivityManager#isActiveNetworkMetered
+ ConnectivityManager.isActiveNetworkMetered()} 和 {@code
+ ConnectivityManager.getRestrictBackgroundStatus()} 来确定应用应使用多少数据:
+
+</p>
+
+<pre>
+ConnectivityManager connMgr = (ConnectivityManager)
+ getSystemService(Context.CONNECTIVITY_SERVICE);
+// Checks if the device is on a metered network
+if (connMgr.isActiveNetworkMetered()) {
+ // Checks user’s Data Saver settings.
+ switch (connMgr.getRestrictBackgroundStatus()) {
+ case RESTRICT_BACKGROUND_STATUS_ENABLED:
+ // Background data usage is blocked for this app. Wherever possible,
+ // the app should also use less data in the foreground.
+
+ case RESTRICT_BACKGROUND_STATUS_WHITELISTED:
+ // The app is whitelisted. Wherever possible,
+ // the app should use less data in the foreground and background.
+
+ case RESTRICT_BACKGROUND_STATUS_DISABLED:
+ // Data Saver is disabled. Since the device is connected to a
+ // metered network, the app should use less data wherever possible.
+ }
+} else {
+ // The device is not on a metered network.
+ // Use data as required to perform syncs, downloads, and updates.
+}
+</pre>
+
+<h3 id="request-whitelist">
+ 请求白名单权限
+</h3>
+
+<p>
+ 如果您的应用需要使用后台数据,它可以通过发送一项包含您的应用软件包名称的 URI 的 <code>Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS</code> Intent 来请求白名单权限:例如 <code>package:MY_APP_ID</code>。
+
+
+
+
+</p>
+
+<p>
+ 发送 Intent 和 URI 将启动 <strong>Settings</strong> 应用,还会显示您的应用的流量消耗设置。
+用户随后可以决定是否启用应用的后台数据。
+在您发送此 Intent 之前,先询问用户是否希望启用 <strong>Settings</strong> 应用,以启用后台流量消耗,这是一种有效的做法。
+
+
+
+</p>
+
+<h2 id="monitor-changes">
+ 监控 Data Saver 首选项变更
+</h2>
+
+<p>
+ 应用可以通过创建一条 {@link
+android.content.BroadcastReceiver} 以侦听 {@code
+ ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED} 以及使用 {@link android.content.Context#registerReceiver
+ Context.registerReceiver()}动态注册接收器来监控 Data Saver 首选项变更。
+当应用接收到这条广播时,应通过调用 {@code
+ ConnectivityManager.getRestrictBackgroundStatus()} 来<a href="#status">检查新的 Data Saver 首选项是否会影响其权限</a>。
+
+
+</p>
+
+<p class="note">
+ <strong>注:</strong>系统只会向使用 {@link
+ android.content.Context#registerReceiver Context.registerReceiver()} 进行动态注册的应用发送此广播。
+在其清单中注册接收此广播的应用将不会收到它们。
+
+
+</p>
+
+<h2 id="testing">
+ 使用 Android 调试桥命令测试
+</h2>
+
+<a href="{@docRoot}tools/help/adb.html">Android 调试桥 (ADB)</a> 提供了多条命令,可用于检查和配置网络权限:
+
+
+
+<dl>
+ <dt>
+ <code>$ adb shell dumpsys netpolicy</code>
+ </dt>
+
+ <dd>
+ 生成包括当前全局后台网络限制设置、目前在白名单中的软件包 UID 以及其他已知软件包的权限的报告。
+
+
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy</code>
+ </dt>
+
+ <dd>
+ 显示网络政策管理器 (netpolicy) 命令的完整清单。
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy set restrict-background
+ <boolean></code>
+ </dt>
+
+ <dd>
+ 当分别传递 <code>true</code> 或 <code>false</code> 时,启用或禁用 Data Saver 模式。
+
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy add restrict-background-whitelist
+ <UID></code>
+ </dt>
+
+ <dd>
+ 将指定软件包 UID 加入白名单,以允许后台按流量计费的流量消耗
+。
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy remove restrict-background-whitelist
+ <UID></code>
+ </dt>
+
+ <dd>
+ 从白名单中移除指定软件包 UID,以阻止当 Data Saver 启用时后台按流量计费的流量消耗。
+
+ </dd>
+</dl>
diff --git a/docs/html-intl/intl/zh-cn/training/tv/playback/picture-in-picture.jd b/docs/html-intl/intl/zh-cn/training/tv/playback/picture-in-picture.jd
new file mode 100644
index 0000000..6cfa815
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/training/tv/playback/picture-in-picture.jd
@@ -0,0 +1,213 @@
+page.title=画中画
+page.keywords=Preview、SDK、画中画
+page.tags=androidn
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>本文内容</h2>
+<ol>
+ <li><a href="#declaring">声明您的 Activity 支持画中画
+</a></li>
+ <li><a href="#pip_button">将您的 Activity 切换到画中画模式</a>
+</li>
+ <li><a href="#handling_ui">处理画中画模式中的 UI</a>
+</li>
+ <li><a href="#continuing_playback">在画中画模式中继续视频播放
+</a></li>
+ <li><a href="#single_playback">使用画中画的单次播放 Activity
+</a></li>
+ <li><a href="#best">最佳做法</a></li>
+</ol>
+
+<h2>另请参阅</h2>
+<ol>
+ <li><a href="{@docRoot}preview/features/multi-window.html">多窗口支持
+</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>在 Android N 中,Android TV 用户现在可以一边在应用中导航一边在屏幕角落的固定窗口中观看视频。
+
+画中画 (PIP) 模式允许应用在固定窗口中运行视频 Activity,同时在后台继续运行另一个 Activity。
+
+PIP 窗口让用户可以在使用应用的时候进行多任务处理,从而提高效率。
+</p>
+
+<p>您的应用可以决定何时触发 PIP 模式。以下是一些关于何时进入 PIP 模式的示例:
+</p>
+
+<ul>
+<li>当用户从视频返回浏览其他内容时,应用将自动进入 PIP 模式。
+</li>
+<li>当用户快看完一集视频时,应用将视频切换到 PIP 模式。
+主屏幕显示有关该系列视频下一集的宣传或摘要信息。
+</li>
+<li>应用将允许用户在观看视频的同时添加其他内容到队列。
+视频继续在 PIP 模式中播放,同时主屏幕显示内容选择 Activity。
+</li>
+</ul>
+
+<p>PIP 窗口为 240x135 dp,在屏幕角落的最顶层显示,由系统在四个角落中选择一个角落。
+用户可以调出 PIP 菜单,将 PIP 窗口切换为全屏,或通过按下遥控器上的<b>主页</b>按钮关闭 PIP 窗口。
+
+如果主屏幕开始播放另一个视频,PIP 窗口将自动关闭。
+
+用户还可以通过“最近使用记录”关闭 PIP 窗口。</p>
+
+<img src="{@docRoot}images/android-7.0/pip-active.png" />
+<p class="img-caption"><strong>图 1.</strong> 用户在主屏幕上浏览内容时屏幕角落窗口播放画中画视频。
+
+</p>
+
+<p>PIP 利用 Android N 中提供的多窗口 API 显示固定视频层叠窗口。
+如需将 PIP 添加到应用,您需要注册支持 PIP 的 Activity,然后根据需要将 Activity 切换到 PIP 模式,并确保隐藏所有 UI 元素,且 Activity 处于 PIP 模式时视频继续播放。
+
+
+</p>
+
+<h2 id="declaring">声明您的 Activity 支持画中画</h2>
+
+<p>默认情况下,系统并不自动为应用提供 PIP 支持。如果想要应用支持 PIP,请将
+<code>android:supportsPictureInPicture</code> 和
+<code>android:resizeableActivity</code> 设置为 <code>true</code>,在清单中注册视频 Activity。
+
+此外,应明确指定 Activity 处理布局配置变更,这样,在 PIP 模式过渡期间发生布局变更时,Activity 不会重新启动。
+
+</p>
+
+<pre>
+<activity android:name="VideoActivity"
+ android:resizeableActivity="true"
+ android:supportsPictureInPicture="true"
+ android:configChanges=
+ "screenSize|smallestScreenSize|screenLayout|orientation"
+ ...
+</pre>
+
+<p>在注册 Activity 时,请记住,在 PIP 模式中,您的 Activity 在电视屏幕上的小层叠窗口中显示。
+视频播放 Activity 结合以尽量小的 UI 可以实现最佳用户体验。
+在切换到 PIP 模式后,UI 元素较小的 Activity 带来的用户体验可能较差,因为用户在 PIP 窗口中看不到 UI 元素的详细信息。
+
+
+</p>
+
+<h2 id="pip_button">将您的 Activity 切换到画中画模式</h2>
+
+在需要将 Activity 切换到 PIP 模式时,请调用
+<code>Activity.enterPictureInPictureMode()</code>。在下面的示例中,当用户选择媒体控制栏上的专用 PIP 按钮时,系统切换到 PIP 模式:
+
+</p>
+
+<pre>
+@Override
+public void onActionClicked(Action action) {
+ if (action.getId() == R.id.lb_control_picture_in_picture) {
+ getActivity().enterPictureInPictureMode();
+ return;
+ }
+ ...
+</pre>
+
+<p>在媒体控制栏上添加 PIP 按钮可以方便用户在控制视频播放的同时切换到 PIP 模式。
+</p>
+
+<img src="{@docRoot}images/android-7.0/pip-button.png" />
+<p class="img-caption"><strong>图 1.</strong> 媒体控制栏上的画中画按钮。
+</p>
+
+<p>Android N 中包含一个新的
+<code>PlaybackControlsRow.PictureInPictureAction</code> 类,它可以定义控制栏 PIP 操作并使用 PIP 图标。
+</p>
+
+<h2 id="handling_ui">处理画中画模式中的 UI</h2>
+
+<p>在 Activity 进入 PIP 模式时,Activity 应仅显示视频播放。
+在 Activity 进入 PIP 模式前删除 UI 元素,当 Activity 再次全屏显示时恢复这些元素。重写 <code>Activity.onPictureInPictureModeChanged()</code> 或
+<code>Fragment.onPictureInPictureModeChanged()</code>,并根据需要启用或禁用 UI 元素,例如:
+
+
+</p>
+
+<pre>
+@Override
+public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
+ if (isInPictureInPictureMode) {
+ // Hide the controls in picture-in-picture mode.
+ ...
+ } else {
+ // Restore the playback UI based on the playback status.
+ ...
+ }
+}
+</pre>
+
+<h2 id="continuing_playback">在画中画模式中继续视频播放
+</h2>
+
+<p>在 Activity 切换到 PIP 模式时,系统会认为 Activity 处于暂停状态,并调用 Activity 的 <code>onPause()</code> 方法。
+如果 Activity 因为 PIP 模式暂停,视频播放不应暂停,而是应继续播放。
+
+在 Activity 的
+<code>onPause()</code> 方法中检查 PIP,并对播放做相应处理,例如:
+</p>
+
+<pre>
+@Override
+public void onPause() {
+ // If called while in PIP mode, do not pause playback
+ if (isInPictureInPictureMode()) {
+ // Continue playback
+ ...
+ }
+ // If paused but not in PIP, pause playback if necessary
+ ...
+}
+</pre>
+
+<p>当 Activity 退出 PIP 模式并回到全屏模式时,系统会恢复 Activity 并调用 <code>onResume()</code> 方法。
+</p>
+
+<h2 id="single_playback">使用画中画的单次播放 Activity
+</h2>
+
+<p>在您的应用中,用户可以在浏览主屏幕中的内容时选择一个新的视频,视频播放 Activity 处于 PIP 模式。
+在现有播放 Activity 中全屏模式下播放新视频,而不是启用可能使用户感到困惑的新 Activity。
+
+</p>
+
+<p>若要确保视频播放请求使用的是单个 Activity 并根据需要进入或退出 PIP 模式,在您的清单中将 Activity 的 <code>android:launchMode</code> 设置为 <code>singleTask</code>:
+
+
+</p>
+
+<pre>
+<activity android:name="VideoActivity"
+ ...
+ android:supportsPictureInPicture="true"
+ android:launchMode="singleTask"
+ ...
+</pre>
+
+<p>在您的 Activity 中,替换 {@link android.app.Activity#onNewIntent
+Activity.onNewIntent()},处理新视频,如果需要,停止任何现有视频播放。
+</p>
+
+<h2 id="best">最佳做法</h2>
+
+<p>PIP 用于全屏播放视频的 Activity。在 Activity 切换到 PIP 模式时,应避免显示除视频外的其他内容。根据<a href="#handling_ui">处理画中画模式中的 UI</a> 中所述,在 Activity 进入 PIP 模式时进行跟踪,并隐藏 UI 元素。
+
+
+</p>
+
+<p>由于 PIP 窗口悬浮在屏幕的角落,因此应避免在主窗口被 PIP 窗口遮挡的任何区域显示重要信息。
+
+</p>
+
+<p>当 Activity 处于 PIP 模式时,其默认不获取输入焦点。要在 PIP 模式中接收输入事件,请使用
+<code>MediaSession.setMediaButtonReceiver()</code>。
+</p>
diff --git a/docs/html-intl/intl/zh-cn/training/tv/tif/content-recording.jd b/docs/html-intl/intl/zh-cn/training/tv/tif/content-recording.jd
new file mode 100644
index 0000000..754e065
--- /dev/null
+++ b/docs/html-intl/intl/zh-cn/training/tv/tif/content-recording.jd
@@ -0,0 +1,142 @@
+page.title=TV 录制
+page.keywords=Preview、SDK、TV 录制
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>本文内容</h2>
+ <ol>
+ <li><a href="#supporting">指示支持录制</a></li>
+ <li><a href="#recording">录制会话</a></li>
+ <li><a href="#errors">处理录制错误</a></li>
+ <li><a href="#sessions">管理录制的会话</a></li>
+ <li><a href="#best">最佳做法</a></li>
+ </ol>
+</div>
+</div>
+
+<p>TV 输入服务允许用户通过时移 API 暂停和继续频道播放。
+Android N 通过允许用户保存多个录制的会话,扩展了时移。
+</p>
+
+<p>用户可以提前安排录制,或在观看节目时开始录制。
+系统保存录制后,用户即可使用系统 TV 应用浏览、管理和播放录制。
+</p>
+
+<p>如果想要为 TV 输入服务提供录制功能,您必须指示系统您的应用支持录制,实现录制节目功能,处理和传达录制期间发生的所有错误,并管理录制的会话。
+
+
+</p>
+
+<p class="note"><strong>注:</strong>Live Channels 应用尚不提供可让用户创建或访问录制的方式。
+在变更 Live Channels 应用之前,可能无法充分测试您的 TV 输入服务的录制体验。
+
+</p>
+
+<h2 id="supporting">指示支持录制</h2>
+
+<p>为了通知系统您的 TV 输入服务支持录制,请将您的服务元数据 XML 文件中的 <code>android:canRecord</code> 属性设置为 <code>true</code>:
+
+
+</p>
+
+<pre>
+<tv-input xmlns:android="http://schemas.android.com/apk/res/android"
+ <b>android:canRecord="true"</b>
+ android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />
+</pre>
+
+<p>如需了解有关服务元数据文件的详细信息,请参阅<a href="{@docRoot}training/tv/tif/tvinput.html#manifest">在清单中声明您的 TV 输入</a>。
+
+
+</p>
+
+<p>或者,您可以使用以下步骤在您的代码中表明录制支持:
+</p>
+
+<ol>
+<li>在 <code>TvInputService.onCreate()</code> 方法中,使用 <code>TvInputInfo.Builder</code>
+类创建一个新的
+<code>TvInputInfo</code> 对象。</li>
+<li>创建新的 <code>TvInputInfo</code> 对象时,在调用 <code>build()</code> 之前先调用
+<code>setCanRecord(true)</code>,以表明您的服务支持录制。
+</li>
+<li>通过调用
+<code>TvInputManager.updateTvInputInfo()</code> 在系统中注册 <code>TvInputInfo</code> 对象。</li>
+</ol>
+
+<h2 id="recording">录制会话</h2>
+
+<p>TV 输入服务注册其支持录制功能后,系统会在需要访问应用的录制实现时调用
+<code>TvInputService.onCreateRecordingSession()</code>。
+
+实现您自己的
+<code>TvInputService.RecordingSession</code> 子类并在触发 <code>onCreateRecordingSession()</code> 回调后返回它。
+
+此子类负责切换到正确的频道数据,录制请求的数据,以及向系统传达录制状态和错误。
+
+</p>
+
+<p>系统调用在频道 URI 中传递的 <code>RecordingSession.onTune()</code> 时,将调到该 URI 指定的频道。
+通过调用 <code>notifyTuned()</code> 通知系统应用已调到所需的频道,或者,如果应用无法调到正确的频道,请调用 <code>notifyError()</code>。
+
+
+</p>
+
+<p>系统接下来调用 <code>RecordingSession.onStartRecording()</code>
+回调。您的应用必须立即开始录制。系统调用此回调时,它可能会提供一个 URI,其中包含有关将录制的节目的信息。
+
+完成录制后,您需要将此数据复制到 <code>RecordedPrograms</code> 数据表。
+</p>
+
+<p>最后,系统调用 <code>RecordingSession.onStopRecording()</code>。此时,您的应用必须立即停止录制。
+您还需要在 <code>RecordedPrograms</code> 表中创建一个条目。
+此条目应在
+<code>RecordedPrograms.COLUMN_RECORDING_DATA_URI</code> 列中包含录制的会话数据 URI,以及在初始调用
+<code>onStartRecording()</code> 时系统提供的任何节目信息。
+
+</p>
+
+<p>如需了解有关如何访问 <code>RecordedPrograms</code> 表的更多详情,请参阅<a href="#sessions">管理录制的会话</a>。
+</p>
+
+<h2 id="errors">处理录制错误</h2>
+
+<p>如果录制期间发生错误,使录制的数据无法使用,则通过调用 <code>RecordingSession.notifyError()</code> 通知系统。同样,您可以在创建录制会话后调用 <code>notifyError()</code>,以通知系统您的应用不再录制会话。
+
+
+</p>
+
+<p>如果录制期间发生错误,但您想提供可使用的部分录制供用户播放,则调用
+<code>RecordingSession.notifyRecordingStopped()</code> 以使系统可以使用部分会话。
+
+</p>
+
+<h2 id="sessions">管理录制的会话</h2>
+
+<p>系统在 <code>TvContract.RecordedPrograms</code>
+内容提供程序表中维护来自所有支持录制的频道应用的所有已录制会话的信息。
+此信息可通过
+<code>RecordedPrograms.Uri</code> 内容 URI 访问。使用内容提供程序 API 读取、添加和删除此表中的条目。
+</p>
+
+<p>如需了解有关使用内容提供程序数据的详细信息,请参阅<a href="{@docRoot}guide/topics/providers/content-provider-basics.html">内容提供程序基本知识</a>。
+
+</p>
+
+<h2 id="best">最佳做法</h2>
+
+<p>TV 设备的存储可能有限,因此请运用您的最佳判断来分配存储,以保存录制的会话。
+如果没有足够的空间存储录制的会话,请使用
+<code>RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)</code>。
+</p>
+
+<p>当用户发起录制时,您应尽快开始录制数据。
+为便于执行此操作,请在系统调用
+<code>onCreateRecordingSession()</code> 回调时完成前期的所有耗时任务,如访问和分配存储空间。
+这样做让您能够在触发 <code>onStartRecording()</code> 回调时立即开始录制。
+
+</p>
diff --git a/docs/html-intl/intl/zh-tw/about/versions/nougat/android-7.0-changes.jd b/docs/html-intl/intl/zh-tw/about/versions/nougat/android-7.0-changes.jd
new file mode 100644
index 0000000..71569a3
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/about/versions/nougat/android-7.0-changes.jd
@@ -0,0 +1,480 @@
+page.title=行為變更
+page.keywords=preview,sdk,compatibility
+meta.tags="preview", "compatibility"
+page.tags="preview", "developer preview"
+page.image=images/cards/card-n-changes_2x.png
+@jd:body
+
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>此文件內容</h2>
+
+<ol>
+ <li><a href="#perf">效能改良</a>
+ <ol>
+ <li><a href="#doze">休眠</a></li>
+ <li><a href="#bg-opt">背景最佳化</a></li>
+ </ol>
+ </li>
+ <li><a href="#perm">權限變更</a></li>
+ <li><a href="#accessibility">協助工具改良</a>
+ <ol>
+ <li><a href="#screen-zoom">螢幕縮放</a></li>
+ <li><a href="#vision-settings">設定精靈中的視覺設定</a></li>
+ </ol>
+ </li>
+ <li><a href="#ndk">NDK 應用程式連結到平台程式庫</a></li>
+ <li><a href="#afw">Android for Work</a></li>
+</ol>
+
+<h2>另請參閱</h2>
+<ol>
+ <li><a href="{@docRoot}preview/api-overview.html">Android N API 總覽</a>
+</li>
+</ol>
+
+</div>
+</div>
+
+
+<p>
+ 除了新特性和功能之外,Android N 還包括各種不同的系統與 API 行為變更。此文件將強調說明一些您應該知道且在您的應用程式中加以考量的重要變更。
+
+
+
+</p>
+
+<p>
+ 如果您先前曾發佈過適用於 Android 的應用程式,請注意,您的應用程式可能會受到平台中的這類變更所影響。
+
+</p>
+
+
+<h2 id="perf">效能改良</h2>
+
+<p>
+ Android N 包含的系統行為變更旨在提升裝置的電池使用時間、改進 RAM 使用狀況與應用程式效能。這些變更會影響應用程式的系統資源可用性與系統通知。您應該檢閱這些變更並評估應用程式需要如何據以調整。
+
+
+
+
+</p>
+
+<h3 id="doze">休眠</h3>
+
+<p>
+ 於 Android 6.0 (API 層級 23) 引進的休眠會在使用者將裝置的電源拔除、保持靜止狀態並關閉螢幕時,延遲 CPU 與網路活動,以延長電池使用時間。Android N 會在裝置電源被到拔除並關閉螢幕,但不一定靜置不動時 (例如使用者把手持裝置放在口袋中行進時),套用 CPU 與網路限制子集,進一步增強休眠的功能。
+
+
+
+
+
+</p>
+
+
+<img src="{@docRoot}images/android-7.0/doze-diagram-1.png" alt="" height="251px" id="figure1" />
+<p class="img-caption">
+ <strong>圖 1.</strong> 休眠如何套用第一層級的系統活動限制以延長電池使用時間的示意圖。
+
+</p>
+
+<p>
+ 當裝置以電池電力運作且螢幕已關閉一段時間時,裝置會進入休眠並套用第一組限制子集:關閉應用程式網路存取並延遲工作和同步。如果裝置進入休眠後靜置不動一段時間,系統會對 {@link android.os.PowerManager.WakeLock}、
+ {@link android.app.AlarmManager} 鬧鐘、GPS 與 Wi-Fi 掃描套用其餘的休眠限制。不論是已套用某些或全部的休眠限制,系統都會喚醒裝置簡短地進行維護,應用程式能夠在該維護時段內存取網路,並能執行任何延遲的工作/同步。
+
+
+
+
+
+
+
+</p>
+
+
+<img src="{@docRoot}images/android-7.0/doze-diagram-2.png" alt="" id="figure2" />
+<p class="img-caption">
+ <strong>圖 2.</strong> 休眠如何在裝置靜置不動一段時間之後套用第二層級的系統活動限制的示意圖。
+
+</p>
+
+<p>
+ 請注意,開啟螢幕或將裝置插電,就會結束休眠並移除這些處理限制。這項額外行為不會影響配合 Android 6.0 (API 層級 23) 引進的舊版休眠改寫應用程式的建議與最佳做法,如<a href="{@docRoot}training/monitoring-device-state/doze-standby.html">最佳化休眠與應用程式待命</a>中所述。像是使用 Google 雲端通訊 (GCM) 來傳送和接收訊息,以及開始規劃可適應額外休眠行為的更新等,還是應該遵循那些建議。
+
+
+
+
+
+
+
+
+</p>
+
+
+<h3 id="bg-opt">專案 Svelte:背景最佳化</h3>
+
+<p>
+ Android N 將三種隱含式廣播移除,有助於最佳化記憶體用量與電源耗用量。因為隱含式廣播常常會將註冊為在背景接聽此類廣播的應用程式啟動,所以此一變更有其必要。移除這些廣播對裝置效能與使用者體驗大有益處。
+
+
+
+
+</p>
+
+<p>
+ 行動裝置的連線能力經常變更,例如在 Wi-Fi 與行動數據之間切換。目前,應用程式可以透過在宣示說明中註冊隱含式 {@link
+ android.net.ConnectivityManager#CONNECTIVITY_ACTION} broadcast in their
+ 廣播的接收器以監視連線能力變更。由於許多應用程式都註冊要接收此廣播,單一網路切換就可以喚醒所有應用程式,並立刻處理廣播。
+
+
+
+
+</p>
+
+<p>
+ 同樣地,應用程式可以註冊要接收來自其他應用程式 (例如,相機) 的隱含式 {@link
+ android.hardware.Camera#ACTION_NEW_PICTURE} 與 {@link
+ android.hardware.Camera#ACTION_NEW_VIDEO} 廣播。當使用者使用相機應用程式拍攝相片時,會喚醒這些應用程式來處理廣播。
+
+
+</p>
+
+<p>
+ 為減少這些問題,Android N 採用的最佳化方式如下:
+
+</p>
+
+<ul>
+ <li>目標為 Android N 的應用程式不會收到 {@link
+ android.net.ConnectivityManager#CONNECTIVITY_ACTION} 廣播,即使其宣示說明項目要求這些事件的通知。在前景執行的應用程式如果使用 {@code CONNECTIVITY_CHANGE} 來要求通知,仍可以在主要執行緒上接聽 {@link
+ android.content.BroadcastReceiver}。
+
+
+
+ </li>
+
+ <li>應用程式無法傳送或接收 {@link
+ android.hardware.Camera#ACTION_NEW_PICTURE} 或 {@link
+ android.hardware.Camera#ACTION_NEW_VIDEO} 廣播。這種最佳化方式會影響所有應用程式,而不只是目標為 Android N 的應用程式。
+
+ </li>
+</ul>
+
+<p>
+ 未來發行的 Android 可能會將其他隱含式廣播與未繫結的背景服務視為過時。因此,為隱含式廣播在宣示說明中宣告的接收器相依性以及背景服務的相依性,都應該避免或加以移除。
+
+
+
+</p>
+
+<p>
+ Android 架構提供數種解決方案,減少這些隱含式廣播或背景服務的需求。例如,{@link
+ android.app.job.JobScheduler} API 提供的健全機制可在符合指定條件 (例如,連線到非計量付費網路) 的情況下,排程網路操作。您甚至可以使用 {@link
+ android.app.job.JobScheduler},對內容提供者的變更採取因應動作。
+
+
+
+</p>
+
+<p>
+ 如需此行為變更和如何改寫應用程式的詳細資訊,請參閱<a href="{@docRoot}preview/features/background-optimization.html">背景最佳化</a>。
+
+
+</p>
+
+
+<h2 id="perm">權限變更</h2>
+
+<p>
+ Android N 包括會影響您應用程式的權限變更,包括使用者帳戶權限和寫入外部儲存空間的新權限。以下是預覽版中已變更的權限摘要:
+
+
+
+</p>
+
+<ul>
+ <li>{@code GET_ACCOUNTS} (已過時)
+ <p>
+ GET_ACCOUNTS 權限現已過時。系統會忽略目標為 Android N 之應用程式所用的這個權限。
+
+ </p>
+ </li>
+
+</ul>
+
+
+
+<h2 id="accessibility">協助工具改良</h2>
+
+<p>
+ Android N 包括的變更旨在為視力不佳或視力受損的使用者改進平台可用性。這些變更一般應不需要變更您應用程式的程式碼,然而您應該檢閱這些功能並使用您的應用程式測試它們,以評估對使用者體驗的潛在影響。
+
+
+
+
+</p>
+
+
+<h3 id="screen-zoom">螢幕縮放</h3>
+
+<p>
+ Android N 可讓使用者設定<strong>顯示器大小</strong>以放大或縮小螢幕上的所有元素,進而改善視力不佳使用者的裝置協助工具。使用者無法將螢幕縮放到超過常見中型手機的最小螢幕寬度 <a href="http://developer.android.com/guide/topics/resources/providing-resources.html">sw320dp</a> (Nexus 4 的寬度)。
+
+
+
+
+</p>
+
+<div class="cols">
+
+<div class="col-6">
+ <img src="{@docRoot}images/android-7.0/screen-zoom-1.png" alt="" height="XXX" id="figure1" />
+</div>
+<div class="col-6">
+ <img src="{@docRoot}images/android-7.0/screen-zoom-2.png" alt="" height="XXX" id="figure1" />
+</div>
+
+</div> <!-- end cols -->
+<p class="img-caption">
+ <strong>圖 3.</strong> 右邊的螢幕顯示將執行 Android N 系統映像的裝置顯示大小增加的效果。
+
+</p>
+
+
+<p>
+ 當裝置密度變更時,系統會以下列方式通知執行中的應用程式:
+
+</p>
+
+<ul>
+ <li>如果應用程式的目標為 API 層級 23 或較低版本,系統會自動終止其所有背景處理程序。這表示如果使用者切換離開應用程式,以開啟 <em>[設定]</em> 畫面並變更 <strong>[顯示器大小]</strong> 設定,系統會在記憶體極低的情況下,以相同方式終止應用程式。如果應用程式有任何前景處理程序,系統會通知那些處理程序有設定變更,如<a href="{@docRoot}guide/topics/resources/runtime-changes.html">處理執行階段變更</a>所述,有如裝置的螢幕方向有所變更。
+
+
+
+
+
+
+
+ </li>
+
+ <li>如果應用程式的目標為 Android N,其所有處理程序 (前景與背景) 都會收到設定變更的通知,如<a href="{@docRoot}guide/topics/resources/runtime-changes.html">處理執行階段變更</a>所述。
+
+
+
+ </li>
+</ul>
+
+<p>
+ 大部分應用程式只要遵循 Android 最佳做法,不需要進行任何變更就能支援此功能。需檢查的特定項目如下:
+
+</p>
+
+<ul>
+ <li>在螢幕寬度為 <code><a href=
+ "{@docRoot}guide/topics/resources/providing-resources.html">sw320dp</a></code> 的裝置上測試您的應用程式,確定它能適當執行。
+
+ </li>
+
+ <li>裝置設定變更時,就會更新任何與密度相關的快取資訊,例如快取的點陣圖或從網路載入的資源。當應用程式從暫停狀態繼續時,會檢查設定更新。
+
+
+
+ <p class="note">
+ <strong>注意:</strong>如果您快取與設定相關的資料,最好包括相關中繼資料,例如該資料的適當螢幕大小或像素密度。儲存此中繼資料可讓您決定在設定變更之後,是否需要重新整理快取的資料。
+
+
+
+
+ </p>
+ </li>
+
+ <li>避免以不會隨螢幕密度調整的像素單位指定尺寸,請改為以<a href="{@docRoot}guide/practices/screens_support.html">密度獨立像素</a> (<code>dp</code>) 單位指定尺寸。
+
+
+ </li>
+</ul>
+
+<h3 id="vision-settings">設定精靈中的視覺設定</h3>
+
+<p>
+ Android N 包括在歡迎畫面的視覺化設定可讓使用者在新裝置上設定下列協助工具設定:<strong>放大手勢</strong>、<strong>字型大小</strong>、<strong>顯示器大小</strong>與 <strong>TalkBack</strong>。此變更增加和不同螢幕設定相關的錯誤能見度。您應該啟用這些設定來測試您的應用程式,以評估此功能的影響。您可以在 [設定] > [協助工具]<strong></strong> 下找到設定。
+
+
+
+
+
+
+
+</p>
+
+<h2 id="ndk">NDK 應用程式連結到平台程式庫</h2>
+
+<p>
+ Android N 包括的命名空間變更可避免載入非公開 API。如果您使用 NDK,應該只能使用來自 Android 平台的公開 API。在下一版正式發行的 Android 使用非公開 API,會造成您的應用程式當機。
+
+
+
+</p>
+
+<p>
+ 為了在發現使用非公開 API 時向您提出警示,當應用程式呼叫非公開 API 時,在 Android N 裝置上執行的應用程式會在 logcat 輸出產生一個錯誤,並以訊息同時顯示在裝置螢幕上,協助您更能察覺這種情況。您應該檢閱應用程式的程式碼,以移除使用的非公開平台 API,並使用預覽版裝置或模擬器全面測試您的應用程式。
+
+
+
+
+
+</p>
+
+<p>
+ 如果您的應用程式依存於平台程式庫,請參閱 NDK 文件來取得以公開 API 同等項目取代常見私人 API 的一般修正。您可能也連結到平台程式庫,而不自知,特別是在應用程式使用的程式庫屬於該平台 (例如 <code>libpng</code>) 但不屬於 NDK 的時候。如為上述情況,請務必在您的 APK 包含您打算連結的所有 .so 檔案。
+
+
+
+
+
+</p>
+
+<p class="caution">
+ <strong>注意:</strong>有些第三方程式庫會連結到非公開 API。如果您的應用程式使用此類程式庫,在下一版正式發行的 Android 上執行時就會當機。
+
+
+</p>
+
+<p>
+ 應用程式不應依存於或使用 NDK 所未包括的原生程式庫,原因是在不同的 Android 發行版本之間會有變更或會被移除。從 OpenSSL 切換到 BoringSSL 便是此類變更的一例。此外,因為 NDK 所未包括的平台程式庫沒有相容性需求,而使不同裝置提供不同的相容性層級。如果您必須在舊型裝置上存取非 NDK 程式庫,請讓載入取決於 Android API 層級。
+
+
+
+
+
+
+</p>
+
+<p>
+ 為協助您診斷這些類型的問題,以下是您在建置要用於 Android N 的應用程式時,會遇到的一些 Java 與 NDK 錯誤範例:
+
+</p>
+
+<p>Java 錯誤範例:</p>
+<pre class="no-pretty-print">
+java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so"
+ is not accessible for the namespace "classloader-namespace"
+</pre>
+
+<p>NDK 錯誤範例:</p>
+<pre class="no-pretty-print">
+dlopen failed: cannot locate symbol "__system_property_get" referenced by ...
+</pre>
+
+
+<p>
+ 以下是發生這些類型之錯誤的應用程式可用的一些一般修正:
+</p>
+
+<ul>
+ <li>改用標準 JNI 函式,以取代使用來自 libandroid_runtime.so 的 getJavaVM 與 getJNIEnv。
+
+<pre class="no-pretty-print">
+AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h>
+AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or
+JavaVM::AttachCurrentThread from <jni.h>.
+</pre>
+ </li>
+
+ <li>改用公開替代項 {@code __system_property_get},以取代使用來自 {@code libcutils.so} 的 {@code property_get} 符號。如果要這樣做,請使用 {@code __system_property_get} 配合以下 include:
+
+
+<pre>
+#include <sys/system_properties.h>
+</pre>
+ </li>
+
+ <li>應該改用應用程式本機版,以取代使用來自 {@code libcrypto.so} 的 {@code SSL_ctrl} 符號。例如,您在 {@code .so} 檔案中靜態地連結 {@code libcyrpto.a},或在您的應用程式中從 BoringSSL 或 OpenSSL 動態地包括自己的 {@code libcrypto.so}。
+
+
+
+ </li>
+</ul>
+
+<h2 id="afw">Android for Work</h2>
+<p>
+ Android N 包含對目標為 Android for Work 的應用程式所做的變更,包括對憑證安裝、密碼重設、次要使用者管理與裝置識別碼存取的變更。如果您要建置要用於 Android for Work 環境的應用程式,應該檢閱這些變更並據以修改應用程式。
+
+
+
+
+</p>
+
+<ul>
+ <li>您必須先安裝委派的憑證安裝程式後,DPC 才能加以設定。對於目標為 N SDK 的設定檔與裝置擁有者應用程式,您應該在裝置政策控制器 (DPC) 呼叫 <code>DevicePolicyManager.setCertInstallerPackage()</code> 之前,先安裝委派的憑證安裝程式。如果該安裝程式尚未安裝,系統會擲回 <code>IllegalArgumentException</code>。
+
+
+
+
+
+
+ </li>
+
+ <li>裝置系統管理員的重設密碼限制現在適用於設定檔擁有者。裝置系統管理員無法再使用 <code>DevicePolicyManager.resetPassword()</code> 來清除密碼或變更已設定的密碼。裝置系統管理員仍能設定密碼,但只限裝置還沒有密碼、PIN 或模式的情況下。
+
+
+
+
+ </li>
+
+ <li>即使已經設定限制,裝置擁有者與設定檔擁有者還是可以管理帳戶。裝置擁有者與設定檔擁有者在已採用 <code>DISALLOW_MODIFY_ACCOUNTS</code> 使用者限制的情況下,仍能呼叫帳戶管理 API。
+
+
+ </li>
+
+ <li>裝置擁有者能輕鬆管理次要使用者。當裝置以裝置擁有者模式執行時,會自動設定 <code>DISALLOW_ADD_USER</code> 限制。這樣可防止使用者建立不受管理的次要使用者。此外,<code>CreateUser()</code> 與 <code>createAndInitial()</code> 方法已經過時,改用 <code>DevicePolicyManager.createAndManageUser()</code> 取代。
+
+
+
+
+
+ </li>
+
+ <li>裝置擁有者可以存取裝置識別碼。裝置擁有者可以使用 <code>DevicePolicyManagewr.getWifiMacAddress()</code> 存取裝置的 Wi-Fi MAC 位址。如果未曾在該裝置上啟用 Wi-Fi,此方法會傳回 {@code null} 的值。
+
+
+
+ </li>
+</ul>
+
+<p>
+ 如需 Android N 中有關 Android for Work 變更的詳細資訊,請參閱 <a href="{@docRoot}preview/features/afw.html">Android for Work 更新</a>。
+
+</p>
+
+<h2 id="other">其他重點</h2>
+
+<ul>
+<li>在 Android N 上執行的應用程式如以較低的 API 層級為目標,當使用者變更顯示器大小,就會終止該應用程式的處理程序。應用程式必須要能適當處理這種情況。否則,當使用者要從最近使用記錄還原時就會當機。
+
+
+
+
+<p>
+您必須測試應用程式,確保不會發生這種行為。測試方法是透過 DDMS 手動終止應用程式,以造成相同的當機情況。
+
+
+
+</p>
+
+<p>
+目標為 N 與更新版本的應用程式不會在密度變更時自動終止;然而,它們仍會勉強地回應設定變更。
+
+</p>
+</li>
+
+<li>
+Android N 上的應用程式應該要適當處理設定變更,同時不應該在後續啟動時當機。您可以變更字型大小 ([設定]<strong></strong> > [顯示]<strong></strong> > [字型大小]<strong></strong>),然後從最近使用紀錄還原應用程式,以驗證應用程式行為。
+
+
+
+
+</li>
+</ul>
+
diff --git a/docs/html-intl/intl/zh-tw/about/versions/nougat/android-7.0-samples.jd b/docs/html-intl/intl/zh-tw/about/versions/nougat/android-7.0-samples.jd
new file mode 100644
index 0000000..0cb83b6
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/about/versions/nougat/android-7.0-samples.jd
@@ -0,0 +1,85 @@
+page.title=範例
+page.tags="preview", "samples", "android"
+page.image=images/cards/card-n-samples_2x.png
+@jd:body
+
+<p>
+ 下列程式碼範例是針對 Android N 提供。如果要在 Android Studio 中下載, 範例,請選取 [File] > [Import Samples]<b></b> 選單選項。
+
+
+</p>
+
+<p class="note">
+ <strong>注意:</strong>這些可下載的專案是專為與 Gradle 和 Android Studio 一起使用而設計。
+
+</p>
+
+
+<h3 id="mw">多視窗 Playground</h3>
+<img src="{@docRoot}images/android-7.0/sample-multiwindow.png" style="float: left; padding-right: 0.5em" height="250" width="156" />
+<p>
+ 此範例示範如何在您的應用程式中發揮多視窗使用者介面的功能。
+
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-MultiWindowPlayground">在 GitHub 上取得</a>
+
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="an">使用中通知</h3>
+<img src="{@docRoot}images/android-7.0/sample-activenotifications.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ 這是現有的範例,它會顯示使用 NotificationCompat 傳送通知的簡單服務。來自使用者的每個未閱讀交談都會以個別通知方式傳送。
+
+
+</p>
+<p>
+ 已更新此範例以利用 Android N 中的新通知功能。
+
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-ActiveNotifications">在 GitHub 上取得</a>
+
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="ms">簡訊服務</h3>
+<img src="{@docRoot}images/android-7.0/sample-messagingservice.png" style="float: left; padding-right: 0.5em" height="250" width="150" />
+<p>
+ 這是現有的範例,它示範如何使用 NotificationManager 告知使用者應用程式目前顯示的通知數目。
+
+
+</p>
+<p>
+ 已更新此範例以利用 Android N 中的新通知功能。
+
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-MessagingService">在 GitHub 上取得</a>
+
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="fbe">直接開機</h3>
+<img src="{@docRoot}images/android-7.0/sample-directboot.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ 此範例示範如何在裝置加密的儲存空間 (裝置開機後即一律可用) 中儲存及存取資料。
+
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-DirectBoot">在 GitHub 上取得</a>
+
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="sda">限定範圍目錄存取</h3>
+<img src="{@docRoot}images/android-7.0/sample-scopeddirectoryaccess.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ 此範例示範如何讀取及寫入特定目錄的資料,同時要求較少的權限。
+
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-ScopedDirectoryAccess">在 GitHub 上取得</a>
+
+</p>
diff --git a/docs/html-intl/intl/zh-tw/about/versions/nougat/android-7.0.jd b/docs/html-intl/intl/zh-tw/about/versions/nougat/android-7.0.jd
new file mode 100644
index 0000000..2e73e4b
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/about/versions/nougat/android-7.0.jd
@@ -0,0 +1,676 @@
+page.title=適用於開發人員的 Android N
+meta.tags="preview", "androidn"
+page.tags="preview", "developer preview"
+page.image=images/cards/card-n-apis_2x.png
+@jd:body
+
+
+
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>主要開發人員功能</h2>
+ <ol>
+ <ul style="list-style-type:none;">
+ <li><a href="#multi-window_support">多視窗支援</a></li>
+ <li><a href="#notification_enhancements">通知</a></li>
+ <li><a href="#jit_aot">JIT/AOT 編譯</a></li>
+ <li><a href="#quick_path_to_app_install">應用程式安裝的快速路徑</a></li>
+ <li><a href="#doze_on_the_go">移動時休眠</a></li>
+ <li><a href="#background_optimizations">背景最佳化</a></li>
+ <li><a href="#data_saver">Data Saver</a></li>
+ <li><a href="#tile_api">快速設定磚 API</a></li>
+ <li><a href="#number-blocking">拒接號碼</a></li>
+ <li><a href="#call_screening">來電過濾</a></li>
+ <li><a href="#multi-locale_languages">地區設定與語言</a></li>
+ <li><a href="#icu4">Android 中的 ICU4J API</a></li>
+ <li><a href="#gles_32">OpenGL ES 3.2 API</a></li>
+ <li><a href="#android_tv_recording">Android TV 錄製</a></li>
+ <li><a href="#android_for_work">Android for Work</a></li>
+ <li><a href="#accessibility_enhancements">協助工具</a></li>
+ <li><a href="#direct_boot">直接開機</a></li>
+ <li><a href="#key_attestation">金鑰證明</a></li>
+ <li><a href="#network_security_config">網路安全性設定</a></li>
+ <li><a href="#default_trusted_ca">預設信任的 CA</a></li>
+ <li><a href="apk_signature_v2">APK 簽章配置第 2 版</a></li>
+ <li><a href="#scoped_directory_access">限定範圍目錄存取</a></li>
+ </ol>
+</div>
+</div>
+
+
+
+<p>Android N 仍在開發中,但是您現在可以透過「N Developer Preview」來試用。下面各節重點說明適用於開發人員的一些新功能。
+
+ </p>
+
+<p>
+ 請務必查看<a href="{@docRoot}preview/behavior-changes.html">行為變更</a>以瞭解哪些平台變更部分會影響您的應用程式、閱讀開發人員指南以瞭解主要功能,以及下載 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 參考資料</a>以深入瞭解新 API 的詳細資訊。
+
+
+
+</p>
+
+<h2 id="multi-window_support">多視窗支援</h2>
+
+
+<p>在 Android N 中,我們將許多人要求的新多工功能引進到平台 — 多視窗支援。
+ </p>
+
+ <p>使用者現在可以一次在螢幕上開啟兩個應用程式。 </p>
+ <ul>
+ <li>在執行 Android N 的手機與平板電腦上,使用者可以在分割畫面模式中並排或上下排列兩個應用程式。只要拖曳兩個應用程式之間的分隔線,即可調整其大小。
+
+
+ </li>
+
+<li>在 Android TV 裝置上,應用程式可以將本身放入<a href="{@docRoot}preview/features/picture-in-picture.html">子母畫面模式</a>,讓它們持續顯示內容,同時使用者可以瀏覽其他應用程式或與其互動。請參閱下面內容,以瞭解更多資訊。
+
+ </li>
+ </ul>
+
+<div class="col-4of10">
+<img src="{@docRoot}images/android-7.0/mw-portrait.png" alt="" style="height:460px;padding-left:1em;" id="img-split-screen" />
+<p class="img-caption">
+ <strong>圖 1.</strong> 在分割畫面模式中執行的應用程式。
+</p>
+ </div>
+
+<p>特別是平板電腦與其他螢幕較大的裝置,多視窗支援為您提供吸引使用者的新方式。您甚至可以在應用程式中啟用拖放功能,讓使用者便利地從應用程式拖放內容 — 這是增強您的使用者體驗的絕佳方式。
+
+
+ </p>
+
+<p>將多視窗支援新增到您的應用程式並設定它處理多視窗顯示的方式是很直接的作法。例如,您可以指定活動的最小可允許尺寸,避免使用者將活動的尺寸調整到低於該尺寸。您也可以停用應用程式的多視窗顯示,以確保系統只以全螢幕模式顯示您的應用程式。
+
+
+
+</p>
+
+<p>
+ 如需詳細資訊,請參閱<a href="{@docRoot}preview/features/multi-window.html">多視窗支援</a>開發人員文件。
+
+</p>
+
+<h2 id="notification_enhancements">通知增強功能</h2>
+
+<p>我們已重新設計 Android N 中的通知,讓它們更易於使用、速度更快。一些變更包括:
+</p>
+
+<ul>
+ <li>
+ <strong>範本更新</strong>:我們已更新通知範本,在主圖影像和虛擬人偶放入的新強調。開發人員只需對程式碼進行最少的調整,即可發揮新範本的所有功能。
+
+
+ </li>
+
+ <li>
+ <strong>整合式通知</strong>:系統可以將訊息群組到一起 (例如依訊息主題) 並顯示群組。使用者可以直接在群組上執行動作,如「關閉」或「封存」。如果您已實作 Android Wear 的通知,則已經熟悉此模式。
+
+
+
+
+ </li>
+
+ <li>
+ <strong>直接回覆</strong>:對於即時通訊應用程式,Android 系統支援內嵌回覆,這樣使用者就能直接在通知介面內快速回應簡訊或文字訊息。
+
+
+ </li>
+
+ <li>
+ <strong>自訂檢視</strong>:兩個新的 API 讓您在通知中使用自訂檢視時可利用系統的裝飾,例如通知標題與動作。
+
+
+ </li>
+</ul>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-1.png" alt="" style="padding:.5em;max-width:226px">
+</div>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-3.png" alt="" style="padding:.5em;max-width:226px">
+</div>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-2.png" alt="" style="padding:.5em;max-width:226px">
+</div>
+
+
+<p class="img-caption">
+ <strong>圖 2.</strong> 整合式通知與直接回覆。
+</p>
+
+<p>如果要瞭解如何實作新的功能,請參閱<a href="{@docRoot}preview/features/notification-updates.html">通知</a>指南。
+
+</p>
+
+
+
+<h2 id="jit_aot">設定檔指引 JIT/AOT 編譯</h2>
+
+<p>在 Android N 中,我們新增了 Just in Time (JIT) 編譯器搭配程式碼分析工具到 ART,讓 Android 應用程式在執行時能夠持續改善其效能。JIT 編譯器補充了 ART 目前的 Ahead of Time (AOT) 編譯器,協助改善執行階段效能、節省儲存空間以及加速應用程式更新和系統更新。
+
+
+
+</p>
+
+<p>設定檔指引編譯讓 ART 根據每個應用程式的實際用情形與裝置上的情況來管理其 AOT/JIT 編譯。例如,ART 會維護每個應用程式常用方法的設定檔,而且可以預先編譯和快取那些方法以獲得最佳效能。它不會編譯應用程式的其他部分,直到實際要使用這些部分時才會編譯。
+
+
+
+</p>
+
+<p>除了改善應用程式關鍵部分的效能以外,設定檔指引編譯還有助於降低應用程式的整體 RAM 使用量,包括關聯的二進位檔案。此功能對於低記憶體裝置特別重要。
+
+</p>
+
+<p>ART 透過對裝置電池產生最小影響的方式來管理設定檔指引編譯。它只會在裝置閒置和充電時預先編譯,這種預先工作的方式可以節省時間和電池電力。
+
+</p>
+
+<h2 id="quick_path_to_app_install">應用程式安裝的快速路徑</h2>
+
+<p>ART JIT 編譯器的最實質好處之一是加速應用程式安裝和系統更新。即使是在 Android 6.0 上需要數分鐘來最佳化和安裝的大型應用程式,現在只需幾秒鐘就可以安裝。系統更新也會變得更快,因為不再需要最佳化步驟。
+
+
+ </p>
+
+<h2 id="doze_on_the_go">移動時休眠...</h2>
+
+<p>Android 6.0 引進休眠功能,這是可節省電池電力的系統模式,它會在裝置閒置時 (例如放在桌子上或抽屜中) 延後應用程式的 CPU 與網路活動。
+
+ </p>
+
+<p>現在 Android N 中的休眠功能更進一步進展,可在移動時節省電池電力。只要螢幕關閉一段時間且裝置拔除電源的情況下,休眠功能就會將熟悉的 CPU 與網路限制的子集套用到應用程式。這表示即使使用者將裝置放在口袋內時也可以節省電池電力。
+
+
+
+</p>
+
+
+<img src="/preview/images/doze-diagram-1.png" alt="" id="figure1" />
+<p class="img-caption">
+ <strong>圖 3.</strong> 休眠功能現在可套用限制,即使裝置沒有固定在一處時,也能改善電池使用時間。
+
+</p>
+
+
+<p>當裝置使用電池時,在螢幕關閉短時間後,休眠功能會限制網路存取並延遲工作與同步處理。在短暫的維護時段中,應用程式可存取網路並執行延遲的工作/同步處理。裝置螢幕開啟或插上電源可讓裝置離開休眠狀態。
+
+
+
+</p>
+
+<p>當裝置再次固定不動,且螢幕關閉並使用電池一段時間後,休眠功能會在
+{@link
+android.os.PowerManager.WakeLock}, {@link android.app.AlarmManager} 鬧鐘和 GPS/Wi-Fi 掃描上套用完整的 CPU 與網路限制。
+</p>
+
+<p>讓應用程式適應休眠功能的最佳做法,無論裝置在移動中或固定不動都是一樣的,所以如果您已經更新應用程式使其能夠處理休眠,就完全沒問題。如果沒有,現在就<a href="{@docRoot}training/monitoring-device-state/doze-standby.html#assessing_your_app">讓您的應用程式適應休眠功能</a>。
+
+
+</p>
+
+<h2 id="background_optimizations">專案 Svelte:背景最佳化</h2>
+
+<p>專案 Svelte 一直努力在生態系統中讓各種 Android 裝置上系統與應用程式使用最少的 RAM。在 Android N 中,「專案 Svelte」專注於最佳化應用程式在背景執行的方式。
+
+ </p>
+
+<p>背景處理是大多數應用程式的必要部分。如果正確地處理,它可讓您擁有令人驚歎的使用者體驗 — 立即、快速、內容感知。如果沒有適當處理,背景處理就會不必要地耗用 RAM (與電池電力),而且影響其他應用程式的系統效能。
+
+
+ </p>
+
+<p>自 Android 5.0 開始,{@link android.app.job.JobScheduler} 就以適合使用者的偏好方式來執行背景工作。應用程式可以排程工作,同時讓系統根據記憶體、電源和連線狀況進行最佳化。JobScheduler 提供控制權和簡潔性,我們希望所有應用程式都使用它。
+
+
+
+ </p>
+
+<p>
+ 另一個好用的選項是 <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager"><code>GCMNetworkManager</code></a>,它屬於 Google Play 服務的一部分,提供類似的工作排程功能,可與舊版 Android 相容。
+
+
+
+</p>
+
+<p>我們會繼續擴充 <code>JobScheduler</code> 和 <code>GCMNetworkManager</code> 以滿足您的更多使用案例 — 例如,在 Android N 中,現在您可以根據內容提供者中的變更來排程背景工作。同時,我們也開始取代一些會降低系統效能 (特別是低記憶體裝置) 的較舊模式。
+
+
+
+
+</p>
+
+<p>在 Android N 中,我們移除了三個常用的隱含廣播 — {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}、{@link
+ android.hardware.Camera#ACTION_NEW_PICTURE} 和 {@link
+ android.hardware.Camera#ACTION_NEW_VIDEO} — 因為它們會一次喚醒多個應用程式的背景處理程序,而耗盡記憶體與電池電力。如果您的應用程式收到這些廣播,請改為使用「N Developer Preview」遷移到 <code>JobScheduler</code> 與相關的 API。
+
+
+
+ </p>
+
+<p>
+ 看看<a href="{@docRoot}preview/features/background-optimization.html">背景最佳化</a>文件,以瞭解詳細資訊。
+
+</p>
+
+
+<h2 id="data_saver">Data Saver</h2>
+
+<div class="col-5of12" style="margin-right:1.5em;">
+<img src="{@docRoot}images/android-7.0/datasaver.png" style="border:2px solid #ddd">
+
+<p class="img-caption" style="padding-right:2em;">
+ <strong>圖 4.</strong> [設定] 中的 Data Saver。
+</p>
+ </div>
+
+<p>在行動裝置的使用壽命期間,行動數據方案的費用通常會超過裝置本身的費用。對於許多使用者而言,行動數據是他們想要節省的昂貴資源。
+
+ </p>
+
+<p>Android N 引進 Data Saver 模式,這是一個新的系統服務,有助於降低應用程式的行動數據用量,無論是漫遊、接近帳單週期結束時或小量預付數據包。Data Saver 讓使用者控制應用程式如何使用行動數據,也讓開發人員在 Data Saver 開啟時提供更有效率的服務。
+
+
+
+ </p>
+
+<p>當使用在 [設定]<strong></strong> 中啟用 Data Saver 且裝置使用計量付費網路時,系統會封鎖背景數據使用量,並指示前景的應用程式盡量使用較少的數據 — 例如,限制串流的位元率、降低影像品質、延遲開放式預先快取等等。使用者可以將特定應用程式新增到允許清單,以便即使在 Data Saver 為開啟狀態時,這些應用程式仍可在背景使用計量付費的數據使用量。
+
+
+
+
+</p>
+
+<p>Android N 擴充 {@link android.net.ConnectivityManager} 為應用程式提供<a href="{@docRoot}preview/features/data-saver.html#status">擷取使用者的 Data Saver 喜好設定</a>與<a href="{@docRoot}preview/features/data-saver.html#monitor-changes">監視喜好設定變更</a>的方法。所有應用程式應該檢視使用者是否已啟用 Data Saver 並努力限制前景與背景的數據使用量。
+
+
+
+</p>
+
+
+<h2 id="tile_api">快速設定磚 API</h2>
+
+
+<div style="float:right;max-width:320px">
+<img src="{@docRoot}images/android-7.0/quicksettings.png" style="padding-left:1.5em;">
+
+<p class="img-caption" style="padding-left:2em;">
+ <strong>圖 5.</strong> 通知欄中的快速設定磚。
+</p>
+
+
+ </div><p>快速設定是直接從通知欄顯示關鍵設定與動作的常用簡單方式。在 Android N 中,我們擴充了快速設定的範圍,讓它變得更實用、更便利。
+
+ </p>
+
+<p>我們也為額外的快速設定磚增加了更多空間,使用者可以透過向左或向右撥動存取分頁顯示區域。我們也讓使用者能夠控制要顯示的快速設定磚與顯示位置 — 使用者只需拖放磚,即可新增或移除它們。
+
+
+ </p>
+
+<p>對於開發人員,Android N 也加入了新的 API,讓您定義自己的快速設定磚,以便使用者輕鬆存取您應用程式中的關鍵控制項與動作。
+</p>
+
+<p>
+ 快速設定磚是專為急需或常用的控制項或動作而保留的,它不應該做為啟動應用程式的捷徑。
+
+
+</p>
+
+<p>
+ 定義磚之後,您即可將它們顯示給使用者,使用者只需拖放這些磚,即可將它們新增到快速設定中。
+
+</p>
+
+<p>
+ 如需建立應用程式磚的相關資訊,請參閱可下載之 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 參考資料</a>中的 <code>android.service.quicksettings.Tile</code>。
+
+</p>
+
+
+
+<h2 id="number-blocking">拒接號碼</h2>
+
+<p>Android N 現在在平台中支援拒接號碼,並提供一個架構 API,讓服務提供者維護一份拒接號碼清單。預設的簡訊應用程式、預設的電話應用程式與提供者應用程式可以讀取及寫入拒接號碼清單。其他應用程式無法存取該清單。
+
+
+</p>
+
+<p>透過讓拒絕號碼成為平台上的標準功能,Android 為應用程式提供一個一致的方式,讓它們在各種裝置上都能支援拒接號碼。應用程式可以利用的其他好處包括:
+
+</p>
+
+<ul>
+ <li> 如果為某個號碼設定來電拒接,也會拒收該號碼的簡訊
+ <li> 透過備份與還原功能,即使經過重設或使用不同的裝置,也可持續保存
+
+ <li> 多個應用程式可使用同一份拒接號碼清單
+</ul>
+
+<p>此外,透過 Android 整合行動通訊業者應用程式,表示行動通訊業者可以讀取裝置上的拒接號碼清單並為使用者執行服務端的拒接號碼,因此停止拒接號碼的來電和簡訊透過任何媒體 (例如 VOIP 端點或來電轉接) 連絡到使用者。
+
+
+</p>
+
+<p>
+ 如需詳細資訊,請參閱可下載之 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 參考資料</a>中的 <code>android.provider.BlockedNumberContract</code>。
+
+
+</p>
+
+<h2 id="call_screening">來電過濾</h2>
+
+<p>
+ Android N 能讓預設電話應用程式過濾來電。電話應用程式執行的方法是實作新的<code>CallScreeningService</code>,它可以讓電話應用程式根據來電的 {@link android.telecom.Call.Details Call.Details} 來執行數個動作,例如:
+
+
+
+</p>
+
+<ul>
+ <li> 拒接來電
+ <li> 不允許將來電記錄到通話紀錄
+ <li> 不對使用者顯示來電通知
+</ul>
+
+<p>
+ 如需詳細資訊,請參閱可下載之 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 參考資料</a>中的 <code>android.telecom.CallScreeningService</code>。
+
+
+</p>
+
+
+<h2 id="multi-locale_languages">多地區設定支援,更多語言</h2>
+
+
+<p>Android N 現在可讓使用者在 [設定] 中選取<strong>多個地區設定</strong>,以便以更好的方式支援雙語言使用案例。應用程式可以使用新的 API 取得使用者選取的地區設定,然後為多地區設定使用者提供更精細的使用者體驗 — 例如以多語言顯示搜尋結果,以及不為使用者已經熟知語言的網頁提供翻譯。
+
+
+
+
+</p>
+
+<p>除了多地區設定支援,Android N 也擴充了供使用者選用的語言選項。它為每種常用語言 (例如英文、西班牙文、法文與阿拉伯文) 提供 25 種變體。它也增加了對 100 種以上新語言的支援。
+
+
+</p>
+
+<p>應用程式呼叫 <code>LocaleList.GetDefault()</code> 即可取得使用者設定的地區設定清單。為了支援擴充的地區設定數目,Android N 變更了它解析資源的方式。請務必測試並確認您的應用程式使用新的資源解析邏輯時可正常運作。
+
+</p>
+
+<p>如果要深入瞭解新的資源解析行為與應該遵循的最佳做法,請參閱<a href="{@docRoot}preview/features/multilingual-support.html">多語言支援</a>。
+</p>
+
+<h2 id="icu4">Android 中的 ICU4J API</h2>
+
+<p>
+ Android N 現在在 <code>android.icu</code> 套件下的 Android 架構中提供一個 <a href="http://site.icu-project.org/">ICU4J</a> API 子集。遷移很容易,大部分要承擔只是從 <code>com.java.icu</code> 命名空間變更為 <code>android.icu</code> 即可。如果您已經在應用程式中使用 ICU4J 套件組合,只要切換到 Android 架構中提供的 <code>android.icu</code> API,即可顯著縮減 APK 的大小。
+
+
+
+
+
+</p>
+
+<p>
+ 如果要深入瞭解 Android ICU4J API,請參閱 <a href="{@docRoot}preview/features/icu4j-framework.html">ICU4J 支援</a>。
+</p>
+
+
+
+<h2 id="gles_32">OpenGL™ ES 3.2 API</h2>
+
+<p>Android N 針對 OpenGL ES 3.2 新增架構介面與平台支援,包括:</p>
+
+<ul>
+ <li> <a class="external-link" href="https://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">Android 延伸套件</a></a> (AEP) 中的所有延伸套件,但 <code>EXT_texture_sRGB_decode</code> 除外。
+ <li> HDR 的浮點畫面緩衝區與延遲著色。
+ <li> BaseVertex 繪圖呼叫 (可啟用更好的批次處理與串流)。
+ <li> 穩定的緩衝區存取控制 (可降低 WebGL 額外負荷)。
+</ul>
+
+<p>Android N 上 OpenGL ES 3.2 的架構 API 提供 <code>GLES32</code> 類別。使用 OpenGL ES 3.2 時,請務必在宣示說明檔案中使用 <code><uses-feature></code> 標籤與 <code>android:glEsVersion</code> 屬性宣告需求。
+
+
+ </p>
+
+<p>如需使用 OpenGL ES (包括如何在執行階段檢查裝置支援的 OpenGL ES 版本) 的詳細資訊,請參閱 <a href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL ES API 指南</a>。
+</p>
+
+
+<h2 id="android_tv_recording">Android TV 錄製</h2>
+
+<p>Android N 透過新的錄製 API,新增了錄製和播放 Android TV 輸入服務內容的功能。以現有的時間位移 API 為建置基礎,TV 輸入服務可以控制要錄製哪個頻道的資料、如何儲存已錄製的時段,以及管理使用者與錄製內容的互動。
+
+
+ </p>
+
+<p>如需詳細資訊,請參閱 <a href="{@docRoot}preview/features/tv-recording-api.html">Android TV 錄製 API</a>。</p>
+
+
+<h2 id="android_for_work">Android for Work</h2>
+
+<p>Android for Work 為執行 Android N 的裝置增加了許多新的功能與 API。一些亮點如下所示 — 如需與 Android N 相關之 Android for Work 更新的完整清單,請參閱「Android for Work 變更」。
+
+</p>
+
+<h3 id="work_profile_security_challenge">工作設定檔安全性查問 </h3>
+
+<p>
+ 設定檔擁有者可以為以工作設定檔執行之應用程式指定個別的安全性查問。當使用者嘗試開啟任何工作應用程式時會顯示工作查問。成功完成安全性查問可將工作設定檔解鎖並在必要時將它解密。對於設定檔擁有者而言,<code>ACTION_SET_NEW_PASSWORD</code> 會提示使用者設定工作查問,而且 <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> 會提示使用者設定裝置鎖定。
+
+
+
+
+
+
+</p>
+
+<p>
+ 設定檔擁有者可以使用 <code>setPasswordQuality()</code>、<code>setPasswordMinimumLength()</code> 與相關方法,為工作查問設定各自的密碼原則 (例如,需要 PIN 的時間長度,或是否使用指紋來將設定檔解鎖)。設定檔使用者也可以使用新的 <code>getParentProfileInstance()</code> 方法傳回的 <code>DevicePolicyManager</code> 執行個體來設定裝置鎖定。此外,設定檔擁有者還可以使用新的 <code>setOrganizationColor()</code> 與 <code>setOrganizationName()</code> 方法,為工作查問自訂認證畫面。
+
+
+
+
+
+
+
+
+</p>
+<h3 id="turn_off_work">關閉工作 </h3>
+
+<p>在具有工作設定檔的裝置上,使用者可以切換工作模式。當工作模式關閉時,受管理的使用者會暫時關機,因此而停用工作設定檔應用程式、背景同步與通知。這也包括設定檔擁有者應用程式。當工作模式關閉時,系統會顯示持續的狀態圖示,提醒使用者他們無法啟動工作應用程式。啟動器會指出工作應用程式和小工具無法存取。
+
+
+
+
+ </p>
+
+<h3 id="always_on_vpn">一律開啟的 VPN </h3>
+
+<p>裝置擁有者和設定檔擁有者可確保工作應用程式一律透過指定的 VPN 連線。系統會自動在裝置開機時啟動該 VPN。
+
+</p>
+
+<p>
+ 新的 <code>DevicePolicyManager</code> 方法是 <code>setAlwaysOnVpnPackage()</code> 與 <code>getAlwaysOnVpnPackage()</code>。
+
+
+</p>
+
+<p>因為系統無需透過應用程式互動即可直接連結 VPN 服務,所以 VPN 用戶端需要為「一律開啟的 VPN」處理新的進入點。正如以往,透過符合動作 <code>android.net.VpnService</code> 的意圖篩選器向系統指明服務。
+
+
+ </p>
+
+<p>
+ 使用者也可以使用 [設定] > [更多] > [VPN]<strong></strong> 手動設定「一律開啟的 VPN」用戶端,這些用戶端在主要使用者中實作 <code>VPNService</code> 方法。
+
+
+</p>
+
+<h2 id="accessibility_enhancements">協助工具增強功能</h2>
+
+<p>Android N 現在為新的裝置設定在歡迎畫面上直接提供「視覺設定」。這讓使用者更易於在自己的裝置上探索及設定協助工具功能,包括放大手勢、字型大小、顯示大小和 TalkBack。
+
+
+ </p>
+
+<p>將這些協助工具功能放置在更為顯眼的地方,您的使用者較可能在啟用它們的情況下試用您的應用程式。請務必儘早在啟用這些設定的情況下測試您的應用程式。您可以從 [設定] > [協助工具] 啟用它們。
+
+
+</p>
+
+<p>此外,在 Android N 中,協助工具服務現在也可以協助行動不便的使用者觸控螢幕。新的 API 允許使用臉部追蹤、眼睛追蹤、點掃描等功能來建置服務,以滿足這些使用者的需要。
+
+
+</p>
+
+<p>如需詳細資訊,請參閱可下載之 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 參考資料</a>中的 <code>android.accessibilityservice.GestureDescription</code>。
+ </p>
+
+
+<h2 id="direct_boot">直接開機</h2>
+
+<p>直接開機可加速裝置啟動時間,並讓已註冊的應用程式只能使用有限的功能 (即使在未預期的重新開機之後)。例如,如果一個加密裝置在使用者睡覺時重新開機,已註冊的鬧鐘、訊息與來電現在可以持續如常通知使用者。這也表示協助工具服務在重新啟動之後可立即使用。
+
+
+
+
+</p>
+
+<p>直接開機利用 Android N 中以檔案為基礎的加密,能夠為系統與應用程式資料使用更精細的加密原則。系統為特定系統資料與明確註冊的應用程式資料使用裝置加密存放區。在預設情況下,所有其他系統資料、使用者資料、應用程式與應用程式資料都會使用認證加密存放區。
+
+
+
+ </p>
+
+<p>開機時,系統會以限制模式啟動,它只能存取裝置加密的資料,而無法對應用程式或資料進行一般存取。如果您有想要在這個模式下執行的元件,可以在宣示說明中設定旗標來註冊這些元件。重新啟動之後,系統會透過廣播 <code>LOCKED_BOOT_COMPLETED</code> 意圖來啟用已註冊的元件。系統會確保已註冊的裝置加密應用程式資料可供使用之後才會解除鎖定。所有其他資料都無法使用,直到使用者確認他們的鎖定畫面認證之後,才會將這些資料解密。
+
+
+
+
+
+
+ </p>
+
+如需詳細資訊,請參閱<a href="{@docRoot}preview/features/direct-boot.html">直接開機</a>。</p>
+</p>
+
+
+<h2 id="key_attestation">金鑰證明</h2>
+
+<p>硬體支援的金鑰存放區為 Android 裝置上密碼編譯金鑰的建立、儲存及使用提供更安全的方法。它們可保護金鑰不受 Linux 核心、可能的 Android 弱點和從已解鎖裝置擷取的傷害。
+
+
+</p>
+
+<p>為了讓使用硬體支援的金鑰存放區更易於使用且更安全,Android N 引進金鑰證明。應用程式與裝置外部服務可以使用金鑰證明,毫不懷疑地判斷 RSA 或 EC 金鑰組是否有硬體支援、金鑰組的屬性是哪些以及它的用法和有效性上套用哪些限制條件。
+
+
+
+ </p>
+
+<p>應用程式與裝置外部服務可以透過 X.509 證明憑證 (必須以有效的證明金鑰簽署) 來要求有關金鑰組的資訊。證明金鑰是 ECDSA 簽署金鑰,它在裝置出廠時就已內嵌到其中的硬體支援金鑰存放區。因此,以有效證明金鑰簽署的證明憑證可確認裝置上有硬體支援的金鑰存放區,以及該金鑰儲存區中包含之金鑰組的詳細資訊。
+
+
+
+
+
+</p>
+
+<p>為了確保裝置使用安全的官方 Android 出廠映像,金鑰證明要求裝置的<a class="external-link" href="https://source.android.com/security/verifiedboot/verified-boot.html#bootloader_requirements">開機載入器</a>對<a class="external-link" href="https://source.android.com/security/trusty/index.html">信任執行環境 (TEE)</a> 提供下列資訊:
+
+
+</p>
+
+<ul>
+<li>裝置上安裝的作業系統版本與修補程式層級</li>
+<li><a href="https://source.android.com/security/verifiedboot/index.html" class="external-link">Verified Boot</a> 公開金鑰與鎖定狀態</li>
+ </ul>
+
+<p>如需硬體支援的金鑰存放區功能的詳細資訊,請參閱<a href="https://source.android.com/security/keystore/" class="external-link">硬體支援的金鑰存放區</a>指南。
+</p>
+
+<p>除了金鑰證明之外,Android N 還引進連結指紋的金鑰,在註冊指紋時並不會撤銷。
+</p>
+
+<h2 id="network_security_config">網路安全性設定</h2>
+
+<p>在 Android N 中,應用程式可以安全地自訂其安全 (HTTPS、TLS) 連線的行為,無需修改任何程式碼,方法是使用宣告式的<em>網路安全性設定</em>,而不是使用容易出錯的傳統程式設計 API (例如 X509TrustManager)。
+
+
+</p>
+
+ <p>支援的功能:</p>
+<ul>
+<li><b>自訂信任錨點。</b>讓應用程式為它的安全連線自訂要信任哪個憑證授權單位 (CA)。例如,信任特定的自我簽署憑證或一組限制的公用 CA。
+
+
+</li>
+<li><b>僅偵錯覆寫。</b>讓應用程式開發人員安全地為應用程式的安全連線進行偵錯,而不會造成已安裝應用程式之使用者的風險。
+
+
+</li>
+<li><b>退出明碼流量。</b>讓應用程式保護自身,不被意外使用明碼流量所危害。
+</li>
+<li><b>憑證關聯。</b>這個進階功能可讓應用程式為安全連線限制要信任的伺服器金鑰。
+</li>
+</ul>
+
+<p>如需詳細資訊,請參閱<a href="{@docRoot}preview/features/security-config.html">網路安全性設定</a>。
+</p>
+
+<h2 id="default_trusted_ca">預設的信任憑證授權單位</h2>
+
+<p>根據預設,以 Android N 為目標的應用程式只信任系統提供的憑證,而不再信任使用者新增的憑證授權單位 (CA)。以 Android N 為目標且想要信任使用者新增之 CA 的應用程式,應該使用<a href="{@docRoot}preview/features/security-config.html">網路安全性設定</a>來指定信任使用者 CA 的方法。
+
+
+
+</p>
+
+<h2 id="apk_signature_v2">APK 簽章配置第 2 版</h2>
+
+<p>PackageManager 類別現在支援使用 APK 簽章配置第 2 版來驗證應用程式。APK 簽章配置第 2 版是全檔案簽章配置,可透過偵測對 APK 檔案所做的任何未授權變更,大幅改善驗證速度並增強完整性保證。
+
+
+</p>
+
+<p>為了維持回溯相容性,APK 必須先以第 1 版簽章配置 (JAR 簽章配置) 簽署,然後再用第 2 版簽章配置簽署。有了第 2 版簽章配置,如果以第 2 版配置簽署之後,以其他憑證簽署 APK,驗證會失敗。
+
+
+ </p>
+
+<p>「N Developer Preview」稍後將提供對 APK 簽章配置第 2 版的支援。
+</p>
+
+<h2 id="scoped_directory_access">限定範圍目錄存取</h2>
+
+<p>在 Android N 中,應用程式可以使用新的 API 來要求存取特定<a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">外部儲存空間</a>目錄,包括抽取式媒體 (例如 SD 卡) 上的目錄。新的 API 大幅簡化應用程式存取標準外部儲存空間目錄 (例如 <code>Pictures</code> 目錄) 的方法。相片應用程式之類的應用程式可以使用這些 API 而非使用 <code>READ_EXTERNAL_STORAGE</code>,這樣能夠授予對所有儲存空間目錄的存取權,或是使用「儲存空間存取架構」,讓使用者可以瀏覽到目錄。
+
+
+
+
+
+
+</p>
+
+<p>此外,新的 API 也簡化了使用者授予外部儲存空間存取權給您的應用程式時所需採取的步驟。當您使用新的 API 時,系統會使用簡單的權限 UI,清楚地詳細說明應用程式要求存取的目錄。
+
+
+</p>
+
+<p>如需詳細資訊,請參閱<a href="{@docRoot}preview/features/scoped-folder-access.html">限定範圍目錄存取</a>開發人員文件。
+
+</p>
+
+
+
+
+
+
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
new file mode 100644
index 0000000..ae9e164
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/about/versions/nougat/index.jd
@@ -0,0 +1,110 @@
+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
+
+<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-8of16" style="padding-left:2em">
+ <h1 class="dac-hero-title">Android 7.0 Nougat</h1>
+ <p class="dac-hero-description">
+ 為 Android Nougat 做好準備!
+ 在 Nexus 與其他裝置上<strong>測試您的應用程式</strong>。支援新系統行為以<strong>節省電力與記憶體</strong>。使用<strong>多視窗 UI</strong>、<strong>直接回覆通知</strong>等延伸您的應用程式。
+
+
+
+ </p>
+
+ <a class="dac-hero-cta" href="{@docRoot}about/versions/nougat/android-7.0.html">
+ <span class="dac-sprite dac-auto-chevron"></span>
+ 開始使用
+ </a>
+ </div>
+ <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></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>
+</section>
+
+
+<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://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/dev-community">
+ <i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
+ 加入開發人員社群
+ </a>
+ </li>
+ </ul>
+ </div><!-- end .wrap -->
+</div><!-- end .dac-actions -->
+
+<section class="dac-section dac-light dac-small" id="latest"><div class="wrap">
+ <h2 class="norule">Latest</h2>
+ <div class="resource-widget resource-flow-layout col-16"
+ data-query="type:blog+tag:androidn+tag:featured, type:youtube+tag:androidn+tag:featured"
+ data-sortOrder="-timestamp"
+ data-cardSizes="6x6"
+ data-items-per-page="6"
+ data-maxResults="15"
+ data-initial-results="3"></div>
+</div></section>
+
+<section class="dac-section dac-gray" id="videos"><div class="wrap">
+ <h1 class="dac-section-title">Videos</h1>
+ <div class="dac-section-subtitle">
+ 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: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>
\ No newline at end of file
diff --git a/docs/html-intl/intl/zh-tw/guide/components/intents-filters.jd b/docs/html-intl/intl/zh-tw/guide/components/intents-filters.jd
index d3edac3..7e61f5e 100644
--- a/docs/html-intl/intl/zh-tw/guide/components/intents-filters.jd
+++ b/docs/html-intl/intl/zh-tw/guide/components/intents-filters.jd
@@ -76,7 +76,7 @@
<li><b>如何傳送廣播:</b>
<p>廣播是指任何應用程式都可接收的訊息。系統會傳送各種系統事件廣播,例如系統開機或裝置開始充電。
您可以將 {@link android.content.Intent} 傳送至 {@link android.content.Context#sendBroadcast(Intent) sendBroadcast()}、
-{@link android.content.Context#sendOrderedBroadcast(Intent, String) 或{@link
+{@link android.content.Context#sendOrderedBroadcast(Intent, String)} 或{@link
android.content.Context#sendStickyBroadcast sendStickyBroadcast()},以向其他應用程式傳送廣播。
diff --git a/docs/html-intl/intl/zh-tw/preview/j8-jack.jd b/docs/html-intl/intl/zh-tw/guide/platform/j8-jack.jd
similarity index 100%
rename from docs/html-intl/intl/zh-tw/preview/j8-jack.jd
rename to docs/html-intl/intl/zh-tw/guide/platform/j8-jack.jd
diff --git a/docs/html-intl/intl/zh-tw/guide/topics/ui/multi-window.jd b/docs/html-intl/intl/zh-tw/guide/topics/ui/multi-window.jd
new file mode 100644
index 0000000..86d22fb
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/guide/topics/ui/multi-window.jd
@@ -0,0 +1,582 @@
+page.title=多視窗支援
+page.metaDescription=Android N 新推出支援一次顯示多個應用程式。
+page.keywords="multi-window", "android N", "split screen", "free-form"
+
+@jd:body
+
+<div id="tb-wrapper">
+ <div id="tb">
+ <h2>此文件內容</h2>
+ <ol>
+ <li><a href="#overview">總覽</a></li>
+ <li><a href="#lifecycle">多視窗生命週期</a></li>
+ <li><a href="#configuring">針對多視窗模式設定應用程式
+</a></li>
+ <li><a href="#running">在多視窗模式中執行應用程式</a></li>
+ <li><a href="#testing">測試應用程式的多視窗支援</a></li>
+ </ol>
+ <h2>另請參閱</h2>
+ <ol>
+ <li><a class="external-link" href="https://github.com/googlesamples/android-MultiWindowPlayground">多視窗 Playground 範例應用程式
+</a></li>
+ </ol>
+ </div>
+</div>
+
+<p>
+ Android N 新增一次顯示多個應用程式的支援。
+在手持式裝置上,兩個應用程式可以在「分割畫面」模式中並排或上下排列。
+<em></em>在電視裝置上,應用程式能使用「子母畫面」模式,在使用者與另一個應用程式互動時持續播放影片。
+<em></em>
+
+</p>
+
+<p>
+ 如使用 N Preview SDK 建置應用程式,您可以設定應用程式處理多視窗顯示的方式。
+例如,您可以指定活動的最小可允許尺寸。
+您也可以停用應用程式的多視窗顯示,確保系統只會以全螢幕模式顯示您的應用程式。
+
+
+</p>
+
+<h2 id="overview">總覽</h2>
+
+<p>
+ Android N 允許多個應用程式同時分享螢幕。例如,使用者可以分割畫面,在左邊檢視網頁,同時在右邊撰寫電子郵件。
+
+使用者體驗依裝置而異:
+
+</p>
+
+<ul>
+ <li>執行 Android N 的手持式裝置可提供分割畫面模式。
+處於此模式時,系統會以並排或上下排列的方式顯示兩個應用程式,將螢幕填滿。
+使用者可以拖曳將畫面一分為二的分隔線,加大一邊的應用程式,就會縮小另一邊。
+
+ </li>
+
+ <li>在執行 Android N 的 Nexus Player 上,當使用者瀏覽其他應用程式或與其互動時,應用程式會將本身放入<a href="picture-in-picture.html">子母畫面模式</a>以持續顯示內容。
+
+
+
+ </li>
+
+ <li>較大型裝置的製造商可選擇啟用自由形式模式,讓使用者自由調整每個活動的大小。
+若製造商啟用此功能,裝置除了分割畫面模式外,還會提供自由形式模式。
+
+
+ </li>
+</ul>
+
+<img src="{@docRoot}images/android-7.0/mw-splitscreen.png" alt="" width="650" srcset="{@docRoot}images/android-7.0/mw-splitscreen.png 1x,
+ {@docRoot}images/android-7.0/mw-splitscreen_2x.png 2x," id="img-split-screen" />
+<p class="img-caption">
+ <strong>圖 1.</strong> 在分割畫面模式中並排執行的兩個應用程式。
+</p>
+
+<p>
+ 使用者可以透過下列方式來切換多視窗模式:
+</p>
+
+<ul>
+ <li>如果使用者開啟<a href="{@docRoot}guide/components/recents.html">總覽畫面</a>並長按活動標題,就可以將該標題拖曳到畫面醒目提示的部分,將活動放入多視窗模式。
+
+
+
+ </li>
+
+ <li>如果使用者長按「總覽」按鈕,裝置會將目前的活動放入多視窗模式,並開啟總覽畫面,讓使用者選擇要分享螢幕的另一個活動。
+
+
+ </li>
+</ul>
+
+<p>
+ 使用者可以在活動分享螢幕時,將一個活動中的資料<a href="{@docRoot}guide/topics/ui/drag-drop.html">拖放</a>到另一個活動。
+
+(之前,使用者只能在單一活動內拖放資料)。
+
+</p>
+
+<h2 id="lifecycle">多視窗生命週期</h2>
+
+<p>
+ 多視窗模式不會變更<a href="{@docRoot}training/basics/activity-lifecycle/index.html">活動生命週期</a>。
+
+</p>
+
+<p>
+ 在多視窗模式中,特定時間只有最近與使用者互動的活動才會處於使用中。
+這會視為「最上層」活動。<em></em>
+ 即使能看到所有其他活動,但也處於暫停狀態。
+ 然而,相較於看不到的活動,系統會給予這類暫停但可看見的活動較高的優先順序。
+若使用者改與其中一個暫停的活動互動,該活動就會恢復,使先前的最上層活動變成暫停。
+
+
+</p>
+
+<p class="note">
+ <strong>注意:</strong>在多視窗模式中,使用者仍能見到處於暫停狀態的應用程式。
+即使處於暫停,應用程式仍需要進行其活動。
+例如,處於暫停模式但仍可以看見的影片播放應用程式,應會持續顯示其影片。
+因此,建議您在播放影片的活動 {@link android.app.Activity#onPause onPause()} 處理常式中,「不要」暫停影片。
+<em></em>
+
+ 應該改為在 {@link android.app.Activity#onStop
+ onStop()}, and resume playback in {@link android.app.Activity#onStart
+ onStart()} 中暫停影片。
+</p>
+
+<p>
+ 當使用者將應用程式放入多視窗模式時,系統會通知活動發生設定變更,如<a href="{@docRoot}guide/topics/resources/runtime-changes.html">處理執行階段變更</a>所指定。
+
+基本上,此變更的活動生命週期和系統通知應用程式,裝置從垂直模式切換為水平模式時的生命週期相當,差別在於裝置尺寸會改變,而不只是切換。
+
+
+如<a href="{@docRoot}guide/topics/resources/runtime-changes.html">處理執行階段變更</a>中所述,您的活動能自行處理設定變更,或會允許系統終結活動並以新的尺寸重新建立。
+
+
+
+</p>
+
+<p>
+ 如果使用者調整視窗大小並加大長或寬的尺寸,系統會根據使用者動作來調整活動大小,並視需要發出<a href="{@docRoot}guide/topics/resources/runtime-changes.html">執行階段變更</a>。
+
+若應用程式在新公開的區域中繪製發生延遲,系統會暫時使用 {@link
+ android.R.attr#windowBackground windowBackground} 所指定的色彩或預設的
+ <code>windowBackgroundFallback</code> 樣式屬性,填滿那些區域。
+
+</p>
+
+<h2 id="configuring">針對多視窗模式設定應用程式</h2>
+
+<p>
+ 您的應用程式若以 Android N 為目標,您可以設定應用程式的活動是否支援多視窗顯示以及支援的方式。
+您可以在宣示說明中設定屬性,同時控制大小與版面配置。
+
+ 根活動的屬性設定會套用到它工作堆疊內的所有活動。
+
+</p>
+
+<p class="note">
+ <strong>注意:</strong>如果您使用 Android N 以下的 SDK 版本建置多螢幕方向應用程式,而且使用者會在多視窗模式中使用該應用程式,系統會強制調整應用程式大小。
+
+系統會顯示對話方塊向使用者警告應用程式行為異常。
+系統「不會」調整螢幕方向固定的應用程式大小,如使用者嘗試在多視窗模式下開啟螢幕方向固定的應用程式,應用程式會佔滿整個螢幕。
+<em></em>
+
+
+</p>
+
+<h4 id="resizeableActivity">android:resizeableActivity</h4>
+<p>
+ 在宣示說明的 <code><activity></code> 或
+ <code><application></code> 節點中,設定此屬性以啟用或停用多視窗顯示:
+
+</p>
+
+<pre>
+android:resizeableActivity=["true" | "false"]
+</pre>
+
+<p>
+ 如將此屬性設定為 true,就能以分割畫面和自由形式模式來啟動活動。
+如將屬性設定為 false,活動會不支援多視窗模式。
+如果此值為 false,而使用者嘗試以多視窗模式啟動活動,該活動會佔滿整個螢幕。
+
+
+</p>
+
+<p>
+ 您的應用程式如以 Android N 為目標,但您並未指定此屬性的值,屬性的預設值為 true。
+
+</p>
+
+<h4 id="supportsPictureInPicture">android:supportsPictureInPicture</h4>
+
+<p>
+ 在宣示說明的 <code><activity></code> 節點中,設定此屬性以指出活動是否支援子母畫面顯示:
+如果 <code>android:resizeableActivity</code> 為 false,則會忽略此屬性。
+
+</p>
+
+<pre>
+android:supportsPictureInPicture=["true" | "false"]
+</pre>
+
+<h3 id="layout">版面配置屬性</h3>
+
+<p>
+ 使用 Android N,<code><layout></code> 宣示說明元素支援的數個屬性會影響多視窗模式中的活動行為。
+
+
+</p>
+
+<dl>
+ <dt>
+ <code>android:defaultWidth</code>
+ </dt>
+
+ <dd>
+ 以自由形式模式啟動活動時的預設寬度。
+ </dd>
+
+ <dt>
+ <code>android:defaultHeight</code>
+ </dt>
+
+ <dd>
+ 以自由形式模式啟動活動時的預設高度。
+ </dd>
+
+ <dt>
+ <code>android:gravity</code>
+ </dt>
+
+ <dd>
+ 以自由形式模式啟動活動時的初始放置位置。請參閱
+ {@link android.view.Gravity} 參考資料以查看適當的值。
+ </dd>
+
+ <dt>
+ <code>android:minimalSize</code>
+ </dt>
+
+ <dd>
+ 在分割畫面與自由形式模式中,活動的最小高度與最小寬度。
+如果使用者在分割畫面模式中移動分隔,而使活動小於指定的最小值,系統會將活動裁剪為使用者要求的大小。
+
+
+ </dd>
+</dl>
+
+<p>
+ 例如,在自由形式模式中顯示活動時,下列程式碼顯示如何指定活動的預設大小與位置以及它的最小大小:
+
+
+</p>
+
+<pre>
+<activity android:name=".MyActivity">
+ <layout android:defaultHeight="500dp"
+ android:defaultWidth="600dp"
+ android:gravity="top|end"
+ android:minimalSize="450dp" />
+</activity>
+</pre>
+
+<h2 id="running">在多視窗模式中執行應用程式</h2>
+
+<p>
+ Android N 提供的新功能支援在多視窗模式中執行應用程式。
+
+</p>
+
+<h3 id="disabled-features">可在多視窗模式中停用的功能</h3>
+
+<p>
+ 當裝置處於多視窗模式時,有些功能無法用於會與其他活動或應用程式分享裝置螢幕的活動,因此會加以停用或忽略。
+
+這類功能包括:
+
+<ul>
+ <li>有些<a href="{@docRoot}training/system-ui/index.html">系統 UI</a>
+ 自訂選項會停用。例如,不以全螢幕模式執行就無法隱藏狀態列的應用程式。
+
+ </li>
+
+ <li>系統會忽略對 <code><a href=
+ "{@docRoot}guide/topics/manifest/activity-element.html#screen"
+ >android:screenOrientation</a></code> 屬性的變更。
+ </li>
+</ul>
+
+<h3 id="change-notification">多視窗變更通知與查詢</h3>
+
+<p>
+ 已將下列可支援多視窗顯示的新方法新增至 {@link android.app.Activity}
+ 類別。如需每個方法的詳細資訊,請參閱
+ <a href="{@docRoot}preview/setup-sdk.html#docs-dl">N Preview SDK 參考資料</a>。
+</p>
+
+<dl>
+ <dt>
+ <code>Activity.inMultiWindow()</code>
+ </dt>
+
+ <dd>
+ 呼叫即可知道活動是否處於多視窗模式。
+ </dd>
+
+ <dt>
+ <code>Activity.inPictureInPicture()</code>
+ </dt>
+
+ <dd>
+ 呼叫即可知道活動是否處於子母畫面模式。
+
+ <p class="note">
+ <strong>注意:</strong>子母畫面模式為多視窗模式的特殊情況。
+如果 <code>myActivity.inPictureInPicture()</code>
+ 傳回 true,那麼 <code>myActivity.inMultiWindow()</code> 也會傳回 true。
+
+ </p>
+ </dd>
+
+ <dt>
+ <code>Activity.onMultiWindowChanged()</code>
+ </dt>
+
+ <dd>
+ 每當活動進入或離開多視窗模式,系統就會呼叫這個方法。
+如果活動正在進入多視窗模式,系統會將 true 的值傳遞給方法,若活動正要離開多視窗模式,則會傳遞 false。
+
+
+ </dd>
+
+ <dt>
+ <code>Activity.onPictureInPictureChanged()</code>
+ </dt>
+
+ <dd>
+ 每當活動進入或離開子母畫面模式,系統就會呼叫這個方法。
+如果活動正在進入子母畫面模式,系統會將 true 的值傳遞給方法,若活動正要離開子母畫面模式,則會傳遞 false。
+
+
+ </dd>
+</dl>
+
+<p>
+ 上述的每一個方法也都有 {@link android.app.Fragment} 版本,例如
+ <code>Fragment.inMultiWindow()</code>。
+</p>
+
+<h3 id="entering-pip">進入子母畫面模式</h3>
+
+<p>
+ 呼叫新方法
+ <code>Activity.enterPictureInPicture()</code>,即可將活動放入子母畫面模式。如果裝置不支援子母畫面模式,這個方法就沒有作用。
+如需詳細資訊,請參閱<a href="picture-in-picture.html">子母畫面</a>文件。
+
+</p>
+
+<h3 id="launch">在多視窗模式中啟動新活動</h3>
+
+<p>
+ 當您啟動新活動,可以提示系統應儘可能在目前活動的旁邊顯示新的活動。
+如要這樣做,請使用旗標
+ <code>Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT</code>。
+傳遞此旗標會要求下列行為:
+
+</p>
+
+<ul>
+ <li>如果裝置處於分割畫面模式中,系統會嘗試在啟動新活動的活動旁邊建立該活動,讓兩個活動分享螢幕。
+
+系統不保證一定能這樣做,但會儘可能讓活動相鄰。
+
+ </li>
+
+ <li>如果裝置未處於分割畫面模式,這個旗標就沒有作用。
+ </li>
+</ul>
+
+<p>
+ 如果裝置處於自由形式模式,而您正在啟動新的活動,您可以呼叫
+ <code>ActivityOptions.setLaunchBounds()</code>,指定新活動的尺寸與畫面位置。
+如果裝置未處於多視窗模式,這個方法就沒有作用。
+
+</p>
+
+<p class="note">
+ <strong>注意:</strong>如果您在工作堆疊內啟動活動,該活動就會取代畫面上的活動,繼承它的所有多視窗屬性。
+
+如果您想要在多視窗模式中,以個別的視窗啟動活動,您必須在新的工作堆疊中啟動該活動。
+
+</p>
+
+<h3 id="dnd">支援拖放功能</h3>
+
+<p>
+ 使用者可以在兩個活動分享螢幕時,將一個活動中的資料<a href="{@docRoot}guide/topics/ui/drag-drop.html">拖放</a>到另一個活動。
+
+(之前,使用者只能在單一活動內拖放資料)。
+因此,若您的應用程式目前不支援拖曳功能,建議您將該功能新增至應用程式。
+
+</p>
+
+<p>
+ N Preview SDK 擴充 <a href="{@docRoot}reference/android/view/package-summary.html"><code>android.view</code></a>
+ 套件,支援跨應用程式的拖放功能。如需下列類別與方法的詳細資訊,請參閱 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">N Preview SDK 參考資料</a>。
+
+
+</p>
+
+<dl>
+ <dt>
+ <code>android.view.DropPermissions</code>
+ </dt>
+
+ <dd>
+ 語彙基元物件負責指定權限,授予給放下接收者應用程式。
+
+ </dd>
+
+ <dt>
+ <code>View.startDragAndDrop()</code>
+ </dt>
+
+ <dd>
+ {@link android.view.View#startDrag View.startDrag()} 的新別名。傳遞新旗標
+ <code>View.DRAG_FLAG_GLOBAL</code>,就可以啟用跨活動的拖放功能。
+如果您需要將 URI 權限授予接收者活動,請視需要傳遞新旗標
+ <code>View.DRAG_FLAG_GLOBAL_URI_READ</code> 或
+ <code>View.DRAG_FLAG_GLOBAL_URI_WRITE</code>。
+
+ </dd>
+
+ <dt>
+ <code>View.cancelDragAndDrop()</code>
+ </dt>
+
+ <dd>
+ 取消目前進行中的拖曳操作。只能由產生拖曳操作的應用程式呼叫。
+
+ </dd>
+
+ <dt>
+ <code>View.updateDragShadow()</code>
+ </dt>
+
+ <dd>
+ 取代目前所進行拖曳操作的拖曳陰影。只能由產生拖曳操作的應用程式呼叫。
+
+ </dd>
+
+ <dt>
+ <code>Activity.requestDropPermissions()</code>
+ </dt>
+
+ <dd>
+ 針對利用 {@link android.view.DragEvent} 中包含的 {@link
+ android.content.ClipData} 傳遞的內容 URI,要求權限。
+ </dd>
+</dl>
+
+<h2 id="testing">測試應用程式的多視窗支援</h2>
+
+<p>
+ 不論您是否針對 Android N 更新您的應用程式,都應該確認應用程式在多視窗模式中的行為為何,以免使用者試圖在執行 Android N 的裝置上以多視窗模式啟動應用程式。
+
+
+</p>
+
+<h3 id="configuring">設定測試裝置</h3>
+
+<p>
+ 如果您在裝置上安裝 Android N,即自動支援分割畫面模式。
+
+</p>
+
+<h3 id="test-non-n">應用程式若非以 N Preview SDK 建置</h3>
+
+<p>
+ 若您並非以 N Preview SDK 建置應用程式,而且使用者會試圖在多視窗模式中使用該應用程式,除非應用程式宣告螢幕方向固定,否則系統會強制調整應用程式大小。
+
+
+</p>
+
+<p>
+ 若您的應用程式並未宣告螢幕方向固定,您應該在執行 Android N 的裝置上啟動應用程式,並嘗試將應用程式放入分割畫面模式。
+
+確認強制調整應用程式大小時的使用者體驗可以接受。
+
+</p>
+
+<p>
+ 若您的應用程式宣告螢幕方向固定,您應該嘗試將應用程式放入多視窗模式。
+確認您這樣做時,應用程式依然會處於全螢幕模式。
+
+</p>
+
+<h3 id="test-mw">若您支援多視窗模式</h3>
+
+<p>
+ 如果您以 N Preview SDK 建置應用程式且未停用多視窗支援,請在分割畫面與自由形式模式下,確認下列行為:
+
+
+</p>
+
+<ul>
+ <li>以全螢幕模式啟動應用程式,然後長按 [總覽] 按鈕以切換到多視窗模式。
+確認應用程式可以正確切換。
+ </li>
+
+ <li>以多視窗模式直接啟動應用程式,並確認應用程式可以正確啟動。
+您可以按下 [總覽] 按鈕,然後長按應用程式的標題欄,再拖曳到螢幕上其中一個醒目提示的區域,即可以多視窗模式啟動應用程式。
+
+
+ </li>
+
+ <li>在分割畫面模式中拖曳分隔線調整應用程式的大小。
+ 確認可以調整應用程式大小而不會當機,同時可以看見必要的 UI 元素。
+
+ </li>
+
+ <li>如果您已指定應用程式的最小尺寸,請嘗試將應用程式的大小調整到低於指定的尺寸。
+確認您無法將應用程式的大小調整到小於指定的最小值。
+
+ </li>
+
+ <li>經由所有測試確認應用程式的效能可以接受。例如,確認在調整應用程式大小之後,不會遲遲不更新 UI。
+
+
+ </li>
+</ul>
+
+<h4 id="test-checklist">測試檢查清單</h4>
+
+<p>
+ 若要確認應用程式在多視窗模式中的效能,請嘗試下列操作。
+除非另外註明,否則您應該在分割畫面與多視窗模式中嘗試這些操作。
+
+</p>
+
+<ul>
+ <li>進入和離開多視窗模式。
+ </li>
+
+ <li>從您的應用程式切換到另一個應用程式,並確認當應用程式不在使用中但可看見時,能正常運作。
+例如,如果是播放影片的應用程式,請確認當使用者與另一個應用程式互動時,影片會持續播放。
+
+
+ </li>
+
+ <li>在分割畫面模式中,嘗試移動分隔列以加大和縮小應用程式。
+在並排與上下排列設定都要嘗試這些操作。
+確認應用程式不會當機,可以看見基本功能,而且不會花太長的時間完成調整大小操作。
+
+
+ </li>
+
+ <li>快速連續執行數次調整大小操作。確認應用程式不會因此當機或流失記憶體。
+如需檢查應用程式記憶體使用量的詳細資訊,請參閱<a href="{@docRoot}tools/debugging/debugging-memory.html">調查 RAM 使用狀況</a>。
+
+
+ </li>
+
+ <li>以數個不同的視窗設定正常使用您的應用程式,並確認應用程式都能正常運作。
+確認文字可以閱讀,而且 UI 元素不會太小而無法與之互動。
+
+ </li>
+</ul>
+
+<h3 id="test-disabled-mw">若已停用多視窗支援</h3>
+
+<p>
+ 若您已設定
+ <code>android:resizableActivity="false"</code> 來停用多視窗支援,您應該在執行 Android N 的裝置上啟動應用程式,並嘗試將應用程式放入自由形式與分割畫面模式。
+
+確認您這樣做時,應用程式依然會處於全螢幕模式。
+
+</p>
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/api-overview.jd b/docs/html-intl/intl/zh-tw/preview/api-overview.jd
deleted file mode 100644
index e5fdf8d..0000000
--- a/docs/html-intl/intl/zh-tw/preview/api-overview.jd
+++ /dev/null
@@ -1,676 +0,0 @@
-page.title=適用於開發人員的 Android N
-meta.tags="preview", "androidn"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-apis_2x.png
-@jd:body
-
-
-
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>主要開發人員功能</h2>
- <ol>
- <ul style="list-style-type:none;">
- <li><a href="#multi-window_support">多視窗支援</a></li>
- <li><a href="#notification_enhancements">通知</a></li>
- <li><a href="#jit_aot">JIT/AOT 編譯</a></li>
- <li><a href="#quick_path_to_app_install">應用程式安裝的快速路徑</a></li>
- <li><a href="#doze_on_the_go">移動時休眠</a></li>
- <li><a href="#background_optimizations">背景最佳化</a></li>
- <li><a href="#data_saver">Data Saver</a></li>
- <li><a href="#tile_api">快速設定磚 API</a></li>
- <li><a href="#number-blocking">拒接號碼</a></li>
- <li><a href="#call_screening">來電過濾</a></li>
- <li><a href="#multi-locale_languages">地區設定與語言</a></li>
- <li><a href="#icu4">Android 中的 ICU4J API</a></li>
- <li><a href="#gles_32">OpenGL ES 3.2 API</a></li>
- <li><a href="#android_tv_recording">Android TV 錄製</a></li>
- <li><a href="#android_for_work">Android for Work</a></li>
- <li><a href="#accessibility_enhancements">協助工具</a></li>
- <li><a href="#direct_boot">直接開機</a></li>
- <li><a href="#key_attestation">金鑰證明</a></li>
- <li><a href="#network_security_config">網路安全性設定</a></li>
- <li><a href="#default_trusted_ca">預設信任的 CA</a></li>
- <li><a href="apk_signature_v2">APK 簽章配置第 2 版</a></li>
- <li><a href="#scoped_directory_access">限定範圍目錄存取</a></li>
- </ol>
-</div>
-</div>
-
-
-
-<p>Android N 仍在開發中,但是您現在可以透過「N Developer Preview」來試用。下面各節重點說明適用於開發人員的一些新功能。
-
- </p>
-
-<p>
- 請務必查看<a href="{@docRoot}preview/behavior-changes.html">行為變更</a>以瞭解哪些平台變更部分會影響您的應用程式、閱讀開發人員指南以瞭解主要功能,以及下載 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 參考資料</a>以深入瞭解新 API 的詳細資訊。
-
-
-
-</p>
-
-<h2 id="multi-window_support">多視窗支援</h2>
-
-
-<p>在 Android N 中,我們將許多人要求的新多工功能引進到平台 — 多視窗支援。
- </p>
-
- <p>使用者現在可以一次在螢幕上開啟兩個應用程式。 </p>
- <ul>
- <li>在執行 Android N 的手機與平板電腦上,使用者可以在分割畫面模式中並排或上下排列兩個應用程式。只要拖曳兩個應用程式之間的分隔線,即可調整其大小。
-
-
- </li>
-
-<li>在 Android TV 裝置上,應用程式可以將本身放入<a href="{@docRoot}preview/features/picture-in-picture.html">子母畫面模式</a>,讓它們持續顯示內容,同時使用者可以瀏覽其他應用程式或與其互動。請參閱下面內容,以瞭解更多資訊。
-
- </li>
- </ul>
-
-<div class="col-4of10">
-<img src="{@docRoot}preview/images/mw-portrait.png" alt="" style="height:460px;padding-left:1em;" id="img-split-screen" />
-<p class="img-caption">
- <strong>圖 1.</strong> 在分割畫面模式中執行的應用程式。
-</p>
- </div>
-
-<p>特別是平板電腦與其他螢幕較大的裝置,多視窗支援為您提供吸引使用者的新方式。您甚至可以在應用程式中啟用拖放功能,讓使用者便利地從應用程式拖放內容 — 這是增強您的使用者體驗的絕佳方式。
-
-
- </p>
-
-<p>將多視窗支援新增到您的應用程式並設定它處理多視窗顯示的方式是很直接的作法。例如,您可以指定活動的最小可允許尺寸,避免使用者將活動的尺寸調整到低於該尺寸。您也可以停用應用程式的多視窗顯示,以確保系統只以全螢幕模式顯示您的應用程式。
-
-
-
-</p>
-
-<p>
- 如需詳細資訊,請參閱<a href="{@docRoot}preview/features/multi-window.html">多視窗支援</a>開發人員文件。
-
-</p>
-
-<h2 id="notification_enhancements">通知增強功能</h2>
-
-<p>我們已重新設計 Android N 中的通知,讓它們更易於使用、速度更快。一些變更包括:
-</p>
-
-<ul>
- <li>
- <strong>範本更新</strong>:我們已更新通知範本,在主圖影像和虛擬人偶放入的新強調。開發人員只需對程式碼進行最少的調整,即可發揮新範本的所有功能。
-
-
- </li>
-
- <li>
- <strong>整合式通知</strong>:系統可以將訊息群組到一起 (例如依訊息主題) 並顯示群組。使用者可以直接在群組上執行動作,如「關閉」或「封存」。如果您已實作 Android Wear 的通知,則已經熟悉此模式。
-
-
-
-
- </li>
-
- <li>
- <strong>直接回覆</strong>:對於即時通訊應用程式,Android 系統支援內嵌回覆,這樣使用者就能直接在通知介面內快速回應簡訊或文字訊息。
-
-
- </li>
-
- <li>
- <strong>自訂檢視</strong>:兩個新的 API 讓您在通知中使用自訂檢視時可利用系統的裝飾,例如通知標題與動作。
-
-
- </li>
-</ul>
-
-<div class="col-4of12">
- <img src="{@docRoot}preview/images/notifications-1.png" alt="" style="padding:.5em;max-width:226px">
-</div>
-
-<div class="col-4of12">
- <img src="{@docRoot}preview/images/notifications-3.png" alt="" style="padding:.5em;max-width:226px">
-</div>
-
-<div class="col-4of12">
- <img src="{@docRoot}preview/images/notifications-2.png" alt="" style="padding:.5em;max-width:226px">
-</div>
-
-
-<p class="img-caption">
- <strong>圖 2.</strong> 整合式通知與直接回覆。
-</p>
-
-<p>如果要瞭解如何實作新的功能,請參閱<a href="{@docRoot}preview/features/notification-updates.html">通知</a>指南。
-
-</p>
-
-
-
-<h2 id="jit_aot">設定檔指引 JIT/AOT 編譯</h2>
-
-<p>在 Android N 中,我們新增了 Just in Time (JIT) 編譯器搭配程式碼分析工具到 ART,讓 Android 應用程式在執行時能夠持續改善其效能。JIT 編譯器補充了 ART 目前的 Ahead of Time (AOT) 編譯器,協助改善執行階段效能、節省儲存空間以及加速應用程式更新和系統更新。
-
-
-
-</p>
-
-<p>設定檔指引編譯讓 ART 根據每個應用程式的實際用情形與裝置上的情況來管理其 AOT/JIT 編譯。例如,ART 會維護每個應用程式常用方法的設定檔,而且可以預先編譯和快取那些方法以獲得最佳效能。它不會編譯應用程式的其他部分,直到實際要使用這些部分時才會編譯。
-
-
-
-</p>
-
-<p>除了改善應用程式關鍵部分的效能以外,設定檔指引編譯還有助於降低應用程式的整體 RAM 使用量,包括關聯的二進位檔案。此功能對於低記憶體裝置特別重要。
-
-</p>
-
-<p>ART 透過對裝置電池產生最小影響的方式來管理設定檔指引編譯。它只會在裝置閒置和充電時預先編譯,這種預先工作的方式可以節省時間和電池電力。
-
-</p>
-
-<h2 id="quick_path_to_app_install">應用程式安裝的快速路徑</h2>
-
-<p>ART JIT 編譯器的最實質好處之一是加速應用程式安裝和系統更新。即使是在 Android 6.0 上需要數分鐘來最佳化和安裝的大型應用程式,現在只需幾秒鐘就可以安裝。系統更新也會變得更快,因為不再需要最佳化步驟。
-
-
- </p>
-
-<h2 id="doze_on_the_go">移動時休眠...</h2>
-
-<p>Android 6.0 引進休眠功能,這是可節省電池電力的系統模式,它會在裝置閒置時 (例如放在桌子上或抽屜中) 延後應用程式的 CPU 與網路活動。
-
- </p>
-
-<p>現在 Android N 中的休眠功能更進一步進展,可在移動時節省電池電力。只要螢幕關閉一段時間且裝置拔除電源的情況下,休眠功能就會將熟悉的 CPU 與網路限制的子集套用到應用程式。這表示即使使用者將裝置放在口袋內時也可以節省電池電力。
-
-
-
-</p>
-
-
-<img src="/preview/images/doze-diagram-1.png" alt="" id="figure1" />
-<p class="img-caption">
- <strong>圖 3.</strong> 休眠功能現在可套用限制,即使裝置沒有固定在一處時,也能改善電池使用時間。
-
-</p>
-
-
-<p>當裝置使用電池時,在螢幕關閉短時間後,休眠功能會限制網路存取並延遲工作與同步處理。在短暫的維護時段中,應用程式可存取網路並執行延遲的工作/同步處理。裝置螢幕開啟或插上電源可讓裝置離開休眠狀態。
-
-
-
-</p>
-
-<p>當裝置再次固定不動,且螢幕關閉並使用電池一段時間後,休眠功能會在
-{@link
-android.os.PowerManager.WakeLock}, {@link android.app.AlarmManager} 鬧鐘和 GPS/Wi-Fi 掃描上套用完整的 CPU 與網路限制。
-</p>
-
-<p>讓應用程式適應休眠功能的最佳做法,無論裝置在移動中或固定不動都是一樣的,所以如果您已經更新應用程式使其能夠處理休眠,就完全沒問題。如果沒有,現在就<a href="{@docRoot}training/monitoring-device-state/doze-standby.html#assessing_your_app">讓您的應用程式適應休眠功能</a>。
-
-
-</p>
-
-<h2 id="background_optimizations">專案 Svelte:背景最佳化</h2>
-
-<p>專案 Svelte 一直努力在生態系統中讓各種 Android 裝置上系統與應用程式使用最少的 RAM。在 Android N 中,「專案 Svelte」專注於最佳化應用程式在背景執行的方式。
-
- </p>
-
-<p>背景處理是大多數應用程式的必要部分。如果正確地處理,它可讓您擁有令人驚歎的使用者體驗 — 立即、快速、內容感知。如果沒有適當處理,背景處理就會不必要地耗用 RAM (與電池電力),而且影響其他應用程式的系統效能。
-
-
- </p>
-
-<p>自 Android 5.0 開始,{@link android.app.job.JobScheduler} 就以適合使用者的偏好方式來執行背景工作。應用程式可以排程工作,同時讓系統根據記憶體、電源和連線狀況進行最佳化。JobScheduler 提供控制權和簡潔性,我們希望所有應用程式都使用它。
-
-
-
- </p>
-
-<p>
- 另一個好用的選項是 <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager"><code>GCMNetworkManager</code></a>,它屬於 Google Play 服務的一部分,提供類似的工作排程功能,可與舊版 Android 相容。
-
-
-
-</p>
-
-<p>我們會繼續擴充 <code>JobScheduler</code> 和 <code>GCMNetworkManager</code> 以滿足您的更多使用案例 — 例如,在 Android N 中,現在您可以根據內容提供者中的變更來排程背景工作。同時,我們也開始取代一些會降低系統效能 (特別是低記憶體裝置) 的較舊模式。
-
-
-
-
-</p>
-
-<p>在 Android N 中,我們移除了三個常用的隱含廣播 — {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}、{@link
- android.hardware.Camera#ACTION_NEW_PICTURE} 和 {@link
- android.hardware.Camera#ACTION_NEW_VIDEO} — 因為它們會一次喚醒多個應用程式的背景處理程序,而耗盡記憶體與電池電力。如果您的應用程式收到這些廣播,請改為使用「N Developer Preview」遷移到 <code>JobScheduler</code> 與相關的 API。
-
-
-
- </p>
-
-<p>
- 看看<a href="{@docRoot}preview/features/background-optimization.html">背景最佳化</a>文件,以瞭解詳細資訊。
-
-</p>
-
-
-<h2 id="data_saver">Data Saver</h2>
-
-<div class="col-5of12" style="margin-right:1.5em;">
-<img src="{@docRoot}preview/images/datasaver.png" style="border:2px solid #ddd">
-
-<p class="img-caption" style="padding-right:2em;">
- <strong>圖 4.</strong> [設定] 中的 Data Saver。
-</p>
- </div>
-
-<p>在行動裝置的使用壽命期間,行動數據方案的費用通常會超過裝置本身的費用。對於許多使用者而言,行動數據是他們想要節省的昂貴資源。
-
- </p>
-
-<p>Android N 引進 Data Saver 模式,這是一個新的系統服務,有助於降低應用程式的行動數據用量,無論是漫遊、接近帳單週期結束時或小量預付數據包。Data Saver 讓使用者控制應用程式如何使用行動數據,也讓開發人員在 Data Saver 開啟時提供更有效率的服務。
-
-
-
- </p>
-
-<p>當使用在 [設定]<strong></strong> 中啟用 Data Saver 且裝置使用計量付費網路時,系統會封鎖背景數據使用量,並指示前景的應用程式盡量使用較少的數據 — 例如,限制串流的位元率、降低影像品質、延遲開放式預先快取等等。使用者可以將特定應用程式新增到允許清單,以便即使在 Data Saver 為開啟狀態時,這些應用程式仍可在背景使用計量付費的數據使用量。
-
-
-
-
-</p>
-
-<p>Android N 擴充 {@link android.net.ConnectivityManager} 為應用程式提供<a href="{@docRoot}preview/features/data-saver.html#status">擷取使用者的 Data Saver 喜好設定</a>與<a href="{@docRoot}preview/features/data-saver.html#monitor-changes">監視喜好設定變更</a>的方法。所有應用程式應該檢視使用者是否已啟用 Data Saver 並努力限制前景與背景的數據使用量。
-
-
-
-</p>
-
-
-<h2 id="tile_api">快速設定磚 API</h2>
-
-
-<div style="float:right;max-width:320px">
-<img src="{@docRoot}preview/images/quicksettings.png" style="padding-left:1.5em;">
-
-<p class="img-caption" style="padding-left:2em;">
- <strong>圖 5.</strong> 通知欄中的快速設定磚。
-</p>
-
-
- </div><p>快速設定是直接從通知欄顯示關鍵設定與動作的常用簡單方式。在 Android N 中,我們擴充了快速設定的範圍,讓它變得更實用、更便利。
-
- </p>
-
-<p>我們也為額外的快速設定磚增加了更多空間,使用者可以透過向左或向右撥動存取分頁顯示區域。我們也讓使用者能夠控制要顯示的快速設定磚與顯示位置 — 使用者只需拖放磚,即可新增或移除它們。
-
-
- </p>
-
-<p>對於開發人員,Android N 也加入了新的 API,讓您定義自己的快速設定磚,以便使用者輕鬆存取您應用程式中的關鍵控制項與動作。
-</p>
-
-<p>
- 快速設定磚是專為急需或常用的控制項或動作而保留的,它不應該做為啟動應用程式的捷徑。
-
-
-</p>
-
-<p>
- 定義磚之後,您即可將它們顯示給使用者,使用者只需拖放這些磚,即可將它們新增到快速設定中。
-
-</p>
-
-<p>
- 如需建立應用程式磚的相關資訊,請參閱可下載之 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 參考資料</a>中的 <code>android.service.quicksettings.Tile</code>。
-
-</p>
-
-
-
-<h2 id="number-blocking">拒接號碼</h2>
-
-<p>Android N 現在在平台中支援拒接號碼,並提供一個架構 API,讓服務提供者維護一份拒接號碼清單。預設的簡訊應用程式、預設的電話應用程式與提供者應用程式可以讀取及寫入拒接號碼清單。其他應用程式無法存取該清單。
-
-
-</p>
-
-<p>透過讓拒絕號碼成為平台上的標準功能,Android 為應用程式提供一個一致的方式,讓它們在各種裝置上都能支援拒接號碼。應用程式可以利用的其他好處包括:
-
-</p>
-
-<ul>
- <li> 如果為某個號碼設定來電拒接,也會拒收該號碼的簡訊
- <li> 透過備份與還原功能,即使經過重設或使用不同的裝置,也可持續保存
-
- <li> 多個應用程式可使用同一份拒接號碼清單
-</ul>
-
-<p>此外,透過 Android 整合行動通訊業者應用程式,表示行動通訊業者可以讀取裝置上的拒接號碼清單並為使用者執行服務端的拒接號碼,因此停止拒接號碼的來電和簡訊透過任何媒體 (例如 VOIP 端點或來電轉接) 連絡到使用者。
-
-
-</p>
-
-<p>
- 如需詳細資訊,請參閱可下載之 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 參考資料</a>中的 <code>android.provider.BlockedNumberContract</code>。
-
-
-</p>
-
-<h2 id="call_screening">來電過濾</h2>
-
-<p>
- Android N 能讓預設電話應用程式過濾來電。電話應用程式執行的方法是實作新的<code>CallScreeningService</code>,它可以讓電話應用程式根據來電的 {@link android.telecom.Call.Details Call.Details} 來執行數個動作,例如:
-
-
-
-</p>
-
-<ul>
- <li> 拒接來電
- <li> 不允許將來電記錄到通話紀錄
- <li> 不對使用者顯示來電通知
-</ul>
-
-<p>
- 如需詳細資訊,請參閱可下載之 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 參考資料</a>中的 <code>android.telecom.CallScreeningService</code>。
-
-
-</p>
-
-
-<h2 id="multi-locale_languages">多地區設定支援,更多語言</h2>
-
-
-<p>Android N 現在可讓使用者在 [設定] 中選取<strong>多個地區設定</strong>,以便以更好的方式支援雙語言使用案例。應用程式可以使用新的 API 取得使用者選取的地區設定,然後為多地區設定使用者提供更精細的使用者體驗 — 例如以多語言顯示搜尋結果,以及不為使用者已經熟知語言的網頁提供翻譯。
-
-
-
-
-</p>
-
-<p>除了多地區設定支援,Android N 也擴充了供使用者選用的語言選項。它為每種常用語言 (例如英文、西班牙文、法文與阿拉伯文) 提供 25 種變體。它也增加了對 100 種以上新語言的支援。
-
-
-</p>
-
-<p>應用程式呼叫 <code>LocaleList.GetDefault()</code> 即可取得使用者設定的地區設定清單。為了支援擴充的地區設定數目,Android N 變更了它解析資源的方式。請務必測試並確認您的應用程式使用新的資源解析邏輯時可正常運作。
-
-</p>
-
-<p>如果要深入瞭解新的資源解析行為與應該遵循的最佳做法,請參閱<a href="{@docRoot}preview/features/multilingual-support.html">多語言支援</a>。
-</p>
-
-<h2 id="icu4">Android 中的 ICU4J API</h2>
-
-<p>
- Android N 現在在 <code>android.icu</code> 套件下的 Android 架構中提供一個 <a href="http://site.icu-project.org/">ICU4J</a> API 子集。遷移很容易,大部分要承擔只是從 <code>com.java.icu</code> 命名空間變更為 <code>android.icu</code> 即可。如果您已經在應用程式中使用 ICU4J 套件組合,只要切換到 Android 架構中提供的 <code>android.icu</code> API,即可顯著縮減 APK 的大小。
-
-
-
-
-
-</p>
-
-<p>
- 如果要深入瞭解 Android ICU4J API,請參閱 <a href="{@docRoot}preview/features/icu4j-framework.html">ICU4J 支援</a>。
-</p>
-
-
-
-<h2 id="gles_32">OpenGL™ ES 3.2 API</h2>
-
-<p>Android N 針對 OpenGL ES 3.2 新增架構介面與平台支援,包括:</p>
-
-<ul>
- <li> <a class="external-link" href="https://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">Android 延伸套件</a></a> (AEP) 中的所有延伸套件,但 <code>EXT_texture_sRGB_decode</code> 除外。
- <li> HDR 的浮點畫面緩衝區與延遲著色。
- <li> BaseVertex 繪圖呼叫 (可啟用更好的批次處理與串流)。
- <li> 穩定的緩衝區存取控制 (可降低 WebGL 額外負荷)。
-</ul>
-
-<p>Android N 上 OpenGL ES 3.2 的架構 API 提供 <code>GLES32</code> 類別。使用 OpenGL ES 3.2 時,請務必在宣示說明檔案中使用 <code><uses-feature></code> 標籤與 <code>android:glEsVersion</code> 屬性宣告需求。
-
-
- </p>
-
-<p>如需使用 OpenGL ES (包括如何在執行階段檢查裝置支援的 OpenGL ES 版本) 的詳細資訊,請參閱 <a href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL ES API 指南</a>。
-</p>
-
-
-<h2 id="android_tv_recording">Android TV 錄製</h2>
-
-<p>Android N 透過新的錄製 API,新增了錄製和播放 Android TV 輸入服務內容的功能。以現有的時間位移 API 為建置基礎,TV 輸入服務可以控制要錄製哪個頻道的資料、如何儲存已錄製的時段,以及管理使用者與錄製內容的互動。
-
-
- </p>
-
-<p>如需詳細資訊,請參閱 <a href="{@docRoot}preview/features/tv-recording-api.html">Android TV 錄製 API</a>。</p>
-
-
-<h2 id="android_for_work">Android for Work</h2>
-
-<p>Android for Work 為執行 Android N 的裝置增加了許多新的功能與 API。一些亮點如下所示 — 如需與 Android N 相關之 Android for Work 更新的完整清單,請參閱「Android for Work 變更」。
-
-</p>
-
-<h3 id="work_profile_security_challenge">工作設定檔安全性查問 </h3>
-
-<p>
- 設定檔擁有者可以為以工作設定檔執行之應用程式指定個別的安全性查問。當使用者嘗試開啟任何工作應用程式時會顯示工作查問。成功完成安全性查問可將工作設定檔解鎖並在必要時將它解密。對於設定檔擁有者而言,<code>ACTION_SET_NEW_PASSWORD</code> 會提示使用者設定工作查問,而且 <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> 會提示使用者設定裝置鎖定。
-
-
-
-
-
-
-</p>
-
-<p>
- 設定檔擁有者可以使用 <code>setPasswordQuality()</code>、<code>setPasswordMinimumLength()</code> 與相關方法,為工作查問設定各自的密碼原則 (例如,需要 PIN 的時間長度,或是否使用指紋來將設定檔解鎖)。設定檔使用者也可以使用新的 <code>getParentProfileInstance()</code> 方法傳回的 <code>DevicePolicyManager</code> 執行個體來設定裝置鎖定。此外,設定檔擁有者還可以使用新的 <code>setOrganizationColor()</code> 與 <code>setOrganizationName()</code> 方法,為工作查問自訂認證畫面。
-
-
-
-
-
-
-
-
-</p>
-<h3 id="turn_off_work">關閉工作 </h3>
-
-<p>在具有工作設定檔的裝置上,使用者可以切換工作模式。當工作模式關閉時,受管理的使用者會暫時關機,因此而停用工作設定檔應用程式、背景同步與通知。這也包括設定檔擁有者應用程式。當工作模式關閉時,系統會顯示持續的狀態圖示,提醒使用者他們無法啟動工作應用程式。啟動器會指出工作應用程式和小工具無法存取。
-
-
-
-
- </p>
-
-<h3 id="always_on_vpn">一律開啟的 VPN </h3>
-
-<p>裝置擁有者和設定檔擁有者可確保工作應用程式一律透過指定的 VPN 連線。系統會自動在裝置開機時啟動該 VPN。
-
-</p>
-
-<p>
- 新的 <code>DevicePolicyManager</code> 方法是 <code>setAlwaysOnVpnPackage()</code> 與 <code>getAlwaysOnVpnPackage()</code>。
-
-
-</p>
-
-<p>因為系統無需透過應用程式互動即可直接連結 VPN 服務,所以 VPN 用戶端需要為「一律開啟的 VPN」處理新的進入點。正如以往,透過符合動作 <code>android.net.VpnService</code> 的意圖篩選器向系統指明服務。
-
-
- </p>
-
-<p>
- 使用者也可以使用 [設定] > [更多] > [VPN]<strong></strong> 手動設定「一律開啟的 VPN」用戶端,這些用戶端在主要使用者中實作 <code>VPNService</code> 方法。
-
-
-</p>
-
-<h2 id="accessibility_enhancements">協助工具增強功能</h2>
-
-<p>Android N 現在為新的裝置設定在歡迎畫面上直接提供「視覺設定」。這讓使用者更易於在自己的裝置上探索及設定協助工具功能,包括放大手勢、字型大小、顯示大小和 TalkBack。
-
-
- </p>
-
-<p>將這些協助工具功能放置在更為顯眼的地方,您的使用者較可能在啟用它們的情況下試用您的應用程式。請務必儘早在啟用這些設定的情況下測試您的應用程式。您可以從 [設定] > [協助工具] 啟用它們。
-
-
-</p>
-
-<p>此外,在 Android N 中,協助工具服務現在也可以協助行動不便的使用者觸控螢幕。新的 API 允許使用臉部追蹤、眼睛追蹤、點掃描等功能來建置服務,以滿足這些使用者的需要。
-
-
-</p>
-
-<p>如需詳細資訊,請參閱可下載之 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 參考資料</a>中的 <code>android.accessibilityservice.GestureDescription</code>。
- </p>
-
-
-<h2 id="direct_boot">直接開機</h2>
-
-<p>直接開機可加速裝置啟動時間,並讓已註冊的應用程式只能使用有限的功能 (即使在未預期的重新開機之後)。例如,如果一個加密裝置在使用者睡覺時重新開機,已註冊的鬧鐘、訊息與來電現在可以持續如常通知使用者。這也表示協助工具服務在重新啟動之後可立即使用。
-
-
-
-
-</p>
-
-<p>直接開機利用 Android N 中以檔案為基礎的加密,能夠為系統與應用程式資料使用更精細的加密原則。系統為特定系統資料與明確註冊的應用程式資料使用裝置加密存放區。在預設情況下,所有其他系統資料、使用者資料、應用程式與應用程式資料都會使用認證加密存放區。
-
-
-
- </p>
-
-<p>開機時,系統會以限制模式啟動,它只能存取裝置加密的資料,而無法對應用程式或資料進行一般存取。如果您有想要在這個模式下執行的元件,可以在宣示說明中設定旗標來註冊這些元件。重新啟動之後,系統會透過廣播 <code>LOCKED_BOOT_COMPLETED</code> 意圖來啟用已註冊的元件。系統會確保已註冊的裝置加密應用程式資料可供使用之後才會解除鎖定。所有其他資料都無法使用,直到使用者確認他們的鎖定畫面認證之後,才會將這些資料解密。
-
-
-
-
-
-
- </p>
-
-如需詳細資訊,請參閱<a href="{@docRoot}preview/features/direct-boot.html">直接開機</a>。</p>
-</p>
-
-
-<h2 id="key_attestation">金鑰證明</h2>
-
-<p>硬體支援的金鑰存放區為 Android 裝置上密碼編譯金鑰的建立、儲存及使用提供更安全的方法。它們可保護金鑰不受 Linux 核心、可能的 Android 弱點和從已解鎖裝置擷取的傷害。
-
-
-</p>
-
-<p>為了讓使用硬體支援的金鑰存放區更易於使用且更安全,Android N 引進金鑰證明。應用程式與裝置外部服務可以使用金鑰證明,毫不懷疑地判斷 RSA 或 EC 金鑰組是否有硬體支援、金鑰組的屬性是哪些以及它的用法和有效性上套用哪些限制條件。
-
-
-
- </p>
-
-<p>應用程式與裝置外部服務可以透過 X.509 證明憑證 (必須以有效的證明金鑰簽署) 來要求有關金鑰組的資訊。證明金鑰是 ECDSA 簽署金鑰,它在裝置出廠時就已內嵌到其中的硬體支援金鑰存放區。因此,以有效證明金鑰簽署的證明憑證可確認裝置上有硬體支援的金鑰存放區,以及該金鑰儲存區中包含之金鑰組的詳細資訊。
-
-
-
-
-
-</p>
-
-<p>為了確保裝置使用安全的官方 Android 出廠映像,金鑰證明要求裝置的<a class="external-link" href="https://source.android.com/security/verifiedboot/verified-boot.html#bootloader_requirements">開機載入器</a>對<a class="external-link" href="https://source.android.com/security/trusty/index.html">信任執行環境 (TEE)</a> 提供下列資訊:
-
-
-</p>
-
-<ul>
-<li>裝置上安裝的作業系統版本與修補程式層級</li>
-<li><a href="https://source.android.com/security/verifiedboot/index.html" class="external-link">Verified Boot</a> 公開金鑰與鎖定狀態</li>
- </ul>
-
-<p>如需硬體支援的金鑰存放區功能的詳細資訊,請參閱<a href="https://source.android.com/security/keystore/" class="external-link">硬體支援的金鑰存放區</a>指南。
-</p>
-
-<p>除了金鑰證明之外,Android N 還引進連結指紋的金鑰,在註冊指紋時並不會撤銷。
-</p>
-
-<h2 id="network_security_config">網路安全性設定</h2>
-
-<p>在 Android N 中,應用程式可以安全地自訂其安全 (HTTPS、TLS) 連線的行為,無需修改任何程式碼,方法是使用宣告式的<em>網路安全性設定</em>,而不是使用容易出錯的傳統程式設計 API (例如 X509TrustManager)。
-
-
-</p>
-
- <p>支援的功能:</p>
-<ul>
-<li><b>自訂信任錨點。</b>讓應用程式為它的安全連線自訂要信任哪個憑證授權單位 (CA)。例如,信任特定的自我簽署憑證或一組限制的公用 CA。
-
-
-</li>
-<li><b>僅偵錯覆寫。</b>讓應用程式開發人員安全地為應用程式的安全連線進行偵錯,而不會造成已安裝應用程式之使用者的風險。
-
-
-</li>
-<li><b>退出明碼流量。</b>讓應用程式保護自身,不被意外使用明碼流量所危害。
-</li>
-<li><b>憑證關聯。</b>這個進階功能可讓應用程式為安全連線限制要信任的伺服器金鑰。
-</li>
-</ul>
-
-<p>如需詳細資訊,請參閱<a href="{@docRoot}preview/features/security-config.html">網路安全性設定</a>。
-</p>
-
-<h2 id="default_trusted_ca">預設的信任憑證授權單位</h2>
-
-<p>根據預設,以 Android N 為目標的應用程式只信任系統提供的憑證,而不再信任使用者新增的憑證授權單位 (CA)。以 Android N 為目標且想要信任使用者新增之 CA 的應用程式,應該使用<a href="{@docRoot}preview/features/security-config.html">網路安全性設定</a>來指定信任使用者 CA 的方法。
-
-
-
-</p>
-
-<h2 id="apk_signature_v2">APK 簽章配置第 2 版</h2>
-
-<p>PackageManager 類別現在支援使用 APK 簽章配置第 2 版來驗證應用程式。APK 簽章配置第 2 版是全檔案簽章配置,可透過偵測對 APK 檔案所做的任何未授權變更,大幅改善驗證速度並增強完整性保證。
-
-
-</p>
-
-<p>為了維持回溯相容性,APK 必須先以第 1 版簽章配置 (JAR 簽章配置) 簽署,然後再用第 2 版簽章配置簽署。有了第 2 版簽章配置,如果以第 2 版配置簽署之後,以其他憑證簽署 APK,驗證會失敗。
-
-
- </p>
-
-<p>「N Developer Preview」稍後將提供對 APK 簽章配置第 2 版的支援。
-</p>
-
-<h2 id="scoped_directory_access">限定範圍目錄存取</h2>
-
-<p>在 Android N 中,應用程式可以使用新的 API 來要求存取特定<a href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">外部儲存空間</a>目錄,包括抽取式媒體 (例如 SD 卡) 上的目錄。新的 API 大幅簡化應用程式存取標準外部儲存空間目錄 (例如 <code>Pictures</code> 目錄) 的方法。相片應用程式之類的應用程式可以使用這些 API 而非使用 <code>READ_EXTERNAL_STORAGE</code>,這樣能夠授予對所有儲存空間目錄的存取權,或是使用「儲存空間存取架構」,讓使用者可以瀏覽到目錄。
-
-
-
-
-
-
-</p>
-
-<p>此外,新的 API 也簡化了使用者授予外部儲存空間存取權給您的應用程式時所需採取的步驟。當您使用新的 API 時,系統會使用簡單的權限 UI,清楚地詳細說明應用程式要求存取的目錄。
-
-
-</p>
-
-<p>如需詳細資訊,請參閱<a href="{@docRoot}preview/features/scoped-folder-access.html">限定範圍目錄存取</a>開發人員文件。
-
-</p>
-
-
-
-
-
-
diff --git a/docs/html-intl/intl/zh-tw/preview/behavior-changes.jd b/docs/html-intl/intl/zh-tw/preview/behavior-changes.jd
deleted file mode 100644
index fb1c1db..0000000
--- a/docs/html-intl/intl/zh-tw/preview/behavior-changes.jd
+++ /dev/null
@@ -1,480 +0,0 @@
-page.title=行為變更
-page.keywords=preview,sdk,compatibility
-meta.tags="preview", "compatibility"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-changes_2x.png
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>此文件內容</h2>
-
-<ol>
- <li><a href="#perf">效能改良</a>
- <ol>
- <li><a href="#doze">休眠</a></li>
- <li><a href="#bg-opt">背景最佳化</a></li>
- </ol>
- </li>
- <li><a href="#perm">權限變更</a></li>
- <li><a href="#accessibility">協助工具改良</a>
- <ol>
- <li><a href="#screen-zoom">螢幕縮放</a></li>
- <li><a href="#vision-settings">設定精靈中的視覺設定</a></li>
- </ol>
- </li>
- <li><a href="#ndk">NDK 應用程式連結到平台程式庫</a></li>
- <li><a href="#afw">Android for Work</a></li>
-</ol>
-
-<h2>另請參閱</h2>
-<ol>
- <li><a href="{@docRoot}preview/api-overview.html">Android N API 總覽</a>
-</li>
-</ol>
-
-</div>
-</div>
-
-
-<p>
- 除了新特性和功能之外,Android N 還包括各種不同的系統與 API 行為變更。此文件將強調說明一些您應該知道且在您的應用程式中加以考量的重要變更。
-
-
-
-</p>
-
-<p>
- 如果您先前曾發佈過適用於 Android 的應用程式,請注意,您的應用程式可能會受到平台中的這類變更所影響。
-
-</p>
-
-
-<h2 id="perf">效能改良</h2>
-
-<p>
- Android N 包含的系統行為變更旨在提升裝置的電池使用時間、改進 RAM 使用狀況與應用程式效能。這些變更會影響應用程式的系統資源可用性與系統通知。您應該檢閱這些變更並評估應用程式需要如何據以調整。
-
-
-
-
-</p>
-
-<h3 id="doze">休眠</h3>
-
-<p>
- 於 Android 6.0 (API 層級 23) 引進的休眠會在使用者將裝置的電源拔除、保持靜止狀態並關閉螢幕時,延遲 CPU 與網路活動,以延長電池使用時間。Android N 會在裝置電源被到拔除並關閉螢幕,但不一定靜置不動時 (例如使用者把手持裝置放在口袋中行進時),套用 CPU 與網路限制子集,進一步增強休眠的功能。
-
-
-
-
-
-</p>
-
-
-<img src="{@docRoot}preview/images/doze-diagram-1.png" alt="" height="251px" id="figure1" />
-<p class="img-caption">
- <strong>圖 1.</strong> 休眠如何套用第一層級的系統活動限制以延長電池使用時間的示意圖。
-
-</p>
-
-<p>
- 當裝置以電池電力運作且螢幕已關閉一段時間時,裝置會進入休眠並套用第一組限制子集:關閉應用程式網路存取並延遲工作和同步。如果裝置進入休眠後靜置不動一段時間,系統會對 {@link android.os.PowerManager.WakeLock}、
- {@link android.app.AlarmManager} 鬧鐘、GPS 與 Wi-Fi 掃描套用其餘的休眠限制。不論是已套用某些或全部的休眠限制,系統都會喚醒裝置簡短地進行維護,應用程式能夠在該維護時段內存取網路,並能執行任何延遲的工作/同步。
-
-
-
-
-
-
-
-</p>
-
-
-<img src="{@docRoot}preview/images/doze-diagram-2.png" alt="" id="figure2" />
-<p class="img-caption">
- <strong>圖 2.</strong> 休眠如何在裝置靜置不動一段時間之後套用第二層級的系統活動限制的示意圖。
-
-</p>
-
-<p>
- 請注意,開啟螢幕或將裝置插電,就會結束休眠並移除這些處理限制。這項額外行為不會影響配合 Android 6.0 (API 層級 23) 引進的舊版休眠改寫應用程式的建議與最佳做法,如<a href="{@docRoot}training/monitoring-device-state/doze-standby.html">最佳化休眠與應用程式待命</a>中所述。像是使用 Google 雲端通訊 (GCM) 來傳送和接收訊息,以及開始規劃可適應額外休眠行為的更新等,還是應該遵循那些建議。
-
-
-
-
-
-
-
-
-</p>
-
-
-<h3 id="bg-opt">專案 Svelte:背景最佳化</h3>
-
-<p>
- Android N 將三種隱含式廣播移除,有助於最佳化記憶體用量與電源耗用量。因為隱含式廣播常常會將註冊為在背景接聽此類廣播的應用程式啟動,所以此一變更有其必要。移除這些廣播對裝置效能與使用者體驗大有益處。
-
-
-
-
-</p>
-
-<p>
- 行動裝置的連線能力經常變更,例如在 Wi-Fi 與行動數據之間切換。目前,應用程式可以透過在宣示說明中註冊隱含式 {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION} broadcast in their
- 廣播的接收器以監視連線能力變更。由於許多應用程式都註冊要接收此廣播,單一網路切換就可以喚醒所有應用程式,並立刻處理廣播。
-
-
-
-
-</p>
-
-<p>
- 同樣地,應用程式可以註冊要接收來自其他應用程式 (例如,相機) 的隱含式 {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} 與 {@link
- android.hardware.Camera#ACTION_NEW_VIDEO} 廣播。當使用者使用相機應用程式拍攝相片時,會喚醒這些應用程式來處理廣播。
-
-
-</p>
-
-<p>
- 為減少這些問題,Android N 採用的最佳化方式如下:
-
-</p>
-
-<ul>
- <li>目標為 Android N 的應用程式不會收到 {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION} 廣播,即使其宣示說明項目要求這些事件的通知。在前景執行的應用程式如果使用 {@code CONNECTIVITY_CHANGE} 來要求通知,仍可以在主要執行緒上接聽 {@link
- android.content.BroadcastReceiver}。
-
-
-
- </li>
-
- <li>應用程式無法傳送或接收 {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} 或 {@link
- android.hardware.Camera#ACTION_NEW_VIDEO} 廣播。這種最佳化方式會影響所有應用程式,而不只是目標為 Android N 的應用程式。
-
- </li>
-</ul>
-
-<p>
- 未來發行的 Android 可能會將其他隱含式廣播與未繫結的背景服務視為過時。因此,為隱含式廣播在宣示說明中宣告的接收器相依性以及背景服務的相依性,都應該避免或加以移除。
-
-
-
-</p>
-
-<p>
- Android 架構提供數種解決方案,減少這些隱含式廣播或背景服務的需求。例如,{@link
- android.app.job.JobScheduler} API 提供的健全機制可在符合指定條件 (例如,連線到非計量付費網路) 的情況下,排程網路操作。您甚至可以使用 {@link
- android.app.job.JobScheduler},對內容提供者的變更採取因應動作。
-
-
-
-</p>
-
-<p>
- 如需此行為變更和如何改寫應用程式的詳細資訊,請參閱<a href="{@docRoot}preview/features/background-optimization.html">背景最佳化</a>。
-
-
-</p>
-
-
-<h2 id="perm">權限變更</h2>
-
-<p>
- Android N 包括會影響您應用程式的權限變更,包括使用者帳戶權限和寫入外部儲存空間的新權限。以下是預覽版中已變更的權限摘要:
-
-
-
-</p>
-
-<ul>
- <li>{@code GET_ACCOUNTS} (已過時)
- <p>
- GET_ACCOUNTS 權限現已過時。系統會忽略目標為 Android N 之應用程式所用的這個權限。
-
- </p>
- </li>
-
-</ul>
-
-
-
-<h2 id="accessibility">協助工具改良</h2>
-
-<p>
- Android N 包括的變更旨在為視力不佳或視力受損的使用者改進平台可用性。這些變更一般應不需要變更您應用程式的程式碼,然而您應該檢閱這些功能並使用您的應用程式測試它們,以評估對使用者體驗的潛在影響。
-
-
-
-
-</p>
-
-
-<h3 id="screen-zoom">螢幕縮放</h3>
-
-<p>
- Android N 可讓使用者設定<strong>顯示器大小</strong>以放大或縮小螢幕上的所有元素,進而改善視力不佳使用者的裝置協助工具。使用者無法將螢幕縮放到超過常見中型手機的最小螢幕寬度 <a href="http://developer.android.com/guide/topics/resources/providing-resources.html">sw320dp</a> (Nexus 4 的寬度)。
-
-
-
-
-</p>
-
-<div class="cols">
-
-<div class="col-6">
- <img src="{@docRoot}preview/images/screen-zoom-1.png" alt="" height="XXX" id="figure1" />
-</div>
-<div class="col-6">
- <img src="{@docRoot}preview/images/screen-zoom-2.png" alt="" height="XXX" id="figure1" />
-</div>
-
-</div> <!-- end cols -->
-<p class="img-caption">
- <strong>圖 3.</strong> 右邊的螢幕顯示將執行 Android N 系統映像的裝置顯示大小增加的效果。
-
-</p>
-
-
-<p>
- 當裝置密度變更時,系統會以下列方式通知執行中的應用程式:
-
-</p>
-
-<ul>
- <li>如果應用程式的目標為 API 層級 23 或較低版本,系統會自動終止其所有背景處理程序。這表示如果使用者切換離開應用程式,以開啟 <em>[設定]</em> 畫面並變更 <strong>[顯示器大小]</strong> 設定,系統會在記憶體極低的情況下,以相同方式終止應用程式。如果應用程式有任何前景處理程序,系統會通知那些處理程序有設定變更,如<a href="{@docRoot}guide/topics/resources/runtime-changes.html">處理執行階段變更</a>所述,有如裝置的螢幕方向有所變更。
-
-
-
-
-
-
-
- </li>
-
- <li>如果應用程式的目標為 Android N,其所有處理程序 (前景與背景) 都會收到設定變更的通知,如<a href="{@docRoot}guide/topics/resources/runtime-changes.html">處理執行階段變更</a>所述。
-
-
-
- </li>
-</ul>
-
-<p>
- 大部分應用程式只要遵循 Android 最佳做法,不需要進行任何變更就能支援此功能。需檢查的特定項目如下:
-
-</p>
-
-<ul>
- <li>在螢幕寬度為 <code><a href=
- "{@docRoot}guide/topics/resources/providing-resources.html">sw320dp</a></code> 的裝置上測試您的應用程式,確定它能適當執行。
-
- </li>
-
- <li>裝置設定變更時,就會更新任何與密度相關的快取資訊,例如快取的點陣圖或從網路載入的資源。當應用程式從暫停狀態繼續時,會檢查設定更新。
-
-
-
- <p class="note">
- <strong>注意:</strong>如果您快取與設定相關的資料,最好包括相關中繼資料,例如該資料的適當螢幕大小或像素密度。儲存此中繼資料可讓您決定在設定變更之後,是否需要重新整理快取的資料。
-
-
-
-
- </p>
- </li>
-
- <li>避免以不會隨螢幕密度調整的像素單位指定尺寸,請改為以<a href="{@docRoot}guide/practices/screens_support.html">密度獨立像素</a> (<code>dp</code>) 單位指定尺寸。
-
-
- </li>
-</ul>
-
-<h3 id="vision-settings">設定精靈中的視覺設定</h3>
-
-<p>
- Android N 包括在歡迎畫面的視覺化設定可讓使用者在新裝置上設定下列協助工具設定:<strong>放大手勢</strong>、<strong>字型大小</strong>、<strong>顯示器大小</strong>與 <strong>TalkBack</strong>。此變更增加和不同螢幕設定相關的錯誤能見度。您應該啟用這些設定來測試您的應用程式,以評估此功能的影響。您可以在 [設定] > [協助工具]<strong></strong> 下找到設定。
-
-
-
-
-
-
-
-</p>
-
-<h2 id="ndk">NDK 應用程式連結到平台程式庫</h2>
-
-<p>
- Android N 包括的命名空間變更可避免載入非公開 API。如果您使用 NDK,應該只能使用來自 Android 平台的公開 API。在下一版正式發行的 Android 使用非公開 API,會造成您的應用程式當機。
-
-
-
-</p>
-
-<p>
- 為了在發現使用非公開 API 時向您提出警示,當應用程式呼叫非公開 API 時,在 Android N 裝置上執行的應用程式會在 logcat 輸出產生一個錯誤,並以訊息同時顯示在裝置螢幕上,協助您更能察覺這種情況。您應該檢閱應用程式的程式碼,以移除使用的非公開平台 API,並使用預覽版裝置或模擬器全面測試您的應用程式。
-
-
-
-
-
-</p>
-
-<p>
- 如果您的應用程式依存於平台程式庫,請參閱 NDK 文件來取得以公開 API 同等項目取代常見私人 API 的一般修正。您可能也連結到平台程式庫,而不自知,特別是在應用程式使用的程式庫屬於該平台 (例如 <code>libpng</code>) 但不屬於 NDK 的時候。如為上述情況,請務必在您的 APK 包含您打算連結的所有 .so 檔案。
-
-
-
-
-
-</p>
-
-<p class="caution">
- <strong>注意:</strong>有些第三方程式庫會連結到非公開 API。如果您的應用程式使用此類程式庫,在下一版正式發行的 Android 上執行時就會當機。
-
-
-</p>
-
-<p>
- 應用程式不應依存於或使用 NDK 所未包括的原生程式庫,原因是在不同的 Android 發行版本之間會有變更或會被移除。從 OpenSSL 切換到 BoringSSL 便是此類變更的一例。此外,因為 NDK 所未包括的平台程式庫沒有相容性需求,而使不同裝置提供不同的相容性層級。如果您必須在舊型裝置上存取非 NDK 程式庫,請讓載入取決於 Android API 層級。
-
-
-
-
-
-
-</p>
-
-<p>
- 為協助您診斷這些類型的問題,以下是您在建置要用於 Android N 的應用程式時,會遇到的一些 Java 與 NDK 錯誤範例:
-
-</p>
-
-<p>Java 錯誤範例:</p>
-<pre class="no-pretty-print">
-java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so"
- is not accessible for the namespace "classloader-namespace"
-</pre>
-
-<p>NDK 錯誤範例:</p>
-<pre class="no-pretty-print">
-dlopen failed: cannot locate symbol "__system_property_get" referenced by ...
-</pre>
-
-
-<p>
- 以下是發生這些類型之錯誤的應用程式可用的一些一般修正:
-</p>
-
-<ul>
- <li>改用標準 JNI 函式,以取代使用來自 libandroid_runtime.so 的 getJavaVM 與 getJNIEnv。
-
-<pre class="no-pretty-print">
-AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h>
-AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or
-JavaVM::AttachCurrentThread from <jni.h>.
-</pre>
- </li>
-
- <li>改用公開替代項 {@code __system_property_get},以取代使用來自 {@code libcutils.so} 的 {@code property_get} 符號。如果要這樣做,請使用 {@code __system_property_get} 配合以下 include:
-
-
-<pre>
-#include <sys/system_properties.h>
-</pre>
- </li>
-
- <li>應該改用應用程式本機版,以取代使用來自 {@code libcrypto.so} 的 {@code SSL_ctrl} 符號。例如,您在 {@code .so} 檔案中靜態地連結 {@code libcyrpto.a},或在您的應用程式中從 BoringSSL 或 OpenSSL 動態地包括自己的 {@code libcrypto.so}。
-
-
-
- </li>
-</ul>
-
-<h2 id="afw">Android for Work</h2>
-<p>
- Android N 包含對目標為 Android for Work 的應用程式所做的變更,包括對憑證安裝、密碼重設、次要使用者管理與裝置識別碼存取的變更。如果您要建置要用於 Android for Work 環境的應用程式,應該檢閱這些變更並據以修改應用程式。
-
-
-
-
-</p>
-
-<ul>
- <li>您必須先安裝委派的憑證安裝程式後,DPC 才能加以設定。對於目標為 N SDK 的設定檔與裝置擁有者應用程式,您應該在裝置政策控制器 (DPC) 呼叫 <code>DevicePolicyManager.setCertInstallerPackage()</code> 之前,先安裝委派的憑證安裝程式。如果該安裝程式尚未安裝,系統會擲回 <code>IllegalArgumentException</code>。
-
-
-
-
-
-
- </li>
-
- <li>裝置系統管理員的重設密碼限制現在適用於設定檔擁有者。裝置系統管理員無法再使用 <code>DevicePolicyManager.resetPassword()</code> 來清除密碼或變更已設定的密碼。裝置系統管理員仍能設定密碼,但只限裝置還沒有密碼、PIN 或模式的情況下。
-
-
-
-
- </li>
-
- <li>即使已經設定限制,裝置擁有者與設定檔擁有者還是可以管理帳戶。裝置擁有者與設定檔擁有者在已採用 <code>DISALLOW_MODIFY_ACCOUNTS</code> 使用者限制的情況下,仍能呼叫帳戶管理 API。
-
-
- </li>
-
- <li>裝置擁有者能輕鬆管理次要使用者。當裝置以裝置擁有者模式執行時,會自動設定 <code>DISALLOW_ADD_USER</code> 限制。這樣可防止使用者建立不受管理的次要使用者。此外,<code>CreateUser()</code> 與 <code>createAndInitial()</code> 方法已經過時,改用 <code>DevicePolicyManager.createAndManageUser()</code> 取代。
-
-
-
-
-
- </li>
-
- <li>裝置擁有者可以存取裝置識別碼。裝置擁有者可以使用 <code>DevicePolicyManagewr.getWifiMacAddress()</code> 存取裝置的 Wi-Fi MAC 位址。如果未曾在該裝置上啟用 Wi-Fi,此方法會傳回 {@code null} 的值。
-
-
-
- </li>
-</ul>
-
-<p>
- 如需 Android N 中有關 Android for Work 變更的詳細資訊,請參閱 <a href="{@docRoot}preview/features/afw.html">Android for Work 更新</a>。
-
-</p>
-
-<h2 id="other">其他重點</h2>
-
-<ul>
-<li>在 Android N 上執行的應用程式如以較低的 API 層級為目標,當使用者變更顯示器大小,就會終止該應用程式的處理程序。應用程式必須要能適當處理這種情況。否則,當使用者要從最近使用記錄還原時就會當機。
-
-
-
-
-<p>
-您必須測試應用程式,確保不會發生這種行為。測試方法是透過 DDMS 手動終止應用程式,以造成相同的當機情況。
-
-
-
-</p>
-
-<p>
-目標為 N 與更新版本的應用程式不會在密度變更時自動終止;然而,它們仍會勉強地回應設定變更。
-
-</p>
-</li>
-
-<li>
-Android N 上的應用程式應該要適當處理設定變更,同時不應該在後續啟動時當機。您可以變更字型大小 ([設定]<strong></strong> > [顯示]<strong></strong> > [字型大小]<strong></strong>),然後從最近使用紀錄還原應用程式,以驗證應用程式行為。
-
-
-
-
-</li>
-</ul>
-
diff --git a/docs/html-intl/intl/zh-tw/preview/download.jd b/docs/html-intl/intl/zh-tw/preview/download.jd
deleted file mode 100644
index caa2a55..0000000
--- a/docs/html-intl/intl/zh-tw/preview/download.jd
+++ /dev/null
@@ -1,550 +0,0 @@
-page.title=在裝置上測試
-meta.tags="preview", "nexus","system image"
-page.tags="preview", "androidn"
-page.image=images/cards/card-n-downloads_2x.png
-
-@jd:body
-
-<div style="position:relative; min-height:600px">
-
- <div class="wrap" id="tos" style="position:absolute;display:none;width:inherit;">
-
- <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「與 Android 相容」表示符合下列條件的任何 Android 實作:(i) 符合「Android 相容性定義」文件,此文件位於 Android 相容性網站 (http://source.android.com/compatibility) 且不定期更新;以及 (ii) 順利通過「Android 相容性測試套件」(CTS) 的測試。
-
-1.4 "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. 來自 Google 的 Preview 授權
-
-3.1 在此「授權合約」之條款的約束下,Google 授予您此「Preview」的使用授權,此授權為有限、全球通用、買斷式、不可轉讓且不可轉授權,此「Preview」僅供您用來開發在 Android 相容實作上執行的應用程式。
-
-3.2 您不得使用此「Preview」來開發適用於其他平台 (包括與 Android 不相容的實作) 的應用程式或開發另一個 SDK。您當然可以使用它來開發適用於其他平台 (包括與 Android 不相容的實作) 的應用程式,惟不得將此「Preview」用於該用途。
-
-3.3 您同意 Google 或第三方對此「Preview」擁有一切法定權利及權益,包括存在於此「Preview」中的任何「智慧財產權」。「智慧財產權」係指專利法、著作權法、商業秘密法、商標法及任何和所有其他專利權下的任何及一切權利。Google 保留一切未明確授予您的權利。
-
-3.4 您不得將此「Preview」用於「授權協議」未明文許可的任何用途。除非適用的第三方授權所需,否則您不得:(a) 對此「Preview」或其任何部分進行複製 (備份用途除外)、修改、改編、轉散佈、反向組譯、還原工程、解編或製作衍生成品;或是 (b) 將此「Preview」的任何部分載入至行動電話或個人電腦以外的任何其他硬體裝置、將此「Preview」的任何部分與其他軟體結合,或散佈包含此「Preview」之任一部分的任何軟體或裝置。
-
-3.5 對開放原始碼軟體授權下所授權之「Preview」的使用、複製及散佈,完全受該開放原始碼軟體授權的條款規範,而不受「授權合約」規範。您同意遵守從這類開放原始碼軟體授權獲得的所有權利,並且避免採取任何可能終止、中止或侵害這類權利的行為。
-
-3.6 您同意 Google 可在不事先通知您的情況下變更其所提供之「Preview」的形式和本質,且此「Preview」的未來版本可與在此「Preview」的先前版本上開發的應用程式不相容。您同意 Google 通常可全權斟酌永久或暫時停止提供此「Preview」(或此「Preview」的任何功能) 給您或使用者,毋須事先通知。
-
-3.7「授權協議」中的所有條款皆未授予您任何使用 Google 之商業名稱、商標、服務標章、標誌、網域名稱或其他明確品牌特徵的權利。
-
-3.8 您同意不會移除、遮蔽或更改可能附加至或內含在此「Preview」中的任何專利權通知 (包括著作權和商標通知)。
-
-4. 您對「Preview」的使用
-
-4.1 Google 同意在「授權協議」下,任何條款皆未從您 (或您的授權人) 賦予 Google 對您使用此「Preview」開發之任何軟體應用程式的任何權利及權益,包括存在於這些應用程式中的任何智慧財產權。
-
-4.2 您同意只就 (a)「授權協議」和 (b) 相關管轄權中任何適用法律、規定或是普遍獲得接受之慣例或指導方針 (包括任何有關將資料或軟體輸出或輸入美國或其他相關國家/地區的法律) 所允許的用途使用此「Preview」及撰寫應用程式。
-
-4.3 您同意如果使用此「Preview」開發應用程式,您將保護使用者的隱私權和法定權利。如果使用者提供您使用者名稱、密碼或是其他登入資訊或個人資訊,您必須告知使用者這類資訊將提供給您的應用程式使用,並且必須為這些使用者提供法定充分的隱私權通知和保護。如果您的應用程式會儲存使用者所提供的個人或敏感資訊,它必須確保這些資訊安全無虞。如果使用者提供 Google 帳戶資訊給您,則只有在每個使用者已授權您存取其 Google 帳戶並僅限用於使用者所授權之用途的情況下,您的應用程式才能使用該資訊來存取使用者的 Google 帳戶。
-
-4.4 您同意不會使用此「Preview」從事任何不當活動,例如開發或散佈會以未經授權的方式干擾、妨礙、損害或存取 Google 或任何第三方之伺服器、網路或是其他財產或服務的應用程式。
-
-4.5 您同意對您透過 Android 裝置和 (或) Android 應用程式建立、傳輸或顯示的任何資料、內容或資源,以及上述行為造成的後果 (包括 Google 可能蒙受的任何損失或損害) 負起全責 (而 Google 對您或任何第三方就上述一切不需負任何責任)。
-
-4.6 您同意對違反在此「授權協議」、任何適用之第三方合約或《服務條款》或是任何適用之法律或規定下所必須遵守的義務,以及違反相關義務造成的後果 (包括 Google 或任何第三方可能蒙受的任何損失或損害) 負起全責 (而 Google 對您或任何第三方就上述一切不需負任何責任)。
-
-4.7「Preview」目前正在開發中,因此您的測試與意見反應對開發程序非常重要。使用「Preview」,您即認同某些功能仍處於開發階段,因此您不應期待「Preview」擁有穩定版本的完整功能。在官方 Android SDK 發行之後,此「Preview」不再受到支援時,您同意不使用此「Preview」公開散佈或隨附任何應用程式。
-
-5. 您的開發人員認證
-
-5.1 您同意負責保密 Google 可能核發給您或您自己選擇的任何開發人員認證,並且對在您開發人員認證名義下開發的所有應用程式負起全責。
-
-6. 隱私權和資訊
-
-6.1 為了持續更新及改進此「Preview」,Google 可能會從軟體收集某些使用狀況統計數據,包括但不限於軟體的唯一識別碼、相關 IP 位址、版本號碼,以及有關使用此「Preview」中的哪些工具和 (或) 服務及其使用方式的相關資訊。在收集這類資訊之前,此「Preview」會先通知您並徵求您的同意。如果您不同意,Google 將不會收集這類資訊。
-
-6.2 Google 會彙總並檢查收集到的資料,據以改善此「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.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 在法律允許的最大範圍內,您同意為 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 同意服從位於加州聖塔克拉拉 (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="#device-preview">設定硬體裝置</a>
- <ol>
- <li><a href="#ota">取得隔空傳輸更新</a></li>
- <li><a href="#flash">手動刷新裝置</a></li>
- <li><a href="#revertDevice">解除安裝</a></li>
- </ol>
- </li>
- <li><a href="#setupAVD">設定模擬器</a></li>
- </ol>
- </div>
-</div>
-
-<p>
- 如果要在新的平台上執行並測試您的應用程式,您需要設定 Android N 執行階段環境。您可以透過下列其中一種方式進行:
-
-</p>
-
-<ul>
- <li>在支援的硬體裝置上安裝 Android N,或</li>
- <li>設定執行 Android N 的 Android 模擬器</li>
-</ul>
-
-<p>
- 如果您想要有一個在新平台上為應用程式進行基本相容性測試的環境,您只需要最新的 APK 與一個硬體裝置或模擬器。執行基本測試並不需要更新整個開發環境。
-
-
-
-</p>
-
-<p>
- 如果您想要針對 Android N 修改應用程式或使用新的 Android N API,則需要設定已更新可支援 Android N 的開發環境。<a href="{@docRoot}preview/setup-sdk.html">設定以針對 Android N 開發</a>中提供詳細資訊。
-
-
-
-</p>
-
-
-<h2 id="device-preview">設定硬體裝置</h2>
-
-<p>
- 「N Developer Preview」為多種硬體裝置提供系統更新,您可以使用這些裝置 (從手機到平板電腦與電視) 來測試您的應用程式。
-
-</p>
-
-<p>
- 如果您使用支援的裝置,可以透過下列其中一個方式,將它更新到「Developer Preview」里程碑版本:
-
-</p>
-
-<ul>
- <li>透過 <a href="https://g.co/androidbeta">Android Beta 計劃</a><strong>在自動 OTA 系統更新中註冊裝置</strong>。註冊之後,您的裝置將會定期透過隔空傳輸 (OTA) 更新方式收到「N Developer Preview」中的所有里程碑版本。建議您使用這個方法,因為它讓您透過「N Developer Preview」的多個版本,順暢地從目前的環境轉移。
-
-
-
-</li>
- <li><strong>下載「Developer Preview」系統映像並更新裝置</strong>。當您手動更新時,不會自動為裝置提供 OTA 更新,但是您可以在「Android Beta 計劃」中註冊這些裝置來取得 OTA 更新。
-
- </li>
-</ul>
-
-<h3 id="ota">在自動 OTA 更新中註冊裝置</h3>
-
-<p>
- 如果您使用支援的裝置 (請參閱「下載」表中的清單),可在 <a href="https://g.co/androidbeta">Android Beta 計劃</a>中註冊該裝置,然後接收 Android 預覽版的隔空傳輸更新。這些更新會自動下載並更新您的裝置,就像官方系統更新一樣。
-
-
-
-
-</p>
-
-<p>
- 您可以隨時取消註冊裝置。裝置會透過 OTA 更新方式接收提供給該裝置的最新 Android 生產版本 (例如 Android 6.0 Marshmallow)。更新要求重設整個裝置,所以裝置上的使用者資料會被移除。取消註冊裝置前,請務必<strong>備份重要資料</strong>。
-
-
-
-
-</p>
-
-<p>
- 如需註冊裝置的詳細資訊,請參閱 <a href="https://g.co/androidbeta">Android Beta 計劃</a>網站。
-
-</p>
-
-<p class="note"><strong>注意:</strong>取消註冊要求重設整個裝置。請先備份重要資料。
-
-
-</p>
-
-<h3 id="flash">手動更新裝置</h3>
-
-<p>
- 您可以隨時下載最新的「Developer Preview」系統映像並手動刷新到您的裝置。請參閱下表,下載適用於您測試裝置的系統映像。如果您需要確切控制測試環境或需要經常重新安裝 (例如自動化測試),則手動更新裝置是實用的做法。
-
-
-
-
-</p>
-
-<!-- You can flash by ota or system image --><p>
- 在裝置上安裝系統映像會<strong>移除裝置中的所有資料</strong>,因此您應該先備份您的資料。
-
-</p>
-
-<p>
- 備份裝置資料並下載下面符合您裝置的系統映像之後,請依照 <a href="https://developers.google.com/android/nexus/images#instructions">developers.google.com/android</a> 的指示,將映像刷新到您的裝置。
-
-
-</p>
-
-<p>
- 手動刷新系統映像<strong>不會自動透過 OTA 更新方式收到</strong>較新的「Developer Preview」里程碑版本。請務必讓環境保持在最新狀態,使用每個「Developer Preview」里程碑的新系統映像進行刷新。
-
-
-
-</p>
-
-<p>
- 如果您決定手動更新裝置後要接收 OTA 更新,您唯一要做的事是在 <a href="https://g.co/androidbeta">Android Beta 計劃</a>中註冊裝置。您可以隨時註冊裝置,以隔空傳輸方式接收下一個「Preview」更新。
-
-
-
-</p>
-
-<table>
- <tr>
- <th scope="col">裝置</th>
- <th scope="col">下載 / 總和檢查碼</th>
- </tr>
-
- <tr id="bullhead">
- <td>Nexus 5X <br>"bullhead"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >bullhead-npd90g-factory-7a0ca1bc.tgz</a><br>
- MD5: e7a9a3061335c1e0c8be2588f13290af<br>
- SHA-1: 7a0ca1bcfa51bbefde34243603bc79c7dec214a1
- </td>
- </tr>
-
- <tr id="shamu">
- <td>Nexus 6 <br>"shamu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >shamu-npd90g-factory-f7a4e3a9.tgz</a><br>
- MD5: 2fb572ddcfca67bb1d741be97492a9ed<br>
- SHA-1: f7a4e3a96c797827492998e855c8f9efbfc8559a
- </td>
- </tr>
-
- <tr id="angler">
- <td>Nexus 6P <br>"angler"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >angler-npd90g-factory-cd9ac81e.tgz</a><br>
- MD5: 2370c30f3ef1d0684c1de5216a5d90fe<br>
- SHA-1: cd9ac81ec7f4a646ac6054eecbf2ea4c4b89b054
- </td>
- </tr>
-
- <tr id="volantis">
- <td>Nexus 9 <br>"volantis"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantis-npd90g-factory-41b55406.tgz</a><br>
- MD5: cefa78950141da2a7c75e887717e3c8f<br>
- SHA-1: 41b554060263a7ef16e4be8422cbd6caca26e00f
- </td>
- </tr>
-
- <tr id="volantisg">
- <td>Nexus 9G <br>"volantisg"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantisg-npd90g-factory-610492be.tgz</a><br>
- MD5: 2f36dc0d0fab02ab78be500677ec239f<br>
- SHA-1: 610492bedfc4127023040ecb2c89239a78a900ad
- </td>
- </tr>
-
- <tr id="fugu">
- <td>Nexus Player <br>"fugu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >fugu-npd90g-factory-0fe95694.tgz</a><br>
- MD5: f4cb48f919e4c29c631de21416c612e2<br>
- SHA-1: 0fe95694e7bc41e4c3ac0e4438cd77102a0aa8b4
- </td>
- </tr>
-
- <tr id="ryu">
- <td>Pixel C <br>"ryu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >ryu-npd90g-factory-f4da981c.tgz</a><br>
- MD5: d9f0e40b6c20d274831e8a7d285fd887<br>
- SHA-1: f4da981c70576133321e2858e52fe2c990e68a75
- </td>
- </tr>
-
- <tr id="seed">
- <td>General Mobile 4G (Android One) <br>"seed"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >seed_l8150-npd90g-factory-48f59c99.tgz</a><br>
- MD5: 0ed565c509594072822d71c65b48ec8e<br>
- SHA-1: 48f59c99ac43d1cd2f5656a283bb9868581663a8
- </td>
- </tr>
-
-</table>
-
-<h3 id="revertDevice">從裝置解除安裝 Preview</h3>
-
-<p>
- 如果您想要從裝置解除安裝預覽版,可以透過下列其中一方式執行:
- </p>
- <ul>
- <li><strong>取得出廠規格系統映像</strong>,然後手動刷新到裝置。
-
- <ul>
- <li>對於 <strong>Nexus 裝置與 Pixel C 裝置</strong>,請查看 <a href="http://developers.google.com/android/nexus/images">Nexus 裝置原廠映像檔</a>頁面進行下載。
-
- </li>
- <li>對於<strong>其他裝置</strong>,請直接聯絡裝置製造商。或者,如果是「Android Beta 計劃」中支援的裝置,則可以在這個計劃中註冊裝置,然後再取消註冊 (請參閱下面的資訊)。
-
-
-</li>
- </ul>
- </li>
- <li><strong>從「Android Beta 計劃」取消註冊裝置</strong>。如果在 <a href="https://g.co/androidbeta">Android Beta 計劃</a>中註冊裝置,則無論是什麼裝置,只需從這個計劃取消註冊即可。
-
-
- <p>
- 裝置會透過 OTA 更新方式接收提供給該裝置的最新 Android 生產版本 (例如 Android 6.0 Marshmallow)。更新要求重設整個裝置,所以裝置上的使用者資料會被移除。取消註冊裝置前,請務必<strong>備份重要資料</strong>。
-
-
-
-
- </p>
- </li>
-</ul>
-
-<p class="note"><strong>注意:</strong>在計劃結束前解除安裝「Developer Preview」系統映像需要重設整個裝置,而且會移除裝置上的所有使用者資料。
-
-
-
-</p>
-
-
-<h2 id="setupAVD">設定模擬器</h2>
-
-<p>如果要使用 Android 模擬器來執行 Android N Preview,您需要下載 Android N Preview SDK 並為模擬器建立一個虛擬裝置。
-
-</p>
-
-<p>首先,遵循下列方式下載 Android N Preview SDK (如果您在<a href="{@docRoot}preview/setup-sdk.html">設定以針對 Android N 開發</a>時已經取得該 SDK,則可以略過這個部分):
-
-
-
-<ol>
- <li>在 Android Studio 中,開啟 [Settings] 對話方塊 (在Windows/Linux 上是 [File] > [Settings]<strong></strong>,在 Mac 上是 [Android Studio] > [Preferences]<strong></strong>)。在左面板中,選取 [Appearance & Behavior] > [System Settings] > [Android SDK]<strong></strong>。
-
-
-
-
-
- <li>按一下 [SDK Platforms] 分頁,然後選取 [Android N Preview] 核取方塊。<strong></strong><strong></strong>
-</li>
-
- <li>按一下 [SDK Tools]<strong></strong> 分頁,然後選取 [Android SDK Build Tools]<strong></strong>、[Android SDK Platform-Tools]<strong></strong> 與 [Android SDK Tools]<strong></strong> 核取方塊。
-
-
-
- </li>
-
- <li>按一下 [OK]<strong></strong>,接受要安裝之任何套件的授權合約。
-
- </li>
-</ol>
-
-<p>您現在應該有 <strong>Android SDK Built-Tools 24.0 0 rc1</strong>、<strong>Platform-Tools 24.0.0 rc1</strong> 與 <strong>SDK Tools 25.0.9</strong>。如果您沒有將 SDK Tools 更新為 25.0.9,就無法執行 Android N 的 x86_64 系統映像。
-
-
-</p>
-
-
-<p>現在使用 Android N 系統映像建立一個虛擬裝置:</p>
-
-<ol>
- <li>選取 [Tools] > [Android] > [AVD Manager]<strong></strong> 以開啟 AVD Manager。
-</li>
- <li>按一下 [Create Virtual Device]<strong></strong>。</li>
- <li>選取裝置 (例如 Nexus 5X、Nexus 6P、Nexus 9 或 Android TV),然後按一下 [Next]<strong></strong>。
-</li>
- <li>選取 [N]<strong></strong> 系統映像 (含 <strong>x86</strong> ABI),然後按一下 [Next]<strong></strong> (Android N Preview 的 Android 模擬器目前只支援 x86 系統映像)。
-
-
-
- <li>完成其餘的 AVD 設定,然後按一下 [Finish]<strong></strong>。
-</li>
-</ol>
-
-<p>您現在可以使用 Android N Preview AVD 啟動 Android 模擬器。</p>
-
-<p>
-為了在 Android 模擬器中獲得最佳體驗,請安裝 Android Studio 2.1 Preview,它支援 <a href="http://tools.android.com/tech-docs/emulator">Android Emulator 2.0 Beta</a>,效能比 Android Studio 1.5 中的模擬器快。
-
-
-</p>
-
-<p class="note"><strong>注意:</strong>如果您目前使用 Android Studio 2.0 Beta,它已知會出現阻止您使用 N Preview 系統映像建立 AVD 的問題,所以您目前需要使用 Android Studio 2.1 預覽版來建立 AVD。
-
-
-
-</p>
-
-<p>如需建立虛擬裝置的詳細資訊,請參閱<a href="{@docRoot}tools/devices/index.html">管理虛擬裝置</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/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/direct-boot.jd b/docs/html-intl/intl/zh-tw/preview/features/direct-boot.jd
deleted file mode 100644
index 7e4ea73..0000000
--- a/docs/html-intl/intl/zh-tw/preview/features/direct-boot.jd
+++ /dev/null
@@ -1,181 +0,0 @@
-page.title=直接開機
-page.keywords=preview,sdk,direct boot
-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="#run">要求直接開機期間的執行權限</a></li>
- <li><a href="#access">存取裝置加密的儲存空間</a></li>
- <li><a href="#notification">接收使用者解鎖的通知</a></li>
- <li><a href="#migrating">遷移現有資料</a></li>
- <li><a href="#testing">測試您的加密感知應用程式</a></li>
- </ol>
-</div>
-</div>
-
-<p>Android N 會在一個安全的 <i>直接開機</i> 模式下執行,這是裝置已經開啟電源但使用者尚未解鎖裝置的期間。
-
-為了支援這種方式,系統為資料提供兩個儲存位置:</p>
-
-<ul>
-<li><i>認證加密的儲存空間</i>:這是預設的儲存位置,只有在使用者解鎖裝置之後才能使用。
-</li>
-<li><i>裝置加密的儲存空間</i>:這是「直接開機」模式期間與使用者解鎖裝置之後都可以使用的儲存位置。
-</li>
-</ul>
-
-<p>根據預設,應用程式不會在「直接開機」模式下執行。如果您的應用程式需要在「直接開機」模式期間執行動作,您可以註冊應該在此模式下執行的應用程式元件。
-
-需要在「直接開機」模式下執行的一些常見應用程式使用案例包括:
-</p>
-
-<ul>
-<li>已排程通知的應用程式,例如鬧鐘應用程式。
-</li>
-<li>提供重要使用者通知的應用程式,例如簡訊應用程式。</li>
-<li>提供協助工具服務的應用程式,例如 Talkback。</li>
-</ul>
-
-<p>如果您的應用程式需要在「直接開機」模式期間存取資料,請使用裝置加密的儲存空間。
-裝置加密的儲存空間包含以金鑰加密的資料,這個金錀只有在裝置執行成功的驗證開機之後才能使用。
-
-</p>
-
-<p>對於應該使用與使用者認證關聯之金鑰 (例如 PIN 或密碼) 加密的資料,請使用認證加密的儲存空間。認證加密的儲存空間只有在使用者成功解鎖裝置之後到使用者再次重新啟動裝置之間的時間可以使用。
-
-
-如果使用者在解鎖裝置之後啟用鎖定螢幕,並不會鎖定認證加密的儲存空間。
-
-</p>
-
-<h2 id="run">要求直接開機期間的執行權限</h2>
-
-<p>應用程式必須先向系統註冊其元件,這些元件才能在「直接開機」模式期間執行或存取裝置加密的儲存空間。
-
-向系統註冊的應用程式會將元件標記為
-<i>加密感知</i>。如果要將元件標記為加密感知,請將宣示說明中的
-<code>android:encryptionAware</code> 屬性設定為 true。<p>
-
-<p>當裝置重新啟動時,加密感知元件可以註冊為從系統接收
-<code>LOCKED_BOOT_COMPLETED</code> 廣播訊息。
-這個時候可以使用裝置加密的儲存空間,而且您的元件可以執行在「直接開機」模式期間需要執行的工作,例如觸發排程的鬧鐘。
-
-</p>
-
-<p>下列程式碼片段是一個範例,示範如何在應用程式宣示說明中將
-{@link android.content.BroadcastReceiver} 註冊為加密感知以及如何為
-<code>LOCKED_BOOT_COMPLETED</code> 新增意圖篩選器:</p>
-
-<pre>
-<receiever
- android:encryptionAware="true" >
- ...
- <intent-filter>
- <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
- </intent-filter>
-</receiver>
-</pre>
-
-<p>一旦使用者將裝置解鎖,所有元件都可存取裝置加密的儲存空間與認證加密的儲存空間。
-</p>
-
-<h2 id="access">存取裝置加密的儲存空間</h2>
-
-<p>如果要存取裝置加密的儲存空間,請透過呼叫
-<code>Context.createDeviceEncryptedStorageContext()</code> 以建立第二個
-{@link android.content.Context} 實例。使用此內容建立的所有儲存 API 呼叫都可以存取裝置加密的儲存空間。
-下列範例會存取裝置加密的儲存空間並開啟現有的應用程式資料檔案:
-
-</p>
-
-<pre>
-Context directBootContext = Context.createDeviceEncryptedStorageContext();
-// Access appDataFilename that lives in device encrypted storage
-FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
-// Use inStream to read content...
-</pre>
-
-<p>只針對必須在「直接開機」模式期間存取的資訊使用裝置加密的儲存空間。不要將裝置加密的儲存空間做為一般用途的加密存放區。對於私密使用者資訊或「直接開機」模式期間不需要的加密資料,請使用認證加密的儲存空間。
-
-
-
-</p>
-
-<h2 id="notification">接收使用者解鎖的通知</h2>
-
-<p>裝置重新啟動之後,一旦使用者將裝置解鎖,您的應用程式就可以切換為存取認證加密的儲存空間,並使用倚賴使用者認證的一般系統服務。
-
-</p>
-
-<p>如果要接收裝置重新開機後使用者解鎖裝置的通知,請從執行中元件註冊 {@link android.content.BroadcastReceiver} 以接聽 <code>ACTION_USER_UNLOCKED</code> 訊息。
-
-或者,您可以接收現有的 {@link android.content.Intent#ACTION_BOOT_COMPLETED
-ACTION_BOOT_COMPLETED} 訊息,它現在可以指出裝置已開機且使用者已解鎖裝置。
-
-</p>
-
-<p>您可以透過呼叫
-<code>UserManager.isUserUnlocked()</code>,以直接查詢使用者是否已將裝置解鎖。</p>
-
-<h2 id="migrating">遷移現有資料</h2>
-
-<p>如果使用者更新其裝置來使用「直接開機」模式,您可能有現有的資料必須遷移到裝置加密的儲存空間。
-使用
-<code>Context.migrateSharedPreferencesFrom()</code> 與
-<code>Context.migrateDatabaseFrom()</code>,在認證加密的儲存空間與裝置加密的儲存空間之間遷移偏好設定與資料庫資料。
-</p>
-
-<p>決定要將哪些資料從認證加密的儲存空間遷移到裝置加密的儲存空間時,請使用最佳判斷。
-您不應該將私密使用者資訊 (例如密碼或授權權杖) 遷移到裝置加密的儲存空間。
-
-在某些情況下,您需要在這兩種加密的存放區中管理不同的資料集。
-</p>
-
-<h2 id="testing">測試您的加密感知應用程式</h2>
-
-<p>使用新的「直接開機」模式測試您的加密感知應用程式。您可以透過兩種方式啟用「直接開機」。
-</p>
-
-<p class="caution"><strong>注意:</strong>啟用「直接開機」會清除裝置上的所有使用者資料。
-</p>
-
-<p>在已安裝 Android N 的支援裝置上,執行下列其中一個動作來啟用「直接開機」:
-</p>
-
-<ul>
-<li>在裝置上,請移至 [設定] > [關於手機]<b></b>,然後點選 [Android 版本]<b></b> 7 次以啟用 [開發人員選項]<b></b> (如果尚未啟用)。
-
-當開發人員選項畫面可用時,請移至 [設定] > [開發人員選項]<b></b>,然後選取 [轉換到檔案加密]<b></b>。
-
-</li>
-<li>使用下列 adb shell 命令來啟用「直接開機」模式:
-<pre class="no-pretty-print">
-$ adb reboot-bootloader
-$ fastboot --wipe-and-use-fbe
-</pre>
-</li>
-</ul>
-
-<p>另外也提供模擬的「直接開機」模式,如果您需要在測試裝置上切換模式時即可利用。
-模擬模式應該只在開發期間使用,而且它可能造成資料遺失。
-如果要啟用模擬的「直接開機」模式,請在裝置上設定鎖定模式;設定鎖定模式時如果系統提示您設定安全啟動畫面,請選擇 [No thanks],然後使用下列 adb shell 命令:
-
-
-</p>
-
-<pre class="no-pretty-print">
-$ adb shell sm set-emulate-fbe true
-</pre>
-
-<p>如果要關閉模擬的「直接開機」模式,請使用下列命令:</p>
-
-<pre class="no-pretty-print">
-$ adb shell sm set-emulate-fbe false
-</pre>
-
-<p>使用這些命令會使得裝置重新開機。</p>
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/multi-window.jd b/docs/html-intl/intl/zh-tw/preview/features/multi-window.jd
deleted file mode 100644
index 5ea247b..0000000
--- a/docs/html-intl/intl/zh-tw/preview/features/multi-window.jd
+++ /dev/null
@@ -1,582 +0,0 @@
-page.title=多視窗支援
-page.metaDescription=Android N 新推出支援一次顯示多個應用程式。
-page.keywords="multi-window", "android N", "split screen", "free-form"
-
-@jd:body
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>此文件內容</h2>
- <ol>
- <li><a href="#overview">總覽</a></li>
- <li><a href="#lifecycle">多視窗生命週期</a></li>
- <li><a href="#configuring">針對多視窗模式設定應用程式
-</a></li>
- <li><a href="#running">在多視窗模式中執行應用程式</a></li>
- <li><a href="#testing">測試應用程式的多視窗支援</a></li>
- </ol>
- <h2>另請參閱</h2>
- <ol>
- <li><a class="external-link" href="https://github.com/googlesamples/android-MultiWindowPlayground">多視窗 Playground 範例應用程式
-</a></li>
- </ol>
- </div>
-</div>
-
-<p>
- Android N 新增一次顯示多個應用程式的支援。
-在手持式裝置上,兩個應用程式可以在「分割畫面」模式中並排或上下排列。
-<em></em>在電視裝置上,應用程式能使用「子母畫面」模式,在使用者與另一個應用程式互動時持續播放影片。
-<em></em>
-
-</p>
-
-<p>
- 如使用 N Preview SDK 建置應用程式,您可以設定應用程式處理多視窗顯示的方式。
-例如,您可以指定活動的最小可允許尺寸。
-您也可以停用應用程式的多視窗顯示,確保系統只會以全螢幕模式顯示您的應用程式。
-
-
-</p>
-
-<h2 id="overview">總覽</h2>
-
-<p>
- Android N 允許多個應用程式同時分享螢幕。例如,使用者可以分割畫面,在左邊檢視網頁,同時在右邊撰寫電子郵件。
-
-使用者體驗依裝置而異:
-
-</p>
-
-<ul>
- <li>執行 Android N 的手持式裝置可提供分割畫面模式。
-處於此模式時,系統會以並排或上下排列的方式顯示兩個應用程式,將螢幕填滿。
-使用者可以拖曳將畫面一分為二的分隔線,加大一邊的應用程式,就會縮小另一邊。
-
- </li>
-
- <li>在執行 Android N 的 Nexus Player 上,當使用者瀏覽其他應用程式或與其互動時,應用程式會將本身放入<a href="picture-in-picture.html">子母畫面模式</a>以持續顯示內容。
-
-
-
- </li>
-
- <li>較大型裝置的製造商可選擇啟用自由形式模式,讓使用者自由調整每個活動的大小。
-若製造商啟用此功能,裝置除了分割畫面模式外,還會提供自由形式模式。
-
-
- </li>
-</ul>
-
-<img src="{@docRoot}preview/images/mw-splitscreen.png" alt="" width="650" srcset="{@docRoot}preview/images/mw-splitscreen.png 1x,
- {@docRoot}preview/images/mw-splitscreen_2x.png 2x," id="img-split-screen" />
-<p class="img-caption">
- <strong>圖 1.</strong> 在分割畫面模式中並排執行的兩個應用程式。
-</p>
-
-<p>
- 使用者可以透過下列方式來切換多視窗模式:
-</p>
-
-<ul>
- <li>如果使用者開啟<a href="{@docRoot}guide/components/recents.html">總覽畫面</a>並長按活動標題,就可以將該標題拖曳到畫面醒目提示的部分,將活動放入多視窗模式。
-
-
-
- </li>
-
- <li>如果使用者長按「總覽」按鈕,裝置會將目前的活動放入多視窗模式,並開啟總覽畫面,讓使用者選擇要分享螢幕的另一個活動。
-
-
- </li>
-</ul>
-
-<p>
- 使用者可以在活動分享螢幕時,將一個活動中的資料<a href="{@docRoot}guide/topics/ui/drag-drop.html">拖放</a>到另一個活動。
-
-(之前,使用者只能在單一活動內拖放資料)。
-
-</p>
-
-<h2 id="lifecycle">多視窗生命週期</h2>
-
-<p>
- 多視窗模式不會變更<a href="{@docRoot}training/basics/activity-lifecycle/index.html">活動生命週期</a>。
-
-</p>
-
-<p>
- 在多視窗模式中,特定時間只有最近與使用者互動的活動才會處於使用中。
-這會視為「最上層」活動。<em></em>
- 即使能看到所有其他活動,但也處於暫停狀態。
- 然而,相較於看不到的活動,系統會給予這類暫停但可看見的活動較高的優先順序。
-若使用者改與其中一個暫停的活動互動,該活動就會恢復,使先前的最上層活動變成暫停。
-
-
-</p>
-
-<p class="note">
- <strong>注意:</strong>在多視窗模式中,使用者仍能見到處於暫停狀態的應用程式。
-即使處於暫停,應用程式仍需要進行其活動。
-例如,處於暫停模式但仍可以看見的影片播放應用程式,應會持續顯示其影片。
-因此,建議您在播放影片的活動 {@link android.app.Activity#onPause onPause()} 處理常式中,「不要」暫停影片。
-<em></em>
-
- 應該改為在 {@link android.app.Activity#onStop
- onStop()}, and resume playback in {@link android.app.Activity#onStart
- onStart()} 中暫停影片。
-</p>
-
-<p>
- 當使用者將應用程式放入多視窗模式時,系統會通知活動發生設定變更,如<a href="{@docRoot}guide/topics/resources/runtime-changes.html">處理執行階段變更</a>所指定。
-
-基本上,此變更的活動生命週期和系統通知應用程式,裝置從垂直模式切換為水平模式時的生命週期相當,差別在於裝置尺寸會改變,而不只是切換。
-
-
-如<a href="{@docRoot}guide/topics/resources/runtime-changes.html">處理執行階段變更</a>中所述,您的活動能自行處理設定變更,或會允許系統終結活動並以新的尺寸重新建立。
-
-
-
-</p>
-
-<p>
- 如果使用者調整視窗大小並加大長或寬的尺寸,系統會根據使用者動作來調整活動大小,並視需要發出<a href="{@docRoot}guide/topics/resources/runtime-changes.html">執行階段變更</a>。
-
-若應用程式在新公開的區域中繪製發生延遲,系統會暫時使用 {@link
- android.R.attr#windowBackground windowBackground} 所指定的色彩或預設的
- <code>windowBackgroundFallback</code> 樣式屬性,填滿那些區域。
-
-</p>
-
-<h2 id="configuring">針對多視窗模式設定應用程式</h2>
-
-<p>
- 您的應用程式若以 Android N 為目標,您可以設定應用程式的活動是否支援多視窗顯示以及支援的方式。
-您可以在宣示說明中設定屬性,同時控制大小與版面配置。
-
- 根活動的屬性設定會套用到它工作堆疊內的所有活動。
-
-</p>
-
-<p class="note">
- <strong>注意:</strong>如果您使用 Android N 以下的 SDK 版本建置多螢幕方向應用程式,而且使用者會在多視窗模式中使用該應用程式,系統會強制調整應用程式大小。
-
-系統會顯示對話方塊向使用者警告應用程式行為異常。
-系統「不會」調整螢幕方向固定的應用程式大小,如使用者嘗試在多視窗模式下開啟螢幕方向固定的應用程式,應用程式會佔滿整個螢幕。
-<em></em>
-
-
-</p>
-
-<h4 id="resizeableActivity">android:resizeableActivity</h4>
-<p>
- 在宣示說明的 <code><activity></code> 或
- <code><application></code> 節點中,設定此屬性以啟用或停用多視窗顯示:
-
-</p>
-
-<pre>
-android:resizeableActivity=["true" | "false"]
-</pre>
-
-<p>
- 如將此屬性設定為 true,就能以分割畫面和自由形式模式來啟動活動。
-如將屬性設定為 false,活動會不支援多視窗模式。
-如果此值為 false,而使用者嘗試以多視窗模式啟動活動,該活動會佔滿整個螢幕。
-
-
-</p>
-
-<p>
- 您的應用程式如以 Android N 為目標,但您並未指定此屬性的值,屬性的預設值為 true。
-
-</p>
-
-<h4 id="supportsPictureInPicture">android:supportsPictureInPicture</h4>
-
-<p>
- 在宣示說明的 <code><activity></code> 節點中,設定此屬性以指出活動是否支援子母畫面顯示:
-如果 <code>android:resizeableActivity</code> 為 false,則會忽略此屬性。
-
-</p>
-
-<pre>
-android:supportsPictureInPicture=["true" | "false"]
-</pre>
-
-<h3 id="layout">版面配置屬性</h3>
-
-<p>
- 使用 Android N,<code><layout></code> 宣示說明元素支援的數個屬性會影響多視窗模式中的活動行為。
-
-
-</p>
-
-<dl>
- <dt>
- <code>android:defaultWidth</code>
- </dt>
-
- <dd>
- 以自由形式模式啟動活動時的預設寬度。
- </dd>
-
- <dt>
- <code>android:defaultHeight</code>
- </dt>
-
- <dd>
- 以自由形式模式啟動活動時的預設高度。
- </dd>
-
- <dt>
- <code>android:gravity</code>
- </dt>
-
- <dd>
- 以自由形式模式啟動活動時的初始放置位置。請參閱
- {@link android.view.Gravity} 參考資料以查看適當的值。
- </dd>
-
- <dt>
- <code>android:minimalSize</code>
- </dt>
-
- <dd>
- 在分割畫面與自由形式模式中,活動的最小高度與最小寬度。
-如果使用者在分割畫面模式中移動分隔,而使活動小於指定的最小值,系統會將活動裁剪為使用者要求的大小。
-
-
- </dd>
-</dl>
-
-<p>
- 例如,在自由形式模式中顯示活動時,下列程式碼顯示如何指定活動的預設大小與位置以及它的最小大小:
-
-
-</p>
-
-<pre>
-<activity android:name=".MyActivity">
- <layout android:defaultHeight="500dp"
- android:defaultWidth="600dp"
- android:gravity="top|end"
- android:minimalSize="450dp" />
-</activity>
-</pre>
-
-<h2 id="running">在多視窗模式中執行應用程式</h2>
-
-<p>
- Android N 提供的新功能支援在多視窗模式中執行應用程式。
-
-</p>
-
-<h3 id="disabled-features">可在多視窗模式中停用的功能</h3>
-
-<p>
- 當裝置處於多視窗模式時,有些功能無法用於會與其他活動或應用程式分享裝置螢幕的活動,因此會加以停用或忽略。
-
-這類功能包括:
-
-<ul>
- <li>有些<a href="{@docRoot}training/system-ui/index.html">系統 UI</a>
- 自訂選項會停用。例如,不以全螢幕模式執行就無法隱藏狀態列的應用程式。
-
- </li>
-
- <li>系統會忽略對 <code><a href=
- "{@docRoot}guide/topics/manifest/activity-element.html#screen"
- >android:screenOrientation</a></code> 屬性的變更。
- </li>
-</ul>
-
-<h3 id="change-notification">多視窗變更通知與查詢</h3>
-
-<p>
- 已將下列可支援多視窗顯示的新方法新增至 {@link android.app.Activity}
- 類別。如需每個方法的詳細資訊,請參閱
- <a href="{@docRoot}preview/setup-sdk.html#docs-dl">N Preview SDK 參考資料</a>。
-</p>
-
-<dl>
- <dt>
- <code>Activity.inMultiWindow()</code>
- </dt>
-
- <dd>
- 呼叫即可知道活動是否處於多視窗模式。
- </dd>
-
- <dt>
- <code>Activity.inPictureInPicture()</code>
- </dt>
-
- <dd>
- 呼叫即可知道活動是否處於子母畫面模式。
-
- <p class="note">
- <strong>注意:</strong>子母畫面模式為多視窗模式的特殊情況。
-如果 <code>myActivity.inPictureInPicture()</code>
- 傳回 true,那麼 <code>myActivity.inMultiWindow()</code> 也會傳回 true。
-
- </p>
- </dd>
-
- <dt>
- <code>Activity.onMultiWindowChanged()</code>
- </dt>
-
- <dd>
- 每當活動進入或離開多視窗模式,系統就會呼叫這個方法。
-如果活動正在進入多視窗模式,系統會將 true 的值傳遞給方法,若活動正要離開多視窗模式,則會傳遞 false。
-
-
- </dd>
-
- <dt>
- <code>Activity.onPictureInPictureChanged()</code>
- </dt>
-
- <dd>
- 每當活動進入或離開子母畫面模式,系統就會呼叫這個方法。
-如果活動正在進入子母畫面模式,系統會將 true 的值傳遞給方法,若活動正要離開子母畫面模式,則會傳遞 false。
-
-
- </dd>
-</dl>
-
-<p>
- 上述的每一個方法也都有 {@link android.app.Fragment} 版本,例如
- <code>Fragment.inMultiWindow()</code>。
-</p>
-
-<h3 id="entering-pip">進入子母畫面模式</h3>
-
-<p>
- 呼叫新方法
- <code>Activity.enterPictureInPicture()</code>,即可將活動放入子母畫面模式。如果裝置不支援子母畫面模式,這個方法就沒有作用。
-如需詳細資訊,請參閱<a href="picture-in-picture.html">子母畫面</a>文件。
-
-</p>
-
-<h3 id="launch">在多視窗模式中啟動新活動</h3>
-
-<p>
- 當您啟動新活動,可以提示系統應儘可能在目前活動的旁邊顯示新的活動。
-如要這樣做,請使用旗標
- <code>Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT</code>。
-傳遞此旗標會要求下列行為:
-
-</p>
-
-<ul>
- <li>如果裝置處於分割畫面模式中,系統會嘗試在啟動新活動的活動旁邊建立該活動,讓兩個活動分享螢幕。
-
-系統不保證一定能這樣做,但會儘可能讓活動相鄰。
-
- </li>
-
- <li>如果裝置未處於分割畫面模式,這個旗標就沒有作用。
- </li>
-</ul>
-
-<p>
- 如果裝置處於自由形式模式,而您正在啟動新的活動,您可以呼叫
- <code>ActivityOptions.setLaunchBounds()</code>,指定新活動的尺寸與畫面位置。
-如果裝置未處於多視窗模式,這個方法就沒有作用。
-
-</p>
-
-<p class="note">
- <strong>注意:</strong>如果您在工作堆疊內啟動活動,該活動就會取代畫面上的活動,繼承它的所有多視窗屬性。
-
-如果您想要在多視窗模式中,以個別的視窗啟動活動,您必須在新的工作堆疊中啟動該活動。
-
-</p>
-
-<h3 id="dnd">支援拖放功能</h3>
-
-<p>
- 使用者可以在兩個活動分享螢幕時,將一個活動中的資料<a href="{@docRoot}guide/topics/ui/drag-drop.html">拖放</a>到另一個活動。
-
-(之前,使用者只能在單一活動內拖放資料)。
-因此,若您的應用程式目前不支援拖曳功能,建議您將該功能新增至應用程式。
-
-</p>
-
-<p>
- N Preview SDK 擴充 <a href="{@docRoot}reference/android/view/package-summary.html"><code>android.view</code></a>
- 套件,支援跨應用程式的拖放功能。如需下列類別與方法的詳細資訊,請參閱 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">N Preview SDK 參考資料</a>。
-
-
-</p>
-
-<dl>
- <dt>
- <code>android.view.DropPermissions</code>
- </dt>
-
- <dd>
- 語彙基元物件負責指定權限,授予給放下接收者應用程式。
-
- </dd>
-
- <dt>
- <code>View.startDragAndDrop()</code>
- </dt>
-
- <dd>
- {@link android.view.View#startDrag View.startDrag()} 的新別名。傳遞新旗標
- <code>View.DRAG_FLAG_GLOBAL</code>,就可以啟用跨活動的拖放功能。
-如果您需要將 URI 權限授予接收者活動,請視需要傳遞新旗標
- <code>View.DRAG_FLAG_GLOBAL_URI_READ</code> 或
- <code>View.DRAG_FLAG_GLOBAL_URI_WRITE</code>。
-
- </dd>
-
- <dt>
- <code>View.cancelDragAndDrop()</code>
- </dt>
-
- <dd>
- 取消目前進行中的拖曳操作。只能由產生拖曳操作的應用程式呼叫。
-
- </dd>
-
- <dt>
- <code>View.updateDragShadow()</code>
- </dt>
-
- <dd>
- 取代目前所進行拖曳操作的拖曳陰影。只能由產生拖曳操作的應用程式呼叫。
-
- </dd>
-
- <dt>
- <code>Activity.requestDropPermissions()</code>
- </dt>
-
- <dd>
- 針對利用 {@link android.view.DragEvent} 中包含的 {@link
- android.content.ClipData} 傳遞的內容 URI,要求權限。
- </dd>
-</dl>
-
-<h2 id="testing">測試應用程式的多視窗支援</h2>
-
-<p>
- 不論您是否針對 Android N 更新您的應用程式,都應該確認應用程式在多視窗模式中的行為為何,以免使用者試圖在執行 Android N 的裝置上以多視窗模式啟動應用程式。
-
-
-</p>
-
-<h3 id="configuring">設定測試裝置</h3>
-
-<p>
- 如果您在裝置上安裝 Android N,即自動支援分割畫面模式。
-
-</p>
-
-<h3 id="test-non-n">應用程式若非以 N Preview SDK 建置</h3>
-
-<p>
- 若您並非以 N Preview SDK 建置應用程式,而且使用者會試圖在多視窗模式中使用該應用程式,除非應用程式宣告螢幕方向固定,否則系統會強制調整應用程式大小。
-
-
-</p>
-
-<p>
- 若您的應用程式並未宣告螢幕方向固定,您應該在執行 Android N 的裝置上啟動應用程式,並嘗試將應用程式放入分割畫面模式。
-
-確認強制調整應用程式大小時的使用者體驗可以接受。
-
-</p>
-
-<p>
- 若您的應用程式宣告螢幕方向固定,您應該嘗試將應用程式放入多視窗模式。
-確認您這樣做時,應用程式依然會處於全螢幕模式。
-
-</p>
-
-<h3 id="test-mw">若您支援多視窗模式</h3>
-
-<p>
- 如果您以 N Preview SDK 建置應用程式且未停用多視窗支援,請在分割畫面與自由形式模式下,確認下列行為:
-
-
-</p>
-
-<ul>
- <li>以全螢幕模式啟動應用程式,然後長按 [總覽] 按鈕以切換到多視窗模式。
-確認應用程式可以正確切換。
- </li>
-
- <li>以多視窗模式直接啟動應用程式,並確認應用程式可以正確啟動。
-您可以按下 [總覽] 按鈕,然後長按應用程式的標題欄,再拖曳到螢幕上其中一個醒目提示的區域,即可以多視窗模式啟動應用程式。
-
-
- </li>
-
- <li>在分割畫面模式中拖曳分隔線調整應用程式的大小。
- 確認可以調整應用程式大小而不會當機,同時可以看見必要的 UI 元素。
-
- </li>
-
- <li>如果您已指定應用程式的最小尺寸,請嘗試將應用程式的大小調整到低於指定的尺寸。
-確認您無法將應用程式的大小調整到小於指定的最小值。
-
- </li>
-
- <li>經由所有測試確認應用程式的效能可以接受。例如,確認在調整應用程式大小之後,不會遲遲不更新 UI。
-
-
- </li>
-</ul>
-
-<h4 id="test-checklist">測試檢查清單</h4>
-
-<p>
- 若要確認應用程式在多視窗模式中的效能,請嘗試下列操作。
-除非另外註明,否則您應該在分割畫面與多視窗模式中嘗試這些操作。
-
-</p>
-
-<ul>
- <li>進入和離開多視窗模式。
- </li>
-
- <li>從您的應用程式切換到另一個應用程式,並確認當應用程式不在使用中但可看見時,能正常運作。
-例如,如果是播放影片的應用程式,請確認當使用者與另一個應用程式互動時,影片會持續播放。
-
-
- </li>
-
- <li>在分割畫面模式中,嘗試移動分隔列以加大和縮小應用程式。
-在並排與上下排列設定都要嘗試這些操作。
-確認應用程式不會當機,可以看見基本功能,而且不會花太長的時間完成調整大小操作。
-
-
- </li>
-
- <li>快速連續執行數次調整大小操作。確認應用程式不會因此當機或流失記憶體。
-如需檢查應用程式記憶體使用量的詳細資訊,請參閱<a href="{@docRoot}tools/debugging/debugging-memory.html">調查 RAM 使用狀況</a>。
-
-
- </li>
-
- <li>以數個不同的視窗設定正常使用您的應用程式,並確認應用程式都能正常運作。
-確認文字可以閱讀,而且 UI 元素不會太小而無法與之互動。
-
- </li>
-</ul>
-
-<h3 id="test-disabled-mw">若已停用多視窗支援</h3>
-
-<p>
- 若您已設定
- <code>android:resizableActivity="false"</code> 來停用多視窗支援,您應該在執行 Android N 的裝置上啟動應用程式,並嘗試將應用程式放入自由形式與分割畫面模式。
-
-確認您這樣做時,應用程式依然會處於全螢幕模式。
-
-</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-intl/intl/zh-tw/preview/features/picture-in-picture.jd b/docs/html-intl/intl/zh-tw/preview/features/picture-in-picture.jd
deleted file mode 100644
index 6b8a178..0000000
--- a/docs/html-intl/intl/zh-tw/preview/features/picture-in-picture.jd
+++ /dev/null
@@ -1,186 +0,0 @@
-page.title=子母畫面
-page.keywords=preview,sdk,PIP,Picture-in-picture
-page.tags=androidn
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>此文件內容</h2>
-<ol>
- <li><a href="#declaring">宣告您的活動支援子母畫面</a>
-</li>
- <li><a href="#pip_button">將您的活動切換到子母畫面</a>
-</li>
- <li><a href="#handling_ui">處理子母畫面模式中的 UI</a>
-</li>
- <li><a href="#continuing_playback">在子母畫面模式中繼續播放影片</a>
-</li>
- <li><a href="#best">最佳做法</a></li>
-</ol>
-
-<h2>另請參閱</h2>
-<ol>
- <li><a href="{@docRoot}preview/features/multi-window.html">多視窗支援</a>
-</li>
-</ol>
-
-</div>
-</div>
-
-<p>在 Android N 中,Android TV 使用者現在可以在應用程式內瀏覽時,同時觀賞螢幕角色中釘選視窗中的影片。
-
-子母畫面 (PIP) 模式讓應用程式在釘選視窗中執行影片活動,同時讓另一個活動在背景持續進行。
-
-PIP 視窗讓使用者在使用您的應用程式時同時多工處理,協助提高使用者的生產力。
-</p>
-
-<p>您的應用程式可決定何時觸發 PIP 模式。以下是一些何時進入 PIP 模式的範例:
-</p>
-
-<ul>
-<li>當使用者從影片返回瀏覽其他內容,您的應用程式可以將影片移入 PIP 模式。
-</li>
-<li>當使用者觀看到影片內容的結尾時,您的應用程式可將影片切換到 PIP 模式。
-主畫面顯示系列中下一集的預告或摘要資訊時。
-</li>
-<li>您的應用程式可以為使用者提供一個觀賞影片時佇列其他內容的方式。
-當主畫面顯示內容選擇活動時,影片繼續在 PIP 模式中播放。
-</li>
-</ul>
-
-<p>PIP 視窗為 240x135 dp,在系統所選的螢幕上四個角落之一的最上層顯示。
-使用者只要按住遙控器上的 <b>Home</b> 按鈕,即可帶出 PIP 選單,讓他們將 PIP 視窗切換成全螢幕或關閉 PIP 視窗。
-
-如果另一個影片開始在主畫面上播放,會自動關閉 PIP 視窗。
-
-使用者也可以透過 Recents 關閉 PIP 視窗。</p>
-
-<img src="{@docRoot}preview/images/pip-active.png" />
-<p class="img-caption"><strong>圖 1.</strong> 當使用者瀏覽主畫面上的內容時,可看到螢幕角落的子母畫面中的影片。
-
-</p>
-
-<p>PIP 利用 Android N 中提供的多視窗 API 來提供釘選影片疊加層視窗。
-若要將 PIP 新增到您的應用程式,您需要註冊支援 PIP 的活動,在需要時將活動切換到 PIP 模式,以及確定活動在 PIP 模式時會隱藏 UI 元素且影片繼續播放。
-
-
-</p>
-
-<h2 id="declaring">宣告您的活動支援子母畫面</h2>
-
-<p>根據預設,系統不會自動為應用程式支援 PIP。如果您想要應用程式 PIP,請將
-<code>android:supportsPictureInPicture</code> 和
-<code>android:resizeableActivity</code> 設定成 <code>true</code>,在宣示說明中註冊影片活動。
-
-另外也請指定您的活動處理版面配置設定變更,如此一來,在 PIP 模式轉換期間版面配置變更時,才不會重新啟動您的活動。
-
-</p>
-
-<pre>
-<activity android:name="VideoActivity"
- android:resizeableActivity="true"
- android:supportsPictureInPicture="true"
- android:configChanges=
- "screenSize|smallestScreenSize|screenLayout|orientation"
- ...
-</pre>
-
-<p>註冊您的活動時,請記住在 PIP 模式中,您的活動會顯示在電視螢幕上小的疊加層視窗中。
-顯示最少 UI 的影片播放活動可提供最佳的使用者體驗。
-包含小型 UI 元素的活動在切換到 PIP 模式時無法提供出色的使用者體驗,因為使用者在 PIP 視窗中看不到 UI 元素的詳細資訊。
-
-
-</p>
-
-<h2 id="pip_button">將您的活動切換到子母畫面</h2>
-
-您需要將活動切換到 PIP 模式時,請呼叫
-<code>Activity.enterPictureInPicture()</code>。下列範例會在使用者選取媒體控制列上的專用 PIP 按鈕時切換到 PIP 模式:
-
-</p>
-
-<pre>
-@Override
-public void onActionClicked(Action action) {
- if (action.getId() == R.id.lb_control_picture_in_picture) {
- getActivity().enterPictureInPicture();
- return;
- }
- ...
-</pre>
-
-<p>將 PIP 按鈕新增到媒體控制列,可讓您的使用者在控制影片播放時輕鬆地切換到 PIP 模式。
-</p>
-
-<img src="{@docRoot}preview/images/pip-button.png" />
-<p class="img-caption"><strong>圖 1.</strong> 媒體控制列上的子母畫面按鈕。
-</p>
-
-<p>Android N 包含新的
-<code>PlaybackControlsRow.PictureInPictureAction</code> 類別,它可定義控制列 PIP 動作和使用 PIP 圖示。
-</p>
-
-<h2 id="handling_ui">處理子母畫面模式中的 UI</h2>
-
-<p>當您的活動進入 PIP 模式時,您的活動應該只播放影片。
-在您的活動進入 PIP 時移除 UI 元素,並在您的活動重新進入全螢幕時還原這些元素。覆寫 <code>Activity.onPictureInPictureChanged()</code> 或
-<code>Fragment.onPictureInPictureChanged()</code> 並依需要啟用或停用 UI 元素,例如:
-
-
-</p>
-
-<pre>
-@Override
-public void onPictureInPictureChanged(boolean inPictureInPicture) {
- if (inPictureInPicture) {
- // Hide the controls in picture-in-picture mode.
- ...
- } else {
- // Restore the playback UI based on the playback status.
- ...
- }
-}
-</pre>
-
-<h2 id="continuing_playback">在子母畫面模式中繼續播放影片
-</h2>
-
-<p>當您的活動切換到 PIP 時,系統會將活動視為暫停狀態並呼叫您活動的 <code>onPause()</code> 方法。
-影片播放不應該暫停,而且活動因為 PIP 模式而暫停時,影片應該繼續播放。
-
-查看您活動的
-<code>onPause()</code> 方法中的 PIP 並適當地處理播放,例如:
-</p>
-
-<pre>
-@Override
-public void onPause() {
- // If called due to PIP, do not pause playback
- if (inPictureInPicture()) {
- // Continue playback
- ...
- }
- // If paused but not in PIP, pause playback if necessary
- ...
-}
-</pre>
-
-<p>當您的活動從 PIP 模式切換回全螢幕模式時,系統會繼續您的活動並呼叫您的 <code>onResume()</code>方法。
-</p>
-
-<h2 id="best">最佳做法</h2>
-
-<p>PIP 主要針對播放全螢幕影片的活動。將您的活動切換到 PIP 模式時,避免顯示影片內容以外的任何項目。追蹤當您的活動進入 PIP 模式時隱藏 UI 元素,如<a href="#handling_ui">處理子母畫面模式中的 UI</a> 中所述。
-
-
-</p>
-
-<p>因為 PIP 視窗會在螢幕角落上以浮動視窗顯示,所以您應該避免在主畫面上 PIP 視窗可能遮蓋的任何地方顯示重要資訊。
-
-</p>
-
-<p>當活動處於 PIP 模式時,預設它不會取得輸入焦點。若要在處於 PIP 模式時接收輸入事件,請使用
-<code>MediaSession.setMediaButtonReceiver()</code>。
-</p>
diff --git a/docs/html-intl/intl/zh-tw/preview/features/scoped-folder-access.jd b/docs/html-intl/intl/zh-tw/preview/features/scoped-folder-access.jd
deleted file mode 100644
index 0a530d2..0000000
--- a/docs/html-intl/intl/zh-tw/preview/features/scoped-folder-access.jd
+++ /dev/null
@@ -1,124 +0,0 @@
-page.title=限定範圍目錄存取
-page.keywords=preview,sdk,scoped directory access
-page.tags=androidn
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>此文件內容</h2>
- <ol>
- <li><a href="#accessing">存取外部儲存空間目錄</a></li>
- <li><a href="#removable">存取抽取式媒體上的目錄</a></li>
- <li><a href="#best">最佳做法</a></li>
- </ol>
-</div>
-</div>
-
-<p>應用程式 (例如,相片應用程式) 通常只需要存取外部儲存空間中的特定目錄,例如 <code>Pictures</code> 目錄。
-目前用來存取外部儲存空間的方式並非設計來輕鬆地為這些類型的應用程式提供已設定目標的目錄存取。
-
-例如:</p>
-
-<ul>
-<li>在您的宣示說明中要求 {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} 或 {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} 可允許存取外部儲存空間ac上的所有公用目錄,但這可能超過您應用程式所需的存取權。
-
-
-</li>
-<li>使用<a href="{@docRoot}guide/topics/providers/document-provider.html">儲存空間存取架構</a>通常會使得您的使用者透過系統 UI 挑選目錄,這在您的應用程式一律存取相同外部目錄的情況下是不必要的。
-
-
-
-</li>
-</ul>
-
-<p>Android N 提供新的簡化 API,可用來存取常用外部儲存空間目錄。
- </p>
-
-<h2 id="accessing">存取外部儲存空間目錄</h2>
-
-<p>使用 <code>StorageManager</code> 類別來取得適當的 <code>StorageVolume</code> 實例。
-接著,透過呼叫該實例的 <code>StorageVolume.createAccessIntent()</code> 方法以建立意圖。使用此意圖來存取外部儲存空間目錄。
-
-若要取得所有可用的磁碟區 (包括抽取式媒體磁碟區) 清單,請使用 <code>StorageManager.getVolumesList()</code>。
-
-</p>
-
-<p>下列程式碼片段是一個範例,它說明如何開啟主要共用儲存空間中的 <code>Pictures</code> 目錄:
-</p>
-
-<pre>
-StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
-StorageVolume volume = sm.getPrimaryVolume();
-Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
-startActivityForResult(intent, request_code);
-</pre>
-
-<p>系統會嘗試授予對外部目錄的存取權,並在需要時使用簡化的 UI 向使用者確認存取權:
-</p>
-
-<img src="{@docRoot}preview/images/scoped-folder-access-framed.png" srcset="{@docRoot}preview/images/scoped-folder-access-framed.png 1x,
-{@docRoot}preview/images/scoped-folder-access-framed_2x.png 2x" />
-<p class="img-caption"><strong>圖 1.</strong> 應用程式要求對 [圖片] 目錄的存取權。
-</p>
-
-<p>若使用者授予存取權,系統會呼叫您的 <code>onActivityResult()</code> 覆寫並傳回 <code>Activity.RESULT_OK</code> 的結果代碼,以及包含 URI 的意圖資料。
-
-使用提供的 URI 來存取目錄資訊,這類似於使用<a href="{@docRoot}guide/topics/providers/document-provider.html">儲存空間存取架構</a>所傳回的 URI。
-
-
-
-</p>
-
-<p>若使用者未授予存取權,系統會呼叫您的 <code>onActivityResult()</code> 覆寫並傳回 <code>Activity.RESULT_CANCELED</code> 的結果代碼,以及 Null 意圖資料。
-
-</p>
-
-<p class="note"><b>注意</b>:取得對特定外部目錄的存取權也會取得對該目錄之子目錄的存取權。
-</p>
-
-<h2 id="removable">存取抽取式媒體上的目錄</h2>
-
-<p>若要使用「限定範圍目錄存取」來存取抽取式媒體上的目錄,請先新增會接聽 {@link android.os.Environment#MEDIA_MOUNTED} 通知的 {@link android.content.BroadcastReceiver},例如:
-
-</p>
-
-<pre>
-<receiver
- android:name=".MediaMountedReceiver"
- android:enabled="true"
- android:exported="true" >
- <intent-filter>
- <action android:name="android.intent.action.MEDIA_MOUNTED" />
- <data android:scheme="file" />
- </intent-filter>
-</receiver>
-</pre>
-
-<p>當使用者掛接抽取式媒體 (例如 SD 卡) 時,系統會傳送 {@link android.os.Environment#MEDIA_MOUNTED} 通知。
-此通知會在意圖資料中提供 <code>StorageVolume</code> 物件,讓您用來存取抽取式媒體上的目錄。
-
-下列範例會存取抽取式媒體上的 <code>Pictures</code> 目錄:
-</p>
-
-<pre>
-// BroadcastReceiver has already cached the MEDIA_MOUNTED
-// notification Intent in mediaMountedIntent
-StorageVolume volume = (StorageVolume)
- mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
-volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
-startActivityForResult(intent, request_code);
-</pre>
-
-<h2 id="best">最佳做法</h2>
-
-<p>如果可能,請將外部目錄存取 URI 設定為持續性,這樣您就不需要重複地要求使用者授予存取權。
-一旦使用者授予存取權,請使用目錄存取 URI 呼叫 <code>getContentResolver().takePersistableUriPermssion()</code>。
-
-系統會將該 URI 設定為持續性,而且後續存取要求將會傳回 <code>RESULT_OK</code>,而且不會為使用者顯示確認 UI。
-
-</p>
-
-<p>若使用者拒絕對外部目錄的存取權,請勿立刻又要求存取權。
-重複堅持取得存取權會導致極差的使用者體驗。
-</p>
diff --git a/docs/html-intl/intl/zh-tw/preview/features/security-config.jd b/docs/html-intl/intl/zh-tw/preview/features/security-config.jd
deleted file mode 100644
index 4fe8d0d..0000000
--- a/docs/html-intl/intl/zh-tw/preview/features/security-config.jd
+++ /dev/null
@@ -1,745 +0,0 @@
-page.title=網路安全性設定
-page.keywords=androidn,security,network
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>此文件內容</h2>
-<ol>
- <li><a href="#manifest">新增安全性設定檔</a></li>
- <li><a href="#CustomTrust">自訂信任的 CA</a>
- <ol>
- <li><a href="#ConfigCustom">設定信任的自訂 CA</a></li>
- <li><a href="#LimitingCas">限制信任的 CA 組</a></li>
- <li><a href="#TrustingAdditionalCas">信任其他 CA</a></li>
- </ol>
- </li>
- <li><a href="#TrustingDebugCa">僅偵錯 CA</a></li>
- <li><a href="#UsesCleartextTraffic">退出明碼流量</a></li>
- <li><a href="#CertificatePinning">關聯憑證</a></li>
- <li><a href="#ConfigInheritance">設定繼承行為</a></li>
- <li><a href="#FileFormat">設定檔案格式</a></li>
-</ol>
-</div>
-</div>
-
-
-<p>
- Android N 包括網路安全性設定功能,讓應用程式在安全的宣告式設定檔中即可自訂網路安全性設定,而不必修改應用程式的程式碼。
-
-這些設定可以針對特定網域以及針對特定應用程式來設定。
-此功能的主要能力如下:
-
-</p>
-
-<ul>
- <li>
- <b>自訂信任錨點:</b>為應用程式的安全連線自訂信任的憑證授權單位 (CA)。
-例如,信任特定的自我簽署憑證,或限制應用程式信任的一組公用 CA。
-
-
- </li>
-
- <li>
- <b>僅偵錯覆寫:</b>在應用程式中安全地為安全連線進行偵錯,而不會增加已安裝應用程式者的風險。
-
- </li>
-
- <li>
- <b>退出明碼流量:</b>保護應用程式不受意外使用明碼流量危害。
-
- </li>
-
- <li>
- <b>憑證關聯:</b>限制應用程式的安全連線只用特定憑證。
-
- </li>
-</ul>
-
-
-<h2 id="manifest">新增安全性設定檔</h2>
-
-<p>
- 網路安全性設定功能會使用 XML 檔案,而您為應用程式指定的設定就在此。
-您必須在應用程式的宣示說明包括一個指向這個檔案的項目。
-以下節錄自宣示說明的程式碼,示範如何建立此項目:
-
-</p>
-
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-...
-<app ...>
- <meta-data android:name="android.security.net.config"
- android:resource="@xml/network_security_config" />
- ...
-</app>
-</pre>
-
-<h2 id="CustomTrust">自訂信任的 CA</h2>
-
-<p>
- 應用程式會想要信任自訂的一組 CA,而不是平台預設的 CA。
-最常見的原因如下:
-</p>
-
-<ul>
- <li>使用 (由內部公司 CA 等所自我簽署、發行的) 自訂憑證授權單位連線至主機。
-
- </li>
-
- <li>限制 CA 只用您信任的那組 CA,而不是所有人預先安裝的 CA。
-
- </li>
-
- <li>信任系統中所未包括的其他 CA。
- </li>
-</ul>
-
-<p>
- 根據預設,來自所有應用程式的安全連線全都信任預先安裝的系統 CA,而目標為 API 層級 23 (Android M) 和以下版本的應用程式預設也會信任使用者新增的 CA 存放區。
-
-應用程式可以使用 {@code base-config} (針對整個應用程式自訂) 或 {@code domain-config} (針對每個網域自訂),自訂自己的連線。
-
-
-
-</p>
-
-
-<h3 id="ConfigCustom">設定自訂 CA</h3>
-
-<p>
- 假設您想要連線的主機使用自我簽署的 SSL 憑證,或要連線的主機使用 SSL 憑證是由您信任的非公用 CA 所發行,例如您公司的內部 CA。
-
-
-</p>
-
-<p>
- <code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">example.com</domain>
- <trust-anchors>
- <certificates src="@raw/my_ca"/>
- </trust-anchors>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-<p>
- 將 PEM 或 DER 格式的自我簽署或非公用 CA 憑證新增至
- {@code res/raw/my_ca}。
-</p>
-
-
-<h3 id="LimitingCas">限制信任的 CA 組</h3>
-
-<p>
- 應用程式若不想要信任系統所信任的所有 CA,可以自行指定一組範圍較小的信任 CA。
-如此可以保護應用程式,不受任何其他 CA 所發行的詐騙憑證危害。
-
-</p>
-
-<p>
- 限制信任的 CA 組,其設定類似於<a href="#TrustingACustomCa">信任自訂 CA</a> (針對特定網域),只不過多個 CA 都是資源所提供。
-
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">secure.example.com</domain>
- <domain includeSubdomains="true">cdn.example.com</domain>
- <trust-anchors>
- <certificates src="@raw/trusted_roots"/>
- </trust-anchors>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-<p>
- 將 PEM 或 DER 格式的信任 CA 新增至 {@code res/raw/trusted_roots}。
- 請注意,如果使用 PEM 格式,該檔案「只」能包含 PEM 資料,不能有額外的文字。<em></em>
-您還可以提供多個
- <a href="#certificates"><code><certificates></code></a>
-元素,而不只一個。
-</p>
-
-
-<h3 id="TrustingAdditionalCas">
- 信任其他 CA
-</h3>
-
-<p>
- 應用程式會想要信任不受系統信任的其他 CA,這是因為系統尚未包括該 CA,或 CA 不符合納入 Android 系統的需求。
-
-應用程式可以為設定指定多個憑證來源,來完成此動作。
-
-
-</p>
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <base-config>
- <trust-anchors>
- <certificates src="@raw/extracas"/>
- <certificates src="system"/>
- </trust-anchors>
- </base-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="TrustingDebugCa">設定 CA 進行偵錯</h2>
-
-<p>
- 對透過 HTTPS 連線的應用程式進行偵錯時,您想要連線的本機開發伺服器並沒有生產伺服器的 SSL 憑證。
-
-若以不修改應用程式的程式碼為前提,為了支援此動作,您可以使用 {@code debug-overrides} 來指定僅偵錯 CA,「只」有在 <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">
-android:debuggable</a>
- 為 {@code true} 時才予以信任。<i></i>
-
-一般來說,IDE 和建置工具會為非發行版本自動設定此旗標。
-
-</p>
-
-<p>
- 因為應用程式商店採取的安全措施是,不接受標示為可偵錯的應用程式,所以這種方式會比條件式程式碼安全。
-
-
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <debug-overrides>
- <trust-anchors>
- <certificates src="@raw/debug_cas"/>
- </trust-anchors>
- </debug-overrides>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="UsesCleartextTraffic">退出明碼流量</h2>
-
-<p>
- 打算只使用安全連線連線至目的地的應用程式,可以針對那些目的地退出支援明碼 (使用未加密的 HTTP 通訊協定,而非 HTTPS)。
-
-此選項有助於避免應用程式由於外部來源 (例如,後端伺服器) 提供的 URL 中發生變更,而造成意外回復。
-
-
- 如需更多詳細資料,請參閱 {@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted
- NetworkSecurityPolicy.isCleartextTrafficPermitted()}。
-</p>
-
-<p>
- 例如,應用程式想要確保 的所有連線一律要透過 HTTPS 完成,以保護敏感流量不受惡意網路危害。
-
-
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config usesCleartextTraffic="false">
- <domain includeSubdomains="true">secure.example.com</domain>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="CertificatePinning">關聯憑證</h2>
-
-<p>
- 應用程式一般會信任所有預先安裝的 CA。若這類的任何 CA 意在發行詐騙憑證,應用程式會有遭受 MiTM 攻擊的風險。
-
-有些應用程式選擇透過限制所信任的 CA 組或關聯憑證,來限制可接受的憑證組。
-
-</p>
-
-<p>
- 憑證關聯的方法是,透過公用金鑰的雜湊 (X.509 憑證的 SubjectPublicKeyInfo) 來提供一組憑證。
-只有當憑證鏈至少包含一個關聯的公用金鑰時,才是有效的憑證鏈。
-
-
-</p>
-
-<p>
- 請注意,使用憑證關聯時,您務必要包括備份金鑰,這樣萬一強制您切換到新的金鑰或變更 CA (關聯到 CA 憑證或該 CA 的中繼者) 時,您的應用程式連線才不會受到影響。
-
-
-否則,您必須推出應用程式更新,才能還原連線。
-
-</p>
-
-<p>
- 此外,可為關聯設定到期時間,只要該關聯經過多久都未執行,即為到期。
-這有助於避免未經更新的應用程式發生連線問題。
-然而,針對關聯設定到期時間,會造成略過關聯。
-
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">example.com</domain>
- <pin-set expiration="2018-01-01">
- <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
- <!-- backup pin -->
- <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="ConfigInheritance">設定繼承行為</h2>
-
-<p>
- 繼承的值都未設定在特定設定中。此行為允許有更複雜的設定,同時保持設定檔讓人看得懂。
-
-</p>
-
-<p>
- 如果值未設定在特定項目中時,就會使用下一個更一般項目的值。
-如為巢狀結構,就會從上層 {@code domain-config} 取得未在 {@code domain-config} 中設定的值,或非巢狀時,則會從 {@code
- base-config} 取得值。
-未在 {@code base-config} 中設定的值會使用平台的預設值。
-
-</p>
-
-<p>
- 例如,假設所有連至 {@code
- example.com} 子網域的連線都必須使用一組自訂 CA。此外,允許明碼流量送往這些網域,但連線到 {@code
- secure.example.com} 時「除外」。
-<em></em>在 {@code example.com} 的設定內以巢狀方式排列 {@code
- secure.example.com} 的設定,就不需要重複
- {@code trust-anchors}。
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">example.com</domain>
- <trust-anchors>
- <certificates src="@raw/my_ca"/>
- </trust-anchors>
- <domain-config cleartextTrafficPermitted="false">
- <domain includeSubdomains="true">secure.example.com</domain>
- </domain-config>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="FileFormat">設定檔案格式</h2>
-
-<p>
- 網路安全性設定功能會使用 XML 檔案格式。
- 下列程式碼範例顯示檔案的整體結構:
-</p>
-
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <base-config>
- <trust-anchors>
- <certificates src="..."/>
- ...
- </trust-anchors>
- </base-config>
-
- <domain-config>
- <domain>android.com</domain>
- ...
- <trust-anchors>
- <certificates src="..."/>
- ...
- </trust-anchors>
- <pin-set>
- <pin digest="...">...</pin>
- ...
- </pin-set>
- </domain-config>
- ...
- <debug-overrides>
- <trust-anchors>
- <certificates src="..."/>
- ...
- </trust-anchors>
- </debug-overrides>
-</network-security-config>
-</pre>
-
-<p>
- 下列各區段描述檔案格式的語法與其他詳細資料。
-
-</p>
-
-<h3 id="network-security-config">
- <network-security-config>
-</h3>
-
-<dl class="xml">
- <dt>
- 可以包含:
- </dt>
-
- <dd>
- 0 或 1 個 <code><a href="#base-config"><base-config></a></code><br>
- 任何數目的 <code><a href=
- "#domain-config"><domain-config></a></code><br>
- 0 或 1 個 <code><a href="#debug-overrides"><debug-overrides></a></code>
- </dd>
-</dl>
-
-<h3 id="base-config">
- <base-config>
-</h3>
-
-<dl class="xml">
- <dt>
- 語法:
- </dt>
-</dl>
-
-<pre class="stx">
-<base-config <a href=
-"#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
- ...
-</base-config>
-</pre>
-<dl class="xml">
- <dt>
- 可以包含:
- </dt>
-
- <dd>
- <code><a href="#trust-anchors"><trust-anchors></a></code>
- </dd>
-
- <dt>
- 描述:
- </dt>
-
- <dd>
- 連線到 <a href="#domain-config"><code>domain-config</code></a> 所未涵蓋的目的地時使用的預設設定。
-
-
-<p>
- 任何未設定的值都會使用平台預設值。目標為 API 層級 24 和更新版本的應用程式預設設定:
-
-</p>
-
-<pre>
-<base-config usesCleartextTraffic="true">
- <trust-anchors>
- <certificates src="system" />
- </trust-anchors>
-</base-config>
-</pre>
-目標為 API 層級 23 和以下版本的應用程式預設設定:
-<pre>
-<base-config usesCleartextTraffic="true">
- <trust-anchors>
- <certificates src="system" />
- <certificates src="user" />
- </trust-anchors>
-</base-config>
-</pre>
-
- </dd>
-</dl>
-
-<h3 id="domain-config"><domain-config></h3>
-<dl class="xml">
-<dt>語法:</dt>
-<dd>
-<pre class="stx"><domain-config <a href="#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
- ...
-</domain-config></pre>
-</dd>
-
-<dt>可以包含:</dt>
-
-<dd>
-1 或更多個 <code><a href="#domain"><domain></a></code>
-<br/>0 或 1 個 <code><a href="#trust-anchors"><trust-anchors></a></code>
-<br/>0 或 1 個 <code><a href="#pin-set"><pin-set></code></a>
-<br/>任何數目的巢狀 <code><domain-config></code></dd>
-
-<dt>描述</dt>
-<dd>依照 {@code domain} 元素所定義,連線至特定目的地時使用的設定。
-
-<p>請注意,如有多個 {@code domain-config} 元素涵蓋同一個目的地,則會使用含有最明確 (最長) 比對網域規則的設定。
-</p></dd>
-</dl>
-
-
-<h3 id="domain"><domain></h3>
-
-<dl class="xml">
- <dt>
- 語法:
- </dt>
-
- <dd>
- <pre class="stx">
-<domain includeSubdomains=["true" | "false"]>example.com</domain>
-</pre>
- </dd>
-
- <dt>
- 屬性:
- </dt>
-
- <dd>
- <dl class="attr">
- <dt>
- {@code includeSubdomains}
- </dt>
-
- <dd>
- 如為 {@code "true"},表示此網域規則會比對網域和所有子網域,包括子網域的子網域在內,反之此規則只會套用到完全相符者。
-
-
- </dd>
- </dl>
- </dd>
-
- <dt>
- 描述:
- </dt>
-</dl>
-
-<h3 id="debug-overrides"><debug-overrides></h3>
-
-<dl class="xml">
- <dt>
- 語法:
- </dt>
-
- <dd>
- <pre class="stx">
-<debug-overrides>
- ...
-</debug-overrides>
-</pre>
- </dd>
-
- <dt>
- 可以包含:
- </dt>
-
- <dd>
- 0 或 1 個 <code><a href="#trust-anchors"><trust-anchors></a></code>
- </dd>
-
- <dt>
- 描述:
- </dt>
-
- <dd>
- 當 <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
- 為 {@code "true"} (一般是在非發行版本由 IDE 與建置工具產生的情況下) 時所要套用的覆寫。
-{@code
- debug-overrides} 中指定的信任錨點會新增至所有其他連線,而當伺服器的憑證鏈使用其中一個僅偵錯信任錨點時,即不會執行憑證關聯。
-
-如果 <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
- 為 {@code "false"},就會完全略過這個區段。
- </dd>
-</dl>
-
-<h3 id="trust-anchors"><trust-anchors></h3>
-<dl class="xml">
- <dt>
- 語法:
- </dt>
-
- <dd>
- <pre class="stx">
-<trust-anchors>
-...
-</trust-anchors>
-</pre>
- </dd>
-
- <dt>
- 可以包含:
- </dt>
-
- <dd>
- 任何數目的 <code><a href="#certificates"><certificates></a></code>
- </dd>
-
- <dt>
- 描述:
- </dt>
-
- <dd>
- 可供安全連線使用的信任錨點組。
- </dd>
-</dl>
-
-
-<h3 id="certificates"><certificates></h3>
-<dl class="xml">
-<dt>語法:</dt>
-<dd><pre class="stx"><certificates src=["system" | "user" | "<i>raw resource</i>"]
- overridePins=["true" | "false"] />
-</pre></dd>
-<dt>描述:</dt>
-<dd>可供 {@code trust-anchors} 元素使用的 X.509 憑證組。</dd>
-
-<dt>屬性:</dt>
-<dd><dl class="attr">
-<dt>{@code src}</dt>
-<dd>
-CA 憑證的來源,可以是其中一個原始資源識別碼,其指向含有 X.509 憑證的檔案。
-<ul>
- <li>
- 憑證必須以 DER 或 PEM 格式編碼。如為 PEM 憑證,檔案中「不可」包含非 PEM 的額外資料,例如註解。
-<em></em>
-
- </li>
-
- <li>{@code "system"} 代表預先安裝的系統 CA 憑證
- </li>
-
- <li>{@code "user"} 代表使用者新增的 CA 憑證
- </li>
-</ul>
-</dd>
-
-<dt>{@code overridePins}</dt>
-<dd>
- <p>
- 指定來自此來源的 CA 是否要略過憑證關聯。如為 {@code
- "true"},憑證鏈的鏈結若經過此來源的其中一個 CA,就不會執行關聯。
-這對偵錯 CA 會很實用,或支援讓使用者 MiTM 應用程式的安全流量。
-
- </p>
-
- <p>
- 預設為 {@code "false"},除非您在 {@code debug-overrides}
- 元素中指定,而那種情況的預設為 {@code "true"}。
- </p>
-</dd>
-</dl>
-</dd>
-
-
-<h3 id="pin-set"><pin-set></h3>
-
-<dl class="xml">
- <dt>
- 語法:
- </dt>
-
- <dd>
-<pre class="stx">
-<pin-set expiration="date">
-...
-</pin-set>
-</pre>
- </dd>
-
- <dt>
- 可以包含:
- </dt>
-
- <dd>
- 任何數目的 <code><a href="#pin"><pin></a></code>
- </dd>
-
- <dt>
- 描述:
- </dt>
-
- <dd>
- 一組公用金鑰關聯。信任鏈中的其中一個公用金鑰必須要在這組關聯中,才是可信任的安全連線。
-如需關聯的格式,請參閱
- <code><a href="#pin"><pin></a></code>。
- </dd>
-
- <dt>
- 屬性:
- </dt>
-
- <dd>
- <dl class="attr">
- <dt>
- {@code expiration}
- </dt>
-
- <dd>
- 到期之後就會停用關聯的日期,格式為 {@code yyyy-MM-dd}。
-如果未設定屬性,關聯就不會到期。
-
- <p>
- 到期有助於避免因使用者停用應用程式更新,而無法取得關聯組更新的應用程式發生連線問題。
-
-
- </p>
- </dd>
- </dl>
- </dd>
-</dl>
-
-<h3 id="pin"><pin></h3>
-<dl class="xml">
- <dt>
- 語法:
- </dt>
-
- <dd>
-<pre class="stx">
-<pin digest=["SHA-256"]>base64 encoded digest of X.509
- SubjectPublicKeyInfo (SPKI)</pin>
-</pre>
- </dd>
-
- <dt>
- 屬性:
- </dt>
-
- <dd>
- <dl class="attr">
- <dt>
- {@code digest}
- </dt>
-
- <dd>
- 用來產生關聯的摘要演算法。目前僅支援
- {@code "SHA-256"}。
- </dd>
- </dl>
- </dd>
-</dl>
diff --git a/docs/html-intl/intl/zh-tw/preview/features/tv-recording-api.jd b/docs/html-intl/intl/zh-tw/preview/features/tv-recording-api.jd
deleted file mode 100644
index d857477..0000000
--- a/docs/html-intl/intl/zh-tw/preview/features/tv-recording-api.jd
+++ /dev/null
@@ -1,121 +0,0 @@
-page.title=電視錄製
-page.keywords=preview,sdk,tv,recording
-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="#supporting">指出錄製支援</a></li>
- <li><a href="#recording">錄製工作階段</a></li>
- <li><a href="#errors">處理錄製錯誤</a></li>
- <li><a href="#sessions">管理已錄製的工作階段</a></li>
- <li><a href="#best">最佳做法</a></li>
- </ol>
-</div>
-</div>
-
-<p>電視輸入服務可讓使用者透過時間位移 API 來暫停及繼續頻道播放。
-Android N 透過讓使用者儲存多個已錄製的工作階段,以延伸時間位移功能。
-</p>
-
-<p>使用者可以事先排定錄製作業,或在觀看節目時開始錄製。
-一旦系統儲存錄製的內容,使用者可以使用系統電視應用程式來瀏覽、管理及播放錄製的內容。
-</p>
-
-<p>如果要為您的電視輸入服務提供錄製功能,您必須向系統指出您的應用程式支援錄製、實作錄製節目的功能、處理及溝通錄製期間可能發生的任何錯誤,以及管理您已錄製的工作階段。
-
-
-</p>
-
-<h2 id="supporting">指出錄製支援</h2>
-
-<p>若要告訴系統您的電視輸入服務支援錄製,請依照這些步驟執行:
-</p>
-
-<ol>
-<li>在您的 <code>TvInputService.onCreate()</code> 方法中,使用 <code>TvInputInfo.Builder</code> 類別建立新的 <code>TvInputInfo</code> 物件。
-
-</li>
-<li>建立新的 <code>TvInputInfo</code> 物件時,在呼叫 <code>build()</code> 之前先呼叫 <code>setCanRecord(true)</code>,以指出您的服務支援錄製。
-
-</li>
-<li>透過呼叫 <code>TvInputService.updateTvInputInfo()</code>,以向系統註冊您的 <code>TvInputInfo</code> 物件。
-</li>
-</ol>
-
-<h2 id="recording">錄製工作階段</h2>
-
-<p>在您的電視輸入服務註冊並告訴系統它支援錄製功能之後,系統會在需要存取您應用程式的錄製實作時呼叫您的 <code>TvInputService.onCreateRecordingSession()</code>。
-
-
-實作您自己的 <code>TvInputService.RecordingSession</code> 子類別,並在 <code>onCreateRecordingSession()</code> 回呼引發時傳回它。
-
-
-此子類別負責切換到正確的頻道資料、錄製要求的資料,並和系統溝通錄製狀態與錯誤。
-
-</p>
-
-<p>當系統透過傳入頻道 URI 以呼叫 <code>RecordingSession.onTune()</code> 時,會轉台到 URI 指定的頻道。
-透過呼叫 <code>notifyTuned()</code> 以通知系統您的應用程式已轉台到想要的頻道,或者,若您的應用程式無法轉台到適當的頻道,則呼叫 <code>notifyError()</code>。
-
-
-</p>
-
-<p>接著,系統會呼叫 <code>RecordingSession.onStartRecording()</code> 回呼。
-您的應用程式必須立即開始錄製。當系統呼叫此回呼時,它可能會提供包含將錄製之節目相關資訊的 URI。
-
-當錄製完成時,您必須將此資料複製到 <code>RecordedPrograms</code> 資料表格。
-</p>
-
-<p>最後,系統會呼叫 <code>RecordingSession.onStopRecording()</code>。此時,您的應用程式必須立即停止錄製。
-您也必須在 <code>RecordedPrograms</code> 表格中建立一個項目。
-此項目應該在 <code>RecordedPrograms.COLUMN_RECORDING_DATA_URI</code> 欄中包括已錄製的工作階段資料 URI,以及系統在對 <code>onStartRecording()</code> 的初始呼叫中提供的任何節目資訊。
-
-
-
-</p>
-
-<p>如需有關如何存取 <code>RecordedPrograms</code> 表格的詳細資料,請參閱<a href="#sessions">管理已錄製的工作階段</a>。
-</p>
-
-<h2 id="errors">處理錄製錯誤</h2>
-
-<p>如果錄製期間發生錯誤,造成已錄製的資料無法使用,請透過呼叫 <code>RecordingSession.notifyError()</code> 以通知系統。同樣地,您可以在建立錄製工作階段之後呼叫 <code>notifyError()</code>,以讓系統知道您的應用程式已無法再錄製工作階段。
-
-
-</p>
-
-<p>如果錄製期間發生錯誤,但您想要提供可用的部分錄製內容給使用者播放,請呼叫 <code>RecordingSession.notifyRecordingStopped()</code> 以讓系統使用該部分工作階段。
-
-
-</p>
-
-<h2 id="sessions">管理已錄製的工作階段</h2>
-
-<p>系統會從 <code>TvContract.RecordedPrograms</code> 內容提供者表格中所有支援錄製頻道的應用程式維護所有已錄製之工作階段的資訊。
-
-此資訊可透過 <code>RecordedPrograms.Uri</code> 內容 URI 來存取。
-使用內容提供者 API 來讀取、新增及刪除此表格中的項目。
-</p>
-
-<p>如需有關處理內容提供者資料的詳細資訊,請參閱<a href="{@docRoot}guide/topics/providers/content-provider-basics.html">內容提供者基礎知識</a>。
-
-</p>
-
-<h2 id="best">最佳做法</h2>
-
-<p>電視裝置的儲存空間可能有限,因此在配置儲存空間以儲存已錄製的工作階段時,請使用最佳判斷。
-當可用空間不足而無法儲存已錄製的工作階段時,請使用 <code>RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)</code>。
-
-</p>
-
-<p>當使用者起始錄製時,您應該儘快開始錄製資料。
-如果要加快此程序,請在系統呼叫 <code>onCreateRecordingSession()</code> 回呼時完成所有初期耗時工作 (例如,存取及配置儲存空間)。
-
-這樣做可讓您在 <code>onStartRecording()</code> 回呼引發時立即開始錄製。
-
-</p>
diff --git a/docs/html-intl/intl/zh-tw/preview/index.jd b/docs/html-intl/intl/zh-tw/preview/index.jd
deleted file mode 100644
index e899bc0..0000000
--- a/docs/html-intl/intl/zh-tw/preview/index.jd
+++ /dev/null
@@ -1,120 +0,0 @@
-page.title=Android N Developer Preview
-page.tags="preview","developer"
-meta.tags="preview", "android"
-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">
- <div class="wrap" style="max-width:1100px;margin-top:0">
- <div class="cols dac-hero-content" style="padding-bottom:1em;">
-
- <div class="col-7of16 col-push-9of16" style="padding-left:2em">
- <h1 class="dac-hero-title">Android N Developer Preview</h1>
- <p class="dac-hero-description">
- 為 Android N 做好準備!
- 在 Nexus 與其他裝置上<strong>測試您的應用程式</strong>。支援新系統行為以<strong>節省電力與記憶體</strong>。使用<strong>多視窗 UI</strong>、<strong>直接回覆通知</strong>等延伸您的應用程式。
-
-
-
- </p>
-
- <a class="dac-hero-cta" href="{@docRoot}preview/overview.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>-->
- </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>
- </div>
- <div class="dac-section dac-small">
- <div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/resources"
- data-cardSizes="6x2"
- data-maxResults="6"></div>
- </div>
- </div>
-</section>
-
-<div id="useUpdatedTemplates" style="display:none" 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>
- </a>
- <ul class="dac-actions">
- <li class="dac-action">
- <a class="dac-action-link" href="https://developer.android.com/preview/bug">
- <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>
- 加入開發人員社群</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"><div class="wrap">
- <h1 class="dac-section-title">資源</h1>
- <div class="dac-section-subtitle">
- 以下重要資訊可幫助您的應用程式準備好使用 Android N。
- </div>
-
- <div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/more"
- data-cardSizes="6x6"
- data-items-per-page="6"
- data-maxResults="15"
- data-initial-results="6"></div>
-
- </div>
-</section>
-
diff --git a/docs/html-intl/intl/zh-tw/preview/overview.jd b/docs/html-intl/intl/zh-tw/preview/overview.jd
deleted file mode 100644
index 590afe5..0000000
--- a/docs/html-intl/intl/zh-tw/preview/overview.jd
+++ /dev/null
@@ -1,440 +0,0 @@
-page.title=計劃總覽
-page.metaDescription=讓您的應用程式為下一版 Android 做好準備。
-page.image=images/cards/card-n-overview_2x.png
-meta.tags="preview", "developer", "android"
-page.tags="preview", "developer", "android"
-
-@jd:body
-<!--
-<div class="cols" style=
-"background-color:#f2daf5; padding: 5px 0;margin-bottom:1em; text-align:center;">
-<h3>
- Developer Preview 3 is now available
- </h3>
- <p>Includes final SDK and near-final system images</p>
- <div style="margin:auto 1em">
- <ul class="dac-section-links">
- <li class="dac-section-link">
- <a href="{@docRoot}preview/support.html#preview3-notes">
- <span class="dac-sprite dac-auto-chevron"></span>
- Read the Notes</a>
- </li>
-
- <li class="dac-section-link">
- <a href="{@docRoot}preview/support.html#preview3-get">
- <span class="dac-sprite dac-auto-chevron"></span>
- Get the Update</a>
- </li>
-
- <li class="dac-section-link">
- <a href="https://code.google.com/p/android-developer-preview/">
- <span class="dac-sprite dac-auto-chevron"></span>
- Report Issues</a>
- </li>
- </ul>
- </div>
-</div>
--->
-
-<p>
- 歡迎使用「Android N Developer Preview」<strong></strong>,本計劃提供為新版 Android 測試和最佳化您應用程式所需的一切。它是免費的,而且您可以下載「N Developer Preview」工具來立刻開始。
-
-
-
-</p>
-
-
-
-
-
-
-
-<div style="background-color:#eceff1;padding:1em;">
-<div class="wrap">
- <div class="cols">
- <div class="col-4of12">
- <h5>
- 硬體與模擬器映像
- </h5>
-
- <p>
- 在各種裝置上或在模擬器上執行並測試您的應用程式。
-
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- 最新的平台程式碼
- </h5>
-
- <p>
- 我們將在 Preview 期間提供每月更新,讓您能夠針對最新的平台變更進行測試。
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- 開發人員問題的優先順序
- </h5>
-
- <p>
- 在前幾個星期內,我們將讓開發人員優先回報問題,因此請儘快測試並提供意見回饋。
-
- </p>
- </div>
-
- </div>
-
- <div class="cols">
-
-
- <div class="col-4of12">
- <h5>
- 新行為與功能
- </h5>
-
- <p>
- 儘早開始開發以支援新的平台行為,並使用新功能來開發。
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- 更新是透過隔空傳輸 (OTA) 方式傳遞
- </h5>
-
- <p>
- 透過「Android Beta 計劃」,可以在任何支援的裝置上透過無接縫的隔空傳輸方式取得更新。不需要刷機。
-
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- 意見回饋與支援
- </h5>
-
- <p>
- 使用我們的<a href="{@docRoot}preview/bug">問題追蹤器</a>回報問題並提供意見回饋。與 <a href="{@docRoot}preview/dev-community">N 開發人員社群</a>中的開發人員互動。
-
-
-
- </p>
- </div>
- </div>
-</div>
-</div>
-
-<!--
-<p>New in the Android N Developer Preview: </p>
-
-<ul>
- <li> Accompanying Android Beta Program for consumers, starting later in the preview</li>
- <li> More supported devices, including devices from OEM partners</li>
- <li> Seamless OTAs for your devices, from initial release to final N release without flashing</li>
-</ul>
--->
-
-<h2 id="timeline">時間軸與更新</h2>
-<img src="{@docRoot}images/n-preview-updates_2x.png">
-
-<p>
- 「N Developer Preview」計畫日期從 2016 年 3 月 9 日到最終 Android N 公開發行版釋出給 AOSP 與 OEM 為止 (預計是 2016 年第 3 季)。
-
-</p>
-
-<p>
- 在關鍵開發里程碑,我們將為您的開發與測試環境傳遞更新。一般而言,您可以預期每個月 (4 到 6 週的間隔) 都能收到更新。里程碑列出如下。
-
-
-</p>
-
-<ul>
- <li><strong><a href="{@docRoot}preview/support.html">預覽版 1</a></strong> (初始版本,Alpha)</li>
- <li><strong>預覽版 2</strong> (遞增更新,Beta)</li>
- <li><strong>預覽版 3</strong> (遞增更新,Beta)</li>
- <li><strong>預覽版 4</strong> (最終 API 與正式 SDK,Play 發佈)</li>
- <li><strong>預覽版 5</strong> (用於最終測試的近最終系統映像)</li>
- <li><strong>最終版本</strong> (推出給 AOSP 與生態系統)</li>
-</ul>
-
-<p>
- 每個更新都包括 SDK 工具、預覽版系統映像、模擬器、參考文件與 API 差異。
-
-</p>
-
-<p>
- <strong>前三個預覽版里程碑</strong>提供<strong>早期測試與開發環境</strong>,可協助您發現目前應用程式中的相容性問題,並針對在新平台運作的目標規劃遷移或功能工作。您可以在這個優先順序期間將您對功能與 API 和檔案相容性問題的意見回饋提供給我們 — 對於上述所有問題,請使用<a href="{@docRoot}preview/bug">問題追蹤器</a>。您可以預期這些更新之間會有一些 API 變更。
-
-
-
-
-
-
-</p>
-
-<p>
- 在<strong>預覽版 4 與 5</strong>,您將能存取<strong>最終 N API 與 SDK</strong> 以進行開發,並存取接近最終系統映像來測試系統行為與功能。Android N 在此時將提供標準 API 層級。您可以開始為您的舊版應用程式執行最終相容性測試,並調整使用 N API 或功能的任何新程式碼。
-
-
-
-
-</p>
-
-<p>
- 此外,從預覽版 4 開始,您可以<strong>發佈應用程式到執行 Android N 的裝置 (在正式 API 層級)</strong>,例如已選擇加入 Android Beta 計劃的使用者裝置。您可以先發佈到 Google Play 的 Alpha 與 Beta 管道,以便在廣泛於商店中散佈之前,先透過 Android Beta 使用者測試您的應用程式。
-
-
-
-
-
-</p>
-
-<p>
- 當您在 Android N 上測試及開發時,強烈建議您在預覽版更新發行時立即更新,<strong>讓您的開發環境保持在最新狀態</strong>。為簡化此程序,您可以在 Android Beta 計劃中註冊您的測試裝置,並在每個里程碑取得<strong>隔空傳輸 (OTA) 更新</strong>。或者,我們也會提供已更新的預覽版映像讓您下載並手動刷新。
-
-
-
-
-
-</p>
-
-<p>
- 我們將透過 <a href="http://android-developers.blogspot.com/">Android 開發人員部落格</a>,還有此網站與 <a href="{@docRoot}preview/dev-community">Android N 開發人員社群</a>來通知您有可用的預覽版更新。
-
-
-</p>
-
-
-<h2 id="preview_tools">N Developer Preview 中有什麼?</h2>
-
-<p>
- 「N Developer Preview」包括您針對各種不同螢幕大小、網路技術、 CPU/GPU 晶片組與硬體架構,測試現有應用程式所需的一切。
-
-
-</p>
-
-<h3 id="sdk_tools">SDK 工具</h3>
-
-<p>您可以透過 <a href="{@docRoot}sdk/installing/adding-packages.html">Android Studio</a> 中的 SDK Manager 下載這些元件:</p>
-
-<ul>
- <li> N Developer Preview <strong>SDK 工具</strong>
- <li> N Developer Preview <strong>模擬器系統映像</strong> (32 位元與 64 位元)
- <li> N Developer Preview <strong>模擬器系統映像 (適用於 Android TV)</strong> (32 位元)
- <li> N Developer Preview 支援程式庫 (適用於新的應用程式範本)
-</ul>
-
-<p>
- 我們將視需要在每個里程碑提供這些開發工具的更新。
-</p>
-
-<h3 id="hardware_system_images">硬體系統映像</h3>
-
-<p>
- 「N Developer Preview」包括 Nexus 以及在實體裝置上測試及開發時可以使用的其他硬體系統映像。如需硬體映像的完整清單,請參閱<a href="{@docRoot}preview/download.html">裝置映像</a>頁面。
-
-
-</p>
-
-<p>
- 我們將在每個里程碑傳遞已更新的系統映像。您可以下載已更新的系統映像並手動將它刷到您的測試裝置,而且刷機頻率無限制。當您需要在自動化測試環境多次刷新您裝置時,這特別實用。
-
-
-
-
-</p>
-
-<p class="note"><strong>注意</strong>:<strong>手動刷新的裝置將無法像去年的預覽版一樣取得 OTA 更新</strong>。今年,您可以透過在「Android Beta 計劃」註冊裝置以取得 OTA — 請參閱下一節的詳細資料。
-
-
-
-</p>
-
-<h3 id="android_beta">透過 Android Beta 計劃取得 OTA 更新</h3>
-
-<p>
- Android N 中的其中一個新功能是隔空傳輸 (OTA) 更新計劃,它可以自動將最新的 Android N 預覽版更新直接傳遞給已註冊此計劃的裝置。加入此計劃完全免費,而且此計劃開放給所有擁有支援裝置並已註冊 Google 帳戶的人。
-
-
-
-</p>
-
-<p>
- 如果要註冊此計劃,請瀏覽 <a href="https://g.co/androidbeta">Android Beta 計劃</a>網站。您將會看到已在您的帳戶註冊且符合加入 Android Beta 計劃的所有裝置。
-
-
-
-</p>
-
-<ol>
- <li> 選擇要接收 Android N 更新的裝置
- <li> 按一下 [Enroll],閱讀並同意服務條款,然後按一下 [OK]。
-</ol>
-
-<p>
- 一旦註冊,您的裝置很快就會收到更新。在大部分情況下,您不需要執行完整重設以將您的資料移到 Android N,但建議您先備份重要資料,再註冊裝置。
-
-
-
-</p>
-
-<p>
- 當更新傳遞到您的裝置之後,建議您儘快下載並安裝。您將能掌握系統 UI、行為、API 與功能的最新變更。
-
-
-</p>
-
-<p>
- 在「Developer Preview」結束時,您已註冊的裝置將會收到正式 Android N 版本的更新。
-
-</p>
-
-<p>
- 您可以隨時取消註冊 Android Beta 計劃。在取消註冊之前,請務必備份裝置上的資料。
-
-
-</p>
-
- <p class="note"><strong>注意</strong>:當您取消註冊時,<strong>系統會將您的裝置還原為出廠預設值</strong>並更新到最新版本的 Android 6.0 Marshmallow (不一定是註冊裝置之前安裝的版本)。為確保乾淨的安裝,系統會將您的資料從裝置清除,包括聯絡人、訊息與相片等。
-
-
-
-
-
-
-</p>
-
-<h3 id="documentation_and_sample_code">文件與範例程式碼</h3>
-
-<p>
- 「Developer Preview」網站上提供這些文件資源,協助您了解 Android N:
-
-</p>
-
-<ul>
- <li> <a href="{@docRoot}preview/setup-sdk.html">設定以針對 Android N 開發</a>提供逐步指示協助您開始。
-
-</li>
- <li> <a href="{@docRoot}preview/behavior-changes.html">行為變更</a>指出要測試的關鍵區域。
-</li>
- <li> 新 API 的文件,包括 <a href="{@docRoot}preview/api-overview.html">API 總覽</a>、可下載的 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 參考資料</a>與詳細關鍵功能 (例如多視窗支援、整合式通知、多地區設定支援等) 的開發人員指南。
-
-
-
- <li> 示範如何支援權限與其他新功能的<a href="{@docRoot}preview/samples.html">範例程式碼</a>。
-
- <li> 適用於目前 N Developer Preview 的<a href="{@docRoot}preview/support.html#release-notes">版本資訊</a>,包括變更資訊與差異報告。
-
-
-</ul>
-
-<h4 id="reference">可下載的 API 參考資料</h4>
-
-<p>
- 在早期預覽版更新期間,您能以獨立 zip 壓縮檔的形式下載最新的 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">Android N 平台 API 參考資料</a>。下載的參考資料也包括差異報告,可協助您瞭解自 API 23 與前次更新之後的 API 變更。
-
-
-
-
-</p>
-
-<p>
- 當 Android N API 邁入最終階段且我們為它指派正式 API 層級時,我們將在 <a href="https://developer.android.com">https://developer.android.com</a> 為您提供線上 API 參考資料。
-
-</p>
-
-<h3 id="support_resources">
- 支援資源
-</h3>
-
-<p>
- 在「N Developer Preview」上測試及開發時,請使用這些管道來回報問題及提供意見回饋:
-
-</p>
-
-<ul>
- <li> <a href="https://code.google.com/p/android-developer-preview/">N Developer Preview 問題追蹤器</a>是您的<strong>主要意見回饋管道</strong>。您可以透過此問題追蹤器來回報錯誤、效能問題與一般意見回饋。您也可以檢查<a href="{@docRoot}preview/bug">已知問題</a>並尋找變通方式步驟。當您的問題經過分類並傳送給 Android 工程團隊檢閱時,我們會通知您。
-
-
-
-
- </li>
- <li> <a href="{@docRoot}preview/dev-community">Android N 開發人員社群</a>是您能<strong>與其他 Android N 開發人員聯絡</strong>的 Google+ 社群。您可以分享有關 Android N 的觀察或想法,或尋找解答。我們會主持社群並視需要提供解答與指導方針。
-
-
-
-</li>
-</ul>
-
-<h3 id="targeting">目標設定、預覽版 API 及發佈</h3>
-
-<p>
- 「N Developer Preview」提供僅供開發的系統與<strong>沒有標準 API 層級</strong>的 Android 程式庫。如果要選擇退出相容性行為以測試您的應用程式 (強烈建議),您可以透過將您應用程式的 <code><a href=
- "{@docRoot}preview/setup-sdk.html#create-update">targetSdkVersion</a></code> 設定為 <code>“N”</code>,以便以 Android N 預覽版。做為目標。
-
-
-
-
-
-</p>
-
-<p>
- 「Android N Developer Preview」提供<strong>預覽版 API</strong> — 在最終版 SDK (目前規劃在 2016 年第 3 季) 發行之前的都不是正式 API。這表示您可以預期這段時間會有<strong>小幅度的 API 變更</strong>,特別是在計劃開始的前幾週。隨著每次更新「Android N Developer Preview」,我們將提供變更摘要。
-
-
-
-
-
-</p>
-
-<p class="note">
- <strong>注意</strong>:雖然預覽版 API 可能會變更,基本系統行為均已穩定且能夠立即測試。
-
-
-</p>
-
-<p>
- Google Play <strong>會防止發佈目標為 N Developer Preview 的應用程式</strong>。當 Android N 最終 SDK 可用時,您將能以正式 Android N API 層級做為目標,並透過 Alpha 與 Beta 發行管道將您的應用程式發佈到 Google Play。同時,如果要將目標為 Android N 的應用程式散佈給測試人員,您可以透過電子郵件或您網站的直接下載連結來完成。
-
-
-
-
-
-</p>
-
-<p>
- 在完全將 Android N 釋出給 AOSP 與 OEM 時 (預計是 2016 年第 3 季),您可以將以 Android N 為目標的發佈發佈給 Google Play 中的公開發行管道。
-
-
-</p>
-
-
-<h2 id="how_to_get_started">如何開始</h2>
-
-<p>
- 開始使用 Android N 測試您的應用程式:
-</p>
-
-<ol>
- <li> 檢閱 <a href="{@docRoot}preview/api-overview.html">API 總覽</a>與<a href="{@docRoot}preview/behavior-changes.html">行為變更</a>以瞭解新功能,以及它會如何影響您的應用程式。特別是瞭解新的<a href="{@docRoot}preview/features/notification-updates.html">通知</a>功能與<a href="{@docRoot}preview/features/multi-window.html">多視窗支援</a>。
-
-
-
-</li>
- <li> 依照<a href="{@docRoot}preview/setup-sdk.html">設定 Preview SDK</a> 的指示來設定您的環境,並設定測試裝置。
-</li>
- <li> 依照<a href="https://developers.google.com/android/nexus/images">刷新指示</a>,將您的裝置刷新為最新的 Android N 系統映像。
- </li>
- <li> 檢閱 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API 參考資料</a>與 <a href="{@docRoot}preview/samples.html">Android N 範例</a>,以深入瞭解新的 API 功能以及如何在您的應用程式中運用。
-
-
- <li> 加入 <a href="{@docRoot}preview/dev-community">Android N 開發人員社群</a>以取得最新消息,並與使用新平台的開發人員聯絡
-
-</li>
-</ol>
-
-<p>
- 感謝您參與「Android N Developer Preview」計劃!
-</p>
diff --git a/docs/html-intl/intl/zh-tw/preview/samples.jd b/docs/html-intl/intl/zh-tw/preview/samples.jd
deleted file mode 100644
index 265c0ff..0000000
--- a/docs/html-intl/intl/zh-tw/preview/samples.jd
+++ /dev/null
@@ -1,85 +0,0 @@
-page.title=範例
-page.tags="preview", "samples", "android"
-page.image=images/cards/card-n-samples_2x.png
-@jd:body
-
-<p>
- 下列程式碼範例是針對 Android N 提供。如果要在 Android Studio 中下載, 範例,請選取 [File] > [Import Samples]<b></b> 選單選項。
-
-
-</p>
-
-<p class="note">
- <strong>注意:</strong>這些可下載的專案是專為與 Gradle 和 Android Studio 一起使用而設計。
-
-</p>
-
-
-<h3 id="mw">多視窗 Playground</h3>
-<img src="{@docRoot}preview/images/sample-multiwindow.png" style="float: left; padding-right: 0.5em" height="250" width="156" />
-<p>
- 此範例示範如何在您的應用程式中發揮多視窗使用者介面的功能。
-
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-MultiWindowPlayground">在 GitHub 上取得</a>
-
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="an">使用中通知</h3>
-<img src="{@docRoot}preview/images/sample-activenotifications.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
-<p>
- 這是現有的範例,它會顯示使用 NotificationCompat 傳送通知的簡單服務。來自使用者的每個未閱讀交談都會以個別通知方式傳送。
-
-
-</p>
-<p>
- 已更新此範例以利用 Android N 中的新通知功能。
-
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-ActiveNotifications">在 GitHub 上取得</a>
-
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="ms">簡訊服務</h3>
-<img src="{@docRoot}preview/images/sample-messagingservice.png" style="float: left; padding-right: 0.5em" height="250" width="150" />
-<p>
- 這是現有的範例,它示範如何使用 NotificationManager 告知使用者應用程式目前顯示的通知數目。
-
-
-</p>
-<p>
- 已更新此範例以利用 Android N 中的新通知功能。
-
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-MessagingService">在 GitHub 上取得</a>
-
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="fbe">直接開機</h3>
-<img src="{@docRoot}preview/images/sample-directboot.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
-<p>
- 此範例示範如何在裝置加密的儲存空間 (裝置開機後即一律可用) 中儲存及存取資料。
-
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-DirectBoot">在 GitHub 上取得</a>
-
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="sda">限定範圍目錄存取</h3>
-<img src="{@docRoot}preview/images/sample-scopeddirectoryaccess.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
-<p>
- 此範例示範如何讀取及寫入特定目錄的資料,同時要求較少的權限。
-
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-ScopedDirectoryAccess">在 GitHub 上取得</a>
-
-</p>
\ No newline at end of file
diff --git a/docs/html-intl/intl/zh-tw/preview/setup-sdk.jd b/docs/html-intl/intl/zh-tw/preview/setup-sdk.jd
deleted file mode 100644
index b486ed4..0000000
--- a/docs/html-intl/intl/zh-tw/preview/setup-sdk.jd
+++ /dev/null
@@ -1,223 +0,0 @@
-page.title=設定 Preview
-meta.keywords="preview", "android"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-sdk_2x.png
-
-@jd:body
-
-
-<div id="qv-wrapper">
- <div id="qv">
-<ol>
- <li><a href="#get-as13">取得 Android Studio 2.1</a></li>
- <li><a href="#get-sdk">取得 Android N SDK</a>
- <ol>
- <li><a href="#docs-dl">參考文件</a>
- </ol>
- </li>
- <li><a href="#java8">取得 Java 8 JDK 與 JRE</a></li>
- <li><a href="#create-update">更新或建立專案</a></li>
- <li><a href="#next">後續步驟</a></li>
-</ol>
- </div>
-</div>
-
-<p>如果要開發適用於「Android N Preview」的應用程式,您必須為您的開發人員環境進行一些更新,如此頁面上所述。
-</p>
-
-<p>如果只要在 Android N 系統映像上測試您應用程式的相容性,請依照<a href="{@docRoot}preview/download.html">在 Android N 裝置上測試</a>中的指南執行。
-</p>
-
-<img src="{@docRoot}preview/images/n-preview-setup.png" width="700" alt="" />
-
-
-<h2 id="get-as13">取得 Android Studio 2.1 (預覽版)</h2>
-
-<p>Android N 平台新增對 <a href="{@docRoot}preview/j8-jack.html">Java 8 語言功能</a>的支援,它需要名為 Jack 的新編譯器。目前,只有 Android Studio 2.1 中才支援最新的 Jack 版本。因此,如果要使用 Java 8 語言功能,您必須使用 Android Studio 2.1 來建置您的應用程式。否則,您不需要使用 Jack 編譯器,但您仍需要更新到 JDK 8 以針對 Android N 編譯,如下所述。
-
-
-
-
-
-
-</p>
-
-<p>Android Studio 2.1 目前在早期測試發行管道中是以預覽版形式提供。如果您已經有 Android Studio 但不想要更新到早期測試管道,您可以下載 Android Studio 2.1 並另行安裝,並使用它來針對 Android N 進行開發,這樣並不會影響您的主要 Android Studio 環境。
-
-
-
-
-</p>
-
-<p>如果要下載 Android Studio 2.1 並另行安裝,請依照這些步驟執行 (或者,如果要以現有安裝之更新的形式接收 Android Studio 2.1,請跳到步驟 4):
-
-</p>
-
-<ol>
- <li>編輯現有 Android Studio 安裝的名稱,並附加版本號碼。這樣,當您安裝新版本時,它將不會覆寫現有的版本。
-
-</li>
- <li>從<a href="http://tools.android.com/download/studio/canary/latest">早期測試管道下載頁面</a>針對您的作業系統下載適當的 ZIP 檔案。
-
- </li>
- <li>將套件解壓縮,並將 Android Studio 2.1 內容移動到系統上應用程式的適當位置,然後將它啟動。
-</li>
- <li>開啟 [Settings] 對話方塊 (在 Windows/Linux 上是 [File] > [Settings]<strong></strong>,在 Mac 上是 [Android Studio] > [Preferences]<strong></strong>)。在左面板中,選取 [Appearance & Behavior] > [System Settings] > [Updates]<strong></strong>。
-
-
-
-
- </li>
- <li>在 [Updates] 面板上,選取 [Automatically check updates for]<strong></strong> 核取方塊,然後從下拉式清單選取 [Canary Channel]<strong></strong>。
-
-
- </li>
-</ol>
-
-<p>針對下一個步驟,將此設定視窗維持開啟。</p>
-
-
-<h2 id="get-sdk">取得 N Preview SDK</h2>
-
-<p>如果要開始使用 Android N API 來開發,您必須在 Android Studio 中安裝 Android N Preview SDK,如下所示:
-</p>
-
-<ol>
- <li>在仍於 [Updates] 面板 (上面的步驟 4) 中檢視時,選取 [Automatically check updates for Android SDK]<strong></strong> 核取方塊,然後從下拉式清單中選取 [Preview Channel]<strong></strong>。
-
-
-
- </li>
- <li>按一下 [Check Now]<strong></strong>。</li>
-
- <li>在左面板中,選取 [Appearance & Behavior] > [System Settings] > [Android SDK]<strong></strong>。
-
-
- <li>按一下 [SDK Platforms]<strong></strong> 分頁,然後選取 [Android N Preview]<strong></strong> 核取方塊。
-</li>
-
- <li>按一下 [SDK Tools]<strong></strong> 分頁,然後選取 [Android SDK Build Tools]<strong></strong>、[Android SDK Platform-Tools]<strong></strong> 與 [Android SDK Tools]<strong></strong> 核取方塊。
-
-
-
- </li>
-
- <li>按一下 [OK]<strong></strong>,然後接受要安裝之任何套件的授權合約。
-
- </li>
-</ol>
-
-<h3 id="docs-dl">取得 N Preview 參考文件</h3>
-
-<p>
- 您可以在 N Preview 參考文件 (可從下表下載) 中找到有關 Android N API 的詳細資訊。此套件包含 Android 開發人員網站的已刪節離線版本,而且包括適用於 Android N API 的已更新 API 參考資料與 API 差異報告。
-
-
-
-
-</p>
-
-<table>
- <tr>
- <th scope="col">文件</th>
- <th scope="col">總和檢查碼</th>
- </tr>
- <tr>
- <td style="white-space: nowrap">
- <a href="{@docRoot}shareables/preview/n-preview-1-docs.zip">n-preview-1-docs.zip</a></td>
- <td width="100%">
- MD5:4ab33ccbe698f46f125cc5b807cf9c2f<br>
- SHA-1:6a3880b3ccd19614daae5a4d0698ea6ae11c20a5
- </td>
- </tr>
-</table>
-
-
-
-<h2 id="java8">取得 Java 8 JDK 與 JRE</h2>
-
-<p>如果要針對 Android N 平台編譯您的應用程式,您必須使用 Java 8 開發人員套件 (JDK 8),而且如果要使用某些工具來搭配 Android Studio 2.1,您必須安裝 Java 8 執行階段環境 (JRE 8)。因此,如果您沒有最新版本的 JDK 8 與 JRE 8,請立即下載。
-
-
-
-</p>
-
-<p>接著,在 Android Studio 中設定 JDK 版本,如下所示:</p>
-
-<ol>
- <li>在 Android Studio 中開啟 Android 專案,然後選取 [File] > [Project Structure] 以開啟 [Project Structure] 對話方塊 <strong></strong>(或者,您可以選取 [File] > [Other Settings] > [Default Project Structure]<strong></strong>,以針對所有專案設定預設值)。
-
-
-
-
- </li>
- <li>在對話方塊的左面板中,按一下 [SDK Location]<strong></strong>。
- </li>
- <li>在 [JDK Location]<strong></strong> 欄位中,輸入 Java 8 JDK 的位置 (按一下右邊的按鈕以瀏覽您的檔案),然後按一下 [OK]<strong></strong>8 。
-
-
- </li>
-</ol>
-
-<img src="{@docRoot}preview/images/studio-jdk-location.jpg" width="700" alt="" />
-
-
-<h2 id="create-update">更新或建立專案</h2>
-
-<p>
- 如果要使用 Android N API,您必須適當地設定您的專案。
-</p>
-
-<p>如果計畫使用 Java 8 語言功能,您也應該閱讀 <a href="{@docRoot}preview/j8-jack.html">Java 8 語言功能</a>,以取得支援之 Java 8 功能以及如何搭配 Jack 編譯器設定您專案的詳細資訊。
-
-
-</p>
-
-
-<h3 id="update">更新現有的專案</h3>
-
-<p>開啟模組的 <code>build.gradle</code> 檔案並更新值,如下所示:
-
-
-</p>
-
-<pre>
-android {
- compileSdkVersion <strong>'android-N'</strong>
- buildToolsVersion <strong>'24.0.0-rc1'</strong>
- ...
-
- defaultConfig {
- minSdkVersion <strong>'N'</strong>
- targetSdkVersion <strong>'N'</strong>
- ...
- }
- ...
-}</pre>
-
-
-<h3 id="create">建立新專案</h3>
-
-
-<p>使用 Android N Preview SDK 建立新的開發專案:</p>
-
-<ol>
- <li>按一下 [File] > [New Project]<strong></strong>,並依照步驟執行,直到到達 [Target Android Devices] 頁面。
-
- </li>
- <li>在此頁面上,選取 [Phone and Tablet]<strong></strong> 選項。</li>
- <li>在 [Phone and Tablet]<strong></strong> 選項下,在 [Minimum SDK]<strong></strong> 選項清單中,選取 [N: Android API 23, N Preview (Preview)]<strong></strong>。
-
-</li>
-</ol>
-
-
-<h2 id="next">後續步驟</h2>
-
-<ul>
- <li>依照<a href="{@docRoot}preview/download.html">在 Android N 裝置上測試</a>中的指南執行。</li>
- <li>深入了解 Android N 平台的<a href="{@docRoot}preview/behavior-changes.html">行為變更</a>與 <a href="{@docRoot}preview/api-overview.html">Android N API 與功能</a>。
-
-
-</li>
-</ul>
diff --git a/docs/html-intl/intl/zh-tw/training/articles/direct-boot.jd b/docs/html-intl/intl/zh-tw/training/articles/direct-boot.jd
new file mode 100644
index 0000000..fdcb172
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/training/articles/direct-boot.jd
@@ -0,0 +1,181 @@
+page.title=直接開機
+page.keywords=preview,sdk,direct boot
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>此文件內容</h2>
+ <ol>
+ <li><a href="#run">要求直接開機期間的執行權限</a></li>
+ <li><a href="#access">存取裝置加密的儲存空間</a></li>
+ <li><a href="#notification">接收使用者解鎖的通知</a></li>
+ <li><a href="#migrating">遷移現有資料</a></li>
+ <li><a href="#testing">測試您的加密感知應用程式</a></li>
+ </ol>
+</div>
+</div>
+
+<p>Android N 會在一個安全的 <i>直接開機</i> 模式下執行,這是裝置已經開啟電源但使用者尚未解鎖裝置的期間。
+
+為了支援這種方式,系統為資料提供兩個儲存位置:</p>
+
+<ul>
+<li><i>認證加密的儲存空間</i>:這是預設的儲存位置,只有在使用者解鎖裝置之後才能使用。
+</li>
+<li><i>裝置加密的儲存空間</i>:這是「直接開機」模式期間與使用者解鎖裝置之後都可以使用的儲存位置。
+</li>
+</ul>
+
+<p>根據預設,應用程式不會在「直接開機」模式下執行。如果您的應用程式需要在「直接開機」模式期間執行動作,您可以註冊應該在此模式下執行的應用程式元件。
+
+需要在「直接開機」模式下執行的一些常見應用程式使用案例包括:
+</p>
+
+<ul>
+<li>已排程通知的應用程式,例如鬧鐘應用程式。
+</li>
+<li>提供重要使用者通知的應用程式,例如簡訊應用程式。</li>
+<li>提供協助工具服務的應用程式,例如 Talkback。</li>
+</ul>
+
+<p>如果您的應用程式需要在「直接開機」模式期間存取資料,請使用裝置加密的儲存空間。
+裝置加密的儲存空間包含以金鑰加密的資料,這個金錀只有在裝置執行成功的驗證開機之後才能使用。
+
+</p>
+
+<p>對於應該使用與使用者認證關聯之金鑰 (例如 PIN 或密碼) 加密的資料,請使用認證加密的儲存空間。認證加密的儲存空間只有在使用者成功解鎖裝置之後到使用者再次重新啟動裝置之間的時間可以使用。
+
+
+如果使用者在解鎖裝置之後啟用鎖定螢幕,並不會鎖定認證加密的儲存空間。
+
+</p>
+
+<h2 id="run">要求直接開機期間的執行權限</h2>
+
+<p>應用程式必須先向系統註冊其元件,這些元件才能在「直接開機」模式期間執行或存取裝置加密的儲存空間。
+
+向系統註冊的應用程式會將元件標記為
+<i>加密感知</i>。如果要將元件標記為加密感知,請將宣示說明中的
+<code>android:encryptionAware</code> 屬性設定為 true。<p>
+
+<p>當裝置重新啟動時,加密感知元件可以註冊為從系統接收
+<code>LOCKED_BOOT_COMPLETED</code> 廣播訊息。
+這個時候可以使用裝置加密的儲存空間,而且您的元件可以執行在「直接開機」模式期間需要執行的工作,例如觸發排程的鬧鐘。
+
+</p>
+
+<p>下列程式碼片段是一個範例,示範如何在應用程式宣示說明中將
+{@link android.content.BroadcastReceiver} 註冊為加密感知以及如何為
+<code>LOCKED_BOOT_COMPLETED</code> 新增意圖篩選器:</p>
+
+<pre>
+<receiever
+ android:encryptionAware="true" >
+ ...
+ <intent-filter>
+ <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
+ </intent-filter>
+</receiver>
+</pre>
+
+<p>一旦使用者將裝置解鎖,所有元件都可存取裝置加密的儲存空間與認證加密的儲存空間。
+</p>
+
+<h2 id="access">存取裝置加密的儲存空間</h2>
+
+<p>如果要存取裝置加密的儲存空間,請透過呼叫
+<code>Context.createDeviceEncryptedStorageContext()</code> 以建立第二個
+{@link android.content.Context} 實例。使用此內容建立的所有儲存 API 呼叫都可以存取裝置加密的儲存空間。
+下列範例會存取裝置加密的儲存空間並開啟現有的應用程式資料檔案:
+
+</p>
+
+<pre>
+Context directBootContext = Context.createDeviceEncryptedStorageContext();
+// Access appDataFilename that lives in device encrypted storage
+FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
+// Use inStream to read content...
+</pre>
+
+<p>只針對必須在「直接開機」模式期間存取的資訊使用裝置加密的儲存空間。不要將裝置加密的儲存空間做為一般用途的加密存放區。對於私密使用者資訊或「直接開機」模式期間不需要的加密資料,請使用認證加密的儲存空間。
+
+
+
+</p>
+
+<h2 id="notification">接收使用者解鎖的通知</h2>
+
+<p>裝置重新啟動之後,一旦使用者將裝置解鎖,您的應用程式就可以切換為存取認證加密的儲存空間,並使用倚賴使用者認證的一般系統服務。
+
+</p>
+
+<p>如果要接收裝置重新開機後使用者解鎖裝置的通知,請從執行中元件註冊 {@link android.content.BroadcastReceiver} 以接聽 <code>ACTION_USER_UNLOCKED</code> 訊息。
+
+或者,您可以接收現有的 {@link android.content.Intent#ACTION_BOOT_COMPLETED
+ACTION_BOOT_COMPLETED} 訊息,它現在可以指出裝置已開機且使用者已解鎖裝置。
+
+</p>
+
+<p>您可以透過呼叫
+<code>UserManager.isUserUnlocked()</code>,以直接查詢使用者是否已將裝置解鎖。</p>
+
+<h2 id="migrating">遷移現有資料</h2>
+
+<p>如果使用者更新其裝置來使用「直接開機」模式,您可能有現有的資料必須遷移到裝置加密的儲存空間。
+使用
+<code>Context.migrateSharedPreferencesFrom()</code> 與
+<code>Context.migrateDatabaseFrom()</code>,在認證加密的儲存空間與裝置加密的儲存空間之間遷移偏好設定與資料庫資料。
+</p>
+
+<p>決定要將哪些資料從認證加密的儲存空間遷移到裝置加密的儲存空間時,請使用最佳判斷。
+您不應該將私密使用者資訊 (例如密碼或授權權杖) 遷移到裝置加密的儲存空間。
+
+在某些情況下,您需要在這兩種加密的存放區中管理不同的資料集。
+</p>
+
+<h2 id="testing">測試您的加密感知應用程式</h2>
+
+<p>使用新的「直接開機」模式測試您的加密感知應用程式。您可以透過兩種方式啟用「直接開機」。
+</p>
+
+<p class="caution"><strong>注意:</strong>啟用「直接開機」會清除裝置上的所有使用者資料。
+</p>
+
+<p>在已安裝 Android N 的支援裝置上,執行下列其中一個動作來啟用「直接開機」:
+</p>
+
+<ul>
+<li>在裝置上,請移至 [設定] > [關於手機]<b></b>,然後點選 [Android 版本]<b></b> 7 次以啟用 [開發人員選項]<b></b> (如果尚未啟用)。
+
+當開發人員選項畫面可用時,請移至 [設定] > [開發人員選項]<b></b>,然後選取 [轉換到檔案加密]<b></b>。
+
+</li>
+<li>使用下列 adb shell 命令來啟用「直接開機」模式:
+<pre class="no-pretty-print">
+$ adb reboot-bootloader
+$ fastboot --wipe-and-use-fbe
+</pre>
+</li>
+</ul>
+
+<p>另外也提供模擬的「直接開機」模式,如果您需要在測試裝置上切換模式時即可利用。
+模擬模式應該只在開發期間使用,而且它可能造成資料遺失。
+如果要啟用模擬的「直接開機」模式,請在裝置上設定鎖定模式;設定鎖定模式時如果系統提示您設定安全啟動畫面,請選擇 [No thanks],然後使用下列 adb shell 命令:
+
+
+</p>
+
+<pre class="no-pretty-print">
+$ adb shell sm set-emulate-fbe true
+</pre>
+
+<p>如果要關閉模擬的「直接開機」模式,請使用下列命令:</p>
+
+<pre class="no-pretty-print">
+$ adb shell sm set-emulate-fbe false
+</pre>
+
+<p>使用這些命令會使得裝置重新開機。</p>
diff --git a/docs/html-intl/intl/zh-tw/training/articles/scoped-directory-access.jd b/docs/html-intl/intl/zh-tw/training/articles/scoped-directory-access.jd
new file mode 100644
index 0000000..b1c1a76
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/training/articles/scoped-directory-access.jd
@@ -0,0 +1,124 @@
+page.title=限定範圍目錄存取
+page.keywords=preview,sdk,scoped directory access
+page.tags=androidn
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>此文件內容</h2>
+ <ol>
+ <li><a href="#accessing">存取外部儲存空間目錄</a></li>
+ <li><a href="#removable">存取抽取式媒體上的目錄</a></li>
+ <li><a href="#best">最佳做法</a></li>
+ </ol>
+</div>
+</div>
+
+<p>應用程式 (例如,相片應用程式) 通常只需要存取外部儲存空間中的特定目錄,例如 <code>Pictures</code> 目錄。
+目前用來存取外部儲存空間的方式並非設計來輕鬆地為這些類型的應用程式提供已設定目標的目錄存取。
+
+例如:</p>
+
+<ul>
+<li>在您的宣示說明中要求 {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} 或 {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} 可允許存取外部儲存空間ac上的所有公用目錄,但這可能超過您應用程式所需的存取權。
+
+
+</li>
+<li>使用<a href="{@docRoot}guide/topics/providers/document-provider.html">儲存空間存取架構</a>通常會使得您的使用者透過系統 UI 挑選目錄,這在您的應用程式一律存取相同外部目錄的情況下是不必要的。
+
+
+
+</li>
+</ul>
+
+<p>Android N 提供新的簡化 API,可用來存取常用外部儲存空間目錄。
+ </p>
+
+<h2 id="accessing">存取外部儲存空間目錄</h2>
+
+<p>使用 <code>StorageManager</code> 類別來取得適當的 <code>StorageVolume</code> 實例。
+接著,透過呼叫該實例的 <code>StorageVolume.createAccessIntent()</code> 方法以建立意圖。使用此意圖來存取外部儲存空間目錄。
+
+若要取得所有可用的磁碟區 (包括抽取式媒體磁碟區) 清單,請使用 <code>StorageManager.getVolumesList()</code>。
+
+</p>
+
+<p>下列程式碼片段是一個範例,它說明如何開啟主要共用儲存空間中的 <code>Pictures</code> 目錄:
+</p>
+
+<pre>
+StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
+StorageVolume volume = sm.getPrimaryVolume();
+Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+</pre>
+
+<p>系統會嘗試授予對外部目錄的存取權,並在需要時使用簡化的 UI 向使用者確認存取權:
+</p>
+
+<img src="{@docRoot}images/android-7.0/scoped-directory-access-framed.png" srcset="{@docRoot}images/android-7.0/scoped-directory-access-framed.png 1x,
+{@docRoot}images/android-7.0/scoped-directory-access-framed_2x.png 2x" />
+<p class="img-caption"><strong>圖 1.</strong> 應用程式要求對 [圖片] 目錄的存取權。
+</p>
+
+<p>若使用者授予存取權,系統會呼叫您的 <code>onActivityResult()</code> 覆寫並傳回 <code>Activity.RESULT_OK</code> 的結果代碼,以及包含 URI 的意圖資料。
+
+使用提供的 URI 來存取目錄資訊,這類似於使用<a href="{@docRoot}guide/topics/providers/document-provider.html">儲存空間存取架構</a>所傳回的 URI。
+
+
+
+</p>
+
+<p>若使用者未授予存取權,系統會呼叫您的 <code>onActivityResult()</code> 覆寫並傳回 <code>Activity.RESULT_CANCELED</code> 的結果代碼,以及 Null 意圖資料。
+
+</p>
+
+<p class="note"><b>注意</b>:取得對特定外部目錄的存取權也會取得對該目錄之子目錄的存取權。
+</p>
+
+<h2 id="removable">存取抽取式媒體上的目錄</h2>
+
+<p>若要使用「限定範圍目錄存取」來存取抽取式媒體上的目錄,請先新增會接聽 {@link android.os.Environment#MEDIA_MOUNTED} 通知的 {@link android.content.BroadcastReceiver},例如:
+
+</p>
+
+<pre>
+<receiver
+ android:name=".MediaMountedReceiver"
+ android:enabled="true"
+ android:exported="true" >
+ <intent-filter>
+ <action android:name="android.intent.action.MEDIA_MOUNTED" />
+ <data android:scheme="file" />
+ </intent-filter>
+</receiver>
+</pre>
+
+<p>當使用者掛接抽取式媒體 (例如 SD 卡) 時,系統會傳送 {@link android.os.Environment#MEDIA_MOUNTED} 通知。
+此通知會在意圖資料中提供 <code>StorageVolume</code> 物件,讓您用來存取抽取式媒體上的目錄。
+
+下列範例會存取抽取式媒體上的 <code>Pictures</code> 目錄:
+</p>
+
+<pre>
+// BroadcastReceiver has already cached the MEDIA_MOUNTED
+// notification Intent in mediaMountedIntent
+StorageVolume volume = (StorageVolume)
+ mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
+volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+</pre>
+
+<h2 id="best">最佳做法</h2>
+
+<p>如果可能,請將外部目錄存取 URI 設定為持續性,這樣您就不需要重複地要求使用者授予存取權。
+一旦使用者授予存取權,請使用目錄存取 URI 呼叫 <code>getContentResolver().takePersistableUriPermssion()</code>。
+
+系統會將該 URI 設定為持續性,而且後續存取要求將會傳回 <code>RESULT_OK</code>,而且不會為使用者顯示確認 UI。
+
+</p>
+
+<p>若使用者拒絕對外部目錄的存取權,請勿立刻又要求存取權。
+重複堅持取得存取權會導致極差的使用者體驗。
+</p>
diff --git a/docs/html-intl/intl/zh-tw/training/articles/security-config.jd b/docs/html-intl/intl/zh-tw/training/articles/security-config.jd
new file mode 100644
index 0000000..9b42b58
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/training/articles/security-config.jd
@@ -0,0 +1,745 @@
+page.title=網路安全性設定
+page.keywords=androidn,security,network
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>此文件內容</h2>
+<ol>
+ <li><a href="#manifest">新增安全性設定檔</a></li>
+ <li><a href="#CustomTrust">自訂信任的 CA</a>
+ <ol>
+ <li><a href="#ConfigCustom">設定信任的自訂 CA</a></li>
+ <li><a href="#LimitingCas">限制信任的 CA 組</a></li>
+ <li><a href="#TrustingAdditionalCas">信任其他 CA</a></li>
+ </ol>
+ </li>
+ <li><a href="#TrustingDebugCa">僅偵錯 CA</a></li>
+ <li><a href="#UsesCleartextTraffic">退出明碼流量</a></li>
+ <li><a href="#CertificatePinning">關聯憑證</a></li>
+ <li><a href="#ConfigInheritance">設定繼承行為</a></li>
+ <li><a href="#FileFormat">設定檔案格式</a></li>
+</ol>
+</div>
+</div>
+
+
+<p>
+ Android N 包括網路安全性設定功能,讓應用程式在安全的宣告式設定檔中即可自訂網路安全性設定,而不必修改應用程式的程式碼。
+
+這些設定可以針對特定網域以及針對特定應用程式來設定。
+此功能的主要能力如下:
+
+</p>
+
+<ul>
+ <li>
+ <b>自訂信任錨點:</b>為應用程式的安全連線自訂信任的憑證授權單位 (CA)。
+例如,信任特定的自我簽署憑證,或限制應用程式信任的一組公用 CA。
+
+
+ </li>
+
+ <li>
+ <b>僅偵錯覆寫:</b>在應用程式中安全地為安全連線進行偵錯,而不會增加已安裝應用程式者的風險。
+
+ </li>
+
+ <li>
+ <b>退出明碼流量:</b>保護應用程式不受意外使用明碼流量危害。
+
+ </li>
+
+ <li>
+ <b>憑證關聯:</b>限制應用程式的安全連線只用特定憑證。
+
+ </li>
+</ul>
+
+
+<h2 id="manifest">新增安全性設定檔</h2>
+
+<p>
+ 網路安全性設定功能會使用 XML 檔案,而您為應用程式指定的設定就在此。
+您必須在應用程式的宣示說明包括一個指向這個檔案的項目。
+以下節錄自宣示說明的程式碼,示範如何建立此項目:
+
+</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+...
+<app ...>
+ <meta-data android:name="android.security.net.config"
+ android:resource="@xml/network_security_config" />
+ ...
+</app>
+</pre>
+
+<h2 id="CustomTrust">自訂信任的 CA</h2>
+
+<p>
+ 應用程式會想要信任自訂的一組 CA,而不是平台預設的 CA。
+最常見的原因如下:
+</p>
+
+<ul>
+ <li>使用 (由內部公司 CA 等所自我簽署、發行的) 自訂憑證授權單位連線至主機。
+
+ </li>
+
+ <li>限制 CA 只用您信任的那組 CA,而不是所有人預先安裝的 CA。
+
+ </li>
+
+ <li>信任系統中所未包括的其他 CA。
+ </li>
+</ul>
+
+<p>
+ 根據預設,來自所有應用程式的安全連線全都信任預先安裝的系統 CA,而目標為 API 層級 23 (Android M) 和以下版本的應用程式預設也會信任使用者新增的 CA 存放區。
+
+應用程式可以使用 {@code base-config} (針對整個應用程式自訂) 或 {@code domain-config} (針對每個網域自訂),自訂自己的連線。
+
+
+
+</p>
+
+
+<h3 id="ConfigCustom">設定自訂 CA</h3>
+
+<p>
+ 假設您想要連線的主機使用自我簽署的 SSL 憑證,或要連線的主機使用 SSL 憑證是由您信任的非公用 CA 所發行,例如您公司的內部 CA。
+
+
+</p>
+
+<p>
+ <code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/my_ca"/>
+ </trust-anchors>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+<p>
+ 將 PEM 或 DER 格式的自我簽署或非公用 CA 憑證新增至
+ {@code res/raw/my_ca}。
+</p>
+
+
+<h3 id="LimitingCas">限制信任的 CA 組</h3>
+
+<p>
+ 應用程式若不想要信任系統所信任的所有 CA,可以自行指定一組範圍較小的信任 CA。
+如此可以保護應用程式,不受任何其他 CA 所發行的詐騙憑證危害。
+
+</p>
+
+<p>
+ 限制信任的 CA 組,其設定類似於<a href="#TrustingACustomCa">信任自訂 CA</a> (針對特定網域),只不過多個 CA 都是資源所提供。
+
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">secure.example.com</domain>
+ <domain includeSubdomains="true">cdn.example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/trusted_roots"/>
+ </trust-anchors>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+<p>
+ 將 PEM 或 DER 格式的信任 CA 新增至 {@code res/raw/trusted_roots}。
+ 請注意,如果使用 PEM 格式,該檔案「只」能包含 PEM 資料,不能有額外的文字。<em></em>
+您還可以提供多個
+ <a href="#certificates"><code><certificates></code></a>
+元素,而不只一個。
+</p>
+
+
+<h3 id="TrustingAdditionalCas">
+ 信任其他 CA
+</h3>
+
+<p>
+ 應用程式會想要信任不受系統信任的其他 CA,這是因為系統尚未包括該 CA,或 CA 不符合納入 Android 系統的需求。
+
+應用程式可以為設定指定多個憑證來源,來完成此動作。
+
+
+</p>
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <base-config>
+ <trust-anchors>
+ <certificates src="@raw/extracas"/>
+ <certificates src="system"/>
+ </trust-anchors>
+ </base-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="TrustingDebugCa">設定 CA 進行偵錯</h2>
+
+<p>
+ 對透過 HTTPS 連線的應用程式進行偵錯時,您想要連線的本機開發伺服器並沒有生產伺服器的 SSL 憑證。
+
+若以不修改應用程式的程式碼為前提,為了支援此動作,您可以使用 {@code debug-overrides} 來指定僅偵錯 CA,「只」有在 <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">
+android:debuggable</a>
+ 為 {@code true} 時才予以信任。<i></i>
+
+一般來說,IDE 和建置工具會為非發行版本自動設定此旗標。
+
+</p>
+
+<p>
+ 因為應用程式商店採取的安全措施是,不接受標示為可偵錯的應用程式,所以這種方式會比條件式程式碼安全。
+
+
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <debug-overrides>
+ <trust-anchors>
+ <certificates src="@raw/debug_cas"/>
+ </trust-anchors>
+ </debug-overrides>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="UsesCleartextTraffic">退出明碼流量</h2>
+
+<p>
+ 打算只使用安全連線連線至目的地的應用程式,可以針對那些目的地退出支援明碼 (使用未加密的 HTTP 通訊協定,而非 HTTPS)。
+
+此選項有助於避免應用程式由於外部來源 (例如,後端伺服器) 提供的 URL 中發生變更,而造成意外回復。
+
+
+ 如需更多詳細資料,請參閱 {@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted
+ NetworkSecurityPolicy.isCleartextTrafficPermitted()}。
+</p>
+
+<p>
+ 例如,應用程式想要確保 的所有連線一律要透過 HTTPS 完成,以保護敏感流量不受惡意網路危害。
+
+
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config usesCleartextTraffic="false">
+ <domain includeSubdomains="true">secure.example.com</domain>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="CertificatePinning">關聯憑證</h2>
+
+<p>
+ 應用程式一般會信任所有預先安裝的 CA。若這類的任何 CA 意在發行詐騙憑證,應用程式會有遭受 MiTM 攻擊的風險。
+
+有些應用程式選擇透過限制所信任的 CA 組或關聯憑證,來限制可接受的憑證組。
+
+</p>
+
+<p>
+ 憑證關聯的方法是,透過公用金鑰的雜湊 (X.509 憑證的 SubjectPublicKeyInfo) 來提供一組憑證。
+只有當憑證鏈至少包含一個關聯的公用金鑰時,才是有效的憑證鏈。
+
+
+</p>
+
+<p>
+ 請注意,使用憑證關聯時,您務必要包括備份金鑰,這樣萬一強制您切換到新的金鑰或變更 CA (關聯到 CA 憑證或該 CA 的中繼者) 時,您的應用程式連線才不會受到影響。
+
+
+否則,您必須推出應用程式更新,才能還原連線。
+
+</p>
+
+<p>
+ 此外,可為關聯設定到期時間,只要該關聯經過多久都未執行,即為到期。
+這有助於避免未經更新的應用程式發生連線問題。
+然而,針對關聯設定到期時間,會造成略過關聯。
+
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <pin-set expiration="2018-01-01">
+ <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
+ <!-- backup pin -->
+ <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="ConfigInheritance">設定繼承行為</h2>
+
+<p>
+ 繼承的值都未設定在特定設定中。此行為允許有更複雜的設定,同時保持設定檔讓人看得懂。
+
+</p>
+
+<p>
+ 如果值未設定在特定項目中時,就會使用下一個更一般項目的值。
+如為巢狀結構,就會從上層 {@code domain-config} 取得未在 {@code domain-config} 中設定的值,或非巢狀時,則會從 {@code
+ base-config} 取得值。
+未在 {@code base-config} 中設定的值會使用平台的預設值。
+
+</p>
+
+<p>
+ 例如,假設所有連至 {@code
+ example.com} 子網域的連線都必須使用一組自訂 CA。此外,允許明碼流量送往這些網域,但連線到 {@code
+ secure.example.com} 時「除外」。
+<em></em>在 {@code example.com} 的設定內以巢狀方式排列 {@code
+ secure.example.com} 的設定,就不需要重複
+ {@code trust-anchors}。
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/my_ca"/>
+ </trust-anchors>
+ <domain-config cleartextTrafficPermitted="false">
+ <domain includeSubdomains="true">secure.example.com</domain>
+ </domain-config>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="FileFormat">設定檔案格式</h2>
+
+<p>
+ 網路安全性設定功能會使用 XML 檔案格式。
+ 下列程式碼範例顯示檔案的整體結構:
+</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <base-config>
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ </base-config>
+
+ <domain-config>
+ <domain>android.com</domain>
+ ...
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ <pin-set>
+ <pin digest="...">...</pin>
+ ...
+ </pin-set>
+ </domain-config>
+ ...
+ <debug-overrides>
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ </debug-overrides>
+</network-security-config>
+</pre>
+
+<p>
+ 下列各區段描述檔案格式的語法與其他詳細資料。
+
+</p>
+
+<h3 id="network-security-config">
+ <network-security-config>
+</h3>
+
+<dl class="xml">
+ <dt>
+ 可以包含:
+ </dt>
+
+ <dd>
+ 0 或 1 個 <code><a href="#base-config"><base-config></a></code><br>
+ 任何數目的 <code><a href=
+ "#domain-config"><domain-config></a></code><br>
+ 0 或 1 個 <code><a href="#debug-overrides"><debug-overrides></a></code>
+ </dd>
+</dl>
+
+<h3 id="base-config">
+ <base-config>
+</h3>
+
+<dl class="xml">
+ <dt>
+ 語法:
+ </dt>
+</dl>
+
+<pre class="stx">
+<base-config <a href=
+"#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
+ ...
+</base-config>
+</pre>
+<dl class="xml">
+ <dt>
+ 可以包含:
+ </dt>
+
+ <dd>
+ <code><a href="#trust-anchors"><trust-anchors></a></code>
+ </dd>
+
+ <dt>
+ 描述:
+ </dt>
+
+ <dd>
+ 連線到 <a href="#domain-config"><code>domain-config</code></a> 所未涵蓋的目的地時使用的預設設定。
+
+
+<p>
+ 任何未設定的值都會使用平台預設值。目標為 API 層級 24 和更新版本的應用程式預設設定:
+
+</p>
+
+<pre>
+<base-config usesCleartextTraffic="true">
+ <trust-anchors>
+ <certificates src="system" />
+ </trust-anchors>
+</base-config>
+</pre>
+目標為 API 層級 23 和以下版本的應用程式預設設定:
+<pre>
+<base-config usesCleartextTraffic="true">
+ <trust-anchors>
+ <certificates src="system" />
+ <certificates src="user" />
+ </trust-anchors>
+</base-config>
+</pre>
+
+ </dd>
+</dl>
+
+<h3 id="domain-config"><domain-config></h3>
+<dl class="xml">
+<dt>語法:</dt>
+<dd>
+<pre class="stx"><domain-config <a href="#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]>
+ ...
+</domain-config></pre>
+</dd>
+
+<dt>可以包含:</dt>
+
+<dd>
+1 或更多個 <code><a href="#domain"><domain></a></code>
+<br/>0 或 1 個 <code><a href="#trust-anchors"><trust-anchors></a></code>
+<br/>0 或 1 個 <code><a href="#pin-set"><pin-set></code></a>
+<br/>任何數目的巢狀 <code><domain-config></code></dd>
+
+<dt>描述</dt>
+<dd>依照 {@code domain} 元素所定義,連線至特定目的地時使用的設定。
+
+<p>請注意,如有多個 {@code domain-config} 元素涵蓋同一個目的地,則會使用含有最明確 (最長) 比對網域規則的設定。
+</p></dd>
+</dl>
+
+
+<h3 id="domain"><domain></h3>
+
+<dl class="xml">
+ <dt>
+ 語法:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<domain includeSubdomains=["true" | "false"]>example.com</domain>
+</pre>
+ </dd>
+
+ <dt>
+ 屬性:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code includeSubdomains}
+ </dt>
+
+ <dd>
+ 如為 {@code "true"},表示此網域規則會比對網域和所有子網域,包括子網域的子網域在內,反之此規則只會套用到完全相符者。
+
+
+ </dd>
+ </dl>
+ </dd>
+
+ <dt>
+ 描述:
+ </dt>
+</dl>
+
+<h3 id="debug-overrides"><debug-overrides></h3>
+
+<dl class="xml">
+ <dt>
+ 語法:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<debug-overrides>
+ ...
+</debug-overrides>
+</pre>
+ </dd>
+
+ <dt>
+ 可以包含:
+ </dt>
+
+ <dd>
+ 0 或 1 個 <code><a href="#trust-anchors"><trust-anchors></a></code>
+ </dd>
+
+ <dt>
+ 描述:
+ </dt>
+
+ <dd>
+ 當 <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
+ 為 {@code "true"} (一般是在非發行版本由 IDE 與建置工具產生的情況下) 時所要套用的覆寫。
+{@code
+ debug-overrides} 中指定的信任錨點會新增至所有其他連線,而當伺服器的憑證鏈使用其中一個僅偵錯信任錨點時,即不會執行憑證關聯。
+
+如果 <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
+ 為 {@code "false"},就會完全略過這個區段。
+ </dd>
+</dl>
+
+<h3 id="trust-anchors"><trust-anchors></h3>
+<dl class="xml">
+ <dt>
+ 語法:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<trust-anchors>
+...
+</trust-anchors>
+</pre>
+ </dd>
+
+ <dt>
+ 可以包含:
+ </dt>
+
+ <dd>
+ 任何數目的 <code><a href="#certificates"><certificates></a></code>
+ </dd>
+
+ <dt>
+ 描述:
+ </dt>
+
+ <dd>
+ 可供安全連線使用的信任錨點組。
+ </dd>
+</dl>
+
+
+<h3 id="certificates"><certificates></h3>
+<dl class="xml">
+<dt>語法:</dt>
+<dd><pre class="stx"><certificates src=["system" | "user" | "<i>raw resource</i>"]
+ overridePins=["true" | "false"] />
+</pre></dd>
+<dt>描述:</dt>
+<dd>可供 {@code trust-anchors} 元素使用的 X.509 憑證組。</dd>
+
+<dt>屬性:</dt>
+<dd><dl class="attr">
+<dt>{@code src}</dt>
+<dd>
+CA 憑證的來源,可以是其中一個原始資源識別碼,其指向含有 X.509 憑證的檔案。
+<ul>
+ <li>
+ 憑證必須以 DER 或 PEM 格式編碼。如為 PEM 憑證,檔案中「不可」包含非 PEM 的額外資料,例如註解。
+<em></em>
+
+ </li>
+
+ <li>{@code "system"} 代表預先安裝的系統 CA 憑證
+ </li>
+
+ <li>{@code "user"} 代表使用者新增的 CA 憑證
+ </li>
+</ul>
+</dd>
+
+<dt>{@code overridePins}</dt>
+<dd>
+ <p>
+ 指定來自此來源的 CA 是否要略過憑證關聯。如為 {@code
+ "true"},憑證鏈的鏈結若經過此來源的其中一個 CA,就不會執行關聯。
+這對偵錯 CA 會很實用,或支援讓使用者 MiTM 應用程式的安全流量。
+
+ </p>
+
+ <p>
+ 預設為 {@code "false"},除非您在 {@code debug-overrides}
+ 元素中指定,而那種情況的預設為 {@code "true"}。
+ </p>
+</dd>
+</dl>
+</dd>
+
+
+<h3 id="pin-set"><pin-set></h3>
+
+<dl class="xml">
+ <dt>
+ 語法:
+ </dt>
+
+ <dd>
+<pre class="stx">
+<pin-set expiration="date">
+...
+</pin-set>
+</pre>
+ </dd>
+
+ <dt>
+ 可以包含:
+ </dt>
+
+ <dd>
+ 任何數目的 <code><a href="#pin"><pin></a></code>
+ </dd>
+
+ <dt>
+ 描述:
+ </dt>
+
+ <dd>
+ 一組公用金鑰關聯。信任鏈中的其中一個公用金鑰必須要在這組關聯中,才是可信任的安全連線。
+如需關聯的格式,請參閱
+ <code><a href="#pin"><pin></a></code>。
+ </dd>
+
+ <dt>
+ 屬性:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code expiration}
+ </dt>
+
+ <dd>
+ 到期之後就會停用關聯的日期,格式為 {@code yyyy-MM-dd}。
+如果未設定屬性,關聯就不會到期。
+
+ <p>
+ 到期有助於避免因使用者停用應用程式更新,而無法取得關聯組更新的應用程式發生連線問題。
+
+
+ </p>
+ </dd>
+ </dl>
+ </dd>
+</dl>
+
+<h3 id="pin"><pin></h3>
+<dl class="xml">
+ <dt>
+ 語法:
+ </dt>
+
+ <dd>
+<pre class="stx">
+<pin digest=["SHA-256"]>base64 encoded digest of X.509
+ SubjectPublicKeyInfo (SPKI)</pin>
+</pre>
+ </dd>
+
+ <dt>
+ 屬性:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code digest}
+ </dt>
+
+ <dd>
+ 用來產生關聯的摘要演算法。目前僅支援
+ {@code "SHA-256"}。
+ </dd>
+ </dl>
+ </dd>
+</dl>
diff --git a/docs/html-intl/intl/zh-tw/training/tv/playback/picture-in-picture.jd b/docs/html-intl/intl/zh-tw/training/tv/playback/picture-in-picture.jd
new file mode 100644
index 0000000..e643f65d
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/training/tv/playback/picture-in-picture.jd
@@ -0,0 +1,186 @@
+page.title=子母畫面
+page.keywords=preview,sdk,PIP,Picture-in-picture
+page.tags=androidn
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>此文件內容</h2>
+<ol>
+ <li><a href="#declaring">宣告您的活動支援子母畫面</a>
+</li>
+ <li><a href="#pip_button">將您的活動切換到子母畫面</a>
+</li>
+ <li><a href="#handling_ui">處理子母畫面模式中的 UI</a>
+</li>
+ <li><a href="#continuing_playback">在子母畫面模式中繼續播放影片</a>
+</li>
+ <li><a href="#best">最佳做法</a></li>
+</ol>
+
+<h2>另請參閱</h2>
+<ol>
+ <li><a href="{@docRoot}preview/features/multi-window.html">多視窗支援</a>
+</li>
+</ol>
+
+</div>
+</div>
+
+<p>在 Android N 中,Android TV 使用者現在可以在應用程式內瀏覽時,同時觀賞螢幕角色中釘選視窗中的影片。
+
+子母畫面 (PIP) 模式讓應用程式在釘選視窗中執行影片活動,同時讓另一個活動在背景持續進行。
+
+PIP 視窗讓使用者在使用您的應用程式時同時多工處理,協助提高使用者的生產力。
+</p>
+
+<p>您的應用程式可決定何時觸發 PIP 模式。以下是一些何時進入 PIP 模式的範例:
+</p>
+
+<ul>
+<li>當使用者從影片返回瀏覽其他內容,您的應用程式可以將影片移入 PIP 模式。
+</li>
+<li>當使用者觀看到影片內容的結尾時,您的應用程式可將影片切換到 PIP 模式。
+主畫面顯示系列中下一集的預告或摘要資訊時。
+</li>
+<li>您的應用程式可以為使用者提供一個觀賞影片時佇列其他內容的方式。
+當主畫面顯示內容選擇活動時,影片繼續在 PIP 模式中播放。
+</li>
+</ul>
+
+<p>PIP 視窗為 240x135 dp,在系統所選的螢幕上四個角落之一的最上層顯示。
+使用者只要按住遙控器上的 <b>Home</b> 按鈕,即可帶出 PIP 選單,讓他們將 PIP 視窗切換成全螢幕或關閉 PIP 視窗。
+
+如果另一個影片開始在主畫面上播放,會自動關閉 PIP 視窗。
+
+使用者也可以透過 Recents 關閉 PIP 視窗。</p>
+
+<img src="{@docRoot}images/android-7.0/pip-active.png" />
+<p class="img-caption"><strong>圖 1.</strong> 當使用者瀏覽主畫面上的內容時,可看到螢幕角落的子母畫面中的影片。
+
+</p>
+
+<p>PIP 利用 Android N 中提供的多視窗 API 來提供釘選影片疊加層視窗。
+若要將 PIP 新增到您的應用程式,您需要註冊支援 PIP 的活動,在需要時將活動切換到 PIP 模式,以及確定活動在 PIP 模式時會隱藏 UI 元素且影片繼續播放。
+
+
+</p>
+
+<h2 id="declaring">宣告您的活動支援子母畫面</h2>
+
+<p>根據預設,系統不會自動為應用程式支援 PIP。如果您想要應用程式 PIP,請將
+<code>android:supportsPictureInPicture</code> 和
+<code>android:resizeableActivity</code> 設定成 <code>true</code>,在宣示說明中註冊影片活動。
+
+另外也請指定您的活動處理版面配置設定變更,如此一來,在 PIP 模式轉換期間版面配置變更時,才不會重新啟動您的活動。
+
+</p>
+
+<pre>
+<activity android:name="VideoActivity"
+ android:resizeableActivity="true"
+ android:supportsPictureInPicture="true"
+ android:configChanges=
+ "screenSize|smallestScreenSize|screenLayout|orientation"
+ ...
+</pre>
+
+<p>註冊您的活動時,請記住在 PIP 模式中,您的活動會顯示在電視螢幕上小的疊加層視窗中。
+顯示最少 UI 的影片播放活動可提供最佳的使用者體驗。
+包含小型 UI 元素的活動在切換到 PIP 模式時無法提供出色的使用者體驗,因為使用者在 PIP 視窗中看不到 UI 元素的詳細資訊。
+
+
+</p>
+
+<h2 id="pip_button">將您的活動切換到子母畫面</h2>
+
+您需要將活動切換到 PIP 模式時,請呼叫
+<code>Activity.enterPictureInPicture()</code>。下列範例會在使用者選取媒體控制列上的專用 PIP 按鈕時切換到 PIP 模式:
+
+</p>
+
+<pre>
+@Override
+public void onActionClicked(Action action) {
+ if (action.getId() == R.id.lb_control_picture_in_picture) {
+ getActivity().enterPictureInPicture();
+ return;
+ }
+ ...
+</pre>
+
+<p>將 PIP 按鈕新增到媒體控制列,可讓您的使用者在控制影片播放時輕鬆地切換到 PIP 模式。
+</p>
+
+<img src="{@docRoot}images/android-7.0/pip-button.png" />
+<p class="img-caption"><strong>圖 1.</strong> 媒體控制列上的子母畫面按鈕。
+</p>
+
+<p>Android N 包含新的
+<code>PlaybackControlsRow.PictureInPictureAction</code> 類別,它可定義控制列 PIP 動作和使用 PIP 圖示。
+</p>
+
+<h2 id="handling_ui">處理子母畫面模式中的 UI</h2>
+
+<p>當您的活動進入 PIP 模式時,您的活動應該只播放影片。
+在您的活動進入 PIP 時移除 UI 元素,並在您的活動重新進入全螢幕時還原這些元素。覆寫 <code>Activity.onPictureInPictureChanged()</code> 或
+<code>Fragment.onPictureInPictureChanged()</code> 並依需要啟用或停用 UI 元素,例如:
+
+
+</p>
+
+<pre>
+@Override
+public void onPictureInPictureChanged(boolean inPictureInPicture) {
+ if (inPictureInPicture) {
+ // Hide the controls in picture-in-picture mode.
+ ...
+ } else {
+ // Restore the playback UI based on the playback status.
+ ...
+ }
+}
+</pre>
+
+<h2 id="continuing_playback">在子母畫面模式中繼續播放影片
+</h2>
+
+<p>當您的活動切換到 PIP 時,系統會將活動視為暫停狀態並呼叫您活動的 <code>onPause()</code> 方法。
+影片播放不應該暫停,而且活動因為 PIP 模式而暫停時,影片應該繼續播放。
+
+查看您活動的
+<code>onPause()</code> 方法中的 PIP 並適當地處理播放,例如:
+</p>
+
+<pre>
+@Override
+public void onPause() {
+ // If called due to PIP, do not pause playback
+ if (inPictureInPicture()) {
+ // Continue playback
+ ...
+ }
+ // If paused but not in PIP, pause playback if necessary
+ ...
+}
+</pre>
+
+<p>當您的活動從 PIP 模式切換回全螢幕模式時,系統會繼續您的活動並呼叫您的 <code>onResume()</code>方法。
+</p>
+
+<h2 id="best">最佳做法</h2>
+
+<p>PIP 主要針對播放全螢幕影片的活動。將您的活動切換到 PIP 模式時,避免顯示影片內容以外的任何項目。追蹤當您的活動進入 PIP 模式時隱藏 UI 元素,如<a href="#handling_ui">處理子母畫面模式中的 UI</a> 中所述。
+
+
+</p>
+
+<p>因為 PIP 視窗會在螢幕角落上以浮動視窗顯示,所以您應該避免在主畫面上 PIP 視窗可能遮蓋的任何地方顯示重要資訊。
+
+</p>
+
+<p>當活動處於 PIP 模式時,預設它不會取得輸入焦點。若要在處於 PIP 模式時接收輸入事件,請使用
+<code>MediaSession.setMediaButtonReceiver()</code>。
+</p>
diff --git a/docs/html-intl/intl/zh-tw/training/tv/tif/content-recording.jd b/docs/html-intl/intl/zh-tw/training/tv/tif/content-recording.jd
new file mode 100644
index 0000000..8b3a5ce
--- /dev/null
+++ b/docs/html-intl/intl/zh-tw/training/tv/tif/content-recording.jd
@@ -0,0 +1,121 @@
+page.title=電視錄製
+page.keywords=preview,sdk,tv,recording
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>此文件內容</h2>
+ <ol>
+ <li><a href="#supporting">指出錄製支援</a></li>
+ <li><a href="#recording">錄製工作階段</a></li>
+ <li><a href="#errors">處理錄製錯誤</a></li>
+ <li><a href="#sessions">管理已錄製的工作階段</a></li>
+ <li><a href="#best">最佳做法</a></li>
+ </ol>
+</div>
+</div>
+
+<p>電視輸入服務可讓使用者透過時間位移 API 來暫停及繼續頻道播放。
+Android N 透過讓使用者儲存多個已錄製的工作階段,以延伸時間位移功能。
+</p>
+
+<p>使用者可以事先排定錄製作業,或在觀看節目時開始錄製。
+一旦系統儲存錄製的內容,使用者可以使用系統電視應用程式來瀏覽、管理及播放錄製的內容。
+</p>
+
+<p>如果要為您的電視輸入服務提供錄製功能,您必須向系統指出您的應用程式支援錄製、實作錄製節目的功能、處理及溝通錄製期間可能發生的任何錯誤,以及管理您已錄製的工作階段。
+
+
+</p>
+
+<h2 id="supporting">指出錄製支援</h2>
+
+<p>若要告訴系統您的電視輸入服務支援錄製,請依照這些步驟執行:
+</p>
+
+<ol>
+<li>在您的 <code>TvInputService.onCreate()</code> 方法中,使用 <code>TvInputInfo.Builder</code> 類別建立新的 <code>TvInputInfo</code> 物件。
+
+</li>
+<li>建立新的 <code>TvInputInfo</code> 物件時,在呼叫 <code>build()</code> 之前先呼叫 <code>setCanRecord(true)</code>,以指出您的服務支援錄製。
+
+</li>
+<li>透過呼叫 <code>TvInputService.updateTvInputInfo()</code>,以向系統註冊您的 <code>TvInputInfo</code> 物件。
+</li>
+</ol>
+
+<h2 id="recording">錄製工作階段</h2>
+
+<p>在您的電視輸入服務註冊並告訴系統它支援錄製功能之後,系統會在需要存取您應用程式的錄製實作時呼叫您的 <code>TvInputService.onCreateRecordingSession()</code>。
+
+
+實作您自己的 <code>TvInputService.RecordingSession</code> 子類別,並在 <code>onCreateRecordingSession()</code> 回呼引發時傳回它。
+
+
+此子類別負責切換到正確的頻道資料、錄製要求的資料,並和系統溝通錄製狀態與錯誤。
+
+</p>
+
+<p>當系統透過傳入頻道 URI 以呼叫 <code>RecordingSession.onTune()</code> 時,會轉台到 URI 指定的頻道。
+透過呼叫 <code>notifyTuned()</code> 以通知系統您的應用程式已轉台到想要的頻道,或者,若您的應用程式無法轉台到適當的頻道,則呼叫 <code>notifyError()</code>。
+
+
+</p>
+
+<p>接著,系統會呼叫 <code>RecordingSession.onStartRecording()</code> 回呼。
+您的應用程式必須立即開始錄製。當系統呼叫此回呼時,它可能會提供包含將錄製之節目相關資訊的 URI。
+
+當錄製完成時,您必須將此資料複製到 <code>RecordedPrograms</code> 資料表格。
+</p>
+
+<p>最後,系統會呼叫 <code>RecordingSession.onStopRecording()</code>。此時,您的應用程式必須立即停止錄製。
+您也必須在 <code>RecordedPrograms</code> 表格中建立一個項目。
+此項目應該在 <code>RecordedPrograms.COLUMN_RECORDING_DATA_URI</code> 欄中包括已錄製的工作階段資料 URI,以及系統在對 <code>onStartRecording()</code> 的初始呼叫中提供的任何節目資訊。
+
+
+
+</p>
+
+<p>如需有關如何存取 <code>RecordedPrograms</code> 表格的詳細資料,請參閱<a href="#sessions">管理已錄製的工作階段</a>。
+</p>
+
+<h2 id="errors">處理錄製錯誤</h2>
+
+<p>如果錄製期間發生錯誤,造成已錄製的資料無法使用,請透過呼叫 <code>RecordingSession.notifyError()</code> 以通知系統。同樣地,您可以在建立錄製工作階段之後呼叫 <code>notifyError()</code>,以讓系統知道您的應用程式已無法再錄製工作階段。
+
+
+</p>
+
+<p>如果錄製期間發生錯誤,但您想要提供可用的部分錄製內容給使用者播放,請呼叫 <code>RecordingSession.notifyRecordingStopped()</code> 以讓系統使用該部分工作階段。
+
+
+</p>
+
+<h2 id="sessions">管理已錄製的工作階段</h2>
+
+<p>系統會從 <code>TvContract.RecordedPrograms</code> 內容提供者表格中所有支援錄製頻道的應用程式維護所有已錄製之工作階段的資訊。
+
+此資訊可透過 <code>RecordedPrograms.Uri</code> 內容 URI 來存取。
+使用內容提供者 API 來讀取、新增及刪除此表格中的項目。
+</p>
+
+<p>如需有關處理內容提供者資料的詳細資訊,請參閱<a href="{@docRoot}guide/topics/providers/content-provider-basics.html">內容提供者基礎知識</a>。
+
+</p>
+
+<h2 id="best">最佳做法</h2>
+
+<p>電視裝置的儲存空間可能有限,因此在配置儲存空間以儲存已錄製的工作階段時,請使用最佳判斷。
+當可用空間不足而無法儲存已錄製的工作階段時,請使用 <code>RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)</code>。
+
+</p>
+
+<p>當使用者起始錄製時,您應該儘快開始錄製資料。
+如果要加快此程序,請在系統呼叫 <code>onCreateRecordingSession()</code> 回呼時完成所有初期耗時工作 (例如,存取及配置儲存空間)。
+
+這樣做可讓您在 <code>onStartRecording()</code> 回呼引發時立即開始錄製。
+
+</p>
diff --git a/docs/html/_project.yaml b/docs/html/_project.yaml
new file mode 100644
index 0000000..a67469b
--- /dev/null
+++ b/docs/html/_project.yaml
@@ -0,0 +1,5 @@
+name: "Home"
+home_url: /
+description: "Android Developers website."
+content_license: cc3-apache2
+buganizer_id: 30209417
diff --git a/docs/html/_redirects.yaml b/docs/html/_redirects.yaml
index 7391af8..0f117ae 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,69 +1153,131 @@
# 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
# Android Studio help button redirects
- from: /r/studio-ui/vector-asset-studio.html
- to: /studio/write/vector-asset-studio.html?utm_medium=android-studio
+ to: /studio/write/vector-asset-studio.html?utm_source=android-studio
- from: /r/studio-ui/image-asset-studio.html
- to: /studio/write/image-asset-studio.html?utm_medium=android-studio
+ to: /studio/write/image-asset-studio.html?utm_source=android-studio
- from: /r/studio-ui/project-structure.html
- to: /studio/projects/index.html?utm_medium=android-studio
+ to: /studio/projects/index.html?utm_source=android-studio
- from: /r/studio-ui/android-monitor.html
- to: /studio/profile/android-monitor.html?utm_medium=android-studio
+ to: /studio/profile/android-monitor.html?utm_source=android-studio
- from: /r/studio-ui/am-logcat.html
- to: /studio/debug/am-logcat.html?utm_medium=android-studio
+ to: /studio/debug/am-logcat.html?utm_source=android-studio
- from: /r/studio-ui/am-memory.html
- to: /studio/profile/am-memory.html?utm_medium=android-studio
+ to: /studio/profile/am-memory.html?utm_source=android-studio
- from: /r/studio-ui/am-cpu.html
- to: /studio/profile/am-cpu.html?utm_medium=android-studio
+ to: /studio/profile/am-cpu.html?utm_source=android-studio
- from: /r/studio-ui/am-gpu.html
- to: /studio/profile/am-gpu.html?utm_medium=android-studio
+ to: /studio/profile/am-gpu.html?utm_source=android-studio
- from: /r/studio-ui/am-network.html
- to: /studio/profile/am-network.html?utm_medium=android-studio
+ to: /studio/profile/am-network.html?utm_source=android-studio
- from: /r/studio-ui/am-hprof.html
- to: /studio/profile/am-hprof.html?utm_medium=android-studio
+ to: /studio/profile/am-hprof.html?utm_source=android-studio
- from: /r/studio-ui/am-allocation.html
- to: /studio/profile/am-allocation.html?utm_medium=android-studio
+ to: /studio/profile/am-allocation.html?utm_source=android-studio
- from: /r/studio-ui/am-methodtrace.html
- to: /studio/profile/am-methodtrace.html?utm_medium=android-studio
+ to: /studio/profile/am-methodtrace.html?utm_source=android-studio
- from: /r/studio-ui/am-sysinfo.html
- to: /studio/profile/am-sysinfo.html?utm_medium=android-studio
+ to: /studio/profile/am-sysinfo.html?utm_source=android-studio
- from: /r/studio-ui/am-screenshot.html
- to: /studio/debug/am-screenshot.html?utm_medium=android-studio
+ to: /studio/debug/am-screenshot.html?utm_source=android-studio
- from: /r/studio-ui/am-video.html
- to: /studio/debug/am-video.html?utm_medium=android-studio
+ to: /studio/debug/am-video.html?utm_source=android-studio
- from: /r/studio-ui/avd-manager.html
- to: /studio/run/managing-avds.html?utm_medium=android-studio
+ to: /studio/run/managing-avds.html?utm_source=android-studio
- from: /r/studio-ui/rundebugconfig.html
- to: /studio/run/rundebugconfig.html?utm_medium=android-studio
+ to: /studio/run/rundebugconfig.html?utm_source=android-studio
- from: /r/studio-ui/devicechooser.html
- to: /studio/run/emulator.html?utm_medium=android-studio
+ to: /studio/run/emulator.html?utm_source=android-studio
- from: /r/studio-ui/virtualdeviceconfig.html
- to: /studio/run/managing-avds.html?utm_medium=android-studio
+ to: /studio/run/managing-avds.html?utm_source=android-studio
- from: /r/studio-ui/emulator.html
- to: /studio/run/emulator.html?utm_medium=android-studio
+ to: /studio/run/emulator.html?utm_source=android-studio
- from: /r/studio-ui/instant-run.html
- to: /studio/run/index.html?utm_medium=android-studio#instant-run
+ to: /studio/run/index.html?utm_source=android-studio#instant-run
- from: /r/studio-ui/test-recorder.html
- to: http://tools.android.com/tech-docs/test-recorder
+ to: /studio/test/espresso-test-recorder.html?utm_source=android-studio
- from: /r/studio-ui/export-licenses.html
to: http://tools.android.com/tech-docs/new-build-system/license
- from: /r/studio-ui/experimental-to-stable-gradle.html
to: http://tools.android.com/tech-docs/new-build-system/gradle-experimental/experimental-to-stable-gradle
- from: /r/studio-ui/sdk-manager.html
- to: /studio/intro/update.html?utm_medium=android-studio#sdk-manager
+ to: /studio/intro/update.html?utm_source=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_source=android-studio
- from: /r/studio-ui/menu-help.html
- to: /studio/intro/index.html?utm_medium=android-studio
+ to: /studio/intro/index.html?utm_source=android-studio
- from: /r/studio-ui/menu-start.html
- to: /training/index.html?utm_medium=android-studio
+ to: /training/index.html?utm_source=android-studio
+- from: /r/studio-ui/run-with-work-profile.html
+ to: /studio/run/index.html?utm_source=android-studio#ir-work-profile
+- from: /r/studio-ui/am-gpu-debugger.html
+ to: /studio/profile/am-gpu.html?utm_source=android-studio
+- from: /r/studio-ui/theme-editor.html
+ to: /studio/write/theme-editor.html?utm_source=android-studio
+- from: /r/studio-ui/translations-editor.html
+ to: /studio/write/translations-editor.html?utm_source=android-studio
+- from: /r/studio-ui/debug.html
+ to: /studio/debug/index.html?utm_source=android-studio
+- from: /r/studio-ui/run.html
+ to: /studio/run/index.html?utm_source=android-studio
+- from: /r/studio-ui/layout-editor.html
+ to: /studio/write/layout-editor.html?utm_source=android-studio
+- from: /r/studio-ui/project-window.html
+ to: /studio/projects/index.html?utm_source=android-studio
+- from: /r/studio-ui/lint-inspection-results.html
+ to: /studio/write/lint.html?utm_source=android-studio
+- from: /r/studio-ui/gradle-console.html
+ to: /studio/run/index.html?utm_source=android-studio#gradle-console
+
+# Redirects from (removed) N Preview documentation
+- from: /preview/features/afw.html
+ to: https://developers.google.com/android/work/overview
+- from: /preview/features/multi-window.html
+ to: /guide/topics/ui/multi-window.html
+- from: /preview/features/icu4j-framework.html
+ to: /guide/topics/resources/icu4j-framework.html
+- from: /preview/features/key-attestation.html
+ to: /training/articles/security-key-attestation.html
+- from: /preview/features/security-config.html
+ to: /training/articles/security-config.html
+- from: /preview/features/picture-in-picture.html
+ to: /training/tv/playback/picture-in-picture.html
+- from: /preview/features/tv-recording-api.html
+ to: /training/tv/tif/content-recording.html
+- from: /preview/features/direct-boot.html
+ to: /training/articles/direct-boot.html
+- from: /preview/features/scoped-folder-access.html
+ to: /training/articles/scoped-directory-access.html
+- from: /preview/features/notification-updates.html
+ to: /guide/topics/ui/notifiers/notifications.html
+- from: /preview/features/multilingual-support.html
+ to: /guide/topics/resources/multilingual-support.html
+- from: /preview/j8-jack.html
+ to: /guide/platform/j8-jack.html
+- from: /about/versions/marshmallow/samples.html
+ to: /about/versions/marshmallow/android-6.0-samples.html
+- from: /preview/behavior-changes.html
+ to: /about/versions/nougat/android-7.0-changes.html
+- from: /preview/samples.html
+ to: /about/versions/nougat/android-7.0-samples.html
+- from: /preview/guide.html
+ to: /about/versions/nougat/index.html
+- from: /preview/api-overview.html
+ to: /about/versions/nougat/android-7.0.html
+- from: /preview/index.html
+ to: /about/versions/nougat/index.html
+- from: /preview/features/background-optimization.html
+ to: /topic/performance/background-optimization.html
+- from: /preview/features/data-saver.html
+ to: /training/basics/network-ops/data-saver.html
\ No newline at end of file
diff --git a/docs/html/about/_book.yaml b/docs/html/about/_book.yaml
index fdbe53f..642113b 100644
--- a/docs/html/about/_book.yaml
+++ b/docs/html/about/_book.yaml
@@ -1,4 +1,69 @@
toc:
+- title: Nougat
+ path: /about/versions/nougat/index.html
+ section:
+ - title: Android 7.0 for Developers
+ path: /about/versions/nougat/android-7.0.html
+ 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
+ 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
section:
@@ -7,7 +72,9 @@
- title: Android 6.0 Changes
path: /about/versions/marshmallow/android-6.0-changes.html
- title: Android 6.0 Samples
- path: /about/versions/marshmallow/samples.html
+ path: /about/versions/marshmallow/android-6.0-samples.html
+ - title: Android 6.0 Testing
+ path: /about/versions/marshmallow/android-6.0-testing.html
- title: Lollipop
path: /about/versions/lollipop.html
diff --git a/docs/html/about/_project.yaml b/docs/html/about/_project.yaml
new file mode 100644
index 0000000..160cf55
--- /dev/null
+++ b/docs/html/about/_project.yaml
@@ -0,0 +1,5 @@
+name: "Android"
+home_url: /about/
+description: "Android, the world's most popular mobile platform"
+content_license: cc3-apache2
+buganizer_id: 30209417
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/dashboards/index.jd b/docs/html/about/dashboards/index.jd
index f5d23e8..2721c85 100644
--- a/docs/html/about/dashboards/index.jd
+++ b/docs/html/about/dashboards/index.jd
@@ -59,7 +59,7 @@
</div>
-<p style="clear:both"><em>Data collected during a 7-day period ending on August 1, 2016.
+<p style="clear:both"><em>Data collected during a 7-day period ending on September 5, 2016.
<br/>Any versions with less than 0.1% distribution are not shown.</em>
</p>
@@ -81,7 +81,7 @@
</div>
-<p style="clear:both"><em>Data collected during a 7-day period ending on August 1, 2016.
+<p style="clear:both"><em>Data collected during a 7-day period ending on September 5, 2016.
<br/>Any screen configurations with less than 0.1% distribution are not shown.</em></p>
@@ -101,7 +101,7 @@
<img alt="" style="float:right"
-src="//chart.googleapis.com/chart?chl=GL%202.0%7CGL%203.0%7CGL%203.1&chf=bg%2Cs%2C00000000&chd=t%3A46.0%2C42.6%2C11.4&chco=c4df9b%2C6fad0c&cht=p&chs=400x250">
+src="//chart.googleapis.com/chart?chl=GL%202.0%7CGL%203.0%7CGL%203.1&chf=bg%2Cs%2C00000000&chd=t%3A44.9%2C42.3%2C12.8&chco=c4df9b%2C6fad0c&cht=p&chs=400x250">
<p>To declare which version of OpenGL ES your application requires, you should use the {@code
android:glEsVersion} attribute of the <a
@@ -119,21 +119,21 @@
</tr>
<tr>
<td>2.0</td>
-<td>46.0%</td>
+<td>44.9%</td>
</tr>
<tr>
<td>3.0</td>
-<td>42.6%</td>
+<td>42.3%</td>
</tr>
<tr>
<td>3.1</td>
-<td>11.4%</td>
+<td>12.8%</td>
</tr>
</table>
-<p style="clear:both"><em>Data collected during a 7-day period ending on August 1, 2016</em></p>
+<p style="clear:both"><em>Data collected during a 7-day period ending on September 5, 2016</em></p>
@@ -147,19 +147,19 @@
"Large": {
"hdpi": "0.5",
"ldpi": "0.2",
- "mdpi": "4.3",
+ "mdpi": "4.1",
"tvdpi": "2.1",
"xhdpi": "0.5"
},
"Normal": {
- "hdpi": "40.0",
- "mdpi": "3.8",
- "tvdpi": "0.1",
- "xhdpi": "27.3",
+ "hdpi": "39.5",
+ "mdpi": "3.5",
+ "tvdpi": "0.2",
+ "xhdpi": "28.4",
"xxhdpi": "15.5"
},
"Small": {
- "ldpi": "1.8"
+ "ldpi": "1.6"
},
"Xlarge": {
"hdpi": "0.3",
@@ -167,8 +167,8 @@
"xhdpi": "0.7"
}
},
- "densitychart": "//chart.googleapis.com/chart?chd=t%3A2.0%2C11.0%2C2.2%2C40.8%2C28.5%2C15.5&chf=bg%2Cs%2C00000000&chl=ldpi%7Cmdpi%7Ctvdpi%7Chdpi%7Cxhdpi%7Cxxhdpi&cht=p&chs=400x250&chco=c4df9b%2C6fad0c",
- "layoutchart": "//chart.googleapis.com/chart?chd=t%3A3.9%2C7.6%2C86.7%2C1.8&chf=bg%2Cs%2C00000000&chl=Xlarge%7CLarge%7CNormal%7CSmall&cht=p&chs=400x250&chco=c4df9b%2C6fad0c"
+ "densitychart": "//chart.googleapis.com/chart?chl=ldpi%7Cmdpi%7Ctvdpi%7Chdpi%7Cxhdpi%7Cxxhdpi&chd=t%3A1.8%2C10.5%2C2.3%2C40.4%2C29.6%2C15.5&chf=bg%2Cs%2C00000000&chco=c4df9b%2C6fad0c&cht=p&chs=400x250",
+ "layoutchart": "//chart.googleapis.com/chart?chl=Xlarge%7CLarge%7CNormal%7CSmall&chd=t%3A3.9%2C7.4%2C87.2%2C1.6&chf=bg%2Cs%2C00000000&chco=c4df9b%2C6fad0c&cht=p&chs=400x250"
}
];
@@ -176,7 +176,7 @@
var VERSION_DATA =
[
{
- "chart": "//chart.googleapis.com/chart?chd=t%3A0.1%2C1.7%2C1.6%2C16.7%2C29.2%2C35.5%2C15.2&chf=bg%2Cs%2C00000000&chl=Froyo%7CGingerbread%7CIce%20Cream%20Sandwich%7CJelly%20Bean%7CKitKat%7CLollipop%7CMarshmallow&cht=p&chs=500x250&chco=c4df9b%2C6fad0c",
+ "chart": "//chart.googleapis.com/chart?chl=Froyo%7CGingerbread%7CIce%20Cream%20Sandwich%7CJelly%20Bean%7CKitKat%7CLollipop%7CMarshmallow&chd=t%3A0.1%2C1.5%2C1.4%2C15.6%2C27.7%2C35.0%2C18.7&chf=bg%2Cs%2C00000000&chco=c4df9b%2C6fad0c&cht=p&chs=500x250",
"data": [
{
"api": 8,
@@ -186,47 +186,47 @@
{
"api": 10,
"name": "Gingerbread",
- "perc": "1.7"
+ "perc": "1.5"
},
{
"api": 15,
"name": "Ice Cream Sandwich",
- "perc": "1.6"
+ "perc": "1.4"
},
{
"api": 16,
"name": "Jelly Bean",
- "perc": "6.0"
+ "perc": "5.6"
},
{
"api": 17,
"name": "Jelly Bean",
- "perc": "8.3"
+ "perc": "7.7"
},
{
"api": 18,
"name": "Jelly Bean",
- "perc": "2.4"
+ "perc": "2.3"
},
{
"api": 19,
"name": "KitKat",
- "perc": "29.2"
+ "perc": "27.7"
},
{
"api": 21,
"name": "Lollipop",
- "perc": "14.1"
+ "perc": "13.1"
},
{
"api": 22,
"name": "Lollipop",
- "perc": "21.4"
+ "perc": "21.9"
},
{
"api": 23,
"name": "Marshmallow",
- "perc": "15.2"
+ "perc": "18.7"
}
]
}
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 ffca6b6..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>
@@ -289,7 +289,7 @@
<ul>
<li>New <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
- <supports-screens>}</a> element lets you specify the device screen sizes that your
+ <supports-screens>}</a> element lets you specify the device screen sizes that your
application is designed and tested to support, where "size" is a combination
of resolution and density. If your application is run on a device whose screen
size is not specified in the <code><supports-screen></code> element, the system
@@ -324,7 +324,7 @@
</p>
</li>
- <li>New <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
+ <li>New <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
element lets an application specify hardware (or other)
features that it requires to function normally. When an application
specifies such features, the system allows the application to be installed only
@@ -338,7 +338,7 @@
</ul>
</li>
<li>New attributes for the
- <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a> element:
+ <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a> element:
<ul>
<li><code>targetSdkVersion</code>: Indicates the API Level that the application is targeting.
It is able to run on older versions (down to minSdkVersion), but was explicitly tested to
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/android-4.0.3.jd b/docs/html/about/versions/android-4.0.3.jd
index bcfa35c..c4b503c 100644
--- a/docs/html/about/versions/android-4.0.3.jd
+++ b/docs/html/about/versions/android-4.0.3.jd
@@ -217,7 +217,7 @@
<ul>
<li>Adds the new method {@link
-android.speech.tts.TextToSpeech.Engine#getFeatures(java.util.Locale)
+android.speech.tts.TextToSpeech#getFeatures(java.util.Locale)
getFeatures()}for querying and enabling network TTS support.
<li>Adds a new listener class, {@link
android.speech.tts.UtteranceProgressListener}, that engines can register to
diff --git a/docs/html/about/versions/marshmallow/samples.jd b/docs/html/about/versions/marshmallow/android-6.0-samples.jd
similarity index 100%
rename from docs/html/about/versions/marshmallow/samples.jd
rename to docs/html/about/versions/marshmallow/android-6.0-samples.jd
diff --git a/docs/html/about/versions/marshmallow/android-6.0-testing.jd b/docs/html/about/versions/marshmallow/android-6.0-testing.jd
new file mode 100644
index 0000000..f9d9265
--- /dev/null
+++ b/docs/html/about/versions/marshmallow/android-6.0-testing.jd
@@ -0,0 +1,183 @@
+page.title=Android 6.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 6.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>
+
+<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/marshmallow/android-6.0.jd b/docs/html/about/versions/marshmallow/android-6.0.jd
index 240b080..247c6d1c 100644
--- a/docs/html/about/versions/marshmallow/android-6.0.jd
+++ b/docs/html/about/versions/marshmallow/android-6.0.jd
@@ -129,8 +129,8 @@
<pre class="no-prettyprint">
adb -e emu finger touch <finger_id>
</pre>
-<p>On Windows, you may have to run {@code telnet 127.0.0.1 <emulator-id>} followed by
- {@code finger touch <finger_id>}.
+<p>On Windows, you may have to run {@code telnet 127.0.0.1 <emulator-id>} followed by
+ {@code finger touch <finger_id>}.
</p>
</li>
</ol>
@@ -204,7 +204,7 @@
<p>For each activity that you want to expose to
{@link android.service.chooser.ChooserTargetService}, add a
-{@code <meta-data>} element with the name
+{@code <meta-data>} element with the name
{@code "android.service.chooser.chooser_target_service"} in your app manifest.
</p>
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
new file mode 100644
index 0000000..cb92f19
--- /dev/null
+++ b/docs/html/about/versions/nougat/android-7.0-changes.jd
@@ -0,0 +1,880 @@
+page.title=Android 7.0 Behavior Changes
+page.keywords=preview,sdk,compatibility
+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
+
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document</h2>
+
+<ol>
+ <li><a href="#perf">Performance Improvements</a>
+ <ol>
+ <li><a href="#doze">Doze</a></li>
+ <li><a href="#bg-opt">Background Optimizations</a></li>
+ </ol>
+ </li>
+ <li><a href="#perm">Permissions Changes</a>
+ </li>
+ <li><a href="#sharing-files">Sharing Files Between Apps</a></li>
+ <li><a href="#accessibility">Accessibility Improvements</a>
+ <ol>
+ <li><a href="#screen-zoom">Screen Zoom</a></li>
+ <li><a href="#vision-settings">Vision Settings in Setup Wizard</a></li>
+ </ol>
+ </li>
+ <li><a href="#ndk">NDK Apps Linking to Platform Libraries</a></li>
+ <li><a href="#afw">Android for Work</a></li>
+ <li><a href="#annotations">Annotations Retention</a></li>
+ <li><a href="#other">Other Important Points</a></li>
+</ol>
+
+<h2>API Differences</h2>
+<ol>
+ <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}about/versions/nougat/android-7.0.html">
+ Android 7.0 for Developers</a></li>
+</ol>
+
+</div>
+</div>
+
+
+<p>
+ Along with new features and capabilities, Android 7.0
+ includes a variety of system and API behavior changes. This document
+ highlights some of the key changes that you should understand and account for
+ in your apps.
+</p>
+
+<p>
+ If you have previously published an app for Android, be aware that your app
+ might be affected by these changes in the platform.
+</p>
+
+
+<h2 id="perf">Battery and Memory</h2>
+
+<p>
+Android 7.0 includes system behavior changes aimed at improving the battery life
+of devices and reducing RAM usage. These changes can affect your app’s access to
+system resources, along with the way your app interacts with other apps via
+certain implicit intents.
+</p>
+
+<h3 id="doze">Doze</h3>
+
+<p>
+ Introduced in Android 6.0 (API level 23), Doze improves battery life by
+ deferring CPU and network activities when a user leaves a device unplugged,
+ stationary, and with the screen turned off. Android 7.0 brings further
+ enhancements to Doze by applying a subset of CPU and network restrictions
+ while the device is unplugged with the screen turned off, but not necessarily
+ stationary, for example, when a handset is traveling in a user’s pocket.
+</p>
+
+
+<img src="{@docRoot}images/android-7.0/doze-diagram-1.png"
+ alt="" height="251px" id="figure1" />
+<p class="img-caption">
+ <strong>Figure 1.</strong> Illustration of how Doze applies a first level of
+ system activity restrictions to improve battery life.
+</p>
+
+<p>
+ When a device is on battery power, and the screen has been off for a certain
+ time, the device enters Doze and applies the first subset of restrictions: It
+ shuts off app network access, and defers jobs and syncs. If the device is
+ stationary for a certain time after entering Doze, the system applies the
+ rest of the Doze restrictions to {@link android.os.PowerManager.WakeLock},
+ {@link android.app.AlarmManager} alarms, GPS, and Wi-Fi scans. Regardless of
+ whether some or all Doze restrictions are being applied, the system wakes the
+ device for brief maintenance windows, during which applications are allowed
+ network access and can execute any deferred jobs/syncs.
+</p>
+
+
+<img src="{@docRoot}images/android-7.0/doze-diagram-2.png"
+ alt="" id="figure2" />
+<p class="img-caption">
+ <strong>Figure 2.</strong> Illustration of how Doze applies a second level of
+ system activity restrictions after the device is stationary for a certain time.
+</p>
+
+<p>
+ Note that activating the screen on or plugging in the device exits Doze and
+ removes these processing restrictions. The additional behavior does not
+ affect recommendations and best practices in adapting your app to the prior
+ version of Doze introduced in Android 6.0 (API level 23), as discussed in
+ <a href="{@docRoot}training/monitoring-device-state/doze-standby.html">
+ Optimizing for Doze and App Standby</a>. You should still
+ follow those recommendations, such as using Google Cloud Messaging (GCM) to
+ send and receive messages, and start planning updates to accomodate the
+ additional Doze behavior.
+</p>
+
+
+<h3 id="bg-opt">Project Svelte: Background Optimizations</h3>
+
+<p>
+ Android 7.0 removes three implicit broadcasts in order to help optimize both
+ memory use and power consumption. This change is necessary because implicit
+ broadcasts frequently start apps that have registered to listen for them in
+ the background. Removing these broadcasts can substantially benefit device
+ performance and user experience.
+</p>
+
+<p>
+ Mobile devices experience frequent connectivity changes, such as when moving
+ between Wi-Fi and mobile data. Currently, apps can monitor for changes in
+ connectivity by registering a receiver for the implicit {@link
+ android.net.ConnectivityManager#CONNECTIVITY_ACTION} broadcast in their
+ manifest. Since many apps register to receive this broadcast, a single
+ network switch can cause them all to wake up and process the broadcast at
+ once.
+</p>
+
+<p>
+ Similarly, in previous versions of Android, apps could register to receive implicit {@link
+ android.hardware.Camera#ACTION_NEW_PICTURE} and {@link
+ android.hardware.Camera#ACTION_NEW_VIDEO} broadcasts from other apps, such as
+ Camera. When a user takes a picture with the Camera app, these apps wake up
+ to process the broadcast.
+</p>
+
+<p>
+ To alleviate these issues, Android 7.0 applies the following
+ optimizations:
+</p>
+
+<ul>
+ <li>Apps targeting Android 7.0 do not receive {@link
+ android.net.ConnectivityManager#CONNECTIVITY_ACTION} broadcasts, even if they
+ have manifest entries to request notification of these events. Apps that are
+ running can still listen for {@code CONNECTIVITY_CHANGE} on their main thread
+ if they request notification with a {@link android.content.BroadcastReceiver}.
+ </li>
+
+ <li>Apps cannot send or receive {@link
+ android.hardware.Camera#ACTION_NEW_PICTURE} or {@link
+ android.hardware.Camera#ACTION_NEW_VIDEO} broadcasts. This optimization
+ affects all apps, not only those targeting Android 7.0.
+ </li>
+</ul>
+
+<p>If your app uses any of these intents, you should remove dependencies
+ on them as soon as possible so that you can target Android 7.0 devices properly.
+ The Android framework provides several solutions to mitigate the need for
+ these implicit broadcasts. For example, the {@link
+ android.app.job.JobScheduler} API provides a robust mechanism to schedule
+ network operations when specified conditions, such as connection to an
+ unmetered network, are met. You can even use {@link
+ android.app.job.JobScheduler} to react to changes to content providers.
+</p>
+
+<p>
+ For more information about background optimizations in Android 7.0 (API level
+ 24) and how to adapt your app, see <a href=
+ "{@docRoot}preview/features/background-optimization.html">Background
+ Optimizations</a>.
+</p>
+
+<h2 id="perm">Permissions Changes</h2>
+
+<p>
+ Android 7.0 includes changes to permissions that may affect your app.
+</p>
+
+<h3 id="permfilesys">File system permission changes</h3>
+
+<p>
+ In order to improve the security of private files, the private directory of
+ apps targeting Android 7.0 or higher has restricted access (<code>0700</code>).
+ This setting prevents leakage of metadata of private files, such as their size
+ or existence. This permission change has multiple side effects:
+</p>
+
+<ul>
+ <li>
+ Private files’ file permissions should no longer be relaxed by the owner,
+ and an attempt to do so using
+ {@link android.content.Context#MODE_WORLD_READABLE} and/or
+ {@link android.content.Context#MODE_WORLD_WRITEABLE}, will trigger a
+ {@link java.lang.SecurityException}.
+ <p class="note">
+ <strong>Note:</strong> As of yet, this restriction is not fully enforced.
+ Apps may still modify permissions to their private directory using
+ native APIs or the {@link java.io.File File} API. However, we strongly
+ discourage relaxing the permissions to the private directory.
+ </p>
+ </li>
+ <li>
+ Passing <code>file://</code> URIs outside the package domain may leave the
+ receiver with an unaccessible path. Therefore, attempts to pass a
+ <code>file://</code> URI trigger a
+ <code>FileUriExposedException</code>. The recommended way to share the
+ content of a private file is using the {@link
+ android.support.v4.content.FileProvider}.
+ </li>
+ <li>
+ The {@link android.app.DownloadManager} can no longer share privately
+ stored files by filename. Legacy applications may end up with an
+ unaccessible path when accessing {@link
+ android.app.DownloadManager#COLUMN_LOCAL_FILENAME}. Apps targeting
+ Android 7.0 or higher trigger a {@link java.lang.SecurityException} when
+ attempting to access
+ {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}.
+ Legacy applications that set the download location to a public location by
+ using
+ {@link
+ android.app.DownloadManager.Request#setDestinationInExternalFilesDir
+ DownloadManager.Request.setDestinationInExternalFilesDir()} or
+ {@link
+ android.app.DownloadManager.Request#setDestinationInExternalPublicDir
+ DownloadManager.Request.setDestinationInExternalPublicDir()}
+ can still access the path in
+ {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}, however, this
+ method is strongly discouraged. The preferred way of accessing a file
+ exposed by the {@link android.app.DownloadManager} is using
+ {@link android.content.ContentResolver#openFileDescriptor
+ ContentResolver.openFileDescriptor()}.
+ </li>
+</ul>
+
+<h2 id="sharing-files">Sharing Files Between Apps</h2>
+
+<p>
+For apps targeting Android 7.0, the Android framework enforces
+the {@link android.os.StrictMode} API policy that prohibits exposing {@code file://} URIs
+outside your app. If an intent containing a file URI leaves your app, the app fails
+with a {@code FileUriExposedException} exception.
+</p>
+
+<p>
+To share files between applications, you should send a {@code content://} URI
+and grant a temporary access permission on the URI. The easiest way to grant this permission is by
+using the {@link android.support.v4.content.FileProvider} class. For more information
+on permissions and sharing files,
+see <a href="{@docRoot}training/secure-file-sharing/index.html">Sharing Files</a>.
+</p>
+
+<h2 id="accessibility">Accessibility Improvements</h2>
+
+<p>
+ Android 7.0 includes changes intended to improve the usability of the
+ platform for users with low or impaired vision. These changes should
+ generally not require code changes in your app, however you should review
+ these feature and test them with your app to assess potential impacts to user
+ experience.
+</p>
+
+
+<h3 id="screen-zoom">Screen Zoom</h3>
+
+<p>
+ Android 7.0 enables users to set <strong>Display size</strong>which magnifies
+ or shrinks all elements on the screen, thereby improving device accessibility
+ for users with low vision. Users cannot zoom the screen past a minimum screen
+ width of <a href=
+ "http://developer.android.com/guide/topics/resources/providing-resources.html">
+ sw320dp</a>, which is the width of a Nexus 4, a common medium-sized phone.
+</p>
+
+<div class="cols">
+
+<div class="col-6">
+ <img src="{@docRoot}images/android-7.0/screen-zoom-1.png" alt="" height="XXX" id="figure1" />
+</div>
+<div class="col-6">
+ <img src="{@docRoot}images/android-7.0/screen-zoom-2.png" alt="" height="XXX" id="figure1" />
+</div>
+
+</div> <!-- end cols -->
+<p class="img-caption">
+ <strong>Figure 3.</strong> The screen on the right shows the effect of
+ increasing the Display size of a device running an Android 7.0 system image.
+</p>
+
+
+<p>
+ When the device density changes, the system notifies running apps in the
+ following ways:
+</p>
+
+<ul>
+ <li>If an app targets API level 23 or lower, the system automatically kills
+ all its background processes. This means that if a user switches away from
+ such an app to open the <em>Settings</em> screen and changes the
+ <strong>Display size</strong> setting, the system kills the app in the same
+ manner that it would in a low-memory situation. If the app has any foreground
+ processes, the system notifies those processes of the configuration change as
+ described in <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Handling
+ Runtime Changes</a>, just as if the device's orientation had changed.
+ </li>
+
+ <li>If an app targets Android 7.0, all of its processes
+ (foreground and background) are notified of the configuration change as
+ described in <a href=
+ "{@docRoot}guide/topics/resources/runtime-changes.html">Handling
+ Runtime Changes</a>.
+ </li>
+</ul>
+
+<p>
+ Most apps do not need to make any changes to support this feature, provided
+ the apps follow Android best practices. Specific things to check for:
+</p>
+
+<ul>
+ <li>Test your app on a device with screen width <code><a href=
+ "{@docRoot}guide/topics/resources/providing-resources.html">sw320dp</a></code>
+ and be sure it performs adequately.
+ </li>
+
+ <li>When the device configuration changes, update any density-dependent
+ cached information, such as cached bitmaps or resources loaded from the
+ network. Check for configuration changes when the app resumes from the paused
+ state.
+ <p class="note">
+ <strong>Note:</strong> If you cache configuration-dependent data, it's a
+ good idea to include relevant metadata such as the appropriate screen
+ size or pixel density for that data. Saving this metadata allows you to
+ decide whether you need to refresh the cached data after a configuration
+ change.
+ </p>
+ </li>
+
+ <li>Avoid specifying dimensions with px units, since they do not scale with
+ screen density. Instead, specify dimensions with <a href=
+ "{@docRoot}guide/practices/screens_support.html">density-independent
+ pixel</a> (<code>dp</code>) units.
+ </li>
+</ul>
+
+<h3 id="vision-settings">Vision Settings in Setup Wizard</h3>
+
+<p>
+ Android 7.0 includes Vision Settings on the Welcome screen, where users can
+ set up the following accessibility settings on a new device:
+ <strong>Magnification gesture</strong>, <strong>Font size</strong>,
+ <strong>Display size</strong> and <strong>TalkBack</strong>. This change
+ increases the visibility of bugs related to different screen settings. To
+ assess the impact of this feature, you should test your apps with these
+ settings enabled. You can find the settings under <strong>Settings >
+ Accessibility</strong>.
+</p>
+
+<h2 id="ndk">NDK Apps Linking to Platform Libraries</h2>
+
+<p>
+ Starting in Android 7.0, the system prevents apps from dynamically linking
+ against non-NDK libraries, which may cause your app to crash. This change in
+ behavior aims to create a consistent app experience across platform updates
+ and different devices. Even though your code might not be linking against
+ private libraries, it's possible that a third-party static library in your
+ app could be doing so. Therefore, all developers should check to make sure
+ that their apps do not crash on devices running Android 7.0. If your app uses
+ native code, you should only be using <a href=
+ "{@docRoot}ndk/guides/stable_apis.html">public NDK APIs</a>.
+</p>
+
+<p>
+ There are three ways your app might be trying to access private platform
+ APIs:
+</p>
+
+<ul>
+ <li>Your app directly accesses private platform libraries. You should update
+ your app to include its own copy of those libraries or use the <a href=
+ "{@docRoot}ndk/guides/stable_apis.html">public NDK APIs</a>.
+ </li>
+
+ <li>Your app uses a third-party library that accesses private platform
+ libraries. Even if you are certain your app doesn't access private libraries
+ directly, you should still test your app for this scenario.
+ </li>
+
+ <li>Your app references a library that is not included in its APK. For
+ example, this could happen if you tried to use your own copy of OpenSSL but
+ forgot to bundle it with your app's APK. The app may run normally on versions
+ of Android platform that includes <code>libcrypto.so</code>. However, the app
+ could crash on later versions of Android that do not include this library
+ (such as, Android 6.0 and later). To fix this, ensure that you bundle all
+ your non-NDK libraries with your APK.
+ </li>
+</ul>
+
+<p>
+ Apps should not use native libraries that are not included in the NDK because
+ they may change or be removed between different versions of Android. The
+ switch from OpenSSL to BoringSSL is an example of such a change. Also,
+ because there are no compatibility requirements for platform libraries not
+ included in the NDK, different devices may offer different levels of
+ compatibility.
+</p>
+
+<p>
+ In order to reduce the impact that this restriction may have on currently
+ released apps, a set of libraries that see significant use—such as
+ <code>libandroid_runtime.so</code>, <code>libcutils.so</code>,
+ <code>libcrypto.so</code>, and <code>libssl.so</code>—are temporarily
+ accessible on Android 7.0 (API level 24) for apps targeting API level 23 or
+ lower. If your app loads one of these libraries, logcat generates a warning
+ and a toast appears on the target device to notify you. If you see these
+ warnings, you should update your app to either include its own copy of those
+ libraries or only use the public NDK APIs. Future releases of the Android
+ platform may restrict the use of private libraries altogether and cause your
+ app to crash.
+</p>
+
+<p>
+ All apps generate a runtime error when they call an API that is neither
+ public nor temporarily accessible. The result is that
+ <code>System.loadLibrary</code> and <code>dlopen(3)</code> both return
+ <code>NULL</code>, and may cause your app to crash. You should review your
+ app code to remove use of private platform APIs and thoroughly test your apps
+ using a device or emulator running Android 7.0 (API level 24). If you are
+ unsure whether your app uses private libraries, you can <a href=
+ "#ndk-errors">check logcat</a> to identify the runtime error.
+</p>
+
+<p>
+ The following table describes the behavior you should expect to see from an
+ app depending on its use of private native libraries and its target API
+ level (<code>android:targetSdkVersion</code>).
+</p>
+
+<table id="ndk-table">
+ <col width="15%">
+ <tr>
+ <th scope="col">
+ Libraries
+ </th>
+ <th scope="col">
+ Target API level
+ </th>
+ <th scope="col">
+ Runtime access via dynamic linker
+ </th>
+ <th scope="col">
+ Android 7.0 (API level 24) behavior
+ </th>
+ <th scope="col">
+ Future Android platform behavior
+ </th>
+ </tr>
+
+<tr>
+ <td>
+ NDK Public
+ </td>
+
+ <td>
+ Any
+ </td>
+
+ <td style="background-color:#DCEDC8">
+ Accessible
+ </td>
+
+ <td style="background-color:#DCEDC8">
+ Works as expected
+ </td>
+
+ <td style="background-color:#DCEDC8">
+ Works as expected
+ </td>
+</tr>
+
+<tr>
+ <td>
+ Private (temporarily accessible private libraries)
+ </td>
+
+ <td>
+ 23 or lower
+ </td>
+
+ <td style="background-color:#FFF9C4">
+ Temporarily accessible
+ </td>
+
+ <td style="background-color:#FFF9C4">
+ Works as expected, but you receive a logcat warning.
+ </td>
+
+ <td style="background-color:#ffcdd2">
+ Runtime error
+ </td>
+</tr>
+
+<tr>
+ <td>
+ Private (temporarily accessible private libraries)
+ </td>
+
+ <td>
+ 24 or higher
+ </td>
+
+ <td style="background-color:#ffcdd2">
+ Restricted
+ </td>
+
+ <td style="background-color:#ffcdd2">
+ Runtime error
+ </td>
+
+ <td style="background-color:#ffcdd2">
+ Runtime error
+ </td>
+</tr>
+
+<tr>
+ <td>
+ Private (other)
+ </td>
+
+ <td>
+ Any
+ </td>
+
+ <td style="background-color:#ffcdd2">
+ Restricted
+ </td>
+
+ <td style="background-color:#ffcdd2">
+ Runtime error
+ </td>
+
+ <td style="background-color:#ffcdd2">
+ Runtime error
+ </td>
+</tr>
+</table>
+
+<h3 id="ndk-errors">
+ Check if your app uses private libraries
+</h3>
+
+<p>
+ To help you identify issues loading private libraries, logcat may generate a
+ warning or runtime error. For example, if your app targets API level 23 or
+ lower, and tries to access a private library on a device running Android 7.0,
+ you may see a warning similar to the following:
+</p>
+
+<pre class="no-pretty-print">
+03-21 17:07:51.502 31234 31234 W linker : library "libandroid_runtime.so"
+("/system/lib/libandroid_runtime.so") needed or dlopened by
+"/data/app/com.popular-app.android-2/lib/arm/libapplib.so" is not accessible
+for the namespace "classloader-namespace" - the access is temporarily granted
+as a workaround for http://b/26394120
+</pre>
+
+<p>
+ These logcat warnings tell you which which library is trying to access a
+ private platform API, but will not cause your app to crash. If the app
+ targets API level 24 or higher, however, logcat generates the following
+ runtime error and your app may crash:
+</p>
+
+<pre class="no-pretty-print">
+java.lang.UnsatisfiedLinkError: dlopen failed: library "libcutils.so"
+("/system/lib/libcutils.so") needed or dlopened by
+"/system/lib/libnativeloader.so" is not accessible for the namespace
+"classloader-namespace"
+ at java.lang.Runtime.loadLibrary0(Runtime.java:977)
+ at java.lang.System.loadLibrary(System.java:1602)
+</pre>
+
+<p>
+ You may also see these logcat outputs if your app uses third-party libraries
+ that dynamically link to private platform APIs. The readelf tool in the
+ Android 7.0DK allows you to generate a list of all dynamically linked shared
+ libraries of a given <code>.so</code> file by running the following command:
+</p>
+
+<pre class="no-pretty-print">
+aarch64-linux-android-readelf -dW libMyLibrary.so
+</pre>
+
+<h3 id="ndk-update">
+ Update your app
+</h3>
+
+<p>
+ Here are some steps you can take to fix these types of errors and make
+ sure your app doesn't crash on future platform updates:
+</p>
+
+<ul>
+ <li>
+ If your app uses private platform libraries, you should update it to include
+ its own copy of those libraries or use the <a href=
+ "{@docRoot}ndk/guides/stable_apis.html">public NDK APIs</a>.
+ </li>
+
+ <li>
+ If your app uses a third-party library that accesses private symbols, contact
+ the library author to update the library.
+ </li>
+
+ <li>
+ Make sure you package all your non-NDK libraries with your APK.
+ </li>
+
+ <li>Use standard JNI functions instead of <code>getJavaVM</code> and
+ <code>getJNIEnv</code> from <code>libandroid_runtime.so</code>:
+
+<pre class="no-pretty-print">
+AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h>
+AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or
+JavaVM::AttachCurrentThread from <jni.h>.
+</pre>
+ </li>
+
+ <li>Use {@code __system_property_get} instead of the private {@code property_get}
+ symbol from {@code libcutils.so}. To do this, use {@code __system_property_get}
+ with the following include:
+
+<pre>
+#include <sys/system_properties.h>
+</pre>
+ <p class="note">
+ <strong>Note:</strong> The availability and contents of system properties is
+ not tested through CTS. A better fix would be to avoid using these
+ properties altogether.
+ </p>
+ </li>
+
+ <li>Use a local version of the {@code SSL_ctrl} symbol from {@code
+ libcrypto.so}. For example, you should statically link {@code libcyrpto.a} in
+ your {@code .so} file, or include a dynamically linked version of {@code
+ libcrypto.so} from BoringSSL/OpenSSL and package it in your APK.
+ </li>
+</ul>
+
+<h2 id="afw">Android for Work</h2>
+<p>
+ Android 7.0 contains changes for apps that target Android for Work, including
+ changes to certificate installation, password resetting, secondary user
+ management, and access to device identifiers. If you are building apps for
+ Android for Work environments, you should review these changes and modify
+ your app accordingly.
+</p>
+
+<ul>
+ <li>You must install a delegated certificate installer before the DPC can set
+ it. For both profile and device-owner apps targeting Android 7.0 (API level 24),
+ you should install the delegated certificate installer before the device policy
+ controller (DPC) calls
+ <code>DevicePolicyManager.setCertInstallerPackage()</code>. If the installer
+ is not already installed, the system throws an
+ <code>IllegalArgumentException</code>.
+ </li>
+
+ <li>Reset password restrictions for device admins now apply to profile
+ owners. Device admins can no longer use
+ {@code DevicePolicyManager.resetPassword()} to clear passwords or change
+ ones that are already set. Device admins can still set a password, but only
+ when the device has no password, PIN, or pattern.
+ </li>
+
+ <li>Device and profile owners can manage accounts even if restrictions are
+ set. Device owners and profile owners can call the Account Management APIs
+ even if <code>DISALLOW_MODIFY_ACCOUNTS</code> user restrictions are in place.
+ </li>
+
+ <li>Device owners can manage secondary users more easily. When a device is
+ running in device owner mode, the <code>DISALLOW_ADD_USER</code> restriction
+ is automatically set. This prevents users from creating unmanaged secondary
+ users. In addition, the <code>CreateUser()</code> and
+ <code>createAndInitializeUser()</code> methods are deprecated; the new
+ <code>DevicePolicyManager.createAndManageUser()</code> method replaces them.
+ </li>
+
+ <li>Device owners can access device identifiers. A Device owner can access the
+ Wi-Fi MAC address of a device, using
+ <code>DevicePolicyManagewr.getWifiMacAddress()</code>. If Wi-Fi has never
+ been enabled on the device, this method returns a value of {@code null}.
+ </li>
+
+ <li>The Work Mode setting controls access to work apps. When work mode is off the
+ system launcher indicates work apps are unavailable by greying them out. Enabling
+ work mode again restores normal behavior.</li>
+
+ <li>When installing a PKCS #12 file containing a client certificate chain and
+ the corresponding private key from Settings UI, the CA certificate in the
+ chain is no longer installed to the trusted credentials storage. This does
+ not affect the result of {@link android.security.KeyChain#getCertificateChain
+ KeyChain.getCertificateChain()} when apps attempt to retrieve the client
+ certificate chain later. If required, the CA certificate should be installed
+ to the trusted credentials storage via Settings UI separately, with a
+ DER-encoded format under a .crt or .cer file extension.
+ </li>
+
+ <li>Starting in Android 7.0, fingerprint enrollment and storage are managed
+ per user. If a profile owner’s Device Policy Client (DPC) targets API level
+ 23 (or lower) on a device running Android 7.0 (API level 24), the user is
+ still able to set fingerprint on the device, but work applications cannot
+ access device fingerprint. When the DPC targets API level 24 and above, the user can set
+ fingerprint specifically for work profile by going to <strong>Settings >
+ Security > Work profile security</strong>.
+ </li>
+
+ <li>A new encryption status <code>ENCRYPTION_STATUS_ACTIVE_PER_USER</code> is
+ returned by <code>DevicePolicyManager.getStorageEncryptionStatus()</code>, to
+ indicate that encryption is active and the encryption key is tied to the
+ user. The new status is only returned if DPC targets API Level 24 and above.
+ For apps targeting earlier API levels, <code>ENCRYPTION_STATUS_ACTIVE</code>
+ is returned, even if the encryption key is specific to the user or profile.
+ </li>
+
+ <li>In Android 7.0, several methods that would ordinarily affect the entire
+ device behave differently if the device has a work profile installed with a
+ separate work challenge. Rather than affecting the entire device, these
+ methods apply only to the work profile. (The complete list of such methods is
+ in the {@link android.app.admin.DevicePolicyManager#getParentProfileInstance
+ DevicePolicyManager.getParentProfileInstance()} documentation.) For example,
+ {@link android.app.admin.DevicePolicyManager#lockNow
+ DevicePolicyManager.lockNow()} locks just the work profile, instead of
+ locking the entire device. For each of these methods, you can get the old
+ behavior by calling the method on the parent instance of the
+ {@link android.app.admin.DevicePolicyManager}; you can get this parent by
+ calling {@link android.app.admin.DevicePolicyManager#getParentProfileInstance
+ DevicePolicyManager.getParentProfileInstance()}. So for example, if you call
+ the parent instance's {@link android.app.admin.DevicePolicyManager#lockNow}
+ method, the entire device is locked.
+ </li>
+
+</ul>
+
+<p>
+ For more information about changes to Android for Work in Android 7.0, see
+ <a href="{@docRoot}preview/features/afw.html">Android for Work Updates</a>.
+</p>
+
+<h2 id="annotations">Annotations Retention</h2>
+
+<p>
+Android 7.0 fixes a bug where the visibility of annotations was being ignored.
+This issue enabled the runtime to access annotations that it should not have been
+able to. These annotations included:
+</p>
+
+<ul>
+ <li>{@code VISIBILITY_BUILD}: Intended to be visible only at build time.</li>
+ <li>{@code VISIBILITY_SYSTEM}: Intended to be visible at runtime, but only to the
+ underlying system.</li>
+</ul>
+
+<p>
+If your app has relied on this behavior, please add a retention policy to annotations that must
+be available at runtime. You do so by using {@code @Retention(RetentionPolicy.RUNTIME)}.
+</p>
+
+<h2 id="other">Other Important Points</h2>
+
+<ul>
+<li>When an app is running on Android 7.0, but targets a lower API level,
+and the user changes display size, the app process is killed. The app
+must be able to gracefully handle this scenario. Otherwise, it crashes
+when the user restores it from Recents.
+
+<p>
+You should test your app to ensure
+that this behavior does not occur.
+You can do so by causing an identical crash
+when killing the app manually via DDMS.
+</p>
+
+<p>
+ Apps targeting Android 7.0 (API level 24) and above are not automatically
+ killed on density changes; however, they may still respond poorly to
+ configuration changes.
+</p>
+</li>
+
+<li>
+Apps on Android 7.0 should be able to gracefully handle configuration changes,
+and should not crash on subsequent starts. You can verify app behavior
+by changing font size (<strong>Setting</strong> >
+<strong>Display</strong> > <strong>Font size</strong>), and then restoring
+the app from Recents.
+</li>
+
+<li>
+Due to a bug in previous versions of Android, the system did not flag writing
+to a TCP socket on the main thread as a strict-mode violation. Android 7.0 fixes this bug.
+Apps that exhibit this behavior now throw an {@code android.os.NetworkOnMainThreadException}.
+Generally, performing network operations on the main thread is a bad idea because these operations
+usually have a high tail latency that causes ANRs and jank.
+</li>
+
+<li>
+The {@code Debug.startMethodTracing()} family of methods now defaults to
+storing output in your package-specific directory on shared storage,
+instead of at the top level
+of the SD card. This means apps no longer need to request the {@code WRITE_EXTERNAL_STORAGE} permission to use these APIs.
+</li>
+
+<li>
+Many platform APIs have now started checking for large payloads being sent
+across {@link android.os.Binder} transactions, and the
+system now rethrows {@code TransactionTooLargeExceptions}
+as {@code RuntimeExceptions}, instead of silently logging or suppressing them. One
+common example is storing too much data in
+{@link android.app.Activity#onSaveInstanceState Activity.onSaveInstanceState()},
+which causes {@code ActivityThread.StopInfo} to throw a
+{@code RuntimeException} when your app targets Android 7.0.
+</li>
+
+<li>
+If an app posts {@link java.lang.Runnable} tasks to a {@link android.view.View}, and
+the {@link android.view.View}
+is not attached to a window, the system
+queues the {@link java.lang.Runnable} task with the {@link android.view.View};
+the {@link java.lang.Runnable} task does not execute until the
+{@link android.view.View} is attached
+to a window. This behavior fixes the following bugs:
+<ul>
+ <li>If an app posted to a {@link android.view.View} from a thread other than the intended
+ window’s UI thread, the {@link java.lang.Runnable} may run on the wrong thread as a result.
+ </li>
+ <li>If the {@link java.lang.Runnable} task was posted from a thread other than
+ a looper thread, the app could expose the {@link java.lang.Runnable} task.</li>
+</ul>
+</li>
+
+<li>
+If an app on Android 7.0 with
+{@link android.Manifest.permission#DELETE_PACKAGES DELETE_PACKAGES}
+permission tries to delete a package, but a different app had installed that package,
+the system requires user confirmation. In this scenario, apps should expect
+{@link android.content.pm.PackageInstaller#STATUS_PENDING_USER_ACTION STATUS_PENDING_USER_ACTION}
+as the return status when they invoke
+{@link android.content.pm.PackageInstaller#uninstall PackageInstaller.uninstall()}.
+</li>
+
+ <li>The JCA provider called <em>Crypto</em> is deprecated, because its only
+ algorithm, SHA1PRNG, is cryptographically weak. Apps can no longer use
+ SHA1PRNG to (insecurely) derive keys, because this provider is no longer
+ available. For more information, see the blog
+ post <a href=
+ "http://android-developers.blogspot.com/2016/06/security-crypto-provider-deprecated-in.html"
+ class="external-link">Security "Crypto" provider deprecated in Android
+ N</a>.
+ </li>
+
+</ul>
+
diff --git a/docs/html/about/versions/nougat/android-7.0-samples.jd b/docs/html/about/versions/nougat/android-7.0-samples.jd
new file mode 100644
index 0000000..e283a7a
--- /dev/null
+++ b/docs/html/about/versions/nougat/android-7.0-samples.jd
@@ -0,0 +1,86 @@
+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>
+ 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>
+
+<p class="note">
+ <strong>Note:</strong> These downloadable projects are designed
+ for use with Gradle and Android Studio.
+</p>
+
+
+<h3 id="mw">Multi-Window Playground</h3>
+<img src="{@docRoot}images/android-7.0/sample-multiwindow.png" style="float: left; padding-right: 0.5em" height="250" width="156"/>
+<p>
+ This sample demonstrates how to take advantage of multiple window
+ user interfaces with your app.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-MultiWindowPlayground">
+ Get it on GitHub</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="an">Active Notifications</h3>
+<img src="{@docRoot}images/android-7.0/sample-activenotifications.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ This is a pre-existing sample which shows a simple service that sends
+ notifications using NotificationCompat. Each unread conversation from a user
+ is sent as a distinct notification.
+</p>
+<p>
+ This sample has been updated to take advantage of new notification features
+ available in Android N.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-ActiveNotifications">
+ Get it on GitHub</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="ms">Messaging Service</h3>
+<img src="{@docRoot}images/android-7.0/sample-messagingservice.png" style="float: left; padding-right: 0.5em" height="250" width="150" />
+<p>
+ This is a pre-existing sample which demonstrates how to use
+ NotificationManager to tell how many notifications an application is currently
+ showing.
+</p>
+<p>
+ This sample has been updated to take advantage of new notification features
+ available in Android N.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-MessagingService">
+ Get it on GitHub</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="fbe">Direct Boot</h3>
+<img src="{@docRoot}images/android-7.0/sample-directboot.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ This sample demonstrates how to store and access data in a device encrypted
+ storage which is always available while the device is booted.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-DirectBoot">
+ Get it on GitHub</a>
+</p>
+
+<div style="clear: both;"></div>
+<h3 id="sda">Scoped Directory Access</h3>
+<img src="{@docRoot}images/android-7.0/sample-scopeddirectoryaccess.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
+<p>
+ This sample demonstrates how to read and write data from specific
+ directories, while requiring fewer permissions.
+</p>
+<p>
+ <a href="https://github.com/googlesamples/android-ScopedDirectoryAccess">
+ Get it on GitHub</a>
+</p>
diff --git a/docs/html/about/versions/nougat/android-7.0.jd b/docs/html/about/versions/nougat/android-7.0.jd
new file mode 100644
index 0000000..1ca540c
--- /dev/null
+++ b/docs/html/about/versions/nougat/android-7.0.jd
@@ -0,0 +1,1213 @@
+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
+
+
+
+
+<div id="qv-wrapper">
+<div id="qv">
+ <h2>Key Developer Features</h2>
+ <ol>
+ <ul style="list-style-type:none;">
+ <li><a href="#multi-window_support">Multi-window Support</a></li>
+ <li><a href="#notification_enhancements">Notifications</a></li>
+ <li><a href="#jit_aot">JIT/AOT Compilation</a></li>
+ <li><a href="#quick_path_to_app_install">Quick Path to App Install</a></li>
+ <li><a href="#doze_on_the_go">Doze on the Go</a></li>
+ <li><a href="#background_optimizations">Background Optimizations</a></li>
+ <li><a href="#surfaceview">SurfaceView</a></li>
+ <li><a href="#data_saver">Data Saver</a></li>
+ <li><a href="#vulkan">Vulkan API</a></li>
+ <li><a href="#tile_api">Quick Settings Tile API</a></li>
+ <li><a href="#number-blocking">Number Blocking</a></li>
+ <li><a href="#call_screening">Call Screening</a></li>
+ <li><a href="#multi-locale_languages">Locales and Languages</a></li>
+ <li><a href="#emoji">New Emojis</a></li>
+ <li><a href="#icu4">ICU4J APIs in Android</a></li>
+ <li><a href="#webview">WebView</a></li>
+ <li><a href="#gles_32">OpenGL ES 3.2 API</a></li>
+ <li><a href="#android_tv_recording">Android TV Recording</a></li>
+ <li><a href="#android_for_work">Android for Work</a></li>
+ <li><a href="#accessibility_enhancements">Accessibility</a></li>
+ <li><a href="#direct_boot">Direct Boot</a></li>
+ <li><a href="#key_attestation">Key Attestation</a></li>
+ <li><a href="#network_security_config">Network Security Config</a></li>
+ <li><a href="#default_trusted_ca">Default Trusted CA</a></li>
+ <li><a href="#apk_signature_v2">APK Signature Scheme v2</a></li>
+ <li><a href="#scoped_directory_access">Scoped Directory Access</a></li>
+ <li><a href="#keyboard_shortcuts_helper">Keyboard Shortcuts Helper</a></li>
+ <li><a href="#custom_pointer_api">Custom Pointer API</a></li>
+ <li><a href="#sustained_performance_api">Sustained Performance API</a></li>
+ <li><a href="#vr">VR Support</a></li>
+ <li><a href="#print_svc">Print Service Enhancements</a></li>
+ <li><a href="#virtual_files">Virtual Files</a></li>
+ <li><a href="#framemetrics_api">FrameMetricsListener API</a></li>
+ </ol>
+</div>
+</div>
+
+
+
+<p>
+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>
+
+
+<p>In Android 7.0, we're introducing a new and much-requested
+multitasking feature into the platform — multi-window support. </p>
+
+ <p>Users can now pop open two apps on the screen at once. </p>
+ <ul>
+ <li>On phones and tablets
+running Android 7.0, users can run two apps side-by-side or
+one-above-the-other in splitscreen mode. Users can resize the apps by dragging
+the divider between them. </li>
+
+<li>On Android TV devices, apps can put themselves in <a
+href="{@docRoot}preview/features/picture-in-picture.html">picture-in-picture
+mode</a>, allowing them to continue showing content while the user browses or
+interacts with other apps.</li>
+ </ul>
+
+<div class="col-4of10">
+<img src="{@docRoot}images/android-7.0/mw-portrait.png" alt="" style="height:460px;padding-left:1em;"
+ id="img-split-screen" />
+<p class="img-caption">
+ <strong>Figure 1.</strong> Apps running in split-screen mode.
+</p>
+
+ </div>
+
+<p>Especially on tablets and other larger-screen devices, multi-window support
+gives you new ways to engage users. You can even enable drag-and-drop in
+your app to let users conveniently drag content to or from your app — a great
+way to enhance your user experience. </p>
+
+<p>It's straightforward to add multi-window support to your app and configure how it
+handles multi-window display. For example, you can specify your activity's
+minimum allowable dimensions, preventing users from resizing the activity below
+that size. You can also disable multi-window display for your app, which
+ ensures that the system will only show your app in full-screen mode.</p>
+
+<p>
+ For more information, see the <a href=
+ "{@docRoot}preview/features/multi-window.html">Multi-Window Support</a>
+ developer documentation.
+</p>
+
+<h2 id="notification_enhancements">Notification Enhancements</h2>
+
+<p>In Android 7.0 we've redesigned notifications to make them easier and
+faster to use. Some of the changes include:</p>
+
+<ul>
+ <li>
+ <strong>Template updates</strong>: We're updating notification templates to
+ put a new emphasis on hero image and avatar. Developers will be able to
+ take advantage of the new templates with minimal adjustments in their code.
+ </li>
+
+ <li>
+ <strong>Messaging style customization</strong>: You can customize more of
+ the user interface labels associated with your notifications using the
+ <code>MessagingStyle</code> class. You can configure the message,
+ conversation title, and content view.
+ </li>
+
+ <li>
+ <strong>Bundled notifications</strong>: The system can group messages
+ together, for example by message topic, and display the group. A user can
+ take actions, such as Dismiss or Archive, on them in place. If you’ve
+ implemented notifications for Android Wear, you’ll already be familiar with
+ this model.
+ </li>
+
+ <li>
+ <strong>Direct reply</strong>: For real-time communication apps, the
+ Android system supports inline replies so that users can quickly respond to
+ an SMS or text message directly within the notification interface.
+ </li>
+
+ <li>
+ <strong>Custom views</strong>: Two new APIs enable you to leverage system
+ decorations, such as notification headers and actions, when using custom
+ views in notifications.
+ </li>
+</ul>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-1.png" alt=""
+ style="padding:.5em;max-width:226px">
+</div>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-3.png" alt=""
+ style="padding:.5em;max-width:226px">
+</div>
+
+<div class="col-4of12">
+ <img src="{@docRoot}images/android-7.0/notifications-2.png" alt=""
+ style="padding:.5em;max-width:226px">
+</div>
+
+
+<p class="img-caption">
+ <strong>Figure 2.</strong> Bundled notifications and direct reply.
+</p>
+
+<p>To learn how to implement the new features, see the
+ <a href="{@docRoot}preview/features/notification-updates.html">Notifications</a>
+ guide.</p>
+
+
+
+<h2 id="jit_aot">Profile-guided JIT/AOT Compilation</h2>
+
+<p>In Android 7.0, we've added a Just in Time (JIT) compiler with code
+profiling to ART, which lets it constantly improve the performance of
+Android apps as they run. The JIT compiler complements ART's current
+Ahead of Time (AOT) compiler and helps improve runtime performance, save
+storage space, and speed up app updates and system updates.</p>
+
+<p>Profile-guided compilation lets ART manage the AOT/JIT compilation for
+each app according to its actual usage, as well as conditions on the device.
+For example, ART maintains a profile of each app's hot methods and can
+precompile and cache those methods for best performance. It leaves other parts
+of the app uncompiled until they are actually used.</p>
+
+<p>Besides improving performance for key parts of the app, profile-guided
+compilation helps reduce an app's overall RAM footprint, including associated
+binaries. This feature is especially important on low-memory devices.</p>
+
+<p>ART manages profile-guided compilation in a way that minimizes impact on the
+device battery. It does precompilation only when then the device is idle and
+charging, saving time and battery by doing that work in advance.</p>
+
+<h2 id="quick_path_to_app_install">Quick Path to App Install</h2>
+
+<p>One of the most tangible benefits of ART's JIT compiler is the speed of app
+installs and system updates. Even large apps that required several minutes to
+optimize and install in Android 6.0 can now install in just a matter of
+seconds. System updates are also faster, since there's no more optimizing step. </p>
+
+<h2 id="doze_on_the_go">Doze on the Go...</h2>
+
+<p>Android 6.0 introduced Doze, a system mode that saves battery by deferring
+apps' CPU and network activities when the device is idle, such as when it's
+sitting on a table or in a drawer. </p>
+
+<p>Now in Android 7.0, Doze takes a step further and saves battery while on the go.
+Any time the screen is off for a period of time and the device is unplugged,
+Doze applies a subset of the familiar CPU and network restrictions to apps.
+This means users can save battery even when carrying their devices in their
+pockets.</p>
+
+
+<img src="/images/android-7.0/doze-diagram-1.png"
+ alt="" id="figure1" />
+<p class="img-caption">
+ <strong>Figure 3.</strong> Doze now applies
+ restrictions to improve battery life even when the device is not stationary.
+</p>
+
+
+<p>A short time after the screen turns off while the device is on battery, Doze
+restricts network access and defers jobs and syncs. During brief maintenance
+windows, applications are allowed network access and any of their deferred
+jobs/syncs are executed. Turning the screen on or plugging in the device brings
+the device out of Doze.</p>
+
+<p>When the device is stationary again, with screen off and on battery for a
+period of time, Doze applies the full CPU and network restrictions on {@link
+android.os.PowerManager.WakeLock}, {@link android.app.AlarmManager} alarms, and
+GPS/Wi-Fi scans.</p>
+
+<p>The best practices for adapting your app to Doze are the same whether the
+device is moving or not, so if you already updated your app to gracefully
+handle Doze, you're all set. If not, start <a
+href="{@docRoot}training/monitoring-device-state/doze-standby.html#assessing_your_app">adapting
+your app to Doze</a> now.</p>
+
+<h2 id="background_optimizations">Project Svelte: Background Optimizations</h2>
+
+<p>Project Svelte is an ongoing effort to minimize RAM use by system and apps
+across the range of Android devices in the ecosystem. In Android 7.0, Project
+Svelte is focused on optimizing the way apps run in the background. </p>
+
+<p>Background processing is an essential part of most apps. When handled right, it
+can make your user experience amazing — immediate, fast, and context-aware.
+When not handled right, background processing can needlessly consume RAM (and
+battery) and affect system performance for other apps. </p>
+
+<p>Since Android 5.0, {@link android.app.job.JobScheduler} has been the
+preferred way of performing background work in a way that's good
+for users. Apps can schedule jobs while letting the system optimize based on
+memory, power, and connectivity conditions. JobScheduler offers control and
+simplicity, and we want all apps to use it. </p>
+
+<p>
+ Another good option is <a href=
+ "https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
+ <code>GCMNetworkManager</code></a>, part of Google Play Services, which
+ offers similar job scheduling with compatibility across legacy versions of
+ Android.
+</p>
+
+<p>We're continuing to extend <code>JobScheduler</code> and
+<code>GCMNetworkManager</code> to meet more of
+your use cases — for example, in Android 7.0 you can now schedule background
+work based on changes in Content Providers. At the same time we're starting to
+deprecate some of the older patterns that can reduce system performance,
+especially on low-memory devices.</p>
+
+<p>In Android 7.0 we're removing three commonly-used implicit broadcasts —
+ {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, {@link
+ android.hardware.Camera#ACTION_NEW_PICTURE}, and {@link
+ android.hardware.Camera#ACTION_NEW_VIDEO} — since those can wake the
+background processes of multiple apps at once and strain memory and battery. If
+your app is receiving these, take advantage of the Android 7.0 to
+ migrate to <code>JobScheduler</code> and related APIs instead. </p>
+
+<p>
+ Take a look at the <a href=
+ "{@docRoot}preview/features/background-optimization.html">Background
+ Optimizations</a> documentation for details.
+</p>
+
+<h2 id="surfaceview">SurfaceView</h2>
+<p>
+Android 7.0 brings synchronous movement to the {@link android.view.SurfaceView}
+class, which provides better battery performance
+than {@link android.view.TextureView} in certain cases: When rendering video or
+3D content, apps with scrolling and animated video position use less power with
+{@link android.view.SurfaceView} than with {@link android.view.TextureView}.
+</p>
+
+The {@link android.view.SurfaceView} class enables more battery-efficient compositing on
+screen, because it is composited in dedicated hardware, separately from app
+window content. As a result, it makes fewer intermediate
+copies than {@link android.view.TextureView}.
+</p>
+
+<p>
+A {@link android.view.SurfaceView} object's content position is now updated synchronously
+with the containing app content. One result of this change is that simple
+translations or scales of a video playing in a {@link android.view.SurfaceView}
+no longer produce black bars alongside the view as it moves.
+</p>
+
+<p>
+Starting with Android 7.0, we strongly recommend that you save power by using
+{@link android.view.SurfaceView} instead of {@link android.view.TextureView}.
+</p>
+
+<h2 id="data_saver">Data Saver</h2>
+
+<div class="col-5of12" style="margin-right:1.5em;">
+<img src="{@docRoot}images/android-7.0/datasaver.png" style="border:2px solid #ddd">
+
+<p class="img-caption" style="padding-right:2em;">
+ <strong>Figure 4.</strong> Data Saver in Settings.
+</p>
+ </div>
+
+<p>Over the life of a mobile device, the cost of a cellular data plan typically
+exceeds the cost of the device itself. For many users, cellular data is an
+expensive resource that they want to conserve. </p>
+
+<p>Android 7.0 introduces Data Saver mode, a new system service that helps reduce
+cellular data use by apps, whether roaming, near the end of the billing cycle,
+or on a small prepaid data pack. Data Saver gives users control over how apps
+use cellular data and lets developers provide more efficient service when Data
+Saver is on. </p>
+
+<p>When a user enables Data Saver in <strong>Settings</strong> and the device is
+on a metered network, the system blocks background data usage and signals apps
+to use less data in the foreground wherever possible — such as by limiting
+bit rate for streaming, reducing image quality, deferring optimistic precaching,
+and so on. Users can whitelist specific apps to allow background metered data
+usage even when Data Saver is turned on.</p>
+
+<p>Android 7.0 extends the {@link android.net.ConnectivityManager} to provide apps a
+way to <a href="{@docRoot}preview/features/data-saver.html#status">retrieve the
+user's Data Saver preferences</a> and <a
+href="{@docRoot}preview/features/data-saver.html#monitor-changes">monitor
+preference changes</a>. All apps should check whether the user has enabled Data
+Saver and make an effort to limit foreground and background data usage.</p>
+
+
+<h2 id="vulkan">Vulkan API</h2>
+
+<p>
+ Android 7.0 integrates <a href="http://www.khronos.org/vulkan" class=
+ "external-link">Vulkan™</a>, a new 3D rendering API, into the platform. Like
+ <a href="https://www.khronos.org/opengles/" class="external-link">OpenGL™
+ ES</a>, Vulkan is an open standard for 3D graphics and rendering maintained
+ by the Khronos Group.
+</p>
+
+<p>
+ Vulkan is designed from the ground up to minimize CPU overhead in the driver,
+ and allow your application to control GPU operation more directly. Vulkan
+ also enables better parallelization by allowing multiple threads to perform
+ work such as command buffer construction at once.
+</p>
+
+<p>
+ Vulkan development tools and libraries are rolled into the Android 7.0DK. They
+ include:
+</p>
+
+<ul>
+ <li>Headers
+ </li>
+
+ <li>Validation layers (debug libraries)
+ </li>
+
+ <li>SPIR-V shader compiler
+ </li>
+
+ <li>SPIR-V runtime shader compilation library
+ </li>
+</ul>
+
+<p>
+ Vulkan is only available to apps on devices with Vulkan-capable hardware,
+ such as Nexus 5X, Nexus 6P, and Nexus Player. We're working closely with our
+ partners to bring Vulkan to more devices as soon as possible.
+</p>
+
+<p>
+ For more information, see the the <a href=
+ "{@docRoot}ndk/guides/graphics/index.html">API documentation</a>.
+</p>
+
+<h2 id="tile_api">Quick Settings Tile API</h2>
+
+
+<div style="float:right;max-width:320px">
+<img src="{@docRoot}images/android-7.0/quicksettings.png" style="padding-left:1.5em;">
+
+<p class="img-caption" style="padding-left:2em;">
+ <strong>Figure 5.</strong> Quick Settings tiles in the notification shade.
+</p>
+
+
+ </div><p>Quick Settings is a popular and simple way to expose key settings and actions,
+directly from the notification shade. In Android 7.0, we've expanded the scope of
+Quick Settings to make it even more useful and convenient. </p>
+
+<p>We've added more room for additional Quick Settings tiles, which users can
+access across a paginated display area by swiping left or right. We've also
+given users control over what Quick Settings tiles appear and where they are
+displayed — users can add or move tiles just by dragging and dropping them. </p>
+
+<p>For developers, Android 7.0 also adds a new API that lets you define your own
+ Quick Settings tiles to give users easy access to key controls and actions in your app.</p>
+
+<p>
+ Quick Settings tiles are reserved for controls or actions that are either
+ urgently required or frequently used, and should not be used as shortcuts to
+ launching an app.
+</p>
+
+<p>
+ Once you’ve defined your tiles, you can surface them to users, who can add
+ them to Quick Settings just by drag and drop.
+</p>
+
+<p>
+ For information about creating an app tile, see the documentation for
+ <code>android.service.quicksettings.Tile</code> in the downloadable <a href=
+ "{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.
+</p>
+
+
+
+<h2 id="number-blocking">Number Blocking</h2>
+
+<p>Android 7.0 now supports number blocking in the platform and provides a
+framework API to let service providers maintain a blocked-number list. The
+default SMS app, the default phone app, and carrier apps can read from and
+write to the blocked-number list. The list is not accessible to other apps.</p>
+
+<p>By making number blocking a standard feature of the platform, Android provides
+a consistent way for apps to support number blocking across a wide range of
+devices. Among the other benefits that apps can take advantage of are:</p>
+
+<ul>
+ <li> Numbers blocked on calls are also blocked on texts
+ <li> Blocked numbers can persist across resets and devices through the Backup &
+Restore feature
+ <li> Multiple apps can use the same blocked numbers list
+</ul>
+
+<p>Additionally, carrier app integration through Android means that carriers can
+read the blocked numbers list on the device and perform service-side blocking
+for the user in order to stop unwanted calls and texts from reaching the user
+through any medium, such as a VOIP endpoint or forwarding phones.</p>
+
+<p>
+ For more information, see <code>android.provider.BlockedNumberContract</code>
+ in the downloadable <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API
+ Reference</a>.
+</p>
+
+<h2 id="call_screening">Call Screening</h2>
+
+<p>
+ Android 7.0 allows the default phone app to screen incoming calls. The phone
+ app does this by implementing the new <code>CallScreeningService</code>,
+ which allows the phone app to perform a number of actions based on an
+ incoming call's {@link android.telecom.Call.Details Call.Details}, such as:
+</p>
+
+<ul>
+ <li> Reject the incoming call
+ <li> Do not allow the call to the call log
+ <li> Do not show the user a notification for the call
+</ul>
+
+<p>
+ For more information, see <code>android.telecom.CallScreeningService</code>
+ in the downloadable <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API
+ Reference</a>.
+</p>
+
+
+<h2 id="multi-locale_languages">Multi-locale Support, More Languages</h2>
+
+
+<p>Android 7.0 now lets users select <strong>multiple locales</strong> in Settings,
+to better support bilingual use-cases. Apps can use
+a new API to get the user's selected locales and then offer more sophisticated
+user experiences for multi-locale users — such as showing search results in
+multiple languages and not offering to translate webpages in a language the
+user already knows.</p>
+
+<p>Along with multi-locale support, Android 7.0 also expands the range of languages
+available to users. It offers more than 25 variants each for commonly used
+languages such as English, Spanish, French, and Arabic. It also adds partial
+support for more than 100 new languages.</p>
+
+<p>Apps can get the list of locales set by the user by calling
+<code>LocaleList.GetDefault()</code>. To support the expanded number of locales, Android 7.0 is
+changing the way that it resolves resources. Make sure that you test and verify that your apps
+working as expected with the new resource resolution logic.</p>
+
+<p>To learn about the new resource-resolution behavior and the best practices you
+should follow, see <a href="{@docRoot}preview/features/multilingual-support.html"
+>Multilingual Support</a>.</p>
+
+
+<h2 id="emoji">New Emojis</h2>
+
+<p>
+ Android 7.0 introduces additional emojis and emoji-related features including
+ skin tone emojis and support for variation
+ selectors. If your app supports emojis,
+ follow the guidelines below to take advantage of these emoji-related features.
+</p>
+
+<ul>
+ <li>
+ <strong>Check that a device contains an emoji before inserting it.</strong>
+ To check which emojis are present in the
+ system font, use the {@link android.graphics.Paint#hasGlyph(String)} method.
+ </li>
+ <li>
+ <strong>Check that an emoji supports variation selectors.</strong>
+ Variation selectors allow you to
+ present certain emojis in color or in black-and-white.
+ On mobile devices, apps should represent emojis in color rather than black-and-white. However,
+ if your app displays emojis inline with text, then it should use the black-and-white variation.
+ To determine whether an emoji has a variation, use the variation selector.
+ For a complete list of characters with variations, review the
+ <em>emoji variation sequences</em> section of the
+ <a class="external-link"
+ href="http://www.unicode.org/Public/9.0.0/ucd/StandardizedVariants-9.0.0d1.txt">
+ Unicode documentation on variations</a>.
+ </li>
+ <li>
+ <strong>Check that an emoji supports skin tone.</strong> Android 7.0 allows users to modify the
+ rendered skin tone of emojis to their preference. Keyboard apps should provide visual
+ indications for emojis that have multiple skin tones and should allow users to
+ select the skin tone that they prefer. To determine which system emojis have
+ skin tone modifiers, use the {@link android.graphics.Paint#hasGlyph(String)}
+ method. You can determine which emojis use skin tones by reading the
+ <a class="external-link"
+ href="http://unicode.org/emoji/charts/full-emoji-list.html">
+ Unicode documentation</a>.
+ </li>
+</ul>
+
+
+<h2 id="icu4">ICU4J APIs in Android</h2>
+
+<p>
+ Android 7.0 now offers a subset of <a href=
+ "http://site.icu-project.org/">ICU4J</a> APIs in the Android framework under
+ the <code>android.icu</code> package. Migration is easy, and mostly entails
+ simply changing from the <code>com.java.icu</code> namespace to
+ <code>android.icu</code>. If you are already using an ICU4J bundle in your
+ apps, switching to the <code>android.icu</code> APIs provided in the Android
+ framework can produce substantial savings in APK size.
+</p>
+
+<p>
+ To learn more about the Android ICU4J APIs, see <a href=
+ "{@docRoot}preview/features/icu4j-framework.html">ICU4J Support</a>.
+</p>
+
+<h2 id="webview">WebView</h2>
+
+<h3>Chrome + WebView, Together</h3>
+
+<p>
+ Starting with Chrome version 51 on Android 7.0 and above, the Chrome APK on your device
+ is used to provide and render Android System WebViews. This approach improves memory
+ usage on the device itself and also reduces the bandwidth required to keep
+ WebView up to date (as the standalone WebView APK will no longer be updated
+ as long as Chrome remains enabled).
+</p>
+
+<p>
+ You can choose your WebView provider by enabling Developer Options and
+ selecting <strong>WebView implementation</strong>. You can use any compatible
+ Chrome version (Dev, Beta or Stable) that is installed on your device or the
+ standalone Webview APK to act as the WebView implementation.
+</p>
+
+<h3>Multiprocess</h3>
+
+<p>
+ Starting with Chrome version 51 in Android 7.0, WebView will run web content in a
+ separate sandboxed process when the developer option "Multiprocess WebView"
+ is enabled.
+</p>
+
+<p>
+ We're looking for feedback on compatibility and runtime performance in N
+ before enabling multiprocess WebView in a future version of Android. In this
+ version, regressions in startup time, total memory usage and software
+ rendering performance are expected.
+</p>
+
+<p>
+ If you find unexpected issues in multiprocess mode we’d like to hear about
+ them. Please get in touch with the WebView team on the <a href=
+ "https://bugs.chromium.org/p/chromium/issues/entry?template=Webview%20Bugs"
+ >Chromium bug tracker</a>.
+</p>
+
+<h3>Javascript run before page load</h3>
+<p>
+ Starting with apps targeting Android 7.0, the Javascript context will be reset
+ when a new page is loaded. Currently, the context is carried over for the
+ first page loaded in a new WebView instance.
+</p>
+
+<p>
+ Developers looking to inject Javascript into the WebView should execute the
+ script after the page has started to load.
+</p>
+
+<h3>Geolocation on insecure origins</h3>
+
+<p>
+ Starting with apps targeting Android 7.0, the geolocation API will only be
+ allowed on secure origins (over HTTPS.) This policy is designed to protect
+ users’ private information when they’re using an insecure connection.
+</p>
+
+<h3>Testing with WebView Beta</h3>
+
+<p>
+ WebView is updated regularly, so we recommend that you test compatibility
+ with your app frequently using WebView’s beta channel. To get started testing
+ pre-release versions of WebView on Android 7.0, download and install either
+ Chrome Dev or Chrome Beta, and select it as the WebView implementation under
+ developer options as described above. Please report issues via the <a href=
+ "https://bugs.chromium.org/p/chromium/issues/entry?template=Webview%20Bugs">Chromium
+ bug tracker</a> so that we can fix them before a new version of WebView is
+ released.
+</p>
+
+<p>
+ If you have any other questions or issues, feel free to reach out to the
+ WebView team via our <a href=
+ "https://plus.google.com/communities/105434725573080290360">G+ community</a>.
+</p>
+
+<h2 id="gles_32">OpenGL™ ES 3.2 API</h2>
+
+<p>Android 7.0 adds framework interfaces and platform support for OpenGL ES 3.2, including:</p>
+
+<ul>
+ <li> All extensions from the <a class="external-link"
+href="https://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">
+Android Extension Pack</a></a> (AEP) except for <code>EXT_texture_sRGB_decode</code>.
+ <li> Floating-point framebuffers for HDR and deferred shading.
+ <li> BaseVertex draw calls to enable better batching and streaming.
+ <li> Robust buffer access control to reduce WebGL overhead.
+</ul>
+
+<p>The framework API for OpenGL ES 3.2 on Android 7.0 is provided with the
+<code>GLES32</code> class. When using OpenGL ES 3.2, be sure to declare the
+requirement in your manifest file, using the <code><uses-feature></code> tag and
+the <code>android:glEsVersion</code> attribute. </p>
+
+<p>For information about using OpenGL ES, including how to check a device's
+supported OpenGL ES version at runtime, see the <a
+href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL ES API guide</a>.</p>
+
+
+<h2 id="android_tv_recording">Android TV Recording</h2>
+
+<p>Android 7.0 adds the ability to record and playback content from Android TV input
+services via new recording APIs. Building on top of existing time-shifting
+APIs, TV input services can control what channel data can be recorded, how
+recorded sessions are saved, and manage user interaction with recorded content. </p>
+
+<p>For more information, see <a
+href="{@docRoot}preview/features/tv-recording-api.html">Android TV Recording APIs</a>.</p>
+
+
+<h2 id="android_for_work">Android for Work</h2>
+
+<p>Android for Work adds many new features and APIs for devices running Android 7.0.
+Some highlights are below — for a complete list of changes, see
+<a href="{@docRoot}preview/features/afw.html">Android for Work Updates</a>.</p>
+
+<h3 id="work_profile_security_challenge">Work profile security challenge </h3>
+
+<p>
+ Profile owners targeting the N SDK
+ can specify a separate security challenge for apps running in
+ the work profile. The work challenge is shown when a user attempts to open
+ any work apps. Successful completion of the security challenge unlocks the
+ work profile and decrypts it if necessary. For profile owners,
+ <code>ACTION_SET_NEW_PASSWORD</code> prompts the user to set a work
+ challenge, and <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> prompts
+ the user to set a device lock.
+</p>
+
+<p>
+ Profile owners can set distinct passcode policies for the work challenge
+ (such as how long the PIN needs to be, or whether a fingerprint can be used
+ to unlock the profile) using the <code>setPasswordQuality()</code>,
+ <code>setPasswordMinimumLength()</code> and related methods. The profile
+ owner can also set the device lock using the <code>DevicePolicyManager</code>
+ instance returned by the new <code>getParentProfileInstance()</code> method.
+ Additionally, profile owners can customize the credentials screen for the
+ work challenge using the new <code>setOrganizationColor()</code> and
+ <code>setOrganizationName()</code> methods.
+</p>
+<h3 id="turn_off_work">Turn off work </h3>
+
+<p>On a device with a work profile, users can toggle work mode. When work mode is
+off the managed user is temporarily shut down, which disables work profile
+apps, background sync, and notifications. This includes the profile owner
+application. When work mode is off, the system displays a persistent status
+icon to remind the user that they can't launch work apps. The launcher
+indicates that work apps and widgets are not accessible. </p>
+
+<h3 id="always_on_vpn">Always on VPN </h3>
+
+<p>Device owners and profile owners can ensure that work apps always connect
+through a specified VPN. The system automatically starts that VPN after the
+device boots.</p>
+
+<p>
+ New <code>DevicePolicyManager</code> methods are
+ <code>setAlwaysOnVpnPackage()</code> and
+ <code>getAlwaysOnVpnPackage()</code>.
+</p>
+
+<p>Because VPN services can be bound directly by the system without app
+interaction, VPN clients need to handle new entry points for Always on VPN. As
+before, services are indicated to the system by an intent filter matching
+action <code>android.net.VpnService</code>. </p>
+
+<p>
+ Users can also manually set Always on VPN clients that implement
+ <code>VPNService</code> methods using
+ <strong>Settings>More>Vpn</strong>. The option to enable Always on VPN
+ from Settings is available only if VPN client targets API level 24.
+</p>
+
+<h3 id="custom_provisioning">Customized provisioning</h3>
+
+<p>
+ An application can customize the profile owner and device owner provisioning
+ flows with corporate colors and logos.
+ <code>DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR</code> customizes
+ flow color. <code>DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI</code>
+ customizes the flow with a corporate logo.
+</p>
+
+<h2 id="accessibility_enhancements">Accessibility Enhancements</h2>
+
+<p>Android 7.0 now offers Vision Settings directly on the Welcome screen for new
+device setup. This makes it much easier for users to discover and configure
+accessibility features on their devices, including magnification gesture, font
+size, display size, and TalkBack. </p>
+
+<p>With these accessibility features getting more prominent placement, your users
+are more likely to try your app with them enabled. Make sure you test your apps
+early with these settings enabled. You can enable them from Settings >
+Accessibility.</p>
+
+<p>Also in Android 7.0, accessibility services can now help users with motor
+impairments to touch the screen. The new API allows building services with
+features such as face-tracking, eye-tracking, point scanning, and so on, to
+meet the needs of those users.</p>
+
+<p>For more information, see <code>android.accessibilityservice.GestureDescription</code>
+ in the downloadable <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.</p>
+
+
+<h2 id="direct_boot">Direct Boot</h2>
+
+<p>Direct boot improves device startup times and lets registered
+apps have limited functionality even after an unexpected reboot.
+For example, if an encrypted device reboots while the user is sleeping,
+registered alarms, messages and incoming calls can now continue to notify
+the user as normal. This also means accessibility services can also be
+ available immediately after a restart.</p>
+
+<p>Direct boot takes advantage of file based encryption in Android 7.0
+to enable fine grained encryption policies for both system and app data.
+The system uses a device-encrypted store for select system data and explicitly
+registered app data. By default a credential-encrypted store is used for all
+ other system data, user data, apps, and app data. </p>
+
+<p>At boot, the system starts in a restricted mode with access to
+device-encrypted data only, and without general access to apps or data.
+If you have components that you want to run in this mode, you can register
+them by setting a flag in the manifest. After restart, the system activates
+registered components by broadcasting the <code>LOCKED_BOOT_COMPLETED</code>
+intent. The system ensures registered device-encrypted app data is available
+before unlock. All other data is unavailable until the User confirms their lock
+ screen credentials to decrypt it. </p>
+
+For more information, see <a href="{@docRoot}preview/features/direct-boot.html">Direct Boot</a>.</p>
+</p>
+
+<h2 id="key_attestation">Key Attestation</h2>
+
+<p>
+ Android 7.0 introduces <em>key attestation</em>, a new security tool that helps
+ you make sure that the key pairs stored within a device's <a class=
+ "external-link" href=
+ "https://source.android.com/security/keystore/"><em>hardware-backed
+ keystore</em></a> properly protect the sensitive information that your app
+ uses. By using this tool, you gain additional confidence that your app
+ interacts with keys that reside in secure hardware, even if the device
+ running your app is rooted. If you use keys from the hardware-backed keystore
+ in your apps, you should use this tool, particularly if you use the keys to
+ verify sensitive information within your app.
+</p>
+
+<p>
+ Key attestation allows you to verify that an RSA or EC key pair has been
+ created and stored in a device’s hardware-backed keystore within the device’s
+ trusted execution environment (TEE). The tool also allows you to use an
+ off-device service, such as your app's back-end server, to determine and
+ strongly verify the uses and validity of the key pair. These features provide
+ an additional level of security that protects the key pair, even if someone
+ roots the device or compromises the security of the Android platform running
+ on the device.
+</p>
+
+<p class="note">
+ <strong>Note: </strong>Only a small number of devices running Android 7.0
+ support hardware-level key attestation; all other devices running Android 7.0
+ use software-level key attestation instead. Before you verify the properties
+ of a device's hardware-backed keys in a production-level environment, you
+ should make sure that the device supports hardware-level key attestation. To
+ do so, you should check that the attestation certificate chain contains a root
+ certificate that is signed by the Google attestation root key and that the
+ <code>attestationSecurityLevel</code> element within the <a
+ href="{@docRoot}preview/features/key-attestation.html#certificate_schema_keydescription">key
+ description</a> data structure is set to the TrustedEnvironment security
+ level.
+</p>
+
+<p>
+ For more information, see the
+ <a href="{@docRoot}preview/features/key-attestation.html">Key Attestation</a>
+ developer documentation.
+</p>
+
+<h2 id="network_security_config">Network Security Config</h2>
+
+<p>In Android 7.0, apps can customize the behavior of their secure (HTTPS, TLS)
+connections safely, without any code modification, by using the declarative
+<em>Network Security Config</em> instead of using the conventional
+error-prone programmatic APIs (e.g. X509TrustManager).</p>
+
+ <p>Supported features:</p>
+<ul>
+<li><b>Custom trust anchors.</b> Lets an application customize which
+Certificate Authorities (CA) are trusted for its secure connections. For
+example, trusting particular self-signed certificates or a restricted set of public CAs.
+</li>
+<li><b>Debug-only overrides.</b> Lets an application developer safely debug
+secure connections of their application without added risk to the installed
+base.
+</li>
+<li><b>Cleartext traffic opt-out.</b> Lets an application protect itself from
+accidental usage of cleartext traffic.</li>
+<li><b>Certificate pinning.</b> An advanced feature that lets an application
+ limit which server keys are trusted for secure connections.</li>
+</ul>
+
+<p>For more information, see <a
+href="{@docRoot}preview/features/security-config.html">Network Security
+Config</a>.</p>
+
+<h2 id="default_trusted_ca">Default Trusted Certificate Authority</h2>
+
+<p>By default, apps that target Android 7.0 only trust system-provided certificates
+and no longer trust user-added Certificate Authorities (CA). Apps targeting Android
+N that wish to trust user-added CAs should use the
+<a href="{@docRoot}preview/features/security-config.html">Network Security Config</a> to
+specify how user CAs should be trusted.</p>
+
+<h2 id="apk_signature_v2">APK Signature Scheme v2</h2>
+
+<p>
+ Android 7.0 introduces APK Signature Scheme v2, a new app-signing scheme that
+ offers faster app install times and more protection against unauthorized
+ alterations to APK files. By default, Android Studio 2.2 and the Android
+ Plugin for Gradle 2.2 sign your app using both APK Signature Scheme v2 and
+ the traditional signing scheme, which uses JAR signing.
+</p>
+
+<p>
+ Although we recommend applying APK Signature Scheme v2 to your app, this new
+ scheme is not mandatory. If your app doesn't build properly when using APK
+ Signature Scheme v2, you can disable the new scheme. The disabling process
+ causes Android Studio 2.2 and the Android Plugin for Gradle 2.2 to sign your
+ app using only the traditional signing scheme. To sign with only the
+ traditional scheme, open the module-level <code>build.gradle</code> file, then
+ add the line <code>v2SigningEnabled false</code> to your release signing
+ configuration:
+</p>
+
+<pre>
+ android {
+ ...
+ defaultConfig { ... }
+ signingConfigs {
+ release {
+ storeFile file("myreleasekey.keystore")
+ storePassword "password"
+ keyAlias "MyReleaseKey"
+ keyPassword "password"
+ <strong>v2SigningEnabled false</strong>
+ }
+ }
+ }
+</pre>
+
+<p class="caution"><strong>Caution: </strong> If you sign your app using APK
+ Signature Scheme v2 and make further changes to the app, the app's signature
+ is invalidated. For this reason, use tools such as <code>zipalign</code>
+ before signing your app using APK Signature Scheme v2, not after.
+</p>
+
+<p>
+ For more information, read the Android Studio documents that describe how to
+ <a href="{@docRoot}studio/publish/app-signing.html#release-mode">
+ sign an app</a> in Android Studio and how to <a href=
+ "{@docRoot}studio/build/build-variants.html#signing"> configure
+ the build file for signing apps</a> using the Android Plugin for Gradle.
+</p>
+
+<h2 id="scoped_directory_access">Scoped Directory Access</h2>
+
+<p>In Android 7.0, apps can use new APIs to request access to specific <a
+href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">external
+storage</a> directories, including directories on removable media such as SD
+cards. The new APIs greatly simplify how your application accesses standard
+external storage directories, such as the <code>Pictures</code> directory. Apps
+like photo apps can use these APIs instead of using
+<code>READ_EXTERNAL_STORAGE</code>, which grants access to all storage
+directories, or the Storage Access Framework, which makes the user navigate to
+the directory.</p>
+
+<p>Additionally, the new APIs simplify the steps a user takes to grant external
+storage access to your app. When you use the new APIs, the system uses a simple
+permissions UI that clearly details what directory the application is
+requesting access to.</p>
+
+<p>For more information, see the
+<a href="{@docRoot}preview/features/scoped-folder-access.html">Scoped
+Directory Access</a> developer documentation.</p>
+
+<h2 id="keyboard_shortcuts_helper">Keyboard Shortcuts Helper</h2>
+
+<p>
+ In Android 7.0, the user can press <strong>Meta + /</strong> to trigger a
+ <em>Keyboard Shortcuts</em> screen that displays all shortcuts available both
+ from the system and from the app in focus. The system retrieves these
+ shortcuts automatically from the app’s menu if the shortcuts exist. You can
+ also provide your own fine-tuned shortcuts lists for the screen. You can do
+ this by overriding the new <code>Activity.onProvideKeyboardShortcuts()</code>
+ method, described in the downloadable <a href=
+ "{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.
+</p>
+
+<p class="note">
+ <strong>Note:</strong> The <strong>Meta</strong> key is not present on all
+ keyboards: on a Macintosh keyboard, it is the <strong>Command</strong> key,
+ on the Windows keyboard, it is the <strong>Windows</strong> key, and on the
+ Pixel C and the Chrome OS keyboards, it is the <strong>Search</strong> key.
+</p>
+
+<p>
+ To trigger Keyboard Shortcuts Helper from anywhere in your app, call
+ {@code Activity.requestKeyboardShortcutsHelper()} for the relevant activity.
+</p>
+
+<h2 id="custom_pointer_api">
+ Custom Pointer API
+</h2>
+
+<p>
+ Android 7.0 introduces the Custom Pointer API, which lets you customize the
+ appearance, visibility, and behavior of the pointer. This capability is
+ especially useful when a user is using a mouse or touchpad to interact with
+ UI objects. The default pointer uses a standard icon. This API also includes
+ advanced functionality such as changing the pointer icon's appearance based
+ on specific mouse or touchpad movements.
+</p>
+
+<p>
+ To set a pointer icon, override the <code>onResolvePointerIcon()</code>
+ method of the <code>View</code> class. This method uses a
+ <code>PointerIcon</code> object to draw the icon that corresponds to a
+ specific motion event.
+</p>
+
+<h2 id="sustained_performance_api">Sustained Performance API</h2>
+
+<p>
+Performance can fluctuate dramatically for long-running apps, because the
+system throttles system-on-chip engines as device components reach their
+temperature limits. This fluctuation presents a moving target for app
+developers creating high-performance, long-running apps.
+</p>
+
+<p>
+To address these limitations, Android 7.0 includes support for
+<em>sustained performance mode</em>, enabling OEMs to provide hints about
+device-performance capabilities for long-running apps. App developers
+can use these hints to tune apps for a predictable,
+consistent level of device performance over long periods of time.
+</p>
+
+<p>
+App developers can try out this new API in Android 7.0 on
+Nexus 6P devices only. To use this feature,
+set the sustained performance window flag for the window
+you want to run in sustained performance mode. Set this flag using the
+{@code Window.setSustainedPerformanceMode()} method. The system automatically
+disables this mode when the window is no longer in focus.
+</p>
+
+<h2 id="vr">VR Support</h2>
+
+<p>
+Android 7.0 adds platform support and optimizations for a new VR Mode to let developers
+build high-quality mobile VR experiences for users. There are a number of performance
+enhancements, including access to an exclusive CPU core for VR apps.
+Within your apps, you can take advantage of intelligent head-tracking,
+and stereo notifications that work for VR. Most importantly, Android 7.0 provides for
+very low latency graphics. For complete information about building VR apps for Android 7.0,
+see the <a href="https://developers.google.com/vr/android/">Google VR SDK for Android</a>.
+</p>
+
+
+<h2 id="print_svc">Print Service Enhancements</h2>
+
+<p>
+ In Android 7.0, print service developers can now surface additional information
+ about individual printers and print jobs.
+</p>
+
+<p>
+ When listing individual printers, a print service can now set per-printer
+ icons in two ways:
+</p>
+
+<ul>
+ <li>You can set an icon from a resource ID by calling
+ <code>PrinterInfo.Builder.setResourceIconId()</code>
+ </li>
+
+ <li>You can show an icon from the network by calling
+ <code>PrinterInfo.Builder.setHasCustomPrinterIcon()</code>, and setting a
+ callback for when the icon is requested using
+ <code>android.printservice.PrinterDiscoverySession.onRequestCustomPrinterIcon()</code>
+ </li>
+</ul>
+
+<p>
+ In addition, you can provide a per-printer activity to display additional
+ information by calling <code>PrinterInfo.Builder.setInfoIntent()</code>.
+</p>
+
+<p>
+ You can indicate the progress and status of print jobs in the print job
+ notification by calling
+ <code>android.printservice.PrintJob.setProgress()</code> and
+ <code>android.printservice.PrintJob.setStatus()</code>, respectively.
+</p>
+
+<p>
+ For more information about these methods, see the downloadable <a href=
+ "{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.
+</p>
+
+<h2 id="framemetrics_api">FrameMetricsListener API</h2>
+
+<p>
+The FrameMetricsListener API allows an app to monitor its UI rendering
+performance. The API provides this capability by exposing a streaming Pub/Sub API to transfer frame
+timing info for the app's current window. The data returned is
+equivalent to that which <code><a href="{@docRoot}tools/help/shell.html#shellcommands">adb shell</a>
+dumpsys gfxinfo framestats</code> displays, but is not limited to the past 120 frames.
+</p>
+
+<p>
+You can use FrameMetricsListener to measure interaction-level UI
+performance in production, without a USB connection. This API
+allows collection of data at a much higher granularity than does
+{@code adb shell dumpsys gfxinfo}. This higher granularity is possible because
+the system can collect data for particular interactions in the app; the system
+need not capture a global summary of the entire app’s
+performance, or clear any global state. You can use this
+capability to gather performance data and catch regressions in UI performance
+for real use cases within an app.
+</p>
+
+<p>
+To monitor a window, implement the <code>FrameMetricsListener.onMetricsAvailable()</code>
+callback method and register it on that window. For more information, refer to
+the {@code FrameMetricsListener} class documentation in
+the downloadable <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.
+</p>
+
+<p>
+The API provides a {@code FrameMetrics} object, which contains timing data that
+the rendering subsystem reports for various milestones in a frame lifecycle.
+The supported metrics are: {@code UNKNOWN_DELAY_DURATION},
+{@code INPUT_HANDLING_DURATION}, {@code ANIMATION_DURATION},
+{@code LAYOUT_MEASURE_DURATION}, {@code DRAW_DURATION}, {@code SYNC_DURATION},
+{@code COMMAND_ISSUE_DURATION}, {@code SWAP_BUFFERS_DURATION},
+{@code TOTAL_DURATION}, and {@code FIRST_DRAW_FRAME}.
+</p>
+
+
+<h2 id="virtual_files">Virtual Files</h2>
+
+<p>
+ In previous versions of Android, your app could use the Storage Access
+ Framework to allow users to select files from their cloud storage accounts,
+ such as Google Drive. However, there was no way to represent files that did
+ not have a direct bytecode representation; every file was required to provide
+ an input stream.
+</p>
+
+<p>
+ Android 7.0 adds the concept of <em>virtual files</em> to the Storage Access
+ Framework. The virtual files feature allows your
+ {@link android.provider.DocumentsProvider} to return document URIs that can be
+ used with an {@link android.content.Intent#ACTION_VIEW} intent even if they
+ don't have a direct bytecode representation. Android 7.0 also allows you to
+ provide alternate formats for user files, virtual or otherwise.
+</p>
+
+<p>
+ To get a URI for a virtual document in your app, first you create an
+ {@link android.content.Intent} to open the file picker UI. Since an app
+ cannot directly open a virtual file by using the
+ {@link android.content.ContentResolver#openInputStream(Uri) openInputStream()}
+ method, your app does not receive any virtual files if you include the
+ {@link android.content.Intent#CATEGORY_OPENABLE} category.
+</p>
+
+<p>
+ After the user has made a selection, the system calls the
+ {@link android.app.Activity#onActivityResult onActivityResult()} method.
+ Your app can retrieve the URI of the virtual file and get an input stream, as
+ demonstrated in the code snippet below.
+</p>
+
+<pre>
+ // Other Activity code ...
+
+ final static private int REQUEST_CODE = 64;
+
+ // We listen to the OnActivityResult event to respond to the user's selection.
+ @Override
+ public void onActivityResult(int requestCode, int resultCode,
+ Intent resultData) {
+ try {
+ if (requestCode == REQUEST_CODE &&
+ resultCode == Activity.RESULT_OK) {
+
+ Uri uri = null;
+
+ if (resultData != null) {
+ uri = resultData.getData();
+
+ ContentResolver resolver = getContentResolver();
+
+ // Before attempting to coerce a file into a MIME type,
+ // check to see what alternative MIME types are available to
+ // coerce this file into.
+ String[] streamTypes =
+ resolver.getStreamTypes(uri, "*/*");
+
+ AssetFileDescriptor descriptor =
+ resolver.openTypedAssetFileDescriptor(
+ uri,
+ streamTypes[0],
+ null);
+
+ // Retrieve a stream to the virtual file.
+ InputStream inputStream = descriptor.createInputStream();
+ }
+ }
+ } catch (Exception ex) {
+ Log.e("EXCEPTION", "ERROR: ", ex);
+ }
+ }
+</pre>
+
+<p>
+ For more information about accessing user files, see the
+ <a href="{@docRoot}guide/topics/providers/document-provider.html">Storage
+ Access Frameworks guide</a>.
+</p>
diff --git a/docs/html/about/versions/nougat/index.jd b/docs/html/about/versions/nougat/index.jd
new file mode 100644
index 0000000..8661d77
--- /dev/null
+++ b/docs/html/about/versions/nougat/index.jd
@@ -0,0 +1,109 @@
+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
+
+<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-8of16" style="padding-left:2em">
+ <h1 class="dac-hero-title">Android 7.0 Nougat</h1>
+ <p class="dac-hero-description">
+ 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>.
+ Take advantage of <strong>multi-window UI</strong>,
+ <strong>direct reply notifications</strong> and more.
+ </p>
+
+ <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>
+ </div>
+ <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></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>
+</section>
+
+<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://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/dev-community">
+ <i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
+ Join dev community
+ </a>
+ </li>
+ </ul>
+ </div><!-- end .wrap -->
+</div><!-- end .dac-actions -->
+
+<section class="dac-section dac-light dac-small" id="latest"><div class="wrap">
+ <h2 class="norule">Latest</h2>
+ <div class="resource-widget resource-flow-layout col-16"
+ data-query="type:blog+tag:androidn+tag:featured, type:youtube+tag:androidn+tag:featured"
+ data-sortOrder="-timestamp"
+ data-cardSizes="6x6"
+ data-items-per-page="6"
+ data-maxResults="15"
+ data-initial-results="3"></div>
+</div></section>
+
+<section class="dac-section dac-gray" id="videos"><div class="wrap">
+ <h1 class="dac-section-title">Videos</h1>
+ <div class="dac-section-subtitle">
+ 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: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">Resources</h1>
+ <div class="dac-section-subtitle">
+ 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:nougat/landing/more"
+ data-cardSizes="6x6"
+ data-items-per-page="6"
+ data-maxResults="15"
+ data-initial-results="6"></div>
+ </div>
+</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/design/_project.yaml b/docs/html/design/_project.yaml
new file mode 100644
index 0000000..72df4a8
--- /dev/null
+++ b/docs/html/design/_project.yaml
@@ -0,0 +1,5 @@
+name: "Design"
+home_url: /design/
+description: "Create beautiful experiences in your apps."
+content_license: cc3-apache2
+buganizer_id: 30209417
diff --git a/docs/html/develop/_project.yaml b/docs/html/develop/_project.yaml
new file mode 100644
index 0000000..40a66b3
--- /dev/null
+++ b/docs/html/develop/_project.yaml
@@ -0,0 +1,5 @@
+name: "Develop"
+home_url: /develop/
+description: "Android Studio provides the fastest tools for building apps on every type of Android device."
+content_license: cc3-apache2
+buganizer_id: 30209417
diff --git a/docs/html/develop/index.jd b/docs/html/develop/index.jd
index bd933f4..c6fb319 100644
--- a/docs/html/develop/index.jd
+++ b/docs/html/develop/index.jd
@@ -14,24 +14,31 @@
<div class="wrap">
<div class="cols dac-hero-content">
<div class="col-1of2 col-push-1of2 dac-hero-figure">
- <img class="dac-hero-image" src="/images/develop/hero_image_studio5_2x.png" srcset="/images/develop/hero_image_studio5.png 1x, /images/develop/hero_image_studio5_2x.png 2x">
+ <img class="dac-hero-image" style="padding-top:32px"
+ src="/images/develop/hero-layout-editor_2x.png"
+ srcset="/images/develop/hero-layout-editor_2x.png 2x,
+ /images/develop/hero-layout-editor.png 1x">
</div>
<div class="col-1of2 col-pull-1of2" style="margin-bottom:40px">
<h1 class="dac-hero-title">
<a style="color:inherit" href="{@docRoot}studio/index.html">
- Android Studio 2.1,<br>now available!</a></h1>
+ Android Studio 2.2!</a></h1>
-<p class="dac-hero-description">Android Studio provides the fastest tools for
-building apps on every type of Android device.</p>
+<p class="dac-hero-description">There are 20+ new features in this release
+focused on helping you code faster and smarter. With Android Studio 2.2 you
+can:</p>
-<p class="dac-hero-description">The latest version, Android Studio 2.1, adds
-support for N Preview development on top of the faster Android Emulator and
-Instant Run feature from 2.0.</p>
+<ul class="dac-hero-description">
+ <li>Develop your app user interface faster with the new Layout Editor &
+ Constraint Layout</li>
+ <li>Develop smarter with the APK analyzer & expanded code analysis</li>
+ <li>Develop with the the latest Android 7.0 Nougat APIs & features</li>
+</ul>
<p style="margin-top:24px">
<a class="dac-hero-cta" href="{@docRoot}studio/index.html">
<span class="dac-sprite dac-auto-chevron"></span>
- Get Android Studio
+ Get Android Studio 2.2
</a>
<wbr>
<a class="dac-hero-cta" href="{@docRoot}studio/releases/index.html">
diff --git a/docs/html/distribute/_project.yaml b/docs/html/distribute/_project.yaml
new file mode 100644
index 0000000..5777333
--- /dev/null
+++ b/docs/html/distribute/_project.yaml
@@ -0,0 +1,5 @@
+name: "Distribute"
+home_url: /distribute/
+description: "The most visited store in the world for Android apps. Cloud-connected and always synced, it's never been easier for users to find and download your apps."
+content_license: cc3-apache2
+buganizer_id: 30209417
diff --git a/docs/html/distribute/analyze/_project.yaml b/docs/html/distribute/analyze/_project.yaml
new file mode 100644
index 0000000..5c77074
--- /dev/null
+++ b/docs/html/distribute/analyze/_project.yaml
@@ -0,0 +1,6 @@
+name: "Analyze"
+home_url: /distribute/analyze/
+description: "Understanding what your users do inside your app is the key to engaging and monetizing them."
+content_license: cc3-apache2
+buganizer_id: 30209417
+parent_project_metadata_path: /distribute/_project.yaml
diff --git a/docs/html/distribute/engage/_project.yaml b/docs/html/distribute/engage/_project.yaml
new file mode 100644
index 0000000..fd8fa44
--- /dev/null
+++ b/docs/html/distribute/engage/_project.yaml
@@ -0,0 +1,6 @@
+name: "Engage & Retain"
+home_url: /distribute/engage/
+description: "Engaging and retaining active users are the keys to success. Here are some resources to help you build an active user base."
+content_license: cc3-apache2
+buganizer_id: 30209417
+parent_project_metadata_path: /distribute/_project.yaml
diff --git a/docs/html/distribute/essentials/_project.yaml b/docs/html/distribute/essentials/_project.yaml
new file mode 100644
index 0000000..cafde8d
--- /dev/null
+++ b/docs/html/distribute/essentials/_project.yaml
@@ -0,0 +1,6 @@
+name: "Essentials"
+home_url: /distribute/essentials/
+description: "A focus on quality should be part of your entire app delivery process: from initial concept through app and UI design, coding and testing and onto a process of monitoring feedback and making improvement after launch."
+content_license: cc3-apache2
+buganizer_id: 30209417
+parent_project_metadata_path: /distribute/_project.yaml
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/googleplay/_project.yaml b/docs/html/distribute/googleplay/_project.yaml
new file mode 100644
index 0000000..2dfded3
--- /dev/null
+++ b/docs/html/distribute/googleplay/_project.yaml
@@ -0,0 +1,6 @@
+name: "Google Play"
+home_url: /distribute/googleplay/
+description: "The premier store for distributing Android apps and games, with global reach and tools to help you gain traction in the marketplace."
+content_license: cc3-apache2
+buganizer_id: 30209417
+parent_project_metadata_path: /distribute/_project.yaml
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/monetize/_project.yaml b/docs/html/distribute/monetize/_project.yaml
new file mode 100644
index 0000000..1936be2
--- /dev/null
+++ b/docs/html/distribute/monetize/_project.yaml
@@ -0,0 +1,6 @@
+name: "Earn"
+home_url: /distribute/monetize/
+description: "There are many ways to make money with your apps on Google Play, and we offer a variety of tools to make it easy."
+content_license: cc3-apache2
+buganizer_id: 30209417
+parent_project_metadata_path: /distribute/_project.yaml
diff --git a/docs/html/distribute/stories/_project.yaml b/docs/html/distribute/stories/_project.yaml
new file mode 100644
index 0000000..1c242bb
--- /dev/null
+++ b/docs/html/distribute/stories/_project.yaml
@@ -0,0 +1,6 @@
+name: "Stories"
+home_url: /distribute/stories/
+description: "Android developers, their apps, and their successes with Android and Google Play."
+content_license: cc3-apache2
+buganizer_id: 30209417
+parent_project_metadata_path: /distribute/_project.yaml
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/distribute/tools/_project.yaml b/docs/html/distribute/tools/_project.yaml
new file mode 100644
index 0000000..a034ede
--- /dev/null
+++ b/docs/html/distribute/tools/_project.yaml
@@ -0,0 +1,6 @@
+name: "Tools & Reference"
+home_url: /distribute/tools/
+description: "Here you'll find resources to help you publish your apps and games, acquire users, and monetize your investment."
+content_license: cc3-apache2
+buganizer_id: 30209417
+parent_project_metadata_path: /distribute/_project.yaml
diff --git a/docs/html/distribute/users/_project.yaml b/docs/html/distribute/users/_project.yaml
new file mode 100644
index 0000000..cd7083e
--- /dev/null
+++ b/docs/html/distribute/users/_project.yaml
@@ -0,0 +1,6 @@
+name: "Get Users"
+home_url: /distribute/users/
+description: "There are some common themes from successful Google Play developers. These best practices are critical to your app or game's success."
+content_license: cc3-apache2
+buganizer_id: 30209417
+parent_project_metadata_path: /distribute/_project.yaml
diff --git a/docs/html/google/_project.yaml b/docs/html/google/_project.yaml
new file mode 100644
index 0000000..051e6bc
--- /dev/null
+++ b/docs/html/google/_project.yaml
@@ -0,0 +1,5 @@
+name: "Google Services"
+home_url: /google/
+description: "Take advantage of the latest Google technologies through a single set of APIs, delivered across Android devices worldwide as part of Google Play services."
+content_license: cc3-apache2
+buganizer_id: 30209417
diff --git a/docs/html/google/play/billing/billing_admin.jd b/docs/html/google/play/billing/billing_admin.jd
index 292cfcc..ad09f1f 100644
--- a/docs/html/google/play/billing/billing_admin.jd
+++ b/docs/html/google/play/billing/billing_admin.jd
@@ -235,7 +235,7 @@
<p>"<em>product_id</em>","<em>publish_state</em>","<em>purchase_type</em>","<em>autotranslate</em>
","<em>locale</em>; <em>title</em>; <em>description</em>","<em>autofill</em>","<em>country</em>;
-<em>price</em>"
+<em>price</em>", "<em>pricing_template_id</em>"
</p>
<p>Descriptions and usage details are provided below.</p>
@@ -316,8 +316,9 @@
<p>"true","<em>default_price_in_home_currency</em>"
</li>
<li>
- <p>If <em>autofill</em> is set to <code>false</code>, you need to specify a <em>country</em>
- and a <em>price</em> for each currency, and you must use the following syntax:</p>
+ <p>If <em>autofill</em> is set to <code>false</code>, you need to either specify the <em>pricing_template_id</em>
+ that is linked to the in-app product or specify a <em>country</em> and a <em>price</em> for each currency.
+ If you choose to specify countries and prices, you must use the following syntax:</p>
<p>"false", "<em>home_country</em>; <em>default_price_in_home_currency</em>; <em>country_2</em>;
<em>country_2_price</em>; <em>country_3</em>; <em>country_3_price</em>; ..."</p>
</li>
@@ -335,11 +336,41 @@
</dd>
<dt>price</dt>
<dd>
+ <p>
+ If you use this value, you shouldn't specify a value for the <em>pricing_template_id</em>.
+ </p>
+ <p>
This is equivalent to the Price in the In-app Products UI. The price must be specified in
micro-units. To convert a currency value to micro-units, you multiply the real value by
1,000,000.
For example, if you want to sell an in-app item for $1.99, you specify <code>1990000</code> in the
<em>price</em> field.
+ </p>
+ </dd>
+ <dt>pricing_template_id</dt>
+ <dd>
+ <p>
+ If you use this value, you should set <em>autofill</em> to
+ <code>false</code> and leave the <em>price</em> column empty.
+ </p>
+ <p>
+ This value represents the ID of the pricing template that you've linked to
+ the in-app product. This ID appears under a pricing template's name
+ on the <strong>Pricing template</strong> page. If an in-app product isn't
+ linked to a pricing template, its <em>pricing_template_id</em> value is
+ empty.
+ </p>
+ <p>
+ If you import a CSV file and choose to overwrite the product list, you can
+ update the links between in-app products and pricing templates by changing
+ the value of an in-app product's <em>pricing_template_id</em>. Leave the
+ value empty to unlink an in-app product from all pricing templates.
+ </p>
+ <p>
+ <strong>Note: </strong>You can link up to 100 app prices or in-app product
+ prices with a particular pricing template. Therefore, don't specify the same
+ <em>pricing_template_id</em> value in more than 100 rows of your CSV file.
+ </p>
</dd>
</dl>
@@ -432,8 +463,11 @@
<p>
When creating a pricing template, you provide new pricing information that you
- can apply to paid apps and in-app products. To add a pricing template, do the
- following:
+ can apply to paid apps and in-app products. You can link the prices of up to
+ 100 apps and in-app products to a single pricing template.
+</p>
+</p>
+ To add a pricing template, do the following:
</p>
<ol>
diff --git a/docs/html/google/play/billing/billing_integrate.jd b/docs/html/google/play/billing/billing_integrate.jd
index e666bc6..5d6b3a8 100755
--- a/docs/html/google/play/billing/billing_integrate.jd
+++ b/docs/html/google/play/billing/billing_integrate.jd
@@ -90,7 +90,7 @@
<li>Select <strong>Google Play Billing Library</strong>.</li>
<li>Click <strong>Install packages</strong> to complete the download.</li>
</ol>
-<p>The {@code IInAppBillingService.aidl} file will be installed to {@code <sdk>/extras/google/play_billing/}.</p>
+<p>The {@code IInAppBillingService.aidl} file will be installed to {@code <sdk>/extras/google/play_billing/}.</p>
<p>To add the AIDL to your project:</p>
@@ -116,7 +116,7 @@
<strong>OK</strong>.</li>
<li>Using your operating system file explorer, navigate to
- {@code <sdk>/extras/google/play_billing/}, copy the
+ {@code <sdk>/extras/google/play_billing/}, copy the
{@code IInAppBillingService.aidl} file, and paste it into the
{@code com.android.vending.billing} package in your project.
</li>
diff --git a/docs/html/google/play/expansion-files.jd b/docs/html/google/play/expansion-files.jd
index 3c01684..cb8f277 100755
--- a/docs/html/google/play/expansion-files.jd
+++ b/docs/html/google/play/expansion-files.jd
@@ -131,7 +131,7 @@
<dt>{@code main} or {@code patch}</dt>
<dd>Specifies whether the file is the main or patch expansion file. There can be
only one main file and one patch file for each APK.</dd>
- <dt>{@code <expansion-version>}</dt>
+ <dt>{@code <expansion-version>}</dt>
<dd>This is an integer that matches the version code of the APK with which the expansion is
<em>first</em> associated (it matches the application's <a
href="{@docRoot}guide/topics/manifest/manifest-element.html#vcode">{@code android:versionCode}</a>
@@ -139,7 +139,7 @@
<p>"First" is emphasized because although the Developer Console allows you to
re-use an uploaded expansion file with a new APK, the expansion file's name does not change—it
retains the version applied to it when you first uploaded the file.</p></dd>
- <dt>{@code <package-name>}</dt>
+ <dt>{@code <package-name>}</dt>
<dd>Your application's Java-style package name.</dd>
</dl>
@@ -162,9 +162,9 @@
</pre>
<ul>
- <li>{@code <shared-storage>} is the path to the shared storage space, available from
+ <li>{@code <shared-storage>} is the path to the shared storage space, available from
{@link android.os.Environment#getExternalStorageDirectory()}.</li>
- <li>{@code <package-name>} is your application's Java-style package name, available
+ <li>{@code <package-name>} is your application's Java-style package name, available
from {@link android.content.Context#getPackageName()}.</li>
</ul>
@@ -470,7 +470,7 @@
<strong>Finish</strong>.</li>
<li>Select <strong>File > Project Structure</strong>.</li>
<li>Select the <em>Properties</em> tab and in <em>Library
-Repository</em>, enter the library from the {@code <sdk>/extras/google/} directory
+Repository</em>, enter the library from the {@code <sdk>/extras/google/} directory
({@code play_licensing/} for the License Verification Library or {@code
play_apk_expansion/downloader_library/} for the Downloader Library).</li>
<li>Select <strong>OK</strong> to create the new module.</li>
@@ -716,7 +716,7 @@
</li>
<li>Start the download by calling the static method {@code
DownloaderClientMarshaller.startDownloadServiceIfRequired(Context c, PendingIntent
-notificationClient, Class<?> serviceClass)}.
+notificationClient, Class<?> serviceClass)}.
<p>The method takes the following parameters:</p>
<ul>
<li><code>context</code>: Your application's {@link android.content.Context}.</li>
@@ -780,7 +780,7 @@
</li>
<li>When the {@code startDownloadServiceIfRequired()} method returns anything <em>other
than</em> {@code NO_DOWNLOAD_REQUIRED}, create an instance of {@code IStub} by
-calling {@code DownloaderClientMarshaller.CreateStub(IDownloaderClient client, Class<?>
+calling {@code DownloaderClientMarshaller.CreateStub(IDownloaderClient client, Class<?>
downloaderService)}. The {@code IStub} provides a binding between your activity to the downloader
service such that your activity receives callbacks about the download progress.
<p>In order to instantiate your {@code IStub} by calling {@code CreateStub()}, you must pass it
@@ -956,7 +956,7 @@
depends on the type of file you've used. As discussed in the <a href="#Overview">overview</a>, your
expansion files can be any kind of file you
want, but are renamed using a particular <a href="#Filename">file name format</a> and are saved to
-{@code <shared-storage>/Android/obb/<package-name>/}.</p>
+{@code <shared-storage>/Android/obb/<package-name>/}.</p>
<p>Regardless of how you read your files, you should always first check that the external
storage is available for reading. There's a chance that the user has the storage mounted to a
@@ -1059,7 +1059,7 @@
<p>The Google Market Apk Expansion package includes a library called the APK
Expansion Zip Library (located in {@code
-<sdk>/extras/google/google_market_apk_expansion/zip_file/}). This is an optional library that
+<sdk>/extras/google/google_market_apk_expansion/zip_file/}). This is an optional library that
helps you read your expansion
files when they're saved as ZIP files. Using this library allows you to easily read resources from
your ZIP expansion files as a virtual file system.</p>
diff --git a/docs/html/google/play/licensing/setting-up.jd b/docs/html/google/play/licensing/setting-up.jd
index 352b79b..11ca4d7 100755
--- a/docs/html/google/play/licensing/setting-up.jd
+++ b/docs/html/google/play/licensing/setting-up.jd
@@ -181,12 +181,12 @@
<ol>
<li>Launch the Android SDK Manager, available under the Android Studio Tools menu
(<strong>Tools > Android > SDK Manager</strong>) or by executing
-{@code <sdk>/tools/android sdk}.</li>
+{@code <sdk>/tools/android sdk}.</li>
<li>Select and download <strong>Google APIs</strong> for the Android version you'd like to target
(must be Android 2.2 or higher).</li>
<li>When the download is complete, open the AVD Manager, available under the Android Studio
Tools menu (<strong>Tools > Android > AVD Manager</strong>) or by executing
-{@code <sdk>/tools/android avd}.</li>
+{@code <sdk>/tools/android avd}.</li>
<li>In the <em>Android Virtual Device Manager</em> window, select
<strong>+ Create Virtual Device</strong> to set the configuration details for the new AVD. </li>
<li>In the <em>Virtual Device Configuration</em> window, select device hardware, then
@@ -317,7 +317,7 @@
<strong>File > New > Import Module</strong>.</li>
<li>In the <em>New Module</em> window, in <em>Source directory</em>, enter the LVL's
<code>library</code> directory (the directory containing the library's AndroidManifest.xml file)
-as the project root ({@code <sdk>/extras/google/play_licensing/library/AndroidManifest.xml}),
+as the project root ({@code <sdk>/extras/google/play_licensing/library/AndroidManifest.xml}),
then select <strong>Next</strong>.</li>
<li>Select <strong>Finish</strong> to import the library module.</li>
</ol>
diff --git a/docs/html/guide/_book.yaml b/docs/html/guide/_book.yaml
index 6d6686b..20ee483 100644
--- a/docs/html/guide/_book.yaml
+++ b/docs/html/guide/_book.yaml
@@ -9,6 +9,33 @@
- title: System Permissions
path: /guide/topics/security/permissions.html
+- title: Platform Architecture
+ path: /guide/platform/index.html
+ section:
+ - title: Use Java 8 Language Features
+ path: /guide/platform/j8-jack.html
+ path_attributes:
+ - name: es-lang
+ value: Funciones del lenguaje Java 8
+ - name: in-lang
+ value: Fitur Bahasa Java 8
+ - name: ja-lang
+ value: Java 8 の機能
+ - name: ko-lang
+ value: Java 8 언어 기능
+ - name: pt-br-lang
+ value: Recursos de linguagem do Java 8
+ - name: ru-lang
+ value: Возможности языка Java 8
+ - name: vi-lang
+ value: Tính năng của Ngôn ngữ Java 8
+ - name: zh-cn-lang
+ value: Java 8 语言功能
+ - name: zh-tw-lang
+ value: Java 8 語言功能
+ - title: Verifying App Behavior on the Android Runtime (ART)
+ path: /guide/practices/verifying-apps-art.html
+
- title: App Components
path: /guide/components/index.html
section:
@@ -69,6 +96,11 @@
path: /guide/topics/resources/runtime-changes.html
- title: Localization
path: /guide/topics/resources/localization.html
+ section:
+ - title: ICU4J Android Framework APIs
+ path: /guide/topics/resources/icu4j-framework.html
+ - title: Language and Locale
+ path: /guide/topics/resources/multilingual-support.html
- title: Resource Types
path: /guide/topics/resources/available-resources.html
section:
@@ -203,6 +235,8 @@
path: /guide/topics/search/adding-custom-suggestions.html
- title: Searchable Configuration
path: /guide/topics/search/searchable-config.html
+ - title: Multi-Window Support
+ path: /guide/topics/ui/multi-window.html
- title: Drag and Drop
path: /guide/topics/ui/drag-drop.html
- title: Accessibility
@@ -417,5 +451,3 @@
path: /guide/practices/screen-compat-mode.html
- title: Supporting Tablets and Handsets
path: /guide/practices/tablets-and-handsets.html
- - title: Verifying App Behavior on ART
- path: /guide/practices/verifying-apps-art.html
diff --git a/docs/html/guide/_project.yaml b/docs/html/guide/_project.yaml
new file mode 100644
index 0000000..d1f8e5e
--- /dev/null
+++ b/docs/html/guide/_project.yaml
@@ -0,0 +1,6 @@
+name: "API Guides"
+home_url: /guide/
+description: "Android provides a rich application framework that allows you to build innovative apps and games for mobile devices in a Java language environment."
+content_license: cc3-apache2
+buganizer_id: 30209417
+parent_project_metadata_path: /develop/_project.yaml
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/platform/images/android-stack_2x.png b/docs/html/guide/platform/images/android-stack_2x.png
new file mode 100644
index 0000000..33bb144
--- /dev/null
+++ b/docs/html/guide/platform/images/android-stack_2x.png
Binary files differ
diff --git a/docs/html/guide/platform/index.jd b/docs/html/guide/platform/index.jd
new file mode 100644
index 0000000..9aed461
--- /dev/null
+++ b/docs/html/guide/platform/index.jd
@@ -0,0 +1,217 @@
+page.title=Platform Architecture
+page.keywords=platform,architecture,framework
+@jd:body
+
+
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>
+ In this document
+ </h2>
+
+ <ol>
+ <li>
+ <a href="#linux-kernel">The Linux Kernel</a>
+ </li>
+
+ <li>
+ <a href="#hal">Hardware Abstraction Layer (HAL)</a>
+ </li>
+
+ <li>
+ <a href="#art">Android Runtime</a>
+ </li>
+
+ <li>
+ <a href="#native-libs">Native C/C++ Libraries</a>
+ </li>
+
+ <li>
+ <a href="#api-framework">Java API Framework</a>
+ </li>
+
+ <li>
+ <a href="#system-apps">System Apps</a>
+ </li>
+ </ol>
+ </div>
+</div>
+
+<p>
+ Android is an open source, Linux-based software stack created for a wide
+ array of devices and form factors. The following diagram shows the major
+ components of the Android platform.
+</p>
+
+<img src="/guide/platform/images/android-stack_2x.png" alt="" width=
+"519">
+<p class="img-caption">
+ <strong>Figure 1.</strong> The Android software stack.
+</p>
+
+<h2 id="linux-kernel">
+The Linux Kernel
+</h2>
+
+<p>
+ The foundation of the Android platform is the Linux kernel. For example,
+ <a href="#art">the Android Runtime (ART)</a> relies on the Linux kernel for
+ underlying functionalities such as threading and low-level memory management.
+</p>
+
+<p>
+ Using a Linux kernel allows Android to take advantage of <a href=
+ "https://source.android.com/security/overview/kernel-security.html">key
+ security features</a> and allows device manufacturers to develop hardware
+ drivers for a well-known kernel.
+</p>
+
+<h2 id="hal">
+Hardware Abstraction Layer (HAL)
+</h2>
+
+<p>
+ The <a href=
+ "https://source.android.com/devices/index.html#Hardware%20Abstraction%20Layer">
+ hardware abstraction layer (HAL)</a> provides standard interfaces that expose
+ device hardware capabilities to the higher-level <a href=
+ "#api-framework">Java API framework</a>. The HAL consists of multiple library
+ modules, each of which implements an interface for a specific type of hardware
+ component, such as the <a href=
+ "https://source.android.com/devices/camera/index.html">camera</a> or <a href=
+ "https://source.android.com/devices/bluetooth.html">bluetooth</a> module.
+ When a framework API makes a call to access device hardware, the Android
+ system loads the library module for that hardware component.
+</p>
+
+<h2 id="art">
+Android Runtime
+</h2>
+
+<p>
+ For devices running Android version 5.0 (API level 21) or higher, each app
+ runs in its own process and with its own instance of the <a href=
+ "http://source.android.com/devices/tech/dalvik/index.html">Android Runtime
+ (ART)</a>. ART is written to run multiple virtual machines on low-memory
+ devices by executing DEX files, a bytecode format designed specially for
+ Android that's optimized for minimal memory footprint. Build toolchains, such
+ as <a href="https://source.android.com/source/jack.html">Jack</a>, compile
+ Java sources into DEX bytecode, which can run on the Android platform.
+</p>
+
+<p>
+ Some of the major features of ART include the following:
+</p>
+
+<ul>
+ <li>Ahead-of-time (AOT) and just-in-time (JIT) compilation
+ </li>
+
+ <li>Optimized garbage collection (GC)
+ </li>
+
+ <li>Better debugging support, including a dedicated sampling profiler,
+ detailed diagnostic exceptions and crash reporting, and the ability to set
+ watchpoints to monitor specific fields
+ </li>
+</ul>
+
+<p>
+ Prior to Android version 5.0 (API level 21), Dalvik was the Android runtime.
+ If your app runs well on ART, then it should work on Dalvik as well, but
+ <a href="/guide/platform/verifying-apps-art.html">the reverse may not be
+ true</a>.
+</p>
+
+<p>
+ Android also includes a set of core runtime libraries that provide most of
+ the functionality of the Java programming language, including some <a href=
+ "/guide/platform/j8-jack.html">Java 8 language features</a>, that the Java
+ API framework uses.
+</p>
+
+<h2 id="native-libs">
+ Native C/C++ Libraries
+</h2>
+
+<p>
+ Many core Android system components and services, such as ART and HAL, are
+ built from native code that require native libraries written in C and C++.
+ The Android platform provides Java framework APIs to expose the functionality
+ of some of these native libraries to apps. For example, you can access
+ <a href="/guide/topics/graphics/opengl.html">OpenGL ES</a> through the
+ Android framework’s <a href=
+ "/reference/android/opengl/package-summary.html">Java OpenGL API</a> to add
+ support for drawing and manipulating 2D and 3D graphics in your app.
+</p>
+
+<p>
+ If you are developing an app that requires C or C++ code, you can use the
+ <a href="/ndk/index.html">Android NDK</a> to access some of these <a href=
+ "/ndk/guides/stable_apis.html">native platform libraries</a> directly from
+ your native code.
+</p>
+
+<h2 id="api-framework">
+Java API Framework
+</h2>
+
+<p>
+ The entire feature-set of the Android OS is available to you through APIs
+ written in the Java language. These APIs form the building blocks you need to
+ create Android apps by simplifying the reuse of core, modular system
+ components and services, which include the following:
+</p>
+
+<ul>
+ <li>A rich and extensible <a href="/guide/topics/ui/overview.html">View
+ System</a> you can use to build an app’s UI, including lists, grids, text
+ boxes, buttons, and even an embeddable web browser
+ </li>
+
+ <li>A <a href="/guide/topics/resources/overview.html">Resource Manager</a>,
+ providing access to non-code resources such as localized strings, graphics,
+ and layout files
+ </li>
+
+ <li>A <a href="/guide/topics/ui/notifiers/notifications.html">Notification
+ Manager</a> that enables all apps to display custom alerts in the status bar
+ </li>
+
+ <li>An <a href="/guide/components/activities.html">Activity Manager</a> that
+ manages the lifecycle of apps and provides a common <a href=
+ "/guide/components/tasks-and-back-stack.html">navigation back stack</a>
+ </li>
+
+ <li>
+ <a href="/guide/topics/providers/content-providers.html">Content
+ Providers</a> that enable apps to access data from other apps, such as
+ the Contacts app, or to share their own data
+ </li>
+</ul>
+
+<p>
+ Developers have full access to the same <a href=
+ "/reference/packages.html">framework APIs</a> that Android system apps use.
+</p>
+
+<h2 id="system-apps">
+System Apps
+</h2>
+
+<p>
+ Android comes with a set of core apps for email, SMS messaging, calendars,
+ internet browsing, contacts, and more. Apps included with the platform have
+ no special status among the apps the user chooses to install. So a
+ third-party app can become the user's default web browser, SMS messenger, or
+ even the default keyboard (some exceptions apply, such as the system's
+ Settings app).
+</p>
+
+<p>
+ The system apps function both as apps for users and to provide key
+ capabilities that developers can access from their own app. For example, if
+ your app would like to deliver an SMS message, you don't need to build that
+ functionality yourself—you can instead invoke whichever SMS app is already
+ installed to deliver a message to the recipient you specify.
+</p>
\ No newline at end of file
diff --git a/docs/html/guide/platform/j8-jack.jd b/docs/html/guide/platform/j8-jack.jd
new file mode 100644
index 0000000..9b19426
--- /dev/null
+++ b/docs/html/guide/platform/j8-jack.jd
@@ -0,0 +1,242 @@
+page.title=Use Java 8 Language Features
+page.keywords="android N", "Java 8", "Jack"
+@jd:body
+
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2 id="Contents">
+ In this document:
+ </h2>
+
+ <ol>
+ <li>
+ <a href="#supported-features">Supported Java 8 Language Features and
+ APIs</a>
+ </li>
+
+ <li>
+ <a href="#configuration">Enable Java 8 Features and the Jack
+ Toolchain</a>
+ <ul>
+ <li>
+ <a href="#configure-gradle">Configure Gradle</a>
+ </li>
+
+ <li>
+ <a href="#known-issues">Known issues</a>
+ </li>
+ </ul>
+ </li>
+ </ol>
+ </div>
+</div>
+
+<p>
+ Android supports all Java 7 language features and a subset of Java 8 language
+ features that vary by platform version. This page describes the new language
+ features you can use, how to properly configure your project to use them, and
+ any known issues you may encounter.
+</p>
+
+<p class="note">
+ <strong>Note:</strong> When developing apps for Android, using Java 8
+ language features is optional. You can keep your project's source and target
+ compatibility values set to Java 7, but you still need to compile using JDK
+ 8.
+</p>
+
+<p>
+ Support for Java 8 language features requires a new compiler called <a href=
+ "https://source.android.com/source/jack.html">Jack</a>. Jack is supported
+ only on Android Studio 2.1 and higher. So if you want to use Java 8 language
+ features, you need to use Android Studio 2.1 to build your app.
+</p>
+
+<p>
+ If you already have Android Studio installed, make sure you update to the
+ latest version by clicking <strong>Help > Check for Update</strong> (on
+ Mac, <strong>Android Studio > Check for Updates</strong>). If you don't
+ already have the IDE installed on your workstation, <a href=
+ "{@docRoot}studio/">download Android Studio here</a>.
+</p>
+
+<h2 id="supported-features">
+ Supported Java 8 Language Features and APIs
+</h2>
+
+<p>
+ Android does not support all Java 8 language features. However, the
+ following features are available when developing apps targeting
+ Android 7.0 (API level 24):
+</p>
+
+<ul>
+ <li>
+ <a class="external-link" href=
+ "https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html">Default
+ and static interface methods</a>
+ </li>
+
+ <li>
+ <a class="external-link" href=
+ "https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html">
+ Lambda expressions</a> (also available on API level 23 and lower)
+ </li>
+
+ <li>
+ <a class="external-link" href=
+ "https://docs.oracle.com/javase/tutorial/java/annotations/repeating.html">Repeatable
+ annotations</a>
+ </li>
+
+ <li>
+ <a class="external-link" href=
+ "https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html">
+ Method References</a> (also available on API level 23 and lower)
+ </li>
+
+ <li>
+ <a class="external-link" href=
+ "https://docs.oracle.com/javase/tutorial/java/annotations/type_annotations.html">
+ Type Annotations</a> (also available on API level 23 and lower)
+ </li>
+</ul>
+
+<p class="note">
+ <strong>Note:</strong> Type annotation information is only available at
+ compile time, and not during runtime.
+</p>
+
+<p>
+ To test lambda expressions, method references, and type annotations on
+ earlier versions of Android, go to your {@code build.gradle} file, and set
+ {@code compileSdkVersion} and {@code targetSdkVersion} to 23 or lower. You
+ will still need to <a href="#configuration">enable the Jack toolchain</a> to
+ use these Java 8 features.
+</p>
+
+<p>
+ Additionally, the following Java 8 language APIs are also available:
+</p>
+
+<ul>
+ <li>Reflection and language-related APIs:
+ <ul>
+ <li>
+ <a class="external-link" href=
+ "https://docs.oracle.com/javase/8/docs/api/java/lang/FunctionalInterface.html">
+ {@code java.lang.FunctionalInterface}</a>
+ </li>
+
+ <li>
+ <a class="external-link" href=
+ "https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Repeatable.html">
+ {@code java.lang.annotation.Repeatable}</a>
+ </li>
+
+ <li>
+ <a class="external-link" href=
+ "https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html#isDefault--">
+ {@code java.lang.reflect.Method.isDefault()}</a>
+ </li>
+
+ <li>and Reflection APIs associated with repeatable annotations, such as
+ <a class="external-link" href=
+ "https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/AnnotatedElement.html#getAnnotationsByType-java.lang.Class-">
+ {@code AnnotatedElement.getAnnotationsByType(Class)}</a>
+ </li>
+ </ul>
+ </li>
+
+ <li>Utility APIs:
+ <ul>
+ <li>
+ <a class="external-link" href=
+ "https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html">
+ {@code java.util.function}</a>
+ </li>
+
+ <li>
+ <a class="external-link" href=
+ "https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html">
+ {@code java.util.stream}</a>
+ </li>
+ </ul>
+ </li>
+</ul>
+
+<h2 id="configuration">
+ Enable Java 8 Features and the Jack Toolchain
+</h2>
+
+<p>
+ In order to use the new Java 8 language features, you need to also use the
+ <a href="https://source.android.com/source/jack.html">Jack toolchain</a>.
+ This new Android toolchain compiles Java language sources into
+ Android-readable DEX bytecode, has its own {@code .jack} library format, and
+ provides most toolchain features as part of a single tool: repackaging,
+ shrinking, obfuscation and multidex.
+</p>
+
+<p>Here is a comparison of the two toolchains used to build Android DEX files:</p>
+<ul>
+ <li>Legacy javac toolchain:<br>
+ <b>javac</b> ({@code .java} → {@code .class}) → <b>dx</b> ({@code
+ .class} → {@code .dex})
+ </li>
+
+ <li>New Jack toolchain:<br>
+ <b>Jack</b> ({@code .java} → {@code .jack} → {@code .dex})
+ </li>
+</ul>
+
+<h3 id="configure-gradle">
+ Configure Gradle
+</h3>
+
+<p>
+ To enable Java 8 language features and Jack for your project, enter the
+ following in your module-level {@code build.gradle} file:
+</p>
+
+<pre>
+android {
+ ...
+ defaultConfig {
+ ...
+ jackOptions {
+ enabled true
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+}
+</pre>
+
+<h3 id="known-issues">
+ Known issues
+</h3>
+
+<p>
+ <a href="{@docRoot}tools/building/building-studio.html#instant-run">Instant
+ Run</a> does not currently work with Jack and will be disabled while using
+ the new toolchain.
+</p>
+
+<p>Because Jack does not generate intermediate class files when compiling an
+app, tools that depend on these files do not currently work with Jack. Some
+examples of these tools are:</p>
+
+<ul>
+ <li>Lint detectors that operate on class files
+ </li>
+
+ <li>Tools and libraries that require the app’s class files (such as
+ instrumentation tests with JaCoCo)
+ </li>
+</ul>
+
+<p>If you find other issues while using Jack, <a href=
+"http://tools.android.com/filing-bugs">please file a bug</a>.</p>
\ No newline at end of file
diff --git a/docs/html/guide/practices/compatibility.jd b/docs/html/guide/practices/compatibility.jd
index 83e841c..fb3db84 100644
--- a/docs/html/guide/practices/compatibility.jd
+++ b/docs/html/guide/practices/compatibility.jd
@@ -114,7 +114,7 @@
<p>If necessary, you can prevent users from installing your app when their devices don't provide a
given feature by declaring it with a <a href=
-"{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
+"{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a>
element in your app's <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">manifest
file</a>.</p>
@@ -164,7 +164,7 @@
on this feature and make your app available to devices without Bluetooth by setting the <a href=
"{@docRoot}guide/topics/manifest/uses-feature-element.html#required">{@code required}</a> attribute
to {@code "false"} in the <a href=
-"{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a> tag.
+"{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code <uses-feature>}</a> tag.
For more information about implicitly required device features, read <a href=
"{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions">Permissions that Imply
Feature Requirements</a>.</p>
@@ -180,7 +180,7 @@
<p>The API level allows you to declare the minimum version with which your app is
compatible, using the <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code
-<uses-sdk>}</a> manifest tag and its
+<uses-sdk>}</a> manifest tag and its
<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a>
attribute.</p>
diff --git a/docs/html/guide/practices/verifying-apps-art.jd b/docs/html/guide/practices/verifying-apps-art.jd
index 217c65c..2da7c0e 100644
--- a/docs/html/guide/practices/verifying-apps-art.jd
+++ b/docs/html/guide/practices/verifying-apps-art.jd
@@ -2,60 +2,82 @@
@jd:body
<div id="qv-wrapper">
-<div id="qv">
-<h2>Quickview</h2>
- <ul>
- <li>The new Android runtime (ART) is available on some of the newest Android
- devices, though all of them currently have Dalvik as the default
- runtime.</li>
- <li>App developers should make sure their apps are compatible with ART,
- especially if you use JNI to run native code or if you use certain tools
- that produce non-standard code (such as some obfuscators).</li>
- </ul>
+ <div id="qv">
+ <h2 id="Contents">
+ In this document
+ </h2>
- <h2 id="Contents">In this document</h2>
- <ol>
- <li><a href="#GC_Migration">Addressing Garbage Collection (GC) Issues</a></li>
- <li><a href="#JNI_Issues">Preventing JNI Issues</a>
- <ol>
- <li><a href="#JNI_and_GC">Checking JNI code for garbage-collection
- issues</a></li>
- <li><a href="#Error_Handling">Error handling</a></li>
- <li><a href="#Object_Model_Changes">Object model changes</a></li>
- </ol>
- </li>
- <li><a href="#Stack_Size">Preventing Stack Size Issues</a></li>
- <li><a href="#AOT_Fails">Fixing AOT Compilation Issues</a></li>
- <li><a href="#Reporting_Problems">Reporting Problems</a></li>
- </ol>
- <h2>See also</h2>
- <ol>
- <li><a href="http://source.android.com/devices/tech/dalvik/art.html">Introducing ART</a></li>
- <li><a
-href="http://android-developers.blogspot.com/2011/07/debugging-android-jni-with-checkjni.html">Debugging
-Android JNI with CheckJNI</a></li>
- </ol>
-</div>
+ <ol>
+ <li>
+ <a href="#GC_Migration">Addressing Garbage Collection (GC) Issues</a>
+ </li>
+
+ <li>
+ <a href="#JNI_Issues">Preventing JNI Issues</a>
+ <ol>
+ <li>
+ <a href="#JNI_and_GC">Checking JNI code for garbage-collection
+ issues</a>
+ </li>
+
+ <li>
+ <a href="#Error_Handling">Error handling</a>
+ </li>
+
+ <li>
+ <a href="#Object_Model_Changes">Object model changes</a>
+ </li>
+ </ol>
+ </li>
+
+ <li>
+ <a href="#Stack_Size">Preventing Stack Size Issues</a>
+ </li>
+
+ <li>
+ <a href="#AOT_Fails">Fixing AOT Compilation Issues</a>
+ </li>
+
+ <li>
+ <a href="#Reporting_Problems">Reporting Problems</a>
+ </li>
+ </ol>
+
+ <h2>
+ See also
+ </h2>
+
+ <ol>
+ <li>
+ <a href=
+ "http://source.android.com/devices/tech/dalvik/art.html">Introducing
+ ART</a>
+ </li>
+
+ <li>
+ <a href=
+ "http://android-developers.blogspot.com/2011/07/debugging-android-jni-with-checkjni.html">
+ Debugging Android JNI with CheckJNI</a>
+ </li>
+ </ol>
+ </div>
</div>
-<p>With Android 4.4, we are beginning to roll out a new Android runtime,
-<strong>ART</strong>. This runtime offers a number of new features that improve
-performance and smoothness of the Android platform and apps. (You can find more
-information about ART's new features in <a
-href="http://source.android.com/devices/tech/dalvik/art.html">Introducing
-ART</a>.)</p>
+<p>
+ The Android runtime (ART) is the default runtime for devices running Android
+ 5.0 (API level 21) and higher. This runtime offers a number of features
+ that improve performance and smoothness of the Android platform and apps.
+ You can find more information about ART's new features in <a href=
+ "http://source.android.com/devices/tech/dalvik/art.html">Introducing
+ ART</a>.
+</p>
-<p>Currently, ART is available on a number of Android 4.4 devices, such as the
-Nexus 4, Nexus 5, Nexus 7, and Google Play edition devices.
-At this time, all devices still use Dalvik as the default runtime. We encourage
-you to test your apps for ART compatibility and to take advantage of ART's new
-features. However, for the time being, you should also take care to maintain
-compatibility with Dalvik.</p>
-
-<p>This document lets you know about things to watch for when migrating an
-existing app to be compatible with ART. Most apps should just work when
-running with ART. However, some techniques that work on Dalvik do not work on
-ART. This document discusses some of these issues.</p>
+<p>
+ However, some techniques that work on Dalvik do not work on ART. This
+ document lets you know about things to watch for when migrating an existing
+ app to be compatible with ART. Most apps should just work when running with
+ ART.
+</p>
<h2 id="GC_Migration">Addressing Garbage Collection (GC) Issues</h2>
@@ -147,7 +169,7 @@
<h3 id="Error_Handling">Error handling</h3>
-<p>ART's JNI throws errors in a number of cases where Dalvik didn’t. (Once
+<p>ART's JNI throws errors in a number of cases where Dalvik doesn’t. (Once
again, you can catch many such cases by testing with CheckJNI.)</p>
<p>For example, if <code>RegisterNatives</code> is called with a method that
diff --git a/docs/html/guide/topics/connectivity/bluetooth.jd b/docs/html/guide/topics/connectivity/bluetooth.jd
index 07fcd09..42229fd 100644
--- a/docs/html/guide/topics/connectivity/bluetooth.jd
+++ b/docs/html/guide/topics/connectivity/bluetooth.jd
@@ -1056,7 +1056,7 @@
object. <p>Similar to regular headset and A2DP profile devices, you must call
{@link android.bluetooth.BluetoothAdapter#getProfileProxy getProfileProxy()}
with a {@link android.bluetooth.BluetoothProfile.ServiceListener} and the {@link
-android.bluetooth.BluetoothProfile.ServiceListener#HEALTH} profile type to
+android.bluetooth.BluetoothProfile#HEALTH} profile type to
establish a connection with the profile proxy object.</p> </li>
<li>Create a {@link android.bluetooth.BluetoothHealthCallback} and register an
diff --git a/docs/html/guide/topics/connectivity/wifip2p.jd b/docs/html/guide/topics/connectivity/wifip2p.jd
index b8eb40e..2bcdf54 100644
--- a/docs/html/guide/topics/connectivity/wifip2p.jd
+++ b/docs/html/guide/topics/connectivity/wifip2p.jd
@@ -117,7 +117,7 @@
</tr>
<tr>
- <td>{@link android.net.wifi.p2p.WifiP2pManager.PeerListListener#discoverPeers discoverPeers()}</td>
+ <td>{@link android.net.wifi.p2p.WifiP2pManager#discoverPeers discoverPeers()}</td>
<td>Initiates peer discovery </td>
</tr>
@@ -147,7 +147,7 @@
android.net.wifi.p2p.WifiP2pManager#cancelConnect cancelConnect()}, {@link
android.net.wifi.p2p.WifiP2pManager#createGroup createGroup()}, {@link
android.net.wifi.p2p.WifiP2pManager#removeGroup removeGroup()}, and {@link
- android.net.wifi.p2p.WifiP2pManager.PeerListListener#discoverPeers discoverPeers()}</td>
+ android.net.wifi.p2p.WifiP2pManager#discoverPeers discoverPeers()}</td>
</tr>
<tr>
@@ -190,8 +190,8 @@
<tr>
<td>{@link android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_PEERS_CHANGED_ACTION}</td>
<td>Broadcast when you call {@link
- android.net.wifi.p2p.WifiP2pManager.PeerListListener#discoverPeers discoverPeers()}. You
- usually want to call {@link android.net.wifi.p2p.WifiP2pManager.PeerListListener#requestPeers
+ android.net.wifi.p2p.WifiP2pManager#discoverPeers discoverPeers()}. You
+ usually want to call {@link android.net.wifi.p2p.WifiP2pManager#requestPeers
requestPeers()} to get an updated list of peers if you handle this intent in your
application.</td>
</tr>
diff --git a/docs/html/guide/topics/data/data-storage.jd b/docs/html/guide/topics/data/data-storage.jd
index a745d00..770340b 100644
--- a/docs/html/guide/topics/data/data-storage.jd
+++ b/docs/html/guide/topics/data/data-storage.jd
@@ -252,6 +252,17 @@
save to the external storage. All applications can read and write files placed on the external
storage and the user can remove them.</p>
+<h3 id="ScopedDirAccess">Using Scoped Directory Access</h3>
+
+On Android 7.0 or later, if you need access to a specific directory on
+external storage, use scoped directory access. Scoped directory access
+simplifies how your application accesses standard external storage directories,
+such as the <code>Pictures</code> directory, and provides a simple
+permissions UI that clearly details what directory the application is
+requesting access to. For more details on scoped directory access, see
+<a href="{@docRoot}training/articles/scoped-directory-access.html">Using
+Scoped Directory Access</a>.
+
<h3 id="ExternalPermissions">Getting access to external storage</h3>
<p>In order to read or write files on the external storage, your app must acquire the
diff --git a/docs/html/guide/topics/location/strategies.jd b/docs/html/guide/topics/location/strategies.jd
index 2dfed2c..548ed9c 100755
--- a/docs/html/guide/topics/location/strategies.jd
+++ b/docs/html/guide/topics/location/strategies.jd
@@ -133,36 +133,69 @@
both to zero requests location notifications as frequently as possible. The last parameter is your
{@link android.location.LocationListener}, which receives callbacks for location updates.</p>
-<p>To request location updates from the GPS provider,
-substitute <code>GPS_PROVIDER</code> for <code>NETWORK_PROVIDER</code>. You can also request
-location updates from both the GPS and the Network Location Provider by calling {@link
-android.location.LocationManager#requestLocationUpdates requestLocationUpdates()} twice—once
-for <code>NETWORK_PROVIDER</code> and once for <code>GPS_PROVIDER</code>.</p>
+<p>To request location updates from the GPS provider, use {@link
+android.location.LocationManager#GPS_PROVIDER} instead of {@link
+android.location.LocationManager#NETWORK_PROVIDER}. You can also request
+location updates from both the GPS and the Network Location Provider by calling
+{@link android.location.LocationManager#requestLocationUpdates
+requestLocationUpdates()} twice—once for {@link
+android.location.LocationManager#NETWORK_PROVIDER} and once for {@link
+android.location.LocationManager#GPS_PROVIDER}.</p>
<h3 id="Permission">Requesting User Permissions</h3>
-<p>In order to receive location updates from <code>NETWORK_PROVIDER</code> or
-<code>GPS_PROVIDER</code>, you must request user permission by declaring either the {@code
-ACCESS_COARSE_LOCATION} or {@code ACCESS_FINE_LOCATION} permission, respectively, in your Android
-manifest file. For example:</p>
+<p>
+ In order to receive location updates from {@link
+ android.location.LocationManager#NETWORK_PROVIDER} or {@link
+ android.location.LocationManager#GPS_PROVIDER}, you must request the user's
+ permission by declaring either the {@code ACCESS_COARSE_LOCATION} or {@code
+ ACCESS_FINE_LOCATION} permission, respectively, in your Android manifest file.
+ Without these permissions, your application will fail at runtime when
+ requesting location updates.
+</p>
+<p>
+ If you are using both {@link
+ android.location.LocationManager#NETWORK_PROVIDER} and {@link
+ android.location.LocationManager#GPS_PROVIDER}, then you need to request only
+ the {@code ACCESS_FINE_LOCATION} permission, because it includes permission
+ for both providers. Permission for {@code ACCESS_COARSE_LOCATION} allows
+ access only to {@link android.location.LocationManager#NETWORK_PROVIDER}.
+</p>
+
+<p id="location-feature-caution" class="caution">
+ <strong>Caution:</strong> If your app targets Android 5.0 (API level 21) or
+ higher, you <em>must</em> declare that your app uses the
+ <code>android.hardware.location.network</code> or
+ <code>android.hardware.location.gps</code> hardware feature in the manifest
+ file, depending on whether your app receives location updates from {@link
+ android.location.LocationManager#NETWORK_PROVIDER} or from {@link
+ android.location.LocationManager#GPS_PROVIDER}. If your app receives location
+ information from either of these location provider sources, you need to
+ declare that the app uses these hardware features in your app manifest.
+ On devices running verions prior to Android 5.0 (API 21), requesting the
+ {@code ACCESS_FINE_LOCATION} or {@code ACCESS_COARSE_LOCATION} permission
+ includes an implied request for location hardware features. However,
+ requesting those permissions <em>does not</em> automatically request location
+ hardware features on Android 5.0 (API level 21) and higher.
+</p>
+
+<p>
+ The following code sample demonstrates how to declare the permission and
+ hardware feature in the manifest file of an app that reads data from the
+ device's GPS:
+</p>
<pre>
<manifest ... >
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
...
+ <!-- Needed only if your app targets Android 5.0 (API level 21) or higher. -->
+ <uses-feature android:name="android.hardware.location.gps" />
+ ...
</manifest>
</pre>
-<p>Without these permissions, your application will fail at runtime when requesting
-location updates.</p>
-
-<p class="note"><strong>Note:</strong> If you are using both <code>NETWORK_PROVIDER</code> and
-<code>GPS_PROVIDER</code>, then you need to request only the {@code ACCESS_FINE_LOCATION}
-permission, because it includes permission for both providers. (Permission for {@code
-ACCESS_COARSE_LOCATION} includes permission only for <code>NETWORK_PROVIDER</code>.)</p>
-
-
<h2 id="BestPerformance">Defining a Model for the Best Performance</h2>
<p>Location-based applications are now commonplace, but due to the less than optimal
@@ -404,9 +437,10 @@
the Android emulator. There are three different ways to send your application mock location
data: using Android Studio, DDMS, or the "geo" command in the emulator console.</p>
-<p class="note"><strong>Note:</strong> Providing mock location data is injected as GPS location
-data, so you must request location updates from <code>GPS_PROVIDER</code> in order for mock location
-data to work.</p>
+<p class="note"><strong>Note:</strong> Providing mock location data is injected
+as GPS location data, so you must request location updates from {@link
+android.location.LocationManager#GPS_PROVIDER} in order for mock location data
+to work.</p>
<h3 id="MockAVD">Using Android Studio</h3>
diff --git a/docs/html/guide/topics/manifest/activity-element.jd b/docs/html/guide/topics/manifest/activity-element.jd
index 5ced295..6deb14b 100644
--- a/docs/html/guide/topics/manifest/activity-element.jd
+++ b/docs/html/guide/topics/manifest/activity-element.jd
@@ -35,6 +35,7 @@
android:<a href="#prmsn">permission</a>="<i>string</i>"
android:<a href="#proc">process</a>="<i>string</i>"
android:<a href="#relinquish">relinquishTaskIdentity</a>=["true" | "false"]
+ android:<a href="#resizeableActivity">resizeableActivity</a>=["true" | "false"]
android:<a href="#screen">screenOrientation</a>=["unspecified" | "behind" |
"landscape" | "portrait" |
"reverseLandscape" | "reversePortrait" |
@@ -43,6 +44,7 @@
"sensor" | "fullSensor" | "nosensor" |
"user" | "fullUser" | "locked"]
android:<a href="#state">stateNotNeeded</a>=["true" | "false"]
+ android:<a href="#supportsPIP">supportsPictureInPicture</a>=["true" | "false"]
android:<a href="#aff">taskAffinity</a>="<i>string</i>"
android:<a href="#theme">theme</a>="<i>resource or theme</i>"
android:<a href="#uioptions">uiOptions</a>=["none" | "splitActionBarWhenNarrow"]
@@ -794,9 +796,39 @@
and icons in the <a href="{@docRoot}guide/components/recents.html">overview screen</a>.</p>
</dd>
+<dt id="resizeableActivity"><code>resizeableActivity</code></dt>
+
+<dd>
+<p>
+ Specifies whether the app supports <a href=
+ "{@docRoot}guide/topics/ui/multi-window.html">multi-window display</a>. You
+ can set this attribute in either the <code><activity></code> or
+ <a href="application-element.html"><code><application></code></a>
+ element.
+</p>
+
+<p>
+ If you set this attribute to true, the user can launch the activity in
+ split-screen and freeform modes. If you set the attribute to false, the
+ activity does not support multi-window mode. If this value is false, and the
+ user attempts to launch the activity in multi-window mode, the activity takes
+ over the full screen.
+</p>
+
+<p>
+ If your app targets API level 24 or higher, but you do not specify a value
+ for this attribute, the attribute's value defaults to true.
+</p>
+
+<p>
+ This attribute was added in API level 24.
+</p>
+</dd>
<dt><a name="screen"></a>{@code android:screenOrientation}</dt>
-<dd>The orientation of the activity's display on the device.
+<dd>The orientation of the activity's display on the device. The system ignores
+ this attribute if the activity is running in <a
+ href="{@docRoot}guide/topics/ui/multi-window.html">multi-window mode</a>.
<p>The value can be any one of the following strings:</p>
@@ -921,6 +953,19 @@
crashes for some reason.
</p></dd>
+<dt id="supportsPIP"><code>supportsPictureInPicture</code></dt>
+
+<dd>
+<p>
+ Specifies whether the activity supports <a href=
+ "{@docRoot}training/tv/playback/picture-in-picture.jd">Picture-in-Picture</a>
+ display. The system ignores this attribute if <a href=
+ "#resizeableActivity"><code>android:resizeableActivity</code></a> is false.
+</p>
+
+<p>This attribute was added in API level 24.</p>
+</dd>
+
<dt><a name="aff"></a>{@code android:taskAffinity}</dt>
<dd>The task that the activity has an affinity for. Activities with
the same affinity conceptually belong to the same task (to the same
diff --git a/docs/html/guide/topics/manifest/application-element.jd b/docs/html/guide/topics/manifest/application-element.jd
index 56d61f3..f8e251e 100644
--- a/docs/html/guide/topics/manifest/application-element.jd
+++ b/docs/html/guide/topics/manifest/application-element.jd
@@ -26,6 +26,7 @@
android:<a href="#proc">process</a>="<i>string</i>"
android:<a href="#restoreany">restoreAnyVersion</a>=["true" | "false"]
android:<a href="#requiredAccountType">requiredAccountType</a>="<i>string</i>"
+ android:<a href="#resizeableActivity">resizeableActivity</a>=["true" | "false"]
android:<a href="#restrictedAccountType">restrictedAccountType</a>="<i>string</i>"
android:<a href="#supportsrtl">supportsRtl</a>=["true" | "false"]
android:<a href="#aff">taskAffinity</a>="<i>string</i>"
@@ -358,6 +359,34 @@
</dd>
+<dt id="resizeableActivity"><code>resizeableActivity</code></dt>
+
+<dd>
+<p>
+ Specifies whether the app supports <a href=
+ "{@docRoot}guide/topics/ui/multi-window.html">multi-window display</a>. You
+ can set this attribute in either the <a href="activity-element">
+ <code><activity></code></a> or <code><application></code> element.
+</p>
+
+<p>
+ If you set this attribute to true, the user can launch the activity in
+ split-screen and freeform modes. If you set the attribute to false, the
+ activity does not support multi-window mode. If this value is false, and the
+ user attempts to launch the activity in multi-window mode, the activity takes
+ over the full screen.
+</p>
+
+<p>
+ If your app targets API level 24 or higher, but you do not specify a value
+ for this attribute, the attribute's value defaults to true.
+</p>
+
+<p>
+ This attribute was added in API level 24.
+</p>
+</dd>
+
<dt><a name="restrictedAccountType"></a>{@code android:restrictedAccountType}</dt>
<dd>Specifies the account type required by this application and indicates that restricted profiles
are allowed to access such accounts that belong to the owner user. If your app requires an
diff --git a/docs/html/guide/topics/manifest/uses-feature-element.jd b/docs/html/guide/topics/manifest/uses-feature-element.jd
index 0670348..7db0503 100755
--- a/docs/html/guide/topics/manifest/uses-feature-element.jd
+++ b/docs/html/guide/topics/manifest/uses-feature-element.jd
@@ -512,10 +512,11 @@
<li>Next, locate the <code>aapt</code> tool, if it is not already in your PATH.
If you are using SDK Tools r8 or higher, you can find <code>aapt</code> in the
-<code><<em>SDK</em>>/platform-tools/</code> directory.
+<code><<em>SDK</em>>/build-tools/<<em>tools version number</em>></code>
+directory.
<p class="note"><strong>Note:</strong> You must use the version of
-<code>aapt</code> that is provided for the latest Platform-Tools component available. If
-you do not have the latest Platform-Tools component, download it using the <a
+<code>aapt</code> that is provided for the latest Build-Tools component available. If
+you do not have the latest Build-Tools component, download it using the <a
href="{@docRoot}studio/intro/update.html">Android SDK Manager</a>.
</p></li>
<li>Run <code>aapt</code> using this syntax: </li>
@@ -1149,12 +1150,12 @@
<p>
As a best practice, you should still declare your requirement for this
- orientation using a {@code <uses-feature>} element. If you declare
+ orientation using a {@code <uses-feature>} element. If you declare
an orientation for your activity using <a href=
"{@docRoot}guide/topics/manifest/activity-element.html#screen">{@code
android:screenOrientation}</a>, but don't actually require it, you can
disable the requirement by declaring the orientation with a {@code
- <uses-feature>} element and include {@code
+ <uses-feature>} element and include {@code
android:required="false"}.
</p>
@@ -1685,6 +1686,15 @@
<pre><uses-feature android:name="android.hardware.camera" android:required="false" /></pre>
+<p class="caution">
+ <strong>Caution:</strong> If your app targets Android 5.0 (API level 21) or
+ higher and uses the <code>ACCESS_COARSE_LOCATION</code> or
+ <code>ACCESS_FINE_LOCATION</code> permission in order to receive location
+ updates from the network or a GPS, respectively, you must also explicitly
+ declare that your app uses the <code>android.hardware.location.network</code>
+ or <code>android.hardware.location.gps</code> hardware features.
+</p>
+
<p class="table-caption" id="permissions-features">
<strong>Table 2. </strong>Device permissions that imply device hardware use.
</p>
@@ -1736,14 +1746,29 @@
</tr>
<tr>
<td><code>ACCESS_COARSE_LOCATION</code></td>
- <td><code>android.hardware.location.network</code> <em>and</em>
-<br><code>android.hardware.location</code></td>
+ <td>
+ <p>
+ <code>android.hardware.location</code>
+ </p>
+ <p>
+ <code>android.hardware.location.network</code>
+ (Only when target API level is 20 or lower.)
+ </p>
+ </td>
<!-- <td></td> -->
</tr>
<tr>
<td><code>ACCESS_FINE_LOCATION</code></td>
- <td><code>android.hardware.location.gps</code> <em>and</em>
-<br><code>android.hardware.location</code></td>
+ <td>
+ <p>
+ <code>android.hardware.location</code>
+ </p>
+ <p>
+ <code>android.hardware.location.gps</code>
+ (Only when target API level is 20 or lower.)
+ </p>
+ </td>
+
<!-- <td></td> -->
</tr>
diff --git a/docs/html/guide/topics/manifest/uses-sdk-element.jd b/docs/html/guide/topics/manifest/uses-sdk-element.jd
index 94577ed..b8126c0 100755
--- a/docs/html/guide/topics/manifest/uses-sdk-element.jd
+++ b/docs/html/guide/topics/manifest/uses-sdk-element.jd
@@ -223,9 +223,14 @@
are running each version, see the <a href="{@docRoot}about/dashboards/index.html">Platform
Versions dashboards page</a>.</p>
-<table>
+<table id="api-level-table">
<tr><th>Platform Version</th><th>API Level</th><th>VERSION_CODE</th><th>Notes</th></tr>
+ <tr><td><a href="{@docRoot}about/versions/nougat/android-7.0.html">Android 7.0</a></td>
+ <td><a href="{@docRoot}sdk/api_diff/24/changes.html" title="Diff Report">24</a></td>
+ <td>{@link android.os.Build.VERSION_CODES#N}</td>
+ <td><a href="{@docRoot}about/versions/nougat/index.html">Platform Highlights</a></td></tr>
+
<tr><td><a href="{@docRoot}about/versions/marshmallow/android-6.0.html">Android 6.0</a></td>
<td><a href="{@docRoot}sdk/api_diff/23/changes.html" title="Diff Report">23</a></td>
<td>{@link android.os.Build.VERSION_CODES#M}</td>
diff --git a/docs/html/guide/topics/media/camera.jd b/docs/html/guide/topics/media/camera.jd
index c806c88..383b6c1 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:
@@ -158,10 +154,16 @@
<uses-permission android:name="android.permission.RECORD_AUDIO" />
</pre>
</li>
- <li><strong>Location Permission</strong> - If your application tags images with GPS location
-information, you must request location permission:
+ <li>
+ <p><strong>Location Permission</strong> - If your application tags images
+ with GPS location information, you must request the {@code ACCESS_FINE_LOCATION}
+ permission. Note that, if your app targets Android 5.0 (API level 21) or
+ higher, you also need to declare that your app uses the device's GPS:</p>
<pre>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+...
+<!-- Needed only if your app targets Android 5.0 (API level 21) or higher. -->
+<uses-feature android:name="android.hardware.location.gps" />
</pre>
<p>For more information about getting user location, see
<a href="{@docRoot}guide/topics/location/strategies.html">Location Strategies</a>.</p>
@@ -169,193 +171,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 +245,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 861c925..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#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/resources/icu4j-framework.jd b/docs/html/guide/topics/resources/icu4j-framework.jd
new file mode 100644
index 0000000..e7cbe72
--- /dev/null
+++ b/docs/html/guide/topics/resources/icu4j-framework.jd
@@ -0,0 +1,165 @@
+page.title=ICU4J Android Framework APIs
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+<h2>In this document:</h2>
+<ol>
+ <li><a href="#relation">Relationship to ICU4J</a></li>
+ <li><a href="#migration">Migrating to android.icu APIs from ICU4J </a></li>
+ <li><a href="#licence">Licensing</a></li>
+</ol>
+
+<h2>See Also</h2>
+<ol>
+ <li>
+ <a class="external-link" href=
+ "http://userguide.icu-project.org">Documentation for ICU4J</a>
+ </li>
+
+ <li>
+ <a class="external-link" href=
+ "http://site.icu-project.org/#TOC-What-is-ICU-">Latest standards supported
+ by ICU4J</a>
+ </li>
+</ol>
+</div>
+</div>
+
+<p>
+ ICU4J is an open-source, widely used set of Java libraries providing Unicode
+ and globalization support for software applications. Starting in Android 7.0
+ (API level 24), Android
+ exposes a subset of the ICU4J APIs for app developers
+ to use under the {@code android.icu} package. These APIs use
+ localization data present on the device. As a result, you can reduce your APK
+ footprint by not compiling the ICU4J libraries into your APK; instead, you can
+ simply call out to them in the framework. (In this case, you may want to provide
+ <a href="{@docRoot}google/play/publishing/multiple-apks.html">multiple versions
+ of your APK</a>, so users running versions of Android lower than
+ Android 7.0 (API level 24)
+ can download a version of the app that contains the ICU4J libraries.)
+</p>
+
+<p>
+ This document begins by providing some basic information on the minimum
+ Android API levels required to support these libraries. It then explains what
+ you need to know about the Android-specific implementation of ICU4J. Finally,
+ it tells you how to use the ICU4J APIs in the Android framework.
+</p>
+
+<h2 id="relation">Relationship to ICU4J</h2>
+
+<p>
+ Android exposes a subset of the ICU4J APIs via the
+ <code>android.icu</code> package, rather than <code>com.ibm.icu</code>. The
+ Android framework may choose not to
+ expose ICU4J APIs for various reasons; for example, Android does not expose
+ some deprecated APIs or those that the ICU team have not yet declared as
+ stable. As the ICU team deprecates APIs in the future, Android will also mark
+ them as deprecated but will continue to include them.
+</p>
+
+<p class="table-caption"><strong>Table 1.</strong> ICU and CLDR versions used
+ in Android].</p>
+<table>
+<tr>
+<th>Android API level</th>
+<th>ICU version</th>
+<th>CLDR version</th>
+</tr>
+<tr>
+<td>Android 7.0 (API level 24)</td>
+<td>56</td>
+<td>28</td>
+</tr>
+</table>
+
+<p>Here are a few important things to note:</p>
+
+<ul>
+<li>The ICU4J Android framework APIs do not include all the ICU4J APIs.</li>
+<li>NDK developers should know that Android ICU4C is not supported.</li>
+<li>The APIs in the Android framework do not replace Android’s support for
+<a href="{@docRoot}guide/topics/resources/localization.html">localizing with
+resources</a>.</li>
+</ul>
+
+<h2 id="migration">Migrating to the android.icu package from com.ibm.icu</h2>
+
+<p>
+ If you are already using the ICU4J APIs in your app, and the
+ <code>android.icu</code> APIs meet your requirements, then migrating to
+ the framework APIs requires you to change your Java imports
+ from <code>com.ibm.icu</code> to <code>android.icu</code>. You may then
+ remove your own copy of ICU4J files from the APK.
+</p>
+
+<p class="note">
+ <b>Note</b>: The ICU4J framework APIs use the {@code android.icu}
+ namespace instead of {@code com.ibm.icu}. This is to avoid namespace
+ conflicts in APKs that contain their own {@code com.ibm.icu} libraries.
+</p>
+
+<h3 id="migrate-from-android">
+ Migrating to android.icu APIs from other Android SDK APIs
+</h3>
+
+<p>
+ Some classes in the <code>java</code> and<code>android</code> packages have
+ equivalents to those found in ICU4J. However, ICU4J often provides broader
+ support for standards and languages.
+</p>
+<p>Here are some examples to get you started:</p>
+<table>
+<tr>
+<th>Class</th>
+<th>Alternatives</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">Licensing</h2>
+
+<p>
+ ICU4J is released under the ICU license. For details, see the <a class=
+ "external-link" href=
+ "http://userguide.icu-project.org/icufaq#TOC-How-is-the-ICU-licensed-">ICU
+ User Guide.</a>
+</p>
diff --git a/docs/html/guide/topics/resources/multilingual-support.jd b/docs/html/guide/topics/resources/multilingual-support.jd
new file mode 100644
index 0000000..28699fe
--- /dev/null
+++ b/docs/html/guide/topics/resources/multilingual-support.jd
@@ -0,0 +1,232 @@
+page.title=Language and Locale
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+<h2>In this document:</h2>
+<ol>
+ <li><a href="#preN">Challenges in Resolving Language Resources</a></li>
+ <li><a href="#postN">Improvements to Resource-Resolution Strategy</a></li>
+ <li><a href="#design">Designing your App to Support Additional
+ Locales</a></li>
+
+</ol>
+
+</div>
+</div>
+
+<p>Starting in Android 7.0 (API level 24),
+Android provides enhanced support for multilingual users,
+allowing them to select multiple locales in settings. Android
+provides this capability by greatly expanding the number of locales supported
+and changing the way the system resolves resources.</p>
+
+<p>This document starts by explaining the resource resolution strategy in
+versions of Android lower than 7.0 (API level 24). Next, it describes
+the improved resource-resolution strategy in Android 7.0.
+Last, it explains how to take advantage of
+the expanded number of locales to support more multilingual users.</p>
+
+<h2 id="preN">Challenges in Resolving Language Resources</h2>
+
+<p>Prior to Android 7.0, Android could not always successfully
+ match app and system locales.</p>
+
+ <p>For example, assume that you have the following situation:</p>
+ <ul>
+ <li>Your app's default language is {@code en_US} (US English), and it also has
+ Spanish strings localized in {@code es_ES}
+ resource files.</li>
+ <li> A device is set to {@code es_MX} </li>
+
+<p>When your Java code refers to strings, the system would load
+strings from the default ({@code en_US}) resource file, even if the app has
+Spanish resources localized under {@code es_ES}. This is because when the system
+ cannot find an exact match, it continues to look for resources by stripping the
+ country code off the locale. Finally, if no match is found, the system falls
+ back to the default, which is {@code en_US}. </p>
+
+
+<p>The system would also default to {@code en_US} if the user chose a language that
+the app didn't support at all, like French. For example:</p>
+
+<p class="table-caption" id="t-resource-res">
+<strong>Table 1.</strong> Resource resolution without an exact locale match.
+</p>
+<table>
+<tbody>
+<tr>
+<th>User Settings</th>
+<th>App Resources</th>
+<th>Resource Resolution</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>
+Try fr_CH => Fail<br>
+Try fr => Fail<br>
+Use default (en)
+</td>
+ </tr>
+ </tbody>
+</table>
+
+
+<p>In this example, the system displays English strings without
+knowing whether the user can understand English. This behavior is pretty common
+today.</p>
+
+<h2 id="postN">Improvements to Resource-Resolution Strategy</h2>
+<p>Android 7.0 (API level 24) brings more robust resource resolution, and
+ finds better fallbacks automatically.
+ However, to speed up resolution and improve
+ maintainability, you should store resources in the most common parent dialect.
+ For example, if you were storing Spanish resources
+ in the {@code values-es-rUS} directory
+ before, move them into the {@code values-b+es+419} directory,
+ which contains Latin American Spanish.
+ Similarly, if you have resource strings in a
+ directory named {@code values-en-rGB}, rename
+ the directory to {@code values-b+en+001} (International
+ English), because the most common
+ parent for <code>en-GB</code> strings is {@code en-001}.
+ The following examples explain why these practices improve performance and
+reliability of resource resolution.</p>
+
+<h3>Resource resolution examples</h3>
+
+<p>With versions of Android greater than 7.0, the case described in
+ <strong>Table 1</strong> is resolved differently:</p>
+
+<p class="table-caption" id="t-improved-res">
+<strong>Table 2.</strong> An improved resolution strategy for when there is no
+exact locale match.</p>
+<table>
+<tr>
+<th>User Settings</th>
+<th>App Resources</th>
+<th>Resource Resolution</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>
+Try fr_CH => Fail<br>
+Try fr => Fail<br>
+Try children of fr => fr_FR<br>
+Use fr_FR
+</td>
+</tr>
+
+</table>
+
+
+<p>Now the user gets French resources instead of English. This example also shows
+ why you should store French strings in {@code fr} rather than {@code fr_FR}
+ for Android 7.0 or higher. Here the course of action is
+ to match the closest parent dialect,
+ making resolution faster and more predictable.</p>
+
+<p>In addition to this improved resolution logic, Android now offers more
+ user languages to choose from. Let’s try the above example again with Italian
+ specified as an additional user language, but without app support for French. </p>
+
+<p class="table-caption" id="t-2d-choice">
+<strong>Table 3.</strong> Resource resolution when the app only matches the
+user's second-preferred locale setting.</p>
+<table>
+<tr>
+<th>User Settings</th>
+<th>App Resources</th>
+<th>Resource Resolution</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>
+Try fr_CH => Fail<br>
+Try fr => Fail<br>
+Try children of fr => Fail<br>
+Try it_CH => Fail<br>
+Try it => Fail<br>
+Try children of it => it_IT<br>
+Use it_IT
+</td>
+
+</tr>
+
+</table>
+<p>
+ The user still gets a language they understand, even though the app doesn’t
+ support French.
+</p>
+
+
+<h2 id="design">Designing your App to Support Additional Locales</h2>
+<h3>LocaleList API</h3>
+
+<p>
+ Starting with Android 7.0 (API level 24), Android exposes the
+ {@code LocaleList.getDefault()} API
+ that lets apps directly query the list of languages a user has specified. This API
+ allows you to create more sophisticated
+ app behavior and better-optimized display of content. For example, Search
+ can show results in multiple languages based on user’s settings. Browser apps
+ can avoid offering to translate pages in a language the user already knows,
+ and keyboard apps can auto-enable all appropriate layouts.
+</p>
+
+<h3>Formatters</h3>
+
+<p>
+ Up through Android 6.0 (API level 23), Android supported only one or
+ two locales
+ for many common languages
+ (en, es, ar, fr, ru). Because there were only a few variants of each language,
+ apps could get away with storing some numbers and dates as hard coded strings
+ in resource files. However, with Android's broadened set of supported
+ locales, there can be
+ significant differences in formats for dates, times, currencies, and similar
+ information even within a single locale. Hard-coding your formats can produce
+ a confusing experience for end users.
+ Therefore, when developing for Android 7.0 or higher versions,
+ make sure to use formatters instead of hard coding numbers and date strings.</p>
+
+<p>
+ For example, Android 7.0 and higher includes support for
+ 27 Arabic locales. These locales can share most resources,
+ but some prefer ASCII digits, while others prefer native digits. For example,
+ when you want to create a sentence with a digit variable, such as
+ "Choose a 4 digit pin", use formatters as shown below:
+</p>
+
+<pre> format(locale, "Choose a %d-digit PIN", 4)</pre>
diff --git a/docs/html/guide/topics/resources/runtime-changes.jd b/docs/html/guide/topics/resources/runtime-changes.jd
index 2e6f9b7..3444e16 100644
--- a/docs/html/guide/topics/resources/runtime-changes.jd
+++ b/docs/html/guide/topics/resources/runtime-changes.jd
@@ -17,6 +17,8 @@
<li><a href="accessing-resources.html">Accessing Resources</a></li>
<li><a href="http://android-developers.blogspot.com/2009/02/faster-screen-orientation-change.html">Faster
Screen Orientation Change</a></li>
+ <li><a href="{@docRoot}guide/topics/ui/multi-window.html#lifecycle">
+ Multi-Window Lifecycle</a></li>
</ol>
</div>
</div>
diff --git a/docs/html/guide/topics/ui/controls/togglebutton.jd b/docs/html/guide/topics/ui/controls/togglebutton.jd
index e0549ec..181647c 100644
--- a/docs/html/guide/topics/ui/controls/togglebutton.jd
+++ b/docs/html/guide/topics/ui/controls/togglebutton.jd
@@ -14,6 +14,7 @@
<ol>
<li>{@link android.widget.ToggleButton}</li>
<li>{@link android.widget.Switch}</li>
+ <li>{@link android.support.v7.widget.SwitchCompat}</li>
<li>{@link android.widget.CompoundButton}</li>
</ol>
</div>
@@ -21,9 +22,12 @@
<p>A toggle button allows the user to change a setting between two states.</p>
-<p>You can add a basic toggle button to your layout with the {@link android.widget.ToggleButton}
-object. Android 4.0 (API level 14) introduces another kind of toggle button called a switch that
-provides a slider control, which you can add with a {@link android.widget.Switch} object.</p>
+<p>You can add a basic toggle button to your layout with the
+{@link android.widget.ToggleButton} object. Android 4.0 (API level 14)
+introduces another kind of toggle button called a switch that provides a slider
+control, which you can add with a {@link android.widget.Switch} object.
+{@link android.support.v7.widget.SwitchCompat} is a version of the Switch
+widget which runs on devices back to API 7.</p>
<p>
If you need to change a button's state yourself, you can use the {@link
diff --git a/docs/html/guide/topics/ui/menus.jd b/docs/html/guide/topics/ui/menus.jd
index 73dec20..3325c0e 100644
--- a/docs/html/guide/topics/ui/menus.jd
+++ b/docs/html/guide/topics/ui/menus.jd
@@ -132,7 +132,7 @@
element may contain a nested <code><menu></code> element in order to create a submenu.</dd>
<dt><code><group></code></dt>
- <dd>An optional, invisible container for {@code <item>} elements. It allows you to
+ <dd>An optional, invisible container for {@code <item>} elements. It allows you to
categorize menu items so they share properties such as active state and visibility. For more
information, see the section about <a href="#groups">Creating Menu Groups</a>.</dd>
</dl>
@@ -172,8 +172,8 @@
For information about all the supported attributes, see the <a
href="{@docRoot}guide/topics/resources/menu-resource.html">Menu Resource</a> document.</p>
-<p>You can add a submenu to an item in any menu (except a submenu) by adding a {@code <menu>}
-element as the child of an {@code <item>}. Submenus are useful when your application has a lot
+<p>You can add a submenu to an item in any menu (except a submenu) by adding a {@code <menu>}
+element as the child of an {@code <item>}. Submenus are useful when your application has a lot
of functions that can be organized into topics, like items in a PC application's menu bar (File,
Edit, View, etc.). For example:</p>
@@ -230,7 +230,7 @@
the right side of the app bar (or by pressing the device <em>Menu</em> button, if available). To
enable
quick access to important actions, you can promote a few items to appear in the app bar by adding
-{@code android:showAsAction="ifRoom"} to the corresponding {@code <item>} elements (see figure
+{@code android:showAsAction="ifRoom"} to the corresponding {@code <item>} elements (see figure
2). <p>For more information about action items and other app bar behaviors, see the <a
href="{@docRoot}training/appbar/index.html">Adding the App Bar</a> training class. </p>
</li>
@@ -246,7 +246,7 @@
declare items for the options menu, they are combined in the UI. The activity's items appear
first, followed by those of each fragment in the order in which each fragment is added to the
activity. If necessary, you can re-order the menu items with the {@code android:orderInCategory}
-attribute in each {@code <item>} you need to move.</p>
+attribute in each {@code <item>} you need to move.</p>
<p>To specify the options menu for an activity, override {@link
android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()} (fragments provide their
@@ -814,7 +814,7 @@
android.view.Menu#setGroupCheckable(int,boolean,boolean) setGroupCheckable()}</li>
</ul>
-<p>You can create a group by nesting {@code <item>} elements inside a {@code <group>}
+<p>You can create a group by nesting {@code <item>} elements inside a {@code <group>}
element in your menu resource or by specifying a group ID with the {@link
android.view.Menu#add(int,int,int,int) add()} method.</p>
@@ -863,8 +863,8 @@
each time the state changes.</p>
<p>You can define the checkable behavior for individual menu items using the {@code
-android:checkable} attribute in the {@code <item>} element, or for an entire group with
-the {@code android:checkableBehavior} attribute in the {@code <group>} element. For
+android:checkable} attribute in the {@code <item>} element, or for an entire group with
+the {@code android:checkableBehavior} attribute in the {@code <group>} element. For
example, all items in this menu group are checkable with a radio button:</p>
<pre>
@@ -890,7 +890,7 @@
</dl>
<p>You can apply a default checked state to an item using the {@code android:checked} attribute in
-the {@code <item>} element and change it in code with the {@link
+the {@code <item>} element and change it in code with the {@link
android.view.MenuItem#setChecked(boolean) setChecked()} method.</p>
<p>When a checkable item is selected, the system calls your respective item-selected callback method
diff --git a/docs/html/guide/topics/ui/multi-window.jd b/docs/html/guide/topics/ui/multi-window.jd
new file mode 100644
index 0000000..dede557
--- /dev/null
+++ b/docs/html/guide/topics/ui/multi-window.jd
@@ -0,0 +1,606 @@
+page.title=Multi-Window Support
+page.metaDescription=New support in Android N for showing more than one app at a time.
+page.keywords="multi-window", "android N", "split screen", "free-form"
+
+@jd:body
+
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol>
+ <li><a href="#overview">Overview</a></li>
+ <li><a href="#lifecycle">Multi-Window Lifecycle</a></li>
+ <li><a href="#configuring">Configuring Your App for Multi-Window
+ Mode</a></li>
+ <li><a href="#running">Running Your App in Multi-Window Mode</a></li>
+ <li><a href="#testing">Testing Your App's Multi-Window Support</a></li>
+ </ol>
+ <h2>See Also</h2>
+ <ol>
+ <li><a href="{@docRoot}training/tv/playback/picture-in-picture.html">Adding
+ Picture-in-Picture</a></li>
+ <li><a class="external-link"
+ href="https://github.com/googlesamples/android-MultiWindowPlayground">Multi-Window
+ Playground sample app</a></li>
+ <li><a class="external-link"
+ href="https://medium.com/google-developers/5-tips-for-preparing-for-multi-window-in-android-n-7bed803dda64"
+ >Five Tips for Preparing for Multi-Window in Android N</a></li>
+ </ol>
+ </div>
+</div>
+
+<p>
+ Android 7.0 adds support for displaying more than one app at the
+ same time. On handheld devices, two apps can run side-by-side or
+ one-above-the-other in <em>split-screen</em> mode. On TV devices, apps can
+ use <em>picture-in-picture</em> mode to continue video playback while users
+ are interacting with another app.
+</p>
+
+<p>
+ If your app targets Android 7.0 (API level 24) or higher, you can configure how your app
+ handles multi-window display. For example, you can specify your activity's
+ minimum allowable dimensions. You can also disable multi-window display for
+ your app, ensuring that the system only shows your app in full-screen
+ mode.
+</p>
+
+<h2 id="overview">Overview</h2>
+
+<p>
+ Android 7.0 allows several apps to share the screen at once. For
+ example, a user could split the screen, viewing a web page on the left side
+ while composing an email on the right side. The user experience depends on
+ the device:
+</p>
+
+<ul>
+ <li>Handheld devices running Android 7.0 offer split-screen
+ mode. In this mode, the system fills the screen with two apps, showing them
+ either side-by-side or one-above-the-other. The user can drag the dividing
+ line separating the two to make one app larger and the other smaller.
+ </li>
+
+ <li>On TV devices, apps can put themselves
+ in <a href="picture-in-picture.html">picture-in-picture mode</a>, allowing
+ them to continue showing content while the user browses or interacts with
+ other apps.
+ </li>
+
+ <li>Manufacturers of larger devices can choose to enable freeform
+ mode, in which the user can freely resize each activity. If the
+ manufacturer enables this feature, the device offers freeform mode in addition
+ to split-screen mode.
+ </li>
+</ul>
+
+<img src="{@docRoot}images/android-7.0/mw-splitscreen.png" alt="" width="650"
+ srcset="{@docRoot}images/android-7.0/mw-splitscreen.png 1x,
+ {@docRoot}images/android-7.0/mw-splitscreen_2x.png 2x,"
+ id="img-split-screen" />
+<p class="img-caption">
+ <strong>Figure 1.</strong> Two apps running side-by-side in split-screen mode.
+</p>
+
+<p>
+ The user can switch into multi-window mode in the following ways:
+</p>
+
+<ul>
+ <li>If the user opens the <a href="{@docRoot}guide/components/recents.html">Overview
+ screen</a> and performs a long press on an
+ activity title, they can drag that activity to a highlighted portion of the
+ screen to put the activity in multi-window mode.
+ </li>
+
+ <li>If the user performs a long press on the Overview button, the device puts
+ the current activity in multi-window mode, and opens the Overview screen to
+ let the user choose another activity to share the screen.
+ </li>
+</ul>
+
+<p>
+ Users can <a href="{@docRoot}guide/topics/ui/drag-drop.html">drag and
+ drop</a> data from one activity to another while the activities are sharing
+ the screen.
+
+<h2 id="lifecycle">Multi-Window Lifecycle</h2>
+
+<p>
+ Multi-window mode does not change the <a href=
+ "{@docRoot}training/basics/activity-lifecycle/index.html">activity
+ lifecycle</a>.
+</p>
+
+<p>
+ In multi-window mode, only the activity the user has most recently interacted
+ with is active at a given time. This activity is considered <em>topmost</em>.
+ All other activities are in the paused state, even if they are visible.
+ However, the system gives these paused-but-visible activities higher priority
+ than activities that are not visible. If the user interacts with one of the
+ paused activities, that activity is resumed, and the previously topmost
+ activity is paused.
+</p>
+
+<p class="note">
+ <strong>Note:</strong> In multi-window mode, an app can be in the paused
+ state and still be visible to the user. An app might need to continue its
+ activities even while paused. For example, a video-playing app that is in
+ paused mode but is visible should continue showing its video. For this
+ reason, we recommend that activities that play video <em>not</em> pause the
+ video in their {@link android.app.Activity#onPause onPause()} handlers.
+ Instead, they should pause video in {@link android.app.Activity#onStop
+ onStop()}, and resume playback in {@link android.app.Activity#onStart
+ onStart()}.
+</p>
+
+<p>
+ When the user puts an app into multi-window mode, the system notifies the
+ activity of a configuration change, as specified in <a href=
+ "{@docRoot}guide/topics/resources/runtime-changes.html">Handling Runtime
+ Changes</a>. This also happens when the user resizes the app, or puts the app
+ back into full-screen mode.
+ Essentially, this change has the same activity-lifecycle
+ implications as when the system notifies the app that the device has switched
+ from portrait to landscape mode, except that the device dimensions are
+ changed instead of just being swapped. As discussed in <a href=
+ "{@docRoot}guide/topics/resources/runtime-changes.html">Handling Runtime
+ Changes</a>, your activity can handle the configuration change itself, or it
+ can allow the system to destroy the activity and recreate it with the new
+ dimensions.
+</p>
+
+<p>
+ If the user is resizing a window and makes it larger in either dimension, the
+ system resizes the activity to match the user action and issues <a href=
+ "{@docRoot}guide/topics/resources/runtime-changes.html">runtime changes</a>
+ as needed. If the app lags behind in drawing in newly-exposed areas, the
+ system temporarily fills those areas with the color specified by the {@link
+ android.R.attr#windowBackground windowBackground} attribute or by the default
+ <code>windowBackgroundFallback</code> style attribute.
+</p>
+
+<h2 id="configuring">Configuring Your App for Multi-Window Mode</h2>
+
+<p>
+ If your app targets API level 24 or higher, you can configure how and
+ whether your app's activities support multi-window display. You can set
+ attributes in your manifest to control both size and layout.
+ 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 resizable.
+</p>
+
+<p class="note">
+ <strong>Note:</strong> If you build a multi-orientation app that targets API
+ level 23 or lower, and the user uses the app in
+ multi-window mode, the system forcibly resizes the app. The system presents a
+ dialog box warning the user that the app may behave unexpectedly. The system
+ does <em>not</em> resize fixed-orientation apps; if
+ the user attempts to open a fixed-orientation app under multi-window mode,
+ the app takes over the whole screen.
+</p>
+
+<h4 id="resizeableActivity">android:resizeableActivity</h4>
+
+<p>
+ Set this attribute in your manifest's <a href=
+ "{@docRoot}guide/topics/manifest/activity-element"><code><activity></code></a>
+ or <a href=
+ "{@docRoot}guide/topics/manifest/application-element"><code><application></code></a>
+ element to enable or disable multi-window display:
+</p>
+
+<pre>
+android:resizeableActivity=["true" | "false"]
+</pre>
+
+<p>
+ If this attribute is set to true, the activity can be launched in
+ split-screen and freeform modes. If the attribute is set to false, the
+ activity does not support multi-window mode. If this value is false, and the
+ user attempts to launch the activity in multi-window mode, the activity takes
+ over the full screen.
+</p>
+
+<p>
+ If your app targets API level 24, but you do not specify a value
+ for this attribute, the attribute's value defaults to true.
+</p>
+
+<h4 id="supportsPictureInPicture">android:supportsPictureInPicture</h4>
+
+<p>
+ Set this attribute in your manifest's <a href=
+ "{@docRoot}guide/topics/manifest/activity-element"><code><activity></code></a>
+ node to indicate whether the activity supports <a href=
+ "{@docRoot}training/tv/playback/picture-in-picture.jd">Picture-in-Picture</a>
+ display. This attribute is ignored if <code>android:resizeableActivity</code>
+ is false.
+</p>
+
+<pre>
+android:supportsPictureInPicture=["true" | "false"]
+</pre>
+
+<h3 id="layout">Layout attributes</h3>
+
+<p>
+ With Android 7.0, the <code><layout></code> manifest element
+ supports several attributes that affect how an activity behaves in
+ multi-window mode:
+</p>
+
+<dl>
+ <dt>
+ <code>android:defaultWidth</code>
+ </dt>
+
+ <dd>
+ Default width of the activity when launched in freeform mode.
+ </dd>
+
+ <dt>
+ <code>android:defaultHeight</code>
+ </dt>
+
+ <dd>
+ Default height of the activity when launched in freeform mode.
+ </dd>
+
+ <dt>
+ <code>android:gravity</code>
+ </dt>
+
+ <dd>
+ Initial placement of the activity when launched in freeform mode. See the
+ {@link android.view.Gravity} reference for suitable values.
+ </dd>
+
+ <dt>
+ <code>android:minHeight</code>, <code>android:minWidth</code>
+ </dt>
+
+ <dd>
+ Minimum height and minimum width for the activity in both split-screen
+ and freeform modes. If the user moves the divider in split-screen mode
+ to make an activity smaller than the specified minimum, the system crops
+ the activity to the size the user requests.
+ </dd>
+</dl>
+
+<p>
+ For example, the following code shows how to specify an activity's default
+ size and location, and its minimum size, when the activity is displayed in
+ freeform mode:
+</p>
+
+<pre>
+<activity android:name=".MyActivity">
+ <layout android:defaultHeight="500dp"
+ android:defaultWidth="600dp"
+ android:gravity="top|end"
+ android:minHeight="450dp"
+ android:minWidth="300dp" />
+</activity>
+</pre>
+
+<h2 id="running">Running Your App in Multi-Window Mode</h2>
+
+<p>
+ Beginning with Android 7.0, the system offers functionality to support apps
+ that can run in multi-window mode.
+</p>
+
+<h3 id="disabled-features">Disabled features in multi-window mode</h3>
+
+<p>
+ Certain features are disabled or ignored when a device is in multi-window
+ mode, because they don’t make sense for an activity which may be sharing the
+ device screen with other activities or apps. Such features include:
+
+<ul>
+ <li>Some <a href="{@docRoot}training/system-ui/index.html">System UI</a>
+ customization options are disabled; for example, apps cannot hide the status
+ bar if they are not running in full-screen mode.
+ </li>
+
+ <li>The system ignores changes to the <code><a href=
+ "{@docRoot}guide/topics/manifest/activity-element.html#screen"
+ >android:screenOrientation</a></code> attribute.
+ </li>
+</ul>
+
+<h3 id="change-notification">Multi-window change notification and querying</h3>
+
+<p>
+ {@link android.app.Activity} offers the following methods to support
+ multi-window display.
+</p>
+
+<dl>
+ <dt>
+ {@link android.app.Activity#isInMultiWindowMode isInMultiWindowMode()}
+ </dt>
+
+ <dd>
+ Call to find out if the activity is in multi-window mode.
+ </dd>
+
+ <dt>
+ {@link android.app.Activity#isInPictureInPictureMode
+ isInPictureInPictureMode()}
+ </dt>
+
+ <dd>
+ Call to find out if the activity is in <a href=
+ "{@docRoot}training/tv/playback/picture-in-picture.jd">picture-in-picture</a>
+ mode.
+ <p class="note">
+ <strong>Note:</strong> Picture-in-picture mode is a special case of
+ multi-window mode. If <code>myActivity.isInPictureInPictureMode()</code>
+ returns true, then <code>myActivity.isInMultiWindowMode()</code> also
+ returns true.
+ </p>
+ </dd>
+
+ <dt>
+ {@link android.app.Activity#onMultiWindowModeChanged
+ onMultiWindowModeChanged()}
+ </dt>
+
+ <dd>
+ The system calls this method whenever the activity goes into or out of
+ multi-window mode. The system passes the method a value of true if the
+ activity is entering multi-window mode, and false if the activity is
+ leaving multi-window mode.
+ </dd>
+
+ <dt>
+ {@link android.app.Activity#onPictureInPictureModeChanged
+ onPictureInPictureModeChanged()}
+ </dt>
+
+ <dd>
+ The system calls this method whenever the activity goes into or out of
+ picture-in-picture mode. The system passes the method a value of true if
+ the activity is entering picture-in-picture mode, and false if the activity
+ is leaving picture-in-picture mode.
+ </dd>
+</dl>
+
+<p>
+ The {@link android.app.Fragment} class exposes versions of many of these
+ methods, for example {@link android.app.Fragment#onMultiWindowModeChanged
+ Fragment.onMultiWindowModeChanged()}.
+</p>
+
+<h3 id="entering-pip">Entering picture-in-picture mode</h3>
+
+<p>
+ To put an activity in picture-in-picture mode, call {@link
+ android.app.Activity#enterPictureInPictureMode
+ Activity.enterPictureInPictureMode()}. This method has no effect if the
+ device does not support picture-in-picture mode. For more information, see
+ the <a href=
+ "{@docRoot}training/tv/playback/picture-in-picture.jd">Picture-in-Picture</a>
+ documentation.
+</p>
+
+<h3 id="launch">Launch New Activities in Multi-Window Mode</h3>
+
+<p>
+ When you launch a new activity, you can hint to the system that the new
+ activity should be displayed adjacent to the current one, if possible. To do
+ this, use the intent flag
+ {@link android.content.Intent#FLAG_ACTIVITY_LAUNCH_ADJACENT}. Passing
+ this flag requests the following behavior:
+</p>
+
+<ul>
+ <li>If the device is in split-screen mode, the system attempts to create the
+ new activity next to the activity that launched it, so the two activities
+ share the screen. The system is not guaranteed to be able to do this, but it
+ makes the activities adjacent if possible.
+ </li>
+
+ <li>If the device is not in split-screen mode, this flag has no effect.
+ </li>
+</ul>
+
+<p>
+ If a device is in freeform mode and you are launching a new activity, you can
+ specify the new activity's dimensions and screen location by calling
+ {@link android.app.ActivityOptions#setLaunchBounds
+ ActivityOptions.setLaunchBounds()}. This method has no effect if
+ the device is not in multi-window mode.
+</p>
+
+<p class="note">
+ <strong>Note:</strong> If you launch an activity within a task stack, the
+ activity replaces the activity on the screen, inheriting all of its
+ multi-window properties. If you want to launch the new activity as a separate
+ window in multi-window mode, you must launch it in a new task stack.
+</p>
+
+<h3 id="dnd">Supporting drag and drop</h3>
+
+<p>
+ Users can <a href="{@docRoot}guide/topics/ui/drag-drop.html">drag and
+ drop</a> data from one activity to another while the two activities are
+ sharing the screen. (Prior to Android 7.0, users could only drag and drop data
+ within a single activity.) For this reason, you may want to add drag and drop
+ functionality to your app if your app does not currently support it.
+</p>
+
+
+<dl>
+ <dt>
+ {@link android.view.DragAndDropPermissions}
+ </dt>
+
+ <dd>
+ Token object responsible for specifying the permissions granted to the app
+ that receives a drop.
+ </dd>
+
+ <dt>
+ {@link android.view.View#startDragAndDrop View.startDragAndDrop()}
+ </dt>
+
+ <dd>
+ Alias for {@link android.view.View#startDrag View.startDrag()}. To enable
+ cross-activity drag and drop, pass the flag {@link
+ android.view.View#DRAG_FLAG_GLOBAL}. If you need to give URI permissions to
+ the recipient activity, pass the flags {@link
+ android.view.View#DRAG_FLAG_GLOBAL_URI_READ} or {@link
+ android.view.View#DRAG_FLAG_GLOBAL_URI_WRITE}, as appropriate.
+ </dd>
+
+ <dt>
+ {@link android.view.View#cancelDragAndDrop View.cancelDragAndDrop()}
+ </dt>
+
+ <dd>
+ Cancels a drag operation currently in progress. Can only be called by the
+ app that originated the drag operation.
+ </dd>
+
+ <dt>
+ {@link android.view.View#updateDragShadow View.updateDragShadow()}
+ </dt>
+
+ <dd>
+ Replaces the drag shadow for a drag operation currently in progress. Can
+ only be called by the app that originated the drag operation.
+ </dd>
+
+ <dt>
+ {@link android.app.Activity#requestDragAndDropPermissions
+ Activity.requestDragAndDropPermissions()}
+ </dt>
+
+ <dd>
+ Requests the permissions for the content URIs passed with the {@link
+ android.content.ClipData} contained in a {@link android.view.DragEvent}.
+ </dd>
+</dl>
+
+<h2 id="testing">Testing Your App's Multi-Window Support</h2>
+
+<p>
+ Whether or not your app targets API level 24 or higher, you should
+ verify how it behaves in multi-window mode in case a user tries to launch it
+ in multi-window mode on a device running Android 7.0 or higher.
+</p>
+
+<h3 id="configuring">Configuring a Test Device</h3>
+
+<p>
+ If a device runs Android 7.0 or higher, it automatically supports split-screen
+ mode.
+</p>
+
+<h3 id="test-non-n">If your app targets API level 23 or lower</h3>
+
+<p>
+ If your app targets API level 23 or lower and the user attempts to use
+ the app in multi-window mode, the system forcibly resizes the app unless the
+ app declares a fixed orientation.
+</p>
+
+<p>
+ If your app does not declare a fixed orientation, you should launch your app
+ on a device running Android 7.0 or higher and attempt to put the app in
+ split-screen mode. Verify that the user experience is
+ acceptable when the app is forcibly resized.
+</p>
+
+<p>
+ If the app declares a fixed orientation, you should attempt to put the app in
+ multi-window mode. Verify that when you do so, the app remains
+ in full-screen mode.
+</p>
+
+<h3 id="test-mw">If you support multi-window mode</h3>
+
+<p>
+ If your app targets API level 24 or higher and does not disable
+ multi-window support, verify the following behavior under both split-screen
+ and freeform modes.
+</p>
+
+<ul>
+ <li>Launch the app in full-screen mode, then switch to multi-window mode by
+ long-pressing the Overview button. Verify that the app switches properly.
+ </li>
+
+ <li>Launch the app directly in multi-window mode, and verify that the app
+ launches properly. You can launch an app in multi-window mode by pressing the
+ Overview button, then long-pressing the title bar of your app and dragging it
+ to one of the highlighted areas on the screen.
+ </li>
+
+ <li>Resize your app in split-screen mode by dragging the divider line.
+ Verify that the app resizes without crashing, and that necessary UI elements
+ are visible.
+ </li>
+
+ <li>If you have specified minimum dimensions for your app, attempt to resize
+ the app below those dimensions. Verify that you cannot resize the app to be
+ smaller than the specified minimum.
+ </li>
+
+ <li>Through all tests, verify that your app's performance is acceptable. For
+ example, verify that there is not too long a lag to update the UI after the
+ app is resized.
+ </li>
+</ul>
+
+<h4 id="test-checklist">Testing checklist</h4>
+
+<p>
+ To verify your app's performance in multi-window mode, try the following
+ operations. You should try these operations in both split-screen and
+ multi-window mode, except where otherwise noted.
+</p>
+
+<ul>
+ <li>Enter and leave multi-window mode.
+ </li>
+
+ <li>Switch from your app to another app, and verify that the app behaves
+ properly while it is visible but not active. For example, if your app is
+ playing video, verify that the video continues to play while the user is
+ interacting with another app.
+ </li>
+
+ <li>In split-screen mode, try moving the dividing bar to make your app both
+ larger and smaller. Try these operations in both side-by-side and
+ one-above-the-other configurations. Verify that the app does not crash,
+ essential functionality is visible, and the resize operation doesn't take too
+ long.
+ </li>
+
+ <li>Perform several resize operations in rapid succession. Verify that your
+ app doesn't crash or leak memory. For information about checking your app's
+ memory usage, see <a href="{@docRoot}tools/debugging/debugging-memory.html">
+ Investigating Your RAM Usage</a>.
+ </li>
+
+ <li>Use your app normally in a number of different window configurations, and
+ verify that the app behaves properly. Verify that text is readable, and that
+ UI elements aren't too small to interact with.
+ </li>
+</ul>
+
+<h3 id="test-disabled-mw">If you have disabled multi-window support</h3>
+
+<p>
+ If you disabled multi-window support by setting
+ <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.
+</p>
diff --git a/docs/html/guide/topics/ui/notifiers/notifications.jd b/docs/html/guide/topics/ui/notifiers/notifications.jd
index 7212f93..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">
@@ -21,6 +23,8 @@
<ol>
<li><a href="#Updating">Updating notifications</a></li>
<li><a href="#Removing">Removing notifications</a></li>
+ <li><a href="#direct">Replying to notifications</a></li>
+ <li><a href="#bundle">Bundling notifications</a></li>
</ol>
</li>
<li><a href="#NotificationResponse">Preserving Navigation when Starting an Activity</a>
@@ -37,12 +41,18 @@
</li>
<li><a href="#metadata">Notification Metadata</a></li>
<li><a href="#Heads-up">Heads-up Notifications</a></li>
- <li><a href="#lockscreenNotification">Lock Screen Notifications</a></li>
+ <li><a href="#lockscreenNotification">Lock Screen Notifications</a>
<ol>
<li><a href="#visibility">Setting Visibility</a></li>
<li><a href="#controllingMedia">Controlling Media Playback on the Lock Screen</a></li>
</ol>
- <li><a href="#CustomNotification">Custom Notification Layouts</a></li>
+ </li>
+ <li><a href="#CustomNotification">Customizing Notifications</a>
+ <ol>
+ <li><a href="#custom">Custom Views</a></li>
+ <li><a href="#style">Messaging Style</a></li>
+ </ol>
+ </li>
</ol>
<h2>Key classes</h2>
@@ -394,6 +404,305 @@
all of the notifications you previously issued.
</li>
</ul>
+
+<!--------------------------------------------------------------- -->
+<h2 id="direct">Replying to notifications</h2>
+
+<p>
+ Starting in Android 7.0 (API level 24),
+ users can respond directly to text messages or update task lists
+ from within the notification
+ dialog. On a handheld, the inline reply action appears as an additional
+ button
+ displayed in the notification. When a user replies via keyboard, the system
+ attaches the text response to the intent
+ you had specified for the notification action and sends the intent to your
+ handheld app.
+</p>
+
+<img id="fig-reply-button" src="{@docRoot}images/android-7.0/inline-reply.png"
+ srcset="{@docRoot}images/android-7.0/inline-reply.png 1x,
+ {@docRoot}images/android-7.0/inline-reply_2x.png 2x"
+ width="400">
+<p class="img-caption">
+ <strong>Figure 1.</strong> The <strong>Reply</strong> action button.
+</p>
+
+<h3>Adding inline reply actions</h3>
+
+<p>To create a notification action that supports direct reply:
+</p>
+
+<ol>
+<li>Create an instance of {@link android.support.v4.app.RemoteInput.Builder}
+ that you can add to your notification
+action. This class's constructor accepts a string that the system uses as the key
+ for the text input. Later, your handheld app uses that key to retrieve the text
+ of the input.
+
+<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>Attach the {@link android.support.v4.app.RemoteInput}
+ object to an action using <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>Apply the action to a notification and issue the notification.
+
+<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> The system prompts the user to input a response when they trigger the
+notification action. </p>
+
+<img id="fig-user-input" src="{@docRoot}images/android-7.0/inline-type-reply.png"
+ srcset="{@docRoot}images/android-7.0/inline-type-reply.png 1x,
+ {@docRoot}images/android-7.0/inline-type-reply_2x.png 2x"
+ width="300">
+<p class="img-caption">
+ <strong>Figure 2.</strong> The user inputs text from the notification shade.
+</p>
+
+<h3>
+ Retrieving user input from the inline reply
+</h3>
+
+<p>
+ To receive user input from the notification interface to the activity you
+ declared in the reply action's intent:
+</p>
+
+<ol>
+ <li>Call {@link android.support.v4.app.RemoteInput#getResultsFromIntent
+ getResultsFromIntent()} by passing the notification action’s intent as the
+ input parameter. This method returns a {@link android.os.Bundle} that
+ contains the text response.
+
+ <pre>
+Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
+</pre>
+ </li>
+
+ <li>Query the bundle using the result key (provided to the {@link
+ android.support.v4.app.RemoteInput.Builder} constructor). You can complete
+ this process and retrieve the input text by creating a method, as in the
+ following code snippet:
+
+ <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>Build and issue another notification, using the same notification ID that
+ you provided for the previous notification. The progress indicator
+ disappears from the notification interface to inform users of a successful
+ reply. When working with this new notification, use the context that gets
+ passed to the receiver's {@code onReceive()} method.
+
+ <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>
+ For interactive apps, such as chats, you can include additional
+ context when handling retrieved text. For example, these apps could show
+ multiple lines of chat history. When the user responds via {@link
+ android.support.v4.app.RemoteInput}, you can update the reply history
+ using the {@code setRemoteInputHistory()} method.
+</p>
+
+<p>
+ The notification must be either updated or cancelled after the app has
+ received remote input. When the user replies to a remote update
+ using Direct Reply,
+ do not cancel the notification. Instead, update the notification
+ to display the user's reply.
+ For notifications using {@code MessagingStyle}, you should add
+ the reply as the latest message. When using other templates, you can
+ append the user's reply to the remote-input history.
+</p>
+
+<!-------------------------------------------------------------------------- -->
+
+<h2 id="bundle">Bundling notifications</h2>
+
+<p>
+ Starting in Android 7.0 (API level 24),
+ Android provides developers with a new way to represent
+ a queue of notifications: <i>bundled notifications</i>. This is similar to the
+ <a href="{@docRoot}training/wearables/notifications/stacks.html">Notification
+ Stacks</a> feature in Android Wear. For example, if your app
+ creates notifications
+ for received messages, when more than one message is received, bundle the
+ notifications together as a single group. You can
+ use the {@link android.support.v4.app.NotificationCompat.Builder#setGroup
+ Builder.setGroup()} method to bundle similar notifications.</p>
+
+<p>
+ A notification group imposes a hierarchy on the notifications comprising it.
+ At the top of that hierarchy is a parent notification that displays summary
+ information for the group. The user can progressively
+ expand the notification group, and the system shows more information as the
+ user drills deeper. When the user expands the bundle, the system reveals more
+ information for all its child notifications; when the user
+ expands one of those notifications, the system reveals its entire content.
+</p>
+
+<img id="fig-bundles" src="{@docRoot}images/android-7.0/bundles.png"
+ srcset="{@docRoot}images/android-7.0/bundles.png 1x,
+ {@docRoot}images/android-7.0/bundles_2x.png 2x"
+ width="300">
+<p class="img-caption">
+ <strong>Figure 3.</strong> The user can progressively expand the notification
+ group.
+</p>
+
+<p class="note">
+ <strong>Note:</strong> If the same app sends four or more notifications
+ and does not specify a grouping, the
+ system automatically groups them together.
+</p>
+
+<p>To learn how to add notifications to a group, see
+<a href="{@docRoot}training/wearables/notifications/stacks.html#AddGroup">Add
+Each Notification to a Group</a>.</p>
+
+
+<h3 id="best-practices">Best practices for bundled notifications</h3>
+<p>This section provides guidelines about when to use notification groups instead
+of the {@link android.app.Notification.InboxStyle InboxStyle}
+notifications available in Android 6.0 and previous versions.</p>
+
+<h3>When to use bundled notifications</h3>
+
+<p>You should use notification groups only if all of the following conditions are
+true for your use case:</p>
+
+<ul>
+ <li>The child notifications are complete notifications and can be displayed
+ individually without the need for a group summary.</li>
+ <li>There is a benefit to surfacing the child notifications individually. For
+ example:
+ </li>
+ <ul>
+ <li>They are actionable, with actions specific to each child.</li>
+ <li>There is more information to the child that the user wants to read.</li>
+ </ul>
+</ul>
+
+<p>Examples of good use cases for notification groups include: a messaging app
+displaying a list of incoming messages, or an email app displaying a list of
+received emails.</p>
+
+<p>
+Examples of cases where a single notification is preferable
+ include individual messages from a single person, or a list representation of
+ single-line text items. You can use
+({@link android.app.Notification.InboxStyle InboxStyle} or
+{@link android.app.Notification.BigTextStyle BigTextStyle}) to accomplish
+this.
+</p>
+
+<h3 id ="post">Displaying bundled notifications</h3>
+
+<p>
+ The app should always post a group summary, even if the group contains just a
+ single child. The system will suppress the summary and directly display the
+ child notification if it only contains a single notification. This ensures
+ that the system can provide a consistent experience when the user swipes away
+ children of a group.
+</p>
+
+<h3>Peeking notifications</h3>
+
+<p>While the system usually displays child notifications as a group, you can set
+ them to temporarily appear as
+ <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html#Heads-up">
+ heads-up notifications</a>. This feature is especially useful because it allows
+ immediate access to the most recent child and the actions associated with it.
+</p>
+
+
+<h3>Backwards compatibility</h3>
+
+<p>
+ Both notification groups and remote input have been a part of the {@link
+ android.app.Notification} API since Android 5.0 (API level 21) to support
+ Android Wear devices. If you've already built notifications with these APIs,
+ the only action you must take is to verify that the app behavior corresponds
+ to the guidelines described above, and to consider implementing {@code
+ setRemoteInputHistory()}.
+</p>
+
+<p>
+ In order to support backward compatibility, the same APIs are available with
+ the support library's {@link android.support.v4.app.NotificationCompat}
+ class, allowing you to build notifications that works on versions of Android
+ less than 5.0 (API level 21).
+ On handhelds and tablets, users only see the summary notification,
+ so an app should still have an inbox style or an equivalent notification
+ representative for the whole information content of the group. As Android
+ Wear devices allow users to see all child notifications even on older
+ platform levels, you should build child notifications regardless of API
+ level.
+</p>
+
<!-- ------------------------------------------------------------------------------------------ -->
<!-- ------------------------------------------------------------------------------------------ -->
<h2 id="NotificationResponse">Preserving Navigation when Starting an Activity</h2>
@@ -987,3 +1296,69 @@
standard notification layout text. If you use the same style in applications that target Android
2.3 or higher, you'll ensure that your text is visible against the display background.
</p>
+
+<!-- ------------------------------------------------------------------------ -->
+<h3 id="custom"> Custom Views</h3>
+<p>
+ Starting from Android 7.0 (API level 24),
+ you can customize notification views and
+ still obtain system decorations like notification headers, actions, and
+ expandable layouts.
+</p>
+
+<p>To enable this capability, Android provides the following APIs to style your
+ custom view:</p>
+
+<dl>
+<dt>
+{@code DecoratedCustomViewStyle()}</dt>
+<dd> Styles notifications other than media
+notifications.</dd>
+<dt>
+{@code DecoratedMediaCustomViewStyle()}</dt>
+<dd> Styles media notifications.</dd>
+</dl>
+
+<p>To use this API, call the {@code setStyle()} method, passing to it
+the desired custom view style.</p>
+
+<p>This snippet shows how to construct a custom notification object with the
+{@code DecoratedCustomViewStyle()} method.</p>
+
+<pre>
+Notification notification = new Notification.Builder()
+ .setSmallIcon(R.drawable.ic_stat_player)
+ .setLargeIcon(albumArtBitmap))
+ .setCustomContentView(contentView);
+ .setStyle(new Notification.DecoratedCustomViewStyle())
+ .build();
+
+</pre>
+
+<!-- ----------------------------------------------------------------------- -->
+
+<h3 id="style">Messaging Style</h3>
+<p>
+ Starting in Android 7.0 (API level 24),
+ Android provides an API for customizing the style of a notification.
+ Using the <code>MessagingStyle</code> class, you can change several of the
+ labels displayed on the notification, including the conversation title,
+ additional messages, and the content view for the notification.
+</p>
+
+<p>
+ The following code snippet demonstrates how to customize a notification's
+ style using the <code>MessagingStyle</code> class.
+</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"))
+ .build();
+</pre>
+
diff --git a/docs/html/preview/images/bundles.png b/docs/html/images/android-7.0/bundles.png
similarity index 100%
rename from docs/html/preview/images/bundles.png
rename to docs/html/images/android-7.0/bundles.png
Binary files differ
diff --git a/docs/html/preview/images/bundles_2x.png b/docs/html/images/android-7.0/bundles_2x.png
similarity index 100%
rename from docs/html/preview/images/bundles_2x.png
rename to docs/html/images/android-7.0/bundles_2x.png
Binary files differ
diff --git a/docs/html/preview/images/datasaver.png b/docs/html/images/android-7.0/datasaver.png
similarity index 100%
rename from docs/html/preview/images/datasaver.png
rename to docs/html/images/android-7.0/datasaver.png
Binary files differ
diff --git a/docs/html/preview/images/doze-diagram-1.png b/docs/html/images/android-7.0/doze-diagram-1.png
similarity index 100%
rename from docs/html/preview/images/doze-diagram-1.png
rename to docs/html/images/android-7.0/doze-diagram-1.png
Binary files differ
diff --git a/docs/html/preview/images/doze-diagram-2.png b/docs/html/images/android-7.0/doze-diagram-2.png
similarity index 100%
rename from docs/html/preview/images/doze-diagram-2.png
rename to docs/html/images/android-7.0/doze-diagram-2.png
Binary files differ
diff --git a/docs/html/preview/images/inline-reply.png b/docs/html/images/android-7.0/inline-reply.png
similarity index 100%
rename from docs/html/preview/images/inline-reply.png
rename to docs/html/images/android-7.0/inline-reply.png
Binary files differ
diff --git a/docs/html/preview/images/inline-reply_2x.png b/docs/html/images/android-7.0/inline-reply_2x.png
similarity index 100%
rename from docs/html/preview/images/inline-reply_2x.png
rename to docs/html/images/android-7.0/inline-reply_2x.png
Binary files differ
diff --git a/docs/html/preview/images/inline-type-reply.png b/docs/html/images/android-7.0/inline-type-reply.png
similarity index 100%
rename from docs/html/preview/images/inline-type-reply.png
rename to docs/html/images/android-7.0/inline-type-reply.png
Binary files differ
diff --git a/docs/html/preview/images/inline-type-reply_2x.png b/docs/html/images/android-7.0/inline-type-reply_2x.png
similarity index 100%
rename from docs/html/preview/images/inline-type-reply_2x.png
rename to docs/html/images/android-7.0/inline-type-reply_2x.png
Binary files differ
diff --git a/docs/html/preview/images/m-preview-timeline-crop.png b/docs/html/images/android-7.0/m-preview-timeline-crop.png
similarity index 100%
rename from docs/html/preview/images/m-preview-timeline-crop.png
rename to docs/html/images/android-7.0/m-preview-timeline-crop.png
Binary files differ
diff --git a/docs/html/preview/images/m-preview-timeline.png b/docs/html/images/android-7.0/m-preview-timeline.png
similarity index 100%
rename from docs/html/preview/images/m-preview-timeline.png
rename to docs/html/images/android-7.0/m-preview-timeline.png
Binary files differ
diff --git a/docs/html/preview/images/mw-portrait.png b/docs/html/images/android-7.0/mw-portrait.png
similarity index 100%
rename from docs/html/preview/images/mw-portrait.png
rename to docs/html/images/android-7.0/mw-portrait.png
Binary files differ
diff --git a/docs/html/preview/images/mw-splitscreen.png b/docs/html/images/android-7.0/mw-splitscreen.png
similarity index 100%
rename from docs/html/preview/images/mw-splitscreen.png
rename to docs/html/images/android-7.0/mw-splitscreen.png
Binary files differ
diff --git a/docs/html/preview/images/mw-splitscreen_2x.png b/docs/html/images/android-7.0/mw-splitscreen_2x.png
similarity index 100%
rename from docs/html/preview/images/mw-splitscreen_2x.png
rename to docs/html/images/android-7.0/mw-splitscreen_2x.png
Binary files differ
diff --git a/docs/html/preview/images/n-preview-setup.png b/docs/html/images/android-7.0/n-preview-setup.png
similarity index 100%
rename from docs/html/preview/images/n-preview-setup.png
rename to docs/html/images/android-7.0/n-preview-setup.png
Binary files differ
diff --git a/docs/html/preview/images/notifications-1.png b/docs/html/images/android-7.0/notifications-1.png
similarity index 100%
rename from docs/html/preview/images/notifications-1.png
rename to docs/html/images/android-7.0/notifications-1.png
Binary files differ
diff --git a/docs/html/preview/images/notifications-2.png b/docs/html/images/android-7.0/notifications-2.png
similarity index 100%
rename from docs/html/preview/images/notifications-2.png
rename to docs/html/images/android-7.0/notifications-2.png
Binary files differ
diff --git a/docs/html/preview/images/notifications-3.png b/docs/html/images/android-7.0/notifications-3.png
similarity index 100%
rename from docs/html/preview/images/notifications-3.png
rename to docs/html/images/android-7.0/notifications-3.png
Binary files differ
diff --git a/docs/html/preview/images/notifications-card.png b/docs/html/images/android-7.0/notifications-card.png
similarity index 100%
rename from docs/html/preview/images/notifications-card.png
rename to docs/html/images/android-7.0/notifications-card.png
Binary files differ
diff --git a/docs/html/preview/images/pip-active.png b/docs/html/images/android-7.0/pip-active.png
similarity index 100%
rename from docs/html/preview/images/pip-active.png
rename to docs/html/images/android-7.0/pip-active.png
Binary files differ
diff --git a/docs/html/preview/images/pip-button.png b/docs/html/images/android-7.0/pip-button.png
similarity index 100%
rename from docs/html/preview/images/pip-button.png
rename to docs/html/images/android-7.0/pip-button.png
Binary files differ
diff --git a/docs/html/preview/images/quicksettings.png b/docs/html/images/android-7.0/quicksettings.png
similarity index 100%
rename from docs/html/preview/images/quicksettings.png
rename to docs/html/images/android-7.0/quicksettings.png
Binary files differ
diff --git a/docs/html/preview/images/sample-activenotifications.png b/docs/html/images/android-7.0/sample-activenotifications.png
similarity index 100%
rename from docs/html/preview/images/sample-activenotifications.png
rename to docs/html/images/android-7.0/sample-activenotifications.png
Binary files differ
diff --git a/docs/html/preview/images/sample-directboot.png b/docs/html/images/android-7.0/sample-directboot.png
similarity index 100%
rename from docs/html/preview/images/sample-directboot.png
rename to docs/html/images/android-7.0/sample-directboot.png
Binary files differ
diff --git a/docs/html/preview/images/sample-messagingservice.png b/docs/html/images/android-7.0/sample-messagingservice.png
similarity index 100%
rename from docs/html/preview/images/sample-messagingservice.png
rename to docs/html/images/android-7.0/sample-messagingservice.png
Binary files differ
diff --git a/docs/html/preview/images/sample-multiwindow.png b/docs/html/images/android-7.0/sample-multiwindow.png
similarity index 100%
rename from docs/html/preview/images/sample-multiwindow.png
rename to docs/html/images/android-7.0/sample-multiwindow.png
Binary files differ
diff --git a/docs/html/preview/images/sample-scopeddirectoryaccess.png b/docs/html/images/android-7.0/sample-scopeddirectoryaccess.png
similarity index 100%
rename from docs/html/preview/images/sample-scopeddirectoryaccess.png
rename to docs/html/images/android-7.0/sample-scopeddirectoryaccess.png
Binary files differ
diff --git a/docs/html/images/android-7.0/scoped-directory-access-dont-ask.png b/docs/html/images/android-7.0/scoped-directory-access-dont-ask.png
new file mode 100644
index 0000000..6682948
--- /dev/null
+++ b/docs/html/images/android-7.0/scoped-directory-access-dont-ask.png
Binary files differ
diff --git a/docs/html/images/android-7.0/scoped-directory-access-dont-ask_2x.png b/docs/html/images/android-7.0/scoped-directory-access-dont-ask_2x.png
new file mode 100644
index 0000000..be717f9
--- /dev/null
+++ b/docs/html/images/android-7.0/scoped-directory-access-dont-ask_2x.png
Binary files differ
diff --git a/docs/html/images/android-7.0/scoped-directory-access-framed.png b/docs/html/images/android-7.0/scoped-directory-access-framed.png
new file mode 100644
index 0000000..e4d619a
--- /dev/null
+++ b/docs/html/images/android-7.0/scoped-directory-access-framed.png
Binary files differ
diff --git a/docs/html/images/android-7.0/scoped-directory-access-framed_2x.png b/docs/html/images/android-7.0/scoped-directory-access-framed_2x.png
new file mode 100644
index 0000000..fe17bce
--- /dev/null
+++ b/docs/html/images/android-7.0/scoped-directory-access-framed_2x.png
Binary files differ
diff --git a/docs/html/preview/images/scoped-folder-access-dont-ask.png b/docs/html/images/android-7.0/scoped-folder-access-dont-ask.png
similarity index 100%
rename from docs/html/preview/images/scoped-folder-access-dont-ask.png
rename to docs/html/images/android-7.0/scoped-folder-access-dont-ask.png
Binary files differ
diff --git a/docs/html/preview/images/scoped-folder-access-dont-ask_2x.png b/docs/html/images/android-7.0/scoped-folder-access-dont-ask_2x.png
similarity index 100%
rename from docs/html/preview/images/scoped-folder-access-dont-ask_2x.png
rename to docs/html/images/android-7.0/scoped-folder-access-dont-ask_2x.png
Binary files differ
diff --git a/docs/html/preview/images/scoped-folder-access-framed.png b/docs/html/images/android-7.0/scoped-folder-access-framed.png
similarity index 100%
rename from docs/html/preview/images/scoped-folder-access-framed.png
rename to docs/html/images/android-7.0/scoped-folder-access-framed.png
Binary files differ
diff --git a/docs/html/preview/images/scoped-folder-access-framed_2x.png b/docs/html/images/android-7.0/scoped-folder-access-framed_2x.png
similarity index 100%
rename from docs/html/preview/images/scoped-folder-access-framed_2x.png
rename to docs/html/images/android-7.0/scoped-folder-access-framed_2x.png
Binary files differ
diff --git a/docs/html/preview/images/screen-zoom-1.png b/docs/html/images/android-7.0/screen-zoom-1.png
similarity index 100%
rename from docs/html/preview/images/screen-zoom-1.png
rename to docs/html/images/android-7.0/screen-zoom-1.png
Binary files differ
diff --git a/docs/html/preview/images/screen-zoom-2.png b/docs/html/images/android-7.0/screen-zoom-2.png
similarity index 100%
rename from docs/html/preview/images/screen-zoom-2.png
rename to docs/html/images/android-7.0/screen-zoom-2.png
Binary files differ
diff --git a/docs/html/preview/images/studio-jdk-location.jpg b/docs/html/images/android-7.0/studio-jdk-location.jpg
similarity index 100%
rename from docs/html/preview/images/studio-jdk-location.jpg
rename to docs/html/images/android-7.0/studio-jdk-location.jpg
Binary files differ
diff --git a/docs/html/images/develop/hero-layout-editor.png b/docs/html/images/develop/hero-layout-editor.png
new file mode 100644
index 0000000..195150e
--- /dev/null
+++ b/docs/html/images/develop/hero-layout-editor.png
Binary files differ
diff --git a/docs/html/images/develop/hero-layout-editor_2x.png b/docs/html/images/develop/hero-layout-editor_2x.png
new file mode 100644
index 0000000..60c3d24
--- /dev/null
+++ b/docs/html/images/develop/hero-layout-editor_2x.png
Binary files differ
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/images/tools/sdk-manager-support-libs.png b/docs/html/images/tools/sdk-manager-support-libs.png
deleted file mode 100644
index cb4cea5..0000000
--- a/docs/html/images/tools/sdk-manager-support-libs.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/tools/studio-sdk-manager-packages.png b/docs/html/images/tools/studio-sdk-manager-packages.png
deleted file mode 100644
index 79ea912..0000000
--- a/docs/html/images/tools/studio-sdk-manager-packages.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/training/ctl-config.png b/docs/html/images/training/ctl-config.png
index 82f63c8..3a4f738 100644
--- a/docs/html/images/training/ctl-config.png
+++ b/docs/html/images/training/ctl-config.png
Binary files differ
diff --git a/docs/html/images/training/tv/playback/onboarding-fragment-diagram.png b/docs/html/images/training/tv/playback/onboarding-fragment-diagram.png
new file mode 100644
index 0000000..5839a50
--- /dev/null
+++ b/docs/html/images/training/tv/playback/onboarding-fragment-diagram.png
Binary files differ
diff --git a/docs/html/images/training/tv/playback/onboarding-fragment.png b/docs/html/images/training/tv/playback/onboarding-fragment.png
new file mode 100644
index 0000000..5b7da55
--- /dev/null
+++ b/docs/html/images/training/tv/playback/onboarding-fragment.png
Binary files differ
diff --git a/docs/html/images/training/tv/playback/onboarding-fragment_2x.png b/docs/html/images/training/tv/playback/onboarding-fragment_2x.png
new file mode 100644
index 0000000..0034be4
--- /dev/null
+++ b/docs/html/images/training/tv/playback/onboarding-fragment_2x.png
Binary files differ
diff --git a/docs/html/index.jd b/docs/html/index.jd
index b1248af..6dcce92 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,27 +63,44 @@
</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>
+
+<section class="dac-expand dac-hero" style="background-color:#FFF0B4;">
+ <div class="wrap" style="max-width:1000px;margin-top:0;overflow:auto">
+ <div class="col-7of16 col-push-8of16 dac-hero-figure">
+ <a href="/studio/index.html">
+ <img class="dac-hero-image" style="padding-top:24px"
+ src="/studio/images/hero_image_studio_2-2_2x.png">
+ </a>
+ </div>
+ <div class="col-7of16 col-pull-6of16">
+ <h1 class="dac-hero-title" style="color:#004d40">Android Studio 2.2!</h1>
+
+<p class="dac-hero-description" style="color:#004d40">Packed with 20+ new
+features, Android Studio 2.2 focuses on speed, smarts, and Android platform
+support.</p>
+
+<p class="dac-hero-description" style="color:#004d40">Develop faster with
+features such as the new Layout Editor, and develop smarter with the new APK
+analyzer, expanded code analysis and more.</p>
+
+<p class="dac-hero-description" style="color:#004d40">Plus, this update
+includes support for all the latest developer features in Android 7.0 Nougat,
+with an updated emulator to test them all out.</p>
+
+<p style="margin-top:24px">
+ <a class="dac-hero-cta" href="/studio/index.html" style="color:#004d40">
+ <span class="dac-sprite dac-auto-chevron"></span>
+ Get Android Studio 2.2
</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>
+ <wbr>
+ <a class="dac-hero-cta" href="/studio/releases/index.html" style="color:#004d40">
+ <span class="dac-sprite dac-auto-chevron"></span>
+ See the release notes</a>
+</p>
+ </div>
+ </div>
+</section>
+
<section class="dac-section dac-light" id="build-apps"><div class="wrap">
<h1 class="dac-section-title">Build Beautiful Apps</h1>
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 ef94cc4..e4bd368 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",
@@ -4117,8 +4127,8 @@
"develop/landing/tools": {
"title": "",
"resources": [
- "https://www.youtube.com/watch?v=ZOz_yr8Yxq8&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
- "https://www.youtube.com/watch?v=eOV2owswDkE&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
+ "https://www.youtube.com/watch?v=NbHsi3-uR8E&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
+ "https://www.youtube.com/watch?v=-SY5nkNVUn0&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
"https://www.youtube.com/watch?v=StqAZ1OQbqA&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
"https://www.youtube.com/watch?v=-SY5nkNVUn0&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
"https://www.youtube.com/watch?v=4rI4tTd7-J8&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
@@ -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": [
@@ -5552,23 +5568,20 @@
"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://android-developers.blogspot.com/2016/09/android-studio-2-2.html",
"https://medium.com/google-developers/writing-more-code-by-writing-less-code-with-android-studio-live-templates-244f648d17c7#.hczcm02du",
]
},
- "preview/landing/resources": {
+ "nougat/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"
+ "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"
@@ -5586,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/preview/_book.yaml b/docs/html/preview/_book.yaml
deleted file mode 100644
index ad67249..0000000
--- a/docs/html/preview/_book.yaml
+++ /dev/null
@@ -1,344 +0,0 @@
-toc:
-- title: Program Overview
- path: /preview/overview.html
- path_attributes:
- - name: es-lang
- value: Información general del programa
- - name: in-lang
- value: Ikhtisar Program
- - name: ja-lang
- value: プログラム概要
- - name: ko-lang
- value: 프로그램 개요
- - name: pt-br-lang
- value: Visão geral do programa
- - name: ru-lang
- value: Обзор программы
- - name: vi-lang
- value: Tổng quan về Chương trình
- - name: zh-cn-lang
- value: 计划概览
- - name: zh-tw-lang
- value: 程式總覽
-
-- title: Support and Release Notes
- path: /preview/support.html
-
-- title: Set Up the Preview
- path: /preview/setup-sdk.html
- path_attributes:
- - name: es-lang
- value: Configurar el SDK de la versión preliminar
- - name: in-lang
- value: Menyiapkan Preview
- - name: ja-lang
- value: Preview SDK のセットアップ
- - name: ko-lang
- value: 미리 보기 SDK 설정하기
- - name: pt-br-lang
- value: Configuração do Preview SDK
- - name: ru-lang
- value: Настройка пакета SDK Preview
- - name: vi-lang
- value: Kiểm thử trên Thiết bị
- - name: zh-cn-lang
- value: 设置预览版 SDK
- - name: zh-tw-lang
- value: 設定預覽版 SDK
-
-- title: Test on a Device
- path: /preview/download.html
- path_attributes:
- - name: es-lang
- value: Pruebe en un dispositivo
- - name: in-lang
- value: Menguji pada Perangkat
- - name: ja-lang
- value: デバイス上でテストする
- - name: ko-lang
- value: 기기에서 테스트
- - name: pt-br-lang
- value: Testar em um dispositivo
- - name: ru-lang
- value: Тестирование на устройстве
- - name: vi-lang
- value: Kiểm thử trên Thiết bị
- - name: zh-cn-lang
- value: 在设备上测试
- - name: zh-tw-lang
- value: 在裝置上測試
-
-- title: Behavior Changes
- path: /preview/behavior-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: 行為變更
- section:
- - title: Background Optimizations
- path: /preview/features/background-optimization.html
- path_attributes:
- - name: es-lang
- value: Optimizaciones en segundo plano
- - name: in-lang
- value: Optimisasi Latar Belakang
- - name: ja-lang
- value: バックグラウンド処理の最適化
- - name: ko-lang
- value: 백그라운드 최적화
- - name: pt-br-lang
- value: Otimizações em segundo plano
- - name: ru-lang
- value: Оптимизация фоновых процессов
- - name: vi-lang
- value: Tối ưu hóa Chạy ngầm
- - name: zh-cn-lang
- value: 后台优化
- - name: zh-tw-lang
- value: 背景最佳化
- - title: Language and Locale
- path: /preview/features/multilingual-support.html
- path_attributes:
- - name: es-lang
- value: Idioma y configuración regional
- - name: in-lang
- value: Bahasa dan Lokal
- - name: ja-lang
- value: 言語とロケール
- - name: ko-lang
- value: 언어 및 로케일
- - name: pt-br-lang
- value: Idioma e localidade
- - name: ru-lang
- value: Язык и языковой стандарт
- - name: vi-lang
- value: Ngôn ngữ và Bản địa
- - name: zh-cn-lang
- value: 语言和区域设置
- - name: zh-tw-lang
- value: 語言和地區設定
-
-- title: Android N for Developers
- path: /preview/api-overview.html
- 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 總覽
- section:
- - title: Multi-Window Support
- path: /preview/features/multi-window.html
- path_attributes:
- - name: es-lang
- value: Compatibilidad con ventanas múltiples
- - name: in-lang
- value: Dukungan Multi-Jendela
- - name: ja-lang
- value: マルチ ウィンドウのサポート
- - name: ko-lang
- value: 다중 창 지원
- - name: pt-br-lang
- value: Suporte a várias janelas
- - name: ru-lang
- value: Поддержка многооконного режима
- - name: vi-lang
- value: Hỗ trợ đa cửa sổ
- - name: zh-cn-lang
- value: 多窗口支持
- - name: zh-tw-lang
- value: 多視窗支援
- - title: Notifications
- path: /preview/features/notification-updates.html
- path_attributes:
- - name: es-lang
- value: Notificaciones
- - name: in-lang
- value: Pemberitahuan
- - name: ja-lang
- value: 通知
- - name: ko-lang
- value: 알림
- - name: pt-br-lang
- value: Notificações
- - name: ru-lang
- value: Уведомления
- - name: vi-lang
- value: Thông báo
- - name: zh-cn-lang
- value: 通知
- - name: zh-tw-lang
- value: 通知
- - title: Data Saver
- path: /preview/features/data-saver.html
- - title: TV Recording
- path: /preview/features/tv-recording-api.html
- path_attributes:
- - name: es-lang
- value: Grabación de TV
- - name: in-lang
- value: Perekaman TV
- - name: ja-lang
- value: TV の録画
- - name: ko-lang
- value: TV 녹화
- - name: pt-br-lang
- value: Gravação para TV
- - name: ru-lang
- value: Запись ТВ
- - name: vi-lang
- value: Ghi lại TV
- - name: zh-cn-lang
- value: TV 录制
- - name: zh-tw-lang
- value: 電視錄製
- - title: Key Attestation
- path: /preview/features/key-attestation.html
- - title: Network Security Configuration
- path: /preview/features/security-config.html
- path_attributes:
- - name: es-lang
- value: Configuración de seguridad de la red
- - name: ja-lang
- value: ネットワーク セキュリティ構成
- - name: ko-lang
- value: 네트워크 보안 구성
- - name: pt-br-lang
- value: Configurações de segurança de rede
- - name: ru-lang
- value: Конфигурация сетевой безопасности
- - name: vi-lang
- value: Cấu hình Bảo mật mạng
- - name: zh-cn-lang
- value: 网络安全配置
- - name: zh-tw-lang
- value: 網路安全性設定
- - title: ICU4J Support
- path: /preview/features/icu4j-framework.html
- path_attributes:
- - name: es-lang
- value: API de ICU4J del framework de Android
- - name: in-lang
- value: ICU4J Android Framework API
- - name: ja-lang
- value: ICU4J Android フレームワーク API
- - name: ko-lang
- value: ICU4J Android 프레임워크 API
- - name: pt-br-lang
- value: APIs de estrutura do Android para ICU4J
- - name: ru-lang
- value: API-интерфейсы ICU4J в платформе Android
- - name: vi-lang
- value: API Khuôn khổ Android ICU4J
- - name: zh-cn-lang
- value: ICU4J Android 框架 API
- - name: zh-tw-lang
- value: ICU4J Android 架構 API
- - title: Java 8 Language Features
- path: /preview/j8-jack.html
- path_attributes:
- - name: es-lang
- value: Funciones del lenguaje Java 8
- - name: in-lang
- value: Fitur Bahasa Java 8
- - name: ja-lang
- value: Java 8 の機能
- - name: ko-lang
- value: Java 8 언어 기능
- - name: pt-br-lang
- value: Recursos de linguagem do Java 8
- - name: ru-lang
- value: Возможности языка Java 8
- - name: vi-lang
- value: Tính năng của Ngôn ngữ Java 8
- - name: zh-cn-lang
- value: Java 8 语言功能
- - name: zh-tw-lang
- value: Java 8 語言功能
- - title: Android for Work Updates
- path: /preview/features/afw.html
- - title: Scoped Directory Access
- path: /preview/features/scoped-folder-access.html
- path_attributes:
- - name: es-lang
- value: Acceso a directorios determinados
- - name: ja-lang
- value: 特定のディレクトリへのアクセス
- - name: ko-lang
- value: 범위가 지정된 디렉터리 액세스
- - name: pt-br-lang
- value: Acesso a diretórios com escopo
- - name: ru-lang
- value: Доступ к выделенным каталогам
- - name: vi-lang
- value: Truy cập Thư mục theo Phạm vi
- - name: zh-cn-lang
- value: 作用域目录访问
- - name: zh-tw-lang
- value: 限定範圍目錄存取
-
-- title: Samples
- path: /preview/samples.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: License Agreement
- path: /preview/license.html
- path_attributes:
- - name: es-lang
- value: Contrato de licencia
- - name: ja-lang
- value: 使用許諾契約
- - name: ko-lang
- value: 라이선스 계약
- - name: pt-br-lang
- value: Contrato de licença
- - name: ru-lang
- value: Лицензионное соглашение
- - name: zh-cn-lang
- value: 许可协议
- - name: zh-tw-lang
- value: 授權協議
diff --git a/docs/html/preview/api-overview.jd b/docs/html/preview/api-overview.jd
deleted file mode 100644
index c7ffb7a..0000000
--- a/docs/html/preview/api-overview.jd
+++ /dev/null
@@ -1,1211 +0,0 @@
-page.title=Android N for Developers
-meta.tags="preview", "androidn"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-apis_2x.png
-@jd:body
-
-
-
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>Key Developer Features</h2>
- <ol>
- <ul style="list-style-type:none;">
- <li><a href="#multi-window_support">Multi-window Support</a></li>
- <li><a href="#notification_enhancements">Notifications</a></li>
- <li><a href="#jit_aot">JIT/AOT Compilation</a></li>
- <li><a href="#quick_path_to_app_install">Quick Path to App Install</a></li>
- <li><a href="#doze_on_the_go">Doze on the Go</a></li>
- <li><a href="#background_optimizations">Background Optimizations</a></li>
- <li><a href="#surfaceview">SurfaceView</a></li>
- <li><a href="#data_saver">Data Saver</a></li>
- <li><a href="#vulkan">Vulkan API</a></li>
- <li><a href="#tile_api">Quick Settings Tile API</a></li>
- <li><a href="#number-blocking">Number Blocking</a></li>
- <li><a href="#call_screening">Call Screening</a></li>
- <li><a href="#multi-locale_languages">Locales and Languages</a></li>
- <li><a href="#emoji">New Emojis</a></li>
- <li><a href="#icu4">ICU4J APIs in Android</a></li>
- <li><a href="#webview">WebView</a></li>
- <li><a href="#gles_32">OpenGL ES 3.2 API</a></li>
- <li><a href="#android_tv_recording">Android TV Recording</a></li>
- <li><a href="#android_for_work">Android for Work</a></li>
- <li><a href="#accessibility_enhancements">Accessibility</a></li>
- <li><a href="#direct_boot">Direct Boot</a></li>
- <li><a href="#key_attestation">Key Attestation</a></li>
- <li><a href="#network_security_config">Network Security Config</a></li>
- <li><a href="#default_trusted_ca">Default Trusted CA</a></li>
- <li><a href="#apk_signature_v2">APK Signature Scheme v2</a></li>
- <li><a href="#scoped_directory_access">Scoped Directory Access</a></li>
- <li><a href="#keyboard_shortcuts_helper">Keyboard Shortcuts Helper</a></li>
- <li><a href="#custom_pointer_api">Custom Pointer API</a></li>
- <li><a href="#sustained_performance_api">Sustained Performance API</a></li>
- <li><a href="#vr">VR Support</a></li>
- <li><a href="#print_svc">Print Service Enhancements</a></li>
- <li><a href="#virtual_files">Virtual Files</a></li>
- <li><a href="#framemetrics_api">FrameMetricsListener API</a></li>
- </ol>
-</div>
-</div>
-
-
-
-<p>Android N is still in active development, but you can try it
-now as part of the N Developer Preview. The sections below highlight some of
-the new features for developers. </p>
-
-<p>
- Make sure to check out the <a href=
- "{@docRoot}preview/behavior-changes.html">Behavior Changes</a> to learn about
- areas where platform changes may affect your apps, take a look at the
- developer guides to learn more about key features, and download the <a href=
- "{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a> for details on
- new APIs.
-</p>
-
-<h2 id="multi-window_support">Multi-window Support</h2>
-
-
-<p>In Android N, we're introducing a new and much-requested multitasking feature
-into the platform — multi-window support. </p>
-
- <p>Users can now pop open two apps on the screen at once. </p>
- <ul>
- <li>On phones and tablets
-running Android N, users can run two apps side-by-side or
-one-above-the-other in splitscreen mode. Users can resize the apps by dragging
-the divider between them. </li>
-
-<li>On Android TV devices, apps can put themselves in <a
-href="{@docRoot}preview/features/picture-in-picture.html">picture-in-picture
-mode</a>, allowing them to continue showing content while the user browses or
-interacts with other apps.</li>
- </ul>
-
-<div class="col-4of10">
-<img src="{@docRoot}preview/images/mw-portrait.png" alt="" style="height:460px;padding-left:1em;"
- id="img-split-screen" />
-<p class="img-caption">
- <strong>Figure 1.</strong> Apps running in split-screen mode.
-</p>
-
- </div>
-
-<p>Especially on tablets and other larger-screen devices, multi-window support
-gives you new ways to engage users. You can even enable drag-and-drop in
-your app to let users conveniently drag content to or from your app — a great
-way to enhance your user experience. </p>
-
-<p>It's straightforward to add multi-window support to your app and configure how it
-handles multi-window display. For example, you can specify your activity's
-minimum allowable dimensions, preventing users from resizing the activity below
-that size. You can also disable multi-window display for your app, which
- ensures that the system will only show your app in full-screen mode.</p>
-
-<p>
- For more information, see the <a href=
- "{@docRoot}preview/features/multi-window.html">Multi-Window Support</a>
- developer documentation.
-</p>
-
-<h2 id="notification_enhancements">Notification Enhancements</h2>
-
-<p>In Android N we've redesigned notifications to make them easier and faster to
-use. Some of the changes include:</p>
-
-<ul>
- <li>
- <strong>Template updates</strong>: We're updating notification templates to
- put a new emphasis on hero image and avatar. Developers will be able to
- take advantage of the new templates with minimal adjustments in their code.
- </li>
-
- <li>
- <strong>Messaging style customization</strong>: You can customize more of
- the user interface labels associated with your notifications using the
- <code>MessagingStyle</code> class. You can configure the message,
- conversation title, and content view.
- </li>
-
- <li>
- <strong>Bundled notifications</strong>: The system can group messages
- together, for example by message topic, and display the group. A user can
- take actions, such as Dismiss or Archive, on them in place. If you’ve
- implemented notifications for Android Wear, you’ll already be familiar with
- this model.
- </li>
-
- <li>
- <strong>Direct reply</strong>: For real-time communication apps, the
- Android system supports inline replies so that users can quickly respond to
- an SMS or text message directly within the notification interface.
- </li>
-
- <li>
- <strong>Custom views</strong>: Two new APIs enable you to leverage system
- decorations, such as notification headers and actions, when using custom
- views in notifications.
- </li>
-</ul>
-
-<div class="col-4of12">
- <img src="{@docRoot}preview/images/notifications-1.png" alt=""
- style="padding:.5em;max-width:226px">
-</div>
-
-<div class="col-4of12">
- <img src="{@docRoot}preview/images/notifications-3.png" alt=""
- style="padding:.5em;max-width:226px">
-</div>
-
-<div class="col-4of12">
- <img src="{@docRoot}preview/images/notifications-2.png" alt=""
- style="padding:.5em;max-width:226px">
-</div>
-
-
-<p class="img-caption">
- <strong>Figure 2.</strong> Bundled notifications and direct reply.
-</p>
-
-<p>To learn how to implement the new features, see the
- <a href="{@docRoot}preview/features/notification-updates.html">Notifications</a>
- guide.</p>
-
-
-
-<h2 id="jit_aot">Profile-guided JIT/AOT Compilation</h2>
-
-<p>In Android N, we've added a Just in Time (JIT) compiler with code profiling to
-ART, which lets it constantly improve the performance of Android apps as they
-run. The JIT compiler complements ART's current Ahead of Time (AOT) compiler
-and helps improve runtime performance, save storage space, and speed up app
-updates and system updates.</p>
-
-<p>Profile-guided compilation lets ART manage the AOT/JIT compilation for each app
-according to its actual usage, as well as conditions on the device. For
-example, ART maintains a profile of each app's hot methods and can precompile
-and cache those methods for best performance. It leaves other parts of the app
-uncompiled until they are actually used.</p>
-
-<p>Besides improving performance for key parts of the app, profile-guided
-compilation helps reduce an app's overall RAM footprint, including associated
-binaries. This feature is especially important on low-memory devices.</p>
-
-<p>ART manages profile-guided compilation in a way that minimizes impact on the
-device battery. It does precompilation only when then the device is idle and
-charging, saving time and battery by doing that work in advance.</p>
-
-<h2 id="quick_path_to_app_install">Quick Path to App Install</h2>
-
-<p>One of the most tangible benefits of ART's JIT compiler is the speed of app
-installs and system updates. Even large apps that required several minutes to
-optimize and install in Android 6.0 can now install in just a matter of
-seconds. System updates are also faster, since there's no more optimizing step. </p>
-
-<h2 id="doze_on_the_go">Doze on the Go...</h2>
-
-<p>Android 6.0 introduced Doze, a system mode that saves battery by deferring
-apps' CPU and network activities when the device is idle, such as when it's
-sitting on a table or in a drawer. </p>
-
-<p>Now in Android N, Doze takes a step further and saves battery while on the go.
-Any time the screen is off for a period of time and the device is unplugged,
-Doze applies a subset of the familiar CPU and network restrictions to apps.
-This means users can save battery even when carrying their devices in their
-pockets.</p>
-
-
-<img src="/preview/images/doze-diagram-1.png"
- alt="" id="figure1" />
-<p class="img-caption">
- <strong>Figure 3.</strong> Doze now applies
- restrictions to improve battery life even when the device is not stationary.
-</p>
-
-
-<p>A short time after the screen turns off while the device is on battery, Doze
-restricts network access and defers jobs and syncs. During brief maintenance
-windows, applications are allowed network access and any of their deferred
-jobs/syncs are executed. Turning the screen on or plugging in the device brings
-the device out of Doze.</p>
-
-<p>When the device is stationary again, with screen off and on battery for a
-period of time, Doze applies the full CPU and network restrictions on {@link
-android.os.PowerManager.WakeLock}, {@link android.app.AlarmManager} alarms, and
-GPS/Wi-Fi scans.</p>
-
-<p>The best practices for adapting your app to Doze are the same whether the
-device is moving or not, so if you already updated your app to gracefully
-handle Doze, you're all set. If not, start <a
-href="{@docRoot}training/monitoring-device-state/doze-standby.html#assessing_your_app">adapting
-your app to Doze</a> now.</p>
-
-<h2 id="background_optimizations">Project Svelte: Background Optimizations</h2>
-
-<p>Project Svelte is an ongoing effort to minimize RAM use by system and apps
-across the range of Android devices in the ecosystem. In Android N, Project
-Svelte is focused on optimizing the way apps run in the background. </p>
-
-<p>Background processing is an essential part of most apps. When handled right, it
-can make your user experience amazing — immediate, fast, and context-aware.
-When not handled right, background processing can needlessly consume RAM (and
-battery) and affect system performance for other apps. </p>
-
-<p>Since Android 5.0, {@link android.app.job.JobScheduler} has been the
-preferred way of performing background work in a way that's good
-for users. Apps can schedule jobs while letting the system optimize based on
-memory, power, and connectivity conditions. JobScheduler offers control and
-simplicity, and we want all apps to use it. </p>
-
-<p>
- Another good option is <a href=
- "https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
- <code>GCMNetworkManager</code></a>, part of Google Play Services, which
- offers similar job scheduling with compatibility across legacy versions of
- Android.
-</p>
-
-<p>We're continuing to extend <code>JobScheduler</code> and
-<code>GCMNetworkManager</code> to meet more of
-your use cases — for example, in Android N you can now schedule background
-work based on changes in Content Providers. At the same time we're starting to
-deprecate some of the older patterns that can reduce system performance,
-especially on low-memory devices.</p>
-
-<p>In Android N we're removing three commonly-used implicit broadcasts —
- {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, {@link
- android.hardware.Camera#ACTION_NEW_PICTURE}, and {@link
- android.hardware.Camera#ACTION_NEW_VIDEO} — since those can wake the
-background processes of multiple apps at once and strain memory and battery. If
-your app is receiving these, take advantage of the N Developer Preview to
- migrate to <code>JobScheduler</code> and related APIs instead. </p>
-
-<p>
- Take a look at the <a href=
- "{@docRoot}preview/features/background-optimization.html">Background
- Optimizations</a> documentation for details.
-</p>
-
-<h2 id="surfaceview">SurfaceView</h2>
-<p>
-Android N brings synchronous movement to the {@link android.view.SurfaceView}
-class, which provides better battery performance
-than {@link android.view.TextureView} in certain cases: When rendering video or
-3D content, apps with scrolling and animated video position use less power with
-{@link android.view.SurfaceView} than with {@link android.view.TextureView}.
-</p>
-
-The {@link android.view.SurfaceView} class enables more battery-efficient compositing on
-screen, because it is composited in dedicated hardware, separately from app
-window content. As a result, it makes fewer intermediate
-copies than {@link android.view.TextureView}.
-</p>
-
-<p>
-A {@link android.view.SurfaceView} object's content position is now updated synchronously
-with the containing app content. One result of this change is that simple
-translations or scales of a video playing in a {@link android.view.SurfaceView}
-no longer produce black bars alongside the view as it moves.
-</p>
-
-<p>
-Starting with Android N, we strongly recommend that you save power by using
-{@link android.view.SurfaceView} instead of {@link android.view.TextureView}.
-</p>
-
-<h2 id="data_saver">Data Saver</h2>
-
-<div class="col-5of12" style="margin-right:1.5em;">
-<img src="{@docRoot}preview/images/datasaver.png" style="border:2px solid #ddd">
-
-<p class="img-caption" style="padding-right:2em;">
- <strong>Figure 4.</strong> Data Saver in Settings.
-</p>
- </div>
-
-<p>Over the life of a mobile device, the cost of a cellular data plan typically
-exceeds the cost of the device itself. For many users, cellular data is an
-expensive resource that they want to conserve. </p>
-
-<p>Android N introduces Data Saver mode, a new system service that helps reduce
-cellular data use by apps, whether roaming, near the end of the billing cycle,
-or on a small prepaid data pack. Data Saver gives users control over how apps
-use cellular data and lets developers provide more efficient service when Data
-Saver is on. </p>
-
-<p>When a user enables Data Saver in <strong>Settings</strong> and the device is
-on a metered network, the system blocks background data usage and signals apps
-to use less data in the foreground wherever possible — such as by limiting
-bit rate for streaming, reducing image quality, deferring optimistic precaching,
-and so on. Users can whitelist specific apps to allow background metered data
-usage even when Data Saver is turned on.</p>
-
-<p>Android N extends the {@link android.net.ConnectivityManager} to provide apps a
-way to <a href="{@docRoot}preview/features/data-saver.html#status">retrieve the
-user's Data Saver preferences</a> and <a
-href="{@docRoot}preview/features/data-saver.html#monitor-changes">monitor
-preference changes</a>. All apps should check whether the user has enabled Data
-Saver and make an effort to limit foreground and background data usage.</p>
-
-
-<h2 id="vulkan">Vulkan API</h2>
-
-<p>
- Android N integrates <a href="http://www.khronos.org/vulkan" class=
- "external-link">Vulkan™</a>, a new 3D rendering API, into the platform. Like
- <a href="https://www.khronos.org/opengles/" class="external-link">OpenGL™
- ES</a>, Vulkan is an open standard for 3D graphics and rendering maintained
- by the Khronos Group.
-</p>
-
-<p>
- Vulkan is designed from the ground up to minimize CPU overhead in the driver,
- and allow your application to control GPU operation more directly. Vulkan
- also enables better parallelization by allowing multiple threads to perform
- work such as command buffer construction at once.
-</p>
-
-<p>
- Vulkan development tools and libraries are rolled into the Android NDK. They
- include:
-</p>
-
-<ul>
- <li>Headers
- </li>
-
- <li>Validation layers (debug libraries)
- </li>
-
- <li>SPIR-V shader compiler
- </li>
-
- <li>SPIR-V runtime shader compilation library
- </li>
-</ul>
-
-<p>
- Vulkan is only available to apps on devices with Vulkan-capable hardware,
- such as Nexus 5X, Nexus 6P, and Nexus Player. We're working closely with our
- partners to bring Vulkan to more devices as soon as possible.
-</p>
-
-<p>
- For more information, see the the <a href=
- "{@docRoot}ndk/guides/graphics/index.html">API documentation</a>.
-</p>
-
-<h2 id="tile_api">Quick Settings Tile API</h2>
-
-
-<div style="float:right;max-width:320px">
-<img src="{@docRoot}preview/images/quicksettings.png" style="padding-left:1.5em;">
-
-<p class="img-caption" style="padding-left:2em;">
- <strong>Figure 5.</strong> Quick Settings tiles in the notification shade.
-</p>
-
-
- </div><p>Quick Settings is a popular and simple way to expose key settings and actions,
-directly from the notification shade. In Android N, we've expanded the scope of
-Quick Settings to make it even more useful and convenient. </p>
-
-<p>We've added more room for additional Quick Settings tiles, which users can
-access across a paginated display area by swiping left or right. We've also
-given users control over what Quick Settings tiles appear and where they are
-displayed — users can add or move tiles just by dragging and dropping them. </p>
-
-<p>For developers, Android N also adds a new API that lets you define your own
- Quick Settings tiles to give users easy access to key controls and actions in your app.</p>
-
-<p>
- Quick Settings tiles are reserved for controls or actions that are either
- urgently required or frequently used, and should not be used as shortcuts to
- launching an app.
-</p>
-
-<p>
- Once you’ve defined your tiles, you can surface them to users, who can add
- them to Quick Settings just by drag and drop.
-</p>
-
-<p>
- For information about creating an app tile, see the documentation for
- <code>android.service.quicksettings.Tile</code> in the downloadable <a href=
- "{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.
-</p>
-
-
-
-<h2 id="number-blocking">Number Blocking</h2>
-
-<p>Android N now supports number blocking in the platform and provides a
-framework API to let service providers maintain a blocked-number list. The
-default SMS app, the default phone app, and carrier apps can read from and
-write to the blocked-number list. The list is not accessible to other apps.</p>
-
-<p>By making number blocking a standard feature of the platform, Android provides
-a consistent way for apps to support number blocking across a wide range of
-devices. Among the other benefits that apps can take advantage of are:</p>
-
-<ul>
- <li> Numbers blocked on calls are also blocked on texts
- <li> Blocked numbers can persist across resets and devices through the Backup &
-Restore feature
- <li> Multiple apps can use the same blocked numbers list
-</ul>
-
-<p>Additionally, carrier app integration through Android means that carriers can
-read the blocked numbers list on the device and perform service-side blocking
-for the user in order to stop unwanted calls and texts from reaching the user
-through any medium, such as a VOIP endpoint or forwarding phones.</p>
-
-<p>
- For more information, see <code>android.provider.BlockedNumberContract</code>
- in the downloadable <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API
- Reference</a>.
-</p>
-
-<h2 id="call_screening">Call Screening</h2>
-
-<p>
- Android N allows the default phone app to screen incoming calls. The phone
- app does this by implementing the new <code>CallScreeningService</code>,
- which allows the phone app to perform a number of actions based on an
- incoming call's {@link android.telecom.Call.Details Call.Details}, such as:
-</p>
-
-<ul>
- <li> Reject the incoming call
- <li> Do not allow the call to the call log
- <li> Do not show the user a notification for the call
-</ul>
-
-<p>
- For more information, see <code>android.telecom.CallScreeningService</code>
- in the downloadable <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API
- Reference</a>.
-</p>
-
-
-<h2 id="multi-locale_languages">Multi-locale Support, More Languages</h2>
-
-
-<p>Android N now lets users select <strong>multiple locales</strong> in Settings,
-to better support bilingual use-cases. Apps can use
-a new API to get the user's selected locales and then offer more sophisticated
-user experiences for multi-locale users — such as showing search results in
-multiple languages and not offering to translate webpages in a language the
-user already knows.</p>
-
-<p>Along with multi-locale support, Android N also expands the range of languages
-available to users. It offers more than 25 variants each for commonly used
-languages such as English, Spanish, French, and Arabic. It also adds partial
-support for more than 100 new languages.</p>
-
-<p>Apps can get the list of locales set by the user by calling
-<code>LocaleList.GetDefault()</code>. To support the expanded number of locales, Android N is
-changing the way that it resolves resources. Make sure that you test and verify that your apps
-working as expected with the new resource resolution logic.</p>
-
-<p>To learn about the new resource-resolution behavior and the best practices you
-should follow, see <a href="{@docRoot}preview/features/multilingual-support.html"
->Multilingual Support</a>.</p>
-
-
-<h2 id="emoji">New Emojis</h2>
-
-<p>
- Android N introduces additional emojis and emoji-related features including
- skin tone emojis and support for variation
- selectors. If your app supports emojis,
- follow the guidelines below to take advantage of these emoji-related features.
-</p>
-
-<ul>
- <li>
- <strong>Check that a device contains an emoji before inserting it.</strong>
- To check which emojis are present in the
- system font, use the {@link android.graphics.Paint#hasGlyph(String)} method.
- </li>
- <li>
- <strong>Check that an emoji supports variation selectors.</strong>
- Variation selectors allow you to
- present certain emojis in color or in black-and-white.
- On mobile devices, apps should represent emojis in color rather than black-and-white. However,
- if your app displays emojis inline with text, then it should use the black-and-white variation.
- To determine whether an emoji has a variation, use the variation selector.
- For a complete list of characters with variations, review the
- <em>emoji variation sequences</em> section of the
- <a class="external-link"
- href="http://www.unicode.org/Public/9.0.0/ucd/StandardizedVariants-9.0.0d1.txt">
- Unicode documentation on variations</a>.
- </li>
- <li>
- <strong>Check that an emoji supports skin tone.</strong> Android N allows users to modify the
- rendered skin tone of emojis to their preference. Keyboard apps should provide visual
- indications for emojis that have multiple skin tones and should allow users to
- select the skin tone that they prefer. To determine which system emojis have
- skin tone modifiers, use the {@link android.graphics.Paint#hasGlyph(String)}
- method. You can determine which emojis use skin tones by reading the
- <a class="external-link"
- href="http://unicode.org/emoji/charts/full-emoji-list.html">
- Unicode documentation</a>.
- </li>
-</ul>
-
-
-<h2 id="icu4">ICU4J APIs in Android</h2>
-
-<p>
- Android N now offers a subset of <a href=
- "http://site.icu-project.org/">ICU4J</a> APIs in the Android framework under
- the <code>android.icu</code> package. Migration is easy, and mostly entails
- simply changing from the <code>com.java.icu</code> namespace to
- <code>android.icu</code>. If you are already using an ICU4J bundle in your
- apps, switching to the <code>android.icu</code> APIs provided in the Android
- framework can produce substantial savings in APK size.
-</p>
-
-<p>
- To learn more about the Android ICU4J APIs, see <a href=
- "{@docRoot}preview/features/icu4j-framework.html">ICU4J Support</a>.
-</p>
-
-<h2 id="webview">WebView</h2>
-
-<h3>Chrome + WebView, Together</h3>
-
-<p>
- Starting with Chrome version 51 on Android N and above, the Chrome APK on your device
- is used to provide and render Android System WebViews. This approach improves memory
- usage on the device itself and also reduces the bandwidth required to keep
- WebView up to date (as the standalone WebView APK will no longer be updated
- as long as Chrome remains enabled).
-</p>
-
-<p>
- You can choose your WebView provider by enabling Developer Options and
- selecting <strong>WebView implementation</strong>. You can use any compatible
- Chrome version (Dev, Beta or Stable) that is installed on your device or the
- standalone Webview APK to act as the WebView implementation.
-</p>
-
-<h3>Multiprocess</h3>
-
-<p>
- Starting with Chrome version 51 in Android N, WebView will run web content in a
- separate sandboxed process when the developer option "Multiprocess WebView"
- is enabled.
-</p>
-
-<p>
- We're looking for feedback on compatibility and runtime performance in N
- before enabling multiprocess WebView in a future version of Android. In this
- version, regressions in startup time, total memory usage and software
- rendering performance are expected.
-</p>
-
-<p>
- If you find unexpected issues in multiprocess mode we’d like to hear about
- them. Please get in touch with the WebView team on the <a href=
- "https://bugs.chromium.org/p/chromium/issues/entry?template=Webview%20Bugs"
- >Chromium bug tracker</a>.
-</p>
-
-<h3>Javascript run before page load</h3>
-<p>
- Starting with apps targeting Android N, the Javascript context will be reset
- when a new page is loaded. Currently, the context is carried over for the
- first page loaded in a new WebView instance.
-</p>
-
-<p>
- Developers looking to inject Javascript into the WebView should execute the
- script after the page has started to load.
-</p>
-
-<h3>Geolocation on insecure origins</h3>
-
-<p>
- Starting with apps targeting Android N, the geolocation API will only be
- allowed on secure origins (over HTTPS.) This policy is designed to protect
- users’ private information when they’re using an insecure connection.
-</p>
-
-<h3>Testing with WebView Beta</h3>
-
-<p>
- WebView is updated regularly, so we recommend that you test compatibility
- with your app frequently using WebView’s beta channel. To get started testing
- pre-release versions of WebView on Android N, download and install either
- Chrome Dev or Chrome Beta, and select it as the WebView implementation under
- developer options as described above. Please report issues via the <a href=
- "https://bugs.chromium.org/p/chromium/issues/entry?template=Webview%20Bugs">Chromium
- bug tracker</a> so that we can fix them before a new version of WebView is
- released.
-</p>
-
-<p>
- If you have any other questions or issues, feel free to reach out to the
- WebView team via our <a href=
- "https://plus.google.com/communities/105434725573080290360">G+ community</a>.
-</p>
-
-<h2 id="gles_32">OpenGL™ ES 3.2 API</h2>
-
-<p>Android N adds framework interfaces and platform support for OpenGL ES 3.2, including:</p>
-
-<ul>
- <li> All extensions from the <a class="external-link"
-href="https://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">
-Android Extension Pack</a></a> (AEP) except for <code>EXT_texture_sRGB_decode</code>.
- <li> Floating-point framebuffers for HDR and deferred shading.
- <li> BaseVertex draw calls to enable better batching and streaming.
- <li> Robust buffer access control to reduce WebGL overhead.
-</ul>
-
-<p>The framework API for OpenGL ES 3.2 on Android N is provided with the
-<code>GLES32</code> class. When using OpenGL ES 3.2, be sure to declare the
-requirement in your manifest file, using the <code><uses-feature></code> tag and
-the <code>android:glEsVersion</code> attribute. </p>
-
-<p>For information about using OpenGL ES, including how to check a device's
-supported OpenGL ES version at runtime, see the <a
-href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL ES API guide</a>.</p>
-
-
-<h2 id="android_tv_recording">Android TV Recording</h2>
-
-<p>Android N adds the ability to record and playback content from Android TV input
-services via new recording APIs. Building on top of existing time-shifting
-APIs, TV input services can control what channel data can be recorded, how
-recorded sessions are saved, and manage user interaction with recorded content. </p>
-
-<p>For more information, see <a
-href="{@docRoot}preview/features/tv-recording-api.html">Android TV Recording APIs</a>.</p>
-
-
-<h2 id="android_for_work">Android for Work</h2>
-
-<p>Android for Work adds many new features and APIs for devices running Android N.
-Some highlights are below — for a complete list of changes, see
-<a href="{@docRoot}preview/features/afw.html">Android for Work Updates</a>.</p>
-
-<h3 id="work_profile_security_challenge">Work profile security challenge </h3>
-
-<p>
- Profile owners targeting the N SDK
- can specify a separate security challenge for apps running in
- the work profile. The work challenge is shown when a user attempts to open
- any work apps. Successful completion of the security challenge unlocks the
- work profile and decrypts it if necessary. For profile owners,
- <code>ACTION_SET_NEW_PASSWORD</code> prompts the user to set a work
- challenge, and <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> prompts
- the user to set a device lock.
-</p>
-
-<p>
- Profile owners can set distinct passcode policies for the work challenge
- (such as how long the PIN needs to be, or whether a fingerprint can be used
- to unlock the profile) using the <code>setPasswordQuality()</code>,
- <code>setPasswordMinimumLength()</code> and related methods. The profile
- owner can also set the device lock using the <code>DevicePolicyManager</code>
- instance returned by the new <code>getParentProfileInstance()</code> method.
- Additionally, profile owners can customize the credentials screen for the
- work challenge using the new <code>setOrganizationColor()</code> and
- <code>setOrganizationName()</code> methods.
-</p>
-<h3 id="turn_off_work">Turn off work </h3>
-
-<p>On a device with a work profile, users can toggle work mode. When work mode is
-off the managed user is temporarily shut down, which disables work profile
-apps, background sync, and notifications. This includes the profile owner
-application. When work mode is off, the system displays a persistent status
-icon to remind the user that they can't launch work apps. The launcher
-indicates that work apps and widgets are not accessible. </p>
-
-<h3 id="always_on_vpn">Always on VPN </h3>
-
-<p>Device owners and profile owners can ensure that work apps always connect
-through a specified VPN. The system automatically starts that VPN after the
-device boots.</p>
-
-<p>
- New <code>DevicePolicyManager</code> methods are
- <code>setAlwaysOnVpnPackage()</code> and
- <code>getAlwaysOnVpnPackage()</code>.
-</p>
-
-<p>Because VPN services can be bound directly by the system without app
-interaction, VPN clients need to handle new entry points for Always on VPN. As
-before, services are indicated to the system by an intent filter matching
-action <code>android.net.VpnService</code>. </p>
-
-<p>
- Users can also manually set Always on VPN clients that implement
- <code>VPNService</code> methods using
- <strong>Settings>More>Vpn</strong>. The option to enable Always on VPN
- from Settings is available only if VPN client targets API level 24.
-</p>
-
-<h3 id="custom_provisioning">Customized provisioning</h3>
-
-<p>
- An application can customize the profile owner and device owner provisioning
- flows with corporate colors and logos.
- <code>DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR</code> customizes
- flow color. <code>DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI</code>
- customizes the flow with a corporate logo.
-</p>
-
-<h2 id="accessibility_enhancements">Accessibility Enhancements</h2>
-
-<p>Android N now offers Vision Settings directly on the Welcome screen for new
-device setup. This makes it much easier for users to discover and configure
-accessibility features on their devices, including magnification gesture, font
-size, display size, and TalkBack. </p>
-
-<p>With these accessibility features getting more prominent placement, your users
-are more likely to try your app with them enabled. Make sure you test your apps
-early with these settings enabled. You can enable them from Settings >
-Accessibility.</p>
-
-<p>Also in Android N, accessibility services can now help users with motor
-impairments to touch the screen. The new API allows building services with
-features such as face-tracking, eye-tracking, point scanning, and so on, to
-meet the needs of those users.</p>
-
-<p>For more information, see <code>android.accessibilityservice.GestureDescription</code>
- in the downloadable <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.</p>
-
-
-<h2 id="direct_boot">Direct Boot</h2>
-
-<p>Direct boot improves device startup times and lets registered
-apps have limited functionality even after an unexpected reboot.
-For example, if an encrypted device reboots while the user is sleeping,
-registered alarms, messages and incoming calls can now continue to notify
-the user as normal. This also means accessibility services can also be
- available immediately after a restart.</p>
-
-<p>Direct boot takes advantage of file based encryption in Android N
-to enable fine grained encryption policies for both system and app data.
-The system uses a device-encrypted store for select system data and explicitly
-registered app data. By default a credential-encrypted store is used for all
- other system data, user data, apps, and app data. </p>
-
-<p>At boot, the system starts in a restricted mode with access to
-device-encrypted data only, and without general access to apps or data.
-If you have components that you want to run in this mode, you can register
-them by setting a flag in the manifest. After restart, the system activates
-registered components by broadcasting the <code>LOCKED_BOOT_COMPLETED</code>
-intent. The system ensures registered device-encrypted app data is available
-before unlock. All other data is unavailable until the User confirms their lock
- screen credentials to decrypt it. </p>
-
-For more information, see <a href="{@docRoot}preview/features/direct-boot.html">Direct Boot</a>.</p>
-</p>
-
-<h2 id="key_attestation">Key Attestation</h2>
-
-<p>
- Android N introduces <em>key attestation</em>, a new security tool that helps
- you make sure that the key pairs stored within a device's <a class=
- "external-link" href=
- "https://source.android.com/security/keystore/"><em>hardware-backed
- keystore</em></a> properly protect the sensitive information that your app
- uses. By using this tool, you gain additional confidence that your app
- interacts with keys that reside in secure hardware, even if the device
- running your app is rooted. If you use keys from the hardware-backed keystore
- in your apps, you should use this tool, particularly if you use the keys to
- verify sensitive information within your app.
-</p>
-
-<p>
- Key attestation allows you to verify that an RSA or EC key pair has been
- created and stored in a device’s hardware-backed keystore within the device’s
- trusted execution environment (TEE). The tool also allows you to use an
- off-device service, such as your app's back-end server, to determine and
- strongly verify the uses and validity of the key pair. These features provide
- an additional level of security that protects the key pair, even if someone
- roots the device or compromises the security of the Android platform running
- on the device.
-</p>
-
-<p class="note">
- <strong>Note: </strong>Only a small number of devices running Android N
- support hardware-level key attestation; all other devices running Android N
- use software-level key attestation instead. Before you verify the properties
- of a device's hardware-backed keys in a production-level environment, you
- should make sure that the device supports hardware-level key attestation. To
- do so, you should check that the attestation certificate chain contains a root
- certificate that is signed by the Google attestation root key and that the
- <code>attestationSecurityLevel</code> element within the <a
- href="{@docRoot}preview/features/key-attestation.html#certificate_schema_keydescription">key
- description</a> data structure is set to the TrustedEnvironment security
- level.
-</p>
-
-<p>
- For more information, see the
- <a href="{@docRoot}preview/features/key-attestation.html">Key Attestation</a>
- developer documentation.
-</p>
-
-<h2 id="network_security_config">Network Security Config</h2>
-
-<p>In Android N, apps can customize the behavior of their secure (HTTPS, TLS)
-connections safely, without any code modification, by using the declarative
-<em>Network Security Config</em> instead of using the conventional
-error-prone programmatic APIs (e.g. X509TrustManager).</p>
-
- <p>Supported features:</p>
-<ul>
-<li><b>Custom trust anchors.</b> Lets an application customize which
-Certificate Authorities (CA) are trusted for its secure connections. For
-example, trusting particular self-signed certificates or a restricted set of public CAs.
-</li>
-<li><b>Debug-only overrides.</b> Lets an application developer safely debug
-secure connections of their application without added risk to the installed
-base.
-</li>
-<li><b>Cleartext traffic opt-out.</b> Lets an application protect itself from
-accidental usage of cleartext traffic.</li>
-<li><b>Certificate pinning.</b> An advanced feature that lets an application
- limit which server keys are trusted for secure connections.</li>
-</ul>
-
-<p>For more information, see <a
-href="{@docRoot}preview/features/security-config.html">Network Security
-Config</a>.</p>
-
-<h2 id="default_trusted_ca">Default Trusted Certificate Authority</h2>
-
-<p>By default, apps that target Android N only trust system-provided certificates
-and no longer trust user-added Certificate Authorities (CA). Apps targeting Android
-N that wish to trust user-added CAs should use the
-<a href="{@docRoot}preview/features/security-config.html">Network Security Config</a> to
-specify how user CAs should be trusted.</p>
-
-<h2 id="apk_signature_v2">APK Signature Scheme v2</h2>
-
-<p>
- Android N introduces APK Signature Scheme v2, a new app-signing scheme that
- offers faster app install times and more protection against unauthorized
- alterations to APK files. By default, Android Studio 2.2 and the Android
- Plugin for Gradle 2.2 sign your app using both APK Signature Scheme v2 and
- the traditional signing scheme, which uses JAR signing.
-</p>
-
-<p>
- Although we recommend applying APK Signature Scheme v2 to your app, this new
- scheme is not mandatory. If your app doesn't build properly when using APK
- Signature Scheme v2, you can disable the new scheme. The disabling process
- causes Android Studio 2.2 and the Android Plugin for Gradle 2.2 to sign your
- app using only the traditional signing scheme. To sign with only the
- traditional scheme, open the module-level <code>build.gradle</code> file, then
- add the line <code>v2SigningEnabled false</code> to your release signing
- configuration:
-</p>
-
-<pre>
- android {
- ...
- defaultConfig { ... }
- signingConfigs {
- release {
- storeFile file("myreleasekey.keystore")
- storePassword "password"
- keyAlias "MyReleaseKey"
- keyPassword "password"
- <strong>v2SigningEnabled false</strong>
- }
- }
- }
-</pre>
-
-<p class="caution"><strong>Caution: </strong> If you sign your app using APK
- Signature Scheme v2 and make further changes to the app, the app's signature
- is invalidated. For this reason, use tools such as <code>zipalign</code>
- before signing your app using APK Signature Scheme v2, not after.
-</p>
-
-<p>
- For more information, read the Android Studio documents that describe how to
- <a href="{@docRoot}studio/publish/app-signing.html#release-mode">
- sign an app</a> in Android Studio and how to <a href=
- "{@docRoot}studio/build/build-variants.html#signing"> configure
- the build file for signing apps</a> using the Android Plugin for Gradle.
-</p>
-
-<h2 id="scoped_directory_access">Scoped Directory Access</h2>
-
-<p>In Android N, apps can use new APIs to request access to specific <a
-href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">external
-storage</a> directories, including directories on removable media such as SD
-cards. The new APIs greatly simplify how your application accesses standard
-external storage directories, such as the <code>Pictures</code> directory. Apps
-like photo apps can use these APIs instead of using
-<code>READ_EXTERNAL_STORAGE</code>, which grants access to all storage
-directories, or the Storage Access Framework, which makes the user navigate to
-the directory.</p>
-
-<p>Additionally, the new APIs simplify the steps a user takes to grant external
-storage access to your app. When you use the new APIs, the system uses a simple
-permissions UI that clearly details what directory the application is
-requesting access to.</p>
-
-<p>For more information, see the
-<a href="{@docRoot}preview/features/scoped-folder-access.html">Scoped
-Directory Access</a> developer documentation.</p>
-
-<h2 id="keyboard_shortcuts_helper">Keyboard Shortcuts Helper</h2>
-
-<p>
- In Android N, the user can press <strong>Meta + /</strong> to trigger a
- <em>Keyboard Shortcuts</em> screen that displays all shortcuts available both
- from the system and from the app in focus. The system retrieves these
- shortcuts automatically from the app’s menu if the shortcuts exist. You can
- also provide your own fine-tuned shortcuts lists for the screen. You can do
- this by overriding the new <code>Activity.onProvideKeyboardShortcuts()</code>
- method, described in the downloadable <a href=
- "{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.
-</p>
-
-<p class="note">
- <strong>Note:</strong> The <strong>Meta</strong> key is not present on all
- keyboards: on a Macintosh keyboard, it is the <strong>Command</strong> key,
- on the Windows keyboard, it is the <strong>Windows</strong> key, and on the
- Pixel C and the Chrome OS keyboards, it is the <strong>Search</strong> key.
-</p>
-
-<p>
- To trigger Keyboard Shortcuts Helper from anywhere in your app, call
- {@code Activity.requestKeyboardShortcutsHelper()} for the relevant activity.
-</p>
-
-<h2 id="custom_pointer_api">
- Custom Pointer API
-</h2>
-
-<p>
- Android N introduces the Custom Pointer API, which lets you customize the
- appearance, visibility, and behavior of the pointer. This capability is
- especially useful when a user is using a mouse or touchpad to interact with
- UI objects. The default pointer uses a standard icon. This API also includes
- advanced functionality such as changing the pointer icon's appearance based
- on specific mouse or touchpad movements.
-</p>
-
-<p>
- To set a pointer icon, override the <code>onResolvePointerIcon()</code>
- method of the <code>View</code> class. This method uses a
- <code>PointerIcon</code> object to draw the icon that corresponds to a
- specific motion event.
-</p>
-
-<h2 id="sustained_performance_api">Sustained Performance API</h2>
-
-<p>
-Performance can fluctuate dramatically for long-running apps, because the
-system throttles system-on-chip engines as device components reach their
-temperature limits. This fluctuation presents a moving target for app
-developers creating high-performance, long-running apps.
-</p>
-
-<p>
-To address these limitations, Android N includes support for
-<em>sustained performance mode</em>, enabling OEMs to provide hints about
-device-performance capabilities for long-running apps. App developers
-can use these hints to tune apps for a predictable,
-consistent level of device performance over long periods of time.
-</p>
-
-<p>
-App developers can try out this new API in the N Developer Preview on
-Nexus 6P devices only. To use this feature,
-set the sustained performance window flag for the window
-you want to run in sustained performance mode. Set this flag using the
-{@code Window.setSustainedPerformanceMode()} method. The system automatically
-disables this mode when the window is no longer in focus.
-</p>
-
-<h2 id="vr">VR Support</h2>
-
-<p>
-Android N adds platform support and optimizations for a new VR Mode to let developers
-build high-quality mobile VR experiences for users. There are a number of performance
-enhancements, including access to an exclusive CPU core for VR apps.
-Within your apps, you can take advantage of intelligent head-tracking,
-and stereo notifications that work for VR. Most importantly, Android N provides for
-very low latency graphics. For complete information about building VR apps for Android N,
-see the <a href="https://developers.google.com/vr/android/">Google VR SDK for Android</a>.
-</p>
-
-
-<h2 id="print_svc">Print Service Enhancements</h2>
-
-<p>
- In Android N, print service developers can now surface additional information
- about individual printers and print jobs.
-</p>
-
-<p>
- When listing individual printers, a print service can now set per-printer
- icons in two ways:
-</p>
-
-<ul>
- <li>You can set an icon from a resource ID by calling
- <code>PrinterInfo.Builder.setResourceIconId()</code>
- </li>
-
- <li>You can show an icon from the network by calling
- <code>PrinterInfo.Builder.setHasCustomPrinterIcon()</code>, and setting a
- callback for when the icon is requested using
- <code>android.printservice.PrinterDiscoverySession.onRequestCustomPrinterIcon()</code>
- </li>
-</ul>
-
-<p>
- In addition, you can provide a per-printer activity to display additional
- information by calling <code>PrinterInfo.Builder.setInfoIntent()</code>.
-</p>
-
-<p>
- You can indicate the progress and status of print jobs in the print job
- notification by calling
- <code>android.printservice.PrintJob.setProgress()</code> and
- <code>android.printservice.PrintJob.setStatus()</code>, respectively.
-</p>
-
-<p>
- For more information about these methods, see the downloadable <a href=
- "{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.
-</p>
-
-<h2 id="framemetrics_api">FrameMetricsListener API</h2>
-
-<p>
-The FrameMetricsListener API allows an app to monitor its UI rendering
-performance. The API provides this capability by exposing a streaming Pub/Sub API to transfer frame
-timing info for the app's current window. The data returned is
-equivalent to that which <code><a href="{@docRoot}tools/help/shell.html#shellcommands">adb shell</a>
-dumpsys gfxinfo framestats</code> displays, but is not limited to the past 120 frames.
-</p>
-
-<p>
-You can use FrameMetricsListener to measure interaction-level UI
-performance in production, without a USB connection. This API
-allows collection of data at a much higher granularity than does
-{@code adb shell dumpsys gfxinfo}. This higher granularity is possible because
-the system can collect data for particular interactions in the app; the system
-need not capture a global summary of the entire app’s
-performance, or clear any global state. You can use this
-capability to gather performance data and catch regressions in UI performance
-for real use cases within an app.
-</p>
-
-<p>
-To monitor a window, implement the <code>FrameMetricsListener.onMetricsAvailable()</code>
-callback method and register it on that window. For more information, refer to
-the {@code FrameMetricsListener} class documentation in
-the downloadable <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.
-</p>
-
-<p>
-The API provides a {@code FrameMetrics} object, which contains timing data that
-the rendering subsystem reports for various milestones in a frame lifecycle.
-The supported metrics are: {@code UNKNOWN_DELAY_DURATION},
-{@code INPUT_HANDLING_DURATION}, {@code ANIMATION_DURATION},
-{@code LAYOUT_MEASURE_DURATION}, {@code DRAW_DURATION}, {@code SYNC_DURATION},
-{@code COMMAND_ISSUE_DURATION}, {@code SWAP_BUFFERS_DURATION},
-{@code TOTAL_DURATION}, and {@code FIRST_DRAW_FRAME}.
-</p>
-
-
-<h2 id="virtual_files">Virtual Files</h2>
-
-<p>
- In previous versions of Android, your app could use the Storage Access
- Framework to allow users to select files from their cloud storage accounts,
- such as Google Drive. However, there was no way to represent files that did
- not have a direct bytecode representation; every file was required to provide
- an input stream.
-</p>
-
-<p>
- Android N adds the concept of <em>virtual files</em> to the Storage Access
- Framework. The virtual files feature allows your
- {@link android.provider.DocumentsProvider} to return document URIs that can be
- used with an {@link android.content.Intent#ACTION_VIEW} intent even if they
- don't have a direct bytecode representation. Android N also allows you to
- provide alternate formats for user files, virtual or otherwise.
-</p>
-
-<p>
- To get a URI for a virtual document in your app, first you create an
- {@link android.content.Intent} to open the file picker UI. Since an app
- cannot directly open a virtual file by using the
- {@link android.content.ContentResolver#openInputStream(Uri) openInputStream()}
- method, your app does not receive any virtual files if you include the
- {@link android.content.Intent#CATEGORY_OPENABLE} category.
-</p>
-
-<p>
- After the user has made a selection, the system calls the
- {@link android.app.Activity#onActivityResult onActivityResult()} method.
- Your app can retrieve the URI of the virtual file and get an input stream, as
- demonstrated in the code snippet below.
-</p>
-
-<pre>
- // Other Activity code ...
-
- final static private int REQUEST_CODE = 64;
-
- // We listen to the OnActivityResult event to respond to the user's selection.
- @Override
- public void onActivityResult(int requestCode, int resultCode,
- Intent resultData) {
- try {
- if (requestCode == REQUEST_CODE &&
- resultCode == Activity.RESULT_OK) {
-
- Uri uri = null;
-
- if (resultData != null) {
- uri = resultData.getData();
-
- ContentResolver resolver = getContentResolver();
-
- // Before attempting to coerce a file into a MIME type,
- // check to see what alternative MIME types are available to
- // coerce this file into.
- String[] streamTypes =
- resolver.getStreamTypes(uri, "*/*");
-
- AssetFileDescriptor descriptor =
- resolver.openTypedAssetFileDescriptor(
- uri,
- streamTypes[0],
- null);
-
- // Retrieve a stream to the virtual file.
- InputStream inputStream = descriptor.createInputStream();
- }
- }
- } catch (Exception ex) {
- Log.e("EXCEPTION", "ERROR: ", ex);
- }
- }
-</pre>
-
-<p>
- For more information about accessing user files, see the
- <a href="{@docRoot}guide/topics/providers/document-provider.html">Storage
- Access Frameworks guide</a>.
-</p>
diff --git a/docs/html/preview/behavior-changes.jd b/docs/html/preview/behavior-changes.jd
deleted file mode 100644
index ba08d9b..0000000
--- a/docs/html/preview/behavior-changes.jd
+++ /dev/null
@@ -1,904 +0,0 @@
-page.title=Behavior Changes
-page.keywords=preview,sdk,compatibility
-meta.tags="preview", "compatibility"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-changes_2x.png
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>In this document</h2>
-
-<ol>
- <li><a href="#perf">Performance Improvements</a>
- <ol>
- <li><a href="#doze">Doze</a></li>
- <li><a href="#bg-opt">Background Optimizations</a></li>
- </ol>
- </li>
- <li><a href="#perm">Permissions Changes</a>
- </li>
- <li><a href="#sharing-files">Sharing Files Between Apps</a></li>
- <li><a href="#accessibility">Accessibility Improvements</a>
- <ol>
- <li><a href="#screen-zoom">Screen Zoom</a></li>
- <li><a href="#vision-settings">Vision Settings in Setup Wizard</a></li>
- </ol>
- </li>
- <li><a href="#ndk">NDK Apps Linking to Platform Libraries</a></li>
- <li><a href="#afw">Android for Work</a></li>
- <li><a href="#annotations">Annotations Retention</a></li>
- <li><a href="#other">Other Important Points</a></li>
-</ol>
-
-<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 N for Developers</a></li>
-</ol>
-
-</div>
-</div>
-
-
-<p>
- Along with new features and capabilities, Android N
- includes a variety of system and API behavior changes. This document
- highlights some of the key changes that you should understand and account for
- in your apps.
-</p>
-
-<p>
- If you have previously published an app for Android, be aware that your app
- might be affected by these changes in the platform.
-</p>
-
-
-<h2 id="perf">Battery and Memory</h2>
-
-<p>
-Android N includes system behavior changes aimed at improving the battery life
-of devices and reducing RAM usage. These changes can affect your app’s access to
-system resources, along with the way your app interacts with other apps via
-certain implicit intents.
-</p>
-
-<h3 id="doze">Doze</h3>
-
-<p>
- Introduced in Android 6.0 (API level 23), Doze improves battery life by
- deferring CPU and network activities when a user leaves a device unplugged,
- stationary, and with the screen turned off. Android N brings further
- enhancements to Doze by applying a subset of CPU and network restrictions
- while the device is unplugged with the screen turned off, but not necessarily
- stationary, for example, when a handset is traveling in a user’s pocket.
-</p>
-
-
-<img src="{@docRoot}preview/images/doze-diagram-1.png"
- alt="" height="251px" id="figure1" />
-<p class="img-caption">
- <strong>Figure 1.</strong> Illustration of how Doze applies a first level of
- system activity restrictions to improve battery life.
-</p>
-
-<p>
- When a device is on battery power, and the screen has been off for a certain
- time, the device enters Doze and applies the first subset of restrictions: It
- shuts off app network access, and defers jobs and syncs. If the device is
- stationary for a certain time after entering Doze, the system applies the
- rest of the Doze restrictions to {@link android.os.PowerManager.WakeLock},
- {@link android.app.AlarmManager} alarms, GPS, and Wi-Fi scans. Regardless of
- whether some or all Doze restrictions are being applied, the system wakes the
- device for brief maintenance windows, during which applications are allowed
- network access and can execute any deferred jobs/syncs.
-</p>
-
-
-<img src="{@docRoot}preview/images/doze-diagram-2.png"
- alt="" id="figure2" />
-<p class="img-caption">
- <strong>Figure 2.</strong> Illustration of how Doze applies a second level of
- system activity restrictions after the device is stationary for a certain time.
-</p>
-
-<p>
- Note that activating the screen on or plugging in the device exits Doze and
- removes these processing restrictions. The additional behavior does not
- affect recommendations and best practices in adapting your app to the prior
- version of Doze introduced in Android 6.0 (API level 23), as discussed in
- <a href="{@docRoot}training/monitoring-device-state/doze-standby.html">
- Optimizing for Doze and App Standby</a>. You should still
- follow those recommendations, such as using Google Cloud Messaging (GCM) to
- send and receive messages, and start planning updates to accomodate the
- additional Doze behavior.
-</p>
-
-
-<h3 id="bg-opt">Project Svelte: Background Optimizations</h3>
-
-<p>
- Android N removes three implicit broadcasts in order to help optimize both
- memory use and power consumption. This change is necessary because implicit
- broadcasts frequently start apps that have registered to listen for them in
- the background. Removing these broadcasts can substantially benefit device
- performance and user experience.
-</p>
-
-<p>
- Mobile devices experience frequent connectivity changes, such as when moving
- between Wi-Fi and mobile data. Currently, apps can monitor for changes in
- connectivity by registering a receiver for the implicit {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION} broadcast in their
- manifest. Since many apps register to receive this broadcast, a single
- network switch can cause them all to wake up and process the broadcast at
- once.
-</p>
-
-<p>
- Similarly, in previous versions of Android, apps could register to receive implicit {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} and {@link
- android.hardware.Camera#ACTION_NEW_VIDEO} broadcasts from other apps, such as
- Camera. When a user takes a picture with the Camera app, these apps wake up
- to process the broadcast.
-</p>
-
-<p>
- To alleviate these issues, Android N applies the following
- optimizations:
-</p>
-
-<ul>
- <li>Apps targeting Android N do not receive {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION} broadcasts, even if they
- have manifest entries to request notification of these events. Apps that are
- running can still listen for {@code CONNECTIVITY_CHANGE} on their main thread
- if they request notification with a {@link android.content.BroadcastReceiver}.
- </li>
-
- <li>Apps cannot send or receive {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} or {@link
- android.hardware.Camera#ACTION_NEW_VIDEO} broadcasts. This optimization
- affects all apps, not only those targeting Android N.
- </li>
-</ul>
-
-<p>If your app uses any of these intents, you should remove dependencies
- on them as soon as possible so that you can target Android N devices properly.
- The Android framework provides several solutions to mitigate the need for
- these implicit broadcasts. For example, the {@link
- android.app.job.JobScheduler} API provides a robust mechanism to schedule
- network operations when specified conditions, such as connection to an
- unmetered network, are met. You can even use {@link
- android.app.job.JobScheduler} to react to changes to content providers.
-</p>
-
-<p>
- For more information about background optimizations in N and how to adapt your app,
- see <a href=
- "{@docRoot}preview/features/background-optimization.html">Background
- Optimizations</a>.
-</p>
-
-<h2 id="perm">Permissions Changes</h2>
-
-<p>
- Android N includes changes to permissions that may affect your app.
-</p>
-
-<h3 id="permfilesys">File system permission changes</h3>
-
-<p>
- In order to improve the security of private files, the private directory of
- apps targeting Android N or higher has restricted access (<code>0700</code>).
- This setting prevents leakage of metadata of private files, such as their size
- or existence. This permission change has multiple side effects:
-</p>
-
-<ul>
- <li>
- Private files’ file permissions should no longer be relaxed by the owner,
- and an attempt to do so using
- {@link android.content.Context#MODE_WORLD_READABLE} and/or
- {@link android.content.Context#MODE_WORLD_WRITEABLE}, will trigger a
- {@link java.lang.SecurityException}.
- <p class="note">
- <strong>Note:</strong> As of yet, this restriction is not fully enforced.
- Apps may still modify permissions to their private directory using
- native APIs or the {@link java.io.File File} API. However, we strongly
- discourage relaxing the permissions to the private directory.
- </p>
- </li>
- <li>
- Passing <code>file://</code> URIs outside the package domain may leave the
- receiver with an unaccessible path. Therefore, attempts to pass a
- <code>file://</code> URI trigger a
- <code>FileUriExposedException</code>. The recommended way to share the
- content of a private file is using the {@link
- android.support.v4.content.FileProvider}.
- </li>
- <li>
- The {@link android.app.DownloadManager} can no longer share privately
- stored files by filename. Legacy applications may end up with an
- unaccessible path when accessing {@link
- android.app.DownloadManager#COLUMN_LOCAL_FILENAME}. Apps targeting
- Android N or higher trigger a {@link java.lang.SecurityException} when
- attempting to access
- {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}.
- Legacy applications that set the download location to a public location by
- using
- {@link
- android.app.DownloadManager.Request#setDestinationInExternalFilesDir
- DownloadManager.Request.setDestinationInExternalFilesDir()} or
- {@link
- android.app.DownloadManager.Request#setDestinationInExternalPublicDir
- DownloadManager.Request.setDestinationInExternalPublicDir()}
- can still access the path in
- {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}, however, this
- method is strongly discouraged. The preferred way of accessing a file
- exposed by the {@link android.app.DownloadManager} is using
- {@link android.content.ContentResolver#openFileDescriptor
- ContentResolver.openFileDescriptor()}.
- </li>
-</ul>
-
-<h2 id="sharing-files">Sharing Files Between Apps</h2>
-
-<p>
-For apps targeting Android N, the Android framework enforces
-the {@link android.os.StrictMode} API policy that prohibits exposing {@code file://} URIs
-outside your app. If an intent containing a file URI leaves your app, the app fails
-with a {@code FileUriExposedException} exception.
-</p>
-
-<p>
-To share files between applications, you should send a {@code content://} URI
-and grant a temporary access permission on the URI. The easiest way to grant this permission is by
-using the {@link android.support.v4.content.FileProvider} class. For more information
-on permissions and sharing files,
-see <a href="{@docRoot}training/secure-file-sharing/index.html">Sharing Files</a>.
-</p>
-
-<h2 id="accessibility">Accessibility Improvements</h2>
-
-<p>
- Android N includes changes intended to improve the usability of the
- platform for users with low or impaired vision. These changes should
- generally not require code changes in your app, however you should review
- these feature and test them with your app to assess potential impacts to user
- experience.
-</p>
-
-
-<h3 id="screen-zoom">Screen Zoom</h3>
-
-<p>
- Android N enables users to set <strong>Display size</strong>which magnifies
- or shrinks all elements on the screen, thereby improving device accessibility
- for users with low vision. Users cannot zoom the screen past a minimum screen
- width of <a href=
- "http://developer.android.com/guide/topics/resources/providing-resources.html">
- sw320dp</a>, which is the width of a Nexus 4, a common medium-sized phone.
-</p>
-
-<div class="cols">
-
-<div class="col-6">
- <img src="{@docRoot}preview/images/screen-zoom-1.png" alt="" height="XXX" id="figure1" />
-</div>
-<div class="col-6">
- <img src="{@docRoot}preview/images/screen-zoom-2.png" alt="" height="XXX" id="figure1" />
-</div>
-
-</div> <!-- end cols -->
-<p class="img-caption">
- <strong>Figure 3.</strong> The screen on the right shows the effect of
- increasing the Display size of a device running an Android N system image.
-</p>
-
-
-<p>
- When the device density changes, the system notifies running apps in the
- following ways:
-</p>
-
-<ul>
- <li>If an app targets API level 23 or lower, the system automatically kills
- all its background processes. This means that if a user switches away from
- such an app to open the <em>Settings</em> screen and changes the
- <strong>Display size</strong> setting, the system kills the app in the same
- manner that it would in a low-memory situation. If the app has any foreground
- processes, the system notifies those processes of the configuration change as
- described in <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Handling
- Runtime Changes</a>, just as if the device's orientation had changed.
- </li>
-
- <li>If an app targets Android N, all of its processes
- (foreground and background) are notified of the configuration change as
- described in <a href=
- "{@docRoot}guide/topics/resources/runtime-changes.html">Handling
- Runtime Changes</a>.
- </li>
-</ul>
-
-<p>
- Most apps do not need to make any changes to support this feature, provided
- the apps follow Android best practices. Specific things to check for:
-</p>
-
-<ul>
- <li>Test your app on a device with screen width <code><a href=
- "{@docRoot}guide/topics/resources/providing-resources.html">sw320dp</a></code>
- and be sure it performs adequately.
- </li>
-
- <li>When the device configuration changes, update any density-dependent
- cached information, such as cached bitmaps or resources loaded from the
- network. Check for configuration changes when the app resumes from the paused
- state.
- <p class="note">
- <strong>Note:</strong> If you cache configuration-dependent data, it's a
- good idea to include relevant metadata such as the appropriate screen
- size or pixel density for that data. Saving this metadata allows you to
- decide whether you need to refresh the cached data after a configuration
- change.
- </p>
- </li>
-
- <li>Avoid specifying dimensions with px units, since they do not scale with
- screen density. Instead, specify dimensions with <a href=
- "{@docRoot}guide/practices/screens_support.html">density-independent
- pixel</a> (<code>dp</code>) units.
- </li>
-</ul>
-
-<h3 id="vision-settings">Vision Settings in Setup Wizard</h3>
-
-<p>
- Android N includes Vision Settings on the Welcome screen, where users can
- set up the following accessibility settings on a new device:
- <strong>Magnification gesture</strong>, <strong>Font size</strong>,
- <strong>Display size</strong> and <strong>TalkBack</strong>. This change
- increases the visibility of bugs related to different screen settings. To
- assess the impact of this feature, you should test your apps with these
- settings enabled. You can find the settings under <strong>Settings >
- Accessibility</strong>.
-</p>
-
-<h2 id="ndk">NDK Apps Linking to Platform Libraries</h2>
-
-<p>
- Starting in Android N, the system prevents apps from dynamically linking
- against non-NDK libraries, which may cause your app to crash. This change in
- behavior aims to create a consistent app experience across platform updates
- and different devices. Even though your code might not be linking against
- private libraries, it's possible that a third-party static library in your
- app could be doing so. Therefore, all developers should check to make sure
- that their apps do not crash on devices running Android N. If your app uses
- native code, you should only be using <a href=
- "{@docRoot}ndk/guides/stable_apis.html">public NDK APIs</a>.
-</p>
-
-<p>
- There are three ways your app might be trying to access private platform
- APIs:
-</p>
-
-<ul>
- <li>Your app directly accesses private platform libraries. You should update
- your app to include its own copy of those libraries or use the <a href=
- "{@docRoot}ndk/guides/stable_apis.html">public NDK APIs</a>.
- </li>
-
- <li>Your app uses a third-party library that accesses private platform
- libraries. Even if you are certain your app doesn't access private libraries
- directly, you should still test your app for this scenario.
- </li>
-
- <li>Your app references a library that is not included in its APK. For
- example, this could happen if you tried to use your own copy of OpenSSL but
- forgot to bundle it with your app's APK. The app may run normally on versions
- of Android platform that includes <code>libcrypto.so</code>. However, the app
- could crash on later versions of Android that do not include this library
- (such as, Android 6.0 and later). To fix this, ensure that you bundle all
- your non-NDK libraries with your APK.
- </li>
-</ul>
-
-<p>
- Apps should not use native libraries that are not included in the NDK because
- they may change or be removed between different versions of Android. The
- switch from OpenSSL to BoringSSL is an example of such a change. Also,
- because there are no compatibility requirements for platform libraries not
- included in the NDK, different devices may offer different levels of
- compatibility.
-</p>
-
-<p>
- In order to reduce the impact that this restriction may have on currently
- released apps, a set of libraries that see significant use—such as
- <code>libandroid_runtime.so</code>, <code>libcutils.so</code>,
- <code>libcrypto.so</code>, and <code>libssl.so</code>—are temporarily
- accessible on N for apps targeting API level 23 or lower. If your app loads
- one of these libraries, logcat generates a warning and a toast appears on the
- target device to notify you. If you see these warnings, you should update
- your app to either include its own copy of those libraries or only use the
- public NDK APIs. Future releases of the Android platform may restrict the use
- of private libraries altogether and cause your app to crash.
-</p>
-
-<p>
- All apps generate a runtime error when they call an API that is neither
- public nor temporarily accessible. The result is that
- <code>System.loadLibrary</code> and <code>dlopen(3)</code> both return
- <code>NULL</code>, and may cause your app to crash. You should review your
- app code to remove use of private platform APIs and thoroughly test your apps
- using a preview device or emulator. If you are unsure whether your app uses
- private libraries, you can <a href="#ndk-errors">check logcat</a> to identify
- the runtime error.
-</p>
-
-<p>
- The following table describes the behavior you should expect to see from an
- app depending on its use of private native libraries and its target API
- level (<code>android:targetSdkVersion</code>).
-</p>
-
-<table id="ndk-table">
- <col width="15%">
- <col width="15%">
- <col width="15%">
- <col width="20%">
- <col width="20%">
- <col width="20%">
- <tr>
- <th scope="col">
- Libraries
- </th>
- <th scope="col">
- Target API level
- </th>
- <th scope="col">
- Runtime access via dynamic linker
- </th>
- <th scope="col">
- N Developer Preview behavior
- </th>
- <th scope="col">
- Final N Release behavior
- </th>
- <th scope="col">
- Future Android platform behavior
- </th>
- </tr>
-
-<tr>
- <td>
- NDK Public
- </td>
-
- <td>
- Any
- </td>
-
- <td style="background-color:#DCEDC8">
- Accessible
- </td>
-
- <td style="background-color:#DCEDC8">
- Works as expected
- </td>
-
- <td style="background-color:#DCEDC8">
- Works as expected
- </td>
-
- <td style="background-color:#DCEDC8">
- Works as expected
- </td>
-</tr>
-
-<tr>
- <td>
- Private (temporarily accessible private libraries)
- </td>
-
- <td>
- 23 or lower
- </td>
-
- <td style="background-color:#FFF9C4">
- Temporarily accessible
- </td>
-
- <td style="background-color:#FFF9C4">
- Works as expected, but you receive a logcat warning and a message on the
- target device.
- </td>
-
- <td style="background-color:#FFF9C4">
- Works as expected, but you receive a logcat warning.
- </td>
-
- <td style="background-color:#ffcdd2">
- Runtime error
- </td>
-</tr>
-
-<tr>
- <td>
- Private (temporarily accessible private libraries)
- </td>
-
- <td>
- 24 or higher
- </td>
-
- <td style="background-color:#ffcdd2">
- Restricted
- </td>
-
- <td style="background-color:#ffcdd2">
- Runtime error
- </td>
-
- <td style="background-color:#ffcdd2">
- Runtime error
- </td>
-
- <td style="background-color:#ffcdd2">
- Runtime error
- </td>
-</tr>
-
-<tr>
- <td>
- Private (other)
- </td>
-
- <td>
- Any
- </td>
-
- <td style="background-color:#ffcdd2">
- Restricted
- </td>
-
- <td style="background-color:#ffcdd2">
- Runtime error
- </td>
-
- <td style="background-color:#ffcdd2">
- Runtime error
- </td>
-
- <td style="background-color:#ffcdd2">
- Runtime error
- </td>
-</tr>
-</table>
-
-<h3 id="ndk-errors">
- Check if your app uses private libraries
-</h3>
-
-<p>
- To help you identify issues loading private libraries, logcat may generate a
- warning or runtime error. For example, if your app targets API level 23 or
- lower, and tries to access a private library on a device running Android N,
- you may see a warning similar to the following:
-</p>
-
-<pre class="no-pretty-print">
-03-21 17:07:51.502 31234 31234 W linker : library "libandroid_runtime.so"
-("/system/lib/libandroid_runtime.so") needed or dlopened by
-"/data/app/com.popular-app.android-2/lib/arm/libapplib.so" is not accessible
-for the namespace "classloader-namespace" - the access is temporarily granted
-as a workaround for http://b/26394120
-</pre>
-
-<p>
- These logcat warnings tell you which which library is trying to access a
- private platform API, but will not cause your app to crash. If the app
- targets API level 24 or higher, however, logcat generates the following
- runtime error and your app may crash:
-</p>
-
-<pre class="no-pretty-print">
-java.lang.UnsatisfiedLinkError: dlopen failed: library "libcutils.so"
-("/system/lib/libcutils.so") needed or dlopened by
-"/system/lib/libnativeloader.so" is not accessible for the namespace
-"classloader-namespace"
- at java.lang.Runtime.loadLibrary0(Runtime.java:977)
- at java.lang.System.loadLibrary(System.java:1602)
-</pre>
-
-<p>
- You may also see these logcat outputs if your app uses third-party libraries
- that dynamically link to private platform APIs. The readelf tool in the
- Android NDK allows you to generate a list of all dynamically linked shared
- libraries of a given <code>.so</code> file by running the following command:
-</p>
-
-<pre class="no-pretty-print">
-aarch64-linux-android-readelf -dW libMyLibrary.so
-</pre>
-
-<h3 id="ndk-update">
- Update your app
-</h3>
-
-<p>
- Here are some steps you can take to fix these types of errors and make
- sure your app doesn't crash on future platform updates:
-</p>
-
-<ul>
- <li>
- If your app uses private platform libraries, you should update it to include
- its own copy of those libraries or use the <a href=
- "{@docRoot}ndk/guides/stable_apis.html">public NDK APIs</a>.
- </li>
-
- <li>
- If your app uses a third-party library that accesses private symbols, contact
- the library author to update the library.
- </li>
-
- <li>
- Make sure you package all your non-NDK libraries with your APK.
- </li>
-
- <li>Use standard JNI functions instead of <code>getJavaVM</code> and
- <code>getJNIEnv</code> from <code>libandroid_runtime.so</code>:
-
-<pre class="no-pretty-print">
-AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h>
-AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or
-JavaVM::AttachCurrentThread from <jni.h>.
-</pre>
- </li>
-
- <li>Use {@code __system_property_get} instead of the private {@code property_get}
- symbol from {@code libcutils.so}. To do this, use {@code __system_property_get}
- with the following include:
-
-<pre>
-#include <sys/system_properties.h>
-</pre>
- <p class="note">
- <strong>Note:</strong> The availability and contents of system properties is
- not tested through CTS. A better fix would be to avoid using these
- properties altogether.
- </p>
- </li>
-
- <li>Use a local version of the {@code SSL_ctrl} symbol from {@code
- libcrypto.so}. For example, you should statically link {@code libcyrpto.a} in
- your {@code .so} file, or include a dynamically linked version of {@code
- libcrypto.so} from BoringSSL/OpenSSL and package it in your APK.
- </li>
-</ul>
-
-<h2 id="afw">Android for Work</h2>
-<p>
- Android N contains changes for apps that target Android for Work, including
- changes to certificate installation, password resetting, secondary user
- management, and access to device identifiers. If you are building apps for
- Android for Work environments, you should review these changes and modify
- your app accordingly.
-</p>
-
-<ul>
- <li>You must install a delegated certificate installer before the DPC can set
- it. For both profile and device-owner apps targeting the N SDK, you should
- install the delegated certificate installer before the device policy
- controller (DPC) calls
- <code>DevicePolicyManager.setCertInstallerPackage()</code>. If the installer
- is not already installed, the system throws an
- <code>IllegalArgumentException</code>.
- </li>
-
- <li>Reset password restrictions for device admins now apply to profile
- owners. Device admins can no longer use
- {@code DevicePolicyManager.resetPassword()} to clear passwords or change
- ones that are already set. Device admins can still set a password, but only
- when the device has no password, PIN, or pattern.
- </li>
-
- <li>Device and profile owners can manage accounts even if restrictions are
- set. Device owners and profile owners can call the Account Management APIs
- even if <code>DISALLOW_MODIFY_ACCOUNTS</code> user restrictions are in place.
- </li>
-
- <li>Device owners can manage secondary users more easily. When a device is
- running in device owner mode, the <code>DISALLOW_ADD_USER</code> restriction
- is automatically set. This prevents users from creating unmanaged secondary
- users. In addition, the <code>CreateUser()</code> and
- <code>createAndInitializeUser()</code> methods are deprecated; the new
- <code>DevicePolicyManager.createAndManageUser()</code> method replaces them.
- </li>
-
- <li>Device owners can access device identifiers. A Device owner can access the
- Wi-Fi MAC address of a device, using
- <code>DevicePolicyManagewr.getWifiMacAddress()</code>. If Wi-Fi has never
- been enabled on the device, this method returns a value of {@code null}.
- </li>
-
- <li>The Work Mode setting controls access to work apps. When work mode is off the
- system launcher indicates work apps are unavailable by greying them out. Enabling
- work mode again restores normal behavior.</li>
-
- <li>When installing a PKCS #12 file containing a client certificate chain and
- the corresponding private key from Settings UI, the CA certificate in the
- chain is no longer installed to the trusted credentials storage. This does
- not affect the result of {@link android.security.KeyChain#getCertificateChain
- KeyChain.getCertificateChain()} when apps attempt to retrieve the client
- certificate chain later. If required, the CA certificate should be installed
- to the trusted credentials storage via Settings UI separately, with a
- DER-encoded format under a .crt or .cer file extension.
- </li>
-
- <li>Starting in Android N, fingerprint enrollment and storage are managed per user.
- If a profile owner’s Device Policy Client (DPC) targets pre-N on an N device,
- the user is still able to set fingerprint on the device, but work
- applications cannot access device fingerprint. When the DPC targets N and
- above, the user can set fingerprint specifically for work profile by going to
- <strong>Settings > Security > Work profile security</strong>.
- </li>
-
- <li>A new encryption status <code>ENCRYPTION_STATUS_ACTIVE_PER_USER</code> is
- returned by <code>DevicePolicyManager.getStorageEncryptionStatus()</code>, to
- indicate that encryption is active and the encryption key is tied to the
- user. The new status is only returned if DPC targets API Level 24 and above.
- For apps targeting earlier API levels, <code>ENCRYPTION_STATUS_ACTIVE</code>
- is returned, even if the encryption key is specific to the user or profile.
- </li>
-
- <li>In Android N, several methods that would ordinarily affect the entire
- device behave differently if the device has a work profile installed with a
- separate work challenge. Rather than affecting the entire device, these
- methods apply only to the work profile. (The complete list of such methods is
- in the {@link android.app.admin.DevicePolicyManager#getParentProfileInstance
- DevicePolicyManager.getParentProfileInstance()} documentation.) For example,
- {@link android.app.admin.DevicePolicyManager#lockNow
- DevicePolicyManager.lockNow()} locks just the work profile, instead of
- locking the entire device. For each of these methods, you can get the old
- behavior by calling the method on the parent instance of the
- {@link android.app.admin.DevicePolicyManager}; you can get this parent by
- calling {@link android.app.admin.DevicePolicyManager#getParentProfileInstance
- DevicePolicyManager.getParentProfileInstance()}. So for example, if you call
- the parent instance's {@link android.app.admin.DevicePolicyManager#lockNow}
- method, the entire device is locked.
- </li>
-
-</ul>
-
-<p>
- For more information about changes to Android for Work in Android N, see
- <a href="{@docRoot}preview/features/afw.html">Android for Work Updates</a>.
-</p>
-
-<h2 id="annotations">Annotations Retention</h2>
-
-<p>
-Android N fixes a bug where the visibility of annotations was being ignored.
-This issue enabled the runtime to access annotations that it should not have been
-able to. These annotations included:
-</p>
-
-<ul>
- <li>{@code VISIBILITY_BUILD}: Intended to be visible only at build time.</li>
- <li>{@code VISIBILITY_SYSTEM}: Intended to be visible at runtime, but only to the
- underlying system.</li>
-</ul>
-
-<p>
-If your app has relied on this behavior, please add a retention policy to annotations that must
-be available at runtime. You do so by using {@code @Retention(RetentionPolicy.RUNTIME)}.
-</p>
-
-<h2 id="other">Other Important Points</h2>
-
-<ul>
-<li>When an app is running on Android N, but targets a lower API level,
-and the user changes display size, the app process is killed. The app
-must be able to gracefully handle this scenario. Otherwise, it crashes
-when the user restores it from Recents.
-
-<p>
-You should test your app to ensure
-that this behavior does not occur.
-You can do so by causing an identical crash
-when killing the app manually via DDMS.
-</p>
-
-<p>
-Apps targeting N and above are not automatically killed on density changes;
-however, they may still respond poorly to configuration changes.
-</p>
-</li>
-
-<li>
-Apps on Android N should be able to gracefully handle configuration changes,
-and should not crash on subsequent starts. You can verify app behavior
-by changing font size (<strong>Setting</strong> >
-<strong>Display</strong> > <strong>Font size</strong>), and then restoring
-the app from Recents.
-</li>
-
-<li>
-Due to a bug in previous versions of Android, the system did not flag writing
-to a TCP socket on the main thread as a strict-mode violation. Android N fixes this bug.
-Apps that exhibit this behavior now throw an {@code android.os.NetworkOnMainThreadException}.
-Generally, performing network operations on the main thread is a bad idea because these operations
-usually have a high tail latency that causes ANRs and jank.
-</li>
-
-<li>
-The {@code Debug.startMethodTracing()} family of methods now defaults to
-storing output in your package-specific directory on shared storage,
-instead of at the top level
-of the SD card. This means apps no longer need to request the {@code WRITE_EXTERNAL_STORAGE} permission to use these APIs.
-</li>
-
-<li>
-Many platform APIs have now started checking for large payloads being sent
-across {@link android.os.Binder} transactions, and the
-system now rethrows {@code TransactionTooLargeExceptions}
-as {@code RuntimeExceptions}, instead of silently logging or suppressing them. One
-common example is storing too much data in
-{@link android.app.Activity#onSaveInstanceState Activity.onSaveInstanceState()},
-which causes {@code ActivityThread.StopInfo} to throw a
-{@code RuntimeException} when your app targets Android N.
-</li>
-
-<li>
-If an app posts {@link java.lang.Runnable} tasks to a {@link android.view.View}, and
-the {@link android.view.View}
-is not attached to a window, the system
-queues the {@link java.lang.Runnable} task with the {@link android.view.View};
-the {@link java.lang.Runnable} task does not execute until the
-{@link android.view.View} is attached
-to a window. This behavior fixes the following bugs:
-<ul>
- <li>If an app posted to a {@link android.view.View} from a thread other than the intended
- window’s UI thread, the {@link java.lang.Runnable} may run on the wrong thread as a result.
- </li>
- <li>If the {@link java.lang.Runnable} task was posted from a thread other than
- a looper thread, the app could expose the {@link java.lang.Runnable} task.</li>
-</ul>
-</li>
-
-<li>
-If an app on Android N with
-{@link android.Manifest.permission#DELETE_PACKAGES DELETE_PACKAGES}
-permission tries to delete a package, but a different app had installed that package,
-the system requires user confirmation. In this scenario, apps should expect
-{@link android.content.pm.PackageInstaller#STATUS_PENDING_USER_ACTION STATUS_PENDING_USER_ACTION}
-as the return status when they invoke
-{@link android.content.pm.PackageInstaller#uninstall PackageInstaller.uninstall()}.
-</li>
-
- <li>The JCA provider called <em>Crypto</em> is deprecated, because its only
- algorithm, SHA1PRNG, is cryptographically weak. Apps can no longer use
- SHA1PRNG to (insecurely) derive keys, because this provider is no longer
- available. For more information, see the blog
- post <a href=
- "http://android-developers.blogspot.com/2016/06/security-crypto-provider-deprecated-in.html"
- class="external-link">Security "Crypto" provider deprecated in Android
- N</a>.
- </li>
-
-</ul>
-
diff --git a/docs/html/preview/download-ota.jd b/docs/html/preview/download-ota.jd
deleted file mode 100644
index 65f7f9f..0000000
--- a/docs/html/preview/download-ota.jd
+++ /dev/null
@@ -1,332 +0,0 @@
-page.title=Applying a Device OTA Image
-
-@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">Before downloading and installing components of
- the Android Preview SDK, you must agree to the following terms and
- conditions.</p>
-
- <h2 class="norule">Terms and Conditions</h2>
-
- <div class="sdk-terms" onfocus="this.blur()" style="width:678px">
-This is the Android SDK Preview License Agreement (the “License Agreement”).
-
-1. Introduction
-
-1.1 The Android SDK Preview (referred to in the License Agreement as the “Preview” and specifically including the Android system files, packaged APIs, and Preview library files, if and when they are made available) is licensed to you subject to the terms of the License Agreement. The License Agreement forms a legally binding contract between you and Google in relation to your use of the Preview.
-
-1.2 "Android" means the Android software stack for devices, as made available under the Android Open Source Project, which is located at the following URL: http://source.android.com/, as updated from time to time.
-
-1.3 “Android-compatible” means any Android implemation that (i) complies with the Android Compatibility Definition document, which can be found at the Android compatibility website (http://source.android.com/compatibility) and which may be updated from time to time; and (ii) successfully passes the Android Compatibility Test Suite (CTS).
-
-1.4 "Google" means Google Inc., a Delaware corporation with principal place of business at 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States.
-
-2. Accepting the License Agreement
-
-2.1 In order to use the Preview, you must first agree to the License Agreement. You may not use the Preview if you do not accept the License Agreement.
-
-2.2 By clicking to accept and/or using the Preview, you hereby agree to the terms of the License Agreement.
-
-2.3 You may not use the Preview and may not accept the License Agreement if you are a person barred from receiving the Preview under the laws of the United States or other countries including the country in which you are resident or from which you use the Preview.
-
-2.4 If you will use the Preview internally within your company or organization you agree to be bound by the License Agreement on behalf of your employer or other entity, and you represent and warrant that you have full legal authority to bind your employer or such entity to the License Agreement. If you do not have the requisite authority, you may not accept the License Agreement or use the Preview on behalf of your employer or other entity.
-
-3. Preview License from Google
-
-3.1 Subject to the terms of this License Agreement, Google grants you a limited, worldwide, royalty-free, non-assignable, non-exclusive, and non-sublicensable license to use the Preview solely to develop applications for compatible implementations of Android.
-
-3.2 You may not use this Preview to develop applications for other platforms (including non-compatible implementations of Android) or to develop another SDK. You are of course free to develop applications for other platforms, including non-compatible implementations of Android, provided that this Preview is not used for that purpose.
-
-3.3 You agree that Google or third parties owns all legal right, title and interest in and to the Preview, including any Intellectual Property Rights that subsist in the Preview. "Intellectual Property Rights" means any and all rights under patent law, copyright law, trade secret law, trademark law, and any and all other proprietary rights. Google reserves all rights not expressly granted to you.
-
-3.4 You may not use the Preview for any purpose not expressly permitted by the License Agreement. Except to the extent required by applicable third party licenses, you may not: (a) copy (except for backup purposes), modify, adapt, redistribute, decompile, reverse engineer, disassemble, or create derivative works of the Preview or any part of the Preview; or (b) load any part of the Preview onto a mobile handset or any other hardware device except a personal computer, combine any part of the Preview with other software, or distribute any software or device incorporating a part of the Preview.
-
-3.5 Use, reproduction and distribution of components of the Preview licensed under an open source software license are governed solely by the terms of that open source software license and not the License Agreement. You agree to remain a licensee in good standing in regard to such open source software licenses under all the rights granted and to refrain from any actions that may terminate, suspend, or breach such rights.
-
-3.6 You agree that the form and nature of the Preview that Google provides may change without prior notice to you and that future versions of the Preview may be incompatible with applications developed on previous versions of the Preview. You agree that Google may stop (permanently or temporarily) providing the Preview (or any features within the Preview) to you or to users generally at Google's sole discretion, without prior notice to you.
-
-3.7 Nothing in the License Agreement gives you a right to use any of Google's trade names, trademarks, service marks, logos, domain names, or other distinctive brand features.
-
-3.8 You agree that you will not remove, obscure, or alter any proprietary rights notices (including copyright and trademark notices) that may be affixed to or contained within the Preview.
-
-4. Use of the Preview by You
-
-4.1 Google agrees that nothing in the License Agreement gives Google any right, title or interest from you (or your licensors) under the License Agreement in or to any software applications that you develop using the Preview, including any intellectual property rights that subsist in those applications.
-
-4.2 You agree to use the Preview and write applications only for purposes that are permitted by (a) the License Agreement, and (b) any applicable law, regulation or generally accepted practices or guidelines in the relevant jurisdictions (including any laws regarding the export of data or software to and from the United States or other relevant countries).
-
-4.3 You agree that if you use the Preview to develop applications, you will protect the privacy and legal rights of users. If users provide you with user names, passwords, or other login information or personal information, you must make the users aware that the information will be available to your application, and you must provide legally adequate privacy notice and protection for those users. If your application stores personal or sensitive information provided by users, it must do so securely. If users provide you with Google Account information, your application may only use that information to access the user's Google Account when, and for the limited purposes for which, each user has given you permission to do so.
-
-4.4 You agree that you will not engage in any activity with the Preview, including the development or distribution of an application, that interferes with, disrupts, damages, or accesses in an unauthorized manner the servers, networks, or other properties or services of Google or any third party.
-
-4.5 You agree that you are solely responsible for (and that Google has no responsibility to you or to any third party for) any data, content, or resources that you create, transmit or display through Android and/or applications for Android, and for the consequences of your actions (including any loss or damage which Google may suffer) by doing so.
-
-4.6 You agree that you are solely responsible for (and that Google has no responsibility to you or to any third party for) any breach of your obligations under the License Agreement, any applicable third party contract or Terms of Service, or any applicable law or regulation, and for the consequences (including any loss or damage which Google or any third party may suffer) of any such breach.
-
-4.7 The Preview is in development, and your testing and feedback are an important part of the development process. By using the Preview, you acknowledge that implementation of some features are still under development and that you should not rely on the Preview having the full functionality of a stable release. You agree not to publicly distribute or ship any application using this Preview as this Preview will no longer be supported after the official Android SDK is released.
-
-5. Your Developer Credentials
-
-5.1 You agree that you are responsible for maintaining the confidentiality of any developer credentials that may be issued to you by Google or which you may choose yourself and that you will be solely responsible for all applications that are developed under your developer credentials.
-
-6. Privacy and Information
-
-6.1 In order to continually innovate and improve the Preview, Google may collect certain usage statistics from the software including but not limited to a unique identifier, associated IP address, version number of the software, and information on which tools and/or services in the Preview are being used and how they are being used. Before any of this information is collected, the Preview will notify you and seek your consent. If you withhold consent, the information will not be collected.
-
-6.2 The data collected is examined in the aggregate to improve the Preview and is maintained in accordance with Google's Privacy Policy located at http://www.google.com/policies/privacy/.
-
-7. Third Party Applications
-
-7.1 If you use the Preview to run applications developed by a third party or that access data, content or resources provided by a third party, you agree that Google is not responsible for those applications, data, content, or resources. You understand that all data, content or resources which you may access through such third party applications are the sole responsibility of the person from which they originated and that Google is not liable for any loss or damage that you may experience as a result of the use or access of any of those third party applications, data, content, or resources.
-
-7.2 You should be aware the data, content, and resources presented to you through such a third party application may be protected by intellectual property rights which are owned by the providers (or by other persons or companies on their behalf). You may not modify, rent, lease, loan, sell, distribute or create derivative works based on these data, content, or resources (either in whole or in part) unless you have been specifically given permission to do so by the relevant owners.
-
-7.3 You acknowledge that your use of such third party applications, data, content, or resources may be subject to separate terms between you and the relevant third party.
-
-8. Using Google APIs
-
-8.1 Google APIs
-
-8.1.1 If you use any API to retrieve data from Google, you acknowledge that the data may be protected by intellectual property rights which are owned by Google or those parties that provide the data (or by other persons or companies on their behalf). Your use of any such API may be subject to additional Terms of Service. You may not modify, rent, lease, loan, sell, distribute or create derivative works based on this data (either in whole or in part) unless allowed by the relevant Terms of Service.
-
-8.1.2 If you use any API to retrieve a user's data from Google, you acknowledge and agree that you shall retrieve data only with the user's explicit consent and only when, and for the limited purposes for which, the user has given you permission to do so.
-
-9. Terminating the License Agreement
-
-9.1 the License Agreement will continue to apply until terminated by either you or Google as set out below.
-
-9.2 If you want to terminate the License Agreement, you may do so by ceasing your use of the Preview and any relevant developer credentials.
-
-9.3 Google may at any time, terminate the License Agreement, with or without cause, upon notice to you.
-
-9.4 The License Agreement will automatically terminate without notice or other action upon the earlier of:
-(A) when Google ceases to provide the Preview or certain parts of the Preview to users in the country in which you are resident or from which you use the service; and
-(B) Google issues a final release version of the Android SDK.
-
-9.5 When the License Agreement is terminated, the license granted to you in the License Agreement will terminate, you will immediately cease all use of the Preview, and the provisions of paragraphs 10, 11, 12 and 14 shall survive indefinitely.
-
-10. DISCLAIMERS
-
-10.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT YOUR USE OF THE PREVIEW IS AT YOUR SOLE RISK AND THAT THE PREVIEW IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT WARRANTY OF ANY KIND FROM GOOGLE.
-
-10.2 YOUR USE OF THE PREVIEW AND ANY MATERIAL DOWNLOADED OR OTHERWISE OBTAINED THROUGH THE USE OF THE PREVIEW IS AT YOUR OWN DISCRETION AND RISK AND YOU ARE SOLELY RESPONSIBLE FOR ANY DAMAGE TO YOUR COMPUTER SYSTEM OR OTHER DEVICE OR LOSS OF DATA THAT RESULTS FROM SUCH USE. WITHOUT LIMITING THE FOREGOING, YOU UNDERSTAND THAT THE PREVIEW IS NOT A STABLE RELEASE AND MAY CONTAIN ERRORS, DEFECTS AND SECURITY VULNERABILITIES THAT CAN RESULT IN SIGNIFICANT DAMAGE, INCLUDING THE COMPLETE, IRRECOVERABLE LOSS OF USE OF YOUR COMPUTER SYSTEM OR OTHER DEVICE.
-
-10.3 GOOGLE FURTHER EXPRESSLY DISCLAIMS ALL WARRANTIES AND CONDITIONS OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
-
-11. LIMITATION OF LIABILITY
-
-11.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT GOOGLE, ITS SUBSIDIARIES AND AFFILIATES, AND ITS LICENSORS SHALL NOT BE LIABLE TO YOU UNDER ANY THEORY OF LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL OR EXEMPLARY DAMAGES THAT MAY BE INCURRED BY YOU, INCLUDING ANY LOSS OF DATA, WHETHER OR NOT GOOGLE OR ITS REPRESENTATIVES HAVE BEEN ADVISED OF OR SHOULD HAVE BEEN AWARE OF THE POSSIBILITY OF ANY SUCH LOSSES ARISING.
-
-12. Indemnification
-
-12.1 To the maximum extent permitted by law, you agree to defend, indemnify and hold harmless Google, its affiliates and their respective directors, officers, employees and agents from and against any and all claims, actions, suits or proceedings, as well as any and all losses, liabilities, damages, costs and expenses (including reasonable attorneys’ fees) arising out of or accruing from (a) your use of the Preview, (b) any application you develop on the Preview that infringes any Intellectual Property Rights of any person or defames any person or violates their rights of publicity or privacy, and (c) any non-compliance by you of the License Agreement.
-
-13. Changes to the License Agreement
-
-13.1 Google may make changes to the License Agreement as it distributes new versions of the Preview. When these changes are made, Google will make a new version of the License Agreement available on the website where the Preview is made available.
-
-14. General Legal Terms
-
-14.1 the License Agreement constitutes the whole legal agreement between you and Google and governs your use of the Preview (excluding any services which Google may provide to you under a separate written agreement), and completely replaces any prior agreements between you and Google in relation to the Preview.
-
-14.2 You agree that if Google does not exercise or enforce any legal right or remedy which is contained in the License Agreement (or which Google has the benefit of under any applicable law), this will not be taken to be a formal waiver of Google's rights and that those rights or remedies will still be available to Google.
-
-14.3 If any court of law, having the jurisdiction to decide on this matter, rules that any provision of the License Agreement is invalid, then that provision will be removed from the License Agreement without affecting the rest of the License Agreement. The remaining provisions of the License Agreement will continue to be valid and enforceable.
-
-14.4 You acknowledge and agree that each member of the group of companies of which Google is the parent shall be third party beneficiaries to the License Agreement and that such other companies shall be entitled to directly enforce, and rely upon, any provision of the License Agreement that confers a benefit on (or rights in favor of) them. Other than this, no other person or company shall be third party beneficiaries to the License Agreement.
-
-14.5 EXPORT RESTRICTIONS. THE PREVIEW IS SUBJECT TO UNITED STATES EXPORT LAWS AND REGULATIONS. YOU MUST COMPLY WITH ALL DOMESTIC AND INTERNATIONAL EXPORT LAWS AND REGULATIONS THAT APPLY TO THE PREVIEW. THESE LAWS INCLUDE RESTRICTIONS ON DESTINATIONS, END USERS AND END USE.
-
-14.6 The License Agreement may not be assigned or transferred by you without the prior written approval of Google, and any attempted assignment without such approval will be void. You shall not delegate your responsibilities or obligations under the License Agreement without the prior written approval of Google.
-
-14.7 The License Agreement, and your relationship with Google under the License Agreement, shall be governed by the laws of the State of California without regard to its conflict of laws provisions. You and Google agree to submit to the exclusive jurisdiction of the courts located within the county of Santa Clara, California to resolve any legal matter arising from the License Agreement. Notwithstanding this, you agree that Google shall still be allowed to apply for injunctive remedies (or an equivalent type of urgent legal relief) in any jurisdiction.
- </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">I have read and agree with the above terms and conditions</label>
- </p>
- <p><a href="" class="button disabled" id="downloadForRealz" onclick="return onDownloadForRealz(this);"></a></p>
- </div>
-
-
- </div><!-- end TOS -->
-
-
- <div id="landing">
-
-<p>
- This page provides links to over-the-air (OTA) device images and describes
- how to manually apply an OTA update to a device. This procedure may be useful
- in recovering devices that received OTA updates through the Android Beta
- Program and do not start up after the update is installed.
-</p>
-
-<h2 id="install-ota">Installing OTA Images</h2>
-
-<p></p>
-
-<p>To install an OTA package to a device:</p>
-
-<ol>
- <li>Download an OTA device image from the table below.</li>
- <li>Reboot the device into Recovery mode. For more information on putting
- Nexus devices in this mode, see
- <a href="https://support.google.com/nexus/answer/4596836">Reset your Nexus
- device to factory settings</a>.
- </li>
- <li>On the device, select <strong>ADB sideload</strong>.</li>
- <li>Connect the device to a computer with the Android development environment
- loaded and the Android Debug Bridge (adb) tool installed.</li>
- <li>Run the following command:
- <pre>adb sideload <em><ota-package></em></pre>
- </li>
-</ol>
-
-
-
-<h2 id="ota-images">Device OTA Images</h2>
-
-<table>
- <tr>
- <th scope="col">Device</th>
- <th scope="col">Download / Checksums</th>
- </tr>
-
- <tr id="bullhead">
- <td>Nexus 5X <br>"bullhead"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >bullhead-ota-npd90g-0a874807.zip</a><br>
- MD5: 4b83b803fac1a6eec13f66d0afc6f46e<br>
- SHA-1: a9920bcc8d475ce322cada097d085448512635e2
- </td>
- </tr>
-
- <tr id="shamu">
- <td>Nexus 6 <br>"shamu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >shamu-ota-npd90g-06f5d23d.zip</a><br>
- MD5: 513570bb3a91878c2d1a5807d2340420<br>
- SHA-1: 2d2f40636c95c132907e6ba0d10b395301e969ed
- </td>
- </tr>
-
- <tr id="angler">
- <td>Nexus 6P <br>"angler"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >angler-ota-npd90g-5baa69c2.zip</a><br>
- MD5: 096fe26c5d50606a424d2f3326c0477b<br>
- SHA-1: 468d2e7aea444505513ddc183c85690c00fab0c1
- </td>
- </tr>
-
- <tr id="volantis">
- <td>Nexus 9 <br>"volantis"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantis-ota-npd90g-c04785e1.zip</a><br>
- MD5: 6aecd3b0b3a839c5ce1ce4d12187b03e<br>
- SHA-1: 31633180635b831e59271a7d904439f278586f49
- </td>
- </tr>
-
- <tr id="volantisg">
- <td>Nexus 9G <br>"volantisg"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantisg-ota-npd90g-c56aa1b0.zip</a><br>
- MD5: 0493fa79763d67bcdde8007299e1888d<br>
- SHA-1: f709daf81968a1b27ed41fe40d42e0d106f3c494
- </td>
- </tr>
-
- <tr id="fugu">
- <td>Nexus Player <br>"fugu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >fugu-ota-npd90g-3a0643ae.zip</a><br>
- MD5: 9c38b6647fe5a4f2965196b7c409f0f7<br>
- SHA-1: 77c6fb05191f0c2ae0956bae18f1c80b2f922f05
- </td>
- </tr>
-
- <tr id="ryu">
- <td>Pixel C <br>"ryu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >ryu-ota-npd90g-ec931914.zip</a><br>
- MD5: 4c6135498ca156a9cdaf443ddfdcb2ba<br>
- SHA-1: 297cc9a204685ef5507ec087fc7edf5b34551ce6
- </td>
- </tr>
-
- <tr id="seed">
- <td>General Mobile 4G (Android One) <br>"seed"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >seed_l8150-ota-npd90g-dcb0662d.zip</a><br>
- MD5: f40ea6314a13ea6dd30d0e68098532a2<br>
- SHA-1: 11af10b621f4480ac63f4e99189d61e1686c0865
- </td>
- </tr>
-
-</table>
-
-
- </div><!-- landing -->
-
-</div><!-- relative wrapper -->
-
-
-
-<script>
- var urlRoot = "http://storage.googleapis.com/androiddevelopers/shareables/preview/ota/";
- 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/preview/download.jd b/docs/html/preview/download.jd
deleted file mode 100644
index e4db890..0000000
--- a/docs/html/preview/download.jd
+++ /dev/null
@@ -1,562 +0,0 @@
-page.title=Test on a Device
-meta.tags="preview", "nexus","system image"
-page.tags="preview", "androidn"
-page.image=images/cards/card-n-downloads_2x.png
-
-@jd:body
-
-<div style="position:relative; min-height:600px">
-
- <div class="wrap" id="tos" style="position:absolute;display:none;width:inherit;">
-
- <p class="sdk-terms-intro">Before downloading and installing components of
- the Android Preview SDK, you must agree to the following terms and
- conditions.</p>
-
- <h2 class="norule">Terms and Conditions</h2>
-
- <div class="sdk-terms" onfocus="this.blur()" style="width:678px">
-This is the Android SDK Preview License Agreement (the “License Agreement”).
-
-1. Introduction
-
-1.1 The Android SDK Preview (referred to in the License Agreement as the “Preview” and specifically including the Android system files, packaged APIs, and Preview library files, if and when they are made available) is licensed to you subject to the terms of the License Agreement. The License Agreement forms a legally binding contract between you and Google in relation to your use of the Preview.
-
-1.2 "Android" means the Android software stack for devices, as made available under the Android Open Source Project, which is located at the following URL: http://source.android.com/, as updated from time to time.
-
-1.3 “Android-compatible” means any Android implemation that (i) complies with the Android Compatibility Definition document, which can be found at the Android compatibility website (http://source.android.com/compatibility) and which may be updated from time to time; and (ii) successfully passes the Android Compatibility Test Suite (CTS).
-
-1.4 "Google" means Google Inc., a Delaware corporation with principal place of business at 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States.
-
-2. Accepting the License Agreement
-
-2.1 In order to use the Preview, you must first agree to the License Agreement. You may not use the Preview if you do not accept the License Agreement.
-
-2.2 By clicking to accept and/or using the Preview, you hereby agree to the terms of the License Agreement.
-
-2.3 You may not use the Preview and may not accept the License Agreement if you are a person barred from receiving the Preview under the laws of the United States or other countries including the country in which you are resident or from which you use the Preview.
-
-2.4 If you will use the Preview internally within your company or organization you agree to be bound by the License Agreement on behalf of your employer or other entity, and you represent and warrant that you have full legal authority to bind your employer or such entity to the License Agreement. If you do not have the requisite authority, you may not accept the License Agreement or use the Preview on behalf of your employer or other entity.
-
-3. Preview License from Google
-
-3.1 Subject to the terms of this License Agreement, Google grants you a limited, worldwide, royalty-free, non-assignable, non-exclusive, and non-sublicensable license to use the Preview solely to develop applications for compatible implementations of Android.
-
-3.2 You may not use this Preview to develop applications for other platforms (including non-compatible implementations of Android) or to develop another SDK. You are of course free to develop applications for other platforms, including non-compatible implementations of Android, provided that this Preview is not used for that purpose.
-
-3.3 You agree that Google or third parties owns all legal right, title and interest in and to the Preview, including any Intellectual Property Rights that subsist in the Preview. "Intellectual Property Rights" means any and all rights under patent law, copyright law, trade secret law, trademark law, and any and all other proprietary rights. Google reserves all rights not expressly granted to you.
-
-3.4 You may not use the Preview for any purpose not expressly permitted by the License Agreement. Except to the extent required by applicable third party licenses, you may not: (a) copy (except for backup purposes), modify, adapt, redistribute, decompile, reverse engineer, disassemble, or create derivative works of the Preview or any part of the Preview; or (b) load any part of the Preview onto a mobile handset or any other hardware device except a personal computer, combine any part of the Preview with other software, or distribute any software or device incorporating a part of the Preview.
-
-3.5 Use, reproduction and distribution of components of the Preview licensed under an open source software license are governed solely by the terms of that open source software license and not the License Agreement. You agree to remain a licensee in good standing in regard to such open source software licenses under all the rights granted and to refrain from any actions that may terminate, suspend, or breach such rights.
-
-3.6 You agree that the form and nature of the Preview that Google provides may change without prior notice to you and that future versions of the Preview may be incompatible with applications developed on previous versions of the Preview. You agree that Google may stop (permanently or temporarily) providing the Preview (or any features within the Preview) to you or to users generally at Google's sole discretion, without prior notice to you.
-
-3.7 Nothing in the License Agreement gives you a right to use any of Google's trade names, trademarks, service marks, logos, domain names, or other distinctive brand features.
-
-3.8 You agree that you will not remove, obscure, or alter any proprietary rights notices (including copyright and trademark notices) that may be affixed to or contained within the Preview.
-
-4. Use of the Preview by You
-
-4.1 Google agrees that nothing in the License Agreement gives Google any right, title or interest from you (or your licensors) under the License Agreement in or to any software applications that you develop using the Preview, including any intellectual property rights that subsist in those applications.
-
-4.2 You agree to use the Preview and write applications only for purposes that are permitted by (a) the License Agreement, and (b) any applicable law, regulation or generally accepted practices or guidelines in the relevant jurisdictions (including any laws regarding the export of data or software to and from the United States or other relevant countries).
-
-4.3 You agree that if you use the Preview to develop applications, you will protect the privacy and legal rights of users. If users provide you with user names, passwords, or other login information or personal information, you must make the users aware that the information will be available to your application, and you must provide legally adequate privacy notice and protection for those users. If your application stores personal or sensitive information provided by users, it must do so securely. If users provide you with Google Account information, your application may only use that information to access the user's Google Account when, and for the limited purposes for which, each user has given you permission to do so.
-
-4.4 You agree that you will not engage in any activity with the Preview, including the development or distribution of an application, that interferes with, disrupts, damages, or accesses in an unauthorized manner the servers, networks, or other properties or services of Google or any third party.
-
-4.5 You agree that you are solely responsible for (and that Google has no responsibility to you or to any third party for) any data, content, or resources that you create, transmit or display through Android and/or applications for Android, and for the consequences of your actions (including any loss or damage which Google may suffer) by doing so.
-
-4.6 You agree that you are solely responsible for (and that Google has no responsibility to you or to any third party for) any breach of your obligations under the License Agreement, any applicable third party contract or Terms of Service, or any applicable law or regulation, and for the consequences (including any loss or damage which Google or any third party may suffer) of any such breach.
-
-4.7 The Preview is in development, and your testing and feedback are an important part of the development process. By using the Preview, you acknowledge that implementation of some features are still under development and that you should not rely on the Preview having the full functionality of a stable release. You agree not to publicly distribute or ship any application using this Preview as this Preview will no longer be supported after the official Android SDK is released.
-
-5. Your Developer Credentials
-
-5.1 You agree that you are responsible for maintaining the confidentiality of any developer credentials that may be issued to you by Google or which you may choose yourself and that you will be solely responsible for all applications that are developed under your developer credentials.
-
-6. Privacy and Information
-
-6.1 In order to continually innovate and improve the Preview, Google may collect certain usage statistics from the software including but not limited to a unique identifier, associated IP address, version number of the software, and information on which tools and/or services in the Preview are being used and how they are being used. Before any of this information is collected, the Preview will notify you and seek your consent. If you withhold consent, the information will not be collected.
-
-6.2 The data collected is examined in the aggregate to improve the Preview and is maintained in accordance with Google's Privacy Policy located at http://www.google.com/policies/privacy/.
-
-7. Third Party Applications
-
-7.1 If you use the Preview to run applications developed by a third party or that access data, content or resources provided by a third party, you agree that Google is not responsible for those applications, data, content, or resources. You understand that all data, content or resources which you may access through such third party applications are the sole responsibility of the person from which they originated and that Google is not liable for any loss or damage that you may experience as a result of the use or access of any of those third party applications, data, content, or resources.
-
-7.2 You should be aware the data, content, and resources presented to you through such a third party application may be protected by intellectual property rights which are owned by the providers (or by other persons or companies on their behalf). You may not modify, rent, lease, loan, sell, distribute or create derivative works based on these data, content, or resources (either in whole or in part) unless you have been specifically given permission to do so by the relevant owners.
-
-7.3 You acknowledge that your use of such third party applications, data, content, or resources may be subject to separate terms between you and the relevant third party.
-
-8. Using Google APIs
-
-8.1 Google APIs
-
-8.1.1 If you use any API to retrieve data from Google, you acknowledge that the data may be protected by intellectual property rights which are owned by Google or those parties that provide the data (or by other persons or companies on their behalf). Your use of any such API may be subject to additional Terms of Service. You may not modify, rent, lease, loan, sell, distribute or create derivative works based on this data (either in whole or in part) unless allowed by the relevant Terms of Service.
-
-8.1.2 If you use any API to retrieve a user's data from Google, you acknowledge and agree that you shall retrieve data only with the user's explicit consent and only when, and for the limited purposes for which, the user has given you permission to do so.
-
-9. Terminating the License Agreement
-
-9.1 the License Agreement will continue to apply until terminated by either you or Google as set out below.
-
-9.2 If you want to terminate the License Agreement, you may do so by ceasing your use of the Preview and any relevant developer credentials.
-
-9.3 Google may at any time, terminate the License Agreement, with or without cause, upon notice to you.
-
-9.4 The License Agreement will automatically terminate without notice or other action upon the earlier of:
-(A) when Google ceases to provide the Preview or certain parts of the Preview to users in the country in which you are resident or from which you use the service; and
-(B) Google issues a final release version of the Android SDK.
-
-9.5 When the License Agreement is terminated, the license granted to you in the License Agreement will terminate, you will immediately cease all use of the Preview, and the provisions of paragraphs 10, 11, 12 and 14 shall survive indefinitely.
-
-10. DISCLAIMERS
-
-10.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT YOUR USE OF THE PREVIEW IS AT YOUR SOLE RISK AND THAT THE PREVIEW IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT WARRANTY OF ANY KIND FROM GOOGLE.
-
-10.2 YOUR USE OF THE PREVIEW AND ANY MATERIAL DOWNLOADED OR OTHERWISE OBTAINED THROUGH THE USE OF THE PREVIEW IS AT YOUR OWN DISCRETION AND RISK AND YOU ARE SOLELY RESPONSIBLE FOR ANY DAMAGE TO YOUR COMPUTER SYSTEM OR OTHER DEVICE OR LOSS OF DATA THAT RESULTS FROM SUCH USE. WITHOUT LIMITING THE FOREGOING, YOU UNDERSTAND THAT THE PREVIEW IS NOT A STABLE RELEASE AND MAY CONTAIN ERRORS, DEFECTS AND SECURITY VULNERABILITIES THAT CAN RESULT IN SIGNIFICANT DAMAGE, INCLUDING THE COMPLETE, IRRECOVERABLE LOSS OF USE OF YOUR COMPUTER SYSTEM OR OTHER DEVICE.
-
-10.3 GOOGLE FURTHER EXPRESSLY DISCLAIMS ALL WARRANTIES AND CONDITIONS OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
-
-11. LIMITATION OF LIABILITY
-
-11.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT GOOGLE, ITS SUBSIDIARIES AND AFFILIATES, AND ITS LICENSORS SHALL NOT BE LIABLE TO YOU UNDER ANY THEORY OF LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL OR EXEMPLARY DAMAGES THAT MAY BE INCURRED BY YOU, INCLUDING ANY LOSS OF DATA, WHETHER OR NOT GOOGLE OR ITS REPRESENTATIVES HAVE BEEN ADVISED OF OR SHOULD HAVE BEEN AWARE OF THE POSSIBILITY OF ANY SUCH LOSSES ARISING.
-
-12. Indemnification
-
-12.1 To the maximum extent permitted by law, you agree to defend, indemnify and hold harmless Google, its affiliates and their respective directors, officers, employees and agents from and against any and all claims, actions, suits or proceedings, as well as any and all losses, liabilities, damages, costs and expenses (including reasonable attorneys’ fees) arising out of or accruing from (a) your use of the Preview, (b) any application you develop on the Preview that infringes any Intellectual Property Rights of any person or defames any person or violates their rights of publicity or privacy, and (c) any non-compliance by you of the License Agreement.
-
-13. Changes to the License Agreement
-
-13.1 Google may make changes to the License Agreement as it distributes new versions of the Preview. When these changes are made, Google will make a new version of the License Agreement available on the website where the Preview is made available.
-
-14. General Legal Terms
-
-14.1 the License Agreement constitutes the whole legal agreement between you and Google and governs your use of the Preview (excluding any services which Google may provide to you under a separate written agreement), and completely replaces any prior agreements between you and Google in relation to the Preview.
-
-14.2 You agree that if Google does not exercise or enforce any legal right or remedy which is contained in the License Agreement (or which Google has the benefit of under any applicable law), this will not be taken to be a formal waiver of Google's rights and that those rights or remedies will still be available to Google.
-
-14.3 If any court of law, having the jurisdiction to decide on this matter, rules that any provision of the License Agreement is invalid, then that provision will be removed from the License Agreement without affecting the rest of the License Agreement. The remaining provisions of the License Agreement will continue to be valid and enforceable.
-
-14.4 You acknowledge and agree that each member of the group of companies of which Google is the parent shall be third party beneficiaries to the License Agreement and that such other companies shall be entitled to directly enforce, and rely upon, any provision of the License Agreement that confers a benefit on (or rights in favor of) them. Other than this, no other person or company shall be third party beneficiaries to the License Agreement.
-
-14.5 EXPORT RESTRICTIONS. THE PREVIEW IS SUBJECT TO UNITED STATES EXPORT LAWS AND REGULATIONS. YOU MUST COMPLY WITH ALL DOMESTIC AND INTERNATIONAL EXPORT LAWS AND REGULATIONS THAT APPLY TO THE PREVIEW. THESE LAWS INCLUDE RESTRICTIONS ON DESTINATIONS, END USERS AND END USE.
-
-14.6 The License Agreement may not be assigned or transferred by you without the prior written approval of Google, and any attempted assignment without such approval will be void. You shall not delegate your responsibilities or obligations under the License Agreement without the prior written approval of Google.
-
-14.7 The License Agreement, and your relationship with Google under the License Agreement, shall be governed by the laws of the State of California without regard to its conflict of laws provisions. You and Google agree to submit to the exclusive jurisdiction of the courts located within the county of Santa Clara, California to resolve any legal matter arising from the License Agreement. Notwithstanding this, you agree that Google shall still be allowed to apply for injunctive remedies (or an equivalent type of urgent legal relief) in any jurisdiction.
- </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">I have read and agree with the above terms and conditions</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>In this document</h2>
- <ol>
- <li><a href="#device-preview">Set up a hardware device</a>
- <ol>
- <li><a href="#ota">Get over-the-air updates</a></li>
- <li><a href="#flash">Manually flash a device</a></li>
- <li><a href="#revertDevice">Uninstalling</a></li>
- </ol>
- </li>
- <li><a href="#setupAVD">Set up an emulator</a></li>
- </ol>
- </div>
-</div>
-
-<p>
- To run and test your app on the new platform you need to set up an Android N
- runtime environment. You can do that in either of these ways:
-</p>
-
-<ul>
- <li>Install Android N on a supported hardware device, or</li>
- <li>Set up an Android emulator running Android N</li>
-</ul>
-
-<p>
- If you want an environment for basic compatibility testing of your app on the
- new platform, all you need is your current APK and a hardware device or
- emulator. You don't necessarily need to update your full development
- environment to do basic testing.
-</p>
-
-<p>
- If you want to modify your app to target Android N or use new Android N APIs,
- you need to set up a development environment that's updated to support
- Android N. <a href="{@docRoot}preview/setup-sdk.html">Set Up to Develop for
- Android N</a> has details.
-</p>
-
-
-<h2 id="device-preview">Set up a hardware device</h2>
-
-<p>
- The N Developer Preview offers system updates for a range of hardware devices
- that you can use for testing your app, from phones to tablets and TV.
-</p>
-
-<p>
- If you have access to a supported device, you can update it to a Developer
- Preview milestone build in one of these ways:
-</p>
-
-<ul>
- <li>
- <strong>Enroll the device in automatic OTA system updates</strong> through
- the <a href="https://g.co/androidbeta">Android Beta Program</a>. Once
- enrolled, your device will receive regular over-the-air (OTA) updates of
- all milestone builds in the N Developer Preview. When the next version of
- Android is released, your device will automatically update to the final
- version. This approach is recommended because it lets you seamlessly
- transition from your current environment, through the various releases of
- the N Developer Preview, to the release version.
- </li>
-
- <li>
- <strong>Download a Developer Preview system image and flash the
- device</strong>. OTA updates are not provided automatically for devices
- that you flash manually, but you can enroll those devices in Android Beta
- Program to get OTA updates. When the next version of Android is released,
- you can download the final device image from the <a href=
- "https://developers.google.com/android/nexus/images" type=
- "external-link">factory images</a> page.
- </li>
-</ul>
-
-<h3 id="ota">Enroll the device in automatic OTA updates</h3>
-
-<p>
- If you have access to a supported device (see the list in the Downloads
- table), you can receive over-the-air updates to preview versions of Android
- by enrolling that device in the <a href="https://g.co/androidbeta">Android
- Beta Program</a>. These updates are automatically downloaded and will update
- your device just like official system updates. When the next version of
- Android is released, the device will automatically update to the production
- version.
-</p>
-
-<p>
- You can un-enroll a device at any time. The device will receive an OTA update
- to the most recent production version of Android available for that device
- (for example, Android 6.0 Marshmallow). The update requires a full device
- reset, so user data on the device will be removed. Make sure to <strong>back
- up important data</strong> before un-enrolling a device.
-</p>
-
-<p>
- For more information and to enroll your device, see
- the <a href="https://g.co/androidbeta">Android Beta Program</a> web site.
-</p>
-
-<p class="note"><strong>Note:</strong>
- Un-enrolling requires a full device reset. Back up
- important data first.
-</p>
-
-<h3 id="flash">Flashing a device manually</h3>
-
-<p>
- At any time you can download the latest Developer Preview system image and
- manually flash it to your device. See the table below to download the system
- image for your test device. Manually flashing a device is useful if you need
- precise control over the test environment or need to reinstall frequently,
- such as for automated testing.
-</p>
-
-<!-- You can flash by ota or system image --><p>
- Installing a system image on a device <strong>removes all data from the
- device</strong>, so you should back up your data first.
-</p>
-
-<p>
- After you back up your device data and download the system image below that
- matches your device, follow the instructions at <a href=
- "https://developers.google.com/android/nexus/images#instructions">developers.google.com/android</a>
- to flash the image onto your device.
-</p>
-
-<p>
- Manually flashed system images <strong>do not
- automatically receive OTA updates</strong> to later Developer Preview
- milestone builds or the final, production version. Make sure to keep your
- environment up-to-date and flash a
- new system image at each Developer Preview milestone.
-</p>
-
-<p>
- If you decide you want to get OTA updates after manually flashing a device,
- all you need to do is enroll the device in the <a href="https://g.co/androidbeta">Android
- Beta Program</a>. You can enroll the device at any time to receive the next Preview
- update over the air.
-</p>
-
-<table>
- <tr>
- <th scope="col">Device</th>
- <th scope="col">Download / Checksums</th>
- </tr>
-
- <tr id="bullhead">
- <td>Nexus 5X <br>"bullhead"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >bullhead-npd90g-factory-7a0ca1bc.tgz</a><br>
- MD5: e7a9a3061335c1e0c8be2588f13290af<br>
- SHA-1: 7a0ca1bcfa51bbefde34243603bc79c7dec214a1
- </td>
- </tr>
-
- <tr id="shamu">
- <td>Nexus 6 <br>"shamu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >shamu-npd90g-factory-f7a4e3a9.tgz</a><br>
- MD5: 2fb572ddcfca67bb1d741be97492a9ed<br>
- SHA-1: f7a4e3a96c797827492998e855c8f9efbfc8559a
- </td>
- </tr>
-
- <tr id="angler">
- <td>Nexus 6P <br>"angler"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >angler-npd90g-factory-cd9ac81e.tgz</a><br>
- MD5: 2370c30f3ef1d0684c1de5216a5d90fe<br>
- SHA-1: cd9ac81ec7f4a646ac6054eecbf2ea4c4b89b054
- </td>
- </tr>
-
- <tr id="volantis">
- <td>Nexus 9 <br>"volantis"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantis-npd90g-factory-41b55406.tgz</a><br>
- MD5: cefa78950141da2a7c75e887717e3c8f<br>
- SHA-1: 41b554060263a7ef16e4be8422cbd6caca26e00f
- </td>
- </tr>
-
- <tr id="volantisg">
- <td>Nexus 9G <br>"volantisg"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantisg-npd90g-factory-610492be.tgz</a><br>
- MD5: 2f36dc0d0fab02ab78be500677ec239f<br>
- SHA-1: 610492bedfc4127023040ecb2c89239a78a900ad
- </td>
- </tr>
-
- <tr id="fugu">
- <td>Nexus Player <br>"fugu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >fugu-npd90g-factory-0fe95694.tgz</a><br>
- MD5: f4cb48f919e4c29c631de21416c612e2<br>
- SHA-1: 0fe95694e7bc41e4c3ac0e4438cd77102a0aa8b4
- </td>
- </tr>
-
- <tr id="ryu">
- <td>Pixel C <br>"ryu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >ryu-npd90g-factory-f4da981c.tgz</a><br>
- MD5: d9f0e40b6c20d274831e8a7d285fd887<br>
- SHA-1: f4da981c70576133321e2858e52fe2c990e68a75
- </td>
- </tr>
-
- <tr id="seed">
- <td>General Mobile 4G (Android One) <br>"seed"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >seed_l8150-npd90g-factory-48f59c99.tgz</a><br>
- MD5: 0ed565c509594072822d71c65b48ec8e<br>
- SHA-1: 48f59c99ac43d1cd2f5656a283bb9868581663a8
- </td>
- </tr>
-
-</table>
-
-<h3 id="revertDevice">Uninstalling the Preview from a device</h3>
-
-<p>
- If you want to uninstall the preview from a device, you can do so in one of
- these ways: </p>
- <ul>
- <li><strong>Obtain a factory spec system image</strong> and then manually
- flash it to the device.
- <ul>
- <li>For <strong>Nexus devices and Pixel C devices</strong>, see
- the <a href="http://developers.google.com/android/nexus/images">Factory Images
- for Nexus Devices</a> page for downloads. </li>
- <li>For <strong>other devices</strong>, please contact the device manufacturer
- directly. Alternatively, if the device is supported
- in the Android Beta Program, you can enroll the device in the
- program and then un-enroll it (see below).</li>
- </ul>
- </li>
- <li><strong>Un-enroll the device from Android Beta Program</strong>. If the
- device is enrolled in the <a href="https://g.co/androidbeta">Android Beta
- Program</a>, regardless of device, you can simply un-enroll it from the program.
- <p>
- The device will receive an OTA update to the most recent production version
- of Android available for that device (for example, Android 6.0 Marshmallow).
- The update requires a full device reset, so user data on the device will be
- removed. Make sure to <strong>back up important data</strong> before
- un-enrolling a device.
- </p>
- </li>
-</ul>
-
-<p class="note"><strong>Note:</strong>
- Uninstalling a Developer Preview system image prior to
- the end of the program requires a full device reset and removes all user data
- on the device.
-</p>
-
-
-<h2 id="setupAVD">Set up an emulator</h2>
-
-<p>To use the Android Emulator to run the Android N Preview, you need to
-download the Android N Preview SDK and create a virtual device for the
-emulator.</p>
-
-<p>First, download the Android N Preview SDK as follows (if you
-already got it while <a href="{@docRoot}preview/setup-sdk.html">setting up
-to develop for Android N</a>, you can skip this part):
-
-<ol>
- <li>In Android Studio, open the Settings dialog
- (<strong>File > Settings</strong> on Windows/Linux, or
- <strong>Android Studio > Preferences</strong> on Mac). In the left
- panel, select <strong>Appearance & Behavior >
- System Settings > Android SDK</strong>.
-
- <li>Click the <strong>SDK Platforms</strong> tab, then select the
- <strong>Android N Preview</strong> check box.</li>
-
- <li>Click the <strong>SDK Tools</strong> tab, then select the
- <strong>Android SDK Build Tools</strong>, <strong>Android SDK
- Platform-Tools</strong>, and <strong>Android SDK Tools</strong> check
- boxes.
- </li>
-
- <li>Click <strong>OK</strong> and accept the license
- agreements for any packages to be installed.
- </li>
-</ol>
-
-<p>You should now have <strong>Android SDK Built-Tools 24.0 0 rc1</strong>,
-<strong>Platform-Tools 24.0.0 rc1</strong>, and <strong>SDK Tools
-25.0.9</strong>. If you do not update the SDK Tools to 25.0.9, then you won't
-be able to run the x86_64 system images for Android N.</p>
-
-
-<p>Now create a virtual device with the Android N system image:</p>
-
-<ol>
- <li>Open the AVD Manager by selecting <strong>Tools > Android >
- AVD Manager</strong>.</li>
- <li>Click <strong>Create Virtual Device</strong>.</li>
- <li>Select a device such as Nexus 5X, Nexus 6P, Nexus 9, or Android TV,
- then click <strong>Next</strong>.</li>
- <li>Select the <strong>N</strong> system image (with the
- <strong>x86</strong> ABI), then click <strong>Next</strong>.
- (Only x86 system images are currently supported with the Android Emulator
-for the Android N Preview.)
- <li>Complete the rest of the AVD configuration and click
- <strong>Finish</strong>.</li>
-</ol>
-
-<p>You can now launch the Android Emulator with the Android N Preview AVD.</p>
-
-<p>
-For the best experience in the Android Emulator, make sure you're using
-Android Studio 2.1 or higher, which supports <a
-href="http://tools.android.com/tech-docs/emulator">Android Emulator 2.0</a>
-with much faster performance compared to the emulator in
-Android Studio 1.5.</p>
-
-<p>For more information about creating virtual devices, see <a href=
- "{@docRoot}tools/devices/index.html">Managing Virtual Devices</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/preview/features/afw.jd b/docs/html/preview/features/afw.jd
deleted file mode 100644
index 17cd58e..0000000
--- a/docs/html/preview/features/afw.jd
+++ /dev/null
@@ -1,555 +0,0 @@
-page.title=Android for Work Updates
-page.metaDescription=New Android for Work APIs and features in Android N.
-page.keywords="android for work", "android N", "enterprise", "QR code"
-
-@jd:body
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>In this document</h2>
- <ol>
- <li><a href="#qr">QR Code Provisioning
- </a></li>
-
- <li><a href="#sec-challenge">Work Profile Security Challenge
- </a></li>
-
- <li><a href="#suspend">Disable Access to Apps
- </a></li>
-
- <li><a href="#toggle-work">Toggle Work Mode
- </a></li>
-
- <li><a href="#always-on-vpn">Always-On VPN
- </a></li>
-
- <li><a href="#contacts">Contacts Integration with Work Profile
- </a></li>
-
- <li><a href="#remote-reboot">Remote Reboot
- </a></li>
-
- <li><a href="#disable-roaming">Disable Data Roaming
- </a></li>
-
- <li><a href="#process-logging">Enterprise Process Logging
- </a></li>
-
- <li><a href="#bug-reports">Remote Bug Reports
- </a></li>
-
- <li><a href="#remove-cert">Remove a Client Certificate
- </a></li>
-
- <li><a href="#grant-cert-on-install">Grant Access to Client Certificate
- on Installation</a></li>
-
- <li><a href="#ui-policy">System UI Policy Transparency
- </a></li>
-
- <li><a href="#managed-configurations">Managed Configurations Enhancements
- </a></li>
-
- <li><a href="#location-off">Location Off Switch
- </a></li>
-
- <li><a href="#custom-provisioning">Customized Provisioning
- </a></li>
-
- <li><a href="#multi-wifi-ca">Multiple Wi-Fi CA Certificates
- </a></li>
-
- <li><a href="#custom-lock">Customized Lockscreen Message
- </a></li>
-
- <li><a href="#work-connectionservice">Work Profile ConnectionService
- </a></li>
-
- <li><a href="#lock-wp">Lock Down Wallpaper
- </a></li>
-
- <li><a href="#lock-user-icon">Lock Down User Icon
- </a></li>
-
- <li><a href="#health-monitoring">Device Health Monitoring
- </a></li>
-
- </ol>
-
- <h2>See Also</h2>
- <ul>
- <li><a href="{@docRoot}preview/setup-sdk.html#docs-dl">N Preview SDK
- Reference</a></li>
- </ul>
- </div>
-</div>
-
-<p>This document describes the new Android for Work features provided in
-Android N.</p>
-
-<h2 id="qr">QR Code Provisioning</h2>
-
-<p>
- Android for Work now supports using QR codes to provision corporate-liable
- devices. The setup wizard now allows you to scan a QR code to provision
- the device.
-</p>
-
-<h2 id="sec-challenge">Work Profile Security Challenge</h2>
-
-<p>
- Profile owners can require users to specify a security challenge for apps
- running in the work profile. The system shows the security challenge when the
- user attempts to open any work apps. If the user successfully completes the
- security challenge, the system unlocks the work profile and decrypts it if
- necessary.
-</p>
-
-<p>
- If a profile owner sends an {@link
- android.app.admin.DevicePolicyManager#ACTION_SET_NEW_PASSWORD} intent, the
- system prompts a user to set up a security challenge. The profile owner can
- also send an <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> intent to
- prompt the user to set a device lock.
-</p>
-
-<p>
- Profile owners can choose to set the password policies for the work challenge
- differently from the policies for other device passwords. For example, the
- minimum length for the device challenge response can be different from the
- length required for other passwords. Profile owners set the challenge
- policies using the usual {@link android.app.admin.DevicePolicyManager}
- methods, such as {@link
- android.app.admin.DevicePolicyManager#setPasswordQuality
- setPasswordQuality()} and {@link
- android.app.admin.DevicePolicyManager#setPasswordMinimumLength
- setPasswordMinimumLength()}. The profile owner can also set the device lock,
- by using the {@link android.app.admin.DevicePolicyManager} instance returned
- by the new <code>DevicePolicyManager.getParentProfileInstance()</code>
- method. Additionally, profile owners can customize the credentials screen for
- the work challenge by using the {@link android.app.admin.DevicePolicyManager}
- class's new <code>setOrganizationColor()</code> and
- <code>setOrganizationName()</code> methods.
-</p>
-
-<p>
- For details on the new methods and constants, see the
- <code>DevicePolicyManager</code> reference page in the <a
- href="{@docRoot}preview/setup-sdk.html#docs-dl">N Preview SDK Reference</a>.
-</p>
-
-<h2 id="suspend">Disable Access to Apps</h2>
-
-<p>
- Device owners and profile owners can temporarily suspend access to packages
- by calling the new <code>DevicePolicyManager.setPackagesSuspended()</code>
- method. Owners can use the same method to re-enable those packages.
-</p>
-
-<p>
- While a package is suspended, it cannot start activities, notifications to
- the package are suppressed, and the app's entry in the <a
- href="{@docRoot}guide/components/recents.html">overview screen</a> is hidden.
- Suspended packages do not show in the <a href=
- "{@docRoot}guide/components/recents.html">overview screen</a>, and they
- cannot show dialogs (including toasts and snackbars). They also cannot play
- audio or vibrate the device.
-</p>
-
-<p>
- Launchers should apply a distinctive UI to suspended apps to show that the
- apps aren't currently available; for example, they might render the app icon
- in gray. Launchers can find out if an app is suspended by calling the new
- <code>DevicePolicyManager.getPackageSuspended()</code> method.
-</p>
-
-<h2 id="toggle-work">Toggle Work Mode</h2>
-
-<p>
- On dual-profile devices, users can toggle work mode on and off. While work
- mode is turned off, the managed profile is temporarily shut down. Work
- profile apps, background sync, and notifications are all disabled, including
- the profile owner app. While the work profile is disabled, the system
- displays a persistent status icon to remind users that they can't launch work
- apps. The system launcher indicates that work apps and widgets are not
- accessible.
-</p>
-
-<h2 id="always-on-vpn">Always-On VPN</h2>
-
-<p>
- Device owners and profile owners can require that work apps always connect to
- the network through a specified VPN. If owners set this requirement, the
- device automatically starts that VPN at boot time.
-</p>
-
-<p>
- Owners can require use of a VPN by calling the new
- <code>DevicePolicyManager.setAlwaysOnVpnPackage()</code> method. To find out
- if the owner has set a VPN requirement, call the new
- <code>DevicePolicyManager.GetAlwaysOnVpnPackage()</code> method.
-</p>
-
-<p>
- Because the system can directly bind VPN services without app interaction,
- VPN clients need to handle new entry points for always-on VPN. As before, you
- can find active services by using an intent filter that matches the action
- {@link android.net.VpnService android.net.VpnService}.
-</p>
-
-<p>
- Users can manually set an always-on VPN client that implement {@link
- android.net.VpnService} by using the <strong>Settings > More >
- VPN</strong> screen.
-</p>
-
-<h2 id="contacts">Contacts Integration with Work Profile</h2>
-
-<p>
- Profile owners can allow local search and directory lookup of work contacts
- from the primary user. For example, a user can access both personal and work
- directory contacts from their personal dialer or contacts application (if
- permitted by their profile administrator).
-</p>
-
-<p>
- Developers that leverage the Contact Provider can use the Enterprise Contacts
- API to access work profile directory entries from the primary user if allowed
- by policy:
-</p>
-
-<ul>
- <li><code>ContactsContract.Contacts.ENTERPRISE_CONTENT_FILTER_URI</code>
- </li>
-
- <li><code>ContactsContract.Phone.ENTERPRISE_CONTENT_FILTER_URI</code>
- </li>
-
- <li><code>ContactsContract.Email.ENTERPRISE_CONTENT_FILTER_URI</code>
- </li>
-
- <li><code>ContactsContract.Callable.ENTERPRISE_CONTENT_FILTER_URI</code>
- </li>
-
- <li><code>ContactsContract.Directory.ENTERPRISE_CONTENT_URI</code>
- </li>
-
- <li><code>ContactsContract.Directory.isEntepriseDirectoryId()</code>
- </li>
-</ul>
-
-<p>
- Profile owners can control the visibility of work contacts in the primary
- user using the following new methods:
-</p>
-
-<ul>
- <li>
- <code>DevicePolicyManager.setCrossProfileContactsSearchDisabled()</code>
- </li>
-
- <li>
- <code>DevicePolicyManager.getCrossProfileContactsSearchDisabled()</code>
- </li>
-</ul>
-
-<h2 id="remote-reboot">Remote Reboot</h2>
-
-<p>
- Device owners can remotely reboot devices. In some cases, devices deployed in
- public places inside enclosures can prevent access to the power button. If a
- device needs to be rebooted, administrators can do so using the new
- <code>DevicePolicyManager.reboot()</code> method.
-</p>
-
-<h2 id="disable-roaming">Disable Data Roaming</h2>
-
-<p>
- Device owners can disable data roaming using the new {@link
- android.os.UserManager} user restriction <code>DISALLOW_DATA_ROAMING</code>.
-</p>
-
-<h2 id="process-logging">Enterprise Process Logging</h2>
-
-<p>
- Device owners can identify suspicious activity by remotely tracking device
- activity, including app launches, adb activity, and screen unlocks. Process
- logs don’t require user consent. To retrieve logs, device owners enable
- device logging using <code>DevicePolicyManager.setSecurityLoggingEnabled()</code>.
-</p>
-
-<p>
- API changes include:
-</p>
-
-<ul>
-
- <li>
- The new class <code>android.app.admin.SecurityLog</code> and its
- methods
- </li>
-
- <li>
- <code>void DevicePolicyManager.setSecurityLoggingEnabled()</code>
- </li>
-
- <li>
- <code>boolean DevicePolicyManager.isSecurityLoggingEnabled()</code>
- </li>
-
- <li>
- <code>List<SecurityEvent>
- DevicePolicyManager.retrieveSecurityLogs()</code>
- </li>
-
- <li>
- <code>List<SecurityEvent>
- DevicePolicyManager.retrievePreRebootSecurityLogs()</code>
- </li>
-
- <li>
- <code>void DeviceAdminReceiver.onSecurityLogsAvailable()</code>
- </li>
-</ul>
-
-<h2 id="bug-reports">Remote Bug Reports</h2>
-
-<p>
- Device owners can remotely trigger and retrieve a bug report that contains a
- device state dump file, which allows forensic investigation of a known
- incident or compromised device. Due to the detailed nature of the bug report,
- user consent is required.
-</p>
-
-<p>
- Android N includes the following API additions to support this feature. For
- details, see the <a href="{@docRoot}preview/setup-sdk.html#docs-dl">N Preview SDK
- Reference</a>.
-</p>
-
-<ul>
- <li>
- <code>DevicePolicyManager.requestBugreport()</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.onBugreportFailed()</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.onBugreportShared()</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.onBugreportSharingDeclined()</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.BUGREPORT_FAILURE_FAILED_COMPLETING</code>
- </li>
-
- <li>
- <code>DeviceAdminReceiver.BUGREPORT_FAILURE_FILE_NO_LONGER_AVAILABLE</code>
- </li>
-</ul>
-
-<h2 id="remove-cert">Remove a Client Certificate</h2>
-
-<p>
- Profile owners and device owners can now remove client certificates that were
- installed through {@link android.app.admin.DevicePolicyManager#installKeyPair
- installKeyPair()} by calling the new method
- <code>DevicePolicyManager.removeKeyPair()</code>.
-</p>
-
-<h2 id="grant-cert-on-install">Grant Access to Client Certificate on
- Installation</h2>
-
-<p>
- If a profile owner or device owner grants a third-party app the ability to
- manage certificates, the app can grant itself access to certificates it
- installs without any intervention by the owner.
-</p>
-
-<p>
- The existing API for managing certificates is extended to include:
-</p>
-
-<ul>
- <li><code>DevicePolicyManager.installKeyPair()</code>
- </li>
-</ul>
-
-<h2 id="ui-policy">System UI Policy Transparency</h2>
-
-<p>
- Policies that affect the user experience or restrict user Settings are fully
- disclosed to the user, and profile owners and device owners can attribute the
- policy to their company’s IT department. In addition to a consistent “Action
- not allowed” message in Settings, IT administrators can set an
- organization-specific support message in device settings with the following
- new {@link android.app.admin.DevicePolicyManager} methods:
-</p>
-
-<ul>
- <li>
- <code>DevicePolicyManager.setShortSupportMessage()</code>
- </li>
-
- <li>
- <code>DevicePolicyManager.setLongSupportMessage()</code>
- </li>
-</ul>
-
-<h2 id="managed-configurations">Managed Configurations Enhancements</h2>
-
-<p>
- The device or profile owner can enable another application to manage
- configurations via the new
- <code>DevicePolicyManager.setApplicationRestrictionsManagingPackage()</code>
- method. The nominated application can check whether this permission has been
- granted by calling
- <code>DevicePolicyManager.isCallerApplicationRestrictionsManagingPackage()</code>.
-</p>
-
-<p>
- An application nominated to manage configurations can call {@link
- android.app.admin.DevicePolicyManager#setApplicationRestrictions
- setApplicationRestrictions()} and {@link
- android.app.admin.DevicePolicyManager#getApplicationRestrictions
- getApplicationRestrictions()} for any packages within that user or profile.
-</p>
-
-<h2 id="location-off">Location Off Switch</h2>
-
-<p>
- Users can disable location permissions for work apps while continuing to
- access location information in their personal apps. A separate location
- access switch in Location Settings allows users to deny location updates or
- last-location queries for apps running in the work profile.
-</p>
-
-<p>
- The top level location off switch disables location access for both the
- primary profile and the managed profile.
-</p>
-
-<h2 id="custom-provisioning">Customized Provisioning</h2>
-
-<p>
- An application can customize the profile owner and device owner provisioning
- flows with corporate colors and logos.
-</p>
-
-<dl>
- <dt>
- <code>DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR</code>
- </dt>
-
- <dd>
- Customizes flow color.
- </dd>
-
- <dt>
- <code>DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI</code>
- </dt>
-
- <dd>
- Customizes the flow with a corporate logo.
- </dd>
-</dl>
-
-<h2 id="multi-wifi-ca">Multiple Wi-Fi CA Certificates</h2>
-
-<p>
- Profile owners and device owners can set multiple CA certificates for a given
- Wi-Fi configuration. When corporate Wi-Fi networks have separate CAs for
- separate access points with the same SSID, IT administrators can include all
- relevant CAs in the Wi-Fi configuration using the new method
- <code>setCaCertificates()</code>.
-</p>
-
-<p>
- APIs added are:
-</p>
-
-<ul>
- <li>
- <code>WifiEnterpriseConfig.setCaCertificates()</code>
- </li>
-
- <li>
- <code>WifiEnterpriseConfig.getCaCertificates()</code>
- </li>
-</ul>
-
-<h2 id="custom-lock">Customized Lockscreen Message</h2>
-
-<p>
- Device owners can provide owner information to be shownon the lockscreen.
- This information takes precedence over the user lock screen message (if one is
- set). New {@link android.app.admin.DevicePolicyManager} methods are:
-</p>
-
-<ul>
- <li>
- <code>setDeviceOwnerLockScreenInfo()</code>
- </li>
-
- <li>
- <code>getDeviceOwnerLockScreenInfo()</code>
- </li>
-</ul>
-
-<h2 id="work-connectionservice">Work Profile ConnectionService</h2>
-
-<p>
- Profile owners can specify a work dialer application that uses a
- work-specific {@link android.telecom.ConnectionService} for the calling
- backend (calling accounts). The work dialer maintains a work-only call log
- and relies on work contacts only. Users have a consistent in-call UI
- experience regardless of dialing application. Incoming work calls to the work
- calling accounts are distinguished from personal incoming calls to the
- personal calling accounts.
-</p>
-
-<p>
- The dialer should check for the new flag
- <code>android.telecom.Call.PROPERTY_ENTERPRISE_CALL</code> to determine if a call
- is a work call. If a call is a work call, the dialer should indicate this,
- such as by adding a work badge.
-</p>
-
-<h2 id="lock-wp">Lock Down Wallpaper</h2>
-
-<p>
- A new user restriction (<code>DISALLOW_SET_WALLPAPER</code>) prevents the
- user from changing their wallpaper. The device owner or profile owner can
- still change the wallpaper, but they can only change the wallpaper for the
- user or profile they control. For example, a profile owner can’t change the
- wallpaper of the parent user, but a profile owner in the primary profile or
- device owner can. A profile owner or device owner that wants to change the
- wallpaper should check whether the the user or profile they manage has a
- wallpaper ({@link android.app.WallpaperManager#isWallpaperSupported
- isWallpaperSupported()}) and whether they are allowed to change it (with the
- new method <code>WallpaperManager.isWallpaperSettingAllowed()</code>)
-</p>
-
-<h2 id="lock-user-icon">Lock Down User Icon</h2>
-
-<p>
- A new user restriction (<code>DISALLOW_SET_USER_ICON</code>) prevents the
- user from changing their user icon. The user’s device owner or profile owner
- can still change the icon. However, a profile owner can only change the user
- icon for the profile it controls.
-</p>
-
-<h2 id="health-monitoring">Device Health Monitoring</h2>
-
-<p>
- A device owner or profile owner can use the new
- <code>HardwarePropertiesManager</code> interface to retrieve information
- about device health, such as CPU or GPU temperatures and CPU usage. The new
- monitoring interface is especially useful for monitoring unattended devices
- running in a remote location.
-</p>
diff --git a/docs/html/preview/features/background-optimization.jd b/docs/html/preview/features/background-optimization.jd
deleted file mode 100644
index 3e4c041..0000000
--- a/docs/html/preview/features/background-optimization.jd
+++ /dev/null
@@ -1,395 +0,0 @@
-page.title=Background Optimizations
-page.metaDescription=New restrictions to implicit broadcasts.
-page.keywords="android N", "implicit broadcasts", "job scheduler"
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>
- In this document
- </h2>
-
- <ol>
- <li>
- <a href="#connectivity-action">Restrictions on CONNECTIVITY_ACTION</a>
- </li>
-
- <li>
- <a href="#sched-jobs">Scheduling Network Jobs on Unmetered
- Connections</a>
- </li>
-
- <li>
- <a href="#monitor-conn">Monitoring Network Connectivity While the App
- is Running</a>
- </li>
-
- <li>
- <a href="#media-broadcasts">Restrictions on NEW_PICTURE and
- NEW_VIDEO</a>
- </li>
-
- <li>
- <a href="#new-jobinfo">New JobInfo methods</a>
- </li>
-
- <li>
- <a href="#new-jobparam">New JobParameter Methods</a>
- </li>
-
- <li>
- <a href="#further-optimization">Further Optimizing Your App</a>
- </li>
- </ol>
- </div>
-</div>
-
-<p>
- Background processes can be memory- and battery-intensive. For example, an
- implicit broadcast may start many background processes that have registered
- to listen for it, even if those processes may not do much work. This can have
- a substantial impact on both device performance and user experience.
-</p>
-
-<p>
- To alleviate this issue, Android N applies the following
- restrictions:
-</p>
-
-<ul>
- <li>Apps targeting the Preview do not receive {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION} broadcasts if they
- register to receive them in their manifest. Apps that are running can still
- listen for {@code CONNECTIVITY_CHANGE} on their main thread by registering a
- {@link android.content.BroadcastReceiver} with {@link
- android.content.Context#registerReceiver Context.registerReceiver()}.
- </li>
-
- <li>Apps cannot send or receive {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} or {@link
- android.hardware.Camera#ACTION_NEW_VIDEO} broadcasts. This optimization
- affects all apps, not only those targeting the Preview.
- </li>
-</ul>
-
-<p>
- If your app uses any of these intents, you should remove dependencies on
- them as soon as possible so that you can target Android N devices properly.
- The Android framework provides several solutions to mitigate the need for
- these implicit broadcasts. For example, {@link android.app.job.JobScheduler}
- and <a href=
- "https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
- {@code GcmNetworkManager}</a> provide robust mechanisms to schedule network
- operations when specified conditions, such as a connection to an unmetered
- network, are met. You can now also use {@link android.app.job.JobScheduler}
- to react to changes to content providers. {@link android.app.job.JobInfo}
- objects encapsulate the parameters that {@link android.app.job.JobScheduler}
- uses to schedule your job. When the conditions of the job are met, the system
- executes this job on your app's {@link android.app.job.JobService}.
-</p>
-
-<p>
- In this document, we will learn how to use alternative methods, such as
- {@link android.app.job.JobScheduler}, to adapt your app to these new
- restrictions.
-</p>
-
-<h2 id="connectivity-action">
- Restrictions on CONNECTIVITY_ACTION
-</h2>
-
-<p>
- Apps targeting the Android N do not receive {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION} broadcasts if they
- register to receive them in their manifest, and processes that depend on this
- broadcast will not start. This could pose a problem for apps that want
- to listen for network changes or perform bulk network activities when the
- device connects to an unmetered network. Several solutions to get around this
- restriction already exist in the Android framework, but choosing the right
- one depends on what you want your app to accomplish.
-</p>
-
-<p class="note">
- <strong>Note:</strong> A {@link android.content.BroadcastReceiver} registered with
- {@link android.content.Context#registerReceiver Context.registerReceiver()}
- continues to receive these broadcasts while the app is running.
-</p>
-
-<h3 id="sched-jobs">
- Scheduling Network Jobs on Unmetered Connections
-</h3>
-
-<p>
- When using the {@link android.app.job.JobInfo.Builder JobInfo.Builder} class
- to build your {@link android.app.job.JobInfo} object, apply the {@link
- android.app.job.JobInfo.Builder#setRequiredNetworkType
- setRequiredNetworkType()} method and pass {@link android.app.job.JobInfo
- JobInfo.NETWORK_TYPE_UNMETERED} as a job parameter. The following code sample
- schedules a service to run when the device connects to an unmetered
- network and is charging:
-</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>
- When the conditions for your job are met, your app receives a callback to run
- the {@link android.app.job.JobService#onStartJob onStartJob()} method in the
- specified {@code JobService.class}. To see more examples of {@link
- android.app.job.JobScheduler} implementation, see the <a href=
- "{@docRoot}samples/JobScheduler/index.html">JobScheduler sample app</a>.
-</p>
-
-<p>
- Applications that use GMSCore services, and target Android 5.0 (API level 21)
- or lower, can use <a href=
- "https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
- {@code GcmNetworkManager}</a> and specify {@code Task.NETWORK_STATE_UNMETERED}.
-</p>
-
-<h3 id="monitor-conn">
- Monitoring Network Connectivity While the App is Running
-</h3>
-
-<p>
- Apps that are running can still listen for {@code CONNECTIVITY_CHANGE} with a
- registered {@link android.content.BroadcastReceiver}. However, the {@link
- android.net.ConnectivityManager} API provides a more robust method to request
- a callback only when specified network conditions are met.
-</p>
-
-<p>
- {@link android.net.NetworkRequest} objects define the parameters of the
- network callback in terms of {@link android.net.NetworkCapabilities}. You
- create {@link android.net.NetworkRequest} objects with the {@link
- android.net.NetworkRequest.Builder NetworkRequest.Builder} class. {@link
- android.net.ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest,
- android.net.ConnectivityManager.NetworkCallback) registerNetworkCallback()}
- then passes the {@link android.net.NetworkRequest} object to the system. When
- the network conditions are met, the app receives a callback to execute the
- {@link android.net.ConnectivityManager.NetworkCallback#onAvailable
- onAvailable()} method defined in its {@link
- android.net.ConnectivityManager.NetworkCallback} class.
-</p>
-
-<p>
- The app continues to receive callbacks until either the app exits or it calls
- {@link android.net.ConnectivityManager#unregisterNetworkCallback
- unregisterNetworkCallback()}.
-</p>
-
-<h2 id="media-broadcasts">
- Restrictions on NEW_PICTURE and NEW_VIDEO
-</h2>
-
-<p>
- In the Android N, apps are not able to send or receive {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} or {@link
- android.hardware.Camera#ACTION_NEW_VIDEO} broadcasts. This restriction helps
- alleviate the performance and user experience impacts when several apps must
- wake up in order to process a new image or video. Android N
- extends {@link android.app.job.JobInfo} and {@link
- android.app.job.JobParameters} to provide an alternative solution.
-</p>
-
-<h3 id="new-jobinfo">
- New JobInfo methods
-</h3>
-
-<p>
- To trigger jobs on content URI changes, Android N extends
- the {@link android.app.job.JobInfo} API with the following methods:
-</p>
-
-<dl>
- <dt>
- {@code JobInfo.TriggerContentUri()}
- </dt>
-
- <dd>
- Encapsulates parameters required to trigger a job on content URI changes.
- </dd>
-
- <dt>
- {@code JobInfo.Builder.addTriggerContentUri()}
- </dt>
-
- <dd>
- Passes a {@code TriggerContentUri} object to {@link
- android.app.job.JobInfo}. A {@link android.database.ContentObserver}
- monitors the encapsulated content URI. If there are multiple {@code
- TriggerContentUri} objects associated with a job, the system provides a
- callback even if it reports a change in only one of the content URIs.
- </dd>
-
- <dd>
- Add the {@code TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS} flag to
- trigger the job if any descendants of the given URI change. This flag
- corresponds to the {@code notifyForDescendants} parameter passed to {@link
- android.content.ContentResolver#registerContentObserver
- registerContentObserver()}.
- </dd>
-</dl>
-
-<p class="note">
- <strong>Note:</strong> {@code TriggerContentUri()} cannot be used in
- combination with {@link android.app.job.JobInfo.Builder#setPeriodic
- setPeriodic()} or {@link android.app.job.JobInfo.Builder#setPersisted
- setPersisted()}. To continually monitor for content changes, schedule a new
- {@link android.app.job.JobInfo} before the app’s {@link
- android.app.job.JobService} finishes handling the most recent callback.
-</p>
-
-<p>
- The following sample code schedules a job to trigger when the system reports
- a change to the content 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>
- When the system reports a change in the specified content URI(s), your app
- receives a callback and a {@link android.app.job.JobParameters} object is
- passed to the {@link android.app.job.JobService#onStartJob onStartJob()}
- method in {@code MediaContentJob.class}.
-</p>
-
-<h3 id="new-jobparam">
- New JobParameter Methods
-</h3>
-
-<p>
- Android N also extends {@link android.app.job.JobParameters} to
- allow your app to receive useful information about what content authorities
- and URIs triggered the job:
-</p>
-
-<dl>
- <dt>
- {@code Uri[] getTriggeredContentUris()}
- </dt>
-
- <dd>
- Returns an array of URIs that have triggered the job. This will be {@code
- null} if either no URIs have triggered the job (for example, the job was
- triggered due to a deadline or some other reason), or the number of changed
- URIs is greater than 50.
- </dd>
-
- <dt>
- {@code String[] getTriggeredContentAuthorities()}
- </dt>
-
- <dd>
- Returns a string array of content authorities that have triggered the job.
- If the returned array is not {@code null}, use {@code getTriggeredContentUris()}
- to retrieve the details of which URIs have changed.
- </dd>
-</dl>
-
-<p>
- The following sample code overrides the {@link
- android.app.job.JobService#onStartJob JobService.onStartJob()} method and
- records the content authorities and URIs that have triggered the job:
-</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">
- Further Optimizing Your App
-</h2>
-
-<p>
- Optimizing your apps to run on low-memory devices, or in low-memory
- conditions, can improve performance and user experience. Removing
- dependencies on background services and statically-registered implicit
- broadcast receivers can help your app run better on such devices. Although
- Android N takes steps to reduce some of these issues, it is
- recommended that you optimize your app to run without the use of these
- background processes entirely.
-</p>
-
-<p>
- Android N introduces some additional <a href=
- "{@docRoot}tools/help/adb.html">Android Debug Bridge (ADB)</a> commands that
- you can use to test app behavior with those background processes disabled:
-</p>
-
-<ul>
- <li>To simulate conditions where implicit broadcasts and background services
- are unavailable, enter the following command:
- </li>
-
- <li style="list-style: none; display: inline">
-<pre class="no-pretty-print">
-{@code $ adb shell cmd appops set <package_name> RUN_IN_BACKGROUND ignore}
-</pre>
- </li>
-
- <li>To re-enable implicit broadcasts and background services, enter the
- following command:
- </li>
-
- <li style="list-style: none; display: inline">
-<pre class="no-pretty-print">
-{@code $ adb shell cmd appops set <package_name> RUN_IN_BACKGROUND allow}
-</pre>
- </li>
-</ul>
diff --git a/docs/html/preview/features/data-saver.jd b/docs/html/preview/features/data-saver.jd
deleted file mode 100644
index abc47ea..0000000
--- a/docs/html/preview/features/data-saver.jd
+++ /dev/null
@@ -1,256 +0,0 @@
-page.title=Data Saver
-metaDescription=User-enabled data usage optimization.
-page.keywords="android N", "data usage", "metered network"
-page.image=images/cards/card-nyc_2x.jpg
-@jd:body
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>
- In this document
- </h2>
-
- <ol>
- <li>
- <a href="#status">Checking Data Saver Preferences</a>
- <ol>
- <li>
- <a href="#request-whitelist">Requesting whitelist permissions</a>
- </li>
- </ol>
- </li>
-
- <li>
- <a href="#monitor-changes">Monitoring Changes to Data Saver
- Preferences</a>
- </li>
-
- <li>
- <a href="#testing">Testing with Android Debug Bridge Commands</a>
- </li>
- </ol>
- </div>
-</div>
-
-<p>
- Over the life of a smartphone, the cost of a cellular data plan can easily
- exceed the cost of the device itself. In the N Developer Preview, users can
- enable Data Saver on a device-wide basis in order to use less data, whether
- roaming, near the end of the billing cycle, or on a small prepaid data pack.
-</p>
-
-<p>
- When a user enables Data Saver in <strong>Settings</strong> and the device is
- on a metered network, the system blocks background data usage and signals
- apps to use less data in the foreground wherever possible. Users can
- whitelist specific apps to allow background metered data usage even when Data
- Saver is turned on.
-</p>
-
-<p>
- The N Developer Preview extends the {@link android.net.ConnectivityManager}
- API to provide apps with a way to <a href="#status">retrieve the user’s Data
- Saver preferences</a> and <a href="#monitor-changes">monitor preference
- changes</a>. It is considered good practice for apps to check whether the
- user has enabled Data Saver and make an effort to limit foreground and
- background data usage.
-</p>
-
-<h2 id="status">
- Checking Data Saver Preferences
-</h2>
-
-<p>
- In the N Developer Preview, apps can use the {@link
- android.net.ConnectivityManager} API to determine what data usage
- restrictions are being applied. The {@code getRestrictBackgroundStatus()}
- method returns one of the following values:
-</p>
-
-<dl>
- <dt>
- {@code RESTRICT_BACKGROUND_STATUS_DISABLED}
- </dt>
-
- <dd>
- Data Saver is disabled.
- </dd>
-
- <dt>
- {@code RESTRICT_BACKGROUND_STATUS_ENABLED}
- </dt>
-
- <dd>
- The user has enabled Data Saver for this app. Apps should make an effort to limit data
- usage in the foreground and gracefully handle restrictions to background
- data usage.
- </dd>
-
- <dt>
- {@code RESTRICT_BACKGROUND_STATUS_WHITELISTED}
- </dt>
-
- <dd>
- The user has enabled Data Saver but the app is whitelisted. Apps should
- still make an effort to limit foreground and background data usage.
- </dd>
-</dl>
-
-<p>
- It is considered good practice to limit data usage whenever the device is
- connected to a metered network, even if Data Saver is disabled or the app
- is whitelisted. The following sample code uses {@link
- android.net.ConnectivityManager#isActiveNetworkMetered
- ConnectivityManager.isActiveNetworkMetered()} and {@code
- ConnectivityManager.getRestrictBackgroundStatus()} to determine how much data
- the app should use:
-</p>
-
-<pre>
-ConnectivityManager connMgr = (ConnectivityManager)
- getSystemService(Context.CONNECTIVITY_SERVICE);
-// Checks if the device is on a metered network
-if (connMgr.isActiveNetworkMetered()) {
- // Checks user’s Data Saver settings.
- switch (connMgr.getRestrictBackgroundStatus()) {
- case RESTRICT_BACKGROUND_STATUS_ENABLED:
- // Background data usage is blocked for this app. Wherever possible,
- // the app should also use less data in the foreground.
-
- case RESTRICT_BACKGROUND_STATUS_WHITELISTED:
- // The app is whitelisted. Wherever possible,
- // the app should use less data in the foreground and background.
-
- case RESTRICT_BACKGROUND_STATUS_DISABLED:
- // Data Saver is disabled. Since the device is connected to a
- // metered network, the app should use less data wherever possible.
- }
-} else {
- // The device is not on a metered network.
- // Use data as required to perform syncs, downloads, and updates.
-}
-</pre>
-
-<h3 id="request-whitelist">
- Requesting whitelist permissions
-</h3>
-
-<p>
- If your app needs to use data in the background, it can request whitelist
- permissions by sending a
- <code>Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS</code>
- intent containing a URI of your app's package name: for example,
- <code>package:MY_APP_ID</code>.
-</p>
-
-<p>
- Sending the intent and URI launches the <strong>Settings</strong> app and
- displays data usage settings for your app. The user can then decide whether
- to enable background data for your app. Before you send this intent, it is
- good practice to first ask the user if they want to launch the
- <strong>Settings</strong> app for the purpose of enabling background data
- usage.
-</p>
-
-<h2 id="monitor-changes">
- Monitoring Changes to Data Saver Preferences
-</h2>
-
-<p>
- Apps can monitor changes to Data Saver preferences by creating a {@link
- android.content.BroadcastReceiver} to listen for {@code
- ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED} and dynamically
- registering the receiver with {@link android.content.Context#registerReceiver
- Context.registerReceiver()}. When an app receives this broadcast, it should
- <a href="#status">check if the new Data Saver preferences affect its
- permissions</a> by calling {@code
- ConnectivityManager.getRestrictBackgroundStatus()}.
-</p>
-
-<p class="note">
- <strong>Note:</strong> The system only sends this broadcast to apps that
- dynamically register for them with {@link
- android.content.Context#registerReceiver Context.registerReceiver()}. Apps
- that register to receive this broadcast in their manifest will not receive
- them.
-</p>
-
-<h2 id="testing">
- Testing with Android Debug Bridge Commands
-</h2>
-
-<p>
- The <a href="{@docRoot}tools/help/adb.html">Android Debug Bridge (ADB)</a>
- provides a few commands that you can use to test your app in Data Saver
- conditions. You can check and configure network
- permissions or set wireless networks as metered to test your app on unmetered
- networks.
-</p>
-<dl>
- <dt>
- <code>$ adb shell dumpsys netpolicy</code>
- </dt>
-
- <dd>
- Generates a report that includes the current global background network
- restriction setting, package UIDs currently on a whitelist, and the network
- permissions of other known packages.
- </dd>
-
- <dt>
- <code>$ adb shell cmd netpolicy</code>
- </dt>
-
- <dd>
- Displays a full list of Network Policy Manager (netpolicy) commands.
- </dd>
-
- <dt>
- <code>$ adb shell cmd netpolicy set restrict-background
- <boolean></code>
- </dt>
-
- <dd>
- Enables or disables Data Saver mode when passing <code>true</code> or
- <code>false</code>, respectively.
- </dd>
-
- <dt>
- <code>$ adb shell cmd netpolicy add restrict-background-whitelist
- <UID></code>
- </dt>
-
- <dd>
- Adds the specified package UID to the whitelist to allow background metered
- data usage.
- </dd>
-
- <dt>
- <code>$ adb shell cmd netpolicy remove restrict-background-whitelist
- <UID></code>
- </dt>
-
- <dd>
- Removes the specified package UID from the whitelist to block background
- metered data usage while Data Saver is enabled.
- </dd>
-
- <dt>
- <code>$ adb shell cmd netpolicy list wifi-networks</code>
- </dt>
-
- <dd>
- Lists all wifi networks, displaying whether they're metered.
- </dd>
-
-
- <dt>
- <code>$ adb shell cmd netpolicy set metered-network <WIFI_SSID>
- true</code>
- </dt>
-
- <dd>
- Sets wifi with the specified SSID as metered, allowing you to simulate a
- metered network on an unmetered network.
- </dd>
-</dl>
\ No newline at end of file
diff --git a/docs/html/preview/features/direct-boot.jd b/docs/html/preview/features/direct-boot.jd
deleted file mode 100644
index 60f6141..0000000
--- a/docs/html/preview/features/direct-boot.jd
+++ /dev/null
@@ -1,220 +0,0 @@
-page.title=Direct Boot
-page.keywords=preview,sdk,direct boot
-page.tags=androidn
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>In this document</h2>
- <ol>
- <li><a href="#run">Requesting Access to Run During Direct Boot</a></li>
- <li><a href="#access">Accessing Device Encrypted Storage</a></li>
- <li><a href="#notification">Getting Notified of User Unlock</a></li>
- <li><a href="#migrating">Migrating Existing Data</a></li>
- <li><a href="#testing">Testing Your Encryption Aware App</a></li>
- <li><a href="#dpm">Checking Device Policy Encryption Status</a></li>
- </ol>
-</div>
-</div>
-
-<p>Android N runs in a secure, <i>Direct Boot</i> mode
-when the device has been powered on but the user has not unlocked the
-device. To support this, the system provides two storage locations for data:</p>
-
-<ul>
-<li><i>Credential encrypted storage</i>, which is the default storage location
-and only available after the user has unlocked the device.</li>
-<li><i>Device encrypted storage</i>, which is a storage location available both
-during Direct Boot mode and after the user has unlocked the device.</li>
-</ul>
-
-<p>By default, apps do not run during Direct Boot mode.
-If your app needs to take action during Direct Boot mode, you can register
-app components that should be run during this mode. Some common use cases
-for apps needing to run during Direct Boot mode include:</p>
-
-<ul>
-<li>Apps that have scheduled notifications, such as alarm clock
-apps.</li>
-<li>Apps that provide important user notifications, like SMS apps.</li>
-<li>Apps that provide accessibility services, like Talkback.</li>
-</ul>
-
-<p>If your app needs to access data while running in Direct Boot mode, use
-device encrypted storage. Device encrypted storage contains data
-encrypted with a key that is only available after a device has performed a
-successful verified boot.</p>
-
-<p>For data that should be encrypted with a key associated with user
-credentials, such as a PIN or password, use credential encrypted storage.
-Credential encrypted storage is only available after the user has successfully
-unlocked the device, up until when the user restarts the device again. If the
-user enables the lock screen after unlocking the device, this doesn't lock
-credential encrypted storage.</p>
-
-<h2 id="run">Requesting Access to Run During Direct Boot</h2>
-
-<p>Apps must register their components with the system before they
-can run during Direct Boot mode or access device encrypted
-storage. Apps register with the system by marking components as
-<i>encryption aware</i>. To mark your component as encryption aware, set the
-<code>android:directBootAware</code> attribute to true in your manifest.<p>
-
-<p>Encryption aware components can register to receive a
-<code>LOCKED_BOOT_COMPLETED</code> broadcast message from the
-system when the device has been restarted. At this point device encrypted
-storage is available, and your component can execute tasks that need to be
-run during Direct Boot mode, such as triggering a scheduled alarm.</p>
-
-<p>The following code snippet is an example of how to register a
-{@link android.content.BroadcastReceiver} as encryption aware, and add an
-intent filter for <code>LOCKED_BOOT_COMPLETED</code>, in the app manifest:</p>
-
-<pre>
-<receiver
- android:directBootAware="true" >
- ...
- <intent-filter>
- <action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
- </intent-filter>
-</receiver>
-</pre>
-
-<p>Once the user has unlocked the device, all components can access both the
-device encrypted storage as well as credential encrypted storage.</p>
-
-<h2 id="access">Accessing Device Encrypted Storage</h2>
-
-<p>To access device encrypted storage, create a second
-{@link android.content.Context} instance by calling
-<code>Context.createDeviceProtectedStorageContext()</code>. All storage API
-calls made using this context access the device encrypted storage. The
-following example accesses the device encrypted storage and opens an existing
-app data file:</p>
-
-<pre>
-Context directBootContext = appContext.createDeviceProtectedStorageContext();
-// Access appDataFilename that lives in device encrypted storage
-FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
-// Use inStream to read content...
-</pre>
-
-<p>Use device encrypted storage only for
-information that must be accessible during Direct Boot mode.
-Don't use device encrypted storage as a general-purpose encrypted store.
-For private user information, or encrypted data that isn't needed during
-Direct Boot mode, use credential encrypted storage.</p>
-
-<h2 id="notification">Getting Notified of User Unlock</h2>
-
-<p>When the user unlocks the device after restart, your app can switch to
-accessing credential encrypted storage and use regular system services that
-depend on user credentials.</p>
-
-<p>To get notified when the user unlocks the device after a reboot,
-register a {@link android.content.BroadcastReceiver} from a running component
-to listen for unlock notification messages. When the user unlocks the device
-after boot:
-</p>
-<ul>
-<li>If your app has foreground processes that need immediate notification,
-listen for the {@code ACTION_USER_UNLOCKED} message.</li>
-<li>If your app only uses background processes that can act on a delayed
-notification, listen for the
-{@link android.content.Intent#ACTION_BOOT_COMPLETED ACTION_BOOT_COMPLETED}
-message.</li>
-</ul>
-
-<p>If the user has unlocked the device, you can find out by calling
-<code>UserManager.isUserUnlocked()</code>.</p>
-
-<h2 id="migrating">Migrating Existing Data</h2>
-
-<p>If a user updates their device to use Direct Boot mode, you might have
-existing data that needs to get migrated to device encrypted storage. Use
-<code>Context.moveSharedPreferencesFrom()</code> and
-<code>Context.moveDatabaseFrom()</code> to migrate preference and database
-data between credential encrypted storage and device encrypted storage.</p>
-
-<p>Use your best judgment when deciding what data to migrate from credential
-encrypted storage to device encrypted storage. You should not migrate
-private user information, such as passwords or authorization tokens, to
-device encrypted storage. In some scenarios, you might need to manage
-separate sets of data in the two encrypted stores.</p>
-
-<h2 id="testing">Testing Your Encryption Aware App</h2>
-
-<p>Test your encryption aware app using the new Direct Boot mode. There are
-two ways to enable Direct Boot.</p>
-
-<p class="caution"><strong>Caution:</strong> Enabling Direct Boot
-wipes all user data on the device.</p>
-
-<p>On supported devices with Android N installed, enable
-Direct Boot by doing one of the following:</p>
-
-<ul>
-<li>On the device, enable <b>Developer options</b> if you haven't already by
-going to <b>Settings > About phone</b>, and tapping <b>Build number</b>
-seven times. Once the developer options screen is available, go to
-<b>Settings > Developer options</b> and select
-<b>Convert to file encryption</b>.</li>
-<li>Use the following adb shell commands to enable Direct Boot mode:
-<pre class="no-pretty-print">
-$ adb reboot-bootloader
-$ fastboot --wipe-and-use-fbe
-</pre>
-</li>
-</ul>
-
-<p>An emulated Direct Boot mode is also available, in case you need to switch
-modes on your test devices. Emulated mode should only be used during
-development and may cause data loss. To enable emulated Direct Boot mode,
-set a lock pattern on the device, choose "No thanks" if prompted for a
-secure start-up screen when setting a lock pattern, and then use the
-following adb shell command:</p>
-
-<pre class="no-pretty-print">
-$ adb shell sm set-emulate-fbe true
-</pre>
-
-<p>To turn off emulated Direct Boot mode, use the following command:</p>
-
-<pre class="no-pretty-print">
-$ adb shell sm set-emulate-fbe false
-</pre>
-
-<p>Using these commands causes the device to reboot.</p>
-
-<h2 id="dpm">Checking Device Policy Encryption Status</h2>
-
-<p>Device administration apps can use
-{@link android.app.admin.DevicePolicyManager#getStorageEncryptionStatus
-DevicePolicyManager.getStorageEncryptionStatus()} to check the current
-encryption status of the device. If your app is targeting an API level
-lower than Android N,
-{@link android.app.admin.DevicePolicyManager#getStorageEncryptionStatus
-getStorageEncryptionStatus()} will return
-{@link android.app.admin.DevicePolicyManager#ENCRYPTION_STATUS_ACTIVE
-ENCRYPTION_STATUS_ACTIVE} if the device is either using full-disk encryption,
-or file-based encryption with Direct Boot. In both of these cases, data is
-always stored encrypted at rest. If your app is targeting an API level of
-Android N or higher,
-{@link android.app.admin.DevicePolicyManager#getStorageEncryptionStatus
-getStorageEncryptionStatus()} will return
-{@link android.app.admin.DevicePolicyManager#ENCRYPTION_STATUS_ACTIVE
-ENCRYPTION_STATUS_ACTIVE} if the device is using full-disk encryption. It will
-return
-{@link android.app.admin.DevicePolicyManager#ENCRYPTION_STATUS_ACTIVE_PER_USER
-ENCRYPTION_STATUS_ACTIVE_PER_USER} if the device is using file-based encryption
-with Direct Boot.</p>
-
-<p>If you build a device administration app
-that targets Android N, make sure to check for both
-{@link android.app.admin.DevicePolicyManager#ENCRYPTION_STATUS_ACTIVE
-ENCRYPTION_STATUS_ACTIVE} and
-{@link android.app.admin.DevicePolicyManager#ENCRYPTION_STATUS_ACTIVE_PER_USER
-ENCRYPTION_STATUS_ACTIVE_PER_USER} to determine if the device is
-encrypted.</p>
diff --git a/docs/html/preview/features/icu4j-framework.jd b/docs/html/preview/features/icu4j-framework.jd
deleted file mode 100644
index 839c077..0000000
--- a/docs/html/preview/features/icu4j-framework.jd
+++ /dev/null
@@ -1,163 +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>In this document:</h2>
-<ol>
- <li><a href="#relation">Relationship to ICU4J</a></li>
- <li><a href="#migration">Migrating to android.icu APIs from ICU4J </a></li>
- <li><a href="#licence">Licensing</a></li>
-</ol>
-
-<h2>See Also</h2>
-<ol>
- <li>
- <a class="external-link" href=
- "http://userguide.icu-project.org">Documentation for ICU4J</a>
- </li>
-
- <li>
- <a class="external-link" href=
- "http://site.icu-project.org/#TOC-What-is-ICU-">Latest standards supported
- by ICU4J</a>
- </li>
-</ol>
-</div>
-</div>
-
-<p>
- ICU4J is an open-source, widely used set of Java libraries providing Unicode
- and globalization support for software applications. Android N
- exposes a subset of the ICU4J APIs in the Android framework for app developers
- to use under the {@code android.icu} package. These APIs use
- localization data present on the device. As a result, you can reduce your APK
- footprint by not compiling the ICU4J libraries into your APK; instead, you can
- simply call out to them in the framework. (In this case, you may want to provide
- <a href="{@docRoot}google/play/publishing/multiple-apks.html">multiple versions
- of your APK</a>, so users running versions of Android lower than Android N
- can download a version of the app that contains the ICU4J libraries.)
-</p>
-
-<p>
- This document begins by providing some basic information on the minimum
- Android API levels required to support these libraries. It then explains what
- you need to know about the Android-specific implementation of ICU4J. Finally,
- it tells you how to use the ICU4J APIs in the Android framework.
-</p>
-
-<h2 id="relation">Relationship to ICU4J</h2>
-
-<p>
- Android N exposes a subset of the ICU4J APIs via the
- <code>android.icu</code> package, rather than <code>com.ibm.icu</code>. The
- Android framework may choose not to
- expose ICU4J APIs for various reasons; for example, Android N does not expose
- some deprecated APIs or those that the ICU team have not yet declared as
- stable. As the ICU team deprecates APIs in the future, Android will also mark
- them as deprecated but will continue to include them.
-</p>
-
-<p class="table-caption"><strong>Table 1.</strong> ICU and CLDR versions used
- in Android N.</p>
-<table>
-<tr>
-<th>Android API level</th>
-<th>ICU version</th>
-<th>CLDR version</th>
-</tr>
-<tr>
-<td>Android N</td>
-<td>56</td>
-<td>28</td>
-</tr>
-</table>
-
-<p>Here are a few important things to note:</p>
-
-<ul>
-<li>The ICU4J Android framework APIs do not include all the ICU4J APIs.</li>
-<li>NDK developers should know that Android ICU4C is not supported.</li>
-<li>The APIs in the Android framework do not replace Android’s support for
-<a href="{@docRoot}guide/topics/resources/localization.html">localizing with
-resources</a>.</li>
-</ul>
-
-<h2 id="migration">Migrating to the android.icu package from com.ibm.icu</h2>
-
-<p>
- If you are already using the ICU4J APIs in your app, and the
- <code>android.icu</code> APIs meet your requirements, then migrating to
- the framework APIs requires you to change your Java imports
- from <code>com.ibm.icu</code> to <code>android.icu</code>. You may then
- remove your own copy of ICU4J files from the APK.
-</p>
-
-<p class="note">
- <b>Note</b>: The ICU4J framework APIs use the {@code android.icu}
- namespace instead of {@code com.ibm.icu}. This is to avoid namespace
- conflicts in APKs that contain their own {@code com.ibm.icu} libraries.
-</p>
-
-<h3 id="migrate-from-android">
- Migrating to android.icu APIs from other Android SDK APIs
-</h3>
-
-<p>
- Some classes in the <code>java</code> and<code>android</code> packages have
- equivalents to those found in ICU4J. However, ICU4J often provides broader
- support for standards and languages.
-</p>
-<p>Here are some examples to get you started:</p>
-<table>
-<tr>
-<th>Class</th>
-<th>Alternatives</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">Licensing</h2>
-
-<p>
- ICU4J is released under the ICU license. For details, see the <a class=
- "external-link" href=
- "http://userguide.icu-project.org/icufaq#TOC-How-is-the-ICU-licensed-">ICU
- User Guide.</a>
-</p>
diff --git a/docs/html/preview/features/key-attestation.jd b/docs/html/preview/features/key-attestation.jd
deleted file mode 100644
index 5be6dfa..0000000
--- a/docs/html/preview/features/key-attestation.jd
+++ /dev/null
@@ -1,858 +0,0 @@
-page.title=Key Attestation
-page.metaDescription=New support in Android N for verifying security properties of hardware-backed keys.
-page.keywords="android N", "security", "TEE", "hardware-backed", "keystore", "certificate", "key attestation"
-
-@jd:body
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>In this document</h2>
- <ol>
- <li><a href="#verifying">Retrieving and Verifying a Hardware-backed Key Pair</a></li>
- <li><a href="#certificate_schema">Certificate Extension Data Schema</a></li>
- </ol>
- </div>
-</div>
-
-<p>
- Key Attestation gives you more confidence that the keys you use in your app
- are stored in a device's hardware-backed keystore. The following sections
- describe how to verify the properties of hardware-backed keys and how to
- interpret the schema of the attestation certificate's extension data.
-</p>
-
-<p class="note">
- <strong>Note: </strong>Only a small number of devices running Android N
- support hardware-level key attestation; all other devices running Android N
- use software-level key attestation instead. Before you verify the properties
- of a device's hardware-backed keys in a production-level environment, you
- should make sure that the device supports hardware-level key attestation. To
- do so, you should check that the attestation certificate chain contains a root
- certificate that is signed by the Google attestation root key and that the
- <code>attestationSecurityLevel</code> element within the <a
- href="#certificate_schema_keydescription">key description</a> data structure
- is set to the TrustedEnvironment security level.
-</p>
-
-<h2 id="verifying">
- Retrieving and Verifying a Hardware-backed Key Pair
-</h2>
-
-<p>
- During key attestation, you specify the alias of a key pair. The attestation
- tool, in return, provides a certificate chain, which you can use to verify
- the properties of that key pair.
-</p>
-
-<p>
- The root certificate within this chain is signed using an attestation key,
- which the device manufacturer injects into the device’s hardware-backed
- keystore at the factory.
-</p>
-
-<p class="note">
- <strong>Note:</strong> On devices that ship with Android N and Google Play
- services, the root certificate is issued by Google. You should verify that
- this root certificate appears within Google’s list of root certificates.
-</p>
-
-<p>
- To implement key attestation, complete the following steps:
-</p>
-
-<ol>
- <li>
- Use a {@link java.security.KeyStore KeyStore} object's
- {@link java.security.KeyStore#getCertificateChain getCertificateChain()}
- method to get a reference to the chain of X.509 certificates associated with
- the hardware-backed keystore.
- </li>
-
- <li>
- <p>
- Check each certificate’s validity using a
- {@link java.security.cert.CRL CRL} object's
- {@link java.security.cert.CRL#isRevoked isRevoked()} method.
- </p>
-
- <p class="caution">
- <strong>Caution:</strong> Although you can complete this process within
- your app directly, it’s safer to check the certificates’ revocation lists
- on a separate server that you trust.
- </p>
- </li>
-
- <li>
- <p>
- Create an <code>Attestation</code> object, passing in the first element of
- the certificate chain as an argument:</p>
-
-<pre>
-// "certificates" contains the certificate chain associated with a specific key
-// pair in the device's hardware-backed keystore.
-X509Certificate attestationCert = (X509Certificate) certificates[0];
-Attestation hardwareKeyAttestation = new Attestation(attestationCert);
-</pre>
-
- <p>
- An attestation object extracts the extension data within this certificate
- and stores this information in a more accessible format. For more details
- about the schema of the extension data, see <a href=
- "#certificate_schema">Certificate Extension Data Schema</a>.
- </p>
- </li>
-
- <li>
- <p>
- Use the accessor methods within the <code>Attestation</code> class to
- retrieve the extension data from the certificate. These methods use the
- same names and structure hierarchy as in the certificate extension data
- schema.
- </p>
-
- <p>
- For example, to view the verified boot key for the device’s TEE, use the
- following method sequence:
- </p>
-
-<pre>
-// "hardwareKeyAttestation" contains the first element of the attestation
-// certificate chain.
-AuthorizationList teeAuthList = hardwareKeyAttestation.getTeeEnforced();
-RootOfTrust teeRootOfTrust = teeAuthList.getRootOfTrust();
-byte[] teeVerifiedBootKey = teeRootOfTrust.getVerifiedBootKey();
-</pre>
-
- </li>
-
- <li>
- <p>
- Compare the extension data from the <code>Attestation</code> object with
- the set of values that you expect the hardware-backed key to contain.
- </p>
-
- <p class="caution">
- <strong>Caution:</strong> Although you can complete this process within
- your app directly, it’s safer to check the certificate’s extension data
- on a separate server that you trust.
- </p>
- </li>
-</ol>
-
-<h2 id="certificate_schema">
- Certificate Extension Data Schema
-</h2>
-
-<p>
- Key attestation verifies the extension data that appears in the first
- certificate within the chain in a device’s hardware-backed keystore. The
- certificate stores the information according to the following ASN.1 schema:
-</p>
-
-<pre class="no-pretty-print">
-KeyDescription ::= SEQUENCE {
- attestationVersion INTEGER,
- attestationSecurityLevel SecurityLevel,
- keymasterVersion INTEGER,
- keymasterSecurityLevel SecurityLevel,
- attestationChallenge OCTET_STRING,
- <var>reserved OCTET_STRING</var>,
- softwareEnforced AuthorizationList,
- teeEnforced AuthorizationList,
-}
-
-SecurityLevel ::= ENUMERATED {
- Software (0),
- TrustedEnvironment (1),
-}
-
-AuthorizationList ::= SEQUENCE {
- purpose [1] EXPLICIT SET OF INTEGER OPTIONAL,
- algorithm [2] EXPLICIT INTEGER OPTIONAL,
- keySize [3] EXPLICIT INTEGER OPTIONAL,
- digest [5] EXPLICIT SET OF INTEGER OPTIONAL,
- padding [6] EXPLICIT SET OF INTEGER OPTIONAL,
- ecCurve [10] EXPLICIT INTEGER OPTIONAL,
- rsaPublicExponent [200] EXPLICIT INTEGER OPTIONAL,
- activeDateTime [400] EXPLICIT INTEGER OPTIONAL,
- originationExpireDateTime [401] EXPLICIT INTEGER OPTIONAL,
- usageExpireDateTime [402] EXPLICIT INTEGER OPTIONAL,
- noAuthRequired [503] EXPLICIT NULL OPTIONAL,
- userAuthType [504] EXPLICIT INTEGER OPTIONAL,
- authTimeout [505] EXPLICIT INTEGER OPTIONAL,
- allowWhileOnBody [506] EXPLICIT NULL OPTIONAL,
- allApplications [600] EXPLICIT NULL OPTIONAL,
- applicationId [601] EXPLICIT OCTET_STRING OPTIONAL,
- creationDateTime [701] EXPLICIT INTEGER OPTIONAL,
- origin [702] EXPLICIT INTEGER OPTIONAL,
- rollbackResistant [703] EXPLICIT NULL OPTIONAL,
- rootOfTrust [704] EXPLICIT RootOfTrust OPTIONAL,
- osVersion [705] EXPLICIT INTEGER OPTIONAL,
- osPatchLevel [706] EXPLICIT INTEGER OPTIONAL,
- attestationChallenge [708] EXPLICIT INTEGER OPTIONAL,
- attestationApplicationId [709] EXPLICIT OCTET_STRING OPTIONAL,
-}
-
-RootOfTrust ::= SEQUENCE {
- verifiedBootKey OCTET_STRING,
- deviceLocked BOOLEAN,
- verifiedBootState VerifiedBootState,
-}
-
-VerifiedBootState ::= ENUMERATED {
- Verified (0),
- SelfSigned (1),
- Unverified (2),
- Failed (3),
-}
-</pre>
-
-<p>
- The following list presents a description of each element within the schema:
-</p>
-
-<h3 id="certificate_schema_keydescription">
- KeyDescription
-</h3>
-
-<p>
- This sequence of values presents general information about the key pair being
- verified through key attestation and provides easy access to additional
- details.
-</p>
-
-<dl>
- <dt>
- <code>attestationVersion</code>
- </dt>
-
- <dd>
- The version of the key attestation feature. Should be set to 1.
- </dd>
-
- <dt>
- <code>attestationSecurity</code>
- </dt>
-
- <dd>
- <p>
- The <a href="#certificate_schema_securitylevel">security
- level</a> of the attestation.
- </p>
-
- <p class="caution">
- <strong>Warning:</strong> Although it is possible to attest keys that are
- stored in the Android system—that is, if the
- <code>attestationSecurity</code> value is set to Software—you
- cannot trust these attestations if the Android system becomes compromised.
- </p>
- </dd>
-
- <dt>
- <code>keymasterVersion</code>
- </dt>
-
- <dd>
- The version of the Keymaster hardware abstraction layer (HAL). Use 0 to
- represent version 0.2 or 0.3, 1 to represent version 1.0, and 2 to represent
- version 2.0.
- </dd>
-
- <dt>
- <code>keymasterSecurity</code>
- </dt>
-
- <dd>
- The <a href="#certificate_schema_securitylevel">security
- level</a> of the Keymaster implementation.
- </dd>
-
- <dt>
- <code>attestationChallenge</code>
- </dt>
-
- <dd>
- The challenge string associated with a key pair that is verified using key
- attestation.
- </dd>
-
- <dt>
- <code><var>reserved</var></code>
- </dt>
-
- <dd>
- Only system apps use this value. In all other apps, this value is empty.
- </dd>
-
- <dt>
- <code>softwareEnforced</code>
- </dt>
-
- <dd>
- Optional. The Keymaster <a href=
- "#certificate_schema_authorizationlist">authorization
- list</a> that is enforced by the Android system, not by the device’s TEE.
- </dd>
-
- <dt>
- <code>teeEnforced</code>
- </dt>
-
- <dd>
- Optional. The Keymaster <a href=
- "#certificate_schema_authorizationlist">authorization
- list</a> that is enforced by the device’s TEE.
- </dd>
-</dl>
-
-<h3 id="certificate_schema_securitylevel">
- SecurityLevel
-</h3>
-
-<p>
- This data structure indicates the extent to which a software feature, such as
- a key pair, is protected based on its location within the device.
-</p>
-
-<p>
- Because the data structure is an enumeration, it takes on exactly one of the
- following values:
-</p>
-
-<dl>
- <dt>
- Software
- </dt>
-
- <dd>
- The logic for creating and managing the feature is implemented in the
- Android system. For the purposes of creating and storing key pairs, this
- location is less secure than the TEE but is more secure than your app's
- process space.
- </dd>
-
- <dt>
- TrustedEnvironment
- </dt>
-
- <dd>
- The logic for creating and managing the feature is implemented in secure
- hardware, such as a TEE. For the purposes of creating and storing key pairs,
- this location is more secure because secure hardware is highly resistant to
- remote compromise.
- </dd>
-</dl>
-
-<h3 id="certificate_schema_authorizationlist">
- AuthorizationList
-</h3>
-
-<p>
- This data structure contains the key pair’s properties themselves, as defined
- in the Keymaster hardware abstraction layer (HAL). You compare these values
- to the device’s current state or to a set of expected values to verify that a
- key pair is still valid for use in your app.
-</p>
-
-<p>
- Each field name corresponds to a similarly-named Keymaster tag. For example,
- the <code>keySize</code> field in an authorization list corresponds to the
- <code>KM_TAG_KEY_SIZE</code> Keymaster tag.
-</p>
-
-<p>
- Each field in the following list is optional:
-</p>
-
-<dl>
- <dt>
- <code>purpose</code>
- </dt>
-
- <dd>
- Corresponds to the <code><a href=
- "https://source.android.com/security/keystore/implementer-ref.html#km_tag_purpose">
- KM_TAG_PURPOSE</a></code> Keymaster tag, which uses a tag ID value of 1.
- </dd>
-
- <dt>
- <code>algorithm</code>
- </dt>
-
- <dd>
- <p>
- Corresponds to the <code><a href=
- "https://source.android.com/security/keystore/implementer-ref.html#km_tag_algorithm">
- KM_TAG_ALGORITHM</a></code> Keymaster tag, which uses a tag ID value of
- 2.
- </p>
-
- <p>
- When an <code>AuthorizationList</code> object is associated with key
- attestation, this value is always <code>KM_ALGORITHM_RSA</code> or
- <code>KM_ALGORITHM_EC</code>.
- </p>
- </dd>
-
- <dt>
- <code>keySize</code>
- </dt>
-
- <dd>
- Corresponds to the <code><a href=
- "https://source.android.com/security/keystore/implementer-ref.html#km_tag_key_size">
- KM_TAG_KEY_SIZE</a></code> Keymaster tag, which uses a tag ID value of 3.
- </dd>
-
- <dt>
- <code>digest</code>
- </dt>
-
- <dd>
- Corresponds to the <code><a href=
- "https://source.android.com/security/keystore/implementer-ref.html#km_tag_digest">
- KM_TAG_DIGEST</a></code> Keymaster tag, which uses a tag ID value of 5.
- </dd>
-
- <dt>
- <code>padding</code>
- </dt>
-
- <dd>
- Corresponds to the <code><a href=
- "https://source.android.com/security/keystore/implementer-ref.html#km_tag_padding">
- KM_TAG_PADDING</a></code> Keymaster tag, which uses a tag ID value of 6.
- </dd>
-
- <dt>
- <code>ecCurve</code>
- </dt>
-
- <dd>
- <p>
- Corresponds to the <code>KM_TAG_EC_CURVE</code> Keymaster tag, which uses
- a tag ID value of 10.
- </p>
-
- <p>
- The set of parameters used to generate an elliptic curve (EC) key pair,
- which uses ECDSA for signing and verification, within the Android system
- keystore.
- </p>
- </dd>
-
- <dt>
- <code>rsaPublicExponent</code>
- </dt>
-
- <dd>
- Corresponds to the <code><a href=
- "https://source.android.com/security/keystore/implementer-ref.html#km_tag_rsa_public_exponent">
- KM_TAG_RSA_PUBLIC_EXPONENT</a></code> Keymaster tag, which uses a tag ID
- value of 200.
- </dd>
-
- <dt>
- <code>activeDateTime</code>
- </dt>
-
- <dd>
- Corresponds to the <code><a href=
- "https://source.android.com/security/keystore/implementer-ref.html#km_tag_active_datetime">
- KM_TAG_ACTIVE_DATETIME</a></code> Keymaster tag, which uses a tag ID value
- of 400.
- </dd>
-
- <dt>
- <code>originationExpireDateTime</code>
- </dt>
-
- <dd>
- Corresponds to the <code><a href=
- "https://source.android.com/security/keystore/implementer-ref.html#km_tag_origination_expire_datetime">
- KM_TAG_ORIGINATION_EXPIRE_DATETIME</a></code> Keymaster tag, which uses a
- tag ID value of 401.
- </dd>
-
- <dt>
- <code>usageExpireDateTime</code>
- </dt>
-
- <dd>
- Corresponds to the <code><a href=
- "https://source.android.com/security/keystore/implementer-ref.html#km_tag_usage_expire_datetime">
- KM_TAG_USAGE_EXPIRE_DATETIME</a></code> Keymaster tag, which uses a tag ID
- value of 402.
- </dd>
-
- <dt>
- <code>noAuthRequired</code>
- </dt>
-
- <dd>
- <p>
- Corresponds to the <code><a href=
- "https://source.android.com/security/keystore/implementer-ref.html#km_tag_no_auth_required">
- KM_TAG_NO_AUTH_REQUIRED</a></code> Keymaster tag, which uses a tag ID
- value of 503.
- </p>
-
- <p>
- When an <code>AuthorizationList</code> object is associated with key
- attestation, this value is always true.
- </p>
- </dd>
-
- <dt>
- <code>userAuthType</code>
- </dt>
-
- <dd>
- Corresponds to the <code><a href=
- "https://source.android.com/security/keystore/implementer-ref.html#km_tag_user_auth_type">
- KM_TAG_USER_AUTH_TYPE</a></code> Keymaster tag, which uses a tag ID value
- of 504.
- </dd>
-
- <dt>
- <code>authTimeout</code>
- </dt>
-
- <dd>
- Corresponds to the <code><a href=
- "https://source.android.com/security/keystore/implementer-ref.html#km_tag_auth_timeout">
- KM_TAG_AUTH_TIMEOUT</a></code> Keymaster tag, which uses a tag ID value of
- 505.
- </dd>
-
- <dt>
- <code>allowWhileOnBody</code>
- </dt>
-
- <dd>
- <p>
- Corresponds to the <code>KM_TAG_ALLOW_WHILE_ON_BODY</code> Keymaster tag,
- which uses a tag ID value of 506.
- </p>
-
- <p>
- Allows the key to be used after its authentication timeout period if the
- user is still wearing the device on their body. Note that a secure
- on-body sensor determines whether the device is being worn on the user’s
- body.
- </p>
-
- <p>
- When an <code>AuthorizationList</code> object is associated with key
- attestation, this value is always true.
- </p>
- </dd>
-
- <dt>
- <code>allApplications</code>
- </dt>
-
- <dd>
- <p>
- Corresponds to the <code>KM_TAG_ALL_APPLICATIONS</code> Keymaster tag,
- which uses a tag ID value of 600.
- </p>
-
- <p>
- Indicates whether all apps on a device can access the key pair.
- </p>
-
- <p>
- When an <code>AuthorizationList</code> object is associated with key
- attestation, this value is always true.
- </p>
- </dd>
-
- <dt>
- <code>applicationId</code>
- </dt>
-
- <dd>
- Corresponds to the <code><a href=
- "https://source.android.com/security/keystore/implementer-ref.html#km_tag_application_id">
- KM_TAG_APPLICATION_ID</a></code> Keymaster tag, which uses a tag ID value
- of 601.
- </dd>
-
- <dt>
- <code>creationDateTime</code>
- </dt>
-
- <dd>
- Corresponds to the <code><a href=
- "https://source.android.com/security/keystore/implementer-ref.html#km_tag_creation_datetime">
- KM_TAG_CREATION_DATETIME</a></code> Keymaster tag, which uses a tag ID
- value of 701.
- </dd>
-
- <dt>
- <code>origin</code>
- </dt>
-
- <dd>
- <p>
- Corresponds to the <code><a href=
- "https://source.android.com/security/keystore/implementer-ref.html#km_tag_origin">
- KM_TAG_ORIGIN</a></code> Keymaster tag, which uses a tag ID value of 702.
- </p>
-
- <p>
- When an <code>AuthorizationList</code> object is associated with key
- attestation, this value is usually set to
- <code>KM_ORIGIN_GENERATED</code>. If the attestation uses Keymaster
- version 0.2 or 0.3, however, the origin may be set to
- <code>KM_ORIGIN_UNKNOWN</code> instead.
- </p>
- </dd>
-
- <dt>
- <code>rollbackResistant</code>
- </dt>
-
- <dd>
- Corresponds to the <code><a href=
- "https://source.android.com/security/keystore/implementer-ref.html#km_tag_rollback_resistant">
- KM_TAG_ROLLBACK_RESISTANT</a></code> Keymaster tag, which uses a tag ID
- value of 703.
- </dd>
-
- <dt>
- <code>rootOfTrust</code>
- </dt>
-
- <dd>
- <p>
- Corresponds to the <code><a href=
- "https://source.android.com/security/keystore/implementer-ref.html#km_tag_root_of_trust">
- KM_TAG_ROOT_OF_TRUST</a></code> Keymaster tag, which uses a tag ID value
- of 704.
- </p>
-
- <p>
- For more details, see the section describing the <code><a href=
- "#certificate_schema_rootoftrust">RootOfTrust</a></code>
- data structure.
- </p>
- </dd>
-
- <dt>
- <code>osVersion</code>
- </dt>
-
- <dd>
- <p>
- Corresponds to the <code>KM_TAG_OS_VERSION</code> Keymaster tag, which
- uses a tag ID value of 705.
- </p>
-
- <p>
- The version of the Android operating system associated with the
- Keymaster, specified as a six-digit integer. For example, version 6.0.1
- is represented as 060001.
- </p>
-
- <p>
- Only Keymaster version 1.0 or higher includes this value in the
- authorization list.
- </p>
- </dd>
-
- <dt>
- <code>osPatchLevel</code>
- </dt>
-
- <dd>
- <p>
- Corresponds to the <code>KM_TAG_PATCHLEVEL</code> Keymaster tag, which
- uses a tag ID value of 706.
- </p>
-
- <p>
- The month and year associated with the security patch that is being used
- within the Keymaster, specified as a six-digit integer. For example, the
- June 2016 patch is represented as 201606.
- </p>
-
- <p>
- Only Keymaster version 1.0 or higher includes this value in the
- authorization list.
- </p>
- </dd>
-
- <dt>
- <code>attestationChallenge</code>
- </dt>
-
- <dd>
- <p>
- Corresponds to the <code>KM_TAG_ATTESTATION_CHALLENGE</code> Keymaster
- tag, which uses a tag ID value of 708.
- </p>
-
- <p>
- The challenge string associated with the key pair that is defined in the
- Keymaster.
- </p>
- </dd>
-
- <dt>
- <code>attestationApplicationId</code>
- </dt>
-
- <dd>
- <p>
- Corresponds to the <code>KM_TAG_ATTESTATION_APPLICATION_ID</code>
- Keymaster tag, which uses a tag ID value of 709.
- </p>
-
- <p>
- The unique ID of the attestation certificate that signed the key pair
- that is in the Keymaster.
- </p>
- </dd>
-</dl>
-
-<h3 id="certificate_schema_rootoftrust">
- RootOfTrust
-</h3>
-
-<p>
- This collection of values defines key information about the device’s status.
-</p>
-
-<p>
- Each field in the following list is required:
-</p>
-
-<dl>
- <dt>
- <code>verifiedBootKey</code>
- </dt>
-
- <dd>
- <p>
- A secure hash of the key that verifies the system image. It is recommended
- that you use the SHA-256 algorithm for this hash.
- </p>
- </dd>
-
- <dt>
- <code>deviceLocked</code>
- </dt>
-
- <dd>
- True if the device’s bootloader is locked, which enables Verified Boot
- checking and prevents an unsigned device image from being flashed onto the
- device. For more information about this feature, see the <a class=
- "external-link" href=
- "https://source.android.com/security/verifiedboot/verified-boot.html">Verifying
- Boot</a> documentation.
- </dd>
-
- <dt>
- <code>verifiedBootState</code>
- </dt>
-
- <dd>
- The <a href="#certificate_schema_verifiedbootstate">boot
- state</a> of the device, according to the Verified Boot feature.
- </dd>
-
- <dt>
- <code>osVersion</code>
- </dt>
-
- <dd>
- The current version of the Android operating system on the device,
- specified as a six-digit integer. For example, version 6.0.1 is represented
- as 060001.
- </dd>
-
- <dt>
- <code>patchMonthYear</code>
- </dt>
-
- <dd>
- The month and year associated with the security patch that is currently
- installed on the device, specified as a six-digit integer. For example, the
- June 2016 patch is represented as 201606.
- </dd>
-</dl>
-
-<h3 id="certificate_schema_verifiedbootstate">
- VerifiedBootState
-</h3>
-
-<p>
- This data structure provides the device’s current boot state, which
- represents the level of protection provided to the user and to apps after the
- device finishes booting. For more information about this feature, see the
- <a class="external-link" href=
- "https://source.android.com/security/verifiedboot/verified-boot.html#boot_state">
- Boot State</a> section within the Verifying Boot documentation.
-</p>
-
-<p>
- This data structure is an enumeration, so it takes on exactly one of the
- following values:
-</p>
-
-<dl>
- <dt>
- Verified
- </dt>
-
- <dd>
- <p>
- Indicates a full chain of trust, which includes the bootloader, the boot
- partition, and all verified partitions.
- </p>
-
- <p>
- When the device is in this boot state, the <code>verifiedBootKey</code> is
- the hash of the device-embedded certificate, which the device manufacturer
- adds to the device's ROM at the factory.
- </p>
- </dd>
-
- <dt>
- SelfSigned
- </dt>
-
- <dd>
- <p>
- Indicates that the device-embedded certificate has verified the device’s
- boot partition and that the signature is valid.
- </p>
-
- <p>
- When the device is in this boot state, the <code>verifiedBootKey</code> is
- the hash of a user-installed certificate, which signs a boot partition
- that the user adds to the device in place of the original,
- manufacturer-provided boot partition.
- </p>
- </dd>
-
- <dt>
- Unverified
- </dt>
-
- <dd>
- Indicates that the user can modify the device freely. Therefore, the user is
- responsible for verifying the device’s integrity.
- </dd>
-
- <dt>
- Failed
- </dt>
-
- <dd>
- Indicates that the device has failed verification. The attestation
- certificate should never use this value for <code>VerifiedBootState</code>.
- </dd>
-</dl>
diff --git a/docs/html/preview/features/multi-window.jd b/docs/html/preview/features/multi-window.jd
deleted file mode 100644
index ca5bd0d..0000000
--- a/docs/html/preview/features/multi-window.jd
+++ /dev/null
@@ -1,599 +0,0 @@
-page.title=Multi-Window Support
-page.metaDescription=New support in Android N for showing more than one app at a time.
-page.keywords="multi-window", "android N", "split screen", "free-form"
-
-@jd:body
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>In this document</h2>
- <ol>
- <li><a href="#overview">Overview</a></li>
- <li><a href="#lifecycle">Multi-Window Lifecycle</a></li>
- <li><a href="#configuring">Configuring Your App for Multi-Window
- Mode</a></li>
- <li><a href="#running">Running Your App in Multi-Window Mode</a></li>
- <li><a href="#testing">Testing Your App's Multi-Window Support</a></li>
- </ol>
- <h2>See Also</h2>
- <ol>
- <li><a class="external-link"
- href="https://github.com/googlesamples/android-MultiWindowPlayground">Multi-Window
- Playground sample app</a></li>
- <li><a class="external-link"
- href="https://medium.com/google-developers/5-tips-for-preparing-for-multi-window-in-android-n-7bed803dda64"
- >Five Tips for Preparing for Multi-Window in Android N</a></li>
- </ol>
- </div>
-</div>
-
-<p>
- Android N adds support for displaying more than one app at the
- same time. On handheld devices, two apps can run side-by-side or
- one-above-the-other in <em>split-screen</em> mode. On TV devices, apps can
- use <em>picture-in-picture</em> mode to continue video playback while users
- are interacting with another app.
-</p>
-
-<p>
- If you build your app with the N Preview SDK, you can configure how your app
- handles multi-window display. For example, you can specify your activity's
- minimum allowable dimensions. You can also disable multi-window display for
- your app, ensuring that the system only shows your app in full-screen
- mode.
-</p>
-
-<h2 id="overview">Overview</h2>
-
-<p>
- Android N allows several apps to share the screen at once. For
- example, a user could split the screen, viewing a web page on the left side
- while composing an email on the right side. The user experience depends on
- the device:
-</p>
-
-<ul>
- <li>Handheld devices running Android N offer split-screen
- mode. In this mode, the system fills the screen with two apps, showing them
- either side-by-side or one-above-the-other. The user can drag the dividing
- line separating the two to make one app larger and the other smaller.
- </li>
-
- <li>On Nexus Player running Android N, apps can put themselves
- in <a href="picture-in-picture.html">picture-in-picture mode</a>, allowing
- them to continue showing content while the user browses or interacts with
- other apps.
- </li>
-
- <li>Manufacturers of larger devices can choose to enable freeform
- mode, in which the user can freely resize each activity. If the
- manufacturer enables this feature, the device offers freeform mode in addition
- to split-screen mode.
- </li>
-</ul>
-
-<img src="{@docRoot}preview/images/mw-splitscreen.png" alt="" width="650"
- srcset="{@docRoot}preview/images/mw-splitscreen.png 1x,
- {@docRoot}preview/images/mw-splitscreen_2x.png 2x,"
- id="img-split-screen" />
-<p class="img-caption">
- <strong>Figure 1.</strong> Two apps running side-by-side in split-screen mode.
-</p>
-
-<p>
- The user can switch into multi-window mode in the following ways:
-</p>
-
-<ul>
- <li>If the user opens the <a href="{@docRoot}guide/components/recents.html">Overview
- screen</a> and performs a long press on an
- activity title, they can drag that activity to a highlighted portion of the
- screen to put the activity in multi-window mode.
- </li>
-
- <li>If the user performs a long press on the Overview button, the device puts
- the current activity in multi-window mode, and opens the Overview screen to
- let the user choose another activity to share the screen.
- </li>
-</ul>
-
-<p>
- Users can <a href="{@docRoot}guide/topics/ui/drag-drop.html">drag and
- drop</a> data from one activity to another while the activities are sharing
- the screen. (Previously, users could only drag and drop data within a single
- activity.)
-</p>
-
-<h2 id="lifecycle">Multi-Window Lifecycle</h2>
-
-<p>
- Multi-window mode does not change the <a href=
- "{@docRoot}training/basics/activity-lifecycle/index.html">activity
- lifecycle</a>.
-</p>
-
-<p>
- In multi-window mode, only the activity the user has most recently interacted
- with is active at a given time. This activity is considered <em>topmost</em>.
- All other activities are in the paused state, even if they are visible.
- However, the system gives these paused-but-visible activities higher priority
- than activities that are not visible. If the user interacts with one of the
- paused activities, that activity is resumed, and the previously topmost
- activity is paused.
-</p>
-
-<p class="note">
- <strong>Note:</strong> In multi-window mode, an app can be in the paused
- state and still be visible to the user. An app might need to continue its
- activities even while paused. For example, a video-playing app that is in
- paused mode but is visible should continue showing its video. For this
- reason, we recommend that activities that play video <em>not</em> pause the
- video in their {@link android.app.Activity#onPause onPause()} handlers.
- Instead, they should pause video in {@link android.app.Activity#onStop
- onStop()}, and resume playback in {@link android.app.Activity#onStart
- onStart()}.
-</p>
-
-<p>
- When the user puts an app into multi-window mode, the system notifies the
- activity of a configuration change, as specified in <a href=
- "{@docRoot}guide/topics/resources/runtime-changes.html">Handling Runtime
- Changes</a>. This also happens when the user resizes the app, or puts the app
- back into full-screen mode.
- Essentially, this change has the same activity-lifecycle
- implications as when the system notifies the app that the device has switched
- from portrait to landscape mode, except that the device dimensions are
- changed instead of just being swapped. As discussed in <a href=
- "{@docRoot}guide/topics/resources/runtime-changes.html">Handling Runtime
- Changes</a>, your activity can handle the configuration change itself, or it
- can allow the system to destroy the activity and recreate it with the new
- dimensions.
-</p>
-
-<p>
- If the user is resizing a window and makes it larger in either dimension, the
- system resizes the activity to match the user action and issues <a href=
- "{@docRoot}guide/topics/resources/runtime-changes.html">runtime changes</a>
- as needed. If the app lags behind in drawing in newly-exposed areas, the
- system temporarily fills those areas with the color specified by the {@link
- android.R.attr#windowBackground windowBackground} attribute or by the default
- <code>windowBackgroundFallback</code> style attribute.
-</p>
-
-<h2 id="configuring">Configuring Your App for Multi-Window Mode</h2>
-
-<p>
- If your app targets Android N, you can configure how and
- whether your app's activities support multi-window display. You can set
- attributes in your manifest to control both size and layout.
- 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.
-</p>
-
-<p class="note">
- <strong>Note:</strong> If you build a multi-orientation app with a version of the
- SDK lower than Android N, and the user uses the app in
- multi-window mode, the system forcibly resizes the app. The system presents a
- dialog box warning the user that the app may behave unexpectedly. The system
- does <em>not</em> resize fixed-orientation apps; if
- the user attempts to open a fixed-orientation app under multi-window mode,
- the app takes over the whole screen.
-</p>
-
-<h4 id="resizeableActivity">android:resizeableActivity</h4>
-<p>
- Set this attribute in your manifest's <code><activity></code> or
- <code><application></code> node to enable or disable multi-window
- display:
-</p>
-
-<pre>
-android:resizeableActivity=["true" | "false"]
-</pre>
-
-<p>
- If this attribute is set to true, the activity can be launched in
- split-screen and freeform modes. If the attribute is set to false, the
- activity does not support multi-window mode. If this value is false, and the
- user attempts to launch the activity in multi-window mode, the activity takes
- over the full screen.
-</p>
-
-<p>
- If your app targets Android N, but you do not specify a value
- for this attribute, the attribute's value defaults to true.
-</p>
-
-<h4 id="supportsPictureInPicture">android:supportsPictureInPicture</h4>
-
-<p>
- Set this attribute in your manifest's <code><activity></code> node to
- indicate whether the activity supports picture-in-picture display. This
- attribute is ignored if <code>android:resizeableActivity</code> is false.
-</p>
-
-<pre>
-android:supportsPictureInPicture=["true" | "false"]
-</pre>
-
-<h3 id="layout">Layout attributes</h3>
-
-<p>
- With Android N, the <code><layout></code> manifest element
- supports several attributes that affect how an activity behaves in
- multi-window mode:
-</p>
-
-<dl>
- <dt>
- <code>android:defaultWidth</code>
- </dt>
-
- <dd>
- Default width of the activity when launched in freeform mode.
- </dd>
-
- <dt>
- <code>android:defaultHeight</code>
- </dt>
-
- <dd>
- Default height of the activity when launched in freeform mode.
- </dd>
-
- <dt>
- <code>android:gravity</code>
- </dt>
-
- <dd>
- Initial placement of the activity when launched in freeform mode. See the
- {@link android.view.Gravity} reference for suitable values.
- </dd>
-
- <dt>
- <code>android:minHeight</code>, <code>android:minWidth</code>
- </dt>
-
- <dd>
- Minimum height and minimum width for the activity in both split-screen
- and freeform modes. If the user moves the divider in split-screen mode
- to make an activity smaller than the specified minimum, the system crops
- the activity to the size the user requests.
- </dd>
-</dl>
-
-<p>
- For example, the following code shows how to specify an activity's default
- size and location, and its minimum size, when the activity is displayed in
- freeform mode:
-</p>
-
-<pre>
-<activity android:name=".MyActivity">
- <layout android:defaultHeight="500dp"
- android:defaultWidth="600dp"
- android:gravity="top|end"
- android:minHeight="450dp"
- android:minWidth="300dp" />
-</activity>
-</pre>
-
-<h2 id="running">Running Your App in Multi-Window Mode</h2>
-
-<p>
- Android N offers new functionality to support apps that can run
- in multi-window mode.
-</p>
-
-<h3 id="disabled-features">Disabled features in multi-window mode</h3>
-
-<p>
- Certain features are disabled or ignored when a device is in multi-window
- mode, because they don’t make sense for an activity which may be sharing the
- device screen with other activities or apps. Such features include:
-
-<ul>
- <li>Some <a href="{@docRoot}training/system-ui/index.html">System UI</a>
- customization options are disabled; for example, apps cannot hide the status
- bar if they are not running in full-screen mode.
- </li>
-
- <li>The system ignores changes to the <code><a href=
- "{@docRoot}guide/topics/manifest/activity-element.html#screen"
- >android:screenOrientation</a></code> attribute.
- </li>
-</ul>
-
-<h3 id="change-notification">Multi-window change notification and querying</h3>
-
-<p>
- The following new methods have been added to the {@link android.app.Activity}
- class to support multi-window display. For details on each method, see the
- <a href="{@docRoot}preview/setup-sdk.html#docs-dl">N Preview SDK
- Reference</a>.
-</p>
-
-<dl>
- <dt>
- <code>Activity.isInMultiWindowMode()</code>
- </dt>
-
- <dd>
- Call to find out if the activity is in multi-window mode.
- </dd>
-
- <dt>
- <code>Activity.isInPictureInPictureMode()</code>
- </dt>
-
- <dd>
- Call to find out if the activity is in picture-in-picture mode.
-
- <p class="note">
- <strong>Note:</strong> Picture-in-picture mode is a special case of
- multi-window mode. If <code>myActivity.isInPictureInPictureMode()</code>
- returns true, then <code>myActivity.isInMultiWindowMode()</code> also
- returns true.
- </p>
- </dd>
-
- <dt>
- <code>Activity.onMultiWindowModeChanged()</code>
- </dt>
-
- <dd>
- The system calls this method whenever the activity goes into or out of
- multi-window mode. The system passes the method a value of true if the
- activity is entering multi-window mode, and false if the activity is
- leaving multi-window mode.
- </dd>
-
- <dt>
- <code>Activity.onPictureInPictureModeChanged()</code>
- </dt>
-
- <dd>
- The system calls this method whenever the activity goes into or out of
- picture-in-picture mode. The system passes the method a value of true if
- the activity is entering picture-in-picture mode, and false if the activity
- is leaving picture-in-picture mode.
- </dd>
-</dl>
-
-<p>
- There are also {@link android.app.Fragment} versions of each of these
- methods, for example <code>Fragment.isInMultiWindowMode()</code>.
-</p>
-
-<h3 id="entering-pip">Entering picture-in-picture mode</h3>
-
-<p>
- To put an activity in picture-in-picture mode, call the new method
- <code>Activity.enterPictureInPictureMode()</code>. This method has no effect if
- the device does not support picture-in-picture mode. For more information,
- see the <a href="picture-in-picture.html">Picture-in-Picture</a> documentation.
-</p>
-
-<h3 id="launch">Launch New Activities in Multi-Window Mode</h3>
-
-<p>
- When you launch a new activity, you can hint to the system that the new
- activity should be displayed adjacent to the current one, if possible. To do
- this, use the flag
- <code>Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT</code>. Passing
- this flag requests the following behavior:
-</p>
-
-<ul>
- <li>If the device is in split-screen mode, the system attempts to create the
- new activity next to the activity that launched it, so the two activities
- share the screen. The system is not guaranteed to be able to do this, but it
- makes the activities adjacent if possible.
- </li>
-
- <li>If the device is not in split-screen mode, this flag has no effect.
- </li>
-</ul>
-
-<p>
- If a device is in freeform mode and you are launching a new activity, you can
- specify the new activity's dimensions and screen location by calling
- <code>ActivityOptions.setLaunchBounds()</code>. This method has no effect if
- the device is not in multi-window mode.
-</p>
-
-<p class="note">
- <strong>Note:</strong> If you launch an activity within a task stack, the
- activity replaces the activity on the screen, inheriting all of its
- multi-window properties. If you want to launch the new activity as a separate
- window in multi-window mode, you must launch it in a new task stack.
-</p>
-
-<h3 id="dnd">Supporting drag and drop</h3>
-
-<p>
- Users can <a href="{@docRoot}guide/topics/ui/drag-drop.html">drag and
- drop</a> data from one activity to another while the two activities are
- sharing the screen. (Previously, users could only drag and drop data within a
- single activity.) For this reason, you may want to add drag and drop
- functionality to your app if your app does not currently support it.
-</p>
-
-<p>
- The N Preview SDK extends the <a href=
- "{@docRoot}reference/android/view/package-summary.html"><code>android.view</code></a>
- package to support cross-app drag and drop. For details on the following
- classes and methods, see the <a href="{@docRoot}preview/setup-sdk.html#docs-dl">N
- Preview SDK Reference</a>.
-</p>
-
-<dl>
- <dt>
- <code>android.view.DropPermissions</code>
- </dt>
-
- <dd>
- Token object responsible for specifying the permissions granted to the app
- that receives a drop.
- </dd>
-
- <dt>
- <code>View.startDragAndDrop()</code>
- </dt>
-
- <dd>
- New alias for {@link android.view.View#startDrag View.startDrag()}. To
- enable cross-activity drag and drop, pass the new flag
- <code>View.DRAG_FLAG_GLOBAL</code>. If you need to give URI permissions to
- the recipient activity, pass the new flags
- <code>View.DRAG_FLAG_GLOBAL_URI_READ</code> or
- <code>View.DRAG_FLAG_GLOBAL_URI_WRITE</code>, as appropriate.
- </dd>
-
- <dt>
- <code>View.cancelDragAndDrop()</code>
- </dt>
-
- <dd>
- Cancels a drag operation currently in progress. Can only be called by the
- app that originated the drag operation.
- </dd>
-
- <dt>
- <code>View.updateDragShadow()</code>
- </dt>
-
- <dd>
- Replaces the drag shadow for a drag operation currently in progress. Can
- only be called by the app that originated the drag operation.
- </dd>
-
- <dt>
- <code>Activity.requestDragAndDropPermissions()</code>
- </dt>
-
- <dd>
- Requests the permissions for the content URIs passed with the {@link
- android.content.ClipData} contained in a {@link android.view.DragEvent}.
- </dd>
-</dl>
-
-<h2 id="testing">Testing Your App's Multi-Window Support</h2>
-
-<p>
- Whether or not you update your app for Android N, you should
- verify how it behaves in multi-window mode in case a user tries to launch it
- in multiwindow mode on a device running Android N.
-</p>
-
-<h3 id="configuring">Configuring a Test Device</h3>
-
-<p>
- If you install Android N on a device, split-screen mode is
- automatically supported.
-</p>
-
-<h3 id="test-non-n">If your app was not built with the N Preview SDK</h3>
-
-<p>
- If you did not build your app with the N Preview SDK and the user attempts to use
- the app in multi-window mode, the system forcibly resizes the app unless the app
- declares a fixed orientation.
-</p>
-
-<p>
- If your app does not declare a fixed orientation, you should launch your app
- on a device running Android N and attempt to put the app in
- split-screen mode. Verify that the user experience is
- acceptable when the app is forcibly resized.
-</p>
-
-<p>
- If the app declares a fixed orientation, you should attempt to put the app in
- multi-window mode. Verify that when you do so, the app remains
- in full-screen mode.
-</p>
-
-<h3 id="test-mw">If you support multi-window mode</h3>
-
-<p>
- If you built your app with the N Preview SDK and have not disabled
- multi-window support, verify the following behavior under both split-screen
- and freeform modes.
-</p>
-
-<ul>
- <li>Launch the app in full-screen mode, then switch to multi-window mode by
- long-pressing the Overview button. Verify that the app switches properly.
- </li>
-
- <li>Launch the app directly in multi-window mode, and verify that the app
- launches properly. You can launch an app in multi-window mode by pressing the
- Overview button, then long-pressing the title bar of your app and dragging it
- to one of the highlighted areas on the screen.
- </li>
-
- <li>Resize your app in split-screen mode by dragging the divider line.
- Verify that the app resizes without crashing, and that necessary UI elements
- are visible.
- </li>
-
- <li>If you have specified minimum dimensions for your app, attempt to resize
- the app below those dimensions. Verify that you cannot resize the app to be
- smaller than the specified minimum.
- </li>
-
- <li>Through all tests, verify that your app's performance is acceptable. For
- example, verify that there is not too long a lag to update the UI after the
- app is resized.
- </li>
-</ul>
-
-<h4 id="test-checklist">Testing checklist</h4>
-
-<p>
- To verify your app's performance in multi-window mode, try the following
- operations. You should try these operations in both split-screen and
- multi-window mode, except where otherwise noted.
-</p>
-
-<ul>
- <li>Enter and leave multi-window mode.
- </li>
-
- <li>Switch from your app to another app, and verify that the app behaves
- properly while it is visible but not active. For example, if your app is
- playing video, verify that the video continues to play while the user is
- interacting with another app.
- </li>
-
- <li>In split-screen mode, try moving the dividing bar to make your app both
- larger and smaller. Try these operations in both side-by-side and
- one-above-the-other configurations. Verify that the app does not crash,
- essential functionality is visible, and the resize operation doesn't take too
- long.
- </li>
-
- <li>Perform several resize operations in rapid succession. Verify that your
- app doesn't crash or leak memory. For information about checking your app's
- memory usage, see <a href="{@docRoot}tools/debugging/debugging-memory.html">
- Investigating Your RAM Usage</a>.
- </li>
-
- <li>Use your app normally in a number of different window configurations, and
- verify that the app behaves properly. Verify that text is readable, and that
- UI elements aren't too small to interact with.
- </li>
-</ul>
-
-<h3 id="test-disabled-mw">If you have disabled multi-window support</h3>
-
-<p>
- If you disabled multi-window support by setting
- <code>android:resizableActivity="false"</code>, you should launch your app on
- a device running Android N 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.
-</p>
diff --git a/docs/html/preview/features/multilingual-support.jd b/docs/html/preview/features/multilingual-support.jd
deleted file mode 100644
index ff21b52..0000000
--- a/docs/html/preview/features/multilingual-support.jd
+++ /dev/null
@@ -1,221 +0,0 @@
-page.title=Language and Locale
-page.tags=androidn
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-<h2>In this document:</h2>
-<ol>
- <li><a href="#preN">Challenges in Resolving Language Resources</a></li>
- <li><a href="#postN">Improvements to Resource-Resolution Strategy</a></li>
- <li><a href="#design">Designing your App to Support Additional
- Locales</a></li>
-
-</ol>
-
-</div>
-</div>
-
-<p>Android N provides enhanced support for multilingual users,
-allowing them to select multiple locales in settings. Android N
-provides this capability by greatly expanding the number of locales supported
-and changing the way the system resolves resources. The new method of resolving
-resources is more robust and designed to be compatible with existing APKs, but
-you should take extra care to spot any unexpected behavior. For example, you
-should test to make sure that your app defaults to the expected language. Also,
-if your app supports multiple languages, you should ensure that this support works as
-intended. Finally, you should try to ensure that your app gracefully handles
-languages that you didn't explicitly design it to support.</p>
-
-<p>This document starts by explaining the resource resolution strategy prior to
-Android N. Next, it describes Android N's improved
-resource-resolution strategy. Last, it explains how to take advantage of
-the expanded number of locales to support more multilingual users.</p>
-
-<h2 id="preN">Challenges in Resolving Language Resources</h2>
-
-<p>Prior to Android N, Android could not always successfully
- match app and system locales.</p>
-
- <p>For example, assume that you have the following situation:</p>
- <ul>
- <li>Your app's default language is {@code en_US} (US English), and it also has
- Spanish strings localized in {@code es_ES}
- resource files.</li>
- <li> A device is set to {@code es_MX} </li>
-
-<p>When your Java code refers to strings, the system would load
-strings from the default ({@code en_US}) resource file, even if the app has
-Spanish resources localized under {@code es_ES}. This is because when the system
- cannot find an exact match, it continues to look for resources by stripping the
- country code off the locale. Finally, if no match is found, the system falls
- back to the default, which is {@code en_US}. </p>
-
-
-<p>The system would also default to {@code en_US} if the user chose a language that
-the app didn't support at all, like French. For example:</p>
-
-<p class="table-caption" id="t-resource-res">
-<strong>Table 1.</strong> Resource resolution without an exact locale match.
-</p>
-<table>
-<tbody>
-<tr>
-<th>User Settings</th>
-<th>App Resources</th>
-<th>Resource Resolution</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>
-Try fr_CH => Fail<br>
-Try fr => Fail<br>
-Use default (en)
-</td>
- </tr>
- </tbody>
-</table>
-
-
-<p>In this example, the system displays English strings without
-knowing whether the user can understand English. This behavior is pretty common
-today. Android N should substantially reduce the frequency
-of outcomes like this one.</p>
-
-<h2 id="postN">Improvements to Resource-Resolution Strategy</h2>
-<p>Android N brings more robust resource resolution, and
-finds better fallbacks automatically. However, to speed up resolution and improve
- maintainability, you should store resources in the most common parent dialect.
- For example, if you were storing Spanish resources in the {@code es-US} directory
- before, move them into the {@code es-419} directory, which contains Latin American Spanish.
- Similarly, if you have resource strings in a folder named {@code en-GB}, rename
- the folder to {@code en-001} (international English), because the most common
- parent for <code>en-GB</code> strings is {@code en-001}.
- The following examples explain why these practices improve performance and
-reliability of resource resolution.</p>
-
-<h3>Resource resolution examples</h3>
-
-<p>With Android N, the case described in <strong>Table 1</strong> is resolved
-differently:</p>
-
-<p class="table-caption" id="t-improved-res">
-<strong>Table 2.</strong> An improved resolution strategy for when there is no
-exact locale match.</p>
-<table>
-<tr>
-<th>User Settings</th>
-<th>App Resources</th>
-<th>Resource Resolution</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>
-Try fr_CH => Fail<br>
-Try fr => Fail<br>
-Try children of fr => fr_FR<br>
-Use fr_FR
-</td>
-</tr>
-
-</table>
-
-
-<p>Now the user gets French resources instead of English. This example also shows
- why you should store French strings in {@code fr} rather than {@code fr_FR}
- for Android N. Here the course of action is to match the closest parent dialect,
- making resolution faster and more predictable.</p>
-
-<p>In addition to this improved resolution logic, Android now offers more
- user languages to choose from. Let’s try the above example again with Italian
- specified as an additional user language, but without app support for French. </p>
-
-<p class="table-caption" id="t-2d-choice">
-<strong>Table 3.</strong> Resource resolution when the app only matches the
-user's second-preferred locale setting.</p>
-<table>
-<tr>
-<th>User Settings</th>
-<th>App Resources</th>
-<th>Resource Resolution</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>
-Try fr_CH => Fail<br>
-Try fr => Fail<br>
-Try children of fr => Fail<br>
-Try it_CH => Fail<br>
-Try it => Fail<br>
-Try children of it => it_IT<br>
-Use it_IT
-</td>
-
-</tr>
-
-</table>
-<p>The user still gets a language they understand, even though the app doesn’t
-support French.</p>
-
-
-<h2 id="design">Designing your App to Support Additional Locales</h2>
-<h3>LocaleList API</h3>
-
-<p>Android N adds a new API {@code LocaleList.getDefault()}
-that lets apps directly query the list of languages a user has specified. This API
-allows you to create more sophisticated
- app behavior and better-optimized display of content. For example, Search
- can show results in multiple languages based on user’s settings. Browser apps
- can avoid offering to translate pages in a language the user already knows,
- and keyboard apps can auto-enable all appropriate layouts. </p>
-
-<h3>Formatters</h3>
-
-<p>Up through Android 6.0 (API level 23), Android supported only one or two locales
- for many common languages
-(en, es, ar, fr, ru). Because there were only a few variants of each language,
-apps could get away with storing some numbers and dates as hard coded strings
-in resource files. However, with Android's broadened set of supported locales,
-there can be
-significant differences in formats for dates, times, currencies, and similar
-information even within a single locale. Hard-coding your formats can produce a
-confusing experience for end users. Therefore, when developing for Android N
-make sure to use formatters instead of hard coding numbers and date strings.</p>
-
-<p>A prime example is Arabic, whose support Android N expands from
-one {@code ar_EG} to 27 Arabic locales. These locales can share most resources,
-but some prefer ASCII digits, while others prefer native digits. For example,
-when you want to create a sentence with a digit variable, such as
-"Choose a 4 digit pin", use formatters as shown below:</p>
-
-<pre> format(locale, "Choose a %d-digit PIN", 4)</pre>
diff --git a/docs/html/preview/features/notification-updates.jd b/docs/html/preview/features/notification-updates.jd
deleted file mode 100644
index fd65e12..0000000
--- a/docs/html/preview/features/notification-updates.jd
+++ /dev/null
@@ -1,400 +0,0 @@
-page.title=Notifications
-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>This document includes</h2>
-<ol>
- <li><a href="#direct">Direct Reply</a></li>
- <li><a href="#bundle">Bundled Notifications</a></li>
- <li><a href="#custom">Custom Views</a></li>
- <li><a href="#style">Messaging Style</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>Android N introduces several new APIs that allow apps to post
-notifications that are highly visible and interactive.</p>
-
-<p>Android N extends the existing {@link android.support.v4.app.RemoteInput}
-notification API to support inline replies on handsets. This feature allows users
- to quickly respond from the notification shade without visiting your app.</p>
-
-<p>
- Android N also allows you to bundle similar notifications to
- appear as a single notification. To make this possible, Android N uses the existing {@link
- android.support.v4.app.NotificationCompat.Builder#setGroup
- NotificationCompat.Builder.setGroup()} method. Users can expand each of the
- notifications, and perform actions such as reply and dismiss on each of the
- notifications, individually from the notification shade.
-</p>
-
-<p>Last, Android N also adds new APIs that allow you to leverage system
-decorations in your app’s customized notification views. These APIs help
-ensure that the notification views share a consistent presentation with
-standard templates.</p>
-
-<p>This document highlights some of the key changes that you should take into
- account when using the new notification features in your apps.</p>
-
-<h2 id="direct">Direct Reply</h2>
-
-<p>With the Direct Reply feature in Android N, users can quickly
-respond to text messages or update task lists directly within the notification
-interface. On a handheld, the inline reply action appears as an additional button
- attached to the notification. When a user replies via keyboard, the system attaches
- the text response to the intent
- you had specified for the notification action and sends the intent to your
- handheld app.
-
-
-<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>Figure 1.</strong> Android N adds the <strong>Reply</strong>
- action button.
-</p>
-
-<h3>Adding inline reply actions</h3>
-
-<p>To create a notification action that supports direct reply:
-</p>
-
-<ol>
-<li>Create an instance of {@link android.support.v4.app.RemoteInput.Builder}
- that you can add to your notification
-action. This class's constructor accepts a string that the system uses as the key
- for the text input. Later, your handheld app uses that key to retrieve the text
- of the input.
-
-<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>Attach the {@link android.support.v4.app.RemoteInput}
- object to an action using <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>Apply the action to a notification and issue the notification.
-
-<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> The system prompts the user to input a response when they trigger the
-notification action. </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>Figure 2.</strong> The user inputs text from the notification shade.
-</p>
-
-<h3>
- Retrieving user input from the inline reply
-</h3>
-
-<p>
- To receive user input from the notification interface to the activity you
- declared in the reply action's intent:
-</p>
-
-<ol>
- <li>Call {@link android.support.v4.app.RemoteInput#getResultsFromIntent
- getResultsFromIntent()} by passing the notification action’s intent as the
- input parameter. This method returns a {@link android.os.Bundle} that
- contains the text response.
-
- <pre>
-Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
-</pre>
- </li>
-
- <li>Query the bundle using the result key (provided to the {@link
- android.support.v4.app.RemoteInput.Builder} constructor). You can complete
- this process and retrieve the input text by creating a method, as in the
- following code snippet:
-
- <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>Build and issue another notification, using the same notification ID that
- you provided for the previous notification. The progress indicator
- disappears from the notification interface to inform users of a successful
- reply. When working with this new notification, use the context that gets
- passed to the receiver's {@code onReceive()} method.
-
- <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>
- For interactive apps, such as chats, it could be useful to include additional
- context when handling retrieved text. For example, these apps could show
- multiple lines of chat history. When the user responds via {@link
- android.support.v4.app.RemoteInput}, you can update the reply history
- using the {@code setRemoteInputHistory()} method.
-</p>
-
-<p>
- The notification must be either updated or cancelled after the app has
- received remote input. When the user replies to a remote update
- using Direct Reply,
- do not cancel the notification. Instead, update the notification to display the user's reply.
-For notifications using {@code MessagingStyle}, you should add
-the reply as the latest message. When using other templates, you can
-append the user's reply to the remote-input history.
-</p>
-
-<h2 id="bundle">Bundled Notifications</h2>
-
-<p>Android N provides developers with a new way to represent
- a queue of notifications: <i>bundled notifications</i>. This is similar to the
- <a href="{@docRoot}training/wearables/notifications/stacks.html">Notification
- Stacks</a> feature in Android Wear. For example, if your app creates notifications
- for received messages, when more than one message is received, bundle the
- notifications together as a single group. You can
- use the existing {@link android.support.v4.app.NotificationCompat.Builder#setGroup
-Builder.setGroup()} method to bundle similar notifications.</p>
-
-<p>
- A notification group imposes a hierarchy on the notifications comprising it.
- At the top of that hierarchy is a parent notification that displays summary
- information for the group. The user can progressively
- expand the notification group, and the system shows more information as the
- user drills deeper. When the user expands the bundle, the system reveals more
- information for all its child notifications; when the user
- expands one of those notifications, the system reveals its entire content.
-</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>Figure 3.</strong> The user can progressively expand the notification
- group.
-</p>
-
-<p class="note">
- <strong>Note:</strong> If the same app sends four or more notifications
- and does not specify a grouping, the
- system automatically groups them together.
-</p>
-
-<p>To learn how to add notifications to a group, see
-<a href="{@docRoot}training/wearables/notifications/stacks.html#AddGroup">Add
-Each Notification to a Group</a>.</p>
-
-
-<h3 id="best-practices">Best practices for bundled notifications</h3>
-<p>This section provides guidelines about when to use notification groups instead
-of the {@link android.app.Notification.InboxStyle InboxStyle}
-notifications that have been available in earlier versions of the
-Android platform.</p>
-
-<h3>When to use bundled notifications</h3>
-
-<p>You should use notification groups only if all of the following conditions are
-true for your use case:</p>
-
-<ul>
- <li>The child notifications are complete notifications and can be displayed
- individually without the need for a group summary.</li>
- <li>There is a benefit to surfacing the child notifications individually. For
- example:
- </li>
- <ul>
- <li>They are actionable, with actions specific to each child.</li>
- <li>There is more information to the child that the user wants to read.</li>
- </ul>
-</ul>
-
-<p>Examples of good use cases for notification groups include: a messaging app
-displaying a list of incoming messages, or an email app displaying a list of
-received emails.</p>
-
-<p>
-Examples of cases where a single notification is preferable
- include individual messages from a single person, or a list representation of
- single-line text items. You can use
-({@link android.app.Notification.InboxStyle InboxStyle} or
-{@link android.app.Notification.BigTextStyle BigTextStyle}) to accomplish
-this.
-</p>
-
-<h3 id ="post">Displaying bundled notifications</h3>
-
-<p>
- The app should always post a group summary, even if the group contains just a
- single child. The system will suppress the summary and directly display the
- child notification if it only contains a single notification. This ensures
- that the system can provide a consistent experience when the user swipes away
- children of a group.
-</p>
-
-<p class="note">
- <strong>Note:</strong> This version of Android N does not yet
- suppress the summary for notification groups containing a single child. This
- functionality will be added in a later version of Android N.
-</p>
-
-<h3>Peeking notifications</h3>
-
-<p>While the system usually displays child notifications as a group, you can set
- them to temporarily appear as
- <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html#Heads-up">
- heads-up notifications</a>. This feature is especially useful because it allows
- immediate access to the most recent child and the actions associated with it.
-</p>
-
-
-<h3>Backwards compatibility</h3>
-
-<p>
- Both notification groups and remote input have been a part of the {@link
- android.app.Notification} API since Android 5.0 (API level 21) to support
- Android Wear devices. If you've already built notifications with these APIs,
- the only action you must take is to verify that the app behavior corresponds
- to the guidelines described above, and to consider implementing {@code
- setRemoteInputHistory()}.
-</p>
-
-<p>
- In order to support backward compatibility, the same APIs are available with
- the support library's {@link android.support.v4.app.NotificationCompat}
- class, allowing you to build notifications that works on earlier Android
- versions. On handhelds and tablets, users only see the summary notification,
- so an app should still have an inbox style or an equivalent notification
- representative for the whole information content of the group. As Android
- Wear devices allow users to see all child notifications even on older
- platform levels, you should build child notifications regardless of API
- level.
-</p>
-
-<h2 id="custom"> Custom Views</h2>
-<p>Starting from Android N, you can customize notification views and
-still obtain system decorations like notification headers, actions, and
-expandable layouts.</p>
-
-<p>To enable this capability, Android N adds the following APIs to style your
- custom view:</p>
-
-<dl>
-<dt>
-{@code DecoratedCustomViewStyle()}</dt>
-<dd> Styles notifications other than media
-notifications.</dd>
-<dt>
-{@code DecoratedMediaCustomViewStyle()}</dt>
-<dd> Styles media notifications.</dd>
-</dl>
-
-<p>To use this new API, call the {@code setStyle()} method, passing to it
-the desired custom view style.</p>
-
-<p>This snippet shows how to construct a custom notification object with the
-{@code DecoratedCustomViewStyle()} method.</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">Messaging Style</h2>
-<p>
- Android N introduces a new API for customizing the style of a notification.
- Using the <code>MessagingStyle</code> class, you can change several of the
- labels displayed on the notification, including the conversation title,
- additional messages, and the content view for the notification.
-</p>
-
-<p>
- The following code snippet demonstrates how to customize a notification's
- style using the <code>MessagingStyle</code> class.
-</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"))
- .build();
-</pre>
diff --git a/docs/html/preview/features/picture-in-picture.jd b/docs/html/preview/features/picture-in-picture.jd
deleted file mode 100644
index 03a1768..0000000
--- a/docs/html/preview/features/picture-in-picture.jd
+++ /dev/null
@@ -1,235 +0,0 @@
-page.title=Picture-in-picture
-page.keywords=preview,sdk,PIP,Picture-in-picture
-page.tags=androidn
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>In this document</h2>
-<ol>
- <li><a href="#declaring">Declaring Your Activity Supports
-Picture-in-picture</a></li>
- <li><a href="#pip_button">Switching Your Activity to Picture-in-picture</a>
-</li>
- <li><a href="#handling_ui">Handling UI During Picture-in-picture</a>
-</li>
- <li><a href="#continuing_playback">Continuing Video Playback While in
-Picture-in-picture</a></li>
- <li><a href="#single_playback">Using a Single Playback Activity for
-Picture-in-picture</a></li>
- <li><a href="#best">Best Practices</a></li>
-</ol>
-
-<h2>See Also</h2>
-<ol>
- <li><a href="{@docRoot}preview/features/multi-window.html">Multi-Window
-Support</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>In Android N, Android TV users can now watch a video
-in a pinned window in a corner of the screen when navigating within
-apps. Picture-in-picture (PIP) mode lets apps run a video
-activity in the pinned window while another activity continues in the
-background. The PIP window lets users multitask while using your app, which
-helps users be more productive.</p>
-
-<p>Your app can decide when to trigger PIP mode. Here are some examples of
-when to enter PIP mode:</p>
-
-<ul>
-<li>Your app can move a video into PIP mode when the user navigates
-back from the video to browse other content.</li>
-<li>Your app can switch a video into PIP mode while a user watches the end
-of an episode of content. The main screen displays promotional or summary
-information about the next episode in the series.</li>
-<li>Your app can provide a way for users to queue up additional content while
-they watch a video. The video continues playing in PIP mode while the main
-screen displays a content selection activity.</li>
-</ul>
-
-<p>The PIP window is 240x135 dp and is shown at the top-most layer in one of
-the four corners of the screen, chosen by the system. The user can bring up a
-PIP menu that lets them toggle the PIP window to full-screen, or close the PIP
-window, by holding down the <b>Home</b> button on the remote. If another
-video starts playing on the main screen, the PIP window is automatically
-closed. Users can also close the PIP window through Recents.</p>
-
-<img src="{@docRoot}preview/images/pip-active.png" />
-<p class="img-caption"><strong>Figure 1.</strong> A Picture-in-picture
-video visible in a corner of the screen while the user browses content
-on the main screen.</p>
-
-<p>PIP leverages the multi-window APIs available in Android N to
-provide the pinned video overlay window. To add PIP to your app, you need to
-register your activities that support PIP, switch your activity to PIP mode as
-needed, and make sure UI elements are hidden and video playback continues when
-the activity is in PIP mode.</p>
-
-<h2 id="declaring">Declaring Your Activity Supports Picture-in-picture</h2>
-
-<p>By default, the system does not automatically support PIP for apps.
-If you want support PIP in your app, register your video
-activity in your manifest by setting
-<code>android:supportsPictureInPicture</code> and
-<code>android:resizeableActivity</code> to <code>true</code>. Also, specify
-that your activity handles layout configuration changes so that your activity
-doesn't relaunch when layout changes occur during PIP mode transitions.</p>
-
-<pre>
-<activity android:name="VideoActivity"
- android:resizeableActivity="true"
- android:supportsPictureInPicture="true"
- android:configChanges=
- "screenSize|smallestScreenSize|screenLayout|orientation"
- ...
-</pre>
-
-<p>When registering your activity, keep in mind that in PIP mode, your
-activity is shown in a small overlay window on a TV screen. Video playback
-activities with minimal UI provide the best user experience. Activities that
-contain small UI elements might not provide a good user experience
-when switched to PIP mode, because users can't see details of the UI elements
-in the PIP window.</p>
-
-<h2 id="pip_button">Switching Your Activity to Picture-in-picture</h2>
-
-When you need to switch your activity into PIP mode, call
-<code>Activity.enterPictureInPictureMode()</code>. The following example
-switches to PIP mode when the user selects a dedicated PIP button on a media
-control bar:</p>
-
-<pre>
-@Override
-public void onActionClicked(Action action) {
- if (action.getId() == R.id.lb_control_picture_in_picture) {
- getActivity().enterPictureInPictureMode();
- return;
- }
- ...
-</pre>
-
-<p>Adding a PIP button to your media control bar lets your user easily switch
-to PIP mode while controlling video playback.</p>
-
-<img src="{@docRoot}preview/images/pip-button.png" />
-<p class="img-caption"><strong>Figure 1.</strong> A Picture-in-picture
-button on a media control bar.</p>
-
-<p>Android N includes a new
-<code>PlaybackControlsRow.PictureInPictureAction</code> class which defines
-control bar PIP actions and uses the PIP icon.</p>
-
-<h2 id="handling_ui">Handling UI During Picture-in-picture</h2>
-
-<p>When your activity enters PIP mode, your activity should only show video
-playback. Remove UI elements before your activity enters PIP,
-and restore these elements when your activity becomes full-screen again.
-Override <code>Activity.onPictureInPictureModeChanged()</code> or
-<code>Fragment.onPictureInPictureModeChanged()</code> and enable or
-disable your UI elements as needed, for example:</p>
-
-<pre>
-@Override
-public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
- if (isInPictureInPictureMode) {
- // Hide the controls in picture-in-picture mode.
- ...
- } else {
- // Restore the playback UI based on the playback status.
- ...
- }
-}
-</pre>
-
-<h2 id="continuing_playback">Continuing Video Playback While in
-Picture-in-picture</h2>
-
-<p>When your activity switches to PIP, the system considers the activity in a
-paused state, and calls your activity's {@link android.app.Activity#onPause
-onPause()} method. Video playback should not be paused and should continue
-playing if the activity is paused due to PIP mode.</p>
-
-<p>In Android N, you should pause and resume video playback when the system
-calls your activity's {@link android.app.Activity#onStop onStop()} and
-{@link android.app.Activity#onStart onStart()}. By doing this, you can avoid
-having to check if your app is in PIP mode in
-{@link android.app.Activity#onPause onPause()} and explicitly
-continuing playback.</p>
-
-<p>If you have to pause playback in your {@link android.app.Activity#onPause
-onPause()} implementation, check for PIP mode by calling {@code
-isInPictureInPictureMode()} and handle playback appropriately, for example:</p>
-
-<pre>
-@Override
-public void onPause() {
- // If called while in PIP mode, do not pause playback
- if (isInPictureInPictureMode()) {
- // Continue playback
- ...
- }
- // If paused but not in PIP, pause playback if necessary
- ...
-}
-</pre>
-
-<p>When your activity switches out of PIP mode back to full-screen mode, the
-system resumes your activity and calls your
-{@link android.app.Activity#onResume onResume()} method.</p>
-
-<h2 id="single_playback">Using a Single Playback Activity for
-Picture-in-picture</h2>
-
-<p>In your app, a user might select a new video when browsing for content on
-the main screen, while a video playback activity is in PIP mode. Play the new
-video in the existing playback activity in full screen mode, instead of
-launching a new activity that might confuse the user.</p>
-
-<p>To ensure a single activity is used for video playback requests and
-switched into or out of PIP mode as needed, set the activity's
-<code>android:launchMode</code> to <code>singleTask</code> in your manifest:
-</p>
-
-<pre>
-<activity android:name="VideoActivity"
- ...
- android:supportsPictureInPicture="true"
- android:launchMode="singleTask"
- ...
-</pre>
-
-<p>In your activity, override {@link android.app.Activity#onNewIntent
-Activity.onNewIntent()} and handle the new video, stopping any existing video
-playback if needed.</p>
-
-<h2 id="best">Best Practices</h2>
-
-<p>PIP is intended for activities that play full-screen video. When switching
-your activity into PIP mode, avoid showing anything except video content.
-Track when your activity enters PIP mode and hide UI elements, as described
-in <a href="#handling_ui">Handling UI During Picture-in-picture</a>.</p>
-
-<p>Since the PIP window is shown as a floating window in the corner of the
-screen, you should avoid showing critical information in the main screen
-in any area that can be obscured by the PIP window.</p>
-
-<p>When an activity is in PIP mode, by default it doesn't get input focus. To
-receive input events while in PIP mode, use
-{@link android.media.session.MediaSession#setCallback
-MediaSession.setCallback()}. For more information on using
-{@link android.media.session.MediaSession#setCallback setCallback()} see
-<a href="{@docRoot}training/tv/playback/now-playing.html">Displaying
-a Now Playing Card</a>.</p>
-
-<p>When your app is in PIP mode, video playback in the PIP window can cause
-audio interference with another app, such as a music player app or voice search
-app. To avoid this, request audio focus when you start playing the video,
-and handle audio focus change notifications, as described in
-<a href="{@docRoot}training/managing-audio/audio-focus.html">Managing Audio
-Focus</a>. If you receive notification of audio focus loss when in PIP mode,
-pause or stop video playback.</p>
diff --git a/docs/html/preview/features/scoped-folder-access.jd b/docs/html/preview/features/scoped-folder-access.jd
deleted file mode 100644
index 06dd665..0000000
--- a/docs/html/preview/features/scoped-folder-access.jd
+++ /dev/null
@@ -1,150 +0,0 @@
-page.title=Scoped Directory Access
-page.keywords=preview,sdk,scoped directory access
-page.tags=androidn
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>In this document</h2>
- <ol>
- <li><a href="#accessing">Accessing an External Storage Directory</a></li>
- <li><a href="#removable">Accessing a Directory on Removable Media</a></li>
- <li><a href="#best">Best Practices</a></li>
- </ol>
-</div>
-</div>
-
-<p>Apps such as photo apps usually just need access to specific directories in
-external storage, such as the <code>Pictures</code> directory. Existing
-approaches to accessing external storage aren't designed to easily provide
-targeted directory access for these types of apps. For example:</p>
-
-<ul>
-<li>Requesting {@link android.Manifest.permission#READ_EXTERNAL_STORAGE}
-or {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} in your manifest
-allows access to all public directories on external storage, which might be
-more access than what your app needs.</li>
-<li>Using the
-<a href="{@docRoot}guide/topics/providers/document-provider.html">Storage
-Access Framework</a> usually makes your user pick directories
-via a system UI, which is unnecessary if your app always accesses the same
-external directory.</li>
-</ul>
-
-<p>Android N provides a new simplified API to access
-common external storage directories. </p>
-
-<h2 id="accessing">Accessing an External Storage Directory</h2>
-
-<p>Use the <code>StorageManager</code> class to get the appropriate
-<code>StorageVolume</code> instance. Then, create an intent by calling the
-<code>StorageVolume.createAccessIntent()</code> method of that instance.
-Use this intent to access external storage directories. To get a list of
-all available volumes, including removable media volumes, use
-<code>StorageManager.getVolumesList()</code>.</p>
-
-<p>If you have information about a specific file, use
-<code>StorageManager.getStorageVolume(File)</code> to get the
-<code>StorageVolume</code> that contains the file. Call
-<code>createAccessIntent()</code> on this <code>StorageVolume</code> to access
-the external storage directory for the file.</p>
-
-<p>
-On secondary volumes, such as external SD cards, pass in null when calling
-<code>StorageVolume.createAccessIntent()</code> to request access to the entire
-volume, instead of a specific directory.
-<code>StorageVolume.createAccessIntent()</code> returns null if you pass in
-null to the primary volume, or if you pass in an invalid directory name.
-</p>
-
-<p>The following code snippet is an example of how to open the
-<code>Pictures</code> directory in the primary shared storage:</p>
-
-<pre>
-StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
-StorageVolume volume = sm.getPrimaryVolume();
-Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
-startActivityForResult(intent, request_code);
-</pre>
-
-<p>The system attempts to grant access to the external directory, and if
-necessary confirms access with the user using a simplified UI:</p>
-
-<img src="{@docRoot}preview/images/scoped-folder-access-framed.png"
-srcset="{@docRoot}preview/images/scoped-folder-access-framed.png 1x,
-{@docRoot}preview/images/scoped-folder-access-framed_2x.png 2x" />
-<p class="img-caption"><strong>Figure 1.</strong> An application requesting
-access to the Pictures directory.</p>
-
-<p>If the user grants access, the system calls your
-<code>onActivityResult()</code> override with a result code of
-<code>Activity.RESULT_OK</code>, and intent data that contains the URI. Use
-the provided URI to access directory information, similar to using URIs
-returned by the
-<a href="{@docRoot}guide/topics/providers/document-provider.html">Storage
-Access Framework</a>.</p>
-
-<p>If the user doesn't grant access, the system calls your
-<code>onActivityResult()</code> override with a result code of
-<code>Activity.RESULT_CANCELED</code>, and null intent data.</p>
-
-<p class="note"><b>Note</b>: Getting access to a specific external directory
-also gains access to subdirectories within that directory.</p>
-
-<h2 id="removable">Accessing a Directory on Removable Media</h2>
-
-<p>To use Scoped Directory Access to access directories on removable media,
-first add a {@link android.content.BroadcastReceiver} that listens for the
-{@link android.os.Environment#MEDIA_MOUNTED} notification, for example:</p>
-
-<pre>
-<receiver
- android:name=".MediaMountedReceiver"
- android:enabled="true"
- android:exported="true" >
- <intent-filter>
- <action android:name="android.intent.action.MEDIA_MOUNTED" />
- <data android:scheme="file" />
- </intent-filter>
-</receiver>
-</pre>
-
-<p>When the user mounts removable media, like an SD card, the system sends a
-{@link android.os.Environment#MEDIA_MOUNTED} notification. This notification
-provides a <code>StorageVolume</code> object in the intent data that you can
-use to access directories on the removable media. The following example
-accesses the <code>Pictures</code> directory on removable media:</p>
-
-<pre>
-// BroadcastReceiver has already cached the MEDIA_MOUNTED
-// notification Intent in mediaMountedIntent
-StorageVolume volume = (StorageVolume)
- mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
-volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
-startActivityForResult(intent, request_code);
-</pre>
-
-<h2 id="best">Best Practices</h2>
-
-<p>Where possible, persist the external directory access URI so you don't have
-to repeatedly ask the user for access. Once the user has granted access, call
-<code>getContentResolver().takePersistableUriPermssion()</code> with the
-directory access URI. The system will persist the URI and subsequent access
-requests will return <code>RESULT_OK</code> and not show confirmation UI to the
-user.</p>
-
-<p>If the user denies access to an external directory, do not immediately
-request access again. Repeatedly insisting on access results in a poor user
-experience. If a request is denied by the user, and the app requests access
-again, the UI displays a <b>Don't ask again</b> checkbox:</p>
-
-<img src="{@docRoot}preview/images/scoped-folder-access-dont-ask.png"
-srcset="{@docRoot}preview/images/scoped-folder-access-dont-ask.png 1x,
-{@docRoot}preview/images/scoped-folder-access-dont-ask_2x.png 2x" />
-<p class="img-caption"><strong>Figure 1.</strong> An application making a
-second request for access to removable media.</p>
-
-<p>If the user selects <b>Don't ask again</b> and denies the request, all
-future requests for the given directory from your app will be automatically
-denied, and no request UI will be presented to the user.</p>
\ No newline at end of file
diff --git a/docs/html/preview/features/security-config.jd b/docs/html/preview/features/security-config.jd
deleted file mode 100644
index 2706ced..0000000
--- a/docs/html/preview/features/security-config.jd
+++ /dev/null
@@ -1,750 +0,0 @@
-page.title=Network Security Configuration
-page.keywords=androidn,security,network
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>In this document</h2>
-<ol>
- <li><a href="#manifest">Adding a Security Configuration File</a></li>
- <li><a href="#CustomTrust">Customizing Trusted CAs</a>
- <ol>
- <li><a href="#ConfigCustom">Configuring a Trusted Custom CA</a></li>
- <li><a href="#LimitingCas">Limiting the Set of Trusted CAs</a></li>
- <li><a href="#TrustingAdditionalCas">Trusting Additional CAs</a></li>
- </ol>
- </li>
- <li><a href="#TrustingDebugCa">Debugging-only CAs</a></li>
- <li><a href="#CleartextTrafficPermitted">Opting Out of Cleartext Traffic</a></li>
- <li><a href="#CertificatePinning">Pinning Certificates</a></li>
- <li><a href="#ConfigInheritance">Configuration Inheritance Behavior</a></li>
- <li><a href="#FileFormat">Configuration File Format</a></li>
-</ol>
-</div>
-</div>
-
-
-<p>
- Android N includes a Network Security Configuration
- feature that lets apps customize their network security settings in a safe,
- declarative configuration file without modifying app code. These settings can
- be configured for specific domains and for a specific app. The key
- capabilities of this feature are as follows:
-</p>
-
-<ul>
- <li>
- <b>Custom trust anchors:</b> Customize which Certificate Authorities (CA)
- are trusted for an app's secure connections. For
- example, trusting particular self-signed certificates or restricting the
- set of public CAs that the app trusts.
- </li>
-
- <li>
- <b>Debug-only overrides:</b> Safely debug secure connections in an app
- without added risk to the installed base.
- </li>
-
- <li>
- <b>Cleartext traffic opt-out:</b> Protect apps from from
- accidental usage of cleartext traffic.
- </li>
-
- <li>
- <b>Certificate pinning:</b> Restrict an app's secure connection to
- particular certificates.
- </li>
-</ul>
-
-
-<h2 id="manifest">Adding a Security Configuration File</h2>
-
-<p>
- The Network Security Configuration feature uses an XML file where you specify
- the settings for your app. You must include an entry in the manifest of your
- app to point to this file. The following code excerpt from a manifest
- demonstrates how to create this entry:
-</p>
-
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<manifest ... >
- <application android:networkSecurityConfig="@xml/network_security_config"
- ... >
- ...
- </application>
-</manifest>
-</pre>
-
-<h2 id="CustomTrust">Customizing Trusted CAs</h2>
-
-<p>
- An app may want to trust a custom set of CAs instead of the platform
- default. The most common reasons of this are:
-</p>
-
-<ul>
- <li>Connecting to a host with a custom certificate authority(self-signed,
- issued by an internal corporate CA, etc).
- </li>
-
- <li>Limiting the set of CAs to only the CAs you trust instead of every
- preinstalled CA.
- </li>
-
- <li>Trusting additional CAs not included in the system.
- </li>
-</ul>
-
-<p>
- By default secure (e.g. TLS, HTTPS) connections from all apps trust
- the pre-installed system CAs, and apps targeting API level 23
- (Android M) and below also trust the user-added CA store by default. An
- app can customize its own connections using {@code base-config} (for
- app-wide customization) or {@code domain-config} (for per-domain
- customization).
-</p>
-
-
-<h3 id="ConfigCustom">Configuring a Custom CA</h3>
-
-<p>
- Assume you want to connect to your host which uses a self-signed SSL
- certificate or to a host whose SSL certificate is issued by a non-public CA
- which you trust, such as your company's internal CA.
-</p>
-
-<p>
- <code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">example.com</domain>
- <trust-anchors>
- <certificates src="@raw/my_ca"/>
- </trust-anchors>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-<p>
- Add the self-signed or non-public CA certificate, in PEM or DER format, to
- {@code res/raw/my_ca}.
-</p>
-
-
-<h3 id="LimitingCas">Limiting the Set of Trusted CAs</h3>
-
-<p>
- An app that does not want to trust all CAs trusted by system can
- instead specify its own reduced set of CAs to trust. This protects the
- app from fradulent certificates issued by any of the other CAs.
-</p>
-
-<p>
- The config to limit the set of trusted CAs is similar to <a href=
- "#TrustingACustomCa">trusting a custom CA</a> for a specific domain except
- that multiple CAs are provided in the resource.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">secure.example.com</domain>
- <domain includeSubdomains="true">cdn.example.com</domain>
- <trust-anchors>
- <certificates src="@raw/trusted_roots"/>
- </trust-anchors>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-<p>
- Add the trusted CAs, in PEM or DER format, to {@code res/raw/trusted_roots}.
- Note that if using PEM format the file must contain <em>only</em> PEM data
- and no extra text. You can also provide multiple
- <a href="#certificates"><code><certificates></code></a>
-elements instead of one.
-</p>
-
-
-<h3 id="TrustingAdditionalCas">
- Trusting Additional CAs
-</h3>
-
-<p>
- An app may want to trust additional CAs not trusted by the system,
- this could be due to the system not yet including the CA or a CA that does
- not meet the requirements for inclusion into the Android system. An
- app can do this by specifying multiple certificate sources for a
- configuration.
-</p>
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <base-config>
- <trust-anchors>
- <certificates src="@raw/extracas"/>
- <certificates src="system"/>
- </trust-anchors>
- </base-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="TrustingDebugCa">Configuring CAs for Debugging</h2>
-
-<p>
- When debugging an app that connects over HTTPS you may want to
- connect to a local development server, which does not have the SSL
- certificate for your production server. In order to support this without any
- modification to your app's code you can specify debug-only CAs that
- are <i>only</i> trusted when <a href=
- "{@docRoot}guide/topics/manifest/application-element.html#debug">
-android:debuggable</a>
- is {@code true} by using {@code debug-overrides}. Normally IDEs and build
- tools set this flag automatically for non-release builds.
-</p>
-
-<p>
- This is safer than the usual conditional code because, as a security
- precaution, app stores do not accept apps which are marked
- debuggable.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <debug-overrides>
- <trust-anchors>
- <certificates src="@raw/debug_cas"/>
- </trust-anchors>
- </debug-overrides>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="CleartextTrafficPermitted">Opting Out of Cleartext Traffic</h2>
-
-<p>
- Applications intending to connect to destinations using only secure
- connections can opt-out of supporting cleartext (using unencrypted HTTP
- protocol instead of HTTPS) to those destinations. This option helps prevent
- accidental regressions in apps due to changes in URLs provided by external
- sources such as backend servers.
- See {@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted
- NetworkSecurityPolicy.isCleartextTrafficPermitted()} for more details.
-</p>
-
-<p>
- For example, an app may want to ensure that all connections to {@code
- secure.example.com} are always done over HTTPS to protect sensitive traffic
- from hostile networks.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config cleartextTrafficPermitted="false">
- <domain includeSubdomains="true">secure.example.com</domain>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="CertificatePinning">Pinning Certificates</h2>
-
-<p>
- Normally an app trusts all preinstalled CAs. If any of these CAs were
- to issue a fradulent certificate the app would be at risk from a MiTM
- attack. Some apps choose to limit the set of certificates they accept
- by either limiting the set of CAs they trust or by certificate pinning.
-</p>
-
-<p>
- Certificate pinning is done by providing a set of certificates by hash of the
- public key (SubjectPublicKeyInfo of the X.509 certificate). A certificate
- chain is then only valid if the certificate chain contains at least one of
- the pinned public keys.
-</p>
-
-<p>
- Note that when using certificate pinning you should always include a backup
- key so that if you are forced to switch to new keys, or change CAs (when
- pinning to a CA certificate or an intermediate of that CA), your
- app's connectivity is unaffected. Otherwise you must to push out
- an update to the app to restore connectivity.
-</p>
-
-<p>
- Additionally it is possible to set an expiration time for pins after which
- pinning is not performed. This helps prevent connectivity issues in
- apps which have not been updated. However, setting an expiration time
- on pins may enable pinning bypass.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">example.com</domain>
- <pin-set expiration="2018-01-01">
- <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
- <!-- backup pin -->
- <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
- </pin-set>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="ConfigInheritance">Configuration Inheritance Behavior</h2>
-
-<p>
- Values not set in a specific config are inherited. This behavior allows more
- complex configurations while keeping the configuration file readable.
-</p>
-
-<p>
- If a value is not set in a specific entry then value from the next more
- general entry is used. Values not set in a {@code domain-config} is
- taken from the parent {@code domain-config}, if nested, or from the {@code
- base-config} if not. Values not set in the {@code base-config} uses the
- platform default values.
-</p>
-
-<p>
- For example consider, where all connections to subdomains of {@code
- example.com} must use a custom set of CAs. Additonally cleartext traffic to
- these domains is permitted <em>except</em> when connecting to {@code
- secure.example.com}. By nesting the configuration for {@code
- secure.example.com} inside the configuration for {@code example.com} the
- {@code trust-anchors} does not need to be duplicated.
-</p>
-
-<p>
-<code>res/xml/network_security_config.xml</code>:
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <domain-config>
- <domain includeSubdomains="true">example.com</domain>
- <trust-anchors>
- <certificates src="@raw/my_ca"/>
- </trust-anchors>
- <domain-config cleartextTrafficPermitted="false">
- <domain includeSubdomains="true">secure.example.com</domain>
- </domain-config>
- </domain-config>
-</network-security-config>
-</pre>
-</p>
-
-
-<h2 id="FileFormat">Configuration File Format</h2>
-
-<p>
- The Network Security Configuration feature uses an XML file format.
- The overall structure of the file is shown in the following code sample:
-</p>
-
-<pre>
-<?xml version="1.0" encoding="utf-8"?>
-<network-security-config>
- <base-config>
- <trust-anchors>
- <certificates src="..."/>
- ...
- </trust-anchors>
- </base-config>
-
- <domain-config>
- <domain>android.com</domain>
- ...
- <trust-anchors>
- <certificates src="..."/>
- ...
- </trust-anchors>
- <pin-set>
- <pin digest="...">...</pin>
- ...
- </pin-set>
- </domain-config>
- ...
- <debug-overrides>
- <trust-anchors>
- <certificates src="..."/>
- ...
- </trust-anchors>
- </debug-overrides>
-</network-security-config>
-</pre>
-
-<p>
- The following sections describe the syntax and other details of the file
- format.
-</p>
-
-<h3 id="network-security-config">
- <network-security-config>
-</h3>
-
-<dl class="xml">
- <dt>
- can contain:
- </dt>
-
- <dd>
- 0 or 1 of <code><a href="#base-config"><base-config></a></code><br>
- Any number of <code><a href=
- "#domain-config"><domain-config></a></code><br>
- 0 or 1 of <code><a href="#debug-overrides"><debug-overrides></a></code>
- </dd>
-</dl>
-
-<h3 id="base-config">
- <base-config>
-</h3>
-
-<dl class="xml">
- <dt>
- syntax:
- </dt>
-</dl>
-
-<pre class="stx">
-<base-config <a href=
-"#CleartextTrafficPermitted">cleartextTrafficPermitted</a>=["true" | "false"]>
- ...
-</base-config>
-</pre>
-<dl class="xml">
- <dt>
- can contain:
- </dt>
-
- <dd>
- <code><a href="#trust-anchors"><trust-anchors></a></code>
- </dd>
-
- <dt>
- description:
- </dt>
-
- <dd>
- The default configuration used by all connections whose destination is not
- covered by a <a href="#domain-config"><code>domain-config</code></a>.
-
-<p>
- Any values that are not set use the platform default values. The default
- configuration for apps targeting above API level 24 and above:
-</p>
-
-<pre>
-<base-config cleartextTrafficPermitted="true">
- <trust-anchors>
- <certificates src="system" />
- </trust-anchors>
-</base-config>
-</pre>
-The default configuration for apps targeting API level 23 and below is:
-<pre>
-<base-config cleartextTrafficPermitted="true">
- <trust-anchors>
- <certificates src="system" />
- <certificates src="user" />
- </trust-anchors>
-</base-config>
-</pre>
-
- </dd>
-</dl>
-
-<h3 id="domain-config"><domain-config></h3>
-<dl class="xml">
-<dt>syntax:</dt>
-<dd>
-<pre class="stx"><domain-config <a href="#CleartextTrafficPermitted">cleartextTrafficPermitted</a>=["true" | "false"]>
- ...
-</domain-config></pre>
-</dd>
-
-<dt>Can Contain:</dt>
-
-<dd>
-1 or more <code><a href="#domain"><domain></a></code>
-<br/>0 or 1 <code><a href="#trust-anchors"><trust-anchors></a></code>
-<br/>0 or 1 <code><a href="#pin-set"><pin-set></code></a>
-<br/>Any number of nested <code><domain-config></code></dd>
-
-<dt>Description</dt>
-<dd>Configuration used for connections to specific destinations as the defined by {@code domain} elements.
-
-<p>Note that if multiple {@code domain-config} elements cover a destination the config with the most specific (longest)
-matching domain rule is used.</p></dd>
-</dl>
-
-
-<h3 id="domain"><domain></h3>
-
-<dl class="xml">
- <dt>
- syntax:
- </dt>
-
- <dd>
- <pre class="stx">
-<domain includeSubdomains=["true" | "false"]>example.com</domain>
-</pre>
- </dd>
-
- <dt>
- Attributes:
- </dt>
-
- <dd>
- <dl class="attr">
- <dt>
- {@code includeSubdomains}
- </dt>
-
- <dd>
- If {@code "true"} then this domain rule matches the domain and all
- subdomains, including subdomains of subdomains, otherwise the rule only
- applies to exact matches.
- </dd>
- </dl>
- </dd>
-
- <dt>
- Description:
- </dt>
-</dl>
-
-<h3 id="debug-overrides"><debug-overrides></h3>
-
-<dl class="xml">
- <dt>
- syntax:
- </dt>
-
- <dd>
- <pre class="stx">
-<debug-overrides>
- ...
-</debug-overrides>
-</pre>
- </dd>
-
- <dt>
- Can Contain:
- </dt>
-
- <dd>
- 0 or 1 <code><a href="#trust-anchors"><trust-anchors></a></code>
- </dd>
-
- <dt>
- Description:
- </dt>
-
- <dd>
- Overrides to be applied when <a href=
- "{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
- is {@code "true"} which is normally the case for non-release builds
- generated by IDEs and build tools. Trust anchors specified in {@code
- debug-overrides} are added to all other configurations and certificate
- pinning is not performed when the server's certificate chain uses one of
- these debug-only trust anchors. If <a href=
- "{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
- is {@code "false"} then this section is completely ignored.
- </dd>
-</dl>
-
-<h3 id="trust-anchors"><trust-anchors></h3>
-<dl class="xml">
- <dt>
- syntax:
- </dt>
-
- <dd>
- <pre class="stx">
-<trust-anchors>
-...
-</trust-anchors>
-</pre>
- </dd>
-
- <dt>
- Can Contain:
- </dt>
-
- <dd>
- Any number of <code><a href="#certificates"><certificates></a></code>
- </dd>
-
- <dt>
- Description:
- </dt>
-
- <dd>
- Set of trust anchors for secure connections.
- </dd>
-</dl>
-
-
-<h3 id="certificates"><certificates></h3>
-<dl class="xml">
-<dt>syntax:</dt>
-<dd><pre class="stx"><certificates src=["system" | "user" | "<i>raw resource</i>"]
- overridePins=["true" | "false"] />
-</pre></dd>
-<dt>description:</dt>
-<dd>Set of X.509 certificates for {@code trust-anchors} elements.</dd>
-
-<dt>attributes:</dt>
-<dd><dl class="attr">
-<dt>{@code src}</dt>
-<dd>
-The source of CA certificates, can be one of
-<ul>
- <li>a raw resource id pointing to a file containing X.509 certificates.
- Certificates must be encoded in DER or PEM format. In the case of PEM
- certificates the file <em>must not</em> contain extra non-PEM data such as
- comments.
- </li>
-
- <li>{@code "system"} for the pre-installed system CA certificates
- </li>
-
- <li>{@code "user"} for user-added CA certificates
- </li>
-</ul>
-</dd>
-
-<dt>{@code overridePins}</dt>
-<dd>
- <p>
- Specifies if the CAs from this source bypass certificate pinning. If {@code
- "true"} then certificate chains which chain through one of the CAs from this
- source then pinning is not be performed. This can be useful for debug CAs
- or to support letting the user MiTM your app's secure traffic.
- </p>
-
- <p>
- Default is {@code "false"} unless specified in a {@code debug-overrides}
- element, in which case the default is {@code "true"}.
- </p>
-</dd>
-</dl>
-</dd>
-
-
-<h3 id="pin-set"><pin-set></h3>
-
-<dl class="xml">
- <dt>
- syntax:
- </dt>
-
- <dd>
-<pre class="stx">
-<pin-set expiration="date">
-...
-</pin-set>
-</pre>
- </dd>
-
- <dt>
- Can Contain:
- </dt>
-
- <dd>
- Any number of <code><a href="#pin"><pin></a></code>
- </dd>
-
- <dt>
- Description:
- </dt>
-
- <dd>
- A set of public key pins. For a secure connection to be trusted, one of the
- public keys in the chain of trust must be in the set of pins. See
- <code><a href="#pin"><pin></a></code> for the format of pins.
- </dd>
-
- <dt>
- Attributes:
- </dt>
-
- <dd>
- <dl class="attr">
- <dt>
- {@code expiration}
- </dt>
-
- <dd>
- The date, in {@code yyyy-MM-dd} format, at and after which the pins
- expire, thus disabling pinning. If the attribute is not set then the
- pins do not expire.
- <p>
- Expiration helps prevent connectivity issues in apps which do
- not get updates to their pin set, for example because the user
- disabled app updates.
- </p>
- </dd>
- </dl>
- </dd>
-</dl>
-
-<h3 id="pin"><pin></h3>
-<dl class="xml">
- <dt>
- syntax:
- </dt>
-
- <dd>
-<pre class="stx">
-<pin digest=["SHA-256"]>base64 encoded digest of X.509
- SubjectPublicKeyInfo (SPKI)</pin>
-</pre>
- </dd>
-
- <dt>
- Attributes:
- </dt>
-
- <dd>
- <dl class="attr">
- <dt>
- {@code digest}
- </dt>
-
- <dd>
- The digest algorithm used to generate the pin. Currently only
- {@code "SHA-256"} is supported.
- </dd>
- </dl>
- </dd>
-</dl>
diff --git a/docs/html/preview/features/tv-recording-api.jd b/docs/html/preview/features/tv-recording-api.jd
deleted file mode 100644
index 6619821..0000000
--- a/docs/html/preview/features/tv-recording-api.jd
+++ /dev/null
@@ -1,142 +0,0 @@
-page.title=TV Recording
-page.keywords=preview,sdk,tv,recording
-page.tags=androidn
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
- <h2>In this document</h2>
- <ol>
- <li><a href="#supporting">Indicating Support for Recording</a></li>
- <li><a href="#recording">Recording a Session</a></li>
- <li><a href="#errors">Handling Recording Errors</a></li>
- <li><a href="#sessions">Managing Recorded Sessions</a></li>
- <li><a href="#best">Best Practices</a></li>
- </ol>
-</div>
-</div>
-
-<p>TV input services let the user pause and resume channel playback via
-time-shifting APIs. Android N expands on time-shifting
-by letting the user save multiple recorded sessions.</p>
-
-<p>Users can schedule recordings in advance, or start a recording as they watch
-a program. Once the system has saved a recording, the user can browse, manage,
-and play back the recording using the system TV app.</p>
-
-<p>If you want to provide recording functionality for your TV input service,
-you must indicate to the system that your app supports recording, implement
-the ability to record programs, handle and communicate any errors that occur
-during recording, and manage your recorded sessions.</p>
-
-<p class="note"><strong>Note:</strong> The Live Channels app does not yet
-provide a way for users to create or access recordings. Until changes are
-made to the Live Channels app, it may be difficult to fully test the recording
-experience for your TV input service.</p>
-
-<h2 id="supporting">Indicating Support for Recording</h2>
-
-<p>To tell the system that your TV input service supports recording, set
-the <code>android:canRecord</code> attribute in your service metadata XML file
-to <code>true</code>:
-</p>
-
-<pre>
-<tv-input xmlns:android="http://schemas.android.com/apk/res/android"
- <b>android:canRecord="true"</b>
- android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />
-</pre>
-
-<p>For more information on the service metadata file, see
-<a href="{@docRoot}training/tv/tif/tvinput.html#manifest">Declare Your TV Input
-Service in the Manifest</a>.
-</p>
-
-<p>Alternatively, you can indicate recording support in your code using
-these steps:</p>
-
-<ol>
-<li>In your <code>TvInputService.onCreate()</code> method, create a new
-<code>TvInputInfo</code> object using the <code>TvInputInfo.Builder</code>
-class.</li>
-<li>When creating the new <code>TvInputInfo</code> object, call
-<code>setCanRecord(true)</code> before calling <code>build()</code> to
-indicate your service supports recording.</li>
-<li>Register your <code>TvInputInfo</code> object with the system by calling
-<code>TvInputManager.updateTvInputInfo()</code>.</li>
-</ol>
-
-<h2 id="recording">Recording a Session</h2>
-
-<p>After your TV input service registers that it supports recording
-functionality, the system calls your
-<code>TvInputService.onCreateRecordingSession()</code> when it needs to access
-your app's recording implementation. Implement your own
-<code>TvInputService.RecordingSession</code> subclass and return it
-when the <code>onCreateRecordingSession()</code> callback
-fires. This subclass is responsible for switching to the correct channel data,
-recording the requested data, and communicating recording status and errors to
-the system.</p>
-
-<p>When the system calls <code>RecordingSession.onTune()</code>, passing in a
-channel URI, tune to the channel that the URI specifies. Notify the system that
-your app has tuned to the desired channel by calling <code>notifyTuned()</code>,
-or, if your app could not tune to the proper channel, call
-<code>notifyError()</code>.</p>
-
-<p>The system next invokes the <code>RecordingSession.onStartRecording()</code>
-callback. Your app must start recording immediately. When the system invokes
-this callback, it may provide a URI that contains information about the program
-that is about to be recorded. When the recording is done, you need to copy this
-data to the <code>RecordedPrograms</code> data table.</p>
-
-<p>Finally, the system calls <code>RecordingSession.onStopRecording()</code>.
-At this point, your app must stop recording immediately. You also need to
-create an entry in the <code>RecordedPrograms</code> table. This entry should
-include the recorded session data URI in the
-<code>RecordedPrograms.COLUMN_RECORDING_DATA_URI</code> column, and any program
-information that the system provided in the initial call to
-<code>onStartRecording()</code>.</p>
-
-<p>For more details on how to access the <code>RecordedPrograms</code> table
-see <a href="#sessions">Managing Recorded Sessions</a>.</p>
-
-<h2 id="errors">Handling Recording Errors</h2>
-
-<p>If an error occurs during recording, rendering the recorded data unusable,
-notify the system by calling <code>RecordingSession.notifyError()</code>.
-Similarly, you can call <code>notifyError()</code> after a recording session is
-created to let the system know that your app can no longer record sessions.</p>
-
-<p>If an error occurs during recording, but you'd like to provide a usable
-partial recording to users for playback, call
-<code>RecordingSession.notifyRecordingStopped()</code> to enable the system to
-use the partial session.</p>
-
-<h2 id="sessions">Managing Recorded Sessions</h2>
-
-<p>The system maintains information for all recorded sessions from all
-recording-capable channel apps in the <code>TvContract.RecordedPrograms</code>
-content provider table. This information is accessible via the
-<code>RecordedPrograms.Uri</code> content URI. Use content provider APIs to
-read, add, and delete entries from this table.</p>
-
-<p>For more information on working with content provider data see
-<a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
-Content Provider Basics</a> .</p>
-
-<h2 id="best">Best Practices</h2>
-
-<p>TV devices may have limited storage, so use your best judgment when
-allocating storage to save recorded sessions. Use
-<code>RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)</code> when
-there isn't enough space to save a recorded session.</p>
-
-<p>When the user initiates recording, you should start recording data as soon
-as possible. To facilitate this, complete any up-front time-consuming tasks,
-like accessing and allocating storage space, when the system invokes the
-<code>onCreateRecordingSession()</code> callback. Doing so lets you start
-recording immediately when the <code>onStartRecording()</code> callback
-fires.</p>
diff --git a/docs/html/preview/guide.jd b/docs/html/preview/guide.jd
deleted file mode 100644
index 28c0fe9..0000000
--- a/docs/html/preview/guide.jd
+++ /dev/null
@@ -1,190 +0,0 @@
-page.title=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 N 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/preview/index.jd b/docs/html/preview/index.jd
deleted file mode 100644
index 241a98e..0000000
--- a/docs/html/preview/index.jd
+++ /dev/null
@@ -1,150 +0,0 @@
-page.title=Android N Developer Preview
-page.tags="preview","developer"
-meta.tags="preview", "android"
-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">
- <div class="wrap" style="max-width:1100px;margin-top:0">
- <div class="cols dac-hero-content" style="padding-bottom:1em;">
-
- <div class="col-7of16 col-push-9of16" style="padding-left:2em">
- <h1 class="dac-hero-title">Android N Developer Preview</h1>
- <p class="dac-hero-description">
- <strong>Android N final SDK is now available!</strong>
- Get ready for Android N!
- <strong>Test your apps</strong> on Nexus and other devices. Support new system
- behaviors to <strong>save power 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="{@docRoot}preview/overview.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>-->
- </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>
- </div>
- <div class="dac-section dac-small">
- <div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/resources"
- data-cardSizes="6x2"
- data-maxResults="6"></div>
- </div>
- </div>
-</section>
-
-<div id="useUpdatedTemplates" style="display:none" 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">
- <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
- </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>
- 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"
- data-query="type:blog+tag:androidn+tag:featured, type:youtube+tag:androidn+tag:featured"
- data-sortOrder="-timestamp"
- data-cardSizes="6x6"
- data-items-per-page="6"
- data-maxResults="15"
- data-initial-results="3"></div>
-</div></section>
-
-
-<section class="dac-section dac-gray" id="videos"><div class="wrap">
- <h1 class="dac-section-title">Videos</h1>
- <div class="dac-section-subtitle">
- 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/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">Resources</h1>
- <div class="dac-section-subtitle">
- Essential information to help you get your apps ready for Android N.
- </div>
-
- <div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/more"
- data-cardSizes="6x6"
- data-items-per-page="6"
- data-maxResults="15"
- data-initial-results="6"></div>
-
- </div>
-</section>
-
diff --git a/docs/html/preview/j8-jack.jd b/docs/html/preview/j8-jack.jd
deleted file mode 100644
index 4ea016d..0000000
--- a/docs/html/preview/j8-jack.jd
+++ /dev/null
@@ -1,221 +0,0 @@
-page.title=Java 8 Language Features
-page.keywords="android N", "Java 8", "Jack"
-@jd:body
-
-<div id="qv-wrapper">
- <div id="qv">
- <ol>
- <li>
- <a href="#supported-features">Supported Java 8 Language Features and APIs</a>
- </li>
- <li>
- <a href="#configuration">Enabling Java 8 Features and the Jack Toolchain</a>
- </li>
- </ol>
- </div>
-</div>
-
-<p>Android N introduces support for Java 8 language features
- that you can use when developing apps that target Android N.
- This page describes the new language features supported in the Android N
- Preview, how to properly set up your project to use them, and any known
- issues you may encounter.
-</p>
-
-<p>To start using these features, you need to download and set up Android
-Studio 2.1 and the Android N Preview SDK, which includes the required
-Jack toolchain and updated Android Plugin for Gradle. If you haven't yet
-installed the Android N Preview SDK, see <a href=
-"{@docRoot}preview/setup-sdk.html">Set Up to Develop for Android N</a>.</p>
-
-
-
-<p class="note">
- <strong>Note:</strong> Using the new Java 8 language features is not a
- requirement for developing apps that target the Android N platform. If you
- don't want to write code with Java 8 language features, you can keep your
- project's source and target compatibility values set to Java 7, but you still
- must compile with JDK 8 to build against the Android N platform.
-</p>
-
-<h2 id="supported-features">
- Supported Java 8 Language Features and APIs
-</h2>
-
-<p>
- Android does not currently support all Java 8 language features. However, the
- following features are now available when developing apps targeting the
- Android N Preview:
-</p>
-
-<ul>
- <li>
- <a class="external-link" href=
- "https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html">Default
- and static interface methods</a>
- </li>
-
- <li>
- <a class="external-link" href=
- "https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html">
- Lambda expressions</a> (also available on API level 23 and lower)
- </li>
-
- <li>
- <a class="external-link" href=
- "https://docs.oracle.com/javase/tutorial/java/annotations/repeating.html">Repeatable
- annotations</a>
- </li>
-
- <li>
- <a class="external-link" href=
- "https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html">
- Method References</a> (also available on API level 23 and lower)
- </li>
-
- <li>
- <a class="external-link" href=
- "https://docs.oracle.com/javase/tutorial/java/annotations/type_annotations.html">
- Type Annotations</a> (also available on API level 23 and lower)
- </li>
-</ul>
-
-<p class="note">
- <strong>Note:</strong> Type annotation information is only available at
- compile time, and not during runtime.
-</p>
-
-<p>
- To test lambda expressions, method references, and type annotations on
- earlier versions of Android, go to your {@code build.gradle} file, and set
- {@code compileSdkVersion} and {@code targetSdkVersion} to 23 or lower. You
- will still need to <a href="#configuration">enable the Jack toolchain</a> to
- use these Java 8 features.
-</p>
-
-<p>
- Additionally, the following Java 8 language feature APIs are now available:
-</p>
-
-<ul>
- <li>Reflection and language-related APIs:
- <ul>
- <li>
- <a class="external-link" href=
- "https://docs.oracle.com/javase/8/docs/api/java/lang/FunctionalInterface.html">
- {@code java.lang.FunctionalInterface}</a>
- </li>
-
- <li>
- <a class="external-link" href=
- "https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Repeatable.html">
- {@code java.lang.annotation.Repeatable}</a>
- </li>
-
- <li>
- <a class="external-link" href=
- "https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html#isDefault--">
- {@code java.lang.reflect.Method.isDefault()}</a>
- </li>
-
- <li>and Reflection APIs associated with repeatable annotations, such as
- <a class="external-link" href=
- "https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/AnnotatedElement.html#getAnnotationsByType-java.lang.Class-">
- {@code AnnotatedElement.getAnnotationsByType(Class)}</a>
- </li>
- </ul>
- </li>
-
- <li>Utility APIs:
- <ul>
- <li>
- <a class="external-link" href=
- "https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html">
- {@code java.util.function}</a>
- </li>
-
- <li>
- <a class="external-link" href=
- "https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html">
- {@code java.util.stream}</a>
- </li>
- </ul>
- </li>
-</ul>
-
-<h2 id="configuration">
- Enabling Java 8 Features and the Jack Toolchain
-</h2>
-
-<p>
- In order to use the new Java 8 language features, you need to also use the
- new <a class="external-link" href=
- "https://source.android.com/source/jack.html">Jack toolchain</a>. This new
- Android toolchain compiles Java language source into Android-readable dex
- bytecode, has its own {@code .jack} library format, and provides most toolchain
- features as part of a single tool: repackaging, shrinking, obfuscation and
- multidex.
-</p>
-
-<p>Here is a comparison of the two toolchains used to build Android DEX files:</p>
-<ul>
- <li>Legacy javac toolchain:<br>
- <b>javac</b> ({@code .java} --> {@code .class}) --> <b>dx</b> ({@code
- .class} --> {@code .dex})
- </li>
-
- <li>New Jack toolchain:<br>
- <b>Jack</b> ({@code .java} --> {@code .jack} --> {@code .dex})
- </li>
-</ul>
-
-<h3>
- Configuring Gradle
-</h3>
-
-<p>
- To enable the Java 8 language features and Jack for your project, enter the
- following in your module-level {@code build.gradle} file:
-</p>
-
-<pre>
-android {
- ...
- defaultConfig {
- ...
- jackOptions {
- enabled true
- }
- }
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_8
- targetCompatibility JavaVersion.VERSION_1_8
- }
-}
-</pre>
-
-<h3 id="known-issues">
- Known Issues
-</h3>
-
-<p>
- <a href="{@docRoot}tools/building/building-studio.html#instant-run">Instant
- Run</a> does not currently work with Jack and will be disabled while using
- the new toolchain.
-</p>
-
-<p>Because Jack does not generate intermediate class files when compiling an
-app, tools that depend on these files do not currently work with Jack. Some
-examples of these tools are:</p>
-
-<ul>
- <li>Lint detectors that operate on class files
- </li>
-
- <li>Tools and libraries that require the app’s class files (such as
- instrumentation tests with JaCoCo)
- </li>
-</ul>
-
-<p>If you find other problems while using Jack, <a href=
-"http://tools.android.com/filing-bugs">please file a bug</a>.</p>
\ No newline at end of file
diff --git a/docs/html/preview/license.jd b/docs/html/preview/license.jd
deleted file mode 100644
index ae02aae..0000000
--- a/docs/html/preview/license.jd
+++ /dev/null
@@ -1,145 +0,0 @@
-page.title=License Agreement
-
-@jd:body
-
-<p>
-To get started with the Android SDK Preview, you must agree to the following terms and conditions.
-As described below, please note that this is a preview version of the Android SDK, subject to change, that you use at your own risk. The Android SDK Preview is not a stable release, and may contain errors and defects that can result in serious damage to your computer systems, devices and data.
-</p>
-
-<p>
-This is the Android SDK Preview License Agreement (the “License Agreement”).
-</p>
-<div class="sdk-terms" style="height:auto;border:0;padding:0;width:700px">
-1. Introduction
-
-1.1 The Android SDK Preview (referred to in the License Agreement as the “Preview” and specifically including the Android system files, packaged APIs, and Preview library files, if and when they are made available) is licensed to you subject to the terms of the License Agreement. The License Agreement forms a legally binding contract between you and Google in relation to your use of the Preview.
-
-1.2 "Android" means the Android software stack for devices, as made available under the Android Open Source Project, which is located at the following URL: http://source.android.com/, as updated from time to time.
-
-1.3 “Android-compatible” means any Android implemation that (i) complies with the Android Compatibility Definition document, which can be found at the Android compatibility website (http://source.android.com/compatibility) and which may be updated from time to time; and (ii) successfully passes the Android Compatibility Test Suite (CTS).
-
-1.4 "Google" means Google Inc., a Delaware corporation with principal place of business at 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States.
-
-2. Accepting the License Agreement
-
-2.1 In order to use the Preview, you must first agree to the License Agreement. You may not use the Preview if you do not accept the License Agreement.
-
-2.2 By clicking to accept and/or using the Preview, you hereby agree to the terms of the License Agreement.
-
-2.3 You may not use the Preview and may not accept the License Agreement if you are a person barred from receiving the Preview under the laws of the United States or other countries including the country in which you are resident or from which you use the Preview.
-
-2.4 If you will use the Preview internally within your company or organization you agree to be bound by the License Agreement on behalf of your employer or other entity, and you represent and warrant that you have full legal authority to bind your employer or such entity to the License Agreement. If you do not have the requisite authority, you may not accept the License Agreement or use the Preview on behalf of your employer or other entity.
-
-3. Preview License from Google
-
-3.1 Subject to the terms of this License Agreement, Google grants you a limited, worldwide, royalty-free, non-assignable, non-exclusive, and non-sublicensable license to use the Preview solely to develop applications for compatible implementations of Android.
-
-3.2 You may not use this Preview to develop applications for other platforms (including non-compatible implementations of Android) or to develop another SDK. You are of course free to develop applications for other platforms, including non-compatible implementations of Android, provided that this Preview is not used for that purpose.
-
-3.3 You agree that Google or third parties owns all legal right, title and interest in and to the Preview, including any Intellectual Property Rights that subsist in the Preview. "Intellectual Property Rights" means any and all rights under patent law, copyright law, trade secret law, trademark law, and any and all other proprietary rights. Google reserves all rights not expressly granted to you.
-
-3.4 You may not use the Preview for any purpose not expressly permitted by the License Agreement. Except to the extent required by applicable third party licenses, you may not: (a) copy (except for backup purposes), modify, adapt, redistribute, decompile, reverse engineer, disassemble, or create derivative works of the Preview or any part of the Preview; or (b) load any part of the Preview onto a mobile handset or any other hardware device except a personal computer, combine any part of the Preview with other software, or distribute any software or device incorporating a part of the Preview.
-
-3.5 Use, reproduction and distribution of components of the Preview licensed under an open source software license are governed solely by the terms of that open source software license and not the License Agreement. You agree to remain a licensee in good standing in regard to such open source software licenses under all the rights granted and to refrain from any actions that may terminate, suspend, or breach such rights.
-
-3.6 You agree that the form and nature of the Preview that Google provides may change without prior notice to you and that future versions of the Preview may be incompatible with applications developed on previous versions of the Preview. You agree that Google may stop (permanently or temporarily) providing the Preview (or any features within the Preview) to you or to users generally at Google's sole discretion, without prior notice to you.
-
-3.7 Nothing in the License Agreement gives you a right to use any of Google's trade names, trademarks, service marks, logos, domain names, or other distinctive brand features.
-
-3.8 You agree that you will not remove, obscure, or alter any proprietary rights notices (including copyright and trademark notices) that may be affixed to or contained within the Preview.
-
-4. Use of the Preview by You
-
-4.1 Google agrees that nothing in the License Agreement gives Google any right, title or interest from you (or your licensors) under the License Agreement in or to any software applications that you develop using the Preview, including any intellectual property rights that subsist in those applications.
-
-4.2 You agree to use the Preview and write applications only for purposes that are permitted by (a) the License Agreement, and (b) any applicable law, regulation or generally accepted practices or guidelines in the relevant jurisdictions (including any laws regarding the export of data or software to and from the United States or other relevant countries).
-
-4.3 You agree that if you use the Preview to develop applications, you will protect the privacy and legal rights of users. If users provide you with user names, passwords, or other login information or personal information, you must make the users aware that the information will be available to your application, and you must provide legally adequate privacy notice and protection for those users. If your application stores personal or sensitive information provided by users, it must do so securely. If users provide you with Google Account information, your application may only use that information to access the user's Google Account when, and for the limited purposes for which, each user has given you permission to do so.
-
-4.4 You agree that you will not engage in any activity with the Preview, including the development or distribution of an application, that interferes with, disrupts, damages, or accesses in an unauthorized manner the servers, networks, or other properties or services of Google or any third party.
-
-4.5 You agree that you are solely responsible for (and that Google has no responsibility to you or to any third party for) any data, content, or resources that you create, transmit or display through Android and/or applications for Android, and for the consequences of your actions (including any loss or damage which Google may suffer) by doing so.
-
-4.6 You agree that you are solely responsible for (and that Google has no responsibility to you or to any third party for) any breach of your obligations under the License Agreement, any applicable third party contract or Terms of Service, or any applicable law or regulation, and for the consequences (including any loss or damage which Google or any third party may suffer) of any such breach.
-
-4.7 The Preview is in development, and your testing and feedback are an important part of the development process. By using the Preview, you acknowledge that implementation of some features are still under development and that you should not rely on the Preview having the full functionality of a stable release. You agree not to publicly distribute or ship any application using this Preview as this Preview will no longer be supported after the official Android SDK is released.
-
-5. Your Developer Credentials
-
-5.1 You agree that you are responsible for maintaining the confidentiality of any developer credentials that may be issued to you by Google or which you may choose yourself and that you will be solely responsible for all applications that are developed under your developer credentials.
-
-6. Privacy and Information
-
-6.1 In order to continually innovate and improve the Preview, Google may collect certain usage statistics from the software including but not limited to a unique identifier, associated IP address, version number of the software, and information on which tools and/or services in the Preview are being used and how they are being used. Before any of this information is collected, the Preview will notify you and seek your consent. If you withhold consent, the information will not be collected.
-
-6.2 The data collected is examined in the aggregate to improve the Preview and is maintained in accordance with Google's Privacy Policy located at http://www.google.com/policies/privacy/.
-
-7. Third Party Applications
-
-7.1 If you use the Preview to run applications developed by a third party or that access data, content or resources provided by a third party, you agree that Google is not responsible for those applications, data, content, or resources. You understand that all data, content or resources which you may access through such third party applications are the sole responsibility of the person from which they originated and that Google is not liable for any loss or damage that you may experience as a result of the use or access of any of those third party applications, data, content, or resources.
-
-7.2 You should be aware the data, content, and resources presented to you through such a third party application may be protected by intellectual property rights which are owned by the providers (or by other persons or companies on their behalf). You may not modify, rent, lease, loan, sell, distribute or create derivative works based on these data, content, or resources (either in whole or in part) unless you have been specifically given permission to do so by the relevant owners.
-
-7.3 You acknowledge that your use of such third party applications, data, content, or resources may be subject to separate terms between you and the relevant third party.
-
-8. Using Google APIs
-
-8.1 Google APIs
-
-8.1.1 If you use any API to retrieve data from Google, you acknowledge that the data may be protected by intellectual property rights which are owned by Google or those parties that provide the data (or by other persons or companies on their behalf). Your use of any such API may be subject to additional Terms of Service. You may not modify, rent, lease, loan, sell, distribute or create derivative works based on this data (either in whole or in part) unless allowed by the relevant Terms of Service.
-
-8.1.2 If you use any API to retrieve a user's data from Google, you acknowledge and agree that you shall retrieve data only with the user's explicit consent and only when, and for the limited purposes for which, the user has given you permission to do so.
-
-9. Terminating the License Agreement
-
-9.1 the License Agreement will continue to apply until terminated by either you or Google as set out below.
-
-9.2 If you want to terminate the License Agreement, you may do so by ceasing your use of the Preview and any relevant developer credentials.
-
-9.3 Google may at any time, terminate the License Agreement, with or without cause, upon notice to you.
-
-9.4 The License Agreement will automatically terminate without notice or other action upon the earlier of:
-(A) when Google ceases to provide the Preview or certain parts of the Preview to users in the country in which you are resident or from which you use the service; and
-(B) Google issues a final release version of the Android SDK.
-
-9.5 When the License Agreement is terminated, the license granted to you in the License Agreement will terminate, you will immediately cease all use of the Preview, and the provisions of paragraphs 10, 11, 12 and 14 shall survive indefinitely.
-
-10. DISCLAIMERS
-
-10.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT YOUR USE OF THE PREVIEW IS AT YOUR SOLE RISK AND THAT THE PREVIEW IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT WARRANTY OF ANY KIND FROM GOOGLE.
-
-10.2 YOUR USE OF THE PREVIEW AND ANY MATERIAL DOWNLOADED OR OTHERWISE OBTAINED THROUGH THE USE OF THE PREVIEW IS AT YOUR OWN DISCRETION AND RISK AND YOU ARE SOLELY RESPONSIBLE FOR ANY DAMAGE TO YOUR COMPUTER SYSTEM OR OTHER DEVICE OR LOSS OF DATA THAT RESULTS FROM SUCH USE. WITHOUT LIMITING THE FOREGOING, YOU UNDERSTAND THAT THE PREVIEW IS NOT A STABLE RELEASE AND MAY CONTAIN ERRORS, DEFECTS AND SECURITY VULNERABILITIES THAT CAN RESULT IN SIGNIFICANT DAMAGE, INCLUDING THE COMPLETE, IRRECOVERABLE LOSS OF USE OF YOUR COMPUTER SYSTEM OR OTHER DEVICE.
-
-10.3 GOOGLE FURTHER EXPRESSLY DISCLAIMS ALL WARRANTIES AND CONDITIONS OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
-
-11. LIMITATION OF LIABILITY
-
-11.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT GOOGLE, ITS SUBSIDIARIES AND AFFILIATES, AND ITS LICENSORS SHALL NOT BE LIABLE TO YOU UNDER ANY THEORY OF LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL OR EXEMPLARY DAMAGES THAT MAY BE INCURRED BY YOU, INCLUDING ANY LOSS OF DATA, WHETHER OR NOT GOOGLE OR ITS REPRESENTATIVES HAVE BEEN ADVISED OF OR SHOULD HAVE BEEN AWARE OF THE POSSIBILITY OF ANY SUCH LOSSES ARISING.
-
-12. Indemnification
-
-12.1 To the maximum extent permitted by law, you agree to defend, indemnify and hold harmless Google, its affiliates and their respective directors, officers, employees and agents from and against any and all claims, actions, suits or proceedings, as well as any and all losses, liabilities, damages, costs and expenses (including reasonable attorneys’ fees) arising out of or accruing from (a) your use of the Preview, (b) any application you develop on the Preview that infringes any Intellectual Property Rights of any person or defames any person or violates their rights of publicity or privacy, and (c) any non-compliance by you of the License Agreement.
-
-13. Changes to the License Agreement
-
-13.1 Google may make changes to the License Agreement as it distributes new versions of the Preview. When these changes are made, Google will make a new version of the License Agreement available on the website where the Preview is made available.
-
-14. General Legal Terms
-
-14.1 the License Agreement constitutes the whole legal agreement between you and Google and governs your use of the Preview (excluding any services which Google may provide to you under a separate written agreement), and completely replaces any prior agreements between you and Google in relation to the Preview.
-
-14.2 You agree that if Google does not exercise or enforce any legal right or remedy which is contained in the License Agreement (or which Google has the benefit of under any applicable law), this will not be taken to be a formal waiver of Google's rights and that those rights or remedies will still be available to Google.
-
-14.3 If any court of law, having the jurisdiction to decide on this matter, rules that any provision of the License Agreement is invalid, then that provision will be removed from the License Agreement without affecting the rest of the License Agreement. The remaining provisions of the License Agreement will continue to be valid and enforceable.
-
-14.4 You acknowledge and agree that each member of the group of companies of which Google is the parent shall be third party beneficiaries to the License Agreement and that such other companies shall be entitled to directly enforce, and rely upon, any provision of the License Agreement that confers a benefit on (or rights in favor of) them. Other than this, no other person or company shall be third party beneficiaries to the License Agreement.
-
-14.5 EXPORT RESTRICTIONS. THE PREVIEW IS SUBJECT TO UNITED STATES EXPORT LAWS AND REGULATIONS. YOU MUST COMPLY WITH ALL DOMESTIC AND INTERNATIONAL EXPORT LAWS AND REGULATIONS THAT APPLY TO THE PREVIEW. THESE LAWS INCLUDE RESTRICTIONS ON DESTINATIONS, END USERS AND END USE.
-
-14.6 The License Agreement may not be assigned or transferred by you without the prior written approval of Google, and any attempted assignment without such approval will be void. You shall not delegate your responsibilities or obligations under the License Agreement without the prior written approval of Google.
-
-14.7 The License Agreement, and your relationship with Google under the License Agreement, shall be governed by the laws of the State of California without regard to its conflict of laws provisions. You and Google agree to submit to the exclusive jurisdiction of the courts located within the county of Santa Clara, California to resolve any legal matter arising from the License Agreement. Notwithstanding this, you agree that Google shall still be allowed to apply for injunctive remedies (or an equivalent type of urgent legal relief) in any jurisdiction.
-
-
-</div>
\ No newline at end of file
diff --git a/docs/html/preview/overview.jd b/docs/html/preview/overview.jd
deleted file mode 100644
index 601442e..0000000
--- a/docs/html/preview/overview.jd
+++ /dev/null
@@ -1,450 +0,0 @@
-page.title=Program Overview
-page.metaDescription=Get your apps ready for the next version of Android.
-page.image=images/cards/card-n-overview_2x.png
-meta.tags="preview", "developer", "android"
-page.tags="preview", "developer", "android"
-
-@jd:body
-
-<!--
-<div class="cols" style=
-"background-color:#B2DFDB; padding: 5px 0;margin-bottom:1em; text-align:center;">
-<h3>
- Developer Preview X is now available
- </h3>
- <p>This release includes the ...</p>
- <div style="margin:auto 1em">
- <ul class="dac-section-links">
- <li class="dac-section-link">
- <a href="{@docRoot}preview/support.html#dp4">
- <span class="dac-sprite dac-auto-chevron"></span>
- Read the Notes</a>
- </li>
-
- <li class="dac-section-link">
- <a href="{@docRoot}preview/download.html">
- <span class="dac-sprite dac-auto-chevron"></span>
- Test the Update</a>
- </li>
-
- <li class="dac-section-link">
- <a href="https://code.google.com/p/android-developer-preview/">
- <span class="dac-sprite dac-auto-chevron"></span>
- Report Issues</a>
- </li>
- </ul>
- </div>
-</div>
--->
-
-<p>
- Welcome to the <strong>Android N Developer Preview</strong>, a program that
- gives you everything you need to test and optimize your apps for the next
- version of Android. It's free, and you can get started right away just by
- downloading the N Developer Preview tools.
-</p>
-
-
-
-
-
-
-
-<div style="background-color:#eceff1;padding:1em;">
-<div class="wrap">
- <div class="cols">
- <div class="col-4of12">
- <h5>
- Hardware and emulator images
- </h5>
-
- <p>
- Run and test your apps on a range of devices or on an emulator.
-
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- Latest platform code
- </h5>
-
- <p>
- We’ll provide monthly updates during the Preview, so you’ll be testing against the latest platform changes.
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- Priority for developer issues
- </h5>
-
- <p>
- During the first several weeks we’ll give priority to developer-reported
- issues, so test and give feedback as soon as possible.
- </p>
- </div>
-
- </div>
-
- <div class="cols">
-
-
- <div class="col-4of12">
- <h5>
- New behaviors and capabilities
- </h5>
-
- <p>
- Start work early to support new platform behaviors and develop with new features.
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- Updates delivered by OTA
- </h5>
-
- <p>
- Seamless over-the-air updates for any supported device through the
- Android Beta Program. No flashing is needed.
- </p>
- </div>
-
- <div class="col-4of12">
- <h5>
- Feedback and support
- </h5>
-
- <p>
- Report issues and give us feedback using our
- <a href="{@docRoot}preview/bug">issue tracker</a>. Connect with other
- developers in the
- <a href="{@docRoot}preview/dev-community">N Developer Community</a>.
- </p>
- </div>
- </div>
-</div>
-</div>
-
-<!--
-<p>New in the Android N Developer Preview: </p>
-
-<ul>
- <li> Accompanying Android Beta Program for consumers, starting later in the preview</li>
- <li> More supported devices, including devices from OEM partners</li>
- <li> Seamless OTAs for your devices, from initial release to final N release without flashing</li>
-</ul>
--->
-
-<h2 id="timeline">Timeline and updates</h2>
-
-<p>
- The N Developer Preview runs from 9 March 2016 until the final Android N
- public release to AOSP and OEMs, planned for Q3 2016.
-</p>
-
-<img src="{@docRoot}images/n-preview-updates_2x.png">
-
-<p>
- At key development milestones, we’ll deliver updates for your development and
- testing environment. In general you can expect an update each month (4 to 6
- week interval). The milestones are listed below.
-</p>
-
-<ul>
- <li><strong><a href="{@docRoot}preview/support.html#dp1">Preview 1</a></strong> (initial release, alpha)</li>
- <li><strong><a href="{@docRoot}preview/support.html#dp2">Preview 2</a></strong> (incremental update, alpha)</li>
- <li><strong><a href="{@docRoot}preview/support.html#dp3">Preview 3</a></strong> (incremental update, beta)</li>
- <li><strong><a href="{@docRoot}preview/support.html#dp4">Preview 4</a></strong> (final APIs and official SDK, Play publishing)</li>
- <li><strong><a href="{@docRoot}preview/support.html#dp5">Preview 5</a></strong> (near-final system images for final testing)</li>
- <li><strong>Final release</strong> to AOSP and ecosystem</li>
-</ul>
-
-<p>
- Each update includes SDK tools, preview system images, emulators, reference
- documentation, and API diffs.
-</p>
-
-<p>
- The <strong>first three preview milestones</strong> provide an <strong>early
- test and development environment</strong> that help you identify
- compatibility issues in your current apps and plan migration or feature work
- needed to target the new platform. This is the priority period in which to
- give us your feedback on features and APIs and file compatibility issues
- — for all of these, please use the <a href="{@docRoot}preview/bug">issue
- tracker</a>. You can expect some API changes across these updates.
-</p>
-
-<p>
- At <strong>previews 4 and 5</strong> you’ll have access to the <strong>final
- N APIs and SDK</strong> to develop with, as well as near-final system images
- to test system behaviors and features. Android N will provide a standard API
- level at this time. You can begin final compatibility testing of your legacy
- apps and refine any new code that is using the N APIs or features.
-</p>
-
-<p>
- Also starting in preview 4, you’ll be able to <strong>publish apps to
- devices</strong> running Android N at the official API level, such as
- consumer devices that have opted into the Android Beta program. You can
- publish into the Google Play alpha and beta channels first, so you can test
- your apps with Android Beta consumers before distributing broadly on the
- store.
-</p>
-
-<p>
- As you test and develop on Android N, we strongly recommend <strong>keeping
- your development environment up-to-date</strong> as preview updates are
- released. To make the process easier, you can enroll your test devices in the
- Android Beta program and get <strong>updates over-the-air (OTA)</strong> at
- each milestone. Alternatively, updated preview images are available that you
- download and flash manually.
-</p>
-
-<p>
- We’ll notify you when preview updates are available via the <a href=
- "http://android-developers.blogspot.com/">Android Developers Blog</a>, as
- well as this site and the <a href="{@docRoot}preview/dev-community">Android
- N Developer Community</a>.
-</p>
-
-
-<h2 id="preview_tools">What's in the N Developer Preview?</h2>
-
-<p>
- The N Developer Preview includes everything you need to test your existing
- apps on a variety of screen sizes, network technologies, CPU/GPU chipsets,
- and hardware architectures.
-</p>
-
-<h3 id="sdk_tools">SDK tools</h3>
-
-<p>You can download these components through the SDK Manager in <a href="{@docRoot}studio/intro/update.html">Android Studio</a>:</p>
-
-<ul>
- <li> N Developer Preview <strong>SDK and tools</strong>
- <li> N Developer Preview <strong>emulator system image</strong> (32-bit & 64-bit)
- <li> N Developer Preview <strong>emulator system Image for Android TV</strong> (32-bit)
- <li> N Developer Preview support libraries (for new app templates)
-</ul>
-
-<p>
- We’ll provide updates to these development tools at each milestone as needed.
-</p>
-
-<h3 id="hardware_system_images">Hardware system images</h3>
-
-<p>
- The N Developer Preview includes Nexus and other hardware system images that you can use when
- testing and developing on physical devices. See the <a href=
- "{@docRoot}preview/download.html">Device Images</a> page for the full list
- of hardware images.
-</p>
-
-<p>
- We’ll deliver updated system images for these devices at each milestone. You
- can download and flash the updated system images to your test devices
- manually, as frequently as you need. This is especially useful for automated
- testing environments where you might need to reflash your device multiple
- times.
-</p>
-
-<p class="note"><strong>Note</strong>:
- <strong>Devices flashed manually will not get OTA updates</strong> like in
- last year’s preview. This year, you can get OTAs by enrolling devices in the
- Android Beta Program — see details in the next section.
-</p>
-
-<h3 id="android_beta">OTA Updates through Android Beta Program</h3>
-
-<p>
- New for Android N is an Over-the-Air (OTA) update program that automatically
- delivers the latest preview updates of Android N directly to devices enrolled
- in the program. The program is free, and it’s open to anyone who has a
- supported device that’s registered to their Google account.
-</p>
-
-<p>
- To enroll in the program visit the <a href="https://g.co/androidbeta">Android
- Beta Program</a> site. You’ll
- see all of the devices registered to your account that are eligible to enroll
- in Android Beta.
-</p>
-
-<ol>
- <li> Choose the devices you want to receive the Android N updates
- <li> Click Enroll, read and agree to the terms of service, and then click OK
-</ol>
-
-<p>
- Once you’ve enrolled, your device will soon receive an update. In most cases,
- you will not need to do a full reset of your data to move to Android N, but
- it’s recommended that you back up any data you don’t want to lose before
- enrolling the device.
-</p>
-
-<p>
- As updates are delivered to your device, we recommend downloading and
- installing them as soon as possible. You’ll want to stay current with the
- latest changes in system UI, behavior, APIs, and features.
-</p>
-
-<p>
- At the conclusion of the Developer Preview, your enrolled devices will
- receive an update to the official Android N release.
-</p>
-
-<p>
- You can un-enroll your devices from the Android Beta program at any time from
- the Android Beta site. Before un-enrolling, make sure to back-up your data on
- the device.
-</p>
-
- <p class="note"><strong>Note</strong>:
- When you un-enroll, <strong>your device will be factory reset</strong>
- to the latest version
- of Android 6.0 Marshmallow (not necessarily the version that you had
- installed prior to enrolling the device). To ensure a clean installation,
- your data will be erased from the device, including contacts, messages,
- photos, and so on.
-</p>
-
-<h3 id="documentation_and_sample_code">Documentation and sample code</h3>
-
-<p>
- These documentation resources are available on the Developer Preview site to
- help you learn about the Android N:
-</p>
-
-<ul>
- <li> <a href="{@docRoot}preview/setup-sdk.html">Set Up to Develop for
-Android N</a> has
- step-by-step instructions for getting started.</li>
- <li> <a href="{@docRoot}preview/behavior-changes.html">Behavior
- Changes</a> points you to key areas to test.</li>
- <li> Documentation of new APIs, including an <a
- href="{@docRoot}preview/api-overview.html">API Overview</a>, downloadable
- <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API
- Reference</a>, and detailed developer guides on key features such as
- multi-window support, bundled notifications, multi-locale support, and others.
- <li> <a href="{@docRoot}preview/samples.html">Sample code</a> that
- demonstrates how to support permissions and other new features.
- <li> <a href="{@docRoot}preview/support.html#release-notes">Release notes</a>
- for the current version of the N Developer Preview, including change notes and
- diff reports.
-</ul>
-
-<h4 id="reference">Downloadable API Reference</h4>
-
-<p>
- During the early preview updates, you can download the latest
- <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API Reference
- for the Android N platform</a> as a separate zip archive. The reference
- download also includes a diff report that helps you identify API changes from
- API 23 and the previous update.
-</p>
-
-<p>
- When the Android N APIs are final and an official API level is assigned,
- we’ll provide the API reference to you online at <a href=
- "https://developer.android.com">https://developer.android.com</a>.
-</p>
-
-<h3 id="support_resources">
- Support resources
-</h3>
-
-<p>
- As you test and develop on the N Developer Preview, please use these channels
- to report issues and give feedback.
-</p>
-
-<ul>
- <li> <a href="https://code.google.com/p/android-developer-preview/">N Developer Preview Issue
- Tracker</a> is your <strong>primary feedback channel.</strong> You can report bugs, performance
- issues, and general feedback through the issue tracker. You can also check for
-<a href="{@docRoot}preview/bugs">known issues</a> and
- find workaround steps. We’ll keep you updated on your issue as it’s triaged and sent to
- the Android engineering team for review. </li>
- <li> The <a href="{@docRoot}preview/dev-community">Android N Developer Community</a> is
- a Google+ community where you can <strong>connect with other developers</strong>working with
- Android N. You can share observations or ideas or find answers to
- questions about Android N. We’ll moderate the community and provide answers and
- guidance as needed.</li>
-</ul>
-
-<h3 id="targeting">Targeting, preview APIs, and publishing</h3>
-
-<p>
- The N Developer Preview provides a development-only system and Android
- library that <strong>does not have a standard API level</strong>. If you want
- to opt out of compatibility behaviors to test your app (which is strongly
- recommended), you can target the preview version of Android N by setting your
- app's <code><a href=
- "{@docRoot}preview/setup-sdk.html#create-update">targetSdkVersion</a></code>
- to <code>“N”</code>.
-</p>
-
-<p>
- The Android N Developer Preview delivers <strong>preview APIs</strong>
- — the APIs will not be official until the final SDK is released,
- currently planned for the third quarter of 2016. This means that you can
- <strong>expect minor API changes</strong> over time, especially during
- initial weeks of the program. We’ll provide a summary of changes to you with
- each update of the Android N Developer Preview.
-</p>
-
-<p class="note">
- <strong>Note</strong>: Although preview APIs may change, underlying
- system behaviors are stable and ready for testing against
- right away.
-</p>
-
-<p>
- Google Play <strong>prevents publishing of apps targeting the N Developer
- Preview</strong>. When the Android N final SDK is available, you’ll be able
- to target the official Android N API level and publish your app to Google
- Play via the alpha and beta release channels. Meanwhile, if you want to
- distribute an app targeting Android N to testers, you can do so via email or
- by direct download from your site.
-</p>
-
-<p>
- At the full release of Android N to AOSP and OEMs, planned for Q3 2016,
- you’ll be able to publish your apps targeting Android N to the public release
- channel in Google Play.
-</p>
-
-
-<h2 id="how_to_get_started">How to get started</h2>
-
-<p>
- To get started testing your app with Android N:
-</p>
-
-<ol>
- <li> Review the <a href="{@docRoot}preview/api-overview.html">API Overview</a>
- and <a href="{@docRoot}preview/behavior-changes.html">Behavior Changes</a> to
- get an idea of what's new and how it affects your apps. In particular,
- learn about the new <a href="{@docRoot}preview/features/notification-updates.html"
- >notifications</a> features and
- <a href="{@docRoot}preview/features/multi-window.html">multi-window support</a>.</li>
- <li> Set up your environment by following the instructions for <a
- href="{@docRoot}preview/setup-sdk.html">Setting up the Preview SDK</a>
- and configuring test devices.</li>
- <li> Follow the <a href="{@docRoot}preview/download.html">
- instructions</a> to update your device to the latest build of the N Developer
- Preview. The easiest way is to enroll your device in
- <a href="https://www.google.com/android/beta">Android Beta</a> program. </li>
- <li> Review the <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>
- and <a href="{@docRoot}preview/samples.html">Android N samples</a> to gain more
- insight into new API features and how to use them in your app.
- <li> Join the <a href="{@docRoot}preview/dev-community">Android N
- Developer Community</a> to get the latest news and connect with other
- developers working with the new platform.</li>
-</ol>
-
-<p>
- Thank you for your participation in the Android N Developer Preview program!
-</p>
diff --git a/docs/html/preview/preview_toc.cs b/docs/html/preview/preview_toc.cs
deleted file mode 100644
index 34d00a4..0000000
--- a/docs/html/preview/preview_toc.cs
+++ /dev/null
@@ -1,235 +0,0 @@
-<ul id="nav">
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/overview.html"
- es-lang="Información general del programa"
- in-lang="Ikhtisar Program"
- ja-lang="プログラム概要"
- ko-lang="프로그램 개요"
- pt-br-lang="Visão geral do programa"
- ru-lang="Обзор программы"
- vi-lang="Tổng quan về Chương trình"
- zh-cn-lang="计划概览"
- zh-tw-lang="程式總覽">
- Program Overview</a></div>
- </li>
-
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/support.html">
- Support and Release Notes</a></div>
- </li>
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/setup-sdk.html"
- es-lang="Configurar el SDK de la versión preliminar"
- in-lang="Menyiapkan Preview"
- ja-lang="Preview SDK のセットアップ"
- ko-lang="미리 보기 SDK 설정하기"
- pt-br-lang="Configuração do Preview SDK"
- ru-lang="Настройка пакета SDK Preview"
- vi-lang="Kiểm thử trên Thiết bị"
- zh-cn-lang="设置预览版 SDK"
- zh-tw-lang="設定預覽版 SDK">
- Set Up the Preview</a></div>
- </li>
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/download.html"
- es-lang="Pruebe en un dispositivo"
- in-lang="Menguji pada Perangkat"
- ja-lang="デバイス上でテストする"
- ko-lang="기기에서 테스트"
- pt-br-lang="Testar em um dispositivo"
- ru-lang="Тестирование на устройстве"
- vi-lang="Kiểm thử trên Thiết bị"
- zh-cn-lang="在设备上测试"
- zh-tw-lang="在裝置上測試">
- Test on a Device</a></div>
- </li>
-
-
- <li class="nav-section">
- <div class="nav-section-header"><a href="<?cs var:toroot ?>preview/behavior-changes.html"
- es-lang="Cambios en los comportamientos"
- in-lang="Perubahan Perilaku"
- ja-lang="動作の変更点"
- ko-lang="동작 변경"
- pt-br-lang="Mudanças de comportamento"
- ru-lang="Изменения в работе"
- vi-lang="Các thay đổi Hành vi"
- zh-cn-lang="行为变更"
- zh-tw-lang="行為變更">Behavior Changes
- </a></div>
- <ul>
- <li><a href="<?cs var:toroot ?>preview/features/background-optimization.html"
- es-lang="Optimizaciones en segundo plano"
- in-lang="Optimisasi Latar Belakang"
- ja-lang="バックグラウンド処理の最適化"
- ko-lang="백그라운드 최적화"
- pt-br-lang="Otimizações em segundo plano"
- ru-lang="Оптимизация фоновых процессов"
- vi-lang="Tối ưu hóa Chạy ngầm"
- zh-cn-lang="后台优化"
- zh-tw-lang="背景最佳化">Background Optimizations
- </a></li>
- <li><a href="<?cs var:toroot ?>preview/features/multilingual-support.html"
- es-lang="Idioma y configuración regional"
- in-lang="Bahasa dan Lokal"
- ja-lang="言語とロケール"
- ko-lang="언어 및 로케일"
- pt-br-lang="Idioma e localidade"
- ru-lang="Язык и языковой стандарт"
- vi-lang="Ngôn ngữ và Bản địa"
- zh-cn-lang="语言和区域设置"
- zh-tw-lang="語言和地區設定">Language and Locale
- </a></li>
- </ul>
- </li>
-
- <li class="nav-section">
- <div class="nav-section-header"><a href="<?cs var:toroot ?>preview/api-overview.html"
- es-lang="Información general de la API"
- in-lang="Android N untuk Pengembang"
- ja-lang="API の概要"
- ko-lang="API 개요"
- pt-br-lang="Visão geral da API"
- ru-lang="Обзор API-интерфейсов"
- vi-lang="Android N cho Nhà phát triển"
- zh-cn-lang="API 概览"
- zh-tw-lang="API 總覽">Android N for Developers
- </a></div>
- <ul>
-
- <li><a href="<?cs var:toroot ?>preview/features/multi-window.html"
- es-lang="Compatibilidad con ventanas múltiples"
- in-lang="Dukungan Multi-Jendela"
- ja-lang="マルチ ウィンドウのサポート"
- ko-lang="다중 창 지원"
- pt-br-lang="Suporte a várias janelas"
- ru-lang="Поддержка многооконного режима"
- vi-lang="Hỗ trợ đa cửa sổ"
- zh-cn-lang="多窗口支持"
- zh-tw-lang="多視窗支援">
- Multi-Window Support</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/notification-updates.html"
- es-lang="Notificaciones"
- in-lang="Pemberitahuan"
- ja-lang="通知"
- ko-lang="알림"
- pt-br-lang="Notificações"
- ru-lang="Уведомления"
- vi-lang="Thông báo"
- zh-cn-lang="通知"
- zh-tw-lang="通知">
- Notifications</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/data-saver.html">
- Data Saver</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/tv-recording-api.html"
- es-lang="Grabación de TV"
- in-lang="Perekaman TV"
- ja-lang="TV の録画"
- ko-lang="TV 녹화"
- pt-br-lang="Gravação para TV"
- ru-lang="Запись ТВ"
- vi-lang="Ghi lại TV"
- zh-cn-lang="TV 录制"
- zh-tw-lang="電視錄製">
- TV Recording</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/security-config.html"
- es-lang="Configuración de seguridad de la red"
- in-lang="Network Security Configuration"
- ja-lang="ネットワーク セキュリティ構成"
- ko-lang="네트워크 보안 구성"
- pt-br-lang="Configurações de segurança de rede"
- ru-lang="Конфигурация сетевой безопасности"
- vi-lang="Cấu hình Bảo mật mạng"
- zh-cn-lang="网络安全配置"
- zh-tw-lang="網路安全性設定">
- Network Security Configuration</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/icu4j-framework.html"
- es-lang="API de ICU4J del framework de Android"
- in-lang="ICU4J Android Framework API"
- ja-lang="ICU4J Android フレームワーク API"
- ko-lang="ICU4J Android 프레임워크 API"
- pt-br-lang="APIs de estrutura do Android para ICU4J"
- ru-lang="API-интерфейсы ICU4J в платформе Android"
- vi-lang="API Khuôn khổ Android ICU4J"
- zh-cn-lang="ICU4J Android 框架 API"
- zh-tw-lang="ICU4J Android 架構 API">
- ICU4J Support</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/j8-jack.html"
- es-lang="Funciones del lenguaje Java 8"
- in-lang="Fitur Bahasa Java 8"
- ja-lang="Java 8 の機能"
- ko-lang="Java 8 언어 기능"
- pt-br-lang="Recursos de linguagem do Java 8"
- ru-lang="Возможности языка Java 8"
- vi-lang="Tính năng của Ngôn ngữ Java 8"
- zh-cn-lang="Java 8 语言功能"
- zh-tw-lang="Java 8 語言功能">
- Java 8 Language Features</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/afw.html">
- Android for Work Updates</a></li>
-
- <li><a href="<?cs var:toroot ?>preview/features/scoped-folder-access.html"
- es-lang="Acceso a directorios determinados"
- in-lang="Scoped Directory Access"
- ja-lang="特定のディレクトリへのアクセス"
- ko-lang="범위가 지정된 디렉터리 액세스"
- pt-br-lang="Acesso a diretórios com escopo"
- ru-lang="Доступ к выделенным каталогам"
- vi-lang="Truy cập Thư mục theo Phạm vi"
- zh-cn-lang="作用域目录访问"
- zh-tw-lang="限定範圍目錄存取">
- Scoped Directory Access</a></li>
- </ul>
- </li>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/samples.html"
- es-lang="Ejemplos"
- in-lang="Contoh"
- ja-lang="サンプル"
- ko-lang="샘플"
- pt-br-lang="Exemplos"
- ru-lang="Примеры"
- zh-cn-lang="示例"
- zh-tw-lang="範例">
- Samples</a></div>
- </li>
-
- <li class="nav-section">
- <div class="nav-section-header empty"><a href="<?cs var:toroot ?>preview/license.html"
- es-lang="Contrato de licencia"
- ja-lang="使用許諾契約"
- ko-lang="라이선스 계약"
- pt-br-lang="Contrato de licença"
- ru-lang="Лицензионное соглашение"
- zh-cn-lang="许可协议"
- zh-tw-lang="授權協議">
- License Agreement</a></div>
- </li>
-
-</ul>
diff --git a/docs/html/preview/samples.jd b/docs/html/preview/samples.jd
deleted file mode 100644
index 1544d9c..0000000
--- a/docs/html/preview/samples.jd
+++ /dev/null
@@ -1,85 +0,0 @@
-page.title=Samples
-page.tags="preview", "samples", "android"
-page.image=images/cards/card-n-samples_2x.png
-@jd:body
-
-<p>
- The following code samples are provided for Android N. To
- download the samples in Android Studio, select the <b>File > Import
- Samples</b> menu option.
-</p>
-
-<p class="note">
- <strong>Note:</strong> These downloadable projects are designed
- for use with Gradle and Android Studio.
-</p>
-
-
-<h3 id="mw">Multi-Window Playground</h3>
-<img src="{@docRoot}preview/images/sample-multiwindow.png" style="float: left; padding-right: 0.5em" height="250" width="156"/>
-<p>
- This sample demonstrates how to take advantage of multiple window
- user interfaces with your app.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-MultiWindowPlayground">
- Get it on GitHub</a>
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="an">Active Notifications</h3>
-<img src="{@docRoot}preview/images/sample-activenotifications.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
-<p>
- This is a pre-existing sample which shows a simple service that sends
- notifications using NotificationCompat. Each unread conversation from a user
- is sent as a distinct notification.
-</p>
-<p>
- This sample has been updated to take advantage of new notification features
- available in Android N.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-ActiveNotifications">
- Get it on GitHub</a>
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="ms">Messaging Service</h3>
-<img src="{@docRoot}preview/images/sample-messagingservice.png" style="float: left; padding-right: 0.5em" height="250" width="150" />
-<p>
- This is a pre-existing sample which demonstrates how to use
- NotificationManager to tell how many notifications an application is currently
- showing.
-</p>
-<p>
- This sample has been updated to take advantage of new notification features
- available in Android N.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-MessagingService">
- Get it on GitHub</a>
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="fbe">Direct Boot</h3>
-<img src="{@docRoot}preview/images/sample-directboot.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
-<p>
- This sample demonstrates how to store and access data in a device encrypted
- storage which is always available while the device is booted.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-DirectBoot">
- Get it on GitHub</a>
-</p>
-
-<div style="clear: both;"></div>
-<h3 id="sda">Scoped Directory Access</h3>
-<img src="{@docRoot}preview/images/sample-scopeddirectoryaccess.png" style="float: left; padding-right: 0.5em" height="250" width="141" />
-<p>
- This sample demonstrates how to read and write data from specific
- directories, while requiring fewer permissions.
-</p>
-<p>
- <a href="https://github.com/googlesamples/android-ScopedDirectoryAccess">
- Get it on GitHub</a>
-</p>
\ No newline at end of file
diff --git a/docs/html/preview/setup-sdk.jd b/docs/html/preview/setup-sdk.jd
deleted file mode 100644
index ff11e8e..0000000
--- a/docs/html/preview/setup-sdk.jd
+++ /dev/null
@@ -1,175 +0,0 @@
-page.title=Set Up the Preview
-meta.keywords="preview", "android"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-sdk_2x.png
-
-@jd:body
-
-
-<div id="qv-wrapper">
- <div id="qv">
-<ol>
- <li><a href="#get-as13">Get Android Studio 2.1</a></li>
- <li><a href="#get-sdk">Get the Android N SDK</a>
- <ol>
- <li><a href="#docs-dl">Reference documentation</a>
- </ol>
- </li>
- <li><a href="#java8">Get the Java 8 JDK</a></li>
- <li><a href="#create-update">Update or Create a Project</a></li>
- <li><a href="#next">Next Steps</a></li>
-</ol>
- </div>
-</div>
-
-<p>To develop apps for the Android N Preview, you need to make some updates
-to your developer environment, as described on this page.</p>
-
-<p>To simply test your app's compatibility on the
-Android N system image, follow the guide to <a
-href="{@docRoot}preview/download.html">Test on an Android N Device</a>.</p>
-
-<img src="{@docRoot}preview/images/n-preview-setup.png" width="700" alt="" />
-
-
-<h2 id="get-as13">Get Android Studio 2.1</h2>
-
-<p>The Android N platform adds support for <a
-href="{@docRoot}preview/j8-jack.html">Java 8 language features</a>,
-which require a new compiler called Jack. The latest version of Jack
-is currently supported only in Android Studio 2.1. So if you want to
-use Java 8 language features, you need to use Android Studio 2.1 to
-build your app. Otherwise, you don't need to use the Jack compiler, but you
-still need to update to JDK 8 to compile against the Android N platform,
-as described below.</p>
-
-<p>If you already have Android Studio installed, make sure you have Android
-Studio 2.1 or higher by clicking <strong>Help > Check for Update</strong>
-(on Mac, <strong>Android Studio > Check for Updates</strong>).</p>
-
-<p>If you don't have it, <a href="{@docRoot}studio/">download Android Studio
-2.1 here</a>.</p>
-
-
-<h2 id="get-sdk">Get the N Preview SDK</h2>
-
-<p>To start developing with Android N APIs, you need to install the
-Android N Preview SDK in Android Studio as follows:</p>
-
-<ol>
- <li>Open the SDK Manager by clicking <strong>Tools > Android >
- SDK Manager</strong>.</li>
-
- <li>In the <strong>SDK Platforms</strong> tab, select the
- <strong>Android N Preview</strong> check box.</li>
-
- <li>Click the <strong>SDK Tools</strong> tab, then select the
- <strong>Android SDK Build Tools</strong>, <strong>Android SDK
- Platform-Tools</strong>, and <strong>Android SDK Tools</strong> check
- boxes.
- </li>
-
- <li>Click <strong>OK</strong>, then accept the licensing
- agreements for any packages that need to be installed.
- </li>
-</ol>
-
-<h3 id="docs-dl">Get the N Preview reference documentation</h3>
-
-<p>Beginning with the Preview 4 release, the API reference for the
- N platform (API level 24) is now available online at <a href=
- "{@docRoot}reference/">developer.android.com/reference/</a>. There is also
- an incremental diff report for <a href="{@docRoot}sdk/api_diff/24/changes.html"
- >API changes between API levels 23 and 24</a>.</p>
-
-<h2 id="java8">Get the Java 8 JDK</h2>
-
-<p>To compile your app against the Android N platform and use some tools with
-Android Studio 2.1, you need to install the Java 8 Developer Kit (JDK 8). So, if
-you don't already have the latest version, download JDK 8 now.</p>
-
-<p>Then set the JDK version in Android Studio as follows:</p>
-
-<ol>
- <li>Open an Android project in Android Studio, then open the
- Project Structure dialog by selecting <strong>File >
- Project Structure</strong>. (Alternatively, you can set the default
- for all projects by selecting <strong>File > Other Settings >
- Default Project Structure</strong>.)
- </li>
- <li>In the left panel of the dialog, click <strong>SDK Location</strong>.
- </li>
- <li>In the <strong>JDK Location</strong> field, enter the location of the
- Java 8 JDK (click the button on the right
- to browse your files), then click <strong>OK</strong>.
- </li>
-</ol>
-
-<img src="{@docRoot}preview/images/studio-jdk-location.jpg" width="700"
- alt="" />
-
-
-<h2 id="create-update">Update or Create a Project</h2>
-
-<p>Now that the N platform API level is "24" instead
-of "N", you can configure your projects normally with this API level (and even
-publish your apps compiled with API 24 on Google Play). Just be sure that you've
-updated your project to use <strong>Android SDK Build Tools 24.0.0</strong> and
-<strong>Android SDK Platform-Tools 24.0.0</strong>.</p>
-
-<p>If you plan to use Java 8 language features, you should also read
-<a href="{@docRoot}preview/j8-jack.html">Java 8 Language Features</a>
-for information about the supported Java 8 features and
-how to configure your project with the Jack compiler.</p>
-
-
-<h3 id="update">Update an existing project</h3>
-
-<p>Open the
- <code>build.gradle</code> file for your module and update the values as
- follows:
-</p>
-
-<pre>
-android {
- compileSdkVersion <strong>24</strong>
- buildToolsVersion <strong>'24.0.0'</strong>
- ...
-
- defaultConfig {
- targetSdkVersion <strong>24</strong>
- ...
- }
- ...
-}</pre>
-
-<p>Now that the API level 24 is final, you can compile against it and keep your
-<code>minSdkVersion</code> to whatever version is appropriate for your app.</p>
-
-
-<h3 id="create">Create a new project</h3>
-
-
-<p>To create a new project for development with the Android N Preview SDK:</p>
-
-<ol>
- <li>Click <strong>File > New Project</strong>. and follow the steps until
- you reach the <strong>Target Android Devices</strong> page.
- </li>
- <li>On this page, select the <strong>Phone and Tablet</strong> check box.</li>
- <li>Under <strong>Phone and Tablet</strong> option, in the <strong>Minimum
- SDK</strong> option list, select
- <strong>API 24: Android 6.X (N Preview)</strong>.</li>
-</ol>
-
-
-<h2 id="next">Next Steps</h2>
-
-<ul>
- <li>Follow the guide to <a
-href="{@docRoot}preview/download.html">Test on an Android N Device</a>.</li>
- <li>Learn more about the Android N platform with
-<a href="{@docRoot}preview/behavior-changes.html">Behavior Changes</a>
-and <a href="{@docRoot}preview/api-overview.html">Android N APIs
-and Features</a>.</li>
-</ul>
diff --git a/docs/html/preview/support.jd b/docs/html/preview/support.jd
deleted file mode 100644
index 0d0d9db..0000000
--- a/docs/html/preview/support.jd
+++ /dev/null
@@ -1,1698 +0,0 @@
-page.title=Support and Release Notes
-meta.keywords="preview", "android"
-page.tags="preview", "developer preview"
-page.image=images/cards/card-n-support_2x.png
-
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>In this document</h2>
-
-<ul>
- <li><a href="#dp5">Developer Preview 5</a>
- <ul>
- <li><a href="#general">General advisories</a></li>
- <li><a href="#new">New in DP5</a></li>
- <li><a href="#ki">Known issues</a></li>
- <li><a href="#upgrade-notes">Notes on publishing apps
- that target API 24</a></li>
- </ul>
- </li>
- <li><a href="#dp4">Developer Preview 4</a></li>
- <li><a href="#dp3">Developer Preview 3</a></li>
- <li><a href="#dp2">Developer Preview 2</a></li>
- <li><a href="#dp1">Developer Preview 1</a></li>
-</ul>
-
-<!--
-<h2>See Also</h2>
-<ol>
- <li></li>
-</ol>
--->
-
-</div>
-</div>
-
-<p>
- Two primary support channels are available to you when developing and testing
- with the Android N Developer Preview: Please file bugs at <a href=
- "https://developer.android.com/preview/bug"
- >https://developer.android.com/preview/bug</a> for
- device-specific, system, and Google App bugs. For issues in other apps,
- please contact the developer directly.
-</p>
-
-<p>
- To discuss issues or ideas with other developers working with Android N, join
- the <a href="{@docRoot}preview/dev-community">Developer Preview Google+
- community</a>.
-</p>
-
-<h2 id="dp5">Developer Preview 5</h2>
-
-<div class="cols">
- <div class="col-6of12">
- <p>
- <em>Date: July 2016<br>
- Build: NPD90G<br>
- Emulator support: x86 & ARM (32/64-bit)<br>
- Google Play services: 8.4</em>
- </p>
- </div>
-</div>
-
-<h3 id="general">General advisories</h3>
-
-<p>
- This Developer Preview release is for <strong>app developers and other early
- adopters</strong> and is available for daily use, development, or
- compatibility testing. Please be aware of these general notes about the
- release:
-</p>
-
-<ul>
- <li>This release may have various <strong>stability issues</strong> on
- supported devices.
- </li>
-
- <li>Some apps <strong>may not function as expected</strong> on the new
- platform version. This includes Google’s apps as well as other apps.
- </li>
-
- <li>Developer Preview 5 is <strong>Compatibility Test Suite (CTS)
- approved</strong> on these devices: Nexus 5X, Nexus 6, Nexus 6P, Nexus 9,
- and Pixel C. Apps that depend on CTS approved builds should work normally
- on these devices (Android Pay for example).
- </li>
-
- <li>Developer Preview 5 is <strong>available</strong> on Nexus 5X, Nexus 6, Nexus 6P,
- Nexus 9, Nexus Player, Pixel C, and General Mobile 4G (Android One).
- </li>
-</ul>
-
-
-<h3 id="new">New in DP5</h3>
-
-<h4>Updated system images for supported devices and emulator</h4>
-
-<p>
- Developer Preview 5 includes <a href=
- "{@docRoot}preview/download.html"><strong>near-final system
- images</strong></a> for supported devices and the Android emulator. The
- images include the final APIs (API level 24) for the upcoming Android N
- platform. When you are done testing, you can publish apps using API
- level 24 to Google Play, in alpha, beta, and production release channels.
-</p>
-
-
-<!--
-
-<h4 id="api-changes">Feature and API changes</h4>
-
-<ul>
- <li>TODO</li>
-</ul>
-
--->
-
-<h3 id="ki">Known Issues</h3>
-
-<h4>Stability</h4>
-
-<ul>
- <li>Users may encounter system instability (such as kernel panics and
- crashes).
- </li>
-</ul>
-
-<h4>Multi-window</h4>
-<ul>
- <li>MapView may be blank when resized in multi-window mode and not focused.
- </li>
-</ul>
-
-<h4>Do Not Disturb</h4>
-<ul>
- <li>Do Not Disturb mode may be set at device reboot. To work around
- the issue, delete the existing rule for VR as follows: go to
- <strong>Settings > Sound > Do not disturb > Automatic Rules</strong>
- and tap the trash icon next to the VR rule.
- </li>
-</ul>
-
-<h4>Screen zoom and multiple APKs in Google Play</h4>
-<ul>
- <li>On devices running Developer Preview 5, Google Play services 9.0.83
- incorrectly reports the current screen density rather than the stable screen
- density. When screen zoom is enabled on these devices, this can cause Google
- Play to select a version of a multi-APK app that’s designed for smaller
- screens. This issue is fixed in the next version of Google Play services.
- </li>
-</ul>
-
-<h4>Vulkan support and multiple APKs in Google Play</h4>
-<ul>
- <li>On devices running Developer Preview 5, Google Play services 9.0.83
- currently reports Vulkan support but not Vulkan version. This can cause
- Google Play to select a version of a multi-APK app that’s designed for lower
- Vulkan support on devices with higher version support. Currently, the Google
- Play Store does not accept uploads of Apps which use Vulkan version
- targeting. This support will be added to the Google Play Store in the
- future any Android N devices using the Google Play services 9.0.83 will
- continue to receive versions of Apps targeting basic Vulkan support.
- </li>
-</ul>
-
-<h4>Android Auto</h4>
-<ul>
- <li>The version of Google Maps included in Developer Preview 5 (9.30)
- crashes when used with Android Auto. This issue will be fixed in the
- next update to Google Maps (9.31), expected in the coming weeks.
- </li>
-</ul>
-
-
-
-<!-- TBA, if any
-<h4>Device-specific issues</h4>
-
-<dl>
- <dt>
- <strong>Device Name</strong>
- </dt>
-
- <dd>
- Issue 1
- </dd>
-
- <dd>
- Issue 2
- </dd>
-</dl>
-
--->
-<!-- TBA, if any
-
-<h4 id="dp5-fixes">Fixes for issues reported by developers</h4>
-
-<p>
- A number of issues reported by developers have been fixed, including:
-</p>
-
-<ul>
- <li>TODO</li>
-</ul>
-
--->
-
-<h3 id="upgrade-notes">Notes on publishing apps that target API 24</h3>
-
-<p>
- Before publishing apps that target API 24 in Google Play, keep these points
- in mind:
-</p>
-
-<ul>
- <li>If your app’s current <code>targetSdkVersion</code> is 22 or lower and
- you want to target API 24, you’ll need to support <a href=
- "{@docRoot}about/versions/marshmallow/android-6.0-changes.html">behaviors
- introduced with Android 6.0 (Marshmallow)</a>, such as <a href=
- "{@docRoot}training/permissions/requesting.html">runtime permissions</a>, in
- addition to Android N behaviors.
- </li>
-
- <li>Once you publish an app with <code>targetSdkVersion</code> set to 23 or
- higher, you can't later publish a version of the app with a higher
- <code>versionCode</code> that targets 22 or lower. This restriction applies
- in alpha and beta channels as well as production channel.
- </li>
-</ul>
-
-
-<!-- DP4 Release Notes Archive -->
-
-<h2 id="dp4">Developer Preview 4</h2>
-
-<div class="wrap">
- <div class="cols">
- <div class="col-6of12">
- <p>
- <em>Date: June 2016<br>
- Build: NPD56N<br>
- Emulator support: x86 & ARM (32/64-bit)<br>
- Google Play services: 8.4</em>
- </p>
- </div>
- </div>
-</div>
-
-<h3 id="dp4-general">General advisories</h3>
-
-<p>
- This Developer Preview release is for <strong>app developers and other early
- adopters</strong> and is available for daily use, development, or
- compatibility testing. Please be aware of these general notes about the
- release:
-</p>
-
-<ul>
- <li>This release may have various <strong>stability issues</strong> on
- supported devices.
- </li>
-
- <li>Some apps <strong>may not function as expected</strong> on the new
- platform version. This includes Google’s apps as well as other apps.
- </li>
-
- <li>Developer Preview 4 is <strong>Compatibility Test Suite (CTS)
- approved</strong> on these devices: Nexus 5X, Nexus 6, Nexus 6P, and
- Pixel C. Apps that depend on CTS approved builds should work normally
- on these devices (Android Pay for example).
- </li>
-
- <li>Developer Preview 4 is <strong>available on all supported
- devices:</strong> Nexus 5X, Nexus 6, Nexus 6P, Nexus 9, Nexus Player,
- Pixel C, General Mobile 4G (Android One), as well as Sony Xperia Z3
- (D6603 and D6653 models).
- </li>
-</ul>
-
-
-<h3 id="dp4-new">New in DP4</h3>
-
-<h4>Android N final APIs</h4>
-
-<p>
- Developer Preview 4 includes the <strong>final APIs</strong> for the upcoming
- Android N platform. The new API level is 24.
-</p>
-
-<h4>Play publishing</h4>
-
-<p>
- You can now publish apps that use <strong>API level 24</strong> to Google
- Play, in alpha, beta, and production release channels.
-</p>
-
-<h4>Android Studio and tools updates</h4>
-
-<p>
- Along with Developer Preview 4 we’re providing the <strong>final API 24
- SDK</strong> to be used with Android Studio 2.1.2 and higher. In addition,
- we’re releasing updated Developer Preview 4 system images for the emulator to
- help test your apps.
-</p>
-
-<p>
- As new updates roll out for Android Studio, you should see minor improvements in
- the new project wizards and AVD manager as we add enhanced support for API 24.
- These are primarily cosmetic changes and should not stop you from getting
- your app ready for an update in the Play store.
-</p>
-
-<h4 id="dp4-api-changes">Feature and API changes</h4>
-
-<ul>
- <li>In previous versions of Android, an app activates with all of its locale
- resources loaded before locale negotiation begins. Starting in Android N DP4,
- the system negotiates resource locales individually for each resource object
- before the app activates.
- </li>
-
- <li>As announced at Developer Preview 3, we’ve deferred the Launcher
- Shortcuts feature to a later release of Android. In Developer Preview 4,
- we’ve removed the Launcher Shortcuts APIs.
- </li>
-
- <li>We’ve changed the BLE Scanning behavior starting in DP4. We’ll prevent
- applications from starting and stopping scans more than 5 times in 30
- seconds. For long running scans, we’ll convert them into opportunistic scans.
- </li>
-
- <li>The <a href=
- "{@docRoot}preview/features/multi-window.html">Multi-Window</a>
- <code>android:minimalHeight</code> and <code>android:minimalWidth</code>
- attributes have been renamed to <code>android:minHeight</code> and
- <code>android:minWidth</code>.
- </li>
-</ul>
-
-<h3 id="dp4-ki">Known Issues</h3>
-
-<h4>Stability</h4>
-
-<ul>
- <li>Users may encounter system instability (such as kernel panics and
- crashes).
- </li>
-</ul>
-
-<h4>Launcher</h4>
-
-<ul>
- <li>The default launcher’s <strong>All Apps</strong> tray may become
- unresponsive after cycling the screen off and on. Returning to the
- homescreen and relaunching the <strong>All Apps</strong> tray may resolve
- this issue.
- </li>
-</ul>
-
-<h4>Setup Wizard</h4>
-
-<ul>
- <li>Crash on selecting "Not now" in "Set up email" screen.
- </li>
-</ul>
-
-<h4>Media</h4>
-
-<ul>
- <li>Media playback may be unreliable on Nexus 9 and Nexus Player, including
- issues playing HD video.
- </li>
-
- <li>Occasional freeze when running the YouTube app with other apps in
- multi-window mode on Pixel C devices. In some cases hard reboot is required.
- </li>
-
- <li>Apps may have issues playing some Widevine DRM-protected content on Nexus
- 9 devices.
- </li>
-
- <li>Issues handling VP8 video on Nexus 9 devices.
- </li>
-</ul>
-
-<h4>External storage</h4>
-
-<ul>
- <li>Apps may become unstable when the user moves them from internal storage
- to adoptable external storage (this can include SD card or devices attached
- over USB).
- </li>
-</ul>
-
-<h4>Screen zoom and multiple APKs in Google Play</h4>
-
-<ul>
- <li>On devices running Android N, Google Play services 9.0.83 incorrectly
- reports the current screen density rather than the stable screen density.
- When screen zoom is enabled on these devices, this can cause Google Play to
- select a version of a multi-APK app that’s designed for smaller screens. This
- issue is fixed in the next version of Google Play services and will be
- included in a later Developer Preview release.
- </li>
-</ul>
-
-<h4>Vulkan support and multiple APKs in Google Play</h4>
-
-<ul>
- <li>On devices running Android N, Google Play services 9.0.83 currently
- reports Vulkan support but not Vulkan version. This can cause Google Play to
- select a version of a multi-APK app that’s designed for lower Vulkan support
- on devices with higher version support. Currently, the Google Play Store does
- not accept uploads of apps which use Vulkan version targeting. This support
- will be added to the Google Play Store in the future and fixed in the next
- version of Google Play services (to be included in a later Developer Preview
- release). Any N devices using the version of Google Play services 9.0.83 will
- continue to receive versions of apps targeting basic Vulkan support.
- </li>
-</ul>
-
-<h4>Accessibility</h4>
-<ul>
- <li>Switch access doesn't allow user to navigate web pages in Chrome.
- </li>
-
- <li>Accessibility issues for talkback users with notification dismissal, and
- wifi selection screen.
- </li>
-</ul>
-
-<h4>Android for Work</h4>
-
-<ul>
- <li>Currently, CA certificates provisioned through {@link
- android.app.admin.DevicePolicyManager} are not
- available to profiles other than the primary user/profile due to a preload
- issue. For example, this could prevent a user from connecting to a trusted
- server when in a Work profile. This issue will be resolved in the next
- Developer Preview.
- </li>
-
- <li>After reboot with work mode off, solving work challenge does not switch
- on work mode.
- </li>
-
- <li>Users receiving a video call in Hangouts have to unlock work challenge
- first.
- </li>
-
- <li>Accessing Settings > Security > Device Security crash observed when
- separating primary and work challenge.
- </li>
-
- <li>If {@link android.os.UserManager#DISALLOW_CONFIG_VPN} is set before
- calling {@link android.app.admin.DevicePolicyManager#setAlwaysOnVpnPackage
- DevicePolicyManager.setAlwaysOnVpnPackage()}, then setting always on VPN does
- not work. That is, after rebooting the device with the {@link
- android.os.UserManager#DISALLOW_CONFIG_VPN} restriction set, VPN is not
- autostarted.
- </li>
-</ul>
-
-<h4>Android Auto</h4>
-
-<p>
- The version of Google Maps included in Developer Preview 4 (9.30) crashes
- when used with Android Auto. This issue will be fixed in the next update to
- Google Maps (9.31), expected in the coming weeks.
-</p>
-
-
-<!-- TBA, if any
-<h4>Device-specific issues</h4>
-
-<dl>
- <dt>
- <strong>Device Name</strong>
- </dt>
-
- <dd>
- Issue 1
- </dd>
-
- <dd>
- Issue 2
- </dd>
-</dl>
-
--->
-
-
-<h4 id="dp4-fixes">Fixes for issues reported by developers</h4>
-
-<p>
- A number of issues reported by developers have been fixed, including:
-</p>
-
-<ul>
- <li>The active network state ({@link android.net.NetworkInfo#getState
- NetworkInfo.getState()} and {@link android.net.NetworkInfo#getDetailedState
- NetworkInfo.getDetailedState()}) might return incorrect values during some
- restricted background scenarios
- </li>
-
- <li>Data Saver restricts the foreground MMS mobile network request
- (<a href="https://code.google.com/p/android/issues/detail?id=208478">bug
- 208478</a>)
- </li>
-
- <li>Quick settings tiles and notifications sometimes unresponsive
- </li>
-
- <li>Unable to dismiss Clock notifications
- </li>
-
- <li>Duplication of bluetooth icon and other status icons
- </li>
-
- <li>Additional bluetooth connectivity fixes
- </li>
-
-</ul>
-
-<p>For the full list of fixed issues, see <a href="https://goo.gl/6uCKtf">the
-issue tracker</a>.</p>
-
-<h3 id="dp4-upgrade-notes">Notes on publishing apps that target API 24</h3>
-
-<p>
- Before publishing apps that target API 24 in Google Play, keep these points
- in mind:
-</p>
-
-<ul>
- <li>If your app’s current <code>targetSdkVersion</code> is 22 or lower and
- you want to target API 24, you’ll need to support <a href=
- "{@docRoot}about/versions/marshmallow/android-6.0-changes.html">behaviors
- introduced with Android 6.0 (Marshmallow)</a>, such as <a href=
- "{@docRoot}training/permissions/requesting.html">runtime permissions</a>, in
- addition to Android N behaviors.
- </li>
-
- <li>Once you publish an app with <code>targetSdkVersion</code> set to 23 or
- higher, you can't later publish a version of the app with a higher
- <code>versionCode</code> that targets 22 or lower. This restriction applies
- in alpha and beta channels as well as production channel.
- </li>
-</ul>
-
-<!-- DP3 Release Notes Archive -->
-
-<h2 id="dp3">Developer Preview 3</h2>
-
-<div class="wrap">
- <div class="cols">
- <div class="col-6of12">
- <p>
- <em>Date: May 2016<br>
- Build: NPD35K<br>
- Emulator support: x86 & ARM (32/64-bit)<br>
- Google Play services: 8.4</em>
- </p>
- </div>
- </div>
-</div>
-
-<h3 id="dp3-general">General advisories</h3>
-
-<p>
- This Developer Preview release is for <strong>app developers and other early
- adopters</strong> and is available for daily use, development, or
- compatibility testing. Please be aware of these general notes about the
- release:
-</p>
-
-<ul>
- <li>This release may have various <strong>stability issues</strong> on
- supported devices. Users may encounter system instability, such as kernel
- panics and crashes.
- </li>
-
- <li>Some apps <strong>may not function as expected</strong> on the new
- platform version. This includes Google’s apps as well as other apps.
- </li>
-
- <li>Developer Preview 3 is <strong>Compatibility Test Suite (CTS)
- approved</strong> on these devices: Nexus 5X, Nexus 6, Nexus 6P, and Pixel
- C. Apps that depend on CTS approved builds should
- work normally on these devices (Android Pay for example).
- </li>
-
- <li>Developer Preview 3 is <strong>available on all supported
- devices:</strong> Nexus 5X, Nexus 6, Nexus 6P, Nexus 9, Nexus Player, Pixel
- C, General Mobile 4G (Android One), as well as Sony Xperia Z3 (D6603 and
- D6653 models).
-
- </li>
-</ul>
-
-
-<h3 id="dp3-new">New in DP3</h3>
-
-<h4>VR Mode for Android</h4>
-
-<p>
- Android N adds platform support and optimizations for a new VR Mode to let
- developers build high quality mobile VR experiences for users. There are a
- number of performance enhancements, including access to an exclusive CPU core
- for VR apps. Within your apps, you can take advantage of intelligent
- head-tracking, and stereo notifications that work for VR. Most importantly,
- Android N provides for very low latency graphics.
-</p>
-
-<p>
- For more information, see the <a href=
- "https://developers.google.com/vr/android/">Google VR SDK for Android</a>.
-</p>
-
-<h4>Sustained performance mode</h4>
-
-<p>
- Android N includes optional support for <a href=
- "{@docRoot}preview/api-overview.html#sustained_performance_api">sustained
- performance mode</a>, enabling OEMs to provide hints on device performance
- capabilities for long running applications. App developers can then use these
- hints to tune applications for a predictable, consistent level of device
- performance over long periods of time. App developers can try out this new
- API in the developer preview on Nexus 6P devices only.
-</p>
-
-<h4>Multiprocess WebView</h4>
-
-<p>
- Starting with version 51 in Android N, WebView will run web content in a
- separate sandboxed process when the developer option "Multiprocess WebView"
- is enabled. The WebView team is looking for feedback on compatibility and
- runtime performance in N before enabling multiprocess WebView in a future
- version of Android. In this version, regressions in startup time, total
- memory usage and software rendering performance are expected.
-</p>
-
-<p>
- If you find unexpected issues in multiprocess mode we’d like to hear about
- them. Please get in touch with the WebView team by <a href=
- "https://bugs.chromium.org/p/chromium/issues/entry?template=Webview%20Bugs">
- filing a bug</a>.
-</p>
-
-<h4>Keyboard Shortcuts helper</h4>
-
-<p>
- Android N lets users press <code>Meta+/</code> to trigger a <strong>Keyboard
- Shortcuts</strong> screen that displays all shortcuts available both from the
- system and from the app in focus. Developers can add their own shortcuts or
- trigger the Shortcuts screen from their apps. See <a href=
- "{@docRoot}preview/api-overview.html#keyboard_shortcuts_helper">Keyboard
- Shortcuts helper</a> for details.
-</p>
-
-<h4>FrameMetrics API</h4>
-
-<p>
- DP3 introduces a new <a href=
- "{@docRoot}preview/api-overview.html#framemetrics_api">FrameMetrics API</a>
- that allows an app to monitor its UI rendering performance by exposing a
- streaming pubsub API to transfer frame timing info for the application’s
- current window. <code>FrameMetricsListener</code> can be used to measure
- interaction-level UI performance in production with higher granularity and
- without the need for a USB connection.
-</p>
-
-<h4 id="dp3-api-changes">Feature and API changes</h4>
-
-<dl>
- <dt>
- Launcher Shortcuts and the Launcher Shortcuts API
- </dt>
-
- <dd>
- We’ve decided to defer this feature to a future release of Android. We plan
- to remove the Launcher Shortcuts APIs (ShortcutManager and others) from the
- public Android N API starting in the next developer preview.
- </dd>
-
- <dt>
- WebView Javascript run before page load
- </dt>
-
- <dd>
- Starting with apps targeting Android N, the Javascript context is reset
- when a new page is loaded. Currently, the context is carried over for the
- first page loaded in a new {@link android.webkit.WebView} instance.
- Developers looking to inject Javascript into the {@link
- android.webkit.WebView} should execute the script after the page has
- started to load.
- </dd>
-
- <dt>
- WebView Geolocation on insecure origins
- </dt>
-
- <dd>
- Starting with apps targeting Android N, the geolocation API will only be
- allowed on secure origins (over HTTPS.) This policy is designed to protect
- users' private information when they're using an insecure connection.
- </dd>
-
- <dt>
- Data Saver
- </dt>
-
- <dd>
- Starting in Developer Preview 3, apps can use use an intent to display a
- system dialog that lets the user directly add the app to the Data Saver
- exemption whitelist. See the <a href=
- "{@docRoot}preview/api-overview.html#data_saver">Data Saver
- documentation</a> for details.
- </dd>
-
- <dt>
- <a href=
- "{@docRoot}preview/api-overview.html#number-blocking">Number-blocking</a>
- </dt>
-
- <dd>
- If an unauthorized user attempts to block or unblock a number, the
- operation now fails with {@link java.lang.SecurityException}. (Previously,
- the operation threw {@link java.lang.UnsupportedOperationException}.)
- </dd>
-
- <dt>
- <a href="{@docRoot}preview/api-overview.html#tile_api">Quick Settings Tile
- API</a>
- </dt>
-
- <dd>
- The system now uses the activity's metadata to decide on the tile mode.
- (Previously, tile mode was determined by the return value of
- <code>TileService.onTileAdded()</code>.) For more information, see
- <code>TileService.META_DATA_ACTIVE_TILE</code> in the downloadable <a href=
- "{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.
- </dd>
-</dl>
-
-<h4 id="dp3-fixes">Fixes for issues reported by developers</h4>
-
-<p>
- A number of issues reported by developers have been fixed, including:
-</p>
-
-<ul>
- <li>Bluetooth Audio playback interrupted after 1 song (bug <a href=
- "https://code.google.com/p/android/issues/detail?id=206889">206889</a>)
- </li>
-
- <li>Pixel C Consistently Crashes (bug <a href=
- "https://code.google.com/p/android/issues/detail?id=206962">206962</a>)
- </li>
-
- <li>Clock and Toast notification issues (bug <a href=
- "https://code.google.com/p/android/issues/detail?id=203094">203094</a>)
- </li>
-
- <li>Pixel C reboots when connected to MacBook Pro via USB C Cable (bug
- <a href=
- "https://code.google.com/p/android/issues/detail?id=205432">205432</a>)
- </li>
-
- <li>Calandar offset by one day (bug <a href=
- "https://code.google.com/p/android/issues/detail?id=203002">203002</a>)
- </li>
-
- <li>TelephonyManager.getAllCellInfo returning invalid data (bug <a href=
- "https://code.google.com/p/android/issues/detail?id=203022">203022</a>)
- </li>
-
- <li>Nexus 6p, Bluetooth keeps disconnecting (bug <a href=
- "https://code.google.com/p/android/issues/detail?id=208062">208062</a>)
- </li>
-</ul>
-
-<p>For the full list of fixed issues, see <a href="https://goo.gl/6uCKtf">the
-issue tracker</a>.</p>
-
-<h3 id="dp3-ki">Known Issues</h3>
-
-<h4>Accessibility</h4>
-
-<ul>
- <li>Unable to listen to TTS output when pitch is set near maximum level.
- </li>
-
- <li>Accessibility features and settings may be disrupted with the user adds a
- Work profile, including magnification gesture and setting. Accessibility
- state is restored when the user next touches the associated settings.
- </li>
-</ul>
-
-<h4>Camera</h4>
-
-<ul>
- <li>The Camera app has exhibited instability; it may crash in various
- circumstances, such as when launched in multi-window mode.
- </li>
-
- <li>Pressing the shutter continuously in panorama mode may cause the Camera
- app to crash.
- </li>
-</ul>
-
-<h4>Audio</h4>
-<ul>
- <li>A platform audio player issue prevents some apps from functioning
- normally. For example, Skype and other apps are affected by this issue.
- </li>
-</ul>
-
-<h4>Connectivity</h4>
-
-
-<ul>
- <li>When a Bluetooth Low Energy (BLE) peripheral role device advertises a
- service and a BLE central role device connects, the peripheral role device
- disconnects very quickly.
- </li>
-
- <li>Wi-Fi connection may be dropped when the screen is off.
- </li>
-
- <li>RFCOMM connections are unstable and may result in data corruption and
- dangling connections.
- </li>
-
- <li>The active network state ({@link android.net.NetworkInfo#getState
- NetworkInfo.getState()} and {@link android.net.NetworkInfo#getDetailedState
- NetworkInfo.getDetailedState()}) might return incorrect values during some
- restricted background scenarios.
- </li>
-</ul>
-
-
-<h4>
- Launcher
-</h4>
-
-<ul>
- <li>The default launcher’s All Apps tray may become unresponsive after
- cycling screen off / screen on. Returning to the homescreen and relaunching
- the All Apps tray may resolve this issue.
- </li>
-</ul>
-
-<h4>
- Keyboard
-</h4>
-
-<ul>
- <li>When updating a device running Android 6.0 or earlier to the N Developer
- Preview, Google Keyboard does not preserve preferences data such as recent
- emoji and sound settings.
- </li>
-
- <li>Google Indic Managed Keyboard may be unstable.
- </li>
-
- <li>When entering text in a password field, the user can select Russian as
- the input language but the keyboard remains in English. This prevents the
- user from entering Russian-language passwords.
- </li>
-</ul>
-
-<h4>
- Locale and languages
-</h4>
-
-<ul>
- <li>When using a right-to-left (RTL) locale, the system may unexpectedly
- switch to left-to-right (LTR) presentation after restarting the device.
- </li>
-</ul>
-
-<h4>Media</h4>
-
-<ul>
- <li>Media playback be be unreliable on Nexus 9 and Nexus Player, including
- issues playing HD video.
- </li>
-</ul>
-
-<h4>
- Multi-window mode
-</h4>
-
-<ul>
- <li>Device may freeze when changing orientation in multi-window mode.
- </li>
-
- <li>Several apps currently have issues with multi-window mode:
- <ul>
- <li>The system UI may crash when docking Settings > Display >
- Screen brightness to multi-window.
- </li>
-
- <li>The Camera app may crash when launched in multi-window mode.
- </li>
-
- <li>YouTube may crash when launched into multi-window mode. To fix the
- issue, you can clear the YouTube app’s data at Storage > Apps >
- YouTube.
- </li>
- </ul>
- </li>
-</ul>
-
-<h4>
- Google Play services
-</h4>
-
-<ul>
- <li>Apps using Google Cast through Google Play services may be unstable when
- the user selects a system locale that uses letters and numbers outside of the
- ASCII range.
- </li>
-</ul>
-
-<h4>
- Android for Work and Google Apps Device Policy
-</h4>
-
-<ul>
- <li>The Device Policy app may crash when the user unlocks the device with the
- "device policy status" screen pinned.
- </li>
-
- <li>After setting up a work profile with file-based encryption enabled and
- then turning off Work, users must unlock primary profile screen lock to once
- again access Work apps.
- </li>
-
- <li>Device reboots when removing the security pattern lock and opening work
- app/personal app in the multi-window.
- </li>
-
- <li>Setting DISALLOW_VPN_CONFIG is causing the consent dialog to appear in
- always-on-vpn set by Device Policy Client.
- </li>
-
- <li>Traffic is not locked down until VPN is connected in always-on-vpn mode.
- </li>
-</ul>
-
-<h4>
- External storage
-</h4>
-
-<ul>
- <li>Apps may become unstable when the user moves them from internal storage
- to adoptable external storage (this can include SD card or devices attached
- over USB).
- </li>
-</ul>
-
-<h4>
- Screen zoom and multiple APKs in Google Play
-</h4>
-
-<ul>
- <li>On devices running Android N, Google Play services 9.0.83 incorrectly reports
- the current screen density rather than the stable screen density. When screen
- zoom is enabled on these devices, this can cause Google Play to select a
- version of a multi-APK app that’s designed for smaller screens. This issue is
- fixed in the next version of Google Play services and will be included in a
- later Developer Preview release.
- </li>
-
- <li>On devices running Android N, Google Play services 9.0.83 currently reports
- Vulkan support but not Vulkan version. This can cause Google Play to select a
- version of a multi-APK app that’s designed for lower Vulkan support on
- devices with higher version support. Currently, the Google Play Store does
- not accept uploads of Apps which use Vulkan version targeting. This support
- will be added to the Google Play Store in the future and fixed in the next
- version of Google Play services (to be included in a later Developer Preview
- release) any N devices using the version of Google Play services 9.0.83 will
- continue to receive versions of Apps targeting basic Vulkan support.
- </li>
-</ul>
-
-<h4>Notifications</h4>
-
-<ul>
- <li>MessagingStyle does not show notifications with "null" (self) sender.
- </li>
-</ul>
-
-<h4>Developer Tools</h4>
-
-<ul>
- <li>
- <code>adb</code> may sometimes disconnect while using JDWP debugging.
- </li>
-</ul>
-
-
-<!-- DP2 Release Notes Archive -->
-
-<h2 id="dp2">Developer Preview 2</h2>
-
-<div class="wrap">
- <div class="cols">
- <div class="col-6of12">
- <p>
- <em>Date: April 2016<br>
- Builds: NPC91K, NPC91O<br>
- Emulator support: x86 & ARM (32/64-bit)<br>
- Google Play services: 8.4</em>
- </p>
- </div>
- </div>
-</div>
-
-<h3 id="dp2-new">New in DP2</h3>
-
-<ul>
- <li>Platform support for Vulkan, a new 3D rendering API that provides
- explicit, low-overhead GPU (Graphics Processor Unit) control and offers
- improved performance for draw-call heavy applications. For details, see the
- <a href="{@docRoot}ndk/guides/graphics/index.html">documentation</a>.
- </li>
-
- <li>New people emoji with support for skin tones, and new Unicode 9 glyphs.
- Skin tone and new emoji will not show up until keyboards build support for
- them in the palette. Apps should not need to take any action to take
- advantage of these new emoji, unless the apps use a non-system font. IME
- developers need to incorporate support for the new emoji.
- </li>
-
- <li>
- <a href="{@docRoot}preview/api-overview.html#launcher_shortcuts">Launcher
- Shortcuts API</a>: Apps can use <code>ShortcutManager</code> to send
- shortcuts to starting points within themselves to the launcher.
- </li>
-
- <li>
- <a href="{@docRoot}preview/features/multi-window.html">Multi-Window</a>:
- You can now specify a separate minimum height and minimum width for an
- activity. In addition, several API names have been slightly changed.
- </li>
-</ul>
-
-<h4 id="dp2-fixes">Fixes for issues reported by developers</h4>
-
-<p>
- A number of issues reported by developers have been fixed, including:
-</p>
-
-<ul>
- <li>Can’t connect to hidden SSID or non-broadcast Wi-Fi. (bug <a href=
- "https://code.google.com/p/android/issues/detail?id=203116">203116</a>)
- </li>
-
- <li>Microphone mute state persists across activities. (bug <a href=
- "https://code.google.com/p/android/issues/detail?id=205922">205922</a>)
- </li>
-
- <li>Changing multi-window focus pauses YouTube. (bug <a href=
- "https://code.google.com/p/android/issues/detail?id=203424">203424</a>)
- </li>
-
- <li>Direct Reply may close open activity. (bug <a href=
- "https://code.google.com/p/android/issues/detail?id=204411">204411</a>)
- </li>
-
- <li>Various stability fixes.
- </li>
-</ul>
-
-<h3 id="dp2-general">General advisories</h3>
-
-<p>
- This Developer Preview release is for <strong>app developers only</strong>
- and is designed for use in compatibility testing and early development only.
- Please be aware of these general notes about the release:
-</p>
-
-<ul>
-
- <li>The development tool components and support libraries have been updated
- for the DP2 release. Make sure to update your preview development environment
- before developing for DP2. For instructions on setting up your development
- environment, see
- <a href="{@docRoot}preview/setup-sdk.html">Set Up the Preview</a>.
- </li>
-
- <li>This release has various stability and performance issues on all devices
- that make it <strong>not suitable for daily use on phone or tablet</strong>,
- especially for non-developers.
- </li>
-
- <li>Battery life and performance have not yet been optimized with this
- release:
-
- <ul>
- <li>System and app <strong>performance is known to be periodically slow /
- janky</strong>, and devices may become occasionally unresponsive. These
- problems may become more acute with prolonged use.
- </li>
-
- <li>Battery life may be regressed in this release for screen-on and
- screen-off use cases.
- </li>
- </ul>
- </li>
-
- <li>Some <strong>apps may not function normally</strong> on Developer Preview
- 2. This includes Google’s apps as well as other apps.
- </li>
-
- <li>This early build is not <strong>Compatibility Test Suite (CTS)
- approved</strong>. Apps that depend on CTS approved builds won’t work
- (Android Pay for example).
- </li>
-
- <li>This preview release supports the following devices: Nexus 5X, Nexus 6,
- Nexus 6P, Nexus 9, and Pixel C, as well as General Mobile 4G
- (Android One). Support for Nexus Player is coming soon.
- </li>
-
-
- <li><a href=
- "https://github.com/googlesamples/android-testdpc/releases">TestDPC</a> has
- been updated to handle API changes between DP1 and DP2.
- </li>
-</ul>
-
-<h3 id="dp2-ki">Known Issues</h3>
-
-<h4>Performance and battery</h4>
-
-<ul>
- <li>System and app performance is known to be <strong>periodically slow /
- janky</strong>, and device may become occasionally unresponsive. These
- problems may become more acute with prolonged use.
- </li>
-</ul>
-
-<h4>Google accounts</h4>
-
-<ul>
- <li>In some circumstances, there can be issues with
- <code>AccountManagerService</code> that prevent logging in to Google accounts
- </li>
-</ul>
-
-<h4>System update</h4>
-
-<ul>
- <li>Device may restart immediately after updating to DP2.
- </li>
-</ul>
-
-<h4>Accessibility</h4>
-
-<ul>
- <li>Problem with listening to text-to-speech (TTS) output when pitch is set
- near maximum level.
- </li>
-</ul>
-
-<h4>Bluetooth</h4>
-
-<ul>
- <li>Bluetooth Low Energy (LE) GATT characteristics are using the wrong write
- type and will not be sent to a remote device. Thus, for example, some fitness
- devices will not work.
- </li>
-</ul>
-
-<h4>Setup wizard</h4>
-
-<ul>
- <li>The option to restore data on a new device (or newly reset device) from
- "Your Google Account" is not actionable in the setup wizard. You must restore
- data from an existing device by selecting "another Android device" in the
- setup wizard, or else set it up as a new device.
- </li>
-</ul>
-
-<h4>OEM unlock</h4>
-
-<ul>
- <li>On some devices, <strong>Enable OEM unlock</strong> is grayed out in
- "Developer Options" while running DP2.<br>
- <strong>Workaround:</strong> Opt in to
- the Android Beta Program (if you are not already opted in) by visiting
- <a href="https://www.google.com/android/beta" class=
- "external-link">www.google.com/android/beta</a>. Then, opt out and accept the
- downgrade OTA. Opting out causes the device to downgrade to Android 6.0. You
- should now be able to choose <strong>Enable OEM unlock</strong> in
- "Developer Options". Personal data is erased when you downgrade the
- device; however, unlocking the bootloader would have erased this data anyway.
- </li>
-</ul>
-
-<h4>Android for Work</h4>
-
-<ul>
- <li>Work Security Challenge
- <ul>
- <li>After migration to N, or after the user creates work profiles, work
- profiles can't create keys in the keystore until the user changes their
- pattern, PIN, or password, or sets up a Work Challenge.
- </li>
-
- <li>In Direct boot mode, applying the passcode restrictions to the device
- causes the work profile to be unlocked, even though the device is locked.
- This makes the work profile accessible even though it should be protected
- by the device lock screen.
- </li>
- </ul>
- </li>
-
- <li>Always On VPN
- <ul>
- <li>If Always On VPN mode is turned on, but VPN is not available, apps
- connect over the ordinary network. Apps should be offline if they have no
- VPN connection available.
- </li>
-
- <li>When Always On mode is on, a VPN connection is not established after
- a device reboots into Direct boot mode, even after the user unlocks the
- secure lock screen.
- </li>
- </ul>
- </li>
-
- <li>Suspend Packages
- <ul>
- <li>Device admins can suspend critical system packages, which may lead to
- unexpected behavior, such as placing calls despite the "Telephone
- disabled" dialog being displayed.
- </li>
- </ul>
- </li>
-
- <li>Other
- <ul>
- <li>The Settings app crashes on launch if {@link
- android.os.UserManager#DISALLOW_MOUNT_PHYSICAL_MEDIA} is set to true when
- the user inserts physical media such as an SD card.
- </li>
-
- <li>The first check-in in a Work Profile takes several minutes to
- complete.
- </li>
- </ul>
- </li>
-</ul>
-
-<h4 id="vulkan">Vulkan</h4>
-
-<ul>
- <li>Nexus 5X/6P</li>
- <ul>
- <li>Gaps between binding numbers and non-zero
- as the first binding number causes {@code vkCreateGraphicsPipeline()} to fail.</li>
- <li>Vulkan exhibits incorrect sampling behavior on projected texture coordinates.</li>
- <li>in the multithreadCmdBuffer sample, {@code vkCmdClearColorImage()} crashes when
- running with the N-DP2 driver.</li>
- <li>Return values from {@code vkGetPhysicalDeviceFormatProperties()} do not set a value
- for {@code VkFormatProperties::linearTilingFeatures}, which takes a value of 0 as
- a result.</li>
- <li>Vulkan floating point frame buffer attachments are not handled correctly.</li>
- </ul>
- <li>Nexus Player</li>
- <ul>
- <li>SPIR-V shaders may trigger driver asserts.</li>
- <li>Some pipeline configurations may cause {@code vkCreateGraphicsPipeline()}
- to crash.</li>
- </ul>
-</ul>
-
-<h4>Device-specific issues</h4>
-
-<dl>
- <dt>
- <strong>Android One</strong>
- </dt>
-
- <dd>
- Data connection fails when device is switched from slot 1 to slot 2 SIM.
- </dd>
-
- <dt>
- <strong>Pixel C</strong>
- </dt>
-
- <dd>
- Unable to toggle Voice Search "Always On" option.
- </dd>
-
- <dt>
- <strong>Nexus 6</strong>
- </dt>
-
- <dd>
- Camera pictures in portrait orientation are corrupted, except for HDR+
- photos.
- </dd>
-
- <dt>
- <strong>Nexus Player</strong>
- </dt>
-
- <dd>
- Playback of Netflix HD content may fail on Nexus Player.
- </dd>
-
- <dd>
- Any application that relies on dynamic video resolution changes may fail on
- Nexus Player.
- </dd>
-
- <dd>
- Any application that use the VP9 video codec may fail on Nexus Player.
- </dd>
-</dl>
-
-<!-- DP 1 release notes archive -->
-
-<h2 id="dp1">Developer Preview 1</h2>
-
-<div class="wrap">
- <div class="cols">
- <div class="col-6of12">
- <p>
- <em>Date: March 2016<br>
- Builds: NPC56P, NPC56R, updated: NPC56W, NPC56X<br>
- Emulator support: x86 & ARM (32/64-bit)<br>
- Google Play services: 8.4</em>
- </p>
- </div>
- </div>
-</div>
-
-<h3 id="dp1-general">General advisories</h3>
-
-<p>
- This Developer Preview release is for app developers only and is designed for
- use in compatibility testing and early development only. Please be aware of
- these general notes about the release:
-</p>
-<ul>
- <li>This release has various stability and performance issues on all devices
- that make it <em>not suitable for daily use on phone or tablet</em>,
- especially for non-developers.
- </li>
-
- <li>System and app performance is known to be <strong>periodically slow /
- janky</strong>, and device may become occasionally unresponsive. These
- problems may become more acute with prolonged use.
- </li>
-
- <li>Battery life may be regressed in this release for screen-on and
- screen-off use cases.
- </li>
-
- <li>Some apps may not function normally on Developer Preview 1. This includes
- Google’s apps as well as other apps.
- </li>
-
- <li>This early build is not Compatibility Test Suite (CTS) approved. Apps
- that depend on CTS approved builds (Android Pay for example) won’t work.
- </li>
-
- <li>This preview release supports the following devices: Nexus 5X, Nexus 6,
- Nexus 6P, Nexus 9, Nexus Player, and Pixel C, as well as General Mobile 4G
- (Android One).
- </li>
-</ul>
-
-<h3 id="dp1-platform">Platform Issues</h3>
-
-<h4>Performance and battery</h4>
-
-<ul>
- <li>System and app performance is known to be <strong>periodically slow /
- janky</strong>, and device may become occasionally unresponsive. These
- problems may become more acute with prolonged use.
- </li>
-
- <li>Battery life may be regressed in this release for screen-on and
- screen-off use cases.
- </li>
-</ul>
-<h4 id="dialer">Dialer</h4>
-
-<ul>
- <li>Dialer app does not support Direct boot. This will be addressed later in
- N Developer Preview.
- </li>
-
- <li>Voicemail playback does not work.
- </li>
-</ul>
-
-<h4>Microphone</h4>
-
-<ul>
- <li>The system may incorrect persists the microphone mute state across apps and reboots. If you mute the microphone in an app and the state is persisted, open any app that has microphone mute controls and unmute the microphone.</li>
-</ul>
-
-<h4 id="ui">System UI</h4>
-
-<ul>
- <li>Some new or modified strings in the system UI are not translated to all
- languages.
- </li>
-
- <li>Overview UI is still in development, and subject to change. For example,
- we intend to remove the timer that appears when the user switches between
- apps.
- </li>
-
- <li>Settings controls and toggles may be slow or appear to be unresponsive.
- </li>
-
- <li>Visual design of notifications is subject to change.
- </li>
-
- <li>In the Gmail app, direct archiving of emails included in a notification
- bundle does not work properly.
- </li>
-</ul>
-
-<h4>Android for Work</h4>
-
-<ul>
- <li>Work Security Challenge
- <ul>
- <li>After migration to N, or after the user creates work profiles, work
- profiles can't create keys in the keystore until the user changes their
- pattern, PIN, or password, or sets up a Work Challenge.
- </li>
-
- <li>In Direct boot mode, applying the passcode restrictions to the device
- causes the work profile to be unlocked, even though the device is locked.
- This makes the work profile accessible even though it should be protected
- by the device lock screen.
- </li>
-
- <li>When the user enters a wrong password and pin, the system does not
- display any informational message; instead, it only clears the input
- field. This issue does not affect pattern or fingerprint input.
- </li>
-
- <li>On a tablet, the background displayed with the work challenge is
- disproportionately small.
- </li>
-
- <li>The version of <a href=
- "https://play.google.com/store/apps/details?id=com.google.android.apps.enterprise.dmagent">
- Google Apps Device Policy</a> that is bundled with N Developer Preview
- does not yet support the Work Profile Security Challenge feature.
- Developers should instead use <a href=
- "https://github.com/googlesamples/android-testdpc/releases">TestDPC</a>
- to test this feature.
- </li>
- </ul>
- </li>
-
- <li>Always On VPN
- <ul>
- <li>If Always On VPN mode is turned on, but VPN is not available, apps
- not specified as exceptions to the Always On policy connect over the
- ordinary network. Unless specified as exceptions to Always On VPN policy,
- apps should be offline if they have no VPN connection available.
- <ul>
- <li>When Always On mode is on, a VPN connection is not established
- after a device reboots into Direct boot mode, even after the user
- unlocks the secure lock screen.
- </li>
- </ul>
- </li>
- </ul>
- </li>
-
- <li>Improved Contacts
- <ul>
- <li>Bluetooth PBAP/MAP devices do not display Caller ID for work
- contacts. The next release of Preview resolves this issue.
- </li>
- </ul>
- </li>
-
- <li>Work Mode
- <ul>
- <li>The Google Now Launcher does not display whether Work Mode is on or
- off. The Launcher also does not show app suspension state.
- </li>
-
- <li>After the user turns Work Mode off and on, the system no longer shows
- Work profile app widgets, such as Calendar.
- </li>
- </ul>
- </li>
-
- <li>Suspend Packages
- </li>
-
- <li>Device admins can suspend critical system packages, which may lead to
- unexpected behavior, such as placing calls despite the Telephone disabled
- dialog’s being displayed.
- </li>
-
- <li>Other
- <ul>
- <li>The Settings app crashes on launch if {@link
- android.os.UserManager#DISALLOW_MOUNT_PHYSICAL_MEDIA} is set to true when
- the user inserts physical media such as an SD card.
- </li>
-
- <li>The {@code DPM.setPackagesSuspended} state does not persist when the
- user uninstalls and then reinstalls an app. Either the app should remain
- suspended after uninstall/reinstall, or suspended apps should not be
- uninstallable
- </li>
-
- <li>The first check-in in a Work Profile takes several minutes to
- complete. This may cause the device to take longer than normal to be
- visible in the Play EMM API.
- </li>
-
- <li>Notifications from Work Profile apps are not visible to notification
- listeners installed in the personal profile. As a result, the system does
- not display Notifications as expected.
- </li>
-
- </ul>
- </li>
-</ul>
-
-<h4 >Keyboard</h4>
-
-<ul>
- <li>Bluetooth pairing between keyboards and Android devices may be unstable.
- </li>
-</ul>
-
-<h4 >Video</h4>
-
-<ul>
-<li>Video playback may lag and show interruptions.</li>
-</ul>
-
-<h4>Wi-Fi</h4>
-
-<ul>
- <li>Wi-Fi has undergone some refactoring which may change API corner case
- behavior. Specifically, applications which attempt to connect to specific
- networks, or attempt to reconnect to networks should retest.
- </li>
-
- <li>The legacy DHCP client has been removed from the platform. The only DHCP
- client that the platform supports is the DHCP client introduced in M.
- </li>
-</ul>
-
-<h4>Direct boot</h4>
-
-<ul>
- <li>NFC doesn't function until first unlock.
- <ul>
- <li>When a phone with Bluetooth enabled is restarted, Bluetooth does not
- turn on automatically. You must manually re-enable Bluetooth.
- </li>
-
- <li>Under some circumstances, the default ringtone may not sound for
- phone calls and messages. This behavior is fixed in the next N Preview
- release, with one exception (and workaround):
- </li>
-
- <li>On a device that is not freshly wiped--one that has been booted at
- least once since being set to direct boot mode--the default notification
- ringtone does not sound. The user can work around this issue by manually
- selecting a ringtone from Settings.
- </li>
-
- <li>Direct boot is not enabled by default on devices running an N
- Developer Preview build. To enable direct boot for testing and
- development, go to Developer Options and tap Convert to File Encryption.
- In this dev preview, this requires a factory reset to repartition and
- reformat your device for File-based Encryption.
- </li>
- </ul>
- </li>
-</ul>
-
-<h4>Picture-in-picture for Android TV</h4>
-
-<ul>
- <li>The PIP integration in the Recents UI is not finalized, and is subject to
- change.
- <ul>
- <li>The animation of the PIP window is not smooth. Future releases of the
- Preview will improve this.
- </li>
- </ul>
- </li>
-
- <li style="list-style: none">Future releases of the Preview will improve upon
- the visual design and layout alignment of PIP.
- </li>
-</ul>
-
-<h4>Bug reports</h4>
-
-<ul>
- <li>Bug reports do not always complete successfully (as a workaround,
- sometimes they can still be accessed through the bug report document provider
- in internal storage).
- </li>
-</ul>
-
-<h4>Split-screen Multi-window</h4>
-
-<ul>
- <li>Apps may experience crashes and unexpected UI behavior when put into
- split-screen mode. These are app issues that must be fixed by the app
- developer.
- </li>
-
- <li>When an app targets a version of the Android platform earlier than N, the
- App may not work with split-screen toast may appear multiple times.
- </li>
-
- <li>Long-pressing the Overview button while using an app with a fixed
- orientation may produce unexpected app behavior.
- </li>
-
- <li>Apps may flicker while resizing.
- </li>
-
- <li>Animations are not yet final.
- </li>
-</ul>
-
-<h4>Input method</h4>
-
-<ul>
- <li>Google Keyboard unexpectedly falls back to the generic Google keyboard
- when <b>Use system language</b>, but Google Keyboard doesn’t support any of
- the languages selected in the system-language preferences. It should fall
- back to American English.
- <p>
- You can work around this problem by adding at least one language that
- Google Keyboard supports.
- </p>
- </li>
-</ul>
-
-<h4>Accessibility</h4>
-
-<ul>
- <li>TalkBack exhibits issues with features including Notifications, Quick
- Settings Tiles and Multi-window display that may cause system crashing or
- lack of spoken feedback from TalkBack. Future releases of the preview will
- address these issues.
- </li>
-</ul>
-
-<h3 id="dp1-device-sp">Device-Specific Notes and Issues</h3>
-
-<h4>Nexus Player</h4>
-<ul>
- <li>Video playback, app compatibility and stability issues are expected on
- Nexus Player in this release of the Preview.
- </li>
-</ul>
-
-<h4>Pixel C</h4>
-<ul>
-<li>Multi-window resizing may cause crashing.</li>
-</ul>
-
-<h4>Nexus 9</h4>
-<ul>
-<li>Nexus 9 devices may not start after receiving an over-the-air (OTA) update
- via the Android Beta Program. To recover from this issue, you can try
- to manually install the OTA image. For more information, see
- <a href="{@docRoot}preview/download-ota.html">Applying a Device OTA Image</a>.
-</li>
-</ul>
-
diff --git a/docs/html/reference/_project.yaml b/docs/html/reference/_project.yaml
new file mode 100644
index 0000000..e5c26e7
--- /dev/null
+++ b/docs/html/reference/_project.yaml
@@ -0,0 +1,6 @@
+name: "Reference"
+home_url: /reference/
+description: "API Reference packages and classes."
+content_license: cc3-apache2
+buganizer_id: 30209417
+parent_project_metadata_path: /develop/_project.yaml
diff --git a/docs/html/samples/_project.yaml b/docs/html/samples/_project.yaml
new file mode 100644
index 0000000..ede5958
--- /dev/null
+++ b/docs/html/samples/_project.yaml
@@ -0,0 +1,6 @@
+name: "Samples"
+home_url: /samples/
+description: "Welcome to code samples where you can browse sample code and learn how to build different components for your applications."
+content_license: cc3-apache2
+buganizer_id: 30209417
+parent_project_metadata_path: /develop/_project.yaml
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..6a3f641 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..1ba93ca 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 2b2967a..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..27b667c 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/arc/index.jd b/docs/html/topic/arc/index.jd
index d46fbc8..a025459 100644
--- a/docs/html/topic/arc/index.jd
+++ b/docs/html/topic/arc/index.jd
@@ -51,7 +51,7 @@
<!-- Some Chromebooks don't support touch. Although not essential,
it's a good idea to explicitly include this declaration. -->
<uses-feature android:name="android.hardware.touchscreen"
- required="false" />
+ android:required="false" />
</manifest>
</pre>
diff --git a/docs/html/topic/instant-apps/_project.yaml b/docs/html/topic/instant-apps/_project.yaml
new file mode 100644
index 0000000..e6b8cd9
--- /dev/null
+++ b/docs/html/topic/instant-apps/_project.yaml
@@ -0,0 +1,6 @@
+name: "Android Instant Apps"
+home_url: /topic/instant-apps/
+description: "An evolution in app sharing and discovery, Android Instant Apps enables Android apps to run instantly, without requiring installation."
+content_license: cc3-apache2
+buganizer_id: 30209417
+parent_project_metadata_path: /develop/_project.yaml
diff --git a/docs/html/topic/libraries/_project.yaml b/docs/html/topic/libraries/_project.yaml
new file mode 100644
index 0000000..cdf59e5
--- /dev/null
+++ b/docs/html/topic/libraries/_project.yaml
@@ -0,0 +1,6 @@
+name: "Android Libraries"
+home_url: /topic/libraries/
+description: "This section describes several useful Android libraries that are not included with the Android Framework."
+content_license: cc3-apache2
+buganizer_id: 30209417
+parent_project_metadata_path: /develop/_project.yaml
diff --git a/docs/html/topic/libraries/data-binding/index.jd b/docs/html/topic/libraries/data-binding/index.jd
index ddcc9f2..0faa1db 100644
--- a/docs/html/topic/libraries/data-binding/index.jd
+++ b/docs/html/topic/libraries/data-binding/index.jd
@@ -162,7 +162,9 @@
<p>
To use data binding, Android Plugin for Gradle <strong>1.5.0-alpha1</strong>
- or higher is required.
+ or higher is required. See how to <a
+href="/studio/releases/gradle-plugin.html#updating-plugin">update the Android
+Plugin for Gradle</a>.
</p>
<h2 id="build_environment">
diff --git a/docs/html/topic/libraries/support-library/features.jd b/docs/html/topic/libraries/support-library/features.jd
index 0f63bf6..b5f189a 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.1
</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.1
+</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.1
+</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.1
+</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.1
+</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.1
</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.1
</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.1
</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.1
</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.1
</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.1
</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.1
</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.1
</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.1
</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.1
</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.1
</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.1
</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.1
</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.1
</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.1
</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.1
</pre>
diff --git a/docs/html/topic/libraries/support-library/revisions.jd b/docs/html/topic/libraries/support-library/revisions.jd
index ef73d1d..db99ec8 100644
--- a/docs/html/topic/libraries/support-library/revisions.jd
+++ b/docs/html/topic/libraries/support-library/revisions.jd
@@ -6,9 +6,403 @@
<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-1">
<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.1</a>
+ <em>(September 2016)</em>
+ </p>
+
+ <div class="toggle-content-toggleme">
+
+ <p>Fixed issues:</p>
+
+<ul>
+ <li>{@link android.support.design.widget.FloatingActionButton} can no longer
+ be anchored to indirect children of {@link
+ android.support.design.widget.CoordinatorLayout}. (AOSP issue <a href=
+ "https://code.google.com/p/android/issues/detail?id=220250">220250</a>)
+ </li>
+
+ <li>Image inside {@link
+ android.support.design.widget.CollapsingToolbarLayout} doesn’t scale properly
+ with <code>fitsSystemWindows=true</code>. (AOSP issue <a href=
+ "https://code.google.com/p/android/issues/detail?id=220389">220389</a>)
+ </li>
+
+ <li>{@link android.support.design.widget.CoordinatorLayout} throws {@link
+ java.lang.IndexOutOfBoundsException} when {@link
+ android.support.design.widget.Snackbar} is shown and dismissed. (AOSP issue
+ <a href="https://code.google.com/p/android/issues/detail?id=220762"
+ >220762</a>)
+ </li>
+
+ <li>{@link android.support.design.widget.TextInputLayout} fails to resolve
+ error text color. (AOSP issue <a href=
+ "https://code.google.com/p/android/issues/detail?id=220305">220305</a>)
+ </li>
+
+ <li>{@link android.support.v7.util.SortedList.BatchedCallback#onMoved
+ BatchedCallback.onMoved()} calls {@link
+ android.support.v7.util.SortedList.BatchedCallback#onInserted
+ BatchedCallback.onInserted()}. (AOSP issue <a href=
+ "https://code.google.com/p/android/issues/detail?id=220309">220309</a>)
+ </li>
+
+ <li>{@link android.support.design.widget.TextInputLayout} overrides right
+ compound drawable. (AOSP issue <a href=
+ "https://code.google.com/p/android/issues/detail?id=220728">220728</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=label%3ATarget-Support-24.2.1">
+ AOSP Issue Tracker</a>.
+</p>
+
+
+ </div>
+</div>
+
+<!-- end of collapsible section: 24.2.1 -->
+
+<div class="toggle-content closed">
+ <p id="rev24-2-0">
+ <a href="#" onclick="return toggleContent(this)"><img src=
+ "{@docRoot}assets/images/styles/disclosure_down.png" class=
+ "toggle-content-img" alt="">Android Support Library, revision 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 +470,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=
@@ -960,7 +1354,7 @@
<li style="list-style: none; display: inline">
<ul>
<li>Day and night themes can be found here: {@code
- <sdk>/extras/android/support/v7/appcompat/res/values/themes_daynight.xml}
+ <sdk>/extras/android/support/v7/appcompat/res/values/themes_daynight.xml}
</li>
<li>{@code AppCompatDelegate.setDefaultNightMode()}: sets the
@@ -2806,7 +3200,7 @@
<a href="{@docRoot}design/index.html">Android Design</a> guidelines for navigation. These
additions include a way to implement the action bar's <em>Up</em> button across versions.
For an example implementation of this pattern, see the AppNavigation sample in
-({@code <em><sdk></em>/samples/<em><platform></em>/AppNavigation}).</li>
+({@code <em><sdk></em>/samples/<em><platform></em>/AppNavigation}).</li>
<li>Added {@link android.support.v4.app.NotificationCompat.Builder} to provide a
compatibility implementation of Android 3.0's {@link android.app.Notification.Builder} helper class
for creating standardized system notifications.</li>
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/topic/performance/_book.yaml b/docs/html/topic/performance/_book.yaml
index 94cfc57..e053a2c 100644
--- a/docs/html/topic/performance/_book.yaml
+++ b/docs/html/topic/performance/_book.yaml
@@ -26,6 +26,8 @@
path: /topic/performance/threads.html
- title: Optimizing View Hierarchies
path: /topic/performance/optimizing-view-hierarchies.html
+- title: Background Optimization
+ path: /topic/performance/background-optimization.html
- title: Intelligent Job-Scheduling
path: /topic/performance/scheduling.html
- title: Reducing APK Size
diff --git a/docs/html/topic/performance/_project.yaml b/docs/html/topic/performance/_project.yaml
new file mode 100644
index 0000000..d4202a9
--- /dev/null
+++ b/docs/html/topic/performance/_project.yaml
@@ -0,0 +1,6 @@
+name: "Performance"
+home_url: /topic/performance/
+description: "Improve your app's performance by learning how to optimize power consumption, launch times, and other important areas of performance."
+content_license: cc3-apache2
+buganizer_id: 30209417
+parent_project_metadata_path: /develop/_project.yaml
diff --git a/docs/html/topic/performance/background-optimization.jd b/docs/html/topic/performance/background-optimization.jd
new file mode 100644
index 0000000..0a1a6f5
--- /dev/null
+++ b/docs/html/topic/performance/background-optimization.jd
@@ -0,0 +1,397 @@
+page.title=Background Optimizations
+page.metaDescription=New restrictions to implicit broadcasts.
+page.keywords="android N", "implicit broadcasts", "job scheduler"
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>
+ In this document
+ </h2>
+
+ <ol>
+ <li>
+ <a href="#connectivity-action">Restrictions on CONNECTIVITY_ACTION</a>
+ <ul>
+ <li>
+ <a href="#sched-jobs">Scheduling Network Jobs on Unmetered
+ Connections</a>
+ </li>
+
+ <li>
+ <a href="#monitor-conn">Monitoring Network Connectivity While the
+ App is Running</a>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <a href="#media-broadcasts">Restrictions on NEW_PICTURE and
+ NEW_VIDEO</a>
+ <ul>
+ <li>
+ <a href="#new-jobinfo">New JobInfo methods</a>
+ </li>
+
+ <li>
+ <a href="#new-jobparam">New JobParameter Methods</a>
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <a href="#further-optimization">Further Optimizing Your App</a>
+ </li>
+ </ol>
+ </div>
+</div>
+
+<p>
+ Background processes can be memory- and battery-intensive. For example, an
+ implicit broadcast may start many background processes that have registered
+ to listen for it, even if those processes may not do much work. This can have
+ a substantial impact on both device performance and user experience.
+</p>
+
+<p>
+ To alleviate this issue, Android 7.0 (API level 24) applies the following
+ restrictions:
+</p>
+
+<ul>
+ <li>Apps targeting Android 7.0 (API level 24) do not receive {@link
+ android.net.ConnectivityManager#CONNECTIVITY_ACTION} broadcasts if they
+ register to receive them in their manifest. Apps that are running can still
+ listen for {@code CONNECTIVITY_CHANGE} on their main thread by registering a
+ {@link android.content.BroadcastReceiver} with {@link
+ android.content.Context#registerReceiver Context.registerReceiver()}.
+ </li>
+
+ <li>Apps cannot send or receive {@link
+ android.hardware.Camera#ACTION_NEW_PICTURE} or {@link
+ android.hardware.Camera#ACTION_NEW_VIDEO} broadcasts. This optimization
+ affects all apps, not only those targeting Android 7.0 (API level 24).
+ </li>
+</ul>
+
+<p>
+ If your app uses any of these intents, you should remove dependencies on them
+ as soon as possible so that you can target devices running Android 7.0
+ properly. The Android framework provides several solutions to mitigate the
+ need for these implicit broadcasts. For example, {@link
+ android.app.job.JobScheduler} and <a href=
+ "https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
+ {@code GcmNetworkManager}</a> provide robust mechanisms to schedule network
+ operations when specified conditions, such as a connection to an unmetered
+ network, are met. You can now also use {@link android.app.job.JobScheduler}
+ to react to changes to content providers. {@link android.app.job.JobInfo}
+ objects encapsulate the parameters that {@link android.app.job.JobScheduler}
+ uses to schedule your job. When the conditions of the job are met, the system
+ executes this job on your app's {@link android.app.job.JobService}.
+</p>
+
+<p>
+ In this document, we will learn how to use alternative methods, such as
+ {@link android.app.job.JobScheduler}, to adapt your app to these new
+ restrictions.
+</p>
+
+<h2 id="connectivity-action">
+ Restrictions on CONNECTIVITY_ACTION
+</h2>
+
+<p>
+ Apps targeting Android 7.0 (API level 24) do not receive {@link
+ android.net.ConnectivityManager#CONNECTIVITY_ACTION} broadcasts if they
+ register to receive them in their manifest, and processes that depend on this
+ broadcast will not start. This could pose a problem for apps that want
+ to listen for network changes or perform bulk network activities when the
+ device connects to an unmetered network. Several solutions to get around this
+ restriction already exist in the Android framework, but choosing the right
+ one depends on what you want your app to accomplish.
+</p>
+
+<p class="note">
+ <strong>Note:</strong> A {@link android.content.BroadcastReceiver} registered with
+ {@link android.content.Context#registerReceiver Context.registerReceiver()}
+ continues to receive these broadcasts while the app is running.
+</p>
+
+<h3 id="sched-jobs">
+ Scheduling Network Jobs on Unmetered Connections
+</h3>
+
+<p>
+ When using the {@link android.app.job.JobInfo.Builder JobInfo.Builder} class
+ to build your {@link android.app.job.JobInfo} object, apply the {@link
+ android.app.job.JobInfo.Builder#setRequiredNetworkType
+ setRequiredNetworkType()} method and pass {@link android.app.job.JobInfo
+ JobInfo.NETWORK_TYPE_UNMETERED} as a job parameter. The following code sample
+ schedules a service to run when the device connects to an unmetered
+ network and is charging:
+</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>
+ When the conditions for your job are met, your app receives a callback to run
+ the {@link android.app.job.JobService#onStartJob onStartJob()} method in the
+ specified {@code JobService.class}. To see more examples of {@link
+ android.app.job.JobScheduler} implementation, see the <a href=
+ "{@docRoot}samples/JobScheduler/index.html">JobScheduler sample app</a>.
+</p>
+
+<p>
+ Applications that use GMSCore services, and target Android 5.0 (API level 21)
+ or lower, can use <a href=
+ "https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
+ {@code GcmNetworkManager}</a> and specify {@code Task.NETWORK_STATE_UNMETERED}.
+</p>
+
+<h3 id="monitor-conn">
+ Monitoring Network Connectivity While the App is Running
+</h3>
+
+<p>
+ Apps that are running can still listen for {@code CONNECTIVITY_CHANGE} with a
+ registered {@link android.content.BroadcastReceiver}. However, the {@link
+ android.net.ConnectivityManager} API provides a more robust method to request
+ a callback only when specified network conditions are met.
+</p>
+
+<p>
+ {@link android.net.NetworkRequest} objects define the parameters of the
+ network callback in terms of {@link android.net.NetworkCapabilities}. You
+ create {@link android.net.NetworkRequest} objects with the {@link
+ android.net.NetworkRequest.Builder NetworkRequest.Builder} class. {@link
+ android.net.ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest,
+ android.net.ConnectivityManager.NetworkCallback) registerNetworkCallback()}
+ then passes the {@link android.net.NetworkRequest} object to the system. When
+ the network conditions are met, the app receives a callback to execute the
+ {@link android.net.ConnectivityManager.NetworkCallback#onAvailable
+ onAvailable()} method defined in its {@link
+ android.net.ConnectivityManager.NetworkCallback} class.
+</p>
+
+<p>
+ The app continues to receive callbacks until either the app exits or it calls
+ {@link android.net.ConnectivityManager#unregisterNetworkCallback
+ unregisterNetworkCallback()}.
+</p>
+
+<h2 id="media-broadcasts">
+ Restrictions on NEW_PICTURE and NEW_VIDEO
+</h2>
+
+<p>
+ In Android 7.0 (API level 24), apps are not able to send or receive {@link
+ android.hardware.Camera#ACTION_NEW_PICTURE} or {@link
+ android.hardware.Camera#ACTION_NEW_VIDEO} broadcasts. This restriction helps
+ alleviate the performance and user experience impacts when several apps must
+ wake up in order to process a new image or video. Android 7.0 (API level 24)
+ extends {@link android.app.job.JobInfo} and {@link
+ android.app.job.JobParameters} to provide an alternative solution.
+</p>
+
+<h3 id="new-jobinfo">
+ New JobInfo methods
+</h3>
+
+<p>
+ To trigger jobs on content URI changes, Android 7.0 (API level 24) extends
+ the {@link android.app.job.JobInfo} API with the following methods:
+</p>
+
+<dl>
+ <dt>
+ {@code JobInfo.TriggerContentUri()}
+ </dt>
+
+ <dd>
+ Encapsulates parameters required to trigger a job on content URI changes.
+ </dd>
+
+ <dt>
+ {@code JobInfo.Builder.addTriggerContentUri()}
+ </dt>
+
+ <dd>
+ Passes a {@code TriggerContentUri} object to {@link
+ android.app.job.JobInfo}. A {@link android.database.ContentObserver}
+ monitors the encapsulated content URI. If there are multiple {@code
+ TriggerContentUri} objects associated with a job, the system provides a
+ callback even if it reports a change in only one of the content URIs.
+ </dd>
+
+ <dd>
+ Add the {@code TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS} flag to
+ trigger the job if any descendants of the given URI change. This flag
+ corresponds to the {@code notifyForDescendants} parameter passed to {@link
+ android.content.ContentResolver#registerContentObserver
+ registerContentObserver()}.
+ </dd>
+</dl>
+
+<p class="note">
+ <strong>Note:</strong> {@code TriggerContentUri()} cannot be used in
+ combination with {@link android.app.job.JobInfo.Builder#setPeriodic
+ setPeriodic()} or {@link android.app.job.JobInfo.Builder#setPersisted
+ setPersisted()}. To continually monitor for content changes, schedule a new
+ {@link android.app.job.JobInfo} before the app’s {@link
+ android.app.job.JobService} finishes handling the most recent callback.
+</p>
+
+<p>
+ The following sample code schedules a job to trigger when the system reports
+ a change to the content 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>
+ When the system reports a change in the specified content URI(s), your app
+ receives a callback and a {@link android.app.job.JobParameters} object is
+ passed to the {@link android.app.job.JobService#onStartJob onStartJob()}
+ method in {@code MediaContentJob.class}.
+</p>
+
+<h3 id="new-jobparam">
+ New JobParameter Methods
+</h3>
+
+<p>
+ Android 7.0 (API level 24) also extends {@link android.app.job.JobParameters} to
+ allow your app to receive useful information about what content authorities
+ and URIs triggered the job:
+</p>
+
+<dl>
+ <dt>
+ {@code Uri[] getTriggeredContentUris()}
+ </dt>
+
+ <dd>
+ Returns an array of URIs that have triggered the job. This will be {@code
+ null} if either no URIs have triggered the job (for example, the job was
+ triggered due to a deadline or some other reason), or the number of changed
+ URIs is greater than 50.
+ </dd>
+
+ <dt>
+ {@code String[] getTriggeredContentAuthorities()}
+ </dt>
+
+ <dd>
+ Returns a string array of content authorities that have triggered the job.
+ If the returned array is not {@code null}, use {@code getTriggeredContentUris()}
+ to retrieve the details of which URIs have changed.
+ </dd>
+</dl>
+
+<p>
+ The following sample code overrides the {@link
+ android.app.job.JobService#onStartJob JobService.onStartJob()} method and
+ records the content authorities and URIs that have triggered the job:
+</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">
+ Further Optimizing Your App
+</h2>
+
+<p>
+ Optimizing your apps to run on low-memory devices, or in low-memory
+ conditions, can improve performance and user experience. Removing
+ dependencies on background services and statically-registered implicit
+ broadcast receivers can help your app run better on such devices. Although
+ Android 7.0 (API level 24) takes steps to reduce some of these issues, it is
+ recommended that you optimize your app to run without the use of these
+ background processes entirely.
+</p>
+
+<p>
+ Android 7.0 (API level 24) introduces some additional <a href=
+ "{@docRoot}tools/help/adb.html">Android Debug Bridge (ADB)</a> commands that
+ you can use to test app behavior with those background processes disabled:
+</p>
+
+<ul>
+ <li>To simulate conditions where implicit broadcasts and background services
+ are unavailable, enter the following command:
+ </li>
+
+ <li style="list-style: none; display: inline">
+<pre class="no-pretty-print">
+{@code $ adb shell cmd appops set <package_name> RUN_IN_BACKGROUND ignore}
+</pre>
+ </li>
+
+ <li>To re-enable implicit broadcasts and background services, enter the
+ following command:
+ </li>
+
+ <li style="list-style: none; display: inline">
+<pre class="no-pretty-print">
+{@code $ adb shell cmd appops set <package_name> RUN_IN_BACKGROUND allow}
+</pre>
+ </li>
+</ul>
diff --git a/docs/html/training/_book.yaml b/docs/html/training/_book.yaml
index d709586..e9635be 100644
--- a/docs/html/training/_book.yaml
+++ b/docs/html/training/_book.yaml
@@ -420,6 +420,8 @@
path: /training/basics/network-ops/connecting.html
- title: Managing Network Usage
path: /training/basics/network-ops/managing.html
+ - title: Optimizing Network Data Usage
+ path: /training/basics/network-ops/data-saver.html
- title: Parsing XML Data
path: /training/basics/network-ops/xml.html
- title: Transferring Data Without Draining the Battery
@@ -693,8 +695,12 @@
value: 再生中カードを表示する
- title: Adding a Guided Step
path: /training/tv/playback/guided-step.html
+ - title: Introducing First-time Users to Your App
+ path: /training/tv/playback/onboarding.html
- title: Enabling Background Playback
path: /training/tv/playback/options.html
+ - title: Adding Picture-in-picture
+ path: /training/tv/playback/picture-in-picture.html
- title: Helping Users Find Content on TV
path: /training/tv/discovery/index.html
path_attributes:
@@ -724,6 +730,8 @@
path: /training/tv/tif/channel.html
- title: Managing User Interaction
path: /training/tv/tif/ui.html
+ - title: Supporting Content Recording
+ path: /training/tv/tif/content-recording.html
- title: TV Apps Checklist
path: /training/tv/publishing/checklist.html
path_attributes:
@@ -892,6 +900,11 @@
value: 順応性のある UI フローの実装
- name: zh-cn-lang
value: 实施自适应用户界面流程
+ - title: Build a Responsive UI with ConstraintLayout
+ path: /training/constraint-layout/index.html
+ path_attributes:
+ - name: description
+ value: How to build a layout using ConstraintLayout and the Android Studio Layout Editor.
- title: Adding the App Bar
path: /training/appbar/index.html
path_attributes:
@@ -1143,6 +1156,8 @@
value: 维护兼容性
- name: zh-tw-lang
value: 維持相容性
+ - title: Selecting Colors with the Palette API
+ path: /training/material/palette-colors.html
- title: Best Practices for User Input
path: /training/best-user-input.html
@@ -1363,6 +1378,11 @@
path_attributes:
- name: description
value: How to ensure that your app is secure when performing network transactions.
+ - title: Network Security Configuration
+ path: /training/articles/security-config.html
+ path_attributes:
+ - name: description
+ value: Customize the behavior of your app's secure network connections safely.
- title: Updating Your Security Provider to Protect Against SSL Exploits
path: /training/articles/security-gms-provider.html
path_attributes:
@@ -1378,11 +1398,26 @@
path_attributes:
- name: description
value: How to use the SafetyNet service to determine if a URL is designated as a known threat.
+ - title: Verifying Hardware-backed Key Pairs with Key Attestation
+ path: /training/articles/security-key-attestation.html
+ path_attributes:
+ - name: description
+ value: How to retrieve and verify the properties of a device's hardware-backed key pair.
- title: Enhancing Security with Device Management Policies
path: /work/device-management-policy.html
path_attributes:
- name: description
value: How to create an application that enforces security policies on devices.
+ - title: Supporting Direct Boot
+ path: /training/articles/direct-boot.html
+ path_attributes:
+ - name: description
+ value: How use device encrypted storage during Direct Boot mode.
+ - title: Using Scoped Directory Access
+ path: /training/articles/scoped-directory-access.html
+ path_attributes:
+ - name: description
+ value: How to use scoped directory access to request access to external storage directories.
- title: Best Practices for Permissions & Identifiers
path: /training/best-permissions-ids.html
diff --git a/docs/html/training/_project.yaml b/docs/html/training/_project.yaml
new file mode 100644
index 0000000..6aa8760
--- /dev/null
+++ b/docs/html/training/_project.yaml
@@ -0,0 +1,6 @@
+name: "Training"
+home_url: /training/
+description: "Android Training provides a collection of classes that aim to help you build great apps for Android."
+content_license: cc3-apache2
+buganizer_id: 30209417
+parent_project_metadata_path: /develop/_project.yaml
diff --git a/docs/html/training/articles/assistant.jd b/docs/html/training/articles/assistant.jd
index a1fbd6b..703b377 100644
--- a/docs/html/training/articles/assistant.jd
+++ b/docs/html/training/articles/assistant.jd
@@ -11,110 +11,92 @@
<div id="tb">
<h2>In this document</h2>
<ol>
- <li><a href="#assist_api">Using the Assist API</a>
+ <li><a href="#assist_api">Using the Assistant</a>
<ol>
- <li><a href="#assist_api_lifecycle">Assist API Lifecycle</a></li>
- <li><a href="#source_app">Source App</a></li>
- <li><a href="#destination_app">Destination App</a></li>
+ <li><a href="#source_app">Source app</a></li>
+ <li><a href="#destination_app">Destination app</a></li>
</ol>
</li>
- <li><a href="#implementing_your_own_assistant">Implementing your
- own assistant</a></li>
+ <li><a href="#implementing_your_own_assistant">Implementing Your
+ Own Assistant</a></li>
</ol>
</div>
</div>
<p>
Android 6.0 Marshmallow introduces a new way for users to engage with apps
- through the assistant.
+ through the assistant. The assistant is a top-level window that users can view to obtain
+ contextually relevant actions for the current activity. These actions might include deep links
+ to other apps on the device.</p>
+
+<p>
+ Users activate the assistant with a long press on the Home button or by saying a
+ <a href="{@docRoot}reference/android/service/voice/AlwaysOnHotwordDetector.html">keyphrase</a>.
+ In response, the system opens a top-level window that displays contextually
+ relevant actions.
</p>
<p>
- Users summon the assistant with a long-press on the Home button or by saying
- the {@link android.service.voice.AlwaysOnHotwordDetector keyphrase}. In
- response to the long-press, the system opens a top-level window that displays
- contextually relevant actions for the current activity. These potential
- actions might include deep links to other apps on the device.
+ Google App implements the assistant overlay window through a feature called
+ Now on Tap, which works with the Android platform-level functionality. The system allows
+ the user to select an assistant app, which obtains contextual information from your app
+ using Android’s Assist API.
</p>
+<p>
+ This guide explains how Android apps use Android's Assist API to improve the assistant
+ user experience.
+<p/>
+</p>
+
+
+<h2 id="assist_api">Using the Assistant</h2>
<p>
- This guide explains how Android apps use Android's Assist API to improve the
- assistant user experience.
+ Figure 1 illustrates a typical user interaction with the assistant. When the user long-presses
+ the Home button, the Assist API callbacks are invoked
+ in the <em>source</em> app (step 1). The assistant renders the overlay window (steps 2 and 3),
+ and then the user selects the action to perform. The assistant executes the selected action,
+ such as firing an intent with a deep link to the (<em>destination</em>) restaurant app (step 4).
</p>
-
-<h2 id="assist_api">Using the Assist API</h2>
-
-<p>
- The example below shows how Google Now integrates with the Android assistant
- using a feature called Now on Tap.
-</p>
-
-<p>
- The assistant overlay window in our example (2, 3) is implemented by Google
- Now through a feature called Now on Tap, which works in concert with the
- Android platform-level functionality. The system allows the user to select
- the assistant app (Figure 2) that obtains contextual information from the
- <em>source</em> app using the Assist API which is a part of the platform.
-</p>
-
-
<div>
<img src="{@docRoot}images/training/assistant/image01.png">
<p class="img-caption" style="text-align:center;">
Figure 1. Assistant interaction example with the Now on Tap feature of
- Google Now
+ the Google App
</p>
</div>
<p>
- An Android user first configures the assistant and can change system options
- such as using text and view hierarchy as well as the screenshot of the
- current screen (Figure 2).
+ Users can configure the assistant by selecting <strong>Settings > Apps > Default Apps >
+ Assist & voice input</strong>. Users can change system options such as accessing
+ the screen contents as text and accessing a screenshot, as shown in Figure 2.
</p>
-<p>
- From there, the assistant receives the information only when the user
- activates assistance, such as when they tap and hold the Home button ( shown
- in Figure 1, step 1).
-</p>
-
-<div style="float:right;margin:1em;max-width:300px">
+<div id="assist-input-settings" style="float:right;margin:1em;max-width:300px">
<img src="{@docRoot}images/training/assistant/image02.png">
<p class="img-caption" style="text-align:center;">
- Figure 2. Assist & voice input settings (<em>Settings/Apps/Default
- Apps/Assist & voice input</em>)
+ Figure 2. Assist & voice input settings
</p>
</div>
-<h3 id="assist_api_lifecycle">Assist API Lifecycle</h3>
+<h3 id="source_app">Source app</h3>
<p>
- Going back to our example from Figure 1, the Assist API callbacks are invoked
- in the <em>source</em> app after step 1 (user long-presses the Home button)
- and before step 2 (the assistant renders the overlay window). Once the user
- selects the action to perform (step 3), the assistant executes it, for
- example by firing an intent with a deep link to the (<em>destination</em>)
- restaurant app (step 4).
-</p>
-
-<h3 id="source_app">Source App</h3>
-
-<p>
- In most cases, your app does not need to do anything extra to integrate with
- the assistant if you already follow <a href=
+ To ensure that your app works with the assistant as a source of information for the user,
+ you need only follow <a href=
"{@docRoot}guide/topics/ui/accessibility/apps.html">accessibility best
practices</a>. This section describes how to provide additional information
- to help improve the assistant user experience, as well as scenarios, such as
- custom Views, that need special handling.
+ to help improve the assistant user experience as well as scenarios
+ that need special handling, such as custom Views.
</p>
-
-<h4 id="share_additional_information_with_the_assistant">Share Additional Information with the Assistant</h4>
+<h4 id="share_additional_information_with_the_assistant">Share additional information
+ with the assistant</h4>
<p>
In addition to the text and the screenshot, your app can share
- <em>additional</em> information with the assistant. For example, your music
- app can choose to pass current album information, so that the assistant can
+ other information with the assistant. For example, your music
+ app can choose to pass current album information so that the assistant can
suggest smarter actions tailored to the current activity.
</p>
@@ -122,13 +104,13 @@
To provide additional information to the assistant, your app provides
<em>global application context</em> by registering an app listener and
supplies activity-specific information with activity callbacks as shown in
- Figure 3.
+ Figure 3:
</p>
<div>
<img src="{@docRoot}images/training/assistant/image03.png">
<p class="img-caption" style="text-align:center;">
- Figure 3. Assist API lifecycle sequence diagram.
+ Figure 3. Assist API lifecycle sequence diagram
</p>
</div>
@@ -136,43 +118,42 @@
To provide global application context, the app creates an implementation of
{@link android.app.Application.OnProvideAssistDataListener} and registers it
using {@link
- android.app.Application#registerOnProvideAssistDataListener(android.app.Application.OnProvideAssistDataListener)}.
- In order to provide activity-specific contextual information, activity
- overrides {@link android.app.Activity#onProvideAssistData(android.os.Bundle)}
+ android.app.Application#registerOnProvideAssistDataListener(android.app.Application.OnProvideAssistDataListener) registerOnProvideAssistDataListener()}.
+ To provide activity-specific contextual information, the activity
+ overrides {@link android.app.Activity#onProvideAssistData(android.os.Bundle) onProvideAssistData()}
and {@link
- android.app.Activity#onProvideAssistContent(android.app.assist.AssistContent)}.
+ android.app.Activity#onProvideAssistContent(android.app.assist.AssistContent) onProvideAssistContent()}.
The two activity methods are called <em>after</em> the optional global
- callback (registered with {@link
- android.app.Application#registerOnProvideAssistDataListener(android.app.Application.OnProvideAssistDataListener)})
- is invoked. Since the callbacks execute on the main thread, they should
+ callback is invoked. Because the callbacks execute on the main thread, they should
complete <a href="{@docRoot}training/articles/perf-anr.html">promptly</a>.
The callbacks are invoked only when the activity is <a href=
"{@docRoot}reference/android/app/Activity.html#ActivityLifecycle">running</a>.
</p>
-<h5 id="providing_context">Providing Context</h5>
+<h5 id="providing_context">Providing context</h5>
<p>
- {@link android.app.Activity#onProvideAssistData(android.os.Bundle)} is called
- when the user is requesting the assistant to build a full {@link
+ When the user activates the assistant,
+ {@link android.app.Activity#onProvideAssistData(android.os.Bundle) onProvideAssistData()} is called to build a full
+ {@link
android.content.Intent#ACTION_ASSIST} Intent with all of the context of the
current application represented as an instance of the {@link
android.app.assist.AssistStructure}. You can override this method to place
- into the bundle anything you would like to appear in the
- <code>EXTRA_ASSIST_CONTEXT</code> part of the assist Intent.
+ anything you like into the bundle to appear in the
+ {@link android.content.Intent#EXTRA_ASSIST_CONTEXT} part of the assist intent.
</p>
-<h5 id="describing_content">Describing Content</h5>
+<h5 id="describing_content">Describing content</h5>
<p>
Your app can implement {@link
- android.app.Activity#onProvideAssistContent(android.app.assist.AssistContent)}
- to improve assistant user experience by providing references to content
+ android.app.Activity#onProvideAssistContent(android.app.assist.AssistContent) onProvideAssistContent()}
+ to improve the assistant user experience by providing content-related references
related to the current activity. You can describe the app content using the
- common vocabulary defined by <a href="https://schema.org">Schema.org</a>
+ common vocabulary defined by <a href="https://schema.org" class="external-link">Schema.org</a>
through a JSON-LD object. In the example below, a music app provides
- structured data to describe the music album the user is currently
- looking at.
+ structured data to describe the music album that the user is currently
+ viewing:
</p>
<pre class="prettyprint">
@@ -191,127 +172,158 @@
</pre>
<p>
- Custom implementations of {@link
- android.app.Activity#onProvideAssistContent(android.app.assist.AssistContent)}
- may also adjust the provided {@link
- android.app.assist.AssistContent#setIntent(android.content.Intent) content
- intent} to better reflect the top-level context of the activity, supply
- {@link android.app.assist.AssistContent#setWebUri(android.net.Uri) the URI}
- of the displayed content, and fill in its {@link
- android.app.assist.AssistContent#setClipData(android.content.ClipData)} with
- additional content of interest that the user is currently viewing.
+ You can also improve the user experience with custom implementations of
+ {@link
+ android.app.Activity#onProvideAssistContent(android.app.assist.AssistContent) onProvideAssistContent()},
+ which can provide the following benefits:
+</p>
+<ul>
+ <li><a href="{@docRoot}reference/android/app/assist/AssistContent.html#setIntent(android.content.Intent)">
+ Adjusts the provided content
+ intent</a> to
+ better reflect the top-level context of the activity.</li>
+ <li><a href="{@docRoot}reference/android/app/assist/AssistContent.html#setWebUri(android.net.Uri)">
+ Supplies the URI</a>
+ of the displayed content.</li>
+ <li>Fills in {@link
+ android.app.assist.AssistContent#setClipData(android.content.ClipData) setClipData()} with additional
+ content of interest that the user is currently viewing.</li>
+</ul>
+<p class="note">
+ <strong>Note: </strong>Apps that use a custom text selection implementation likely need
+ to implement {@link
+ android.app.Activity#onProvideAssistContent(android.app.assist.AssistContent) onProvideAssistContent()}
+ and call {@link android.app.assist.AssistContent#setClipData(android.content.ClipData) setClipData()}.
</p>
-<h4 id="default_implementation">Default Implementation</h4>
+<h4 id="default_implementation">Default implementation</h4>
<p>
- If neither {@link
- android.app.Activity#onProvideAssistData(android.os.Bundle)} nor {@link
- android.app.Activity#onProvideAssistContent(android.app.assist.AssistContent)}
- callbacks are implemented, the system will still proceed and pass the
- information collected automatically to the assistant unless the current
+ If neither the {@link
+ android.app.Activity#onProvideAssistData(android.os.Bundle) onProvideAssistData()} nor the {@link
+ android.app.Activity#onProvideAssistContent(android.app.assist.AssistContent) onProvideAssistContent()}
+ callback is implemented, the system still proceeds and passes the
+ automatically collected information to the assistant unless the current
window is flagged as <a href="#excluding_views">secure</a>.
As shown in Figure 3, the system uses the default implementations of {@link
- android.view.View#onProvideStructure(android.view.ViewStructure)} and {@link
- android.view.View#onProvideVirtualStructure(android.view.ViewStructure)} to
+ android.view.View#onProvideStructure(android.view.ViewStructure) onProvideStructure()} and {@link
+ android.view.View#onProvideVirtualStructure(android.view.ViewStructure) onProvideVirtualStructure()} to
collect text and view hierarchy information. If your view implements custom
- text drawing, you should override {@link
- android.view.View#onProvideStructure(android.view.ViewStructure)} to provide
+ text drawing, override {@link
+ android.view.View#onProvideStructure(android.view.ViewStructure) onProvideStructure()} to provide
the assistant with the text shown to the user by calling {@link
- android.view.ViewStructure#setText(java.lang.CharSequence)}.
+ android.view.ViewStructure#setText(java.lang.CharSequence) setText(CharSequence)}.
</p>
<p>
- <strong>In most cases, implementing accessibility support will enable the
- assistant to obtain the information it needs.</strong> This includes
- providing {@link android.R.attr#contentDescription
- android:contentDescription} attributes, populating {@link
- android.view.accessibility.AccessibilityNodeInfo} for custom views, making
- sure custom {@link android.view.ViewGroup ViewGroups} correctly {@link
- android.view.ViewGroup#getChildAt(int) expose} their children, and following
- the best practices described in <a href=
- "{@docRoot}guide/topics/ui/accessibility/apps.html">“Making Applications
- Accessible”</a>.
-</p>
+ <em>In most cases, implementing accessibility support enables the
+ assistant to obtain the information it needs.</em> To implement accessibility support,
+ observe the best practices described in <a href=
+ "{@docRoot}guide/topics/ui/accessibility/apps.html">Making Applications
+ Accessible</a>, including the following:</p>
+
+<ul>
+ <li>Provide {@link android.R.attr#contentDescription
+ android:contentDescription} attributes.</li>
+ <li>Populate {@link
+ android.view.accessibility.AccessibilityNodeInfo} for custom views.</li>
+ <li>Make
+ sure that custom {@link android.view.ViewGroup ViewGroup} objects correctly
+ <a href="{@docRoot}reference/android/view/ViewGroup.html#getChildAt(int)">expose</a>
+ their children.</li>
+</ul>
<h4 id="excluding_views">Excluding views from the assistant</h4>
<p>
- An activity can exclude the current view from the assistant. This is accomplished
+ To handle sensitive information, your app can exclude the current view from the assistant
by setting the {@link android.view.WindowManager.LayoutParams#FLAG_SECURE
- FLAG_SECURE} layout parameter of the WindowManager and must be done
- explicitly for every window created by the activity, including Dialogs. Your
- app can also use {@link android.view.SurfaceView#setSecure(boolean)
- SurfaceView.setSecure} to exclude a surface from the assistant. There is no
+ FLAG_SECURE} layout parameter of the {@link android.view.WindowManager}. You must set {@link
+ android.view.WindowManager.LayoutParams#FLAG_SECURE
+ FLAG_SECURE} explicitly for
+ every window created by the activity, including dialogs. Your app can also use
+ {@link android.view.SurfaceView#setSecure(boolean) setSecure()} to exclude
+ a surface from the assistant. There is no
global (app-level) mechanism to exclude all views from the assistant. Note
- that <code>FLAG_SECURE</code> does not cause the Assist API callbacks to stop
- firing. The activity which uses <code>FLAG_SECURE</code> can still explicitly
+ that {@link android.view.WindowManager.LayoutParams#FLAG_SECURE
+ FLAG_SECURE} does not cause the Assist API callbacks to stop
+ firing. The activity that uses {@link android.view.WindowManager.LayoutParams#FLAG_SECURE
+ FLAG_SECURE} can still explicitly
provide information to the assistant using the callbacks described earlier
this guide.
</p>
-<h4 id="voice_interactions">Voice Interactions</h4>
+<p class="note"><strong>Note: </strong>For enterprise accounts (Android for Work),
+ the administrator can disable
+ the collection of assistant data for the work profile by using the {@link
+ android.app.admin.DevicePolicyManager#setScreenCaptureDisabled(android.content.ComponentName, boolean)
+ setScreenCaptureDisabled()} method of the {@link android.app.admin.DevicePolicyManager} API.</p>
+
+<h4 id="voice_interactions">Voice interactions</h4>
<p>
- Assist API callbacks are also invoked upon {@link
- android.service.voice.AlwaysOnHotwordDetector keyphrase detection}. For more
- information see the <a href="https://developers.google.com/voice-actions/">voice
- actions</a> documentation.
+ Assist API callbacks are also invoked upon
+ <a href="{@docRoot}reference/android/service/voice/AlwaysOnHotwordDetector.html">keyphrase
+ detection</a>. For more information, see the
+ <a href="https://developers.google.com/voice-actions/" class="external-link">Voice
+ Actions</a> documentation.
</p>
<h4 id="z-order_considerations">Z-order considerations</h4>
<p>
The assistant uses a lightweight overlay window displayed on top of the
- current activity. The assistant can be summoned by the user at any time.
- Therefore, apps should not create permanent {@link
- android.Manifest.permission#SYSTEM_ALERT_WINDOW system alert}
- windows interfering with the overlay window shown in Figure 4.
+ current activity. Because the user can activate the assistant at any time,
+ don't create permanent <a
+ href="{@docRoot}reference/android/Manifest.permission.html#SYSTEM_ALERT_WINDOW">
+ system alert</a> windows that interfere with the overlay window, as shown in
+ Figure 4.
</p>
<div style="">
<img src="{@docRoot}images/training/assistant/image04.png">
<p class="img-caption" style="text-align:center;">
- Figure 4. Assist layer Z-order.
+ Figure 4. Assist layer Z-order
</p>
</div>
<p>
- If your app uses {@link
- android.Manifest.permission#SYSTEM_ALERT_WINDOW system alert} windows, it
- must promptly remove them as leaving them on the screen will degrade user
- experience and annoy the users.
+ If your app uses <a
+ href="{@docRoot}reference/android/Manifest.permission.html#SYSTEM_ALERT_WINDOW">
+ system alert</a> windows, remove them promptly because leaving them on the
+ screen degrades the user experience.
</p>
-<h3 id="destination_app">Destination App</h3>
+<h3 id="destination_app">Destination app</h3>
<p>
- The matching between the current user context and potential actions displayed
- in the overlay window (shown in step 3 in Figure 1) is specific to the
- assistant’s implementation. However, consider adding <a href=
- "{@docRoot}training/app-indexing/deep-linking.html">deep linking</a> support
- to your app. The assistant will typically take advantage of deep linking. For
- example, Google Now uses deep linking and <a href=
- "https://developers.google.com/app-indexing/">App Indexing</a> in order to
+ The assistant typically takes advantage of deep linking to find destination apps. To make your
+ app a potential destination app, consider adding <a href=
+ "{@docRoot}training/app-indexing/deep-linking.html">deep linking</a> support. The matching
+ between the current user context and deep links or other potential actions displayed in the
+ overlay window (shown in step 3 in Figure 1) is specific to the assistant’s implementation.
+ For
+ example, the Google App uses deep linking and <a href=
+ "https://developers.google.com/app-indexing/" class="external-link">Firebase App Indexing</a> in order to
drive traffic to destination apps.
</p>
-<h2 id="implementing_your_own_assistant">Implementing your own assistant </h2>
+<h2 id="implementing_your_own_assistant">Implementing Your Own Assistant </h2>
<p>
- Some developers may wish to implement their own assistant. As shown in Figure
- 2, the active assistant app can be selected by the Android user. The
+ You may wish to implement your own assistant. As shown in <a href="#assist-input-settings">Figure
+ 2</a>, the user can select the active assistant app. The
assistant app must provide an implementation of {@link
android.service.voice.VoiceInteractionSessionService} and {@link
android.service.voice.VoiceInteractionSession} as shown in <a href=
- "https://android.googlesource.com/platform/frameworks/base/+/android-5.0.1_r1/tests/VoiceInteraction?autodive=0%2F%2F%2F%2F%2F%2F">
- this</a> example and it requires the {@link
- android.Manifest.permission#BIND_VOICE_INTERACTION} permission. It can then
+ "https://android.googlesource.com/platform/frameworks/base/+/marshmallow-release/tests/VoiceInteraction/" class="external-link">
+ this <code>VoiceInteraction</code> example</a>. It also requires the {@link
+ android.Manifest.permission#BIND_VOICE_INTERACTION} permission. The assistant can then
receive the text and view hierarchy represented as an instance of the {@link
android.app.assist.AssistStructure} in {@link
android.service.voice.VoiceInteractionSession#onHandleAssist(android.os.Bundle,
android.app.assist.AssistStructure,android.app.assist.AssistContent) onHandleAssist()}.
- The assistant receives the screenshot through {@link
+ It receives the screenshot through {@link
android.service.voice.VoiceInteractionSession#onHandleScreenshot(android.graphics.Bitmap)
onHandleScreenshot()}.
</p>
diff --git a/docs/html/training/articles/direct-boot.jd b/docs/html/training/articles/direct-boot.jd
new file mode 100644
index 0000000..ea2686e
--- /dev/null
+++ b/docs/html/training/articles/direct-boot.jd
@@ -0,0 +1,225 @@
+page.title=Supporting Direct Boot
+page.keywords=direct boot
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>In this document</h2>
+ <ol>
+ <li><a href="#run">Requesting Access to Run During Direct Boot</a></li>
+ <li><a href="#access">Accessing Device Encrypted Storage</a></li>
+ <li><a href="#notification">Getting Notified of User Unlock</a></li>
+ <li><a href="#migrating">Migrating Existing Data</a></li>
+ <li><a href="#testing">Testing Your Encryption Aware App</a></li>
+ <li><a href="#dpm">Checking Device Policy Encryption Status</a></li>
+ </ol>
+</div>
+</div>
+
+<p>Android 7.0 runs in a secure, <i>Direct Boot</i> mode
+when the device has been powered on but the user has not unlocked the
+device. To support this, the system provides two storage locations for data:</p>
+
+<ul>
+<li><i>Credential encrypted storage</i>, which is the default storage location
+and only available after the user has unlocked the device.</li>
+<li><i>Device encrypted storage</i>, which is a storage location available both
+during Direct Boot mode and after the user has unlocked the device.</li>
+</ul>
+
+<p>By default, apps do not run during Direct Boot mode.
+If your app needs to take action during Direct Boot mode, you can register
+app components that should be run during this mode. Some common use cases
+for apps needing to run during Direct Boot mode include:</p>
+
+<ul>
+<li>Apps that have scheduled notifications, such as alarm clock
+apps.</li>
+<li>Apps that provide important user notifications, like SMS apps.</li>
+<li>Apps that provide accessibility services, like Talkback.</li>
+</ul>
+
+<p>If your app needs to access data while running in Direct Boot mode, use
+device encrypted storage. Device encrypted storage contains data
+encrypted with a key that is only available after a device has performed a
+successful verified boot.</p>
+
+<p>For data that should be encrypted with a key associated with user
+credentials, such as a PIN or password, use credential encrypted storage.
+Credential encrypted storage is only available after the user has successfully
+unlocked the device, up until when the user restarts the device again. If the
+user enables the lock screen after unlocking the device, this doesn't lock
+credential encrypted storage.</p>
+
+<h2 id="run">Requesting Access to Run During Direct Boot</h2>
+
+<p>Apps must register their components with the system before they
+can run during Direct Boot mode or access device encrypted
+storage. Apps register with the system by marking components as
+<i>encryption aware</i>. To mark your component as encryption aware, set the
+<code>android:directBootAware</code> attribute to true in your manifest.<p>
+
+<p>Encryption aware components can register to receive a
+{@link android.content.Intent#ACTION_LOCKED_BOOT_COMPLETED
+ACTION_LOCKED_BOOT_COMPLETED} broadcast message from the
+system when the device has been restarted. At this point device encrypted
+storage is available, and your component can execute tasks that need to be
+run during Direct Boot mode, such as triggering a scheduled alarm.</p>
+
+<p>The following code snippet is an example of how to register a
+{@link android.content.BroadcastReceiver} as encryption aware, and add an
+intent filter for {@link android.content.Intent#ACTION_LOCKED_BOOT_COMPLETED
+ACTION_LOCKED_BOOT_COMPLETED}, in the app manifest:</p>
+
+<pre>
+<receiver
+ android:directBootAware="true" >
+ ...
+ <intent-filter>
+ <action android:name="android.intent.action.ACTION_LOCKED_BOOT_COMPLETED" />
+ </intent-filter>
+</receiver>
+</pre>
+
+<p>Once the user has unlocked the device, all components can access both the
+device encrypted storage as well as credential encrypted storage.</p>
+
+<h2 id="access">Accessing Device Encrypted Storage</h2>
+
+<p>To access device encrypted storage, create a second
+{@link android.content.Context} instance by calling
+{@link android.content.Context#createDeviceProtectedStorageContext
+Context.createDeviceProtectedStorageContext()}. All storage API
+calls made using this context access the device encrypted storage. The
+following example accesses the device encrypted storage and opens an existing
+app data file:</p>
+
+<pre>
+Context directBootContext = appContext.createDeviceProtectedStorageContext();
+// Access appDataFilename that lives in device encrypted storage
+FileInputStream inStream = directBootContext.openFileInput(appDataFilename);
+// Use inStream to read content...
+</pre>
+
+<p>Use device encrypted storage only for
+information that must be accessible during Direct Boot mode.
+Don't use device encrypted storage as a general-purpose encrypted store.
+For private user information, or encrypted data that isn't needed during
+Direct Boot mode, use credential encrypted storage.</p>
+
+<h2 id="notification">Getting Notified of User Unlock</h2>
+
+<p>When the user unlocks the device after restart, your app can switch to
+accessing credential encrypted storage and use regular system services that
+depend on user credentials.</p>
+
+<p>To get notified when the user unlocks the device after a reboot,
+register a {@link android.content.BroadcastReceiver} from a running component
+to listen for unlock notification messages. When the user unlocks the device
+after boot:
+</p>
+<ul>
+<li>If your app has foreground processes that need immediate notification,
+listen for the {@link android.content.Intent#ACTION_USER_UNLOCKED
+ACTION_USER_UNLOCKED} message.</li>
+<li>If your app only uses background processes that can act on a delayed
+notification, listen for the
+{@link android.content.Intent#ACTION_BOOT_COMPLETED ACTION_BOOT_COMPLETED}
+message.</li>
+</ul>
+
+<p>If the user has unlocked the device, you can find out by calling
+{@link android.os.UserManager#isUserUnlocked UserManager.isUserUnlocked()}.
+</p>
+
+<h2 id="migrating">Migrating Existing Data</h2>
+
+<p>If a user updates their device to use Direct Boot mode, you might have
+existing data that needs to get migrated to device encrypted storage. Use
+{@link android.content.Context#moveSharedPreferencesFrom
+Context.moveSharedPreferencesFrom()} and
+{@link android.content.Context#moveDatabaseFrom
+Context.moveDatabaseFrom()} to migrate preference and database
+data between credential encrypted storage and device encrypted storage.</p>
+
+<p>Use your best judgment when deciding what data to migrate from credential
+encrypted storage to device encrypted storage. You should not migrate
+private user information, such as passwords or authorization tokens, to
+device encrypted storage. In some scenarios, you might need to manage
+separate sets of data in the two encrypted stores.</p>
+
+<h2 id="testing">Testing Your Encryption Aware App</h2>
+
+<p>Test your encryption aware app with Direct Boot mode enabled. There are
+two ways to enable Direct Boot.</p>
+
+<p class="caution"><strong>Caution:</strong> Enabling Direct Boot
+wipes all user data on the device.</p>
+
+<p>On supported devices with Android 7.0 installed, enable
+Direct Boot by doing one of the following:</p>
+
+<ul>
+<li>On the device, enable <b>Developer options</b> if you haven't already by
+going to <b>Settings > About phone</b>, and tapping <b>Build number</b>
+seven times. Once the developer options screen is available, go to
+<b>Settings > Developer options</b> and select
+<b>Convert to file encryption</b>.</li>
+<li>Use the following adb shell commands to enable Direct Boot mode:
+<pre class="no-pretty-print">
+$ adb reboot-bootloader
+$ fastboot --wipe-and-use-fbe
+</pre>
+</li>
+</ul>
+
+<p>An emulated Direct Boot mode is also available, in case you need to switch
+modes on your test devices. Emulated mode should only be used during
+development and may cause data loss. To enable emulated Direct Boot mode,
+set a lock pattern on the device, choose "No thanks" if prompted for a
+secure start-up screen when setting a lock pattern, and then use the
+following adb shell command:</p>
+
+<pre class="no-pretty-print">
+$ adb shell sm set-emulate-fbe true
+</pre>
+
+<p>To turn off emulated Direct Boot mode, use the following command:</p>
+
+<pre class="no-pretty-print">
+$ adb shell sm set-emulate-fbe false
+</pre>
+
+<p>Using these commands causes the device to reboot.</p>
+
+<h2 id="dpm">Checking Device Policy Encryption Status</h2>
+
+<p>Device administration apps can use
+{@link android.app.admin.DevicePolicyManager#getStorageEncryptionStatus
+DevicePolicyManager.getStorageEncryptionStatus()} to check the current
+encryption status of the device. If your app is targeting an API level
+lower than 24.0 (Android 7.0),
+{@link android.app.admin.DevicePolicyManager#getStorageEncryptionStatus
+getStorageEncryptionStatus()} will return
+{@link android.app.admin.DevicePolicyManager#ENCRYPTION_STATUS_ACTIVE
+ENCRYPTION_STATUS_ACTIVE} if the device is either using full-disk encryption,
+or file-based encryption with Direct Boot. In both of these cases, data is
+always stored encrypted at rest. If your app is targeting an API level of
+24.0 or higher,
+{@link android.app.admin.DevicePolicyManager#getStorageEncryptionStatus
+getStorageEncryptionStatus()} will return
+{@link android.app.admin.DevicePolicyManager#ENCRYPTION_STATUS_ACTIVE
+ENCRYPTION_STATUS_ACTIVE} if the device is using full-disk encryption. It will
+return
+{@link android.app.admin.DevicePolicyManager#ENCRYPTION_STATUS_ACTIVE_PER_USER
+ENCRYPTION_STATUS_ACTIVE_PER_USER} if the device is using file-based encryption
+with Direct Boot.</p>
+
+<p>If you build a device administration app
+that targets Android 7.0, make sure to check for both
+{@link android.app.admin.DevicePolicyManager#ENCRYPTION_STATUS_ACTIVE
+ENCRYPTION_STATUS_ACTIVE} and
+{@link android.app.admin.DevicePolicyManager#ENCRYPTION_STATUS_ACTIVE_PER_USER
+ENCRYPTION_STATUS_ACTIVE_PER_USER} to determine if the device is
+encrypted.</p>
diff --git a/docs/html/training/articles/scoped-directory-access.jd b/docs/html/training/articles/scoped-directory-access.jd
new file mode 100644
index 0000000..1e0bf39
--- /dev/null
+++ b/docs/html/training/articles/scoped-directory-access.jd
@@ -0,0 +1,162 @@
+page.title=Using Scoped Directory Access
+page.keywords=scoped directory access
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>In this document</h2>
+ <ol>
+ <li><a href="#accessing">Accessing an External Storage Directory</a></li>
+ <li><a href="#removable">Accessing a Directory on Removable Media</a></li>
+ <li><a href="#best">Best Practices</a></li>
+ </ol>
+</div>
+</div>
+
+<p>Apps such as photo apps usually just need access to specific directories in
+external storage, such as the <code>Pictures</code> directory. Existing
+approaches to accessing external storage aren't designed to easily provide
+targeted directory access for these types of apps. For example:</p>
+
+<ul>
+<li>Requesting {@link android.Manifest.permission#READ_EXTERNAL_STORAGE}
+or {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} in your manifest
+allows access to all public directories on external storage, which might be
+more access than what your app needs.</li>
+<li>Using the
+<a href="{@docRoot}guide/topics/providers/document-provider.html">Storage
+Access Framework</a> usually makes your user pick directories
+via a system UI, which is unnecessary if your app always accesses the same
+external directory.</li>
+</ul>
+
+<p>Android 7.0 provides a simplified API to access common external storage
+directories.</p>
+
+<h2 id="accessing">Accessing an External Storage Directory</h2>
+
+<p>Use the {@link android.os.storage.StorageManager} class to get the
+appropriate {@link android.os.storage.StorageVolume} instance. Then, create
+an intent by calling the
+{@link android.os.storage.StorageVolume#createAccessIntent
+StorageVolume.createAccessIntent()} method of that instance.
+Use this intent to access external storage directories. To get a list of
+all available volumes, including removable media
+volumes, use {@link android.os.storage.StorageManager#getStorageVolumes
+StorageManager.getStorageVolumes()}.</p>
+
+<p>If you have information about a specific file, use
+{@link android.os.storage.StorageManager#getStorageVolume
+StorageManager.getStorageVolume(File)} to get the
+{@link android.os.storage.StorageVolume} that contains the file. Call
+{@link android.os.storage.StorageVolume#createAccessIntent
+createAccessIntent()} on this
+{@link android.os.storage.StorageVolume} to access
+the external storage directory for the file.</p>
+
+<p>
+On secondary volumes, such as external SD cards, pass in null when calling
+{@link android.os.storage.StorageVolume#createAccessIntent
+createAccessIntent()} to request access to the entire
+volume, instead of a specific directory.
+{@link android.os.storage.StorageVolume#createAccessIntent
+createAccessIntent()} returns null if you pass in
+null to the primary volume, or if you pass in an invalid directory name.
+</p>
+
+<p>The following code snippet is an example of how to open the
+<code>Pictures</code> directory in the primary shared storage:</p>
+
+<pre>
+StorageManager sm = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
+StorageVolume volume = sm.getPrimaryStorageVolume();
+Intent intent = volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+</pre>
+
+<p>The system attempts to grant access to the external directory, and if
+necessary confirms access with the user using a simplified UI:</p>
+
+<img src="{@docRoot}images/android-7.0/scoped-directory-access-framed.png"
+srcset="{@docRoot}images/android-7.0/scoped-directory-access-framed.png 1x,
+{@docRoot}images/android-7.0/scoped-directory-access-framed_2x.png 2x" />
+<p class="img-caption"><strong>Figure 1.</strong> An application requesting
+access to the Pictures directory.</p>
+
+<p>If the user grants access, the system calls your
+{@link android.app.Activity#onActivityResult onActivityResult()} override
+with a result code of {@link android.app.Activity#RESULT_OK
+RESULT_OK}, and intent data that contains the URI. Use
+the provided URI to access directory information, similar to using URIs
+returned by the
+<a href="{@docRoot}guide/topics/providers/document-provider.html">Storage
+Access Framework</a>.</p>
+
+<p>If the user doesn't grant access, the system calls your
+{@link android.app.Activity#onActivityResult onActivityResult()} override
+with a result code of {@link android.app.Activity#RESULT_CANCELED
+RESULT_CANCELED}, and null intent data.</p>
+
+<p>Getting access to a specific external directory
+also gains access to subdirectories within that directory.</p>
+
+<h2 id="removable">Accessing a Directory on Removable Media</h2>
+
+<p>To use Scoped Directory Access to access directories on removable media,
+first add a {@link android.content.BroadcastReceiver} that listens for the
+{@link android.os.Environment#MEDIA_MOUNTED} notification, for example:</p>
+
+<pre>
+<receiver
+ android:name=".MediaMountedReceiver"
+ android:enabled="true"
+ android:exported="true" >
+ <intent-filter>
+ <action android:name="android.intent.action.MEDIA_MOUNTED" />
+ <data android:scheme="file" />
+ </intent-filter>
+</receiver>
+</pre>
+
+<p>When the user mounts removable media, like an SD card, the system sends a
+{@link android.os.Environment#MEDIA_MOUNTED} notification. This notification
+provides a {@link android.os.storage.StorageVolume} object in the intent data
+that you can use to access directories on the removable media. The following
+example accesses the <code>Pictures</code> directory on removable media:</p>
+
+<pre>
+// BroadcastReceiver has already cached the MEDIA_MOUNTED
+// notification Intent in mediaMountedIntent
+StorageVolume volume = (StorageVolume)
+ mediaMountedIntent.getParcelableExtra(StorageVolume.EXTRA_STORAGE_VOLUME);
+volume.createAccessIntent(Environment.DIRECTORY_PICTURES);
+startActivityForResult(intent, request_code);
+</pre>
+
+<h2 id="best">Best Practices</h2>
+
+<p>Where possible, persist the external directory access URI so you don't have
+to repeatedly ask the user for access. Once the user has granted access, call
+{@link android.content.Context#getContentResolver getContentResolver()} and
+with the returned {@link android.content.ContentResolver} call
+{@link android.content.ContentResolver#takePersistableUriPermission
+takePersistableUriPermission()} with the directory access URI. The system will
+persist the URI and subsequent access requests will return
+{@link android.app.Activity#RESULT_OK RESULT_OK} and not show confirmation
+UI to the user.</p>
+
+<p>If the user denies access to an external directory, do not immediately
+request access again. Repeatedly insisting on access results in a poor user
+experience. If a request is denied by the user, and the app requests access
+again, the UI displays a <b>Don't ask again</b> checkbox:</p>
+
+<img src="{@docRoot}images/android-7.0/scoped-directory-access-dont-ask.png"
+srcset="{@docRoot}images/android-7.0/scoped-directory-access-dont-ask.png 1x,
+{@docRoot}images/android-7.0/scoped-directory-access-dont-ask_2x.png 2x" />
+<p class="img-caption"><strong>Figure 1.</strong> An application making a
+second request for access to removable media.</p>
+
+<p>If the user selects <b>Don't ask again</b> and denies the request, all
+future requests for the given directory from your app will be automatically
+denied, and no request UI will be presented to the user.</p>
\ No newline at end of file
diff --git a/docs/html/training/articles/security-config.jd b/docs/html/training/articles/security-config.jd
new file mode 100644
index 0000000..90a93fa
--- /dev/null
+++ b/docs/html/training/articles/security-config.jd
@@ -0,0 +1,752 @@
+page.title=Network Security Configuration
+page.keywords=security,network,config
+page.metaDescription=Feature that allows app developers to customize network security settings in a safe configuration file.
+page.image=images/cards/card-nyc_2x.jpg
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>In this document</h2>
+<ol>
+ <li><a href="#manifest">Adding a Security Configuration File</a></li>
+ <li><a href="#CustomTrust">Customizing Trusted CAs</a>
+ <ol>
+ <li><a href="#ConfigCustom">Configuring a Trusted Custom CA</a></li>
+ <li><a href="#LimitingCas">Limiting the Set of Trusted CAs</a></li>
+ <li><a href="#TrustingAdditionalCas">Trusting Additional CAs</a></li>
+ </ol>
+ </li>
+ <li><a href="#TrustingDebugCa">Debugging-only CAs</a></li>
+ <li><a href="#CleartextTrafficPermitted">Opting Out of Cleartext Traffic</a></li>
+ <li><a href="#CertificatePinning">Pinning Certificates</a></li>
+ <li><a href="#ConfigInheritance">Configuration Inheritance Behavior</a></li>
+ <li><a href="#FileFormat">Configuration File Format</a></li>
+</ol>
+</div>
+</div>
+
+
+<p>
+ The Network Security Configuration feature lets apps customize their network
+ security settings in a safe, declarative configuration file without modifying
+ app code. These settings can be configured for specific domains and for a
+ specific app. The key capabilities of this feature are as follows:
+</p>
+
+<ul>
+ <li>
+ <b>Custom trust anchors:</b> Customize which Certificate Authorities (CA)
+ are trusted for an app's secure connections. For
+ example, trusting particular self-signed certificates or restricting the
+ set of public CAs that the app trusts.
+ </li>
+
+ <li>
+ <b>Debug-only overrides:</b> Safely debug secure connections in an app
+ without added risk to the installed base.
+ </li>
+
+ <li>
+ <b>Cleartext traffic opt-out:</b> Protect apps from
+ accidental usage of cleartext traffic.
+ </li>
+
+ <li>
+ <b>Certificate pinning:</b> Restrict an app's secure connection to
+ particular certificates.
+ </li>
+</ul>
+
+
+<h2 id="manifest">Adding a Security Configuration File</h2>
+
+<p>
+ The Network Security Configuration feature uses an XML file where you specify
+ the settings for your app. You must include an entry in the manifest of your
+ app to point to this file. The following code excerpt from a manifest
+ demonstrates how to create this entry:
+</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<manifest ... >
+ <application android:networkSecurityConfig="@xml/network_security_config"
+ ... >
+ ...
+ </application>
+</manifest>
+</pre>
+
+<h2 id="CustomTrust">Customizing Trusted CAs</h2>
+
+<p>
+ An app may want to trust a custom set of CAs instead of the platform
+ default. The most common reasons of this are:
+</p>
+
+<ul>
+ <li>Connecting to a host with a custom certificate authority, such as a
+ CA that is self-signed or is issued internally within a company.
+ </li>
+
+ <li>Limiting the set of CAs to only the CAs you trust instead of every
+ pre-installed CA.
+ </li>
+
+ <li>Trusting additional CAs not included in the system.
+ </li>
+</ul>
+
+<p>
+ By default, secure connections (using protocols like TLS and HTTPS) from all
+ apps trust the pre-installed system CAs, and apps targeting Android 6.0 (API
+ level 23) and lower also trust the user-added CA store by default. An app can
+ customize its own connections using {@code base-config} (for app-wide
+ customization) or {@code domain-config} (for per-domain customization).
+</p>
+
+
+<h3 id="ConfigCustom">Configuring a Custom CA</h3>
+
+<p>
+ Assume you want to connect to your host which uses a self-signed SSL
+ certificate or to a host whose SSL certificate is issued by a non-public CA
+ which you trust, such as your company's internal CA.
+</p>
+
+<p>
+ <code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/my_ca"/>
+ </trust-anchors>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+<p>
+ Add the self-signed or non-public CA certificate, in PEM or DER format, to
+ {@code res/raw/my_ca}.
+</p>
+
+
+<h3 id="LimitingCas">Limiting the Set of Trusted CAs</h3>
+
+<p>
+ An app that does not want to trust all CAs trusted by system can
+ instead specify its own reduced set of CAs to trust. This protects the
+ app from fradulent certificates issued by any of the other CAs.
+</p>
+
+<p>
+ The configuration to limit the set of trusted CAs is similar to <a href=
+ "#ConfigCustom">trusting a custom CA</a> for a specific domain except
+ that multiple CAs are provided in the resource.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">secure.example.com</domain>
+ <domain includeSubdomains="true">cdn.example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/trusted_roots"/>
+ </trust-anchors>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+<p>
+ Add the trusted CAs, in PEM or DER format, to {@code res/raw/trusted_roots}.
+ Note that if using PEM format the file must contain <em>only</em> PEM data
+ and no extra text. You can also provide multiple
+ <a href="#certificates"><code><certificates></code></a>
+elements instead of one.
+</p>
+
+
+<h3 id="TrustingAdditionalCas">
+ Trusting Additional CAs
+</h3>
+
+<p>
+ An app may want to trust additional CAs not trusted by the system,
+ this could be due to the system not yet including the CA or a CA that does
+ not meet the requirements for inclusion into the Android system. An
+ app can do this by specifying multiple certificate sources for a
+ configuration.
+</p>
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <base-config>
+ <trust-anchors>
+ <certificates src="@raw/extracas"/>
+ <certificates src="system"/>
+ </trust-anchors>
+ </base-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="TrustingDebugCa">Configuring CAs for Debugging</h2>
+
+<p>
+ When debugging an app that connects over HTTPS, you may want to
+ connect to a local development server, which does not have the SSL
+ certificate for your production server. In order to support this without any
+ modification to your app's code, you can specify debug-only CAs, which
+ are trusted <i>only</i> when <a href=
+ "{@docRoot}guide/topics/manifest/application-element.html#debug">
+android:debuggable</a>
+ is {@code true}, by using {@code debug-overrides}. Normally, IDEs and build
+ tools set this flag automatically for non-release builds.
+</p>
+
+<p>
+ This is safer than the usual conditional code because, as a security
+ precaution, app stores do not accept apps which are marked
+ debuggable.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <debug-overrides>
+ <trust-anchors>
+ <certificates src="@raw/debug_cas"/>
+ </trust-anchors>
+ </debug-overrides>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="CleartextTrafficPermitted">Opting Out of Cleartext Traffic</h2>
+
+<p>
+ Applications intending to connect to destinations using only secure
+ connections can opt-out of supporting cleartext (using the unencrypted HTTP
+ protocol instead of HTTPS) to those destinations. This option helps prevent
+ accidental regressions in apps due to changes in URLs provided by external
+ sources such as backend servers.
+ See {@link android.security.NetworkSecurityPolicy#isCleartextTrafficPermitted
+ NetworkSecurityPolicy.isCleartextTrafficPermitted()} for more details.
+</p>
+
+<p>
+ For example, an app may want to ensure that all connections to {@code
+ secure.example.com} are always done over HTTPS to protect sensitive traffic
+ from hostile networks.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config cleartextTrafficPermitted="false">
+ <domain includeSubdomains="true">secure.example.com</domain>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="CertificatePinning">Pinning Certificates</h2>
+
+<p>
+ Normally, an app trusts all pre-installed CAs. If any of these CAs were to
+ issue a fradulent certificate, the app would be at risk from a
+ man-in-the-middle attack. Some apps choose to limit the set of certificates
+ they accept by either limiting the set of CAs they trust or by certificate
+ pinning.
+</p>
+
+<p>
+ Certificate pinning is done by providing a set of certificates by hash of the
+ public key (<code>SubjectPublicKeyInfo</code> of the X.509 certificate). A
+ certificate chain is then valid only if the certificate chain contains at
+ least one of the pinned public keys.
+</p>
+
+<p>
+ Note that, when using certificate pinning, you should always include a backup
+ key so that if you are forced to switch to new keys or change CAs (when
+ pinning to a CA certificate or an intermediate of that CA), your
+ app's connectivity is unaffected. Otherwise, you must push out
+ an update to the app to restore connectivity.
+</p>
+
+<p>
+ Additionally, it is possible to set an expiration time for pins after which
+ pinning is not performed. This helps prevent connectivity issues in
+ apps which have not been updated. However, setting an expiration time
+ on pins may enable pinning bypass.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <pin-set expiration="2018-01-01">
+ <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin>
+ <!-- backup pin -->
+ <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin>
+ </pin-set>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="ConfigInheritance">Configuration Inheritance Behavior</h2>
+
+<p>
+ Values not set in a specific configuration are inherited. This behavior allows
+ more complex configurations while keeping the configuration file readable.
+</p>
+
+<p>
+ If a value is not set in a specific entry, then the value from the more
+ general entry is used. For example, values not set in a {@code domain-config}
+ are taken from the parent {@code domain-config}, if nested, or from the {@code
+ base-config} if not. Values not set in the {@code base-config} use the
+ platform default values.
+</p>
+
+<p>
+ For example, consider where all connections to subdomains of {@code
+ example.com} must use a custom set of CAs. Additonally, cleartext traffic to
+ these domains is permitted <em>except</em> when connecting to {@code
+ secure.example.com}. By nesting the configuration for {@code
+ secure.example.com} inside the configuration for {@code example.com}, the
+ {@code trust-anchors} does not need to be duplicated.
+</p>
+
+<p>
+<code>res/xml/network_security_config.xml</code>:
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain includeSubdomains="true">example.com</domain>
+ <trust-anchors>
+ <certificates src="@raw/my_ca"/>
+ </trust-anchors>
+ <domain-config cleartextTrafficPermitted="false">
+ <domain includeSubdomains="true">secure.example.com</domain>
+ </domain-config>
+ </domain-config>
+</network-security-config>
+</pre>
+</p>
+
+
+<h2 id="FileFormat">Configuration File Format</h2>
+
+<p>
+ The Network Security Configuration feature uses an XML file format.
+ The overall structure of the file is shown in the following code sample:
+</p>
+
+<pre>
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <base-config>
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ </base-config>
+
+ <domain-config>
+ <domain>android.com</domain>
+ ...
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ <pin-set>
+ <pin digest="...">...</pin>
+ ...
+ </pin-set>
+ </domain-config>
+ ...
+ <debug-overrides>
+ <trust-anchors>
+ <certificates src="..."/>
+ ...
+ </trust-anchors>
+ </debug-overrides>
+</network-security-config>
+</pre>
+
+<p>
+ The following sections describe the syntax and other details of the file
+ format.
+</p>
+
+<h3 id="network-security-config">
+ <network-security-config>
+</h3>
+
+<dl class="xml">
+ <dt>
+ can contain:
+ </dt>
+
+ <dd>
+ 0 or 1 of <code><a href="#base-config"><base-config></a></code><br>
+ Any number of <code><a href=
+ "#domain-config"><domain-config></a></code><br>
+ 0 or 1 of <code><a href="#debug-overrides"><debug-overrides></a></code>
+ </dd>
+</dl>
+
+<h3 id="base-config">
+ <base-config>
+</h3>
+
+<dl class="xml">
+ <dt>
+ syntax:
+ </dt>
+</dl>
+
+<pre class="stx">
+<base-config <a href=
+"#CleartextTrafficPermitted">cleartextTrafficPermitted</a>=["true" | "false"]>
+ ...
+</base-config>
+</pre>
+<dl class="xml">
+ <dt>
+ can contain:
+ </dt>
+
+ <dd>
+ <code><a href="#trust-anchors"><trust-anchors></a></code>
+ </dd>
+
+ <dt>
+ description:
+ </dt>
+
+ <dd>
+ The default configuration used by all connections whose destination is not
+ covered by a <a href="#domain-config"><code>domain-config</code></a>.
+
+<p>
+ Any values that are not set use the platform default values. The default
+ configuration for apps targeting Android 7.0 (API level 24) and higher is as
+ follows:
+</p>
+
+<pre>
+<base-config cleartextTrafficPermitted="true">
+ <trust-anchors>
+ <certificates src="system" />
+ </trust-anchors>
+</base-config>
+</pre>
+The default configuration for apps targeting Android 6.0 (API level 23) and
+lower is as follows:
+<pre>
+<base-config cleartextTrafficPermitted="true">
+ <trust-anchors>
+ <certificates src="system" />
+ <certificates src="user" />
+ </trust-anchors>
+</base-config>
+</pre>
+
+ </dd>
+</dl>
+
+<h3 id="domain-config"><domain-config></h3>
+<dl class="xml">
+<dt>syntax:</dt>
+<dd>
+<pre class="stx"><domain-config <a href="#CleartextTrafficPermitted">cleartextTrafficPermitted</a>=["true" | "false"]>
+ ...
+</domain-config></pre>
+</dd>
+
+<dt>Can Contain:</dt>
+
+<dd>
+1 or more <code><a href="#domain"><domain></a></code>
+<br/>0 or 1 <code><a href="#trust-anchors"><trust-anchors></a></code>
+<br/>0 or 1 <code><a href="#pin-set"><pin-set></code></a>
+<br/>Any number of nested <code><domain-config></code></dd>
+
+<dt>Description</dt>
+<dd>Configuration used for connections to specific destinations, as defined by
+the {@code domain} elements.
+
+<p>Note that if multiple {@code domain-config} elements cover a destination, the
+configuration with the most specific (longest) matching domain rule is
+used.</p></dd>
+</dl>
+
+<h3 id="domain"><domain></h3>
+
+<dl class="xml">
+ <dt>
+ syntax:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<domain includeSubdomains=["true" | "false"]>example.com</domain>
+</pre>
+ </dd>
+
+ <dt>
+ Attributes:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code includeSubdomains}
+ </dt>
+
+ <dd>
+ If {@code "true"}, then this domain rule matches the domain and all
+ subdomains, including subdomains of subdomains. Otherwise, the rule only
+ applies to exact matches.
+ </dd>
+ </dl>
+ </dd>
+
+ <dt>
+ Description:
+ </dt>
+</dl>
+
+<h3 id="debug-overrides"><debug-overrides></h3>
+
+<dl class="xml">
+ <dt>
+ syntax:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<debug-overrides>
+ ...
+</debug-overrides>
+</pre>
+ </dd>
+
+ <dt>
+ Can Contain:
+ </dt>
+
+ <dd>
+ 0 or 1 <code><a href="#trust-anchors"><trust-anchors></a></code>
+ </dd>
+
+ <dt>
+ Description:
+ </dt>
+
+ <dd>
+ Overrides to be applied when <a href=
+ "{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
+ is {@code "true"}, which is normally the case for non-release builds
+ generated by IDEs and build tools. Trust anchors specified in {@code
+ debug-overrides} are added to all other configurations, and certificate
+ pinning is not performed when the server's certificate chain uses one of
+ these debug-only trust anchors. If <a href=
+ "{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
+ is {@code "false"}, then this section is completely ignored.
+ </dd>
+</dl>
+
+<h3 id="trust-anchors"><trust-anchors></h3>
+<dl class="xml">
+ <dt>
+ syntax:
+ </dt>
+
+ <dd>
+ <pre class="stx">
+<trust-anchors>
+...
+</trust-anchors>
+</pre>
+ </dd>
+
+ <dt>
+ Can Contain:
+ </dt>
+
+ <dd>
+ Any number of <code><a href="#certificates"><certificates></a></code>
+ </dd>
+
+ <dt>
+ Description:
+ </dt>
+
+ <dd>
+ Set of trust anchors for secure connections.
+ </dd>
+</dl>
+
+
+<h3 id="certificates"><certificates></h3>
+<dl class="xml">
+<dt>syntax:</dt>
+<dd><pre class="stx"><certificates src=["system" | "user" | "<i>raw resource</i>"]
+ overridePins=["true" | "false"] />
+</pre></dd>
+<dt>description:</dt>
+<dd>Set of X.509 certificates for {@code trust-anchors} elements.</dd>
+
+<dt>attributes:</dt>
+<dd><dl class="attr">
+<dt>{@code src}</dt>
+<dd>
+The source of CA certificates. Each certificate can be one of the following:
+<ul>
+ <li>a raw resource ID pointing to a file containing X.509 certificates.
+ Certificates must be encoded in DER or PEM format. In the case of PEM
+ certificates, the file <em>must not</em> contain extra non-PEM data such as
+ comments.
+ </li>
+
+ <li>{@code "system"} for the pre-installed system CA certificates
+ </li>
+
+ <li>{@code "user"} for user-added CA certificates
+ </li>
+</ul>
+</dd>
+
+<dt>{@code overridePins}</dt>
+<dd>
+ <p>
+ Specifies if the CAs from this source bypass certificate pinning. If {@code
+ "true"}, then pinning is not performed on certificate chains which are
+ signed by one of the CAs from this source. This can be useful for debugging
+ CAs or for testing man-in-the-middle attacks on your app's secure traffic.
+ </p>
+
+ <p>
+ Default is {@code "false"} unless specified in a {@code debug-overrides}
+ element, in which case the default is {@code "true"}.
+ </p>
+</dd>
+</dl>
+</dd>
+
+
+<h3 id="pin-set"><pin-set></h3>
+
+<dl class="xml">
+ <dt>
+ syntax:
+ </dt>
+
+ <dd>
+<pre class="stx">
+<pin-set expiration="date">
+...
+</pin-set>
+</pre>
+ </dd>
+
+ <dt>
+ Can Contain:
+ </dt>
+
+ <dd>
+ Any number of <code><a href="#pin"><pin></a></code>
+ </dd>
+
+ <dt>
+ Description:
+ </dt>
+
+ <dd>
+ A set of public key pins. For a secure connection to be trusted, one of the
+ public keys in the chain of trust must be in the set of pins. See
+ <code><a href="#pin"><pin></a></code> for the format of pins.
+ </dd>
+
+ <dt>
+ Attributes:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code expiration}
+ </dt>
+
+ <dd>
+ The date, in {@code yyyy-MM-dd} format, on which the pins expire, thus
+ disabling pinning. If the attribute is not set, then the pins do not
+ expire.
+ <p>
+ Expiration helps prevent connectivity issues in apps which do not get
+ updates to their pin set, such as when the user disables app updates.
+ </p>
+ </dd>
+ </dl>
+ </dd>
+</dl>
+
+<h3 id="pin"><pin></h3>
+<dl class="xml">
+ <dt>
+ syntax:
+ </dt>
+
+ <dd>
+<pre class="stx">
+<pin digest=["SHA-256"]>base64 encoded digest of X.509
+ SubjectPublicKeyInfo (SPKI)</pin>
+</pre>
+ </dd>
+
+ <dt>
+ Attributes:
+ </dt>
+
+ <dd>
+ <dl class="attr">
+ <dt>
+ {@code digest}
+ </dt>
+
+ <dd>
+ The digest algorithm used to generate the pin. Currently, only
+ {@code "SHA-256"} is supported.
+ </dd>
+ </dl>
+ </dd>
+</dl>
diff --git a/docs/html/training/articles/security-key-attestation.jd b/docs/html/training/articles/security-key-attestation.jd
new file mode 100644
index 0000000..9145d30
--- /dev/null
+++ b/docs/html/training/articles/security-key-attestation.jd
@@ -0,0 +1,861 @@
+page.title=Key Attestation
+page.metaDescription=A tool for verifying security properties of hardware-backed key pairs.
+page.keywords="security", "TEE", "hardware-backed", "keystore", "certificate", "key attestation"
+
+@jd:body
+
+<div id="tb-wrapper">
+ <div id="tb">
+ <h2>In this document</h2>
+ <ol>
+ <li><a href="#verifying">Retrieving and Verifying a Hardware-backed Key Pair</a></li>
+ <li><a href="#certificate_schema">Certificate Extension Data Schema</a></li>
+ </ol>
+ </div>
+</div>
+
+<p>
+ Key Attestation gives you more confidence that the keys you use in your app
+ are stored in a device's hardware-backed keystore. The following sections
+ describe how to verify the properties of hardware-backed keys and how to
+ interpret the schema of the attestation certificate's extension data.
+</p>
+
+<p class="note">
+ <strong>Note: </strong>Only a small number of devices running Android 7.0 (API
+ level 24) support hardware-level key attestation; all other devices running
+ Android 7.0 use software-level key attestation instead. Before you verify the
+ properties of a device's hardware-backed keys in a production-level
+ environment, you should make sure that the device supports hardware-level key
+ attestation. To do so, you should check that the attestation certificate chain
+ contains a root certificate that is signed by the Google attestation root key
+ and that the <code>attestationSecurityLevel</code> element within the <a
+ href="#certificate_schema_keydescription">key description</a> data structure
+ is set to the TrustedEnvironment security level.
+</p>
+
+<h2 id="verifying">
+ Retrieving and Verifying a Hardware-backed Key Pair
+</h2>
+
+<p>
+ During key attestation, you specify the alias of a key pair. The attestation
+ tool, in return, provides a certificate chain, which you can use to verify
+ the properties of that key pair.
+</p>
+
+<p>
+ If the device supports hardware-level key attestation, the root certificate
+ within this chain is signed using an attestation root key, which the device
+ manufacturer injects into the device’s hardware-backed keystore at the
+ factory.
+</p>
+
+<p class="note">
+ <strong>Note:</strong> On devices that ship with hardware-level key
+ attestation, Android 7.0 (API level 24), and Google Play services, the root
+ certificate is signed by the Google attestation root key. You should verify
+ that this root certificate appears within Google’s list of root certificates.
+</p>
+
+<p>
+ To implement key attestation, complete the following steps:
+</p>
+
+<ol>
+ <li>
+ Use a {@link java.security.KeyStore KeyStore} object's
+ {@link java.security.KeyStore#getCertificateChain getCertificateChain()}
+ method to get a reference to the chain of X.509 certificates associated with
+ the hardware-backed keystore.
+ </li>
+
+ <li>
+ <p>
+ Check each certificate’s validity using a
+ {@link java.security.cert.CRL CRL} object's
+ {@link java.security.cert.CRL#isRevoked isRevoked()} method.
+ </p>
+
+ <p class="caution">
+ <strong>Caution:</strong> Although you can complete this process within
+ your app directly, it’s safer to check the certificates’ revocation lists
+ on a separate server that you trust.
+ </p>
+ </li>
+
+ <li>
+ <p>
+ Create an <code>Attestation</code> object, passing in the first element of
+ the certificate chain as an argument:</p>
+
+<pre>
+// "certificates" contains the certificate chain associated with a specific key
+// pair in the device's hardware-backed keystore.
+X509Certificate attestationCert = (X509Certificate) certificates[0];
+Attestation hardwareKeyAttestation = new Attestation(attestationCert);
+</pre>
+
+ <p>
+ An attestation object extracts the extension data within this certificate
+ and stores this information in a more accessible format. For more details
+ about the schema of the extension data, see <a href=
+ "#certificate_schema">Certificate Extension Data Schema</a>.
+ </p>
+ </li>
+
+ <li>
+ <p>
+ Use the accessor methods within the <code>Attestation</code> class to
+ retrieve the extension data from the certificate. These methods use the
+ same names and structure hierarchy as in the certificate extension data
+ schema.
+ </p>
+
+ <p>
+ For example, to view the verified boot key for the device’s TEE, use the
+ following method sequence:
+ </p>
+
+<pre>
+// "hardwareKeyAttestation" contains the first element of the attestation
+// certificate chain.
+AuthorizationList teeAuthList = hardwareKeyAttestation.getTeeEnforced();
+RootOfTrust teeRootOfTrust = teeAuthList.getRootOfTrust();
+byte[] teeVerifiedBootKey = teeRootOfTrust.getVerifiedBootKey();
+</pre>
+
+ </li>
+
+ <li>
+ <p>
+ Compare the extension data from the <code>Attestation</code> object with
+ the set of values that you expect the hardware-backed key to contain.
+ </p>
+
+ <p class="caution">
+ <strong>Caution:</strong> Although you can complete this process within
+ your app directly, it’s safer to check the certificate’s extension data
+ on a separate server that you trust.
+ </p>
+ </li>
+</ol>
+
+<h2 id="certificate_schema">
+ Certificate Extension Data Schema
+</h2>
+
+<p>
+ Key attestation verifies the extension data that appears in the first
+ certificate within the chain in a device’s hardware-backed keystore. The
+ certificate stores the information according to the following ASN.1 schema:
+</p>
+
+<pre class="no-pretty-print">
+KeyDescription ::= SEQUENCE {
+ attestationVersion INTEGER,
+ attestationSecurityLevel SecurityLevel,
+ keymasterVersion INTEGER,
+ keymasterSecurityLevel SecurityLevel,
+ attestationChallenge OCTET_STRING,
+ <var>reserved OCTET_STRING</var>,
+ softwareEnforced AuthorizationList,
+ teeEnforced AuthorizationList,
+}
+
+SecurityLevel ::= ENUMERATED {
+ Software (0),
+ TrustedEnvironment (1),
+}
+
+AuthorizationList ::= SEQUENCE {
+ purpose [1] EXPLICIT SET OF INTEGER OPTIONAL,
+ algorithm [2] EXPLICIT INTEGER OPTIONAL,
+ keySize [3] EXPLICIT INTEGER OPTIONAL,
+ digest [5] EXPLICIT SET OF INTEGER OPTIONAL,
+ padding [6] EXPLICIT SET OF INTEGER OPTIONAL,
+ ecCurve [10] EXPLICIT INTEGER OPTIONAL,
+ rsaPublicExponent [200] EXPLICIT INTEGER OPTIONAL,
+ activeDateTime [400] EXPLICIT INTEGER OPTIONAL,
+ originationExpireDateTime [401] EXPLICIT INTEGER OPTIONAL,
+ usageExpireDateTime [402] EXPLICIT INTEGER OPTIONAL,
+ noAuthRequired [503] EXPLICIT NULL OPTIONAL,
+ userAuthType [504] EXPLICIT INTEGER OPTIONAL,
+ authTimeout [505] EXPLICIT INTEGER OPTIONAL,
+ allowWhileOnBody [506] EXPLICIT NULL OPTIONAL,
+ allApplications [600] EXPLICIT NULL OPTIONAL,
+ applicationId [601] EXPLICIT OCTET_STRING OPTIONAL,
+ creationDateTime [701] EXPLICIT INTEGER OPTIONAL,
+ origin [702] EXPLICIT INTEGER OPTIONAL,
+ rollbackResistant [703] EXPLICIT NULL OPTIONAL,
+ rootOfTrust [704] EXPLICIT RootOfTrust OPTIONAL,
+ osVersion [705] EXPLICIT INTEGER OPTIONAL,
+ osPatchLevel [706] EXPLICIT INTEGER OPTIONAL,
+ attestationChallenge [708] EXPLICIT INTEGER OPTIONAL,
+ attestationApplicationId [709] EXPLICIT OCTET_STRING OPTIONAL,
+}
+
+RootOfTrust ::= SEQUENCE {
+ verifiedBootKey OCTET_STRING,
+ deviceLocked BOOLEAN,
+ verifiedBootState VerifiedBootState,
+}
+
+VerifiedBootState ::= ENUMERATED {
+ Verified (0),
+ SelfSigned (1),
+ Unverified (2),
+ Failed (3),
+}
+</pre>
+
+<p>
+ The following list presents a description of each element within the schema:
+</p>
+
+<h3 id="certificate_schema_keydescription">
+ KeyDescription
+</h3>
+
+<p>
+ This sequence of values presents general information about the key pair being
+ verified through key attestation and provides easy access to additional
+ details.
+</p>
+
+<dl>
+ <dt>
+ <code>attestationVersion</code>
+ </dt>
+
+ <dd>
+ The version of the key attestation feature. Should be set to 1.
+ </dd>
+
+ <dt>
+ <code>attestationSecurityLevel</code>
+ </dt>
+
+ <dd>
+ <p>
+ The <a href="#certificate_schema_securitylevel">security
+ level</a> of the attestation.
+ </p>
+
+ <p class="caution">
+ <strong>Warning:</strong> Although it is possible to attest keys that are
+ stored in the Android system—that is, if the value of
+ <code>attestationSecurityLevel</code> is set to Software—you
+ cannot trust these attestations if the Android system becomes compromised.
+ </p>
+ </dd>
+
+ <dt>
+ <code>keymasterVersion</code>
+ </dt>
+
+ <dd>
+ The version of the Keymaster hardware abstraction layer (HAL). Use 0 to
+ represent version 0.2 or 0.3, 1 to represent version 1.0, and 2 to represent
+ version 2.0.
+ </dd>
+
+ <dt>
+ <code>keymasterSecurityLevel</code>
+ </dt>
+
+ <dd>
+ The <a href="#certificate_schema_securitylevel">security
+ level</a> of the Keymaster implementation.
+ </dd>
+
+ <dt>
+ <code>attestationChallenge</code>
+ </dt>
+
+ <dd>
+ The challenge string associated with a key pair that is verified using key
+ attestation.
+ </dd>
+
+ <dt>
+ <code><var>reserved</var></code>
+ </dt>
+
+ <dd>
+ Only system apps use this value. In all other apps, this value is empty.
+ </dd>
+
+ <dt>
+ <code>softwareEnforced</code>
+ </dt>
+
+ <dd>
+ Optional. The Keymaster <a href=
+ "#certificate_schema_authorizationlist">authorization
+ list</a> that is enforced by the Android system, not by the device’s TEE.
+ </dd>
+
+ <dt>
+ <code>teeEnforced</code>
+ </dt>
+
+ <dd>
+ Optional. The Keymaster <a href=
+ "#certificate_schema_authorizationlist">authorization
+ list</a> that is enforced by the device’s TEE.
+ </dd>
+</dl>
+
+<h3 id="certificate_schema_securitylevel">
+ SecurityLevel
+</h3>
+
+<p>
+ This data structure indicates the extent to which a software feature, such as
+ a key pair, is protected based on its location within the device.
+</p>
+
+<p>
+ Because the data structure is an enumeration, it takes on exactly one of the
+ following values:
+</p>
+
+<dl>
+ <dt>
+ Software
+ </dt>
+
+ <dd>
+ The logic for creating and managing the feature is implemented in the
+ Android system. For the purposes of creating and storing key pairs, this
+ location is less secure than the TEE but is more secure than your app's
+ process space.
+ </dd>
+
+ <dt>
+ TrustedEnvironment
+ </dt>
+
+ <dd>
+ The logic for creating and managing the feature is implemented in secure
+ hardware, such as a TEE. For the purposes of creating and storing key pairs,
+ this location is more secure because secure hardware is highly resistant to
+ remote compromise.
+ </dd>
+</dl>
+
+<h3 id="certificate_schema_authorizationlist">
+ AuthorizationList
+</h3>
+
+<p>
+ This data structure contains the key pair’s properties themselves, as defined
+ in the Keymaster hardware abstraction layer (HAL). You compare these values
+ to the device’s current state or to a set of expected values to verify that a
+ key pair is still valid for use in your app.
+</p>
+
+<p>
+ Each field name corresponds to a similarly-named Keymaster tag. For example,
+ the <code>keySize</code> field in an authorization list corresponds to the
+ <a href="https://source.android.com/security/keystore/implementer-ref.html#km_tag_key_size">
+ <code>KM_TAG_KEY_SIZE</code></a> Keymaster tag.
+</p>
+
+<p>
+ Each field in the following list is optional:
+</p>
+
+<dl>
+ <dt>
+ <code>purpose</code>
+ </dt>
+
+ <dd>
+ Corresponds to the <code><a href=
+ "https://source.android.com/security/keystore/implementer-ref.html#km_tag_purpose">
+ KM_TAG_PURPOSE</a></code> Keymaster tag, which uses a tag ID value of 1.
+ </dd>
+
+ <dt>
+ <code>algorithm</code>
+ </dt>
+
+ <dd>
+ <p>
+ Corresponds to the <code><a href=
+ "https://source.android.com/security/keystore/implementer-ref.html#km_tag_algorithm">
+ KM_TAG_ALGORITHM</a></code> Keymaster tag, which uses a tag ID value of
+ 2.
+ </p>
+
+ <p>
+ When an <code>AuthorizationList</code> object is associated with key
+ attestation, this value is always <code>KM_ALGORITHM_RSA</code> or
+ <code>KM_ALGORITHM_EC</code>.
+ </p>
+ </dd>
+
+ <dt>
+ <code>keySize</code>
+ </dt>
+
+ <dd>
+ Corresponds to the <code><a href=
+ "https://source.android.com/security/keystore/implementer-ref.html#km_tag_key_size">
+ KM_TAG_KEY_SIZE</a></code> Keymaster tag, which uses a tag ID value of 3.
+ </dd>
+
+ <dt>
+ <code>digest</code>
+ </dt>
+
+ <dd>
+ Corresponds to the <code><a href=
+ "https://source.android.com/security/keystore/implementer-ref.html#km_tag_digest">
+ KM_TAG_DIGEST</a></code> Keymaster tag, which uses a tag ID value of 5.
+ </dd>
+
+ <dt>
+ <code>padding</code>
+ </dt>
+
+ <dd>
+ Corresponds to the <code><a href=
+ "https://source.android.com/security/keystore/implementer-ref.html#km_tag_padding">
+ KM_TAG_PADDING</a></code> Keymaster tag, which uses a tag ID value of 6.
+ </dd>
+
+ <dt>
+ <code>ecCurve</code>
+ </dt>
+
+ <dd>
+ <p>
+ Corresponds to the <code>KM_TAG_EC_CURVE</code> Keymaster tag, which uses
+ a tag ID value of 10.
+ </p>
+
+ <p>
+ The set of parameters used to generate an elliptic curve (EC) key pair,
+ which uses ECDSA for signing and verification, within the Android system
+ keystore.
+ </p>
+ </dd>
+
+ <dt>
+ <code>rsaPublicExponent</code>
+ </dt>
+
+ <dd>
+ Corresponds to the <code><a href=
+ "https://source.android.com/security/keystore/implementer-ref.html#km_tag_rsa_public_exponent">
+ KM_TAG_RSA_PUBLIC_EXPONENT</a></code> Keymaster tag, which uses a tag ID
+ value of 200.
+ </dd>
+
+ <dt>
+ <code>activeDateTime</code>
+ </dt>
+
+ <dd>
+ Corresponds to the <code><a href=
+ "https://source.android.com/security/keystore/implementer-ref.html#km_tag_active_datetime">
+ KM_TAG_ACTIVE_DATETIME</a></code> Keymaster tag, which uses a tag ID value
+ of 400.
+ </dd>
+
+ <dt>
+ <code>originationExpireDateTime</code>
+ </dt>
+
+ <dd>
+ Corresponds to the <code><a href=
+ "https://source.android.com/security/keystore/implementer-ref.html#km_tag_origination_expire_datetime">
+ KM_TAG_ORIGINATION_EXPIRE_DATETIME</a></code> Keymaster tag, which uses a
+ tag ID value of 401.
+ </dd>
+
+ <dt>
+ <code>usageExpireDateTime</code>
+ </dt>
+
+ <dd>
+ Corresponds to the <code><a href=
+ "https://source.android.com/security/keystore/implementer-ref.html#km_tag_usage_expire_datetime">
+ KM_TAG_USAGE_EXPIRE_DATETIME</a></code> Keymaster tag, which uses a tag ID
+ value of 402.
+ </dd>
+
+ <dt>
+ <code>noAuthRequired</code>
+ </dt>
+
+ <dd>
+ <p>
+ Corresponds to the <code><a href=
+ "https://source.android.com/security/keystore/implementer-ref.html#km_tag_no_auth_required">
+ KM_TAG_NO_AUTH_REQUIRED</a></code> Keymaster tag, which uses a tag ID
+ value of 503.
+ </p>
+
+ <p>
+ When an <code>AuthorizationList</code> object is associated with key
+ attestation, this value is always true.
+ </p>
+ </dd>
+
+ <dt>
+ <code>userAuthType</code>
+ </dt>
+
+ <dd>
+ Corresponds to the <code><a href=
+ "https://source.android.com/security/keystore/implementer-ref.html#km_tag_user_auth_type">
+ KM_TAG_USER_AUTH_TYPE</a></code> Keymaster tag, which uses a tag ID value
+ of 504.
+ </dd>
+
+ <dt>
+ <code>authTimeout</code>
+ </dt>
+
+ <dd>
+ Corresponds to the <code><a href=
+ "https://source.android.com/security/keystore/implementer-ref.html#km_tag_auth_timeout">
+ KM_TAG_AUTH_TIMEOUT</a></code> Keymaster tag, which uses a tag ID value of
+ 505.
+ </dd>
+
+ <dt>
+ <code>allowWhileOnBody</code>
+ </dt>
+
+ <dd>
+ <p>
+ Corresponds to the <code>KM_TAG_ALLOW_WHILE_ON_BODY</code> Keymaster tag,
+ which uses a tag ID value of 506.
+ </p>
+
+ <p>
+ Allows the key to be used after its authentication timeout period if the
+ user is still wearing the device on their body. Note that a secure
+ on-body sensor determines whether the device is being worn on the user’s
+ body.
+ </p>
+
+ <p>
+ When an <code>AuthorizationList</code> object is associated with key
+ attestation, this value is always true.
+ </p>
+ </dd>
+
+ <dt>
+ <code>allApplications</code>
+ </dt>
+
+ <dd>
+ <p>
+ Corresponds to the <code>KM_TAG_ALL_APPLICATIONS</code> Keymaster tag,
+ which uses a tag ID value of 600.
+ </p>
+
+ <p>
+ Indicates whether all apps on a device can access the key pair.
+ </p>
+
+ <p>
+ When an <code>AuthorizationList</code> object is associated with key
+ attestation, this value is always true.
+ </p>
+ </dd>
+
+ <dt>
+ <code>applicationId</code>
+ </dt>
+
+ <dd>
+ Corresponds to the <code><a href=
+ "https://source.android.com/security/keystore/implementer-ref.html#km_tag_application_id">
+ KM_TAG_APPLICATION_ID</a></code> Keymaster tag, which uses a tag ID value
+ of 601.
+ </dd>
+
+ <dt>
+ <code>creationDateTime</code>
+ </dt>
+
+ <dd>
+ Corresponds to the <code><a href=
+ "https://source.android.com/security/keystore/implementer-ref.html#km_tag_creation_datetime">
+ KM_TAG_CREATION_DATETIME</a></code> Keymaster tag, which uses a tag ID
+ value of 701.
+ </dd>
+
+ <dt>
+ <code>origin</code>
+ </dt>
+
+ <dd>
+ <p>
+ Corresponds to the <code><a href=
+ "https://source.android.com/security/keystore/implementer-ref.html#km_tag_origin">
+ KM_TAG_ORIGIN</a></code> Keymaster tag, which uses a tag ID value of 702.
+ </p>
+
+ <p>
+ When an <code>AuthorizationList</code> object is associated with key
+ attestation, this value is usually set to
+ <code>KM_ORIGIN_GENERATED</code>. If the attestation uses Keymaster
+ version 0.2 or 0.3, however, the origin may be set to
+ <code>KM_ORIGIN_UNKNOWN</code> instead.
+ </p>
+ </dd>
+
+ <dt>
+ <code>rollbackResistant</code>
+ </dt>
+
+ <dd>
+ Corresponds to the <code><a href=
+ "https://source.android.com/security/keystore/implementer-ref.html#km_tag_rollback_resistant">
+ KM_TAG_ROLLBACK_RESISTANT</a></code> Keymaster tag, which uses a tag ID
+ value of 703.
+ </dd>
+
+ <dt>
+ <code>rootOfTrust</code>
+ </dt>
+
+ <dd>
+ <p>
+ Corresponds to the <code><a href=
+ "https://source.android.com/security/keystore/implementer-ref.html#km_tag_root_of_trust">
+ KM_TAG_ROOT_OF_TRUST</a></code> Keymaster tag, which uses a tag ID value
+ of 704.
+ </p>
+
+ <p>
+ For more details, see the section describing the <code><a href=
+ "#certificate_schema_rootoftrust">RootOfTrust</a></code>
+ data structure.
+ </p>
+ </dd>
+
+ <dt>
+ <code>osVersion</code>
+ </dt>
+
+ <dd>
+ <p>
+ Corresponds to the <code>KM_TAG_OS_VERSION</code> Keymaster tag, which
+ uses a tag ID value of 705.
+ </p>
+
+ <p>
+ The version of the Android operating system associated with the
+ Keymaster, specified as a six-digit integer. For example, version 6.0.1
+ is represented as 060001.
+ </p>
+
+ <p>
+ Only Keymaster version 1.0 or higher includes this value in the
+ authorization list.
+ </p>
+ </dd>
+
+ <dt>
+ <code>osPatchLevel</code>
+ </dt>
+
+ <dd>
+ <p>
+ Corresponds to the <code>KM_TAG_PATCHLEVEL</code> Keymaster tag, which
+ uses a tag ID value of 706.
+ </p>
+
+ <p>
+ The month and year associated with the security patch that is being used
+ within the Keymaster, specified as a six-digit integer. For example, the
+ June 2016 patch is represented as 201606.
+ </p>
+
+ <p>
+ Only Keymaster version 1.0 or higher includes this value in the
+ authorization list.
+ </p>
+ </dd>
+
+ <dt>
+ <code>attestationChallenge</code>
+ </dt>
+
+ <dd>
+ <p>
+ Corresponds to the <code>KM_TAG_ATTESTATION_CHALLENGE</code> Keymaster
+ tag, which uses a tag ID value of 708.
+ </p>
+
+ <p>
+ The challenge string associated with the key pair that is defined in the
+ Keymaster.
+ </p>
+ </dd>
+
+ <dt>
+ <code>attestationApplicationId</code>
+ </dt>
+
+ <dd>
+ <p>
+ Corresponds to the <code>KM_TAG_ATTESTATION_APPLICATION_ID</code>
+ Keymaster tag, which uses a tag ID value of 709.
+ </p>
+
+ <p>
+ The unique ID of the attestation certificate that signed the key pair
+ that is in the Keymaster.
+ </p>
+ </dd>
+</dl>
+
+<h3 id="certificate_schema_rootoftrust">
+ RootOfTrust
+</h3>
+
+<p>
+ This collection of values defines key information about the device’s status.
+</p>
+
+<p>
+ Each field in the following list is required:
+</p>
+
+<dl>
+ <dt>
+ <code>verifiedBootKey</code>
+ </dt>
+
+ <dd>
+ <p>
+ A secure hash of the key that verifies the system image. It is recommended
+ that you use the SHA-256 algorithm for this hash.
+ </p>
+ </dd>
+
+ <dt>
+ <code>deviceLocked</code>
+ </dt>
+
+ <dd>
+ True if the device’s bootloader is locked, which enables Verified Boot
+ checking and prevents an unsigned device image from being flashed onto the
+ device. For more information about this feature, see the <a class=
+ "external-link" href=
+ "https://source.android.com/security/verifiedboot/verified-boot.html">Verifying
+ Boot</a> documentation.
+ </dd>
+
+ <dt>
+ <code>verifiedBootState</code>
+ </dt>
+
+ <dd>
+ The <a href="#certificate_schema_verifiedbootstate">boot
+ state</a> of the device, according to the Verified Boot feature.
+ </dd>
+
+ <dt>
+ <code>osVersion</code>
+ </dt>
+
+ <dd>
+ The current version of the Android operating system on the device,
+ specified as a six-digit integer. For example, version 6.0.1 is represented
+ as 060001.
+ </dd>
+
+ <dt>
+ <code>patchMonthYear</code>
+ </dt>
+
+ <dd>
+ The month and year associated with the security patch that is currently
+ installed on the device, specified as a six-digit integer. For example, the
+ August 2016 patch is represented as 201608.
+ </dd>
+</dl>
+
+<h3 id="certificate_schema_verifiedbootstate">
+ VerifiedBootState
+</h3>
+
+<p>
+ This data structure provides the device’s current boot state, which
+ represents the level of protection provided to the user and to apps after the
+ device finishes booting. For more information about this feature, see the
+ <a class="external-link" href=
+ "https://source.android.com/security/verifiedboot/verified-boot.html#boot_state">
+ Boot State</a> section within the Verifying Boot documentation.
+</p>
+
+<p>
+ This data structure is an enumeration, so it takes on exactly one of the
+ following values:
+</p>
+
+<dl>
+ <dt>
+ Verified
+ </dt>
+
+ <dd>
+ <p>
+ Indicates a full chain of trust, which includes the bootloader, the boot
+ partition, and all verified partitions.
+ </p>
+
+ <p>
+ When the device is in this boot state, the <code>verifiedBootKey</code> is
+ the hash of the device-embedded certificate, which the device manufacturer
+ adds to the device's ROM at the factory.
+ </p>
+ </dd>
+
+ <dt>
+ SelfSigned
+ </dt>
+
+ <dd>
+ <p>
+ Indicates that the device-embedded certificate has verified the device’s
+ boot partition and that the signature is valid.
+ </p>
+
+ <p>
+ When the device is in this boot state, the <code>verifiedBootKey</code> is
+ the hash of a user-installed certificate, which signs a boot partition
+ that the user adds to the device in place of the original,
+ manufacturer-provided boot partition.
+ </p>
+ </dd>
+
+ <dt>
+ Unverified
+ </dt>
+
+ <dd>
+ Indicates that the user can modify the device freely. Therefore, the user is
+ responsible for verifying the device’s integrity.
+ </dd>
+
+ <dt>
+ Failed
+ </dt>
+
+ <dd>
+ Indicates that the device has failed verification. The attestation
+ certificate should never use this value for <code>VerifiedBootState</code>.
+ </dd>
+</dl>
diff --git a/docs/html/training/auto/testing/index.jd b/docs/html/training/auto/testing/index.jd
index c93012f..e3e2d86 100644
--- a/docs/html/training/auto/testing/index.jd
+++ b/docs/html/training/auto/testing/index.jd
@@ -523,7 +523,7 @@
<ol>
<li>Install the Android Media Browser simulator
-({@code <sdk>/extras/google/simulators/media-browser-simulator.apk}) on
+({@code <sdk>/extras/google/simulators/media-browser-simulator.apk}) on
the test device. You can do this using
the <a href="{@docRoot}tools/help/adb.html#move">adb</a> command line tool.</li>
<li>Enable <a href="{@docRoot}tools/device.html#developer-device-options">
@@ -540,7 +540,7 @@
<ol>
<li>Install the Android Messaging simulator
- ({@code <sdk>/extras/google/simulators/messaging-simulator.apk})
+ ({@code <sdk>/extras/google/simulators/messaging-simulator.apk})
on the test device. You can do this using the
<a href="{@docRoot}tools/help/adb.html#move">adb</a> command line tool.</li>
<li>Enable the simulator to read notifications posted on the system:
diff --git a/docs/html/training/backup/autosyncapi.jd b/docs/html/training/backup/autosyncapi.jd
index 0e2a9a9..e0df7bb 100644
--- a/docs/html/training/backup/autosyncapi.jd
+++ b/docs/html/training/backup/autosyncapi.jd
@@ -257,7 +257,7 @@
<a href="{@docRoot}guide/topics/manifest/application-element.html">app manifest</a>. If your app
used this legacy approach, you can transition to full-data backups by adding the
{@code android:fullBackupOnly="true"} attribute to the
-<a href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application/>}</a>
+<a href="{@docRoot}guide/topics/manifest/application-element.html">{@code <application/>}</a>
element in the manifest. When running on a device with Android 5.1
(API level 22) or lower, your app ignores this value in the manifest, and continues performing
backups in the previous manner.</p>
@@ -349,7 +349,7 @@
<pre>$ adb shell bmgr wipe <TRANSPORT> <PACKAGE></pre>
<p>
- You must prepend <code>com.google.android.gms</code> to the {@code <TRANSPORT>} value.
+ You must prepend <code>com.google.android.gms</code> to the {@code <TRANSPORT>} value.
To get the list of <a href="{@docRoot}google/backup/index.html">transports</a>, execute the
following command:
</p>
diff --git a/docs/html/training/basics/activity-lifecycle/pausing.jd b/docs/html/training/basics/activity-lifecycle/pausing.jd
index 7ca97aa..64fa60b 100644
--- a/docs/html/training/basics/activity-lifecycle/pausing.jd
+++ b/docs/html/training/basics/activity-lifecycle/pausing.jd
@@ -32,25 +32,34 @@
</div>
</div>
-<p>During normal app use, the foreground activity is sometimes obstructed by other
-visual components that cause the activity to <em>pause</em>. For example, when a semi-transparent
-activity opens (such as one in the style of a dialog), the previous activity pauses. As long as the
-activity is still partially visible but currently not the activity in focus, it remains paused.</p>
+<p>
+ During normal app use, the app sometimes loses focus, causing the activity to
+ <em>pause</em>. For example, when apps run in <a href=
+ "{@docRoot}guide/topics/ui/multi-window.html">multi-window mode</a>, only one
+ of the apps has the focus at any time; the system pauses all other apps. Similarly,
+ when a semi-transparent activity opens (such as one in the style of a
+ dialog), the previous activity pauses. As long as the activity is still
+ partially visible but currently not the activity in focus, it remains paused.
+</p>
<p>However, once the activity is fully-obstructed and not visible, it <em>stops</em> (which is
discussed in the next lesson).</p>
<p>As your activity enters the paused state, the system calls the {@link
android.app.Activity#onPause onPause()} method on your {@link android.app.Activity}, which allows
-you to stop ongoing actions that should not continue while paused (such as a video) or persist
+you to stop ongoing actions that should not continue while paused or persist
any information that should be permanently saved in case the user continues to leave your app. If
the user returns to your activity from the paused state, the system resumes it and calls the
{@link android.app.Activity#onResume onResume()} method.</p>
-<p class="note"><strong>Note:</strong> When your activity receives a call to {@link
-android.app.Activity#onPause()}, it may be an indication that the activity will be paused for a
-moment and the user may return focus to your activity. However, it's usually the first indication
-that the user is leaving your activity.</p>
+<p class="note">
+ <strong>Note:</strong> When the system calls your activity's {@link
+ android.app.Activity#onPause()} method, the system may be signaling that the
+ activity will be paused for a moment and the user may return focus to your
+ activity, or that the app is running in multi-window mode. However, this
+ method call may also be the first indication that the user is leaving your
+ activity.
+</p>
<img src="{@docRoot}images/training/basics/basic-lifecycle-paused.png" />
<p class="img-caption"><strong>Figure 1.</strong> When a semi-transparent activity obscures
@@ -67,7 +76,11 @@
the {@link android.app.Activity#onPause()} callback to:</p>
<ul>
- <li>Stop animations or other ongoing actions that could consume CPU.</li>
+ <li>Check if the activity is visible; if it is not, stop animations or other
+ ongoing actions that could consume CPU. Remember, beginning with Android
+ 7.0, a paused app might be running in <a
+ href="{@docRoot}guide/topics/ui/multi-window.html">multi-window mode</a>.
+ In this case, you would not want to stop animations or video playback.</li>
<li>Commit unsaved changes, but only if users expect such changes to be permanently saved when
they leave (such as a draft email).</li>
<li>Release system resources, such as broadcast receivers, handles to sensors (like
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/basics/network-ops/data-saver.jd b/docs/html/training/basics/network-ops/data-saver.jd
new file mode 100644
index 0000000..babf7c6
--- /dev/null
+++ b/docs/html/training/basics/network-ops/data-saver.jd
@@ -0,0 +1,253 @@
+page.title=Optimizing Network Data Usage
+parent.title=Performing Network Operations
+parent.link=index.html
+
+trainingnavtop=true
+next.title=Parsing XML Data
+next.link=xml.html
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+
+
+<h2>This lesson teaches you to</h2>
+<ol>
+ <li><a href="#status">Check Data-Saver Preferences</a>
+ <ul>
+ <li><a href="#request-whitelist">Request whitelist permissions</a></li>
+ </ul>
+ </li>
+ <li><a href="#monitor-changes">Monitor Changes to Data Saver Preferences</a></li>
+ <li><a href="#testing">Test with Android Debug Bridge Commands</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>
+ Over the life of a smartphone, the cost of a cellular data plan can easily
+ exceed the cost of the device itself. From Android 7.0 (API level 24),
+ users users can enable Data Saver on a device-wide basis in order
+ optimize their device's data usage, and use less data. This ability
+ is especially useful when roaming, near the end of the billing cycle,
+ or for a small prepaid data pack.
+</p>
+
+<p>
+ When a user enables Data Saver in <strong>Settings</strong> and the device is
+ on a metered network, the system blocks background data usage and signals
+ apps to use less data in the foreground wherever possible. Users can
+ whitelist specific apps to allow background metered data usage even when Data
+ Saver is turned on.
+</p>
+
+<p>
+ Android 7.0 (API level 24) extends the {@link android.net.ConnectivityManager}
+ API to provide apps with a way to <a href="#status">retrieve the user’s Data
+ Saver preferences</a> and <a href="#monitor-changes">monitor preference
+ changes</a>. It is considered good practice for apps to check whether the
+ user has enabled Data Saver and make an effort to limit foreground and
+ background data usage.
+</p>
+
+<h2 id="status">
+ Checking Data Saver Preferences
+</h2>
+
+<p>
+ In Android 7.0 (API level 24), apps can use the {@link
+ android.net.ConnectivityManager} API to determine what data usage
+ restrictions are being applied. The {@code getRestrictBackgroundStatus()}
+ method returns one of the following values:
+</p>
+
+<dl>
+ <dt>
+ {@code RESTRICT_BACKGROUND_STATUS_DISABLED}
+ </dt>
+
+ <dd>
+ Data Saver is disabled.
+ </dd>
+
+ <dt>
+ {@code RESTRICT_BACKGROUND_STATUS_ENABLED}
+ </dt>
+
+ <dd>
+ The user has enabled Data Saver for this app. Apps should make an effort to limit data
+ usage in the foreground and gracefully handle restrictions to background
+ data usage.
+ </dd>
+
+ <dt>
+ {@code RESTRICT_BACKGROUND_STATUS_WHITELISTED}
+ </dt>
+
+ <dd>
+ The user has enabled Data Saver but the app is whitelisted. Apps should
+ still make an effort to limit foreground and background data usage.
+ </dd>
+</dl>
+
+<p>
+ It is considered good practice to limit data usage whenever the device is
+ connected to a metered network, even if Data Saver is disabled or the app
+ is whitelisted. The following sample code uses {@link
+ android.net.ConnectivityManager#isActiveNetworkMetered
+ ConnectivityManager.isActiveNetworkMetered()} and {@code
+ ConnectivityManager.getRestrictBackgroundStatus()} to determine how much data
+ the app should use:
+</p>
+
+<pre>
+ConnectivityManager connMgr = (ConnectivityManager)
+ getSystemService(Context.CONNECTIVITY_SERVICE);
+// Checks if the device is on a metered network
+if (connMgr.isActiveNetworkMetered()) {
+ // Checks user’s Data Saver settings.
+ switch (connMgr.getRestrictBackgroundStatus()) {
+ case RESTRICT_BACKGROUND_STATUS_ENABLED:
+ // Background data usage is blocked for this app. Wherever possible,
+ // the app should also use less data in the foreground.
+
+ case RESTRICT_BACKGROUND_STATUS_WHITELISTED:
+ // The app is whitelisted. Wherever possible,
+ // the app should use less data in the foreground and background.
+
+ case RESTRICT_BACKGROUND_STATUS_DISABLED:
+ // Data Saver is disabled. Since the device is connected to a
+ // metered network, the app should use less data wherever possible.
+ }
+} else {
+ // The device is not on a metered network.
+ // Use data as required to perform syncs, downloads, and updates.
+}
+</pre>
+
+<h3 id="request-whitelist">
+ Requesting whitelist permissions
+</h3>
+
+<p>
+ If your app needs to use data in the background, it can request whitelist
+ permissions by sending a
+ <code>Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS</code>
+ intent containing a URI of your app's package name: for example,
+ <code>package:MY_APP_ID</code>.
+</p>
+
+<p>
+ Sending the intent and URI launches the <strong>Settings</strong> app and
+ displays data usage settings for your app. The user can then decide whether
+ to enable background data for your app. Before you send this intent, it is
+ good practice to first ask the user if they want to launch the
+ <strong>Settings</strong> app for the purpose of enabling background data
+ usage.
+</p>
+
+<h2 id="monitor-changes">
+ Monitoring Changes to Data Saver Preferences
+</h2>
+
+<p>
+ Apps can monitor changes to Data Saver preferences by creating a {@link
+ android.content.BroadcastReceiver} to listen for {@code
+ ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED} and dynamically
+ registering the receiver with {@link android.content.Context#registerReceiver
+ Context.registerReceiver()}. When an app receives this broadcast, it should
+ <a href="#status">check if the new Data Saver preferences affect its
+ permissions</a> by calling {@code
+ ConnectivityManager.getRestrictBackgroundStatus()}.
+</p>
+
+<p class="note">
+ <strong>Note:</strong> The system only sends this broadcast to apps that
+ dynamically register for them with {@link
+ android.content.Context#registerReceiver Context.registerReceiver()}. Apps
+ that register to receive this broadcast in their manifest will not receive
+ them.
+</p>
+
+<h2 id="testing">
+ Testing with Android Debug Bridge Commands
+</h2>
+
+<p>
+ The <a href="{@docRoot}tools/help/adb.html">Android Debug Bridge (ADB)</a>
+ provides a few commands that you can use to test your app in Data Saver
+ conditions. You can check and configure network
+ permissions or set wireless networks as metered to test your app on unmetered
+ networks.
+</p>
+<dl>
+ <dt>
+ <code>$ adb shell dumpsys netpolicy</code>
+ </dt>
+
+ <dd>
+ Generates a report that includes the current global background network
+ restriction setting, package UIDs currently on a whitelist, and the network
+ permissions of other known packages.
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy</code>
+ </dt>
+
+ <dd>
+ Displays a full list of Network Policy Manager (netpolicy) commands.
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy set restrict-background
+ <boolean></code>
+ </dt>
+
+ <dd>
+ Enables or disables Data Saver mode when passing <code>true</code> or
+ <code>false</code>, respectively.
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy add restrict-background-whitelist
+ <UID></code>
+ </dt>
+
+ <dd>
+ Adds the specified package UID to the whitelist to allow background metered
+ data usage.
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy remove restrict-background-whitelist
+ <UID></code>
+ </dt>
+
+ <dd>
+ Removes the specified package UID from the whitelist to block background
+ metered data usage while Data Saver is enabled.
+ </dd>
+
+ <dt>
+ <code>$ adb shell cmd netpolicy list wifi-networks</code>
+ </dt>
+
+ <dd>
+ Lists all wifi networks, displaying whether they're metered.
+ </dd>
+
+
+ <dt>
+ <code>$ adb shell cmd netpolicy set metered-network <WIFI_SSID>
+ true</code>
+ </dt>
+
+ <dd>
+ Sets wifi with the specified SSID as metered, allowing you to simulate a
+ metered network on an unmetered network.
+ </dd>
+</dl>
diff --git a/docs/html/training/basics/network-ops/managing.jd b/docs/html/training/basics/network-ops/managing.jd
index 2609db5..a29e874 100644
--- a/docs/html/training/basics/network-ops/managing.jd
+++ b/docs/html/training/basics/network-ops/managing.jd
@@ -6,8 +6,8 @@
previous.title=Connecting to the Network
previous.link=connecting.html
-next.title=Parsing XML Data
-next.link=xml.html
+next.title=Optimizing Network Data Usage
+next.link=data-saver.html
@jd:body
diff --git a/docs/html/training/constraint-layout/images/alignment-constraint-offset_2x.png b/docs/html/training/constraint-layout/images/alignment-constraint-offset_2x.png
new file mode 100644
index 0000000..1e4867e
--- /dev/null
+++ b/docs/html/training/constraint-layout/images/alignment-constraint-offset_2x.png
Binary files differ
diff --git a/docs/html/training/constraint-layout/images/alignment-constraint_2x.png b/docs/html/training/constraint-layout/images/alignment-constraint_2x.png
new file mode 100644
index 0000000..afe7d4a
--- /dev/null
+++ b/docs/html/training/constraint-layout/images/alignment-constraint_2x.png
Binary files differ
diff --git a/docs/html/training/constraint-layout/images/baseline-constraint_2x.png b/docs/html/training/constraint-layout/images/baseline-constraint_2x.png
new file mode 100644
index 0000000..dfc3522
--- /dev/null
+++ b/docs/html/training/constraint-layout/images/baseline-constraint_2x.png
Binary files differ
diff --git a/docs/html/training/constraint-layout/images/constraint-fail-fixed_2x.png b/docs/html/training/constraint-layout/images/constraint-fail-fixed_2x.png
new file mode 100644
index 0000000..be9d54f
--- /dev/null
+++ b/docs/html/training/constraint-layout/images/constraint-fail-fixed_2x.png
Binary files differ
diff --git a/docs/html/training/constraint-layout/images/constraint-fail_2x.png b/docs/html/training/constraint-layout/images/constraint-fail_2x.png
new file mode 100644
index 0000000..3f28ef7
--- /dev/null
+++ b/docs/html/training/constraint-layout/images/constraint-fail_2x.png
Binary files differ
diff --git a/docs/html/training/constraint-layout/images/layout-editor-convert-to-constraint_2x.png b/docs/html/training/constraint-layout/images/layout-editor-convert-to-constraint_2x.png
new file mode 100644
index 0000000..ace31a6
--- /dev/null
+++ b/docs/html/training/constraint-layout/images/layout-editor-convert-to-constraint_2x.png
Binary files differ
diff --git a/docs/html/training/constraint-layout/images/layout-editor-margin-callout_2-2_2x.png b/docs/html/training/constraint-layout/images/layout-editor-margin-callout_2-2_2x.png
new file mode 100644
index 0000000..0768022
--- /dev/null
+++ b/docs/html/training/constraint-layout/images/layout-editor-margin-callout_2-2_2x.png
Binary files differ
diff --git a/docs/html/training/constraint-layout/images/layout-editor-properties-callouts_2-2_2x.png b/docs/html/training/constraint-layout/images/layout-editor-properties-callouts_2-2_2x.png
new file mode 100644
index 0000000..b4ffb2c
--- /dev/null
+++ b/docs/html/training/constraint-layout/images/layout-editor-properties-callouts_2-2_2x.png
Binary files differ
diff --git a/docs/html/training/constraint-layout/images/layout-editor_2-2_2x.png b/docs/html/training/constraint-layout/images/layout-editor_2-2_2x.png
new file mode 100644
index 0000000..72a4e40
--- /dev/null
+++ b/docs/html/training/constraint-layout/images/layout-editor_2-2_2x.png
Binary files differ
diff --git a/docs/html/training/constraint-layout/images/parent-constraint_2x.png b/docs/html/training/constraint-layout/images/parent-constraint_2x.png
new file mode 100644
index 0000000..0414f1d
--- /dev/null
+++ b/docs/html/training/constraint-layout/images/parent-constraint_2x.png
Binary files differ
diff --git a/docs/html/training/constraint-layout/images/position-constraint_2x.png b/docs/html/training/constraint-layout/images/position-constraint_2x.png
new file mode 100644
index 0000000..9f93e72
--- /dev/null
+++ b/docs/html/training/constraint-layout/images/position-constraint_2x.png
Binary files differ
diff --git a/docs/html/training/constraint-layout/images/thumbnail-add-layout-guideline_2-2.png b/docs/html/training/constraint-layout/images/thumbnail-add-layout-guideline_2-2.png
new file mode 100644
index 0000000..f863e5f
--- /dev/null
+++ b/docs/html/training/constraint-layout/images/thumbnail-add-layout-guideline_2-2.png
Binary files differ
diff --git a/docs/html/training/constraint-layout/images/thumbnail-adjust-constraint-bias.png b/docs/html/training/constraint-layout/images/thumbnail-adjust-constraint-bias.png
new file mode 100644
index 0000000..d61e9b2
--- /dev/null
+++ b/docs/html/training/constraint-layout/images/thumbnail-adjust-constraint-bias.png
Binary files differ
diff --git a/docs/html/training/constraint-layout/images/thumbnail-studio-constraint-first.png b/docs/html/training/constraint-layout/images/thumbnail-studio-constraint-first.png
new file mode 100644
index 0000000..9747102
--- /dev/null
+++ b/docs/html/training/constraint-layout/images/thumbnail-studio-constraint-first.png
Binary files differ
diff --git a/docs/html/training/constraint-layout/images/thumbnail-studio-constraint-second.png b/docs/html/training/constraint-layout/images/thumbnail-studio-constraint-second.png
new file mode 100644
index 0000000..940b8495
--- /dev/null
+++ b/docs/html/training/constraint-layout/images/thumbnail-studio-constraint-second.png
Binary files differ
diff --git a/docs/html/training/constraint-layout/index.html b/docs/html/training/constraint-layout/index.html
new file mode 100644
index 0000000..62eaf15
--- /dev/null
+++ b/docs/html/training/constraint-layout/index.html
@@ -0,0 +1,498 @@
+<html devsite>
+<head>
+ <title>Build a Responsive UI with ConstraintLayout</title>
+ <meta name="book_path" value="/training/_book.yaml" />
+ <meta name="top_category" value="develop" />
+ <meta name="subcategory" value="training" />
+</head>
+<body>
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>In this document</h2>
+ <ol>
+ <li><a href="#constraints-overview">Constraints overview</a></li>
+ <li><a href="#add-constraintlayout-to-your-project">Add ConstraintLayout to your project</a></li>
+ <li><a href="#add-a-constraint">Add a constraint</a></li>
+ <li><a href="#use-autoconnect-and-infer-constraints">Use Autoconnect and Infer Constraints</a></li>
+ <li><a href="#adjust-the-view-size">Adjust the view size</a></li>
+ <li><a href="#adjust-the-constraint-bias">Adjust the constraint bias</a></li>
+ <li><a href="#adjust-the-view-margins">Adjust the view margins</a></li>
+ </ol>
+</div>
+</div>
+
+
+<p><code>ConstraintLayout</code> allows you to create large and complex layouts with a flat view
+hierarchy (no nested view groups). It's similar to <code>RelativeLayout</code> in that all views are
+layed out according to relationships between sibling views and the parent layout, but it's more
+flexible than <code>RelativeLayout</code> and easier to use with Android Studio's Layout Editor.
+</p>
+
+<p>Everything you can do with <code>ConstraintLayout</code> is available directly from the Layout Editor's visual
+tools, because the layout API and the Layout Editor were specially built for each other. So you can
+build your layout with <code>ConstraintLayout</code> entirely by drag-and-dropping instead of editing the XML.
+</p>
+
+<img src="/training/constraint-layout/images/layout-editor_2-2_2x.png" alt=""
+ width="640"/>
+<p class="img-caption"><b>Figure 1.</b> A <code>ConstraintLayout</code> in the Layout Editor</p>
+
+
+<p>
+<code>ConstraintLayout</code> is available in an API library that's compatible with Android
+2.3 (API level 9) and higher, and the new layout editor is available in Android
+Studio 2.2 and higher.
+</p>
+
+<p>
+This page provides a guide to building a layout with <code>ConstraintLayout</code> in Android
+Studio. If you'd like more information about the Layout Editor itself, see the
+Android Studio guide to <a href="/studio/write/layout-editor.html">Build a UI with
+Layout Editor</a>.
+</p>
+
+
+<h2 id="constraints-overview">Constraints overview</h2>
+<p>
+To define a view's position in <code>ConstraintLayout</code>, you must add two
+or more <em>constraints</em> for the view. Each constraint represents a connection or
+alignment to another view, the parent layout, or an invisible guideline. Each
+constraint defines the view's position along either the
+vertical or horizontal axis; so each view must have a minimum of one constraint for each
+axis, but often more are necessary.
+</p>
+
+<p>
+When you drop a view into the Layout Editor, it stays where you leave it even if
+it has no constraints. However, this is only to make editing easier; if a view has
+no constraints when you run your layout on a device, it is drawn at
+position [0,0] (the top-left corner).</p>
+
+<p>In figure 2, the layout looks good in the
+editor, but there's no vertical constraint on <code>TextView B</code>. When this
+layout draws on a device, <code>TextView B</code> horizontally aligns with the left and
+right edges of the <code>ImageView</code>, but appears at the top of the screen because
+it has no vertical constraint.
+</p>
+
+<div class="cols">
+<div class="col-1of2">
+<img src="/training/constraint-layout/images/constraint-fail_2x.png" width="100%" alt="" />
+<p class="img-caption"><strong>Figure 2.</strong> <code>TextView B</code> is missing a
+vertical constraint</p>
+</div>
+<div class="col-1of2">
+<img src="/training/constraint-layout/images/constraint-fail-fixed_2x.png" width="100%" alt="" />
+<p class="img-caption"><strong>Figure 3.</strong> <code>TextView B</code> is now vertically
+constrained to the <code>ImageView</code></p>
+</div>
+</div>
+
+<p>
+Although a missing constraint won't cause a compilation error, the Layout Editor
+indicates missing constraints as an error in the toolbar. To view the errors and
+other warnings, click <strong>Show Warnings and Errors</strong>
+<img src="/studio/images/buttons/layout-editor-errors.png" class="inline-icon" alt="" />.
+To help you avoid missing constraints, the Layout Editor can automatically add
+constraints for you with the <a
+href="#use-autoconnect-and-infer-constraints">Autoconnect and infer
+constraints</a> features.
+</p>
+
+
+<h2 id="add-constraintlayout-to-your-project">Add ConstraintLayout to your project</h2>
+<p>
+To use <code>ConstraintLayout</code> in your project, proceed as follows:
+</p>
+
+<ol>
+<li>Ensure you have the latest Constraint Layout library:
+<ol>
+ <li>Click <strong>Tools > Android > SDK Manager</strong>.
+ <li>Click the <strong>SDK Tools</strong> tab.
+ <li>Expand <strong>Support Repository</strong> and then check
+<b>ConstraintLayout for Android</b> and <b>Solver for ConstraintLayout</b>.
+Check <b>Show Package Details</b> and take note of the version you're downloading
+(you'll need this below).</p>
+ <li>Click <strong>OK</strong>.
+<li>Add the ConstraintLayout library as a dependency in your module-level
+ <code>build.gradle</code> file:
+<pre>
+dependencies {
+ compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha8'
+}
+</pre>
+ <p>The library version you download may be higher, so be sure the value you specify
+ here matches the version from step 3.</p>
+</li>
+<li>In the toolbar or sync notification, click <strong>Sync Project with Gradle
+Files</strong>.</li>
+</ol>
+</li>
+</ol>
+
+<p>Now you're ready to build your layout with <code>ConstraintLayout</code>.</p>
+
+<h3 id="convert">Convert a layout</h3>
+
+<div class="figure" style="width:415px">
+<img src="/training/constraint-layout/images/layout-editor-convert-to-constraint_2x.png"
+ width="415" alt="" />
+<p class="img-caption">
+ <b>Figure 4.</b> The menu to convert a layout to <code>ConstraintLayout</code></p>
+</div>
+
+<p>To convert an existing layout to a constraint layout, follow these steps:</p>
+<ol>
+<li>Open your layout in Android Studio and click the <strong>Design</strong> tab
+at the bottom of the editor window.
+<li>In the <strong>Component Tree</strong> window, right-click the layout and
+click <strong>Convert <em>layout</em> to ConstraintLayout</strong>.</li>
+</ol>
+
+<h3 id="createNew">Create a new layout</h3>
+
+<p>To start a new constraint layout file, follow these steps:</p>
+<ol>
+<li>Click anywhere in the <strong>Project</strong> window and then select
+<strong>File > New > XML > Layout XML</strong>.
+<li>Enter a name for the layout file and enter
+"android.support.constraint.ConstraintLayout" for the <b>Root Tag</b>.
+<li>Click <strong>Finish</strong>.</li>
+</ol>
+
+
+<h2 id="add-a-constraint">Add a constraint</h2>
+
+<p>Start by dragging a view from the <b>Palette</b> window into the editor.
+When you add a view in a <code>ConstraintLayout</code>, it displays a bounding box with square
+resizing handles on each corner and circular constraint handles on each side.
+</p>
+
+
+<div class="figure" style="width:460px">
+<div class="video-wrapper">
+<video controls poster="/training/constraint-layout/images/thumbnail-studio-constraint-first.png"
+ onclick="this.play()" width="460">
+ <source src="https://storage.googleapis.com/androiddevelopers/videos/studio/studio-constraint-first.mp4" type="video/mp4">
+ <img src="/training/constraint-layout/images/thumbnail-studio-constraint-first" alt="" />
+</video>
+</div>
+<p class="img-caption">
+<strong>Video 1. </strong>The left side of a view is constrained to the left side of the parent
+</p>
+</div>
+
+<p>
+Click the view to select it. Then click-and-hold one of the
+constraint handles and drag the line to an available anchor point (the edge of
+another view, the edge of the layout, or a guideline). When you release, the
+constraint is made, with <a href="#adjust-the-view-margins">a default margin</a>
+separating the two views.
+</p>
+
+<p>When creating constraints, remember the following rules:</p>
+
+<ul>
+<li>Every view must have at least two constraints: one horizontal and one
+vertical.
+<li>You can create constraints only between a constraint handle and an anchor
+point that share the same plane. So a vertical plane (the left and right sides)
+of a view can be constrained only to another vertical plane; and baselines can
+constrain only to other baselines.
+<li>Each constraint handle can be used for just one constraint, but you can
+create multiple constraints (from different views) to the same anchor
+point.</li>
+</ul>
+
+
+
+<div class="figure" style="width:460px">
+<div class="video-wrapper">
+<video controls poster="/training/constraint-layout/images/thumbnail-studio-constraint-second.png"
+ onclick="this.play()" width="460">
+ <source src="https://storage.googleapis.com/androiddevelopers/videos/studio/studio-constraint-second.mp4" type="video/mp4">
+ <img src="/training/constraint-layout/images/thumbnail-studio-constraint-second.png" alt="" />
+</video>
+</div>
+<p class="img-caption">
+<strong>Video 2. </strong>Adding a constraint that opposes an existing one
+</p>
+</div>
+
+
+
+<p>
+To remove a constraint, select the view and then click the constraint handle.
+</p>
+
+<p>If you add opposing constraints on a view, the constraint lines become squiggly
+like a spring to indicate the opposing forces, as shown in video 2. The effect
+is most visible when the view size is set to "fixed" or "wrap content," in which
+case the view is centered between the constraints. If you instead
+want the view to stretch its size to meet the constraints, <a
+href="#adjust-the-view-size">switch the size to "any size"</a>; or if you want
+to keep the current size but move the view so that it is not centered, <a
+href="#adjust-the-constraint-bias">adjust the constraint bias</a>.
+</p>
+
+
+
+<p>
+There are many ways to constrain a view, but the following constraint types
+provide the basic building blocks.
+</p>
+
+
+
+
+<h3>Parent constraint</h3>
+<div class="cols">
+<div class="col-2of3">
+ <p>
+ Connect the side of a view to the corresponding edge of the layout.
+ <p>
+ In figure 5, the left side of a view is connected to the left edge of the
+ parent layout.
+ <p>
+</div>
+<div class="col-1of3">
+ <img src="/training/constraint-layout/images/parent-constraint_2x.png" width="100%" alt="">
+ <p class="img-caption"><strong>Figure 5. </strong>A horizontal constraint to the parent</p>
+</div>
+</div>
+
+
+<h3>Position constraint</h3>
+<div class="cols">
+<div class="col-2of3">
+<p>Define the order of appearance for two views, either vertically or horizontally.</p>
+<p>In figure 6, a <code>Button</code> is constrained below an <code>ImageView</code> with a 24dp
+margin.</p>
+</div>
+<div class="col-1of3">
+ <img src="/training/constraint-layout/images/position-constraint_2x.png" width="100%" alt="">
+ <p class="img-caption"><strong>Figure 6.</strong> A vertical position constraint</p>
+</div>
+</div>
+
+
+
+<h3>Alignment constraint</h3>
+<div class="cols">
+<div class="col-1of3">
+<p>Align the edge of a view to the same edge of another view.<p>
+<p>In figure 7, the left side of a <code>Button</code> is aligned to the left side of an
+<code>ImageView</code>.</p>
+<p>You can offset the alignment by dragging the view
+inward from the constraint. For example, figure 8 shows the same
+<code>Button</code> with a 24dp offset alignment.
+The offset is defined by the constrained view's margin.</p>
+</div>
+<div class="col-1of3">
+ <img src="/training/constraint-layout/images/alignment-constraint_2x.png" width="100%" alt="">
+ <p class="img-caption"><strong>Figure 7.</strong> A horizontal alignment constraint</p>
+</div>
+<div class="col-1of3">
+ <img src="/training/constraint-layout/images/alignment-constraint-offset_2x.png" width="100%"
+ alt="">
+ <p class="img-caption"><strong>Figure 8.</strong> An offset horizontal alignment constraint</p>
+</div>
+</div>
+
+
+<h3>Baseline alignment constraint</h3>
+<div class="cols">
+<div class="col-2of3">
+<p>Align the text baseline of a view to the text baseline of another view.</p>
+<p>In figure 9, the first line of a <code>TextView</code> is aligned with the text in a
+<code>Button</code>.</p>
+<p>To create a baseline constraint, hover your mouse over the baseline handle for
+two seconds until the handle blinks white. Then click and drag the line to
+another baseline.</p>
+</div>
+<div class="col-1of3">
+ <img src="/training/constraint-layout/images/baseline-constraint_2x.png" width="100%" alt="">
+ <p class="img-caption"><strong>Figure 9.</strong> A baseline alignment constraint</p>
+</div>
+</div>
+
+
+
+
+
+<h3 id="constrain-to-a-guideline">Constrain to a guideline</h3>
+<div class="cols">
+<div class="col-1of2">
+
+<p>
+You can add a vertical or horizontal guideline to which you can attach
+constraints. You can position the guideline within the layout based on either dp
+units or percent, relative to the layout's edge.
+</p>
+
+<p>
+To create a guideline, click <strong>Guidelines</strong>
+<img src="/studio/images/buttons/layout-editor-guidelines.png" class="inline-icon" alt="" />
+in the toolbar, and then click either <strong>Add Vertical Guideline</strong>
+or <strong>Add Horizontal Guideline</strong>.
+</p>
+
+<p>
+Click the circle at the edge of the guideline to toggle the measurements used to
+position the guideline (either percent or dp units from the layout's edge).
+</p>
+
+<p>
+Guidelines are not visible to your users.
+</p>
+</div>
+
+<div class="col-1of2">
+ <div class="video-wrapper">
+ <video controls poster="/training/constraint-layout/images/thumbnail-add-layout-guideline_2-2.png"
+ onclick="this.play()" width="100%">
+ <source src="https://storage.googleapis.com/androiddevelopers/videos/studio/add-layout-guideline_2-2.mp4" type="video/mp4">
+ <img src="/training/constraint-layout/images/thumbnail-add-layout-guideline_2-2.png" alt="" />
+ </video>
+ </div>
+ <p class="img-caption"><strong>Video 3.</strong> Adding a constraint to a guideline</p>
+</div>
+</div>
+
+
+<h2 id="use-autoconnect-and-infer-constraints">Use Autoconnect and Infer Constraints</h2>
+
+<div class="figure" style="width:460px">
+<div class="video-wrapper">
+<video controls poster=""
+ onclick="this.play()" width="460">
+ <source src="https://storage.googleapis.com/androiddevelopers/videos/studio/constraint-autoconnect_2-2.mp4" type="video/mp4">
+</video>
+</div>
+<p class="img-caption"><b>Video 4.</b> Adding a view with Autoconnect enabled</p>
+</div>
+
+<p>
+Autoconnect is a persistent mode that automatically creates two or more
+constraints for each view you add to the layout. Autoconnect is disabled by
+default. You can enable it by clicking <strong>Turn on Autoconnect</strong>
+<img src="/studio/images/buttons/layout-editor-autoconnect-on.png" class="inline-icon" alt="" />
+in the Layout Editor toolbar.
+</p>
+
+<p>While enabled, Autoconnect creates constraints for each view as you add them; it does not create
+constraints for existing views in the layout. If you drag a view once the constraints are made, the
+constraints do not change (though the margins do), so you must delete the constraints if you want to
+significantly reposition the view.</p>
+
+<p>Alternatively, you can click <strong>Infer Constraints</strong>
+<img src="/studio/images/buttons/layout-editor-infer.png" class="inline-icon" alt="" />
+to create constraints for all views in the layout.
+</p>
+
+<p>Infer Constraints is a one-time action that scans the entire layout to determine the most
+effective set of constraints for all views, so it may create constraints between elements that are
+far from each other. Autoconnect, however, creates constraints only for the view you are adding, and
+it creates constraints to only the nearest elements. In either case, you can always modify a
+constraint by clicking the constraint handle to delete it, and then create a new constraint.</p>
+
+
+<h2 id="adjust-the-view-size">Adjust the view size</h2>
+
+<p>
+You can use the handles on each corner of the view to resize it, but doing so
+hard codes the width and height values, which you should avoid for most views
+because hard-coded view sizes cannot adapt to different content and screen
+sizes. To select from one of the dynamic sizing modes or to define more specific
+dimensions, click a view and open the <strong>Properties</strong>
+<img src="/studio/images/buttons/window-properties.png" class="inline-icon" alt="" />
+window on the right side of the editor. At the top of the window is the view
+inspector, as shown in figure 10.
+</p>
+<div class="figure" style="width:287px" >
+<img src="/training/constraint-layout/images/layout-editor-properties-callouts_2-2_2x.png" alt=""
+ width="287" />
+<p class="img-caption"><strong>Figure 10.</strong> The <b>Properties</b> window includes controls for
+<strong>(1)</strong> view size, <strong>(2)</strong> margins, and
+<strong>(3)</strong> constraint bias.</p>
+</div>
+
+<p>
+The grey square represents the selected view. The symbols inside the square
+represent the height and width settings as follows:
+</p>
+
+<ul>
+<li>
+<img src="/studio/images/buttons/layout-width-wrap.png" class="inline-icon" alt="" />
+ <strong>Wrap Content</strong>: The view expands exactly as needed to fit its
+contents.
+<li>
+<img src="/studio/images/buttons/layout-width-match.png" class="inline-icon" alt="" />
+ <strong>Any Size</strong>: The view expands exactly as needed to match the
+constraints. The actual value is 0dp because the view has no desired dimensions, but
+it resizes as needed to meet the constraints. However, if the given dimension
+has only one constraint, then the view expands to fit its contents. Another way
+to think of it is "match constraints" (instead of <code>match_parent</code>) because it
+expands the view as much as possible after accounting for the limits of each
+constraint and its margins.
+<li>
+<img src="/studio/images/buttons/layout-width-fixed.png" class="inline-icon" alt="" />
+ <strong>Fixed</strong>: You specify the dimension in the text box below or by
+resizing the view in the editor.</li>
+</ul>
+
+<p>To toggle between these settings, click the symbols.</p>
+
+<p class="note"><strong>Note</strong>: You should not use <code>match_parent</code> for any view
+in a <code>ConstraintLayout</code>. Instead use "Any Size" (<code>0dp</code>).
+</p>
+
+
+<h2 id="adjust-the-constraint-bias">Adjust the constraint bias</h2>
+
+<p>When you add a constraint to both sides of a view (and the view size for the same dimension is
+either "fixed" or "wrap content"), the view becomes centered between the two anchor points by
+default. When a view is centered, the bias is 50%. You can adjust the bias by dragging the bias
+slider in the <b>Properties</b> window or by dragging the view, as shown in video 5.</p>
+
+<div class="video-wrapper" style="max-width:740px">
+<video controls poster="/training/constraint-layout/images/thumbnail-adjust-constraint-bias.png"
+ onclick="this.play();$(this.parentElement).addClass('playing');">
+ <source src="https://storage.googleapis.com/androiddevelopers/videos/studio/adjust-constraint-bias.mp4" type="video/mp4">
+ <img src="/training/constraint-layout/images/thumbnail-adjust-constraint-bias.png" alt="" />
+</video>
+</div>
+<p class="img-caption"><b>Video 5.</b> Adjusting the constraint bias</p>
+
+<p>If you instead want the view to stretch its size to meet the constraints, <a href="#adjust-the-
+view-size">switch the size to "any size"</a>.</p>
+
+
+<h2 id="adjust-the-view-margins">Adjust the view margins</h2>
+
+<p> To ensure that all your views are evenly spaced, click <strong>Margin</strong> <img
+src="/studio/images/buttons/layout-editor-margin.png" class="inline-icon" alt="" /> in the toolbar
+to select the default margin for each view that you add to the layout. The button changes to show
+your current margin selection. Any change you make to the default margin applies only to the views
+you add from then on. </p>
+
+
+<img src="/training/constraint-layout/images/layout-editor-margin-callout_2-2_2x.png"
+ alt="" width="232"/>
+<p class="img-caption"><strong>Figure 11.</strong> The toolbar's <b>Margin</b> button.
+Click to adjust the default margin.
+</p>
+
+<p> You can control the margin for each view in the <strong>Properties</strong> window by clicking
+the number on the line that represents each constraint (in figure 10, the margins are each set to
+16dp). </p>
+
+<p> All margins offered by the tool are factors of 8dp to help your views align to Material Design's
+<a href="https://material.google.com/layout/metrics-keylines.html">8dp square grid
+recommendations</a>. </p>
+
+</body>
+</html>
diff --git a/docs/html/training/implementing-navigation/nav-drawer.jd b/docs/html/training/implementing-navigation/nav-drawer.jd
index 679c240..8aebd4b 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/material/images/palette-library-color-profiles_2-1_2x.png b/docs/html/training/material/images/palette-library-color-profiles_2-1_2x.png
new file mode 100644
index 0000000..d14ec32
--- /dev/null
+++ b/docs/html/training/material/images/palette-library-color-profiles_2-1_2x.png
Binary files differ
diff --git a/docs/html/training/material/images/palette-library-title-text-color_2-1_2x.png b/docs/html/training/material/images/palette-library-title-text-color_2-1_2x.png
new file mode 100644
index 0000000..883adba
--- /dev/null
+++ b/docs/html/training/material/images/palette-library-title-text-color_2-1_2x.png
Binary files differ
diff --git a/docs/html/training/material/index.jd b/docs/html/training/material/index.jd
index 4001e6b..8baa065 100644
--- a/docs/html/training/material/index.jd
+++ b/docs/html/training/material/index.jd
@@ -3,7 +3,6 @@
page.image=images/cards/material_2x.png
page.metaDescription=Learn how to apply material design to your apps.
-
@jd:body
<div id="tb-wrapper">
@@ -58,6 +57,9 @@
<dt><a href="{@docRoot}training/material/compatibility.html">Maintaining Compatibility</a></dt>
<dd>Learn how to maintain compatibility with platform versions earlier than Android 5.0.</dd>
+
+ <dt><a href="{@docRoot}training/material/palette-colors.html">Selecting Colors with the Palette API</a></dt>
+ <dd>Learn how to select colors for your app using the v7 Palette library.</dd>
</dl>
<h2>Video Training</h2>
diff --git a/docs/html/training/material/palette-colors.html b/docs/html/training/material/palette-colors.html
new file mode 100644
index 0000000..27485d2
--- /dev/null
+++ b/docs/html/training/material/palette-colors.html
@@ -0,0 +1,310 @@
+<html devsite>
+<head>
+ <title>Selecting Colors with the Palette API</title>
+ <meta name="book_path" value="/training/_book.yaml" />
+ <meta name="top_category" value="develop" />
+ <meta name="subcategory" value="training" />
+</head>
+<body>
+
+<div id="tb-wrapper">
+ <div id="tb">
+ <h2>This lesson teaches you to</h2>
+ <ol>
+ <li><a href="#set-up-the-library">Set up the library</a></li>
+ <li><a href="#create-a-palette">Create a palette</a>
+ <ol>
+ <li><a href="#generate-a-palette-instance">Generate a Palette instance</a></li>
+ <li><a href="#customize-your-palette">Customize your palette</a></li>
+ </ol>
+ </li>
+ <li><a href="#extract-color-profiles">Extract color profiles</a>
+ <ol>
+ <li><a href="#use-swatches">Use swatches to create color schemes</a></li>
+ </ol>
+ </li>
+ </ol>
+ <h2>You should also read</h2>
+ <ul>
+ <li><a href="http://www.google.com/design/spec">Material design specification</a></li>
+ <li><a href="/design/material/index.html">Material design on Android</a></li>
+ </ul>
+ </div>
+</div>
+
+<p>Good visual design is essential for a successful app, and color schemes are a primary component of design. The palette library is a
+<a href="/topic/libraries/support-library/features.html#v7-palette">support library</a>
+that extracts prominent colors from images to help you create visually engaging apps.</p>
+
+<p>You can use the palette library to design layout
+<a href="/guide/topics/ui/themes.html">themes</a> and apply custom colors to visual elements in your app.
+For example, you can use a palette to create a color-coordinated title
+card for a song based on its album cover or to adjust an app’s toolbar color when its
+background image changes. The <code><a
+href="/reference/android/support/v7/graphics/Palette.html">Palette</a></code> object gives
+you access to the colors in a <code><a
+href="/reference/android/graphics/Bitmap.html">Bitmap</a></code>
+image while also providing six main color profiles from the bitmap to help
+inform your <a href="http://material.google.com">design choices</a>.</p>
+
+<h2 id="set-up-the-library">Set up the library</h2>
+
+<p>To use the palette library, install or update the <a
+href="/topic/libraries/support-library/index.html">Android
+Support Library</a> to version 24.0.0 or higher and follow the instructions for <a
+href="/topic/libraries/support-library/setup.html#add-library">Adding
+Support Libraries</a> to add the palette library to your app development project.</p>
+
+<p>Make sure that the version specified in your dependency identifier matches your
+app’s <code>compileSdkVersion</code>, set in the <code>build.gradle</code>
+file:</p>
+
+<pre class="prettyprint">
+android {
+ compileSdkVersion 24
+ ...
+}
+
+dependencies {
+ ...
+ compile 'com.android.support:palette-v7:24.2.1'
+}
+</pre>
+
+<p>For more information about adding the palette dependency, read about the palette
+feature in the <a
+href="/topic/libraries/support-library/features.html#v7-palette">support
+library documentation</a>.</p>
+
+<h2 id="create-a-palette">Create a palette</h2>
+
+<p>A <code>Palette</code> object gives you access to the primary colors in an
+image, as well as the corresponding colors for overlaid text. Use palettes to design
+your app’s style and to dynamically change your app’s color scheme based on a
+given source image.</p>
+
+<p>To create a palette, first instantiate a <code><a
+href="https://developer.android.com/reference/android/support/v7/graphics/Palette.Builder.html">Palette.Builder</a></code>
+from a <code>Bitmap</code>. You can then use the
+<code>Palette.Builder</code> to customize the palette before generating it. This
+section will describe palette generation and customization from a bitmap
+image.</p>
+
+<h3 id="generate-a-palette-instance">Generate a Palette instance</h3>
+
+<p>Generate a <code>Palette</code> instance using <code>Palette</code>’s
+<code><a
+href="/reference/android/support/v7/graphics/Palette.html#from(android.graphics.Bitmap)">from(Bitmap
+bitmap)</a></code> method to first create a <code>Palette.Builder</code>
+from a <code>Bitmap</code>. The builder can then generate the palette either
+synchronously or asynchronously.</p>
+
+<p>Use synchronous palette generation if you want to create the palette on
+the same thread as the method being called. If you generate the palette
+asynchronously on a different thread, use the <code><a
+href="/reference/android/support/v7/graphics/Palette.PaletteAsyncListener.html#onGenerated(android.support.v7.graphics.Palette)">onGenerated()</a></code>
+method to access the palette immediately after it has been created.</p>
+
+<p>The following code snippet provides example methods for both types of palette generation:</p>
+
+<pre class="prettyprint">
+// Generate palette synchronously and return it
+public Palette createPaletteSync(Bitmap bitmap) {
+ Palette p = Palette.from(bitmap).generate();
+ return p;
+}
+
+// Generate palette asynchronously and use it on a different
+// thread using onGenerated()
+public void createPaletteAsync(Bitmap bitmap) {
+ Palette.from(bitmap).generate(new PaletteAsyncListener() {
+ public void onGenerated(Palette p) {
+ // Use generated instance
+ }
+ });
+}
+</pre>
+
+<p>If you need to continuously generate palettes for a sorted list of images
+or objects, consider <a
+href="/reference/android/util/LruCache.html">caching</a>
+the <code>Palette</code> instances to prevent slow UI performance. You also
+should not create the palettes on your <a href="/training/articles/perf-anr.html">main thread</a>.</p>
+
+<h3 id="customize-your-palette">Customize your palette</h3>
+
+<p>The <code>Palette.Builder</code> allows you to customize your palette by
+choosing how many colors are in the resulting palette, what area of your
+image the builder uses to generate the palette, and what colors are allowed in the
+palette. For example, you can filter out the color black or ensure that the
+builder only uses the top half of an image to generate your palette.</p>
+
+<p>Fine-tune your palette’s size and colors with the following methods from
+the <code>Palette.Builder</code> class:</p>
+
+<dl>
+
+ <dt><code><a
+ href="/reference/android/support/v7/graphics/Palette.Builder.html#addFilter(android.support.v7.graphics.Palette.Filter)">addFilter()</a></code></dt>
+ <dd>This method adds a filter that indicates what colors are allowed in the
+ resulting palette. Pass in your own<code> <a
+ href="/reference/android/support/v7/graphics/Palette.Filter.html">Palette.Filter</a></code>
+ and modify its <code>isAllowed()</code> method to determine which colors are
+ filtered from the palette.</dd>
+
+ <dt><code><a
+ href="/reference/android/support/v7/graphics/Palette.Builder.html#maximumColorCount(int)">maximumColorCount()</a></code></dt>
+ <dd>This method sets the maximum number of colors in your palette. The
+ default value is 16, and the optimal value depends on the source image.
+ For landscapes, optimal values range from 8-16 while pictures with faces
+ usually have values that fall between 24-32. The
+ <code>Palette.Builder</code> takes longer to generate palettes with more
+ colors.</dd>
+
+ <dt><code><a
+ href="/reference/android/support/v7/graphics/Palette.Builder.html#setRegion(int,%20int,%20int,%20int)">setRegion()</a></code></dt>
+ <dd>This method indicates what area of the bitmap the builder uses when
+ creating the palette. You can only use this method when generating the palette from
+ a bitmap, and it does not affect the original image.</dd>
+
+ <dt><code><a
+ href="/reference/android/support/v7/graphics/Palette.Builder.html#addTarget(android.support.v7.graphics.Target)">addTarget()</a></code></dt>
+ <dd>This method allows you to perform your own color matching by adding a
+ <code><a
+ href="/reference/android/support/v7/graphics/Target.html">Target</a></code>
+ color profile to the builder. If the default <code>Target</code>s are not
+ sufficient, advanced developers can create their own <code>Target</code>s
+ using a <code><a
+ href="/reference/android/support/v7/graphics/Target.Builder.html">Target.Builder</a></code>.</dd>
+
+</dl>
+
+<h2 id="extract-color-profiles">Extract color profiles</h2>
+
+<p>Based on the <a
+href="https://material.google.com/style/color.html#">standards
+of material design</a>, the palette library extracts commonly used color
+profiles from an image. Each profile is defined by a <code><a
+href="/reference/android/support/v7/graphics/Target.html">Target</a></code>,
+and colors extracted from the bitmap image are scored against each profile
+based on saturation, luminance, and population (number of pixels in the bitmap
+represented by the color). For each profile, the color with the best score
+defines that color profile for the given image.</p>
+
+<p>By default, a <code>Palette</code> object contains 16 primary colors from
+a given image. When generating your palette, you can <a
+href="#customize-your-palette">customize</a> its number of colors using the
+<code>Palette.Builder</code>. Extracting more colors provides more potential
+matches for each color profile but also causes <code>Palette.Builder</code> to
+take longer when generating the palette.</p>
+
+<p>The palette library attempts to extract the following six color
+profiles:</p>
+
+<ul>
+ <li>Light Vibrant</li>
+ <li>Vibrant</li>
+ <li>Dark Vibrant</li>
+ <li>Light Muted</li>
+ <li>Muted</li>
+ <li>Dark Muted</li>
+</ul>
+
+<p>Each of <code>Palette</code>’s <code>get<<em>Profile</em>>Color()</code>
+methods returns the color in the palette associated with that particular profile,
+where <code><<em>Profile</em>></code> is replaced by the name of one of the six
+color profiles. For example, the method to get the Dark Vibrant color profile is <code><a
+href="/reference/android/support/v7/graphics/Palette.html#getDarkVibrantColor(int)">getDarkVibrantColor()</a></code>.
+Since not all images will contain all color profiles, you must also provide
+a default color to return.</p>
+
+<p>Figure 1 displays a photo and its corresponding color
+profiles from the <code>get<<em>Profile</em>>Color()</code> methods.</p>
+
+<img src="/training/material/images/palette-library-color-profiles_2-1_2x.png" alt="" width="624"/>
+
+<p class="img-caption"><strong>Figure 1.</strong> An example image and its
+extracted color profiles given the default maximum color count (16) for the palette.</p>
+
+<h3 id="use-swatches">Use swatches to create color schemes</h3>
+
+<p>The <code>Palette</code> class also generates <code><a
+href="/reference/android/support/v7/graphics/Palette.Swatch.html">Palette.Swatch</a></code>
+objects for each color profile. <code>Palette.Swatch</code>
+objects contain the associated color for that profile, as well as the
+color’s population in pixels.</p>
+
+<p>Swatches have additional methods for accessing more information about the color
+profile, such as HSL values and pixel population. You can use swatches to help
+create more comprehensive color schemes and app themes using the <code><a
+href="/reference/android/support/v7/graphics/Palette.Swatch.html#getBodyTextColor()">getBodyTextColor()</a></code>
+and <code><a
+href="/reference/android/support/v7/graphics/Palette.Swatch.html#getTitleTextColor()">getTitleTextColor()</a></code>
+methods. These methods return colors appropriate for use over the swatch’s
+color.</p>
+
+<p>Each of <code>Palette</code>’s <code>get<<em>Profile</em>>Swatch()</code>
+methods returns the swatch associated with that particular profile,
+where <code><<em>Profile</em>></code> is replaced by the name of one of the six
+color profiles. Although the palette’s <code>get<<em>Profile</em>>Swatch()</code> methods
+do not require default value parameters, they return <code>null</code> if that
+particular profile does not exist in the image. Therefore, you should check that
+a swatch is not null before using it. For example, the following method
+returns the Vibrant swatch from a palette if the swatch is not null:</p>
+
+<pre class="prettyprint">
+// Return a palette's vibrant swatch after checking that it exists
+private Palette.Swatch checkVibrantSwatch(Palette p) {
+ Palette.Swatch vibrant = p.getVibrantSwatch();
+ if (vibrant != null) {
+ return vibrant;
+ }
+ // Throw error
+}
+</pre>
+
+<p>To access all colors in a palette, the <code><a
+href="/reference/android/support/v7/graphics/Palette.html#getSwatches()">getSwatches()</a></code>
+method returns a list of all swatches generated from an
+image, including the standard six color profiles.</p>
+
+<p>The following snippet of code uses the methods from the above code snippets to
+synchronously generate a palette, get its vibrant swatch, and change the colors of a
+toolbar to match the bitmap image. Figure 2 displays the resulting image and toolbar.</p>
+
+<div class="cols">
+
+ <div class="col-2of3">
+
+<pre class="prettyprint">
+// Set the background and text colors of a toolbar given a
+// bitmap image to match
+public void setToolbarColor(Bitmap bitmap) {
+ // Generate the palette and get the vibrant swatch
+ // See the createPaletteSync() and checkVibrantSwatch() methods
+ // from the code snippets above
+ Palette p = createPaletteSync(bitmap);
+ Palette.Swatch vibrantSwatch = checkVibrantSwatch(p);
+
+ // Set the toolbar background and text colors
+ Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
+ toolbar.setBackgroundColor(vibrantSwatch.getRgb());
+ toolbar.setTitleTextColor(vibrantSwatch.getTitleTextColor());
+}
+</pre>
+
+ </div>
+
+ <div class="col-1of3">
+
+ <img src="/training/material/images/palette-library-title-text-color_2-1_2x.png" alt="" width="400"/>
+
+ <p class="img-caption"><strong>Figure 2.</strong> An example image with its
+ vibrant-colored toolbar and corresponding title text color.</p>
+
+ </div>
+
+</div>
+
+</body>
+</html>
diff --git a/docs/html/training/monitoring-device-state/doze-standby.jd b/docs/html/training/monitoring-device-state/doze-standby.jd
index 9250288..7caef402 100644
--- a/docs/html/training/monitoring-device-state/doze-standby.jd
+++ b/docs/html/training/monitoring-device-state/doze-standby.jd
@@ -306,25 +306,22 @@
</p>
<p>
- An app that is whitelisted can use the network and hold
-
- <a href="{@docRoot}reference/android/os/PowerManager.html#PARTIAL_WAKE_LOCK">
- partial wake locks</a> during Doze and
- App Standby. However, <strong>other restrictions still apply</strong> to the
- whitelisted app, just as they do to other apps. For example, the whitelisted
- app’s jobs and syncs are deferred, and its regular {@link android.app.AlarmManager} alarms do not
- fire. An app can check whether it is currently on the exemption whitelist by
- calling {@link
+ An app that is whitelisted can use the network and hold <a href=
+ "{@docRoot}reference/android/os/PowerManager.html#PARTIAL_WAKE_LOCK">partial
+ wake locks</a> during Doze and App Standby. However, <strong>other
+ restrictions still apply</strong> to the whitelisted app, just as they do to
+ other apps. For example, the whitelisted app’s jobs and syncs are deferred
+ (on API level 23 and below), and its regular {@link android.app.AlarmManager}
+ alarms do not fire. An app can check whether it is currently on the exemption
+ whitelist by calling {@link
android.os.PowerManager#isIgnoringBatteryOptimizations(java.lang.String)
isIgnoringBatteryOptimizations()}.
- </li>
</p>
<p>
Users can manually configure the whitelist in <strong>Settings > Battery
> Battery Optimization.</strong> Alternatively, the system provides
ways for apps to ask users to whitelist them.
-
</p>
<ul>
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/integration-testing/service-testing.jd b/docs/html/training/testing/integration-testing/service-testing.jd
index 60b95ca..7ba00b0 100644
--- a/docs/html/training/testing/integration-testing/service-testing.jd
+++ b/docs/html/training/testing/integration-testing/service-testing.jd
@@ -81,7 +81,7 @@
<a href="{@docRoot}training/testing/unit-testing/instrumented-unit-tests.html#build">
Create an Instrumented Unit Test Class</a>.</p>
-<p>To create an integration test for your service, add the {@code @RunWith(AndroidJUnit4.class)}
+<p>To create an integration test for your service, add the {@code @RunWith(AndroidJUnit4.class)}
annotation at the beginning of your test class definition. You also need to specify the
<a href="{@docRoot}reference/android/support/test/runner/AndroidJUnitRunner.html">
{@code AndroidJUnitRunner}</a> class that the Android Testing Support Library provides as your
@@ -91,7 +91,7 @@
<p>Next, create a
<a href="{@docRoot}reference/android/support/test/rule/ServiceTestRule.html">ServiceTestRule</a>
-instance in your test by using the {@code @Rule} annotation.</p>
+instance in your test by using the {@code @Rule} annotation.</p>
<pre>
@Rule
diff --git a/docs/html/training/testing/ui-testing/espresso-testing.jd b/docs/html/training/testing/ui-testing/espresso-testing.jd
index 7df67e7..d3d31de 100644
--- a/docs/html/training/testing/ui-testing/espresso-testing.jd
+++ b/docs/html/training/testing/ui-testing/espresso-testing.jd
@@ -188,9 +188,9 @@
{@code ActivityTestRule}</a> to reduce the amount of boilerplate code you need to write. By using
<a href="{@docRoot}reference/android/support/test/rule/ActivityTestRule.html">
{@code ActivityTestRule}</a>, the testing framework launches the activity under test
-before each test method annotated with {@code @Test} and before any method annotated with
-{@code @Before}. The framework handles shutting down the activity after the test finishes
-and all methods annotated with {@code @After} are run.</p>
+before each test method annotated with <code>@Test</code> and before any method annotated with
+<code>@Before</code>. The framework handles shutting down the activity after the test finishes
+and all methods annotated with <code>@After</code> are run.</p>
<pre>
package com.example.android.testing.espresso.BasicSample;
diff --git a/docs/html/training/testing/ui-testing/uiautomator-testing.jd b/docs/html/training/testing/ui-testing/uiautomator-testing.jd
index 5d42107..53f497a 100644
--- a/docs/html/training/testing/ui-testing/uiautomator-testing.jd
+++ b/docs/html/training/testing/ui-testing/uiautomator-testing.jd
@@ -172,7 +172,7 @@
<a href="{@docRoot}training/testing/unit-testing/instrumented-unit-tests.html#build">
Create an Instrumented Unit Test Class</a>.
</p>
-<p>Add the {@code @RunWith(AndroidJUnit4.class)} annotation at the beginning of your test class
+<p>Add the {@code @RunWith(AndroidJUnit4.class)} annotation at the beginning of your test class
definition. You also need to specify the
<a href="{@docRoot}reference/android/support/test/runner/AndroidJUnitRunner.html">
{@code AndroidJUnitRunner}</a> class
@@ -279,7 +279,7 @@
}
</pre>
-<p>In the example, the {@code @SdkSuppress(minSdkVersion = 18)} statement helps to ensure that
+<p>In the example, the {@code @SdkSuppress(minSdkVersion = 18)} statement helps to ensure that
tests will only run on devices with Android 4.3 (API level 18) or higher, as required by the
UI Automator framework.</p>
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 f65766d..dc94bdf 100644
--- a/docs/html/training/testing/unit-testing/instrumented-unit-tests.jd
+++ b/docs/html/training/testing/unit-testing/instrumented-unit-tests.jd
@@ -53,8 +53,9 @@
<p>In your Android Studio project, you must store the source files for
instrumented tests at
-<code><var>module-name</var>/src/androidTests/java/</code>. This directory
-already exists when you create a new project.</p>
+<code><var>module-name</var>/src/androidTest/java/</code>. This directory
+already exists when you create a new project and contains an example
+instrumented test.</p>
<p>Before you begin, you should
<a href="{@docRoot}tools/testing-support-library/index.html#setup">download
@@ -95,6 +96,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=
@@ -122,7 +136,7 @@
creating JUnit 4 test classes and using JUnit 4 assertions and annotations, see
<a href="local-unit-tests.html#build">Create a Local Unit Test Class</a>.
</p>
-<p>To create an instrumented JUnit 4 test class, add the {@code @RunWith(AndroidJUnit4.class)}
+<p>To create an instrumented JUnit 4 test class, add the {@code @RunWith(AndroidJUnit4.class)}
annotation at the beginning of your test class definition. You also need to specify the
<a href="{@docRoot}reference/android/support/test/runner/AndroidJUnitRunner.html">
{@code AndroidJUnitRunner}</a> class
@@ -200,8 +214,8 @@
class="external-link">{@code RunWith}</a> and
<a href="http://junit.sourceforge.net/javadoc/org/junit/runners/Suite.html"
class="external-link">{@code Suite}</a> classes. In your test suite, add the
-{@code @RunWith(Suite.class)} and the {@code @Suite.SuitClasses()} annotations. In
-the {@code @Suite.SuiteClasses()} annotation, list the individual test classes or test
+{@code @RunWith(Suite.class)} and the {@code @Suite.SuitClasses()} annotations. In
+the {@code @Suite.SuiteClasses()} annotation, list the individual test classes or test
suites as arguments.
</p>
@@ -279,23 +293,21 @@
of any app failures.</p>
<p>
- Before you can start using Firebase Test Lab, you need to:
+ Before you can start using Firebase Test Lab, you need to do the following
+unless you already have a Google account and a Firebase project with the Blaze
+billing plan enabled:
</p>
<ol>
- <li>
- <a href="https://console.developers.google.com/freetrial">Create a
- Google Cloud Platform account</a> to use with active billing.
- </li>
-
- <li>
- <a href="https://support.google.com/cloud/answer/6251787">Create a Google
- Cloud project</a> for your app.
- </li>
-
- <li>
- <a href="https://support.google.com/cloud/answer/6288653">Set up an active
- billing account</a> and associate it with the project you just created.
+ <li><a href="https://accounts.google.com/">Create a Google account</a>,
+ if you don't have one already.</li>
+ <li>In the <a href="https://console.firebase.google.com/">Firebase
+ console</a>, click <b>Create New Project</b>.</li>
+ <li>In the Firebase console, click <b>Upgrade</b>, and then click <b>Select
+Plan</b> in the <b>Blaze</b> plan column.
+ <p class="note"><b>Note</b>: To learn about billing,
+see <a href="https://firebase.google.com/docs/test-lab/overview#billing">Test
+Lab billing</a>.</p>
</li>
</ol>
@@ -305,10 +317,10 @@
</h4>
<p>
- Android Studio provides integrated tools that allow you to configure how you
- want to deploy your tests to Firebase Test Lab. After you have created a Google
- Cloud project with active billing, you can create a test configuration and
- run your tests:
+Android Studio provides integrated tools that allow you to configure how you
+want to deploy your tests to Firebase Test Lab. After you have created a
+Firebase project with Blaze plan billing, you can create a test configuration
+and run your tests:
</p>
<ol>
@@ -316,7 +328,8 @@
the main menu.
</li>
- <li>Click <strong>Add New Configuration (+)</strong> and select
+ <li>Click <strong>Add New Configuration</strong> <img
+src="/studio/images/buttons/ic_plus.png" alt="" class="inline-icon"/> and select
<strong>Android Tests</strong>.
</li>
@@ -327,7 +340,7 @@
</li>
<li>From the <em>Target</em> drop-down menu under <em>Deployment Target
- Options</em>, select <strong>Cloud Test Lab Device Matrix</strong>.
+ Options</em>, select <strong>Firebase Test Lab Device Matrix</strong>.
</li>
<li>If you are not logged in, click <strong>Connect to Google Cloud
@@ -335,9 +348,9 @@
</li>
<li>Next to <em>Cloud Project</em>, click the <img src=
- "{@docRoot}images/tools/as-wrench.png" alt="wrench and nut" style=
- "vertical-align:bottom;margin:0;"> button and select your Google Cloud
- Platform project from the list.
+ "{@docRoot}images/tools/as-wrench.png" alt="" class="inline-icon"/>
+ button and select your Firebase
+ project from the list.
</li>
</ol>
</li>
@@ -346,7 +359,7 @@
<ol type="a">
<li>Next to the <em>Matrix Configuration</em> drop-down list, click <strong>
Open Dialog</strong> <img src="{@docRoot}images/tools/as-launchavdm.png"
- alt="ellipses button" style="vertical-align:bottom;margin:0;">.
+ alt="" class="inline-icon">.
</li>
<li>Click <strong>Add New Configuration (+)</strong>.
@@ -372,8 +385,7 @@
</li>
<li>Run your tests by clicking <strong>Run</strong> <img src=
- "{@docRoot}images/tools/as-run.png" alt="" style=
- "vertical-align:bottom;margin:0;">.
+ "{@docRoot}images/tools/as-run.png" alt="" class="inline-icon"/>.
</li>
</ol>
@@ -391,7 +403,7 @@
When Firebase Test Lab completes running your tests, the <em>Run</em> window
will open to show the results, as shown in figure 2. You may need to click
<strong>Show Passed</strong> <img src="{@docRoot}images/tools/as-ok.png" alt=
- "" style="vertical-align:bottom;margin:0;"> to see all your executed tests.
+ "" class="inline-icon"/> to see all your executed tests.
</p>
<img src="{@docRoot}images/training/ctl-test-results.png" alt="">
@@ -403,15 +415,7 @@
<p>
You can also analyze your tests on the web by following the link displayed at
- the beginning of the test execution log in the <em>Run</em> window, as shown
- in figure 3.
-</p>
-
-<img src="{@docRoot}images/training/ctl-exec-log.png" alt="">
-
-<p class="img-caption">
- <strong>Figure 3.</strong> Click the link to view detailed test results on
- the web.
+ the beginning of the test execution log in the <em>Run</em> window.
</p>
<p>
diff --git a/docs/html/training/testing/unit-testing/local-unit-tests.jd b/docs/html/training/testing/unit-testing/local-unit-tests.jd
index 25b62fa..d19de4f 100644
--- a/docs/html/training/testing/unit-testing/local-unit-tests.jd
+++ b/docs/html/training/testing/unit-testing/local-unit-tests.jd
@@ -80,7 +80,7 @@
{@code junit.extensions} package.</p>
<p>To create a basic JUnit 4 test class, create a Java class that contains one or more test methods.
-A test method begins with the {@code @Test} annotation and contains the code to exercise
+A test method begins with the {@code @Test} annotation and contains the code to exercise
and verify a single functionality in the component that you want to test.</p>
<p>The following example shows how you might implement a local unit test class. The test method
@@ -112,12 +112,16 @@
returned result against the expected result.</p>
<h3 id="mocking-dependencies">Mock Android dependencies</h3>
-<p>
-By default, the <a href="{@docRoot}tools/building/plugin-for-gradle.html">
-Android Plug-in for Gradle</a> executes your local unit tests against a modified
-version of the {@code android.jar} library, which does not contain any actual code. Instead, method
-calls to Android classes from your unit test throw an exception.
-</p>
+
+<p>By default, the <a href=
+"{@docRoot}tools/building/plugin-for-gradle.html">Android Plug-in for
+Gradle</a> executes your local unit tests against a modified version of the
+{@code android.jar} library, which does not contain any actual code. Instead,
+method calls to Android classes from your unit test throw an exception. This is
+to make sure you test only your code and do not depend on any
+particular behavior of the Android platform (that you have not explicitly
+mocked).</p>
+
<p>
You can use a mocking framework to stub out external dependencies in your code, to easily test that
your component interacts with a dependency in an expected way. By substituting Android dependencies
@@ -136,11 +140,11 @@
<a href="#setup">Set Up Your Testing Environment</a>.
</li>
<li>At the beginning of your unit test class definition, add the
-{@code @RunWith(MockitoJUnitRunner.class)} annotation. This annotation tells the Mockito test
+{@code @RunWith(MockitoJUnitRunner.class)} annotation. This annotation tells the Mockito test
runner to validate that your usage of the framework is correct and simplifies the initialization of
your mock objects.
</li>
-<li>To create a mock object for an Android dependency, add the {@code @Mock} annotation before
+<li>To create a mock object for an Android dependency, add the {@code @Mock} annotation before
the field declaration.</li>
<li>To stub the behavior of the dependency, you can specify a condition and return
value when the condition is met by using the {@code when()} and {@code thenReturn()} methods.
@@ -195,6 +199,26 @@
class="external-link">sample code</a>.
</p>
+<p>If the exceptions thrown by Android APIs in the
+<code>android.jar</code> are problematic for your tests, you can change the behavior so that methods
+instead return either null or zero by adding the following configuration in your project's
+top-level <code>build.gradle</code> file:</p>
+
+<pre>
+android {
+ ...
+ testOptions {
+ unitTests.returnDefaultValues = true
+ }
+}
+</pre>
+
+<p class="caution"><strong>Caution:</strong>
+Setting the <code>returnDefaultValues</code> property to <code>true</code>
+should be done with care. The null/zero return values can introduce
+regressions in your tests, which are hard to debug and might allow failing tests
+to pass. Only use it as a last resort.</p>
+
<h2 id="run">Run Local Unit Tests</h2>
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/training/tv/playback/card.jd b/docs/html/training/tv/playback/card.jd
index a3a9872..2391185 100644
--- a/docs/html/training/tv/playback/card.jd
+++ b/docs/html/training/tv/playback/card.jd
@@ -43,7 +43,7 @@
on demand. In the browse fragment where your app presents its content to the user, you create a
{@link android.support.v17.leanback.widget.Presenter} for the content cards and pass it to the adapter
that adds the content to the screen. In the following code, the <code>CardPresenter</code> is created
-in the {@link android.support.v4.app.LoaderManager.LoaderCallbacks#onLoadFinished(android.support.v4.content.Loader, java.lang.Object) onLoadFinished()}
+in the {@link android.support.v4.app.LoaderManager.LoaderCallbacks#onLoadFinished onLoadFinished()}
callback of the {@link android.support.v4.app.LoaderManager}.</p>
<pre>
diff --git a/docs/html/training/tv/playback/index.jd b/docs/html/training/tv/playback/index.jd
index d5e4e67..34c6287 100644
--- a/docs/html/training/tv/playback/index.jd
+++ b/docs/html/training/tv/playback/index.jd
@@ -69,6 +69,10 @@
<dd>Learn how to use the Leanback support library to guide a user through a series of
decisions.</dd>
+ <dt><b><a href="onboarding.html">Introducing First-time Users to Your App</a></b></dt>
+ <dd>Learn how to use the Leanback support library to show first-time users
+ how to get the most out of your app.</dd>
+
<dt><b><a href="options.html">Enabling Background Playback</a></b></dt>
<dd>Learn how to continue playback when the user clicks on <strong>Home</strong>.</dd>
</dl>
diff --git a/docs/html/training/tv/playback/onboarding.jd b/docs/html/training/tv/playback/onboarding.jd
new file mode 100644
index 0000000..bb41bec
--- /dev/null
+++ b/docs/html/training/tv/playback/onboarding.jd
@@ -0,0 +1,377 @@
+page.title=Introducing First-time Users to Your App
+page.tags=tv,onboarding,OnboardingFragment
+page.keywords=tv,onboarding,OnboardingFragment
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>This lesson teaches you to</h2>
+ <ol>
+ <li><a href="#addFragment">Add an OnboardingFragment</a></li>
+ <li><a href="#pageContent">Add OnboardingFragment Pages</a></li>
+ <li><a href="#logoScreen">Add an Initial Logo Screen</a></li>
+ <li><a href="#pageAnimations">Customize Page Animations</a></li>
+ <li><a href="#themes">Customize Themes</a></li>
+ </ol>
+ <h2>Try it out</h2>
+ <ul>
+ <li><a class="external-link" href="https://github.com/googlesamples/androidtv-Leanback">Android
+ Leanback sample app</a></li>
+ </ul>
+</div>
+</div>
+
+<p>
+To show a first-time user how to get the most from your app, present
+onboarding information at app startup. Here are some examples of onboarding
+information:
+</p>
+
+<ul>
+<li>Present detailed information on which channels are available when a user
+first accesses a channel app.</li>
+<li>Call attention to noteworthy features in your app.</li>
+<li>Illustrate any required or recommended steps that users should take when
+using the app for the first time.</li>
+</ul>
+
+<p>The <a href=
+"{@docRoot}tools/support-library/features.html#v17-leanback">v17 Leanback
+support library</a> provides the
+{@link android.support.v17.leanback.app.OnboardingFragment} class for
+presenting first-time user information. This lesson describes how to use the
+{@link android.support.v17.leanback.app.OnboardingFragment} class to present
+introductory information that is shown when the app launches for the first
+time. {@link android.support.v17.leanback.app.OnboardingFragment} uses TV UI
+best practices to present the information in a way that matches TV UI styles,
+and is easy to navigate on TV devices.</p>
+
+<img src="{@docRoot}images/training/tv/playback/onboarding-fragment.png"
+srcset="{@docRoot}images/training/tv/playback/onboarding-fragment.png 1x,
+{@docRoot}images/training/tv/playback/onboarding-fragment_2x.png 2x" />
+<p class="img-caption"><strong>Figure 1.</strong> An example
+OnboardingFragment.</p>
+
+<p>Your {@link android.support.v17.leanback.app.OnboardingFragment} should
+not contain UI elements that require user input, such as buttons and fields.
+Similarly, it should not be used as a UI element for a task the user will do
+regularly. If you need to present a multi-page UI that requires
+user input, consider using a
+{@link android.support.v17.leanback.app.GuidedStepFragment}.</p>
+
+<h2 id="addFragment">Add an OnboardingFragment</h2>
+
+<p>To add an {@link android.support.v17.leanback.app.OnboardingFragment}
+to your app, implement a class that extends
+the {@link android.support.v17.leanback.app.OnboardingFragment} class. Add
+this fragment to an activity, either via the activity's layout XML, or
+programmatically. Make sure the activity or
+fragment is using a theme derived from
+{@link android.support.v17.leanback.R.style#Theme_Leanback_Onboarding},
+as described in <a href="#themes">Customize Themes</a>.</p>
+
+<p>In the {@link android.app.Activity#onCreate onCreate()} method of your
+app's main activity, call
+{@link android.app.Activity#startActivity startActivity()}
+with an {@link android.content.Intent} that points to your
+{@link android.support.v17.leanback.app.OnboardingFragment OnboardingFragment's}
+parent activity. This ensures that your
+{@link android.support.v17.leanback.app.OnboardingFragment} appears as
+soon as your app starts.<p>
+
+<p>To ensure that the
+{@link android.support.v17.leanback.app.OnboardingFragment} only appears the
+first time that the user starts your app, use a
+{@link android.content.SharedPreferences} object
+to track whether the user has already viewed the
+{@link android.support.v17.leanback.app.OnboardingFragment}. Define a boolean
+value that changes to true when the user finishes viewing the
+{@link android.support.v17.leanback.app.OnboardingFragment}. Check
+this value in your main activity’s
+{@link android.app.Activity#onCreate onCreate()}, and only start the
+{@link android.support.v17.leanback.app.OnboardingFragment} parent activity if
+the value is false. The following example shows an override of
+{@link android.app.Activity#onCreate onCreate()} that checks for a
+{@link android.content.SharedPreferences} value and, if not set to true, calls
+{@link android.app.Activity#startActivity startActivity()} to
+show the {@link android.support.v17.leanback.app.OnboardingFragment}:</p>
+
+<pre>
+@Override
+protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+ SharedPreferences sharedPreferences =
+ PreferenceManager.getDefaultSharedPreferences(this);
+ // Check if we need to display our OnboardingFragment
+ if (!sharedPreferences.getBoolean(
+ MyOnboardingFragment.COMPLETED_ONBOARDING_PREF_NAME, false)) {
+ // The user hasn't seen the OnboardingFragment yet, so show it
+ startActivity(new Intent(this, OnboardingActivity.class));
+ }
+}
+</pre>
+
+<p>After the user views the
+{@link android.support.v17.leanback.app.OnboardingFragment}, mark it as viewed
+using the {@link android.content.SharedPreferences} object. To do this, in your
+{@link android.support.v17.leanback.app.OnboardingFragment}, override
+{@link android.support.v17.leanback.app.OnboardingFragment#onFinishFragment
+onFinishFragment()} and set your {@link android.content.SharedPreferences} value
+to true, as shown in the following example:
+
+<pre>
+@Override
+protected void onFinishFragment() {
+ super.onFinishFragment();
+ // User has seen OnboardingFragment, so mark our SharedPreferences
+ // flag as completed so that we don't show our OnboardingFragment
+ // the next time the user launches the app.
+ SharedPreferences.Editor sharedPreferencesEditor =
+ PreferenceManager.getDefaultSharedPreferences(getContext()).edit();
+ sharedPreferencesEditor.putBoolean(
+ COMPLETED_ONBOARDING_PREF_NAME, true);
+ sharedPreferencesEditor.apply();
+}
+</pre>
+
+<h2 id="pageContent">Add OnboardingFragment Pages</h2>
+
+<p>After you add your
+{@link android.support.v17.leanback.app.OnboardingFragment}, you need to define
+the onboarding pages. An
+{@link android.support.v17.leanback.app.OnboardingFragment} displays content
+in a series of ordered pages. Each page can have a title, description, and
+several sub-views that can contain images or animations.</p>
+
+<img src="{@docRoot}images/training/tv/playback/onboarding-fragment-diagram.png"
+/><p class="img-caption"><strong>Figure 2.</strong> OnboardingFragment
+page elements.
+</p>
+
+<p>Figure 2 shows an example page with callouts marking customizable page
+elements that your {@link android.support.v17.leanback.app.OnboardingFragment}
+can provide. The page elements are:</p>
+
+<ol>
+<li>The page title.</li>
+<li>The page description.</li>
+<li>The page content view, in this case a simple green checkmark in a grey box.
+This view is optional. Use this view to illustrate page details such as a
+screenshot that highlights the app feature that the page describes.</li>
+<li>The page background view, in this case a simple blue gradient. This view
+always renders behind other views on the page. This view is optional.</li>
+<li>The page foreground view, in this case a logo. This view always renders
+in front of all other views on the page. This view is optional.</li>
+</ol>
+
+<p>Initialize page information when your
+{@link android.support.v17.leanback.app.OnboardingFragment} is first created
+or attached to the parent activity, as the system requests page
+information when it creates the fragment's view. You can initialize page
+information in your class constructor or in an override of
+{@link android.app.Fragment#onAttach onAttach()}.</p>
+
+<p>Override each of the following methods that provide page information
+to the system:</p>
+
+<ul>
+<li>{@link android.support.v17.leanback.app.OnboardingFragment#getPageCount
+getPageCount()} returns the number of pages in your
+{@link android.support.v17.leanback.app.OnboardingFragment}.</li>
+<li>{@link android.support.v17.leanback.app.OnboardingFragment#getPageTitle
+getPageTitle()} returns the title for the requested page number.</li>
+<li>{@link android.support.v17.leanback.app.OnboardingFragment#getPageDescription
+getPagedescription()} returns the description for the requested page
+number.</li>
+</ul>
+
+<p>Override each of the following methods to provide optional sub-views used
+to display images or animations:</p>
+
+<ul>
+<li>{@link android.support.v17.leanback.app.OnboardingFragment#onCreateBackgroundView
+onCreateBackgroundView()} returns a {@link android.view.View} that you
+create to act as the background view, or null if no background view is needed.
+<li>{@link android.support.v17.leanback.app.OnboardingFragment#onCreateContentView
+onCreateContentView()} returns a {@link android.view.View} that you
+create to act as the content view, or null if no content view is needed.
+<li>{@link android.support.v17.leanback.app.OnboardingFragment#onCreateForegroundView
+onCreateForegroundView()} returns a {@link android.view.View} that you
+create to act as the foreground view, or null if no foreground view is needed.
+</ul>
+
+<p>The system adds the {@link android.view.View} that you create to the page
+layout. The following example overrides
+{@link android.support.v17.leanback.app.OnboardingFragment#onCreateContentView
+onCreateContentView()} and returns an {@link android.widget.ImageView}:</p>
+
+<pre>
+private ImageView mContentView;
+...
+@Override
+protected View onCreateContentView(LayoutInflater inflater, ViewGroup container) {
+ mContentView = new ImageView(getContext());
+ mContentView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
+ mContentView.setImageResource(R.drawable.onboarding_content_view);
+ mContentView.setPadding(0, 32, 0, 32);
+ return mContentView;
+}
+</pre>
+
+<h2 id="logoScreen">Add an Initial Logo Screen</h2>
+
+<p>Your {@link android.support.v17.leanback.app.OnboardingFragment} can start
+with an optional logo screen that introduces your app. If you want to display
+a {@link android.graphics.drawable.Drawable} as your logo screen, in your
+{@link android.support.v17.leanback.app.OnboardingFragment OnboardingFragment's}
+{@link android.app.Fragment#onCreate onCreate()} method, call
+{@link android.support.v17.leanback.app.OnboardingFragment#setLogoResourceId
+setLogoResourceId()} with the ID of your
+{@link android.graphics.drawable.Drawable}. The
+system will fade in and briefly display this
+{@link android.graphics.drawable.Drawable}, and then fade out the
+{@link android.graphics.drawable.Drawable}
+before displaying the first page of your
+{@link android.support.v17.leanback.app.OnboardingFragment}.</p>
+
+<p>If you want to provide a custom animation for your logo screen, instead of
+calling
+{@link android.support.v17.leanback.app.OnboardingFragment#setLogoResourceId
+setLogoResourceId()}, override
+{@link android.support.v17.leanback.app.OnboardingFragment#onCreateLogoAnimation
+onCreateLogoAnimation()} and return an {@link android.animation.Animator}
+object that renders your custom animation, as shown in the following example:
+</p>
+
+<pre>
+@Override
+public Animator onCreateLogoAnimation() {
+ return AnimatorInflater.loadAnimator(mContext,
+ R.animator.onboarding_logo_screen_animation);
+}
+</pre>
+
+<h2 id="pageAnimations">Customize Page Animations</h2>
+
+<p>The system uses default animations when displaying the first page of your
+{@link android.support.v17.leanback.app.OnboardingFragment} and when the user
+navigates to a different page. You can customize these animations by
+overriding methods in your
+{@link android.support.v17.leanback.app.OnboardingFragment}.</p>
+
+<p>To customize the animation that appears on your first page,
+override
+{@link android.support.v17.leanback.app.OnboardingFragment#onCreateEnterAnimation
+onCreateEnterAnimation()} and return an {@link android.animation.Animator}.
+The following example creates an
+{@link android.animation.Animator} that scales the content view
+horizontally:</p>
+
+<pre>
+@Override
+protected Animator onCreateEnterAnimation() {
+ Animator startAnimator = ObjectAnimator.ofFloat(mContentView,
+ View.SCALE_X, 0.2f, 1.0f).setDuration(ANIMATION_DURATION);
+ return startAnimator;
+}
+</pre>
+
+<p>To customize the animation used when the user navigates to a different page,
+override
+{@link android.support.v17.leanback.app.OnboardingFragment#onPageChanged
+onPageChanged()}. In your
+{@link android.support.v17.leanback.app.OnboardingFragment#onPageChanged
+onPageChanged()} method, create {@link android.animation.Animator Animators}
+that remove the previous page and display the next page, add these to an
+{@link android.animation.AnimatorSet}, and play the set. The following
+example uses a fade-out animation to remove the previous page, updates the
+content view image, and uses a fade-in animation to display the next page:</p>
+
+<pre>
+@Override
+protected void onPageChanged(final int newPage, int previousPage) {
+ // Create a fade-out animation used to fade out previousPage and, once
+ // done, swaps the contentView image with the next page's image.
+ Animator fadeOut = ObjectAnimator.ofFloat(mContentView,
+ View.ALPHA, 1.0f, 0.0f).setDuration(ANIMATION_DURATION);
+ fadeOut.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ mContentView.setImageResource(pageImages[newPage]);
+ }
+ });
+ // Create a fade-in animation used to fade in nextPage
+ Animator fadeIn = ObjectAnimator.ofFloat(mContentView,
+ View.ALPHA, 0.0f, 1.0f).setDuration(ANIMATION_DURATION);
+ // Create AnimatorSet with our fade-out and fade-in animators, and start it
+ AnimatorSet set = new AnimatorSet();
+ set.playSequentially(fadeOut, fadeIn);
+ set.start();
+}
+</pre>
+
+<p>For more details about how to create
+{@link android.animation.Animator Animators} and
+{@link android.animation.AnimatorSet AnimatorSets}, see
+<a href="https://developer.android.com/guide/topics/graphics/prop-animation.html">
+Property Animations</a>.</p>
+
+<h2 id="themes">Customize Themes</h2>
+
+<p>Any {@link android.support.v17.leanback.app.OnboardingFragment}
+implementation must use either the
+{@link android.support.v17.leanback.R.style#Theme_Leanback_Onboarding} theme
+or a theme that inherits from
+{@link android.support.v17.leanback.R.style#Theme_Leanback_Onboarding}. Set the
+theme for your {@link android.support.v17.leanback.app.OnboardingFragment} by
+doing one of the following:</p>
+
+<ul>
+<li>Set the {@link android.support.v17.leanback.app.OnboardingFragment
+OnboardingFragment's} parent activity to use the desired theme. The following
+example shows how to set an activity to use
+{@link android.support.v17.leanback.R.style#Theme_Leanback_Onboarding} in the
+app manifest:
+<pre>
+<activity
+ android:name=".OnboardingActivity"
+ android:enabled="true"
+ android:exported="true"
+ android:theme="@style/Theme.Leanback.Onboarding">
+</activity>
+</pre>
+</li>
+<li>
+Set the theme in the parent activity by using the
+{@link android.support.v17.leanback.R.styleable#LeanbackOnboardingTheme_onboardingTheme}
+attribute in a custom activity theme. Point this attribute to another
+custom theme that only the
+{@link android.support.v17.leanback.app.OnboardingFragment}
+objects in your activity use. Use this approach if your activity already uses
+a custom theme and you don't want to apply
+{@link android.support.v17.leanback.app.OnboardingFragment} styles to other
+views in the activity.
+</li>
+<li>Override
+{@link android.support.v17.leanback.app.OnboardingFragment#onProvideTheme
+onProvideTheme()} and return the desired theme. Use this approach if
+multiple activities use your
+{@link android.support.v17.leanback.app.OnboardingFragment}
+or if the parent activity can't use the desired theme.
+The following example overrides
+{@link android.support.v17.leanback.app.OnboardingFragment#onProvideTheme
+onProvideTheme()} and returns
+{@link android.support.v17.leanback.R.style#Theme_Leanback_Onboarding}:
+<pre>
+@Override
+public int onProvideTheme() {
+ return R.style.Theme_Leanback_Onboarding;
+}
+</pre>
+</li>
+</ul>
\ No newline at end of file
diff --git a/docs/html/training/tv/playback/picture-in-picture.jd b/docs/html/training/tv/playback/picture-in-picture.jd
new file mode 100644
index 0000000..e48ae48
--- /dev/null
+++ b/docs/html/training/tv/playback/picture-in-picture.jd
@@ -0,0 +1,242 @@
+page.title=Adding Picture-in-picture
+page.keywords=preview,sdk,PIP,Picture-in-picture
+page.tags=androidn
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>In this document</h2>
+<ol>
+ <li><a href="#declaring">Declaring Your Activity Supports
+Picture-in-picture</a></li>
+ <li><a href="#pip_button">Switching Your Activity to Picture-in-picture</a>
+</li>
+ <li><a href="#handling_ui">Handling UI During Picture-in-picture</a>
+</li>
+ <li><a href="#continuing_playback">Continuing Video Playback While in
+Picture-in-picture</a></li>
+ <li><a href="#single_playback">Using a Single Playback Activity for
+Picture-in-picture</a></li>
+ <li><a href="#best">Best Practices</a></li>
+</ol>
+
+<h2>See Also</h2>
+<ol>
+ <li><a href="{@docRoot}preview/features/multi-window.html">Multi-Window
+Support</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>In Android 7.0, Android TV users can now watch a video
+in a pinned window in a corner of the screen when navigating within or
+between apps. Picture-in-picture (PIP) mode lets apps run a video
+activity in the pinned window while another activity continues in the
+background. The PIP window lets users multitask while using Android TV,
+which helps users be more productive.</p>
+
+<p>Your app can decide when to trigger PIP mode. Here are some examples of
+when to enter PIP mode:</p>
+
+<ul>
+<li>Your app can move a video into PIP mode when the user navigates
+back from the video to browse other content.</li>
+<li>Your app can switch a video into PIP mode while a user watches the end
+of an episode of content. The main screen displays promotional or summary
+information about the next episode in the series.</li>
+<li>Your app can provide a way for users to queue up additional content while
+they watch a video. The video continues playing in PIP mode while the main
+screen displays a content selection activity.</li>
+</ul>
+
+<p>The PIP window is 240x135 dp and is shown at the top-most layer in one of
+the four corners of the screen, chosen by the system. The user can bring up a
+PIP menu that lets them toggle the PIP window to full-screen, or close the PIP
+window, by holding down the <b>Home</b> button on the remote. If another
+video starts playing on the main screen, the PIP window is automatically
+closed.</p>
+
+<img src="{@docRoot}images/android-7.0/pip-active.png" />
+<p class="img-caption"><strong>Figure 1.</strong> A Picture-in-picture
+video visible in a corner of the screen while the user browses content
+on the main screen.</p>
+
+<p>PIP leverages the multi-window APIs available in Android 7.0 to
+provide the pinned video overlay window. To add PIP to your app, you need to
+register your activities that support PIP, switch your activity to PIP mode as
+needed, and make sure UI elements are hidden and video playback continues when
+the activity is in PIP mode.</p>
+
+<h2 id="declaring">Declaring Your Activity Supports Picture-in-picture</h2>
+
+<p>By default, the system does not automatically support PIP for apps.
+If you want support PIP in your app, register your video
+activity in your manifest by setting
+<code>android:supportsPictureInPicture</code> and
+<code>android:resizeableActivity</code> to <code>true</code>. Also, specify
+that your activity handles layout configuration changes so that your activity
+doesn't relaunch when layout changes occur during PIP mode transitions.</p>
+
+<pre>
+<activity android:name="VideoActivity"
+ android:resizeableActivity="true"
+ android:supportsPictureInPicture="true"
+ android:configChanges=
+ "screenSize|smallestScreenSize|screenLayout|orientation"
+ ...
+</pre>
+
+<p>When registering your activity, keep in mind that in PIP mode, your
+activity is shown in a small overlay window on a TV screen. Video playback
+activities with minimal UI provide the best user experience. Activities that
+contain small UI elements might not provide a good user experience
+when switched to PIP mode, because users can't see details of the UI elements
+in the PIP window.</p>
+
+<h2 id="pip_button">Switching Your Activity to Picture-in-picture</h2>
+
+When you need to switch your activity into PIP mode, call
+{@link android.app.Activity#enterPictureInPictureMode
+enterPictureInPictureMode()}. The following example
+switches to PIP mode when the user selects a dedicated PIP button on a media
+control bar:</p>
+
+<pre>
+@Override
+public void onActionClicked(Action action) {
+ if (action.getId() == R.id.lb_control_picture_in_picture) {
+ getActivity().enterPictureInPictureMode();
+ return;
+ }
+ ...
+</pre>
+
+<p>Adding a PIP button to your media control bar lets your user easily switch
+to PIP mode while controlling video playback.</p>
+
+<img src="{@docRoot}images/android-7.0/pip-button.png" />
+<p class="img-caption"><strong>Figure 1.</strong> A Picture-in-picture
+button on a media control bar.</p>
+
+<p>Android 7.0 includes a
+{@link android.support.v17.leanback.widget.PlaybackControlsRow.PictureInPictureAction
+PlaybackControlsRow.PictureInPictureAction} class which defines
+control bar PIP actions and uses the PIP icon.</p>
+
+<h2 id="handling_ui">Handling UI During Picture-in-picture</h2>
+
+<p>When your activity enters PIP mode, your activity should only show video
+playback. Remove UI elements before your activity enters PIP,
+and restore these elements when your activity becomes full-screen again.
+Override {@link android.app.Activity#onPictureInPictureModeChanged
+Activity.onPictureInPictureModeChanged()} or
+{@link android.app.Fragment#onPictureInPictureModeChanged
+Fragment.onPictureInPictureModeChanged()} and enable or
+disable your UI elements as needed, for example:</p>
+
+<pre>
+@Override
+public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode) {
+ if (isInPictureInPictureMode) {
+ // Hide the controls in picture-in-picture mode.
+ ...
+ } else {
+ // Restore the playback UI based on the playback status.
+ ...
+ }
+}
+</pre>
+
+<h2 id="continuing_playback">Continuing Video Playback While in
+Picture-in-picture</h2>
+
+<p>When your activity switches to PIP, the system considers the activity in a
+paused state, and calls your activity's {@link android.app.Activity#onPause
+onPause()} method. Video playback should not be paused and should continue
+playing if the activity is paused due to PIP mode.</p>
+
+<p>In Android 7.0, you should pause and resume video playback when the system
+calls your activity's {@link android.app.Activity#onStop onStop()} and
+{@link android.app.Activity#onStart onStart()}. By doing this, you can avoid
+having to check if your app is in PIP mode in
+{@link android.app.Activity#onPause onPause()} and explicitly
+continuing playback.</p>
+
+<p>If you have to pause playback in your {@link android.app.Activity#onPause
+onPause()} implementation, check for PIP mode by calling {@code
+isInPictureInPictureMode()} and handle playback appropriately, for example:</p>
+
+<pre>
+@Override
+public void onPause() {
+ // If called while in PIP mode, do not pause playback
+ if (isInPictureInPictureMode()) {
+ // Continue playback
+ ...
+ }
+ // If paused but not in PIP, pause playback if necessary
+ ...
+}
+</pre>
+
+<p>When your activity switches out of PIP mode back to full-screen mode, the
+system resumes your activity and calls your
+{@link android.app.Activity#onResume onResume()} method.</p>
+
+<h2 id="single_playback">Using a Single Playback Activity for
+Picture-in-picture</h2>
+
+<p>In your app, a user might select a new video when browsing for content on
+the main screen, while a video playback activity is in PIP mode. Play the new
+video in the existing playback activity in full screen mode, instead of
+launching a new activity that might confuse the user.</p>
+
+<p>To ensure a single activity is used for video playback requests and
+switched into or out of PIP mode as needed, set the activity's
+<code>android:launchMode</code> to <code>singleTask</code> in your manifest:
+</p>
+
+<pre>
+<activity android:name="VideoActivity"
+ ...
+ android:supportsPictureInPicture="true"
+ android:launchMode="singleTask"
+ ...
+</pre>
+
+<p>In your activity, override {@link android.app.Activity#onNewIntent
+onNewIntent()} and handle the new video, stopping any existing video
+playback if needed.</p>
+
+<h2 id="best">Best Practices</h2>
+
+<p>PIP is intended for activities that play full-screen video. When switching
+your activity into PIP mode, avoid showing anything except video content.
+Track when your activity enters PIP mode and hide UI elements, as described
+in <a href="#handling_ui">Handling UI During Picture-in-picture</a>.</p>
+
+<p>Since the PIP window is shown as a floating window in the corner of the
+screen, you should avoid showing critical information in the main screen
+in any area that can be obscured by the PIP window.</p>
+
+<p>When an activity is in PIP mode, by default it doesn't get input focus. To
+receive input events while in PIP mode, use
+{@link android.media.session.MediaSession#setCallback
+MediaSession.setCallback()}. For more information on using
+{@link android.media.session.MediaSession#setCallback setCallback()} see
+<a href="{@docRoot}training/tv/playback/now-playing.html">Displaying
+a Now Playing Card</a>.</p>
+
+<p>When your app is in PIP mode, video playback in the PIP window can cause
+audio interference with another app, such as a music player app or voice search
+app. To avoid this, request audio focus when you start playing the video,
+and handle audio focus change notifications, as described in
+<a href="{@docRoot}training/managing-audio/audio-focus.html">Managing Audio
+Focus</a>. If you receive notification of audio focus loss when in PIP mode,
+pause or stop video playback.</p>
diff --git a/docs/html/training/tv/start/hardware.jd b/docs/html/training/tv/start/hardware.jd
index 97cf7ff..0639871 100644
--- a/docs/html/training/tv/start/hardware.jd
+++ b/docs/html/training/tv/start/hardware.jd
@@ -227,13 +227,19 @@
</tr>
<tr>
<td>{@link android.Manifest.permission#ACCESS_COARSE_LOCATION}</td>
- <td>{@code android.hardware.location} <em>and</em> <br>
- {@code android.hardware.location.network}</td>
+ <td>
+ <p>{@code android.hardware.location}</p>
+ <p>{@code android.hardware.location.network} (Target API level 20 or lower
+ only.)</p>
+ </td>
</tr>
<tr>
<td>{@link android.Manifest.permission#ACCESS_FINE_LOCATION}</td>
- <td>{@code android.hardware.location} <em>and</em> <br>
- {@code android.hardware.location.gps}</td>
+ <td>
+ <p>{@code android.hardware.location}</p>
+ <p>{@code android.hardware.location.gps} (Target API level 20 or lower
+ only.)</p>
+ </td>
</tr>
</table>
@@ -246,6 +252,13 @@
required ({@code android:required="false"}).
</p>
+<p class="note">
+ <strong>Note:</strong> If your app targets Android 5.0 (API level 21) or
+ higher and uses the <code>ACCESS_COARSE_LOCATION</code> or
+ <code>ACCESS_FINE_LOCATION</code> permission, users can still install your
+ app on a TV device, even if the TV device doesn't have a network card or a GPS
+ receiver.
+</p>
<h3 id="check-features">Checking for hardware features</h2>
diff --git a/docs/html/training/tv/tif/content-recording.jd b/docs/html/training/tv/tif/content-recording.jd
new file mode 100644
index 0000000..ffdd14c
--- /dev/null
+++ b/docs/html/training/tv/tif/content-recording.jd
@@ -0,0 +1,171 @@
+page.title=Supporting Content Recording
+page.keywords=tv,recording,channel,tif
+page.tags=tv, tif
+helpoutsWidget=true
+
+trainingnavtop=true
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+ <h2>In this document</h2>
+ <ol>
+ <li><a href="#supporting">Indicating Support for Recording</a></li>
+ <li><a href="#recording">Recording a Session</a></li>
+ <li><a href="#errors">Handling Recording Errors</a></li>
+ <li><a href="#sessions">Managing Recorded Sessions</a></li>
+ <li><a href="#best">Best Practices</a></li>
+ </ol>
+</div>
+</div>
+
+<p>TV input services let the user pause and resume channel playback via
+time-shifting APIs. Android 7.0 expands on time-shifting
+by letting the user save multiple recorded sessions.</p>
+
+<p>Users can schedule recordings in advance, or start a recording as they watch
+a program. Once the system has saved a recording, the user can browse, manage,
+and play back the recording using the system TV app.</p>
+
+<p>If you want to provide recording functionality for your TV input service,
+you must indicate to the system that your app supports recording, implement
+the ability to record programs, handle and communicate any errors that occur
+during recording, and manage your recorded sessions.</p>
+
+<p class="note"><strong>Note:</strong> The Live Channels app does not yet
+provide a way for users to create or access recordings. Until changes are
+made to the Live Channels app, it may be difficult to fully test the recording
+experience for your TV input service.</p>
+
+<h2 id="supporting">Indicating Support for Recording</h2>
+
+<p>To tell the system that your TV input service supports recording, set
+the <code>android:canRecord</code> attribute in your service metadata XML file
+to <code>true</code>:
+</p>
+
+<pre>
+<tv-input xmlns:android="http://schemas.android.com/apk/res/android"
+ <b>android:canRecord="true"</b>
+ android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />
+</pre>
+
+<p>For more information on the service metadata file, see
+<a href="{@docRoot}training/tv/tif/tvinput.html#manifest">Declare Your TV Input
+Service in the Manifest</a>.
+</p>
+
+<p>Alternatively, you can indicate recording support in your code using
+these steps:</p>
+
+<ol>
+<li>In your TV input service {@link android.app.Service#onCreate onCreate()}
+method, create a new {@link android.media.tv.TvInputInfo} object using the
+{@link android.media.tv.TvInputInfo.Builder TvInputInfo.Builder} class.</li>
+<li>When creating the new {@link android.media.tv.TvInputInfo} object, call
+{@link android.media.tv.TvInputInfo.Builder#setCanRecord
+setCanRecord(true)} before calling
+{@link android.media.tv.TvInputInfo.Builder#build build()} to indicate your
+service supports recording.</li>
+<li>Register your {@link android.media.tv.TvInputInfo} object with the
+system by calling
+{@link android.media.tv.TvInputManager#updateTvInputInfo
+TvInputManager.updateTvInputInfo()}.</li>
+</ol>
+
+<h2 id="recording">Recording a Session</h2>
+
+<p>After your TV input service registers that it supports recording
+functionality, the system calls your
+{@link android.media.tv.TvInputService#onCreateRecordingSession
+TvInputService.onCreateRecordingSession()} method when it needs to access
+your app's recording implementation. Implement your own
+{@link android.media.tv.TvInputService.RecordingSession
+TvInputService.RecordingSession} subclass and return it
+when the {@link android.media.tv.TvInputService#onCreateRecordingSession
+onCreateRecordingSession()} callback fires. This subclass is responsible
+for switching to the correct channel data, recording the requested data,
+and communicating recording status and errors to the system.</p>
+
+<p>When the system calls
+{@link android.media.tv.TvInputService.RecordingSession#onTune
+RecordingSession.onTune()}, passing in a channel URI, tune to the channel
+that the URI specifies. Notify the system that your app has tuned to the
+desired channel by calling
+{@link android.media.tv.TvInputService.RecordingSession#notifyTuned
+notifyTuned()} or, if your app could not tune to the proper channel, call
+{@link android.media.tv.TvInputService.RecordingSession#notifyError
+notifyError()}.</p>
+
+<p>The system next invokes the
+{@link android.media.tv.TvInputService.RecordingSession#onStartRecording
+RecordingSession.onStartRecording()} callback. Your app must start recording
+immediately. When the system invokes this callback, it may provide a URI
+that contains information about the program that is about to be recorded.
+When the recording is done, you'll copy this data to the
+{@link android.media.tv.TvContract.RecordedPrograms RecordedPrograms}
+data table.</p>
+
+<p>Finally, the system calls
+{@link android.media.tv.TvInputService.RecordingSession#onStopRecording
+RecordingSession.onStopRecording()}. At this point, your app must stop
+recording immediately. You also need to create an entry in the
+{@link android.media.tv.TvContract.RecordedPrograms RecordedPrograms}
+table. This entry should include the recorded session data URI in the
+{@link android.media.tv.TvContract.RecordedPrograms#COLUMN_RECORDING_DATA_URI
+RecordedPrograms.COLUMN_RECORDING_DATA_URI} column, and any program
+information that the system provided in the initial call to
+{@link android.media.tv.TvInputService.RecordingSession#onStartRecording
+onStartRecording()}.</p>
+
+<p>For more details on how to access the
+{@link android.media.tv.TvContract.RecordedPrograms RecordedPrograms} table
+see <a href="#sessions">Managing Recorded Sessions</a>.</p>
+
+<h2 id="errors">Handling Recording Errors</h2>
+
+<p>If an error occurs during recording, resulting in unusable recorded data,
+notify the system by calling
+{@link android.media.tv.TvInputService.RecordingSession#notifyError
+notifyError()}. Similarly, you can call
+{@link android.media.tv.TvInputService.RecordingSession#notifyError
+notifyError()} after a recording session is created to let the system know
+that your app can no longer record sessions.</p>
+
+<p>If an error occurs during recording, but you'd like to provide a
+partial recording to users for playback, call
+{@link android.media.tv.TvInputService.RecordingSession#notifyRecordingStopped
+notifyRecordingStopped()} to enable the system to
+use the partial session.</p>
+
+<h2 id="sessions">Managing Recorded Sessions</h2>
+
+<p>The system maintains information for all recorded sessions from all
+recording-capable channel apps in the
+{@link android.media.tv.TvContract.RecordedPrograms RecordedPrograms}
+content provider table. This information is accessible via the
+{@link android.media.tv.TvContract.RecordedPrograms RecordedPrograms}
+content recording URIs. Use content provider APIs to
+read, add, and delete entries from this table.</p>
+
+<p>For more information on working with content provider data see
+<a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
+Content Provider Basics</a>.</p>
+
+<h2 id="best">Best Practices</h2>
+
+<p>TV devices may have limited storage, so use your best judgment when
+allocating storage to save recorded sessions. Use
+{@link android.media.tv.TvRecordingClient.RecordingCallback#onError
+RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)} when
+there isn't enough space to save a recorded session.</p>
+
+<p>When the user initiates recording, you should start recording data as soon
+as possible. To facilitate this, complete any up-front time-consuming tasks,
+like accessing and allocating storage space, when the system invokes the
+{@link android.media.tv.TvInputService#onCreateRecordingSession
+onCreateRecordingSession()} callback. Doing so lets you start
+recording immediately when the
+{@link android.media.tv.TvInputService.RecordingSession#onStartRecording
+onStartRecording()} callback fires.</p>
diff --git a/docs/html/training/wearables/data-layer/events.jd b/docs/html/training/wearables/data-layer/events.jd
index 20f219d..db0ffcf6 100644
--- a/docs/html/training/wearables/data-layer/events.jd
+++ b/docs/html/training/wearables/data-layer/events.jd
@@ -242,7 +242,7 @@
per manifest, multiple intent filters per service, multiple actions per filter,
and multiple data stanzas per filter. Filters can match on a wildcard host or on
a specific one. To match on a wildcard host, use {@code host="*"}. To match
-on a specific host, specify {@code host=<node_id>}.
+on a specific host, specify {@code host=<node_id>}.
</p>
<p>
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/_project.yaml b/docs/html/wear/_project.yaml
new file mode 100644
index 0000000..2a94274
--- /dev/null
+++ b/docs/html/wear/_project.yaml
@@ -0,0 +1,5 @@
+name: "Wear"
+home_url: /wear/
+description: "Small, powerful devices, worn on the body. Useful information when you need it most."
+content_license: cc3-apache2
+buganizer_id: 30209417
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/_project.yaml b/docs/html/work/_project.yaml
new file mode 100644
index 0000000..9db0466
--- /dev/null
+++ b/docs/html/work/_project.yaml
@@ -0,0 +1,5 @@
+name: "Work"
+home_url: /work/
+description: "Develop apps for Android for Work to take advantage of security and management features built into Android."
+content_license: cc3-apache2
+buganizer_id: 30209417
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/docs/image_sources/training/tv/playback/onboarding-fragment-diagram.graffle.zip b/docs/image_sources/training/tv/playback/onboarding-fragment-diagram.graffle.zip
new file mode 100644
index 0000000..89a799b
--- /dev/null
+++ b/docs/image_sources/training/tv/playback/onboarding-fragment-diagram.graffle.zip
Binary files differ
diff --git a/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java b/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java
index 6762bea..ee67807 100644
--- a/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java
+++ b/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java
@@ -208,7 +208,7 @@
/**
* In order to avoid breaking old apps, we only throw exception on invalid VectorDrawable
- * animations * for apps targeting N and later. For older apps, we ignore (i.e. quietly skip)
+ * animations for apps targeting N and later. For older apps, we ignore (i.e. quietly skip)
* these animations.
*
* @return whether invalid animations for vector drawable should be ignored.
diff --git a/graphics/java/android/graphics/drawable/DrawableContainer.java b/graphics/java/android/graphics/drawable/DrawableContainer.java
index d5143da..cc7f5c7 100644
--- a/graphics/java/android/graphics/drawable/DrawableContainer.java
+++ b/graphics/java/android/graphics/drawable/DrawableContainer.java
@@ -851,8 +851,8 @@
private Drawable prepareDrawable(Drawable child) {
child.setLayoutDirection(mLayoutDirection);
- child.setCallback(mOwner);
child = child.mutate();
+ child.setCallback(mOwner);
return child;
}
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/ImageReader.java b/media/java/android/media/ImageReader.java
index ec2d4bc..ea51d4c 100644
--- a/media/java/android/media/ImageReader.java
+++ b/media/java/android/media/ImageReader.java
@@ -520,6 +520,31 @@
}
}
+ /**
+ * Discard any free buffers owned by this ImageReader.
+ *
+ * <p>
+ * Generally, the ImageReader caches buffers for reuse once they have been
+ * allocated, for best performance. However, sometimes it may be important to
+ * release all the cached, unused buffers to save on memory.
+ * </p>
+ * <p>
+ * Calling this method will discard all free cached buffers. This does not include any buffers
+ * associated with Images acquired from the ImageReader, any filled buffers waiting to be
+ * acquired, and any buffers currently in use by the source rendering buffers into the
+ * ImageReader's Surface.
+ * <p>
+ * The ImageReader continues to be usable after this call, but may need to reallocate buffers
+ * when more buffers are needed for rendering.
+ * </p>
+ * @hide
+ */
+ public void discardFreeBuffers() {
+ synchronized (mCloseLock) {
+ nativeDiscardFreeBuffers();
+ }
+ }
+
@Override
protected void finalize() throws Throwable {
try {
@@ -872,6 +897,7 @@
private synchronized native void nativeReleaseImage(Image i);
private synchronized native Surface nativeGetSurface();
private synchronized native int nativeDetachImage(Image i);
+ private synchronized native void nativeDiscardFreeBuffers();
/**
* @return A return code {@code ACQUIRE_*}
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/media/jni/android_media_ImageReader.cpp b/media/jni/android_media_ImageReader.cpp
index c3993ae..724fc02 100644
--- a/media/jni/android_media_ImageReader.cpp
+++ b/media/jni/android_media_ImageReader.cpp
@@ -611,6 +611,23 @@
return OK;
}
+static void ImageReader_discardFreeBuffers(JNIEnv* env, jobject thiz) {
+ ALOGV("%s:", __FUNCTION__);
+ JNIImageReaderContext* ctx = ImageReader_getContext(env, thiz);
+ if (ctx == NULL) {
+ jniThrowException(env, "java/lang/IllegalStateException", "ImageReader was already closed");
+ return;
+ }
+
+ BufferItemConsumer* bufferConsumer = ctx->getBufferConsumer();
+ status_t res = bufferConsumer->discardFreeBuffers();
+ if (res != OK) {
+ ALOGE("Buffer discard failed: %s (%d)", strerror(-res), res);
+ jniThrowRuntimeException(env,
+ "nativeDicardFreebuffers failed");
+ }
+}
+
static jobject ImageReader_getSurface(JNIEnv* env, jobject thiz)
{
ALOGV("%s: ", __FUNCTION__);
@@ -773,6 +790,7 @@
{"nativeImageSetup", "(Landroid/media/Image;)I", (void*)ImageReader_imageSetup },
{"nativeGetSurface", "()Landroid/view/Surface;", (void*)ImageReader_getSurface },
{"nativeDetachImage", "(Landroid/media/Image;)I", (void*)ImageReader_detachImage },
+ {"nativeDiscardFreeBuffers", "()V", (void*)ImageReader_discardFreeBuffers }
};
static const JNINativeMethod gImageMethods[] = {
diff --git a/packages/MtpDocumentsProvider/res/values-am/strings.xml b/packages/MtpDocumentsProvider/res/values-am/strings.xml
new file mode 100644
index 0000000..7b721c8
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-am/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"የMTP አስተናጋጅ"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"የወረዱ"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"ፋይሎችን ከ<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> በመድረስ ላይ"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"ሌላኛው መሣሪያ ሥራ በዝቶበታል። እስከሚገኝ ድረስ ፋይሎችን ማስተላለፍ አይችሉም።"</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"ምንም ፋይሎች አልተገኙም። ሌላኛው መሣሪያ ተቆልፎ ሊሆን ይችላል። ተቆልፎ ከሆነ ይክፈቱት እና እንደገና ይሞክሩ።"</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-ar/strings.xml b/packages/MtpDocumentsProvider/res/values-ar/strings.xml
new file mode 100644
index 0000000..284a860
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-ar/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"مضيف بروتوكول نقل الوسائط (MTP)"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"التنزيلات"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"جارٍ الوصول إلى الملفات من <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"الجهاز الآخر مشغول، ولا يمكنك نقل الملفات إلا بعد أن يصبح متاحًا."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"لم يتم العثور على ملفات، وربما يكون الجهاز الآخر في وضع القفل. إذا كان الأمر كذلك، فعليك إلغاء قفله وإعادة المحاولة."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-az-rAZ/strings.xml b/packages/MtpDocumentsProvider/res/values-az-rAZ/strings.xml
new file mode 100644
index 0000000..e8ed124
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-az-rAZ/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP Host"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Endirmələr"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Fayllara <xliff:g id="DEVICE_MODEL">%1$s</xliff:g> cihazından daxil olunur"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Digər cihaz məşğuldur. Əlçatan olmayana kimi fayl köçürə bilməzsiniz."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Fayl tapılmadı. Digər cihaz kilidlənmiş ola bilər. Elədirsə, kiliddən çıxarın və yenidən cəhd edin."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-b+sr+Latn/strings.xml b/packages/MtpDocumentsProvider/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..bc900996
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP host"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Preuzimanja"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Pristup datotekama sa uređaja <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Drugi uređaj je zauzet. Datoteke možete da prenesete tek kad on postane dostupan."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Nije pronađena nijedna datoteka. Drugi uređaj je možda zaključan. Ako jeste, otključajte ga i pokušajte ponovo."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-be-rBY/strings.xml b/packages/MtpDocumentsProvider/res/values-be-rBY/strings.xml
new file mode 100644
index 0000000..f6263ac
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-be-rBY/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"Вузел MTP"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Спампоўкі"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Доступ да файлаў з <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Іншая прылада занята. Вы не можаце перадаць файлы, пакуль яна не стане даступнай."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Файлы не знойдзены. Іншая прылада можа быць заблакіравана. Калі гэта так, разблакіруйце яе і паўтарыце спробу."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-bg/strings.xml b/packages/MtpDocumentsProvider/res/values-bg/strings.xml
new file mode 100644
index 0000000..52d3119
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-bg/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP хост"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Изтегляния"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="STORAGE_NAME">%2$s</xliff:g> на <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"От <xliff:g id="DEVICE_MODEL">%1$s</xliff:g> се осъществява достъп до файловете"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Другото устройство е заето. Не можете да прехвърляте файлове, докато то не се освободи."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Няма намерени файлове. Другото устройство може да е заключено. Ако е така, отключете го и опитайте отново."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-bn-rBD/strings.xml b/packages/MtpDocumentsProvider/res/values-bn-rBD/strings.xml
new file mode 100644
index 0000000..7fad89e
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-bn-rBD/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP হোস্ট"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"ডাউনলোডগুলি"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> থেকে ফাইলগুলিকে অ্যাক্সেস করা হচ্ছে"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"অন্য ডিভাইসটি ব্যস্ত আছে৷ এটি উপলব্ধ না হওয়া পর্যন্ত আপনি ফাইলগুলিকে স্থানান্তর করতে পারবেন না৷"</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"কোনো ফাইল পাওয়া যায়নি৷ অন্য ডিভাইসটি লক থাকতে পারে৷ যদি তাই হয়, তাহলে এটিকে আনলক করে আবার চেষ্টা করুন৷"</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-bs-rBA/strings.xml b/packages/MtpDocumentsProvider/res/values-bs-rBA/strings.xml
new file mode 100644
index 0000000..33323f8
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-bs-rBA/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP Host"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Preuzimanja"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Pristupanje datotekama iz uređaja <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Drugi uređaj je zauzet. Nećete moći prenositi fajlove dok ne bude dostupan."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Fajlovi nisu pronađeni. Moguće je da je drugi uređaj zaključan. Ako jeste, otključajte ga i pokušajte ponovo."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-ca/strings.xml b/packages/MtpDocumentsProvider/res/values-ca/strings.xml
new file mode 100644
index 0000000..b2aa599
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-ca/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"Amfitrió MTP"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Baixades"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="STORAGE_NAME">%2$s</xliff:g> de <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"S\'està accedint als fitxers del dispositiu <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"L\'altre dispositiu està ocupat. No pots transferir fitxers fins que estigui disponible."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"No s\'han trobat fitxers. És possible que l\'altre dispositiu estigui bloquejat. Si és així, desbloqueja\'l i torna-ho a provar."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-cs/strings.xml b/packages/MtpDocumentsProvider/res/values-cs/strings.xml
new file mode 100644
index 0000000..2156e8c
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-cs/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"Hostitel MTP"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Stahování"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> – <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Používání souborů ze zařízení <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Druhé zařízení je zaneprázdněné. Dokud nebude dostupné, soubory nelze přenést."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Nebyly nalezeny žádné soubory. Druhé zařízení je možná uzamčené. Pokud ano, odemkněte jej a zkuste to znovu."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-da/strings.xml b/packages/MtpDocumentsProvider/res/values-da/strings.xml
new file mode 100644
index 0000000..b82c5e8
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-da/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP-host"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Downloads"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Adgang til filer fra <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Den anden enhed er optaget. Du kan ikke overføre filer, før den er tilgængelig."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Der blev ikke fundet nogen filer. Den anden enhed er muligvis låst. Hvis dette er tilfældet, skal du låse den op og prøve igen."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-de/strings.xml b/packages/MtpDocumentsProvider/res/values-de/strings.xml
new file mode 100644
index 0000000..9a71c76
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-de/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP-Host"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Downloads"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="STORAGE_NAME">%2$s</xliff:g> von <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Zugriff auf Dateien von <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Das andere Gerät ist nicht verfügbar. Du kannst die Dateien übertragen, sobald das Gerät wieder verfügbar ist."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Keine Dateien gefunden. Das andere Gerät ist möglicherweise gesperrt. Entsperre es in diesem Fall und versuche es noch einmal."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-el/strings.xml b/packages/MtpDocumentsProvider/res/values-el/strings.xml
new file mode 100644
index 0000000..562d295
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-el/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"Κεντρικός υπολογιστής MTP"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Λήψεις"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Πρόσβαση στα αρχεία από τη συσκευή <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Η άλλη συσκευή είναι απασχολημένη. Δεν μπορείτε να μεταφέρετε αρχεία μέχρι να γίνει διαθέσιμη."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Δεν βρέθηκαν αρχεία. Η άλλη συσκευή ενδέχεται να είναι κλειδωμένη. Εάν ισχύει αυτό, ξεκλειδώστε την και δοκιμάστε ξανά."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-en-rAU/strings.xml b/packages/MtpDocumentsProvider/res/values-en-rAU/strings.xml
new file mode 100644
index 0000000..5f2167e
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-en-rAU/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP Host"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Downloads"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Accessing files from <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"The other device is busy. You can\'t transfer files until it\'s available."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"No files found. The other device may be locked. If so, unlock it and try again."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-en-rGB/strings.xml b/packages/MtpDocumentsProvider/res/values-en-rGB/strings.xml
new file mode 100644
index 0000000..5f2167e
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-en-rGB/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP Host"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Downloads"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Accessing files from <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"The other device is busy. You can\'t transfer files until it\'s available."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"No files found. The other device may be locked. If so, unlock it and try again."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-en-rIN/strings.xml b/packages/MtpDocumentsProvider/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..5f2167e
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-en-rIN/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP Host"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Downloads"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Accessing files from <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"The other device is busy. You can\'t transfer files until it\'s available."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"No files found. The other device may be locked. If so, unlock it and try again."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-es-rUS/strings.xml b/packages/MtpDocumentsProvider/res/values-es-rUS/strings.xml
new file mode 100644
index 0000000..740d224
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-es-rUS/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"Host MTP"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Descargas"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Accediendo a los archivos de <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"El otro dispositivo está ocupado. No podrás transferir archivos hasta que esté disponible."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"No se encontraron archivos. Es posible que el otro dispositivo esté bloqueado. Si es así, desbloquéalo y vuelve a intentarlo."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-es/strings.xml b/packages/MtpDocumentsProvider/res/values-es/strings.xml
new file mode 100644
index 0000000..d80a75a
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-es/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"Host de MTP"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Descargas"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="STORAGE_NAME">%2$s</xliff:g> de <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Accediendo a los archivos desde <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"El otro dispositivo está ocupado. No se pueden transferir archivos hasta que esté disponible."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"No se ha encontrado ningún archivo. Es posible que el otro dispositivo esté bloqueado. Si es así, desbloquéalo y vuelve a intentarlo."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-et-rEE/strings.xml b/packages/MtpDocumentsProvider/res/values-et-rEE/strings.xml
new file mode 100644
index 0000000..7568777
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-et-rEE/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP host"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Allalaadimised"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g>, <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Juurdepääsemine failidele seadmest <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Teine seade on hõivatud. Te ei saa faile üle viia enne, kui see seade on saadaval."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Faile ei leitud. Teine seade võib olla lukustatud. Kui see on nii, avage see ja proovige uuesti."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-eu-rES/strings.xml b/packages/MtpDocumentsProvider/res/values-eu-rES/strings.xml
new file mode 100644
index 0000000..dc9d463
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-eu-rES/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP ostalaria"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Deskargak"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> gailuko fitxategiak atzitzen"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Beste gailua lanpetuta dago. Erabilgarri egon arte ezingo duzu transferitu fitxategirik."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Ez da aurkitu fitxategirik. Baliteke beste gailua blokeatuta egotea. Hala bada, desblokea ezazu eta saiatu berriro."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-fa/strings.xml b/packages/MtpDocumentsProvider/res/values-fa/strings.xml
new file mode 100644
index 0000000..9ac58c7
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-fa/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"میزبان MTP"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"بارگیریها"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"دسترسی به فایلها از <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"دستگاه دیگر مشغول است. تا زمانی که این دستگاه دردسترس قرار نگیرد نمیتوانید فایلها را منتقل کنید."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"فایلی پیدا نشد. دستگاه دیگر ممکن است قفل باشد. اگر اینطور است، قفل آن را باز کنید و دوباره تلاش کنید."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-fi/strings.xml b/packages/MtpDocumentsProvider/res/values-fi/strings.xml
new file mode 100644
index 0000000..0a61d08
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-fi/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP-isäntä"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Lataukset"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Käytetään laitteen <xliff:g id="DEVICE_MODEL">%1$s</xliff:g> tiedostoja"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Toinen laite on varattu. Et voi siirtää tiedostoja, ennen kuin se on käytettävissä."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Tiedostoja ei löytynyt. Toinen laite voi olla lukittu. Jos näin on, avaa se ja yritä uudelleen."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-fr-rCA/strings.xml b/packages/MtpDocumentsProvider/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..281760e
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-fr-rCA/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"Hôte MTP"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Téléchargements"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Accès aux fichiers à partir de l\'appareil <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"L\'autre appareil est occupé. Vous devez attendre qu\'il soit disponible pour transférer des fichiers."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Aucun fichier trouvé. L\'autre appareil est peut-être verrouillé. Si c\'est le cas, déverrouillez-le, puis réessayez."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-fr/strings.xml b/packages/MtpDocumentsProvider/res/values-fr/strings.xml
new file mode 100644
index 0000000..96c713b
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-fr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"Hôte MTP"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Téléchargements"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="STORAGE_NAME">%2$s</xliff:g> – <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Accès aux fichiers depuis le <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>…"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"L\'autre appareil est occupé. Vous devez attendre qu\'il soit disponible pour transférer des fichiers."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Aucun fichier trouvé. L\'autre appareil est peut-être verrouillé. Si tel est le cas, déverrouillez-le, puis réessayez."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-gl-rES/strings.xml b/packages/MtpDocumentsProvider/res/values-gl-rES/strings.xml
new file mode 100644
index 0000000..54bf4a9
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-gl-rES/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"Host MTP"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Descargas"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="STORAGE_NAME">%2$s</xliff:g> de <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Accedendo aos ficheiros de <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"O outro dispositivo está ocupado. Non podes transferir ficheiros ata que estea dispoñible."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Non se atopou ningún ficheiro. Se o outro dispositivo está bloqueado, desbloquéao e téntao de novo."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-gu-rIN/strings.xml b/packages/MtpDocumentsProvider/res/values-gu-rIN/strings.xml
new file mode 100644
index 0000000..40ec38d
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-gu-rIN/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP હોસ્ટ"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"ડાઉનલોડ્સ"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> ની ફાઇલોને ઍક્સેસ કરી રહ્યાં છે"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"અન્ય ઉપકરણ વ્યસ્ત છે. તે ઉપલબ્ધ ન થાય ત્યાં સુધી તમે ફાઇલોને સ્થાનાંતરિત કરી શકતાં નથી."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"કોઈ ફાઇલો મળી નહીં. અન્ય ઉપકરણ લૉક કરેલ હોઈ શકે છે. જો આમ હોય, તો તેને અનલૉક કરો અને ફરી પ્રયાસ કરો."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-hi/strings.xml b/packages/MtpDocumentsProvider/res/values-hi/strings.xml
new file mode 100644
index 0000000..1cf1c03
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-hi/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP होस्ट"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"डाउनलोड"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> से फ़ाइलें एक्सेस कर रहा है"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"दूसरा डिवाइस व्यस्त है. आप उसके उपलब्ध हो जाने तक फ़ाइलें स्थानांतरित नहीं कर सकते हैं."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"कोई फ़ाइल नहीं मिली. हो सकता है कि दूसरा डिवाइस लॉक हो. यदि ऐसा है, तो उसे अनलॉक करें और पुन: प्रयास करें."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-hr/strings.xml b/packages/MtpDocumentsProvider/res/values-hr/strings.xml
new file mode 100644
index 0000000..63fc5c7
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-hr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP host"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Preuzimanja"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g><xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Pristupanje datotekama s uređaja <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Drugi je uređaj zauzet. Datoteke ćete moći prenijeti kada postane dostupan."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Datoteke nisu pronađene. Drugi je uređaj možda zaključan. U tom ga slučaju otključajte i pokušajte ponovo."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-hu/strings.xml b/packages/MtpDocumentsProvider/res/values-hu/strings.xml
new file mode 100644
index 0000000..e5b822c
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-hu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP Host"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Letöltések"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Hozzáférés a fájlokhoz a következő eszközről: <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"A másik eszköz elfoglalt. Nem vihetők át fájlok addig, amíg rendelkezésre nem áll."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Nem található fájl. Lehet, hogy a másik eszköz zárolva van. Ha igen, oldja fel, és próbálkozzon újra."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-hy-rAM/strings.xml b/packages/MtpDocumentsProvider/res/values-hy-rAM/strings.xml
new file mode 100644
index 0000000..3a6bfb5
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-hy-rAM/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP խնամորդ"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Ներբեռնումներ"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Մուտք է գործում ֆայլեր <xliff:g id="DEVICE_MODEL">%1$s</xliff:g> սարքից"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Մյուս սարքը զբաղված է: Ֆայլերը կարող եք փոխանցել միայն երբ այն հասանելի է:"</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Ֆայլեր չեն գտնվել: Հնարավոր է, որ մյուս սարքը կողպված է: Եթե դա այդպես է, ապակողպեք այն և փորձեք նորից:"</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-in/strings.xml b/packages/MtpDocumentsProvider/res/values-in/strings.xml
new file mode 100644
index 0000000..905daec
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-in/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"Host MTP"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Unduhan"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Mengakses file dari <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Perangkat lainnya sedang sibuk. Anda dapat mentransfer file jika telah tersedia."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"File tidak ditemukan. Perangkat lainnya mungkin terkunci. Jika begitu, buka kuncinya dan coba lagi."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-is-rIS/strings.xml b/packages/MtpDocumentsProvider/res/values-is-rIS/strings.xml
new file mode 100644
index 0000000..9388f7e
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-is-rIS/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP-hýsill"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Niðurhal"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Fær aðgang að skrám frá <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Hitt tækið er upptekið. Þú getur ekki fært skrár fyrr en það er tiltækt."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Engar skrár fundust. Hitt tækið gæti verið læst. Ef svo er skaltu opna það og reyna aftur."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-it/strings.xml b/packages/MtpDocumentsProvider/res/values-it/strings.xml
new file mode 100644
index 0000000..a41699f
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-it/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"Host MTP"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Download"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="STORAGE_NAME">%2$s</xliff:g> di <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Accesso ai file da <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"L\'altro dispositivo è occupato. I file non possono essere trasferiti fino a quando non sarà disponibile."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Nessun file trovato. L\'altro dispositivo potrebbe essere bloccato. In questo caso, sbloccalo e riprova."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-iw/strings.xml b/packages/MtpDocumentsProvider/res/values-iw/strings.xml
new file mode 100644
index 0000000..62dfe7d
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-iw/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"מארח פרוטוקול העברת מדיה (MTP)"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"הורדות"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"גישה לקבצים מ-<xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"המכשיר השני לא פנוי. ניתן יהיה להעביר קבצים רק לאחר שהוא יהיה זמין."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"לא נמצאו קבצים. ייתכן שהמכשיר השני נעול. אם כן, פתח אותו ונסה שוב."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-ja/strings.xml b/packages/MtpDocumentsProvider/res/values-ja/strings.xml
new file mode 100644
index 0000000..4ae59f5
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-ja/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP ホスト"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"ダウンロード"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> からファイルにアクセスしています"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"接続先の端末は使用中のため、利用できるようになるまでファイルを転送できません。"</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"ファイルが見つかりません。接続先の端末がロックされている可能性があります。その場合は、ロックを解除してからもう一度お試しください。"</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-ka-rGE/strings.xml b/packages/MtpDocumentsProvider/res/values-ka-rGE/strings.xml
new file mode 100644
index 0000000..33812df
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-ka-rGE/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP ჰოსტი"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"ჩამოტვირთვები"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"მიმდინარეობს <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>-ზე არსებულ ფაილებზე წვდომა"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"სხვა მოწყობილობა დაკავებულია. ფაილების გადატანა ვერ მოხერხდება, სანამ ის ხელმისაწვდომი არ გახდება."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"ფაილები ვერ მოიძებნა. მეორე მოწყობილობა შეიძლება დაბლოკილი იყოს. ამ შემთხვევაში, განბლოკეთ ის და ცადეთ ხელახლა."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-kk-rKZ/strings.xml b/packages/MtpDocumentsProvider/res/values-kk-rKZ/strings.xml
new file mode 100644
index 0000000..a6dea5b
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-kk-rKZ/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP хосты"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Жүктеп алынғандар"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Файлдарға <xliff:g id="DEVICE_MODEL">%1$s</xliff:g> құрылғысынан кіру"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Екінші құрылғы бос емес. Ол босамайынша, файлдар тасымалданбайды."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Ешқандай файл табылмады. Екінші құрылғы құлыптаулы болуы мүмкін. Құлыптаулы болса, құлпын ашып, қайталап көріңіз."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-km-rKH/strings.xml b/packages/MtpDocumentsProvider/res/values-km-rKH/strings.xml
new file mode 100644
index 0000000..baffa95
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-km-rKH/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"ម៉ាស៊ីន MTP"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"ដោយឡូត"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"កំពុងចូលដំណើរការពី <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"ឧបករណ៍ផ្សេងទៀតកំពុងជាប់រវល់។ អ្នកមិនផ្ទេរឯកសារបានទេ រហូតទាល់តែវាអាចប្រើបាន។"</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"រកមិនឃើញឯកសារទេ។ ឧបករណ៍ផ្សេងទៀតប្រហែលជាត្រូវបានចាក់សោ។ ប្រសិនបើវាត្រូវបានចាក់សោមែន សូមដោះសោ ហើយព្យាយាមម្តងទៀត។"</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-kn-rIN/strings.xml b/packages/MtpDocumentsProvider/res/values-kn-rIN/strings.xml
new file mode 100644
index 0000000..3f16c14
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-kn-rIN/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP ಹೋಸ್ಟ್"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"ಡೌನ್ಲೋಡ್ಗಳು"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> ನಿಂದ ಫೈಲ್ಗಳನ್ನು ಪ್ರವೇಶಿಸಲಾಗುತ್ತಿದೆ"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"ಬೇರೆಯ ಸಾಧನವು ಕಾರ್ಯನಿರತವಾಗಿದೆ. ಇದು ಲಭ್ಯವಾಗುವವರೆಗೆ ಫೈಲ್ಗಳನ್ನು ನಿಮಗೆ ವರ್ಗಾಯಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"ಯಾವುದೇ ಫೈಲ್ಗಳು ಕಂಡುಬಂದಿಲ್ಲ. ಬೇರೆಯ ಸಾಧನವು ಲಾಕ್ ಆಗಿರಬಹುದು. ಹಾಗಾದಲ್ಲಿ, ಇದನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಿ ಹಾಗೂ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-ko/strings.xml b/packages/MtpDocumentsProvider/res/values-ko/strings.xml
new file mode 100644
index 0000000..bbe2fe6
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-ko/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP 호스트"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"다운로드"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g>에서 파일에 액세스 중"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"다른 기기가 사용 중입니다. 다른 기기를 사용할 수 있을 때까지 파일을 전송할 수 없습니다."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"파일이 없습니다. 다른 기기가 잠겨 있을 수 있습니다. 기기의 잠금을 해제하고 다시 시도하세요."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-ky-rKG/strings.xml b/packages/MtpDocumentsProvider/res/values-ky-rKG/strings.xml
new file mode 100644
index 0000000..e60a494
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-ky-rKG/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP хосту"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Жүктөлүп алынган нерселер"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> түзмөгүндөгү файлдар колдонулууда"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Берки түзмөк бош эмес. Ал бошомоюнча файлдарды өткөрө албайсыз."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Бир дагы файл табылган жок. Берки түзмөк кулпуланып турат окшойт. Кулпусун ачып, кайра аракет кылып көрүңүз."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-lo-rLA/strings.xml b/packages/MtpDocumentsProvider/res/values-lo-rLA/strings.xml
new file mode 100644
index 0000000..bcc0ee6
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-lo-rLA/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"ໂຮສ MTP"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"ການດາວໂຫລດ"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"ກຳລັງເຂົ້າເຖິງໄຟລ໌ຈາກ <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"ອຸປະກອນອື່ນບໍ່ຫວ່າງເທື່ອ. ທ່ານບໍ່ສາມາດໂອນຍ້າຍໄຟລ໌ໄດ້ຈົນກວ່າມັນຈະຫວ່າງ."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"ບໍ່ພົບໄຟລ໌. ອຸປະກອນອີກເຄື່ອງອາດຖືກລັອກໄວ້ຢູ່. ຫາກມັນຖືກລັອກໄວ້, ໃຫ້ປົດລັອກມັນກ່ອນແລ້ວລອງໃໝ່ອີກຄັ້ງ."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-lt/strings.xml b/packages/MtpDocumentsProvider/res/values-lt/strings.xml
new file mode 100644
index 0000000..8bff3a8
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-lt/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MPP priegloba"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Atsisiuntimai"</string>
+ <string name="root_name" msgid="5819495383921089536">"„<xliff:g id="DEVICE_MODEL">%1$s</xliff:g>“ <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Pasiekiami failai iš „<xliff:g id="DEVICE_MODEL">%1$s</xliff:g>“"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Kitas įrenginys yra užsiėmęs. Failus galėsite perkelti tik tada, kai jis bus pasiekiamas."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Nerasta failų. Gali būti, kad kitas įrenginys yra užrakintas. Jei taip yra, atrakinkite jį ir bandykite dar kartą."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-lv/strings.xml b/packages/MtpDocumentsProvider/res/values-lv/strings.xml
new file mode 100644
index 0000000..5e96338
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-lv/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP saimniekdators"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Lejupielādes"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Piekļuve failiem no: <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Otra ierīce ir aizņemta. Varēsiet pārsūtīt failus tikai tad, kad tā būs pieejama."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Neviens fails netika atrasts. Iespējams, otra ierīce ir bloķēta. Ja tā ir, atbloķējiet ierīci un mēģiniet vēlreiz."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-mk-rMK/strings.xml b/packages/MtpDocumentsProvider/res/values-mk-rMK/strings.xml
new file mode 100644
index 0000000..6028b71
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-mk-rMK/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP-хост"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Преземања"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Се пристапува до датотеки од <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Другиот уред е зафатен. Не може да се пренесуваат датотеки сѐ додека не стане достапен."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Не се најдени датотеки. Другиот уред можеби е заклучен. Ако е така, отклучете го и обидете се повторно."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-ml-rIN/strings.xml b/packages/MtpDocumentsProvider/res/values-ml-rIN/strings.xml
new file mode 100644
index 0000000..f357f96
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-ml-rIN/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP ഹോസ്റ്റ്"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"ഡൗൺലോഡുകൾ"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> ഉപകരണത്തിൽ നിന്ന് ഫയലുകൾ ആക്സസ്സ് ചെയ്യുന്നു"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"രണ്ടാമത്തെ ഉപകരണം തിരക്കിലാണ്. അത് ലഭ്യമാകുന്നത് വരെ നിങ്ങൾക്ക് ഫയലുകൾ കൈമാറാൻ കഴിയില്ല."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"ഫയലുകളൊന്നും കണ്ടെത്തിയില്ല. രണ്ടാമത്തെ ഉപകരണം ലോക്കുചെയ്ത നിലയിലായിരിക്കാം. ആണെങ്കിൽ, അൺലോക്കുചെയ്ത് വീണ്ടും ശ്രമിക്കുക."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-mn-rMN/strings.xml b/packages/MtpDocumentsProvider/res/values-mn-rMN/strings.xml
new file mode 100644
index 0000000..43b8204
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-mn-rMN/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP Хост"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Таталт"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g>-с файлд хандаж байна"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Нөгөө төхөөрөмж завгүй байна. Үүнийг боломжтой болох хүртэл файл шилжүүлэх боломжгүй."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Файл олдсонгүй. Нөгөө төхөөрөмж түгжигдсэн байж болзошгүй. Ингэсэн тохиолдолд түгжээг нь тайлаад, дахин оролдоно уу."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-mr-rIN/strings.xml b/packages/MtpDocumentsProvider/res/values-mr-rIN/strings.xml
new file mode 100644
index 0000000..5b856dc
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-mr-rIN/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP होस्ट"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"डाउनलोड"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> मधून फायलींंमध्ये प्रवेश करीत आहे"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"अन्य डिव्हाइस व्यस्त आहे. ते उपलब्ध होईपर्यंत आपण फायली हस्तांतरित करू शकत नाही."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"कोणत्याही फायली आढळल्या नाहीत. अन्य डिव्हाइस कदाचित बंद असू शकते. तसे असल्यास, ते अनलॉक करा आणि पुन्हा प्रयत्न करा."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-ms-rMY/strings.xml b/packages/MtpDocumentsProvider/res/values-ms-rMY/strings.xml
new file mode 100644
index 0000000..febec1d
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-ms-rMY/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"Hos MTP"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Muat turun"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Mengakses fail daripada <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Peranti lain sedang sibuk. Anda tidak boleh memindahkan fail sehingga peranti itu tersedia."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Tiada fail ditemui. Peranti lain itu mungkin dikunci. Jika benar, sila buka kuncinya dan cuba lagi."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-my-rMM/strings.xml b/packages/MtpDocumentsProvider/res/values-my-rMM/strings.xml
new file mode 100644
index 0000000..8b509fb
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-my-rMM/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP လက်ခံစက်"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"ဒေါင်းလုဒ်များ"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> မှ ဖိုင်များကို အသုံးပြုနေသည်"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"တခြားစက်ပစ္စည်းသည် မအားသေးပါ။ ၎င်းအဆင်သင့် မဖြစ်သေးသ၍ ဖိုင်များကို လွှဲပြောင်း၍ရမည် မဟုတ်ပါ။"</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"မည်သည့်ဖိုင်မျှ မတွေ့ပါ။ ၎င်းစက်ပစ္စည်းကို လော့ခ်ချထားပုံရပါသည်။ သို့ဖြစ်လျှင် ၎င်းကိုလော့ခ်ဖြုတ်ပြီး ထပ်လုပ်ကြည့်ပါ။"</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-nb/strings.xml b/packages/MtpDocumentsProvider/res/values-nb/strings.xml
new file mode 100644
index 0000000..40fabed
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-nb/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP-vert"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Nedlastinger"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="STORAGE_NAME">%2$s</xliff:g> på <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Bruker filer på <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Den andre enheten er opptatt. Du kan ikke overføre filer før den er tilgjengelig."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Ingen filer ble funnet. Den andre enheten kan være låst. I så fall må du låse den opp og prøve igjen."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-ne-rNP/strings.xml b/packages/MtpDocumentsProvider/res/values-ne-rNP/strings.xml
new file mode 100644
index 0000000..9a059e2
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-ne-rNP/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP होस्ट"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"डाउनलोडहरू"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> बाट फाइलहरूमाथि पहुँच राख्दै"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"अर्को यन्त्र व्यस्त छ। त्यो यन्त्र उपलब्ध नभएसम्म तपाईँ फाइल स्थानान्तरण गर्न सक्नुहुन्न।"</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"कुनै फाइल भेट्टिएन। अर्को यन्त्र लक गरिएको हुन सक्छ। यदि त्यसो हो भने त्यसलाई अनलक गरेर फेरि प्रयास गर्नुहोस्।"</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-nl/strings.xml b/packages/MtpDocumentsProvider/res/values-nl/strings.xml
new file mode 100644
index 0000000..b1a01b2
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-nl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP-host"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Downloads"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Bestanden openen op <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Het andere apparaat wordt gebruikt. Je moet wachten tot het beschikbaar is om bestanden te kunnen overzetten."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Geen bestanden gevonden. Het kan zijn dat het andere apparaat is vergrendeld. Als dat het geval is, ontgrendel je het en probeer je het opnieuw."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-pa-rIN/strings.xml b/packages/MtpDocumentsProvider/res/values-pa-rIN/strings.xml
new file mode 100644
index 0000000..ab8ba15
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-pa-rIN/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP ਹੋਸਟ"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"ਡਾਊਨਲੋਡ"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> ਦੀਆਂ ਫ਼ਾਈਲਾਂ \'ਤੇ ਪਹੁੰਚ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"ਦੂਜੀ ਡੀਵਾਈਸ ਰੁਝੇਵੇਂ ਵਿੱਚ ਹੈ। ਉਸਦੇ ਉਪਲਬਧ ਹੋਣ ਤੱਕ ਤੁਸੀਂ ਫ਼ਾਈਲਾਂ ਦਾ ਤਬਾਦਲਾ ਨਹੀਂ ਕਰ ਸਕਦੇ।"</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"ਕੋਈ ਫ਼ਾਈਲਾਂ ਨਹੀਂ ਮਿਲੀਆਂ। ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਦੂਜੀ ਡੀਵਾਈਸ ਲੌਕ ਹੋਵੇ। ਜੇਕਰ ਇੰਝ ਹੈ, ਤਾਂ ਉਸਨੂੰ ਅਨਲੌਕ ਕਰੋ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-pl/strings.xml b/packages/MtpDocumentsProvider/res/values-pl/strings.xml
new file mode 100644
index 0000000..69fa0f4
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-pl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"Host MTP"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Pobrane"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> – <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Uzyskuję dostęp do plików na urządzeniu <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Drugie urządzenie jest zajęte. Dopóki nie będzie dostępne, nie możesz przesłać plików."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Nie znaleziono plików. Drugie urządzenie może być zablokowane. Jeśli tak jest, odblokuj je i spróbuj ponownie."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-pt-rBR/strings.xml b/packages/MtpDocumentsProvider/res/values-pt-rBR/strings.xml
new file mode 100644
index 0000000..03a1426
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-pt-rBR/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"Host do MTP"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Downloads"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="STORAGE_NAME">%2$s</xliff:g> do <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Acessando arquivos do <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"O outro dispositivo está ocupado. Não é possível transferir arquivos até que ele esteja disponível."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Nenhum arquivo encontrado. É possível que o outro dispositivo esteja bloqueado. Se for o caso, desbloqueie-o e tente novamente."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-pt-rPT/strings.xml b/packages/MtpDocumentsProvider/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000..05d32d4
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-pt-rPT/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"Anfitrião MTP"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Transferências"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Aceder a ficheiros do <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"O outro dispositivo está ocupado. Não pode transferir os ficheiros enquanto não estiver disponível."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Nenhum ficheiro encontrado. O outro dispositivo pode estar bloqueado. Se assim for, desbloqueie e tente novamente."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-pt/strings.xml b/packages/MtpDocumentsProvider/res/values-pt/strings.xml
new file mode 100644
index 0000000..03a1426
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-pt/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"Host do MTP"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Downloads"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="STORAGE_NAME">%2$s</xliff:g> do <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Acessando arquivos do <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"O outro dispositivo está ocupado. Não é possível transferir arquivos até que ele esteja disponível."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Nenhum arquivo encontrado. É possível que o outro dispositivo esteja bloqueado. Se for o caso, desbloqueie-o e tente novamente."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-ro/strings.xml b/packages/MtpDocumentsProvider/res/values-ro/strings.xml
new file mode 100644
index 0000000..21ebc57
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-ro/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"Gazdă MTP"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Descărcări"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Se accesează fișierele de pe <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Celălalt dispozitiv este ocupat. Nu puteți să transferați fișiere înainte să fie disponibil."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Nu s-au găsit fișiere. Este posibil ca celălalt dispozitiv să fie blocat. În acest caz, deblocați-l și încercați din nou."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-ru/strings.xml b/packages/MtpDocumentsProvider/res/values-ru/strings.xml
new file mode 100644
index 0000000..717f12f
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-ru/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP-хост"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Загрузки"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="STORAGE_NAME">%2$s</xliff:g> <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Доступ к файлам на устройстве <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>…"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Другое устройство занято. Вы сможете передать файлы, когда оно будет доступно."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Файлы не найдены. Если другое устройство заблокировано, разблокируйте его и повторите попытку."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-si-rLK/strings.xml b/packages/MtpDocumentsProvider/res/values-si-rLK/strings.xml
new file mode 100644
index 0000000..7a096b0
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-si-rLK/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP සංග්රාහක"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"බාගැනීම්"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> වෙතින් ගොනු වෙත පිවිසීම"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"අනෙක් උපාංගය කාර්ය බහුලය. එය ලබා ගත හැකි වන තෙක් ඔබට ගොනු මාරු කළ නොහැකිය."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"ගොනු හමු නොවීය. අනෙක් උපාංගය අගුලු දමා තිබිය හැකිය. එසේ නම්, එය අගුලු හැර නැවත උත්සාහ කරන්න."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-sk/strings.xml b/packages/MtpDocumentsProvider/res/values-sk/strings.xml
new file mode 100644
index 0000000..365e1b7
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-sk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"Hostiteľ MTP"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Stiahnuté súbory"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Prístup k súborom zo zariadenia <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Druhé zariadenie je zaneprázdnené. Súbory bude možné preniesť, keď bude k dispozícii."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Nenašli sa žiadne súbory. Druhé zariadenie môže byť uzamknuté. Ak je to tak, odomknite ho a skúste to znova."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-sl/strings.xml b/packages/MtpDocumentsProvider/res/values-sl/strings.xml
new file mode 100644
index 0000000..60945d6
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-sl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"Gostitelj MTP"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Prenosi"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Dostopanje do datotek iz naprave <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Druga naprava ni na voljo. Dokler ne bo na voljo, ne bo mogoče prenašati datotek."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Ni datotek. Druga naprava je morda zaklenjena. Če je zaklenjena, jo odklenite in poskusite znova."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-sq-rAL/strings.xml b/packages/MtpDocumentsProvider/res/values-sq-rAL/strings.xml
new file mode 100644
index 0000000..d92f29f
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-sq-rAL/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"Pritësi i protokollit MTP"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Shkarkimet"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Po qaset te skedarët nga <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Pajisja tjetër është e zënë. Nuk mund të transferosh skedarë deri sa të jetë në dispozicion."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Nuk u gjet asnjë skedar. Pajisja tjetër mund të jetë e kyçur. Nëse po, shkyçe dhe provo përsëri."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-sr/strings.xml b/packages/MtpDocumentsProvider/res/values-sr/strings.xml
new file mode 100644
index 0000000..d91c5c4
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-sr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP хост"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Преузимања"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Приступ датотекама са уређаја <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Други уређај је заузет. Датотеке можете да пренесете тек кад он постане доступан."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Није пронађена ниједна датотека. Други уређај је можда закључан. Ако јесте, откључајте га и покушајте поново."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-sw/strings.xml b/packages/MtpDocumentsProvider/res/values-sw/strings.xml
new file mode 100644
index 0000000..de3ed54
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-sw/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"Seva pangishi ya MTP"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Vipakuliwa"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Inafikia faili kwenye <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Kifaa hicho kingine kinatumika. Huwezi kuhamisha faili hadi kipatikane."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Hakuna faili zilizopatikana. Huenda kifaa hicho kingine kimefungwa. Ikiwa kimefungwa, kifungue na ujaribu tena."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-ta-rIN/strings.xml b/packages/MtpDocumentsProvider/res/values-ta-rIN/strings.xml
new file mode 100644
index 0000000..c6e6e620
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-ta-rIN/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP ஹோஸ்ட்"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"இறக்கங்கள்"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> இலிருந்து கோப்புகளை அணுகுகிறது"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"பிற சாதனம் பணிமிகுதியில் உள்ளதால், அந்தப் பணி முடியும் வரை கோப்புகளை இடமாற்ற முடியாது."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"கோப்புகள் இல்லை. பிற சாதனம் பூட்டப்பட்டிருக்கக்கூடும் என்பதால் முதலில் அதைத் திறந்து, மீண்டும் முயலவும்."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-te-rIN/strings.xml b/packages/MtpDocumentsProvider/res/values-te-rIN/strings.xml
new file mode 100644
index 0000000..7add858
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-te-rIN/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP హోస్ట్"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"డౌన్లోడ్లు"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> నుండి ఫైల్లను ప్రాప్యత చేస్తోంది"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"ఇతర పరికరం బిజీగా ఉంది. అది అందుబాటులోకి వచ్చే వరకు మీరు ఫైల్లను బదిలీ చేయలేరు."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"ఫైల్లు ఏవీ కనుగొనబడలేదు. ఇతర పరికరం లాక్ చేయబడి ఉండవచ్చు. అలా జరిగి ఉంటే, దాన్ని అన్లాక్ చేసి, ఆపై మళ్లీ ప్రయత్నించండి."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-th/strings.xml b/packages/MtpDocumentsProvider/res/values-th/strings.xml
new file mode 100644
index 0000000..d2b62fe
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-th/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"โฮสต์ MTP"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"ดาวน์โหลด"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"กำลังเข้าถึงไฟล์จาก <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"อุปกรณ์อีกเครื่องหนึ่งไม่ว่าง คุณไม่สามารถโอนไฟล์จนกว่าอุปกรณ์จะสามารถใช้ได้"</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"ไม่พบไฟล์ อุปกรณ์อีกเครื่องหนึ่งอาจล็อกอยู่ หากเป็นเช่นนั้น ให้ปลดล็อกและลองอีกครั้ง"</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-tl/strings.xml b/packages/MtpDocumentsProvider/res/values-tl/strings.xml
new file mode 100644
index 0000000..68b2eba
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-tl/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"Host ng MTP"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Mga Download"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Nag-a-access ng mga file mula sa <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Abala ang kabilang device. Hindi ka makakapaglipat ng mga file hanggang sa maging available ito."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Walang natagpuang mga file. Maaaring naka-lock ang kabilang device. Kung gayon, i-unlock ito at subukang muli."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-tr/strings.xml b/packages/MtpDocumentsProvider/res/values-tr/strings.xml
new file mode 100644
index 0000000..14250ef
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-tr/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP Ana Makinesi"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"İndirilenler"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> cihazdaki dosyalara erişiliyor"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Diğer cihaz meşgul. Cihaz kullanılabilir duruma gelene kadar dosyaları aktaramazsınız."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Hiçbir dosya bulunamadı. Diğer cihaz kilitli olabilir. Kilitliyse, kilidini açıp tekrar deneyin."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-uk/strings.xml b/packages/MtpDocumentsProvider/res/values-uk/strings.xml
new file mode 100644
index 0000000..8589f8c
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-uk/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"Хост MTP"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Завантаження"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Відкриваються файли з пристрою <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Інший пристрій зайнятий. Щоб передавати файли, він має бути доступним."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Не вдалося знайти файли. Можливо, інший пристрій заблоковано. У такому разі розблокуйте його та повторіть спробу."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-ur-rPK/strings.xml b/packages/MtpDocumentsProvider/res/values-ur-rPK/strings.xml
new file mode 100644
index 0000000..17578ae
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-ur-rPK/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP میزبان"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"ڈاؤن لوڈز"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> سے فائلوں کی رسائی ہو رہی ہے"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"دوسرا آلہ مصروف ہے۔ اس کے دستیاب ہونے تک آپ فائلیں منتقل نہیں کر سکتے۔"</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"کوئی فائلیں نہیں ملیں۔ ہو سکتا ہے دوسرا آلہ مقفل ہو۔ اگر ایسا ہے تو اسے غیر مقفل کریں اور دوبارہ کوشش کریں۔"</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-uz-rUZ/strings.xml b/packages/MtpDocumentsProvider/res/values-uz-rUZ/strings.xml
new file mode 100644
index 0000000..dea4cff
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-uz-rUZ/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP Host"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Yuklanishlar"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g><xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> qurilmasidan fayllar o‘qilmoqda"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Ulangan qurilma band. U bo‘shamaguncha fayllarni o‘tkazib bo‘lmaydi."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Hech qanday fayl topilmadi. Ulangan qurilma qulflangan bo‘lishi mumkin. Agar shunday bo‘lsa, uni qulfdan chiqaring va qayta urinib ko‘ring."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-vi/strings.xml b/packages/MtpDocumentsProvider/res/values-vi/strings.xml
new file mode 100644
index 0000000..0eb6310
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-vi/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"Máy chủ MTP"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Tải xuống"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Đang truy cập tệp từ <xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Thiết bị khác đang bận. Bạn không thể chuyển tệp cho đến khi thiết bị rảnh."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Không tìm thấy tệp. Thiết bị khác có thể đã bị khóa. Nếu như vậy, hãy mở khóa thiết bị rồi thử lại."</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-zh-rCN/strings.xml b/packages/MtpDocumentsProvider/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..7f1f394
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-zh-rCN/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"MTP 主机"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"下载"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"正在访问 <xliff:g id="DEVICE_MODEL">%1$s</xliff:g> 的文件"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"另一台设备正忙。您必须等到该设备可用时才能传输文件。"</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"未找到任何文件。另一台设备可能处于锁定状态;如果是这样,请解锁该设备并重试。"</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-zh-rHK/strings.xml b/packages/MtpDocumentsProvider/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..be8c548
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-zh-rHK/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"媒體傳輸協定主機"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"下載"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> 的「<xliff:g id="STORAGE_NAME">%2$s</xliff:g>」"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"正在從 <xliff:g id="DEVICE_MODEL">%1$s</xliff:g> 存取檔案"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"另一部裝置目前處於忙碌狀態,要等到該裝置可用時才能轉移檔案。"</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"找不到檔案。如果另一部裝置處於鎖定狀態,請解鎖該裝置,然後再試一次。"</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-zh-rTW/strings.xml b/packages/MtpDocumentsProvider/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000..2fe3c06
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-zh-rTW/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"媒體傳輸通訊協定主機"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"下載"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"正在從 <xliff:g id="DEVICE_MODEL">%1$s</xliff:g> 存取檔案"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"另一個裝置忙碌中。必須等到該裝置可用時才能轉移檔案。"</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"找不到任何檔案。如果另一個裝置處於鎖定狀態,請將該裝置解鎖後再試一次。"</string>
+</resources>
diff --git a/packages/MtpDocumentsProvider/res/values-zu/strings.xml b/packages/MtpDocumentsProvider/res/values-zu/strings.xml
new file mode 100644
index 0000000..f3f7206
--- /dev/null
+++ b/packages/MtpDocumentsProvider/res/values-zu/strings.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="app_label" msgid="6271216747302322594">"Ukusingatha kwe-MTP"</string>
+ <string name="downloads_app_label" msgid="7120690641874849726">"Okulandiwe"</string>
+ <string name="root_name" msgid="5819495383921089536">"<xliff:g id="DEVICE_MODEL">%1$s</xliff:g> <xliff:g id="STORAGE_NAME">%2$s</xliff:g>"</string>
+ <string name="accessing_notification_title" msgid="3030133609230917944">"Ifinyelela kumafayela kusukela ku-<xliff:g id="DEVICE_MODEL">%1$s</xliff:g>"</string>
+ <string name="error_busy_device" msgid="3997316850357386589">"Enye idivayisi imatasatasa. Awukwazi ukudlulisela amafayela ize itholakale."</string>
+ <string name="error_locked_device" msgid="7557872102188356147">"Awekho amafayela atholiwe. Enye idivayisi kungenzeka ikhiyiwe. Uma kunjalo, yivule uphinde uzame futhi."</string>
+</resources>
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/wifi/AccessPoint.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
index 380fcd4..92f1b18 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java
@@ -360,17 +360,18 @@
}
public String getSavedNetworkSummary() {
- if (mConfig != null) {
+ WifiConfiguration config = mConfig;
+ if (config != null) {
PackageManager pm = mContext.getPackageManager();
String systemName = pm.getNameForUid(android.os.Process.SYSTEM_UID);
- int userId = UserHandle.getUserId(mConfig.creatorUid);
+ int userId = UserHandle.getUserId(config.creatorUid);
ApplicationInfo appInfo = null;
- if (mConfig.creatorName != null && mConfig.creatorName.equals(systemName)) {
+ if (config.creatorName != null && config.creatorName.equals(systemName)) {
appInfo = mContext.getApplicationInfo();
} else {
try {
IPackageManager ipm = AppGlobals.getPackageManager();
- appInfo = ipm.getApplicationInfo(mConfig.creatorName, 0 /* flags */, userId);
+ appInfo = ipm.getApplicationInfo(config.creatorName, 0 /* flags */, userId);
} catch (RemoteException rex) {
}
}
@@ -385,29 +386,33 @@
}
public String getSummary() {
- return getSettingsSummary();
+ return getSettingsSummary(mConfig);
}
public String getSettingsSummary() {
+ return getSettingsSummary(mConfig);
+ }
+
+ private String getSettingsSummary(WifiConfiguration config) {
// Update to new summary
StringBuilder summary = new StringBuilder();
- if (isActive() && mConfig != null && mConfig.isPasspoint()) {
+ if (isActive() && config != null && config.isPasspoint()) {
// This is the active connection on passpoint
summary.append(getSummary(mContext, getDetailedState(),
- false, mConfig.providerFriendlyName));
+ false, config.providerFriendlyName));
} else if (isActive()) {
// This is the active connection on non-passpoint network
summary.append(getSummary(mContext, getDetailedState(),
mInfo != null && mInfo.isEphemeral()));
- } else if (mConfig != null && mConfig.isPasspoint()) {
+ } else if (config != null && config.isPasspoint()) {
String format = mContext.getString(R.string.available_via_passpoint);
- summary.append(String.format(format, mConfig.providerFriendlyName));
- } else if (mConfig != null && mConfig.hasNoInternetAccess()) {
+ summary.append(String.format(format, config.providerFriendlyName));
+ } else if (config != null && config.hasNoInternetAccess()) {
summary.append(mContext.getString(R.string.wifi_no_internet));
- } else if (mConfig != null && !mConfig.getNetworkSelectionStatus().isNetworkEnabled()) {
+ } else if (config != null && !config.getNetworkSelectionStatus().isNetworkEnabled()) {
WifiConfiguration.NetworkSelectionStatus networkStatus =
- mConfig.getNetworkSelectionStatus();
+ config.getNetworkSelectionStatus();
switch (networkStatus.getNetworkSelectionDisableReason()) {
case WifiConfiguration.NetworkSelectionStatus.DISABLED_AUTHENTICATION_FAILURE:
summary.append(mContext.getString(R.string.wifi_disabled_password_failure));
@@ -423,7 +428,7 @@
} else if (mRssi == Integer.MAX_VALUE) { // Wifi out of range
summary.append(mContext.getString(R.string.wifi_not_in_range));
} else { // In range, not disabled.
- if (mConfig != null) { // Is saved network
+ if (config != null) { // Is saved network
summary.append(mContext.getString(R.string.wifi_remembered));
}
}
@@ -435,11 +440,11 @@
summary.append(" f=" + Integer.toString(mInfo.getFrequency()));
}
summary.append(" " + getVisibilityStatus());
- if (mConfig != null && !mConfig.getNetworkSelectionStatus().isNetworkEnabled()) {
- summary.append(" (" + mConfig.getNetworkSelectionStatus().getNetworkStatusString());
- if (mConfig.getNetworkSelectionStatus().getDisableTime() > 0) {
+ if (config != null && !config.getNetworkSelectionStatus().isNetworkEnabled()) {
+ summary.append(" (" + config.getNetworkSelectionStatus().getNetworkStatusString());
+ if (config.getNetworkSelectionStatus().getDisableTime() > 0) {
long now = System.currentTimeMillis();
- long diff = (now - mConfig.getNetworkSelectionStatus().getDisableTime()) / 1000;
+ long diff = (now - config.getNetworkSelectionStatus().getDisableTime()) / 1000;
long sec = diff%60; //seconds
long min = (diff/60)%60; //minutes
long hour = (min/60)%60; //hours
@@ -451,9 +456,9 @@
summary.append(")");
}
- if (mConfig != null) {
+ if (config != null) {
WifiConfiguration.NetworkSelectionStatus networkStatus =
- mConfig.getNetworkSelectionStatus();
+ config.getNetworkSelectionStatus();
for (int index = WifiConfiguration.NetworkSelectionStatus.NETWORK_SELECTION_ENABLE;
index < WifiConfiguration.NetworkSelectionStatus
.NETWORK_SELECTION_DISABLED_MAX; index++) {
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index 5c72215..90eade4 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -1202,6 +1202,11 @@
restriction = UserManager.DISALLOW_CONFIG_VPN;
break;
+ case Settings.Global.SAFE_BOOT_DISALLOWED:
+ if ("1".equals(value)) return false;
+ restriction = UserManager.DISALLOW_SAFE_BOOT;
+ break;
+
default:
if (setting != null && setting.startsWith(Settings.Global.DATA_ROAMING)) {
if ("0".equals(value)) return false;
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 79f9de6..11bf0c5 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java
@@ -63,6 +63,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;
@@ -123,6 +126,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) {
@@ -399,4 +408,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 3d030f9..da2c5245 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java
@@ -86,8 +86,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/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
index 8530d66..e224141 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
@@ -40,7 +40,6 @@
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.UserInfo;
import android.content.res.Configuration;
-import android.content.res.Resources;
import android.database.ContentObserver;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
@@ -959,18 +958,15 @@
}
}
- protected View bindVetoButtonClickListener(View row, final StatusBarNotification n) {
- View vetoButton = row.findViewById(R.id.veto);
- vetoButton.setOnClickListener(new View.OnClickListener() {
+ protected void bindDismissListener(final ExpandableNotificationRow row) {
+ row.setOnDismissListener(new View.OnClickListener() {
public void onClick(View v) {
// Accessibility feedback
v.announceForAccessibility(
mContext.getString(R.string.accessibility_notification_dismissed));
- performRemoveNotification(n, false /* removeView */);
+ performRemoveNotification(row.getStatusBarNotification(), false /* removeView */);
}
});
- vetoButton.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
- return vetoButton;
}
protected void performRemoveNotification(StatusBarNotification n, boolean removeView) {
@@ -1647,9 +1643,7 @@
}
workAroundBadLayerDrawableOpacity(row);
- View vetoButton = bindVetoButtonClickListener(row, sbn);
- vetoButton.setContentDescription(mContext.getString(
- R.string.accessibility_remove_notification));
+ bindDismissListener(row);
// NB: the large icon is now handled entirely by the template
@@ -2409,10 +2403,6 @@
updateHeadsUp(key, entry, shouldPeek, alertAgain);
updateNotifications();
- // Update the veto button accordingly (and as a result, whether this row is
- // swipe-dismissable)
- bindVetoButtonClickListener(entry.row, notification);
-
if (!notification.isClearable()) {
// The user may have performed a dismiss action on the notification, since it's
// not clearable we should snap it back.
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
index f09eae8..e400506 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
@@ -109,7 +109,6 @@
private int mHeadsUpHeight;
private View mVetoButton;
private int mNotificationColor;
- private boolean mClearable;
private ExpansionLogger mLogger;
private String mLoggingKey;
private NotificationSettingsIconRow mSettingsIconRow;
@@ -280,7 +279,6 @@
mPublicLayout.onNotificationUpdated(entry);
mShowingPublicInitialized = false;
updateNotificationColor();
- updateClearability();
if (mIsSummaryWithChildren) {
mChildrenContainer.recreateNotificationHeader(mExpandClickListener, mEntry.notification);
mChildrenContainer.onNotificationUpdated();
@@ -779,6 +777,14 @@
return mGroupParentWhenDismissed;
}
+ public void performDismiss() {
+ mVetoButton.performClick();
+ }
+
+ public void setOnDismissListener(OnClickListener listener) {
+ mVetoButton.setOnClickListener(listener);
+ }
+
public interface ExpansionLogger {
public void logNotificationExpansion(String key, boolean userAction, boolean expanded);
}
@@ -880,6 +886,9 @@
}
});
mVetoButton = findViewById(R.id.veto);
+ mVetoButton.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
+ mVetoButton.setContentDescription(mContext.getString(
+ R.string.accessibility_remove_notification));
// Add the views that we translate to reveal the gear
mTranslateableViews = new ArrayList<View>();
@@ -893,6 +902,10 @@
mTranslateableViews.remove(mGutsStub);
}
+ public View getVetoButton() {
+ return mVetoButton;
+ }
+
public void resetTranslation() {
if (mTranslateableViews != null) {
for (int i = 0; i < mTranslateableViews.size(); i++) {
@@ -1157,7 +1170,9 @@
}
/**
- * @return Can the underlying notification be cleared?
+ * @return Can the underlying notification be cleared? This can be different from whether the
+ * notification can be dismissed in case notifications are sensitive on the lockscreen.
+ * @see #canViewBeDismissed()
*/
public boolean isClearable() {
return mStatusBarNotification != null && mStatusBarNotification.isClearable();
@@ -1317,7 +1332,6 @@
NotificationContentView showingLayout = getShowingLayout();
showingLayout.updateBackgroundColor(animated);
mPrivateLayout.updateExpandButtons(isExpandable());
- updateClearability();
mShowingPublicInitialized = true;
}
@@ -1357,12 +1371,12 @@
return mIsHeadsUp;
}
- private void updateClearability() {
- // public versions cannot be dismissed
- mVetoButton.setVisibility(canViewBeDismissed() ? View.VISIBLE : View.GONE);
- }
-
- private boolean canViewBeDismissed() {
+ /**
+ * @return Whether this view is allowed to be dismissed. Only valid for visible notifications as
+ * otherwise some state might not be updated. To request about the general clearability
+ * see {@link #isClearable()}.
+ */
+ public boolean canViewBeDismissed() {
return isClearable() && (!mShowingPublic || !mSensitiveHiddenInGeneral);
}
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 f7b258f..323a2a5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -3442,7 +3442,6 @@
repositionNavigationBar();
updateRowStates();
- mIconController.defineSlots();
mScreenPinningRequest.onConfigurationChanged();
mNetworkController.onConfigurationChanged();
}
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 fa57775..4002473 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(component), 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/StatusBarIconController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java
index f415ae5..716a44e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java
@@ -112,6 +112,8 @@
public StatusBarIconController(Context context, View statusBar, View keyguardStatusBar,
PhoneStatusBar phoneStatusBar) {
+ super(context.getResources().getStringArray(
+ com.android.internal.R.array.config_statusBarIcons));
mContext = context;
mPhoneStatusBar = phoneStatusBar;
mSystemIconArea = (LinearLayout) statusBar.findViewById(R.id.system_icon_area);
@@ -137,7 +139,6 @@
mDarkModeIconColorSingleTone = context.getColor(R.color.dark_mode_icon_color_single_tone);
mLightModeIconColorSingleTone = context.getColor(R.color.light_mode_icon_color_single_tone);
mHandler = new Handler();
- defineSlots();
loadDimens();
TunerService.get(mContext).addTunable(this, ICON_BLACKLIST);
@@ -197,11 +198,6 @@
R.dimen.status_bar_icon_padding);
}
- public void defineSlots() {
- defineSlots(mContext.getResources().getStringArray(
- com.android.internal.R.array.config_statusBarIcons));
- }
-
private void addSystemIcon(int index, StatusBarIcon icon) {
String slot = getSlot(index);
int viewIndex = getViewIndex(index);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java
index 97b31f2..94adea0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java
@@ -25,14 +25,11 @@
private ArrayList<String> mSlots = new ArrayList<>();
private ArrayList<StatusBarIcon> mIcons = new ArrayList<>();
- public void defineSlots(String[] slots) {
- mSlots.clear();
+ public StatusBarIconList(String[] slots) {
final int N = slots.length;
for (int i=0; i < N; i++) {
mSlots.add(slots[i]);
- if (mIcons.size() < mSlots.size()) {
- mIcons.add(null);
- }
+ mIcons.add(null);
}
}
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 7de3879..1e5654e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
@@ -780,20 +780,20 @@
public static void performDismiss(View v, NotificationGroupManager groupManager,
boolean fromAccessibility) {
- if (v instanceof ExpandableNotificationRow) {
- ExpandableNotificationRow row = (ExpandableNotificationRow) v;
- if (groupManager.isOnlyChildInGroup(row.getStatusBarNotification())) {
- ExpandableNotificationRow groupSummary =
- groupManager.getLogicalGroupSummary(row.getStatusBarNotification());
- if (groupSummary.isClearable()) {
- performDismiss(groupSummary, groupManager, fromAccessibility);
- }
- }
- row.setDismissed(true, fromAccessibility);
+ if (!(v instanceof ExpandableNotificationRow)) {
+ return;
}
- final View veto = v.findViewById(R.id.veto);
- if (veto != null && veto.getVisibility() != View.GONE) {
- veto.performClick();
+ ExpandableNotificationRow row = (ExpandableNotificationRow) v;
+ if (groupManager.isOnlyChildInGroup(row.getStatusBarNotification())) {
+ ExpandableNotificationRow groupSummary =
+ groupManager.getLogicalGroupSummary(row.getStatusBarNotification());
+ if (groupSummary.isClearable()) {
+ performDismiss(groupSummary, groupManager, fromAccessibility);
+ }
+ }
+ row.setDismissed(true, fromAccessibility);
+ if (row.isClearable()) {
+ row.performDismiss();
}
if (DEBUG) Log.v(TAG, "onChildDismissed: " + v);
}
@@ -2347,6 +2347,7 @@
if (hasAddEvent) {
// This child was just added lets remove all events.
mHeadsUpChangeAnimations.removeAll(mTmpList);
+ ((ExpandableNotificationRow ) child).setHeadsupDisappearRunning(false);
}
mTmpList.clear();
return hasAddEvent;
@@ -2604,6 +2605,10 @@
type = row.wasJustClicked()
? AnimationEvent.ANIMATION_TYPE_HEADS_UP_DISAPPEAR_CLICK
: AnimationEvent.ANIMATION_TYPE_HEADS_UP_DISAPPEAR;
+ if (row.isChildInGroup()) {
+ // We can otherwise get stuck in there if it was just isolated
+ row.setHeadsupDisappearRunning(false);
+ }
} else {
StackViewState viewState = mCurrentStackScrollState.getViewStateForView(row);
if (viewState == null) {
@@ -3093,6 +3098,22 @@
requestChildrenUpdate();
runAnimationFinishedRunnables();
clearViewOverlays();
+ clearHeadsUpDisappearRunning();
+ }
+
+ private void clearHeadsUpDisappearRunning() {
+ for (int i = 0; i < getChildCount(); i++) {
+ View view = getChildAt(i);
+ if (view instanceof ExpandableNotificationRow) {
+ ExpandableNotificationRow row = (ExpandableNotificationRow) view;
+ row.setHeadsupDisappearRunning(false);
+ if (row.isSummaryWithChildren()) {
+ for (ExpandableNotificationRow child : row.getNotificationChildren()) {
+ child.setHeadsupDisappearRunning(false);
+ }
+ }
+ }
+ }
}
private void clearViewOverlays() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java
index 87e87c8..45647ff 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java
@@ -173,14 +173,14 @@
}
public static boolean canChildBeDismissed(View v) {
- if (v instanceof ExpandableNotificationRow) {
- ExpandableNotificationRow row = (ExpandableNotificationRow) v;
- if (row.areGutsExposed()) {
- return false;
- }
+ if (!(v instanceof ExpandableNotificationRow)) {
+ return false;
}
- final View veto = v.findViewById(R.id.veto);
- return (veto != null && veto.getVisibility() != View.GONE);
+ ExpandableNotificationRow row = (ExpandableNotificationRow) v;
+ if (row.areGutsExposed()) {
+ return false;
+ }
+ return row.canViewBeDismissed();
}
/**
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index 60d3339..f039e1e 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;
@@ -2755,7 +2756,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 =
@@ -2769,9 +2770,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");
}
diff --git a/services/core/java/com/android/server/AlarmManagerService.java b/services/core/java/com/android/server/AlarmManagerService.java
index 312553a..3f59b02 100644
--- a/services/core/java/com/android/server/AlarmManagerService.java
+++ b/services/core/java/com/android/server/AlarmManagerService.java
@@ -1732,9 +1732,10 @@
Alarm a = alarms.get(j);
if (a.alarmClock != null) {
final int userId = UserHandle.getUserId(a.uid);
+ AlarmManager.AlarmClockInfo current = mNextAlarmClockForUser.get(userId);
if (DEBUG_ALARM_CLOCK) {
- Log.v(TAG, "Found AlarmClockInfo at " +
+ Log.v(TAG, "Found AlarmClockInfo " + a.alarmClock + " at " +
formatNextAlarm(getContext(), a.alarmClock, userId) +
" for user " + userId);
}
@@ -1742,6 +1743,10 @@
// Alarms and batches are sorted by time, no need to compare times here.
if (nextForUser.get(userId) == null) {
nextForUser.put(userId, a.alarmClock);
+ } else if (a.alarmClock.equals(current)
+ && current.getTriggerTime() <= nextForUser.get(userId).getTriggerTime()) {
+ // same/earlier time and it's the one we cited before, so stick with it
+ nextForUser.put(userId, current);
}
}
}
diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java
index 5d8fe7c..76b1011 100644
--- a/services/core/java/com/android/server/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/InputMethodManagerService.java
@@ -3069,8 +3069,8 @@
if (DEBUG) {
Slog.d(TAG, "Found an input method " + p);
}
- } catch (XmlPullParserException | IOException e) {
- Slog.w(TAG, "Unable to load input method " + compName, e);
+ } catch (Exception e) {
+ Slog.wtf(TAG, "Unable to load input method " + compName, e);
}
}
diff --git a/services/core/java/com/android/server/LocationManagerService.java b/services/core/java/com/android/server/LocationManagerService.java
index 36ec2eb..64ca2e3 100644
--- a/services/core/java/com/android/server/LocationManagerService.java
+++ b/services/core/java/com/android/server/LocationManagerService.java
@@ -150,7 +150,7 @@
// used internally for synchronization
private final Object mLock = new Object();
- // --- fields below are final after systemReady() ---
+ // --- fields below are final after systemRunning() ---
private LocationFudger mLocationFudger;
private GeofenceManager mGeofenceManager;
private PackageManager mPackageManager;
@@ -168,6 +168,7 @@
// --- fields below are protected by mLock ---
// Set of providers that are explicitly enabled
+ // Only used by passive, fused & test. Network & GPS are controlled separately, and not listed.
private final Set<String> mEnabledProviders = new HashSet<String>();
// Set of providers that are explicitly disabled
@@ -236,12 +237,12 @@
if (D) Log.d(TAG, "Constructed");
- // most startup is deferred until systemReady()
+ // most startup is deferred until systemRunning()
}
public void systemRunning() {
synchronized (mLock) {
- if (D) Log.d(TAG, "systemReady()");
+ if (D) Log.d(TAG, "systemRunning()");
// fetch package manager
mPackageManager = mContext.getPackageManager();
@@ -321,7 +322,11 @@
|| Intent.ACTION_MANAGED_PROFILE_REMOVED.equals(action)) {
updateUserProfiles(mCurrentUserId);
} else if (Intent.ACTION_SHUTDOWN.equals(action)) {
- shutdownComponents();
+ // shutdown only if UserId indicates whole system, not just one user
+ if(D) Log.d(TAG, "Shutdown received with UserId: " + getSendingUserId());
+ if (getSendingUserId() == UserHandle.USER_ALL) {
+ shutdownComponents();
+ }
}
}
}, UserHandle.ALL, intentFilter, null, mLocationHandler);
diff --git a/services/core/java/com/android/server/LockSettingsService.java b/services/core/java/com/android/server/LockSettingsService.java
index d64fe32..42e75c6 100644
--- a/services/core/java/com/android/server/LockSettingsService.java
+++ b/services/core/java/com/android/server/LockSettingsService.java
@@ -1215,6 +1215,9 @@
private VerifyCredentialResponse doVerifyPattern(String pattern, boolean hasChallenge,
long challenge, int userId) 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);
}
@@ -1306,6 +1309,9 @@
private VerifyCredentialResponse doVerifyPassword(String password, boolean hasChallenge,
long challenge, int userId) 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);
}
diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java
index 39f054c..cb6cb21 100644
--- a/services/core/java/com/android/server/accounts/AccountManagerService.java
+++ b/services/core/java/com/android/server/accounts/AccountManagerService.java
@@ -2685,10 +2685,9 @@
boolean isPasswordForwardingAllowed = isPermitted(
callerPkg, uid, Manifest.permission.GET_PASSWORD);
- int usrId = UserHandle.getCallingUserId();
long identityToken = clearCallingIdentity();
try {
- UserAccounts accounts = getUserAccounts(usrId);
+ UserAccounts accounts = getUserAccounts(userId);
logRecordWithUid(accounts, DebugDbHelper.ACTION_CALLED_START_ACCOUNT_ADD,
TABLE_ACCOUNTS, uid);
new StartAccountSession(
@@ -2749,10 +2748,6 @@
checkKeyIntent(
Binder.getCallingUid(),
intent);
- // Omit passwords if the caller isn't permitted to see them.
- if (!mIsPasswordForwardingAllowed) {
- result.remove(AccountManager.KEY_PASSWORD);
- }
}
IAccountManagerResponse response;
if (mExpectActivityLaunch && result != null
@@ -2782,6 +2777,11 @@
return;
}
+ // Omit passwords if the caller isn't permitted to see them.
+ if (!mIsPasswordForwardingAllowed) {
+ result.remove(AccountManager.KEY_PASSWORD);
+ }
+
// Strip auth token from result.
result.remove(AccountManager.KEY_AUTHTOKEN);
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index c124e5d..b0eca19 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -3054,6 +3054,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();
@@ -3796,6 +3805,18 @@
app.killed = false;
app.killedByAm = false;
checkTime(startTime, "startProcess: starting to update pids map");
+ ProcessRecord oldApp;
+ synchronized (mPidsSelfLocked) {
+ oldApp = mPidsSelfLocked.get(startResult.pid);
+ }
+ // If there is already an app occupying that pid that hasn't been cleaned up
+ if (oldApp != 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*/);
+ }
synchronized (mPidsSelfLocked) {
this.mPidsSelfLocked.put(startResult.pid, app);
if (isActivityProcess) {
@@ -5012,7 +5033,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) {
@@ -11764,6 +11786,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);
@@ -16654,7 +16682,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);
@@ -16785,7 +16814,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));
@@ -20996,7 +21027,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/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index 4ead64b..5859d34 100644
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -3542,14 +3542,24 @@
final ActivityState prevState = r.state;
if (DEBUG_STATES) Slog.v(TAG_STATES, "Moving to FINISHING: " + r);
r.state = ActivityState.FINISHING;
+ final boolean finishingActivityInNonFocusedStack
+ = r.task.stack != mStackSupervisor.getFocusedStack()
+ && prevState == ActivityState.PAUSED && mode == FINISH_AFTER_VISIBLE;
if (mode == FINISH_IMMEDIATELY
|| (prevState == ActivityState.PAUSED
&& (mode == FINISH_AFTER_PAUSE || mStackId == PINNED_STACK_ID))
+ || finishingActivityInNonFocusedStack
|| prevState == ActivityState.STOPPED
|| prevState == ActivityState.INITIALIZING) {
r.makeFinishingLocked();
boolean activityRemoved = destroyActivityLocked(r, true, "finish-imm");
+
+ if (finishingActivityInNonFocusedStack) {
+ // Finishing activity that was in paused state and it was in not currently focused
+ // stack, need to make something visible in its place.
+ mStackSupervisor.ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS);
+ }
if (activityRemoved) {
mStackSupervisor.resumeFocusedStackTopActivityLocked();
}
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index 36207c4..4e03ec8 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) {
@@ -1049,7 +1070,7 @@
return r;
}
- // Return to the home stack.
+ // Look in other non-focused and non-home stacks.
final ArrayList<ActivityStack> stacks = mHomeStack.mStacks;
for (int stackNdx = stacks.size() - 1; stackNdx >= 0; --stackNdx) {
final ActivityStack stack = stacks.get(stackNdx);
@@ -2151,6 +2172,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) {
@@ -2331,6 +2378,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) {
@@ -2403,6 +2454,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
diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java
index 7b3f65a..ba497c7 100644
--- a/services/core/java/com/android/server/am/ActivityStarter.java
+++ b/services/core/java/com/android/server/am/ActivityStarter.java
@@ -623,10 +623,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/BroadcastQueue.java b/services/core/java/com/android/server/am/BroadcastQueue.java
index a279290..f78f29c 100644
--- a/services/core/java/com/android/server/am/BroadcastQueue.java
+++ b/services/core/java/com/android/server/am/BroadcastQueue.java
@@ -302,6 +302,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/connectivity/PacManager.java b/services/core/java/com/android/server/connectivity/PacManager.java
index 7d1da01..58c76ec 100644
--- a/services/core/java/com/android/server/connectivity/PacManager.java
+++ b/services/core/java/com/android/server/connectivity/PacManager.java
@@ -27,6 +27,7 @@
import android.net.ProxyInfo;
import android.net.Uri;
import android.os.Handler;
+import android.os.HandlerThread;
import android.os.IBinder;
import android.os.RemoteException;
import android.os.ServiceManager;
@@ -39,10 +40,10 @@
import com.android.net.IProxyCallback;
import com.android.net.IProxyPortListener;
import com.android.net.IProxyService;
-import com.android.server.IoThread;
import libcore.io.Streams;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
@@ -66,6 +67,7 @@
private static final int DELAY_1 = 0;
private static final int DELAY_4 = 3;
private static final int DELAY_LONG = 4;
+ private static final long MAX_PAC_SIZE = 20 * 1000 * 1000;
/** Keep these values up-to-date with ProxyService.java */
public static final String KEY_PROXY = "keyProxy";
@@ -123,15 +125,21 @@
}
};
+ private final HandlerThread mNetThread = new HandlerThread("android.pacmanager",
+ android.os.Process.THREAD_PRIORITY_DEFAULT);
+ private final Handler mNetThreadHandler;
+
class PacRefreshIntentReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
- IoThread.getHandler().post(mPacDownloader);
+ mNetThreadHandler.post(mPacDownloader);
}
}
public PacManager(Context context, Handler handler, int proxyMessage) {
mContext = context;
mLastPort = -1;
+ mNetThread.start();
+ mNetThreadHandler = new Handler(mNetThread.getLooper());
mPacRefreshIntent = PendingIntent.getBroadcast(
context, 0, new Intent(ACTION_PAC_REFRESH), 0);
@@ -199,7 +207,25 @@
private static String get(Uri pacUri) throws IOException {
URL url = new URL(pacUri.toString());
URLConnection urlConnection = url.openConnection(java.net.Proxy.NO_PROXY);
- return new String(Streams.readFully(urlConnection.getInputStream()));
+ long contentLength = -1;
+ try {
+ contentLength = Long.parseLong(urlConnection.getHeaderField("Content-Length"));
+ } catch (NumberFormatException e) {
+ // Ignore
+ }
+ if (contentLength > MAX_PAC_SIZE) {
+ throw new IOException("PAC too big: " + contentLength + " bytes");
+ }
+ ByteArrayOutputStream bytes = new ByteArrayOutputStream();
+ byte[] buffer = new byte[1024];
+ int count;
+ while ((count = urlConnection.getInputStream().read(buffer)) != -1) {
+ bytes.write(buffer, 0, count);
+ if (bytes.size() > MAX_PAC_SIZE) {
+ throw new IOException("PAC too big");
+ }
+ }
+ return bytes.toString();
}
private int getNextDelay(int currentDelay) {
@@ -267,7 +293,7 @@
intent.setClassName(PAC_PACKAGE, PAC_SERVICE);
if ((mProxyConnection != null) && (mConnection != null)) {
// Already bound no need to bind again, just download the new file.
- IoThread.getHandler().post(mPacDownloader);
+ mNetThreadHandler.post(mPacDownloader);
return;
}
mConnection = new ServiceConnection() {
@@ -297,7 +323,7 @@
} catch (RemoteException e) {
Log.e(TAG, "Unable to reach ProxyService - PAC will not be started", e);
}
- IoThread.getHandler().post(mPacDownloader);
+ mNetThreadHandler.post(mPacDownloader);
}
}
}
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 a4d2cd2..70e7b7e 100644
--- a/services/core/java/com/android/server/media/MediaSessionService.java
+++ b/services/core/java/com/android/server/media/MediaSessionService.java
@@ -47,6 +47,7 @@
import android.os.IBinder;
import android.os.Message;
import android.os.PowerManager;
+import android.os.Process;
import android.os.RemoteException;
import android.os.ResultReceiver;
import android.os.ServiceManager;
@@ -763,6 +764,13 @@
+ "setup is in progress.");
return;
}
+ if (isGlobalPriorityActive() && uid != Process.SYSTEM_UID) {
+ // Prevent dispatching key event through reflection while the global priority
+ // session is active.
+ Slog.i(TAG, "Only the system can dispatch media key event "
+ + "to the global priority session.");
+ return;
+ }
synchronized (mLock) {
// If we don't have a media button receiver to fall back on
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 0019973..4e542e1c 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -15933,6 +15933,12 @@
+ e.getMessage());
return false;
}
+ try {
+ // update shared libraries for the newly re-installed system package
+ updateSharedLibrariesLPw(newPkg, null);
+ } catch (PackageManagerException e) {
+ Slog.e(TAG, "updateAllSharedLibrariesLPw failed: " + e.getMessage());
+ }
prepareAppDataAfterInstallLIF(newPkg);
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index d8a1c77..632a98e 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -548,7 +548,7 @@
public List<UserInfo> getProfiles(int userId, boolean enabledOnly) {
boolean returnFullInfo = true;
if (userId != UserHandle.getCallingUserId()) {
- checkManageUsersPermission("getting profiles related to user " + userId);
+ checkManageOrCreateUsersPermission("getting profiles related to user " + userId);
} else {
returnFullInfo = hasManageUsersPermission();
}
diff --git a/services/core/java/com/android/server/pm/UserRestrictionsUtils.java b/services/core/java/com/android/server/pm/UserRestrictionsUtils.java
index 38a3f42..1f1c6f8 100644
--- a/services/core/java/com/android/server/pm/UserRestrictionsUtils.java
+++ b/services/core/java/com/android/server/pm/UserRestrictionsUtils.java
@@ -330,6 +330,9 @@
// set, and in that case even if the restriction is lifted, changing it to ON would be
// wrong. So just don't do anything in such a case. If the user hopes to enable location
// later, they can do it on the Settings UI.
+ // WARNING: Remember that Settings.Global and Settings.Secure are changeable via adb.
+ // To prevent this from happening for a given user restriction, you have to add a check to
+ // SettingsProvider.isGlobalOrSecureSettingRestrictedForUser.
final ContentResolver cr = context.getContentResolver();
final long id = Binder.clearCallingIdentity();
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index b528016..2aaf945 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -53,6 +53,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;
@@ -1366,6 +1367,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));
@@ -4181,6 +4186,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 {
diff --git a/services/net/java/android/net/apf/ApfFilter.java b/services/net/java/android/net/apf/ApfFilter.java
index ce37426..bae889c 100644
--- a/services/net/java/android/net/apf/ApfFilter.java
+++ b/services/net/java/android/net/apf/ApfFilter.java
@@ -131,6 +131,7 @@
private static final int ICMP6_TYPE_OFFSET = ETH_HEADER_LEN + IPV6_HEADER_LEN;
private static final int ICMP6_NEIGHBOR_ANNOUNCEMENT = 136;
+ private static final int ICMP6_ROUTER_ADVERTISEMENT = 134;
// NOTE: this must be added to the IPv4 header length in IPV4_HEADER_SIZE_MEMORY_SLOT
private static final int UDP_DESTINATION_PORT_OFFSET = ETH_HEADER_LEN + 2;
@@ -306,7 +307,11 @@
}
private long uint32(int s) {
- return s & 0xffffffff;
+ return s & 0xffffffffL;
+ }
+
+ private long getUint16(ByteBuffer buffer, int position) {
+ return uint16(buffer.getShort(position));
}
private void prefixOptionToString(StringBuffer sb, int offset) {
@@ -375,6 +380,15 @@
mPacket.clear();
mLastSeen = curTime();
+ // Sanity check packet in case a packet arrives before we attach RA filter
+ // to our packet socket. b/29586253
+ if (getUint16(mPacket, ETH_ETHERTYPE_OFFSET) != ETH_P_IPV6 ||
+ uint8(mPacket.get(IPV6_NEXT_HEADER_OFFSET)) != IPPROTO_ICMPV6 ||
+ uint8(mPacket.get(ICMP6_TYPE_OFFSET)) != ICMP6_ROUTER_ADVERTISEMENT) {
+ throw new IllegalArgumentException("Not an ICMP6 router advertisement");
+ }
+
+
// Ignore the checksum.
int lastNonLifetimeStart = addNonLifetime(0,
ICMP6_RA_CHECKSUM_OFFSET,